on master help sign in
4970 files changed+317396−352
since splitsnapshots
unifiedsplit
.github/workflows/build_docs.yaml+54 .gitignore+1 app/Main.hs+12−7 docs/.vscode/settings.json+22 docs/bibl.bib+217 docs/default.nix+40 docs/en_pres/img/lsp.png docs/en_pres/img/nixpkgs.png docs/en_pres/pres.md+112 docs/en_pres/pres.pdf docs/localSettings.yaml+7 docs/nix/sources.json+38 docs/nix/sources.nix+171 docs/paper.lhs+1215 docs/pres/img/lsp.png docs/pres/img/nixpkgs.png docs/pres/pres.md+213 docs/pres/pres.pdf docs/pres_2/img/nixpkgs.png docs/pres_2/img/paper.png docs/pres_2/img/ter.png docs/pres_2/pres.md+407 docs/pres_2/pres.pdf docs/project_proposal.tex+131 docs/tech_spec.tex+252 docs/trfrac.sty+193 package.yaml+35−2 paper.pdf src/Control/Monad/Freer/Fresh.hs+53 src/Control/Monad/Freer/TreeTracer.hs+38 src/Data/Map/Extra.hs+13 src/Data/Map/MultiKey/Strict.hs+105 src/Data/Map/Shifted/Strict.hs+39 src/Lib.hs−7 src/Tix/Builtins.hs+68 src/Tix/Typechecker.hs+781−331 src/Tix/Types.hs+304 stack.yaml+9−3 test/Spec.hs−2 test/golden/importless/0.1.nix+47 test/golden/importless/0.1.txt+40 test/golden/importless/0.10.nix+39 test/golden/importless/0.10.txt+42 test/golden/importless/0.11.1.nix+22 test/golden/importless/0.11.1.txt+18 test/golden/importless/0.11.nix+6 test/golden/importless/0.11.txt+1 test/golden/importless/0.12.nix+6 test/golden/importless/0.12.txt+1 test/golden/importless/0.13.nix+514 test/golden/importless/0.14.1.nix+21 test/golden/importless/0.14.1.txt+17 test/golden/importless/0.14.nix+25 test/golden/importless/0.17.1.nix+21 test/golden/importless/0.17.1.txt+17 test/golden/importless/0.18.0.nix+63 test/golden/importless/0.18.0.txt+30 test/golden/importless/0.2.nix+49 test/golden/importless/0.2.txt+55 test/golden/importless/0.20.0.nix+21 test/golden/importless/0.20.0.txt+17 test/golden/importless/0.29.nix+49 test/golden/importless/0.29.txt+42 test/golden/importless/0.3.3.nix+7 test/golden/importless/0.3.3.txt+5 test/golden/importless/0.4.nix+29 test/golden/importless/0.5.1.nix+17 test/golden/importless/0.5.1.txt+6 test/golden/importless/0.6.nix+45 test/golden/importless/0.6.txt+35 test/golden/importless/0.61.nix+68 test/golden/importless/0.61.txt+62 test/golden/importless/0.7.nix+45 test/golden/importless/0.7.txt+35 test/golden/importless/0.8.2.nix+30 test/golden/importless/0.8.5.nix+30 test/golden/importless/0.8.5.txt+33 test/golden/importless/0.8.nix+55 test/golden/importless/0.9.1.nix+33 test/golden/importless/0.9.5.nix+21 test/golden/importless/0.9.5.txt+18 test/golden/importless/0.9.6.nix+21 test/golden/importless/0.9.6.txt+18 test/golden/importless/0.9.8.6-rc1.nix+43 test/golden/importless/0.9.nix+51 test/golden/importless/0.9.txt+35 test/golden/importless/0.nix+26 test/golden/importless/0.txt+39 test/golden/importless/0.x.nix+72 test/golden/importless/0.x.txt+41 test/golden/importless/1-default.nix+46 test/golden/importless/1-default.txt+48 test/golden/importless/1.0.0.nix+37 test/golden/importless/1.0.0.txt+43 test/golden/importless/1.0.nix+36 test/golden/importless/1.0.txt+34 test/golden/importless/1.00.37.nix+98 test/golden/importless/1.00.37.txt+34 test/golden/importless/1.10.nix+51 test/golden/importless/1.10.txt+33 test/golden/importless/1.10.x.nix+42 test/golden/importless/1.14.nix+252 test/golden/importless/1.15.nix+255 test/golden/importless/1.2.2.nix+92 test/golden/importless/1.2.2.txt+42 test/golden/importless/1.2.nix+21 test/golden/importless/1.2.txt+27 test/golden/importless/1.3.nix+160 test/golden/importless/1.3.txt+87 test/golden/importless/1.4.nix+22 test/golden/importless/1.4.txt+16 test/golden/importless/1.43.nix+35 test/golden/importless/1.5.nix+32 test/golden/importless/1.5.txt+35 test/golden/importless/1.55.nix+12 test/golden/importless/1.55.txt+6 test/golden/importless/1.59.nix+10 test/golden/importless/1.59.txt+7 test/golden/importless/1.6.nix+7 test/golden/importless/1.6.txt+5 test/golden/importless/1.60.nix+11 test/golden/importless/1.60.txt+7 test/golden/importless/1.65.nix+12 test/golden/importless/1.65.txt+7 test/golden/importless/1.66.nix+11 test/golden/importless/1.66.txt+7 test/golden/importless/1.67.nix+39 test/golden/importless/1.67.txt+12 test/golden/importless/1.68.nix+11 test/golden/importless/1.68.txt+8 test/golden/importless/1.69.nix+11 test/golden/importless/1.69.txt+8 test/golden/importless/1.7.nix+27 test/golden/importless/1.70.nix+11 test/golden/importless/1.70.txt+8 test/golden/importless/1.71.nix+15 test/golden/importless/1.71.txt+8 test/golden/importless/1.72.nix+16 test/golden/importless/1.72.txt+8 test/golden/importless/1.8.5.nix+79 test/golden/importless/1.8.5.txt+52 test/golden/importless/1.8.nix+80 test/golden/importless/1.8.txt+54 test/golden/importless/1.9.0.nix+36 test/golden/importless/1.9.nix+51 test/golden/importless/1.9.x.nix+45 test/golden/importless/1.nix+31 test/golden/importless/1.x.nix+34 test/golden/importless/1.x.txt+36 test/golden/importless/10.5.x.nix+61 test/golden/importless/10.5.x.txt+49 test/golden/importless/10.nix+136 test/golden/importless/108.08.00.nix+27 test/golden/importless/109.60.01.nix+26 test/golden/importless/11.1.nix+41 test/golden/importless/11.1.txt+49 test/golden/importless/11.nix+61 test/golden/importless/112.01.01.nix+20 test/golden/importless/112.01.01.txt+25 test/golden/importless/12.nix+31 test/golden/importless/12.txt+29 test/golden/importless/14.nix+115 test/golden/importless/16.1.2.nix+84 test/golden/importless/16.1.2.txt+47 test/golden/importless/17.nix+36 test/golden/importless/17.txt+30 test/golden/importless/1_1.nix+25 test/golden/importless/1_12.nix+27 test/golden/importless/1_8.nix+183 test/golden/importless/1_x.nix+37 test/golden/importless/1_x.txt+34 test/golden/importless/1compat.nix+30 test/golden/importless/1compat.txt+8 test/golden/importless/2-default.nix+89 test/golden/importless/2.0.0.nix+57 test/golden/importless/2.0.0.txt+42 test/golden/importless/2.0.nix+21 test/golden/importless/2.0.txt+31 test/golden/importless/2.0x.nix+134 test/golden/importless/2.1.1.nix+70 test/golden/importless/2.1.1.txt+41 test/golden/importless/2.1.nix+6 test/golden/importless/2.1.txt+5 test/golden/importless/2.10.nix+43 test/golden/importless/2.10.txt+31 test/golden/importless/2.11.nix+48 test/golden/importless/2.11.txt+31 test/golden/importless/2.12.nix+47 test/golden/importless/2.12.txt+30 test/golden/importless/2.13.nix+47 test/golden/importless/2.13.txt+30 test/golden/importless/2.14.0.nix+41 test/golden/importless/2.2.0.nix+98 test/golden/importless/2.2.0.txt+35 test/golden/importless/2.2.nix+6 test/golden/importless/2.2.txt+5 test/golden/importless/2.22.nix+45 test/golden/importless/2.22.txt+30 test/golden/importless/2.26.nix+41 test/golden/importless/2.26.txt+32 test/golden/importless/2.4.0.nix+25 test/golden/importless/2.4.0.txt+17 test/golden/importless/2.4.nix+97 test/golden/importless/2.4.txt+79 test/golden/importless/2.5.35.nix+33 test/golden/importless/2.5.35.txt+37 test/golden/importless/2.5.nix+10 test/golden/importless/2.5.txt+6 test/golden/importless/2.6.1.nix+36 test/golden/importless/2.6.1.txt+32 test/golden/importless/2.6.13-pre.nix+51 test/golden/importless/2.6.13-pre.txt+45 test/golden/importless/2.6.2.nix+80 test/golden/importless/2.6.2.txt+31 test/golden/importless/2.64.nix+51 test/golden/importless/2.64.txt+31 test/golden/importless/2.7-html.nix+18 test/golden/importless/2.7-html.txt+10 test/golden/importless/2.7-pdf-a4.nix+18 test/golden/importless/2.7-pdf-a4.txt+10 test/golden/importless/2.7-pdf-letter.nix+18 test/golden/importless/2.7-pdf-letter.txt+10 test/golden/importless/2.7-text.nix+18 test/golden/importless/2.7-text.txt+10 test/golden/importless/2.7.7.nix+26 test/golden/importless/2.7.7.txt+28 test/golden/importless/2.7.nix+31 test/golden/importless/2.8.nix+7 test/golden/importless/2.8.txt+5 test/golden/importless/2.9.nix+74 test/golden/importless/2.90.nix+41 test/golden/importless/2.90.txt+42 test/golden/importless/2.nix+35 test/golden/importless/2.txt+34 test/golden/importless/2.x.nix+46 test/golden/importless/2.x.txt+39 test/golden/importless/2.x.x.nix+58 test/golden/importless/2.x.x.txt+47 test/golden/importless/20160331.nix+22 test/golden/importless/20160331.txt+36 test/golden/importless/2018.nix+21 test/golden/importless/25.nix+62 test/golden/importless/25.txt+46 test/golden/importless/26.nix+40 test/golden/importless/26.txt+41 test/golden/importless/2_2.nix+38 test/golden/importless/2_4.nix+6 test/golden/importless/2_4.txt+5 test/golden/importless/2_5.nix+27 test/golden/importless/2bwm.nix+37 test/golden/importless/2bwm.txt+24 test/golden/importless/3.0.nix+6 test/golden/importless/3.0.txt+5 test/golden/importless/3.0.x.nix+35 test/golden/importless/3.0.x.txt+26 test/golden/importless/3.08.0.nix+21 test/golden/importless/3.08.0.txt+23 test/golden/importless/3.1.nix+37 test/golden/importless/3.1.txt+14 test/golden/importless/3.10.0.nix+34 test/golden/importless/3.10.0.txt+33 test/golden/importless/3.10.nix+6 test/golden/importless/3.10.txt+2 test/golden/importless/3.11.2.nix+75 test/golden/importless/3.11.nix+6 test/golden/importless/3.11.txt+5 test/golden/importless/3.12.1.nix+69 test/golden/importless/3.12.1.txt+42 test/golden/importless/3.12.nix+6 test/golden/importless/3.12.txt+2 test/golden/importless/3.13.nix+6 test/golden/importless/3.13.txt+2 test/golden/importless/3.17.nix+36 test/golden/importless/3.4.nix+36 test/golden/importless/3.4.txt+32 test/golden/importless/3.44.nix+144 test/golden/importless/3.5.nix+12 test/golden/importless/3.5.txt+8 test/golden/importless/3.6.nix+6 test/golden/importless/3.6.txt+2 test/golden/importless/3.7-html.nix+18 test/golden/importless/3.7-html.txt+10 test/golden/importless/3.7-pdf-a4.nix+18 test/golden/importless/3.7-pdf-a4.txt+10 test/golden/importless/3.7-pdf-letter.nix+18 test/golden/importless/3.7-pdf-letter.txt+10 test/golden/importless/3.7-text.nix+18 test/golden/importless/3.7-text.txt+10 test/golden/importless/3.7.nix+6 test/golden/importless/3.7.txt+2 test/golden/importless/3.8.nix+6 test/golden/importless/3.8.txt+2 test/golden/importless/3.9.nix+6 test/golden/importless/3.9.txt+2 test/golden/importless/3.nix+18 test/golden/importless/3.txt+33 test/golden/importless/3.x.nix+38 test/golden/importless/3.x.txt+38 test/golden/importless/38.nix+71 test/golden/importless/38.txt+50 test/golden/importless/3_1.nix+6 test/golden/importless/3_1.txt+5 test/golden/importless/3dovideo.nix+61 test/golden/importless/3dovideo.txt+35 test/golden/importless/3proxy.nix+426 test/golden/importless/4.0.nix+41 test/golden/importless/4.0.txt+40 test/golden/importless/4.00.1.nix+67 test/golden/importless/4.00.1.txt+41 test/golden/importless/4.01.17.nix+82 test/golden/importless/4.01.17.txt+35 test/golden/importless/4.1.nix+37 test/golden/importless/4.1.txt+14 test/golden/importless/4.13a.nix+19 test/golden/importless/4.13a.txt+20 test/golden/importless/4.2.1.nix+29 test/golden/importless/4.2.1.txt+32 test/golden/importless/4.2.nix+43 test/golden/importless/4.2.txt+36 test/golden/importless/4.25.nix+53 test/golden/importless/4.25.txt+40 test/golden/importless/4.29.nix+38 test/golden/importless/4.29.txt+33 test/golden/importless/4.3.2.nix+75 test/golden/importless/4.3.2.txt+38 test/golden/importless/4.4.nix+100 test/golden/importless/4.4.txt+46 test/golden/importless/4.7.nix+84 test/golden/importless/4.9.9.nix+26 test/golden/importless/4.9.9.txt+29 test/golden/importless/4.9.nix+71 test/golden/importless/4.nix+9 test/golden/importless/4.txt+15 test/golden/importless/4.x.nix+157 test/golden/importless/422.nix+33 test/golden/importless/422.txt+26 test/golden/importless/44.0.nix+74 test/golden/importless/44.0.txt+54 test/golden/importless/4_0.nix+33 test/golden/importless/5.1.138.nix+29 test/golden/importless/5.1.138.txt+20 test/golden/importless/5.1.x.nix+78 test/golden/importless/5.2.nix+20 test/golden/importless/5.2.txt+25 test/golden/importless/5.41.nix+102 test/golden/importless/5.41.txt+48 test/golden/importless/5.6.nix+34 test/golden/importless/5.6.txt+33 test/golden/importless/5.6.x.nix+61 test/golden/importless/5.6.x.txt+41 test/golden/importless/5.7.nix+40 test/golden/importless/5.7.txt+40 test/golden/importless/5.7.x.nix+85 test/golden/importless/5.7.x.txt+65 test/golden/importless/5.9.0.nix+136 test/golden/importless/5.nix+25 test/golden/importless/5.txt+30 test/golden/importless/5.x.nix+29 test/golden/importless/5.x.txt+33 test/golden/importless/5_x.nix+199 test/golden/importless/6.3.nix+53 test/golden/importless/6.3.txt+32 test/golden/importless/6.30.163.46.nix+29 test/golden/importless/6.30.163.46.txt+26 test/golden/importless/6.nix+9 test/golden/importless/6.txt+15 test/golden/importless/6.x.nix+45 test/golden/importless/6.x.txt+27 test/golden/importless/60.nix+83 test/golden/importless/60.txt+53 test/golden/importless/68.nix+95 test/golden/importless/68.txt+60 test/golden/importless/68_sources.nix+615 test/golden/importless/68_sources.txt+3 test/golden/importless/6_qt4.nix+41 test/golden/importless/6_qt4.txt+39 test/golden/importless/7.0.nix+88 test/golden/importless/7.3.nix+29 test/golden/importless/7.3.txt+45 test/golden/importless/7.6.6.nix+74 test/golden/importless/7.6.6.txt+46 test/golden/importless/7.x.nix+36 test/golden/importless/7.x.txt+28 test/golden/importless/78.nix+118 test/golden/importless/78.txt+60 test/golden/importless/8.0.x.nix+73 test/golden/importless/8.0.x.txt+56 test/golden/importless/8.10.1.nix+258 test/golden/importless/8.10.2-binary.nix+222 test/golden/importless/8.10.2.nix+253 test/golden/importless/8.5.nix+10 test/golden/importless/8.5.txt+7 test/golden/importless/8.6.5-binary.nix+165 test/golden/importless/8.6.5.nix+267 test/golden/importless/8.6.nix+12 test/golden/importless/8.6.txt+11 test/golden/importless/8.8.2.nix+253 test/golden/importless/8.8.3.nix+258 test/golden/importless/8.8.4.nix+265 test/golden/importless/8.nix+65 test/golden/importless/825_40_1.nix+13 test/golden/importless/825_40_1.txt+6 test/golden/importless/8_0.nix+14 test/golden/importless/8_0.txt+11 test/golden/importless/9.2.nix+65 test/golden/importless/9.2.txt+43 test/golden/importless/9.nix+122 test/golden/importless/9.x.nix+95 test/golden/importless/9.x.txt+67 test/golden/importless/Cargo.nix+64 test/golden/importless/Cargo.txt+55 test/golden/importless/HEAD.nix+266 test/golden/importless/LASzip2.nix+21 test/golden/importless/LASzip2.txt+24 test/golden/importless/Prelude.nix+59 test/golden/importless/Prelude.txt+27 test/golden/importless/R16B02-basho.nix+65 test/golden/importless/R16B02-basho.txt+34 test/golden/importless/R18.nix+34 test/golden/importless/R18.txt+5 test/golden/importless/R19.nix+19 test/golden/importless/R19.txt+6 test/golden/importless/R20.nix+10 test/golden/importless/R20.txt+4 test/golden/importless/R21.nix+10 test/golden/importless/R21.txt+4 test/golden/importless/SystemdJournal2Gelf.nix+59 test/golden/importless/_3bmd.nix+30 test/golden/importless/_3bmd.txt+16 test/golden/importless/abnf.nix+27 test/golden/importless/abnf.txt+16 test/golden/importless/account-service-util.nix+44 test/golden/importless/account-service-util.txt+28 test/golden/importless/accountsservice.nix+58 test/golden/importless/accountsservice.txt+32 test/golden/importless/acpid.nix+156 test/golden/importless/acpilight.nix+24 test/golden/importless/acpilight.txt+14 test/golden/importless/actkbd.nix+133 test/golden/importless/adb.nix+30 test/golden/importless/adb.txt+30 test/golden/importless/addons.nix+964 test/golden/importless/addons.txt+478 test/golden/importless/advanced.nix+26 test/golden/importless/advanced.txt+38 test/golden/importless/aerospike.nix+156 test/golden/importless/aether-util.nix+15 test/golden/importless/afterstep.nix+25 test/golden/importless/afterstep.txt+24 test/golden/importless/agda-packages.nix+30 test/golden/importless/age.nix+65 test/golden/importless/agent.nix+29 test/golden/importless/agent.txt+33 test/golden/importless/agetty.nix+117 test/golden/importless/aggregator.nix+35 test/golden/importless/aggregator.txt+8 test/golden/importless/airsonic.nix+155 test/golden/importless/ais.nix+40 test/golden/importless/ais.txt+43 test/golden/importless/akonadi-calendar.nix+20 test/golden/importless/akonadi-calendar.txt+23 test/golden/importless/akonadi-contacts.nix+25 test/golden/importless/akonadi-contacts.txt+28 test/golden/importless/akonadi-mime.nix+16 test/golden/importless/akonadi-mime.txt+21 test/golden/importless/akonadi-notes.nix+18 test/golden/importless/akonadi-notes.txt+21 test/golden/importless/akonadi-search.nix+20 test/golden/importless/akonadi-search.txt+26 test/golden/importless/akonadiconsole.nix+21 test/golden/importless/akonadiconsole.txt+31 test/golden/importless/akregator.nix+30 test/golden/importless/akregator.txt+32 test/golden/importless/alerta.nix+115 test/golden/importless/alertmanager.nix+41 test/golden/importless/alexandria.nix+26 test/golden/importless/alexandria.txt+11 test/golden/importless/aliases.nix+143 test/golden/importless/all.nix+15 test/golden/importless/alsamixer.app.nix+27 test/golden/importless/alsamixer.app.txt+31 test/golden/importless/alternatives-plugin.nix+25 test/golden/importless/alternatives-plugin.txt+29 test/golden/importless/amazon-init.nix+60 test/golden/importless/amazon-init.txt+17 test/golden/importless/amazon-options.nix+21 test/golden/importless/amazon-options.txt+13 test/golden/importless/amd-microcode.nix+29 test/golden/importless/amd-microcode.txt+16 test/golden/importless/amd.nix+29 test/golden/importless/amd.txt+19 test/golden/importless/amdgpu-pro.nix+68 test/golden/importless/amdgpu-pro.txt+55 test/golden/importless/amdgpu.nix+9 test/golden/importless/amdgpu.txt+10 test/golden/importless/amuled.nix+77 test/golden/importless/anaphora.nix+27 test/golden/importless/anaphora.txt+12 test/golden/importless/anbox.nix+139 test/golden/importless/androidndk-pkgs.nix+113 test/golden/importless/animal-sniffer.nix+15 test/golden/importless/ankisyncd.nix+79 test/golden/importless/ant-bloody.nix+34 test/golden/importless/ant-bloody.txt+29 test/golden/importless/ant-build.nix+122 test/golden/importless/ant-dracula.nix+34 test/golden/importless/ant-dracula.txt+29 test/golden/importless/ant-launcher.nix+14 test/golden/importless/ant-nebula.nix+34 test/golden/importless/ant-nebula.txt+29 test/golden/importless/ant.nix+34 test/golden/importless/ant.txt+29 test/golden/importless/apache-kafka.nix+154 test/golden/importless/apcupsd-exporter.nix+26 test/golden/importless/apcupsd-exporter.txt+31 test/golden/importless/apcupsd.nix+38 test/golden/importless/apcupsd.txt+15 test/golden/importless/apeclex.nix+8 test/golden/importless/apeclex.txt+13 test/golden/importless/apiextractor.nix+25 test/golden/importless/apiextractor.txt+32 test/golden/importless/apparmor.nix+65 test/golden/importless/appdaemon.nix+70 test/golden/importless/appdaemon.txt+71 test/golden/importless/appliance.nix+11 test/golden/importless/appliance.txt+10 test/golden/importless/appmenu-gtk-module.nix+31 test/golden/importless/appmenu-gtk-module.txt+27 test/golden/importless/appstream.nix+25 test/golden/importless/appstream.txt+11 test/golden/importless/arbtt.nix+63 test/golden/importless/architectures.nix+77 test/golden/importless/archive-version.nix+11 test/golden/importless/archive-version.txt+8 test/golden/importless/archiver.nix+25 test/golden/importless/aria2.nix+131 test/golden/importless/array-utils.nix+25 test/golden/importless/array-utils.txt+11 test/golden/importless/array.nix+22 test/golden/importless/array.txt+23 test/golden/importless/artifact-manager.nix+47 test/golden/importless/artifact.nix+69 test/golden/importless/asdf-finalizers.nix+26 test/golden/importless/asdf-finalizers.txt+11 test/golden/importless/asdf-package-system.nix+25 test/golden/importless/asdf-package-system.txt+11 test/golden/importless/asdf-system-connections.nix+26 test/golden/importless/asdf-system-connections.txt+11 test/golden/importless/asm-all.nix+15 test/golden/importless/aspell-with-dicts.nix+36 test/golden/importless/aspell-with-dicts.txt+8 test/golden/importless/assertions.nix+34 test/golden/importless/asserts.nix+44 test/golden/importless/assets.nix+55 test/golden/importless/assets.txt+29 test/golden/importless/asterisk.nix+264 test/golden/importless/async-rpc-kernel.nix+18 test/golden/importless/async-rpc-kernel.txt+35 test/golden/importless/async.nix+22 test/golden/importless/at-spi2-core.nix+49 test/golden/importless/atd.nix+109 test/golden/importless/atftpd.nix+65 test/golden/importless/ati.nix+40 test/golden/importless/ati.txt+28 test/golden/importless/atop.nix+36 test/golden/importless/atop.txt+20 test/golden/importless/attica.nix+12 test/golden/importless/attica.txt+14 test/golden/importless/attrsOf-conditional-check.nix+7 test/golden/importless/attrsOf-conditional-check.txt+9 test/golden/importless/attrsOf-lazy-check.nix+7 test/golden/importless/attrset-to-dir.nix+20 test/golden/importless/audit.nix+123 test/golden/importless/auditd.nix+31 test/golden/importless/auditd.txt+32 test/golden/importless/auth.nix+29 test/golden/importless/auth.txt+33 test/golden/importless/auto-upgrade.nix+169 test/golden/importless/auto.nix+68 test/golden/importless/autofig.nix+10 test/golden/importless/autofig.txt+6 test/golden/importless/autofs.nix+99 test/golden/importless/autojump.nix+33 test/golden/importless/automake-1.11.x.nix+49 test/golden/importless/automake-1.11.x.txt+34 test/golden/importless/automake-1.15.x.nix+45 test/golden/importless/automake-1.15.x.txt+35 test/golden/importless/automake-1.16.x.nix+43 test/golden/importless/automake-1.16.x.txt+34 test/golden/importless/automysqlbackup.nix+118 test/golden/importless/autorandr.nix+52 test/golden/importless/autorandr.txt+42 test/golden/importless/autossh.nix+113 test/golden/importless/autostart.nix+26 test/golden/importless/autostart.txt+19 test/golden/importless/avahi-daemon.nix+285 test/golden/importless/awesome.nix+66 test/golden/importless/aws-s3-exporter.nix+26 test/golden/importless/aws-s3-exporter.txt+27 test/golden/importless/aws-s3-exporter_deps.nix+336 test/golden/importless/aws-s3-exporter_deps.txt+4 test/golden/importless/azure-agent.nix+198 test/golden/importless/azure-agent.txt+104 test/golden/importless/azure-bootstrap-blobs.nix+3 test/golden/importless/azure-bootstrap-blobs.txt+1 test/golden/importless/azure-images.nix+5 test/golden/importless/azure-images.txt+1 test/golden/importless/b43.nix+34 test/golden/importless/b43.txt+19 test/golden/importless/babashka.nix+84 test/golden/importless/babel-streams.nix+30 test/golden/importless/babel-streams.txt+17 test/golden/importless/babel.nix+27 test/golden/importless/babel.txt+15 test/golden/importless/babeld.nix+95 test/golden/importless/backend-params-submodule.nix+131 test/golden/importless/backend.nix+48 test/golden/importless/backend.txt+53 test/golden/importless/bacula.nix+556 test/golden/importless/baloo-widgets.nix+18 test/golden/importless/baloo-widgets.txt+21 test/golden/importless/baloo.nix+17 test/golden/importless/baloo.txt+26 test/golden/importless/bamf.nix+27 test/golden/importless/bamf.txt+20 test/golden/importless/bandwhich.nix+29 test/golden/importless/bandwhich.txt+26 test/golden/importless/base.nix+57 test/golden/importless/base.txt+41 test/golden/importless/bash-4.4-patches.nix+27 test/golden/importless/bash-4.4-patches.txt+1 test/golden/importless/bash-5.0-patches.nix+21 test/golden/importless/bash-5.0-patches.txt+1 test/golden/importless/bash-my-aws.nix+25 test/golden/importless/bash-my-aws.txt+17 test/golden/importless/bash-tools-test.nix+44 test/golden/importless/bash-tools-test.txt+9 test/golden/importless/bazarr.nix+76 test/golden/importless/bcache.nix+13 test/golden/importless/bcache.txt+6 test/golden/importless/bcachefs.nix+65 test/golden/importless/bcachefs.txt+26 test/golden/importless/bcc-git.nix+31 test/golden/importless/bcc-git.txt+27 test/golden/importless/bcc.nix+9 test/golden/importless/bcc.txt+20 test/golden/importless/beam-packages.nix+121 test/golden/importless/bean-add.nix+31 test/golden/importless/bean-add.txt+20 test/golden/importless/beanstalkd.nix+63 test/golden/importless/beautifulsoup.nix+20 test/golden/importless/beautifulsoup.txt+12 test/golden/importless/bees.nix+123 test/golden/importless/bepasty.nix+179 test/golden/importless/ber-metaocaml.nix+96 test/golden/importless/ber-metaocaml.txt+53 test/golden/importless/berry.nix+25 test/golden/importless/berry.txt+24 test/golden/importless/beta.nix+51 test/golden/importless/beta.txt+42 test/golden/importless/beta_sources.nix+965 test/golden/importless/beta_sources.txt+3 test/golden/importless/bg.nix+36 test/golden/importless/bg.txt+41 test/golden/importless/bi.nix+27 test/golden/importless/bi.txt+27 test/golden/importless/biboumi.nix+269 test/golden/importless/bifunctors.nix+21 test/golden/importless/bifunctors.txt+13 test/golden/importless/bin.nix+28 test/golden/importless/bin.txt+27 test/golden/importless/bin_prot.nix+17 test/golden/importless/bin_prot.txt+26 test/golden/importless/binary-hashes.nix+15 test/golden/importless/binary-hashes.txt+5 test/golden/importless/binary-tarball.nix+78 test/golden/importless/binary-tarball.txt+25 test/golden/importless/binary.nix+38 test/golden/importless/binary.txt+34 test/golden/importless/bind-exporter.nix+26 test/golden/importless/bind.nix+54 test/golden/importless/bintools.nix+29 test/golden/importless/bintools.txt+8 test/golden/importless/bioc-annotation-packages.nix+950 test/golden/importless/bitcoin-abc.nix+52 test/golden/importless/bitcoin-classic.nix+54 test/golden/importless/bitcoin-gold.nix+70 test/golden/importless/bitcoin-knots.nix+41 test/golden/importless/bitcoin-knots.txt+41 test/golden/importless/bitcoin-unlimited.nix+66 test/golden/importless/bitcoin.nix+94 test/golden/importless/bitcoind.nix+261 test/golden/importless/bitlbee.nix+193 test/golden/importless/bitwig-studio1.nix+98 test/golden/importless/bitwig-studio1.txt+71 test/golden/importless/bitwig-studio2.nix+16 test/golden/importless/bitwig-studio2.txt+12 test/golden/importless/bitwig-studio3.nix+23 test/golden/importless/bitwig-studio3.txt+21 test/golden/importless/blackbird.nix+25 test/golden/importless/blackbird.txt+11 test/golden/importless/blackbox-exporter.nix+29 test/golden/importless/blackbox-exporter.txt+37 test/golden/importless/blackbox.nix+70 test/golden/importless/bladeRF.nix+28 test/golden/importless/bladeRF.txt+19 test/golden/importless/blivet.nix+50 test/golden/importless/blivet.txt+39 test/golden/importless/blockbook-frontend.nix+275 test/golden/importless/blocks-gaps.nix+51 test/golden/importless/blocks-gaps.txt+42 test/golden/importless/blocks.nix+33 test/golden/importless/blocks.txt+30 test/golden/importless/bloodspilot-client.nix+25 test/golden/importless/bloodspilot-client.txt+36 test/golden/importless/bloodspilot-server.nix+27 test/golden/importless/bloodspilot-server.txt+25 test/golden/importless/bloop.nix+54 test/golden/importless/bluedevil.nix+14 test/golden/importless/bluedevil.txt+19 test/golden/importless/blueman.nix+25 test/golden/importless/blueman.txt+18 test/golden/importless/bluetooth.nix+99 test/golden/importless/bluez-qt.nix+19 test/golden/importless/bluez-qt.txt+16 test/golden/importless/bolt.nix+34 test/golden/importless/bolt.txt+22 test/golden/importless/bomber.nix+30 test/golden/importless/bomber.txt+29 test/golden/importless/boot.nix+91 test/golden/importless/boot.txt+27 test/golden/importless/bootstrap.nix+43 test/golden/importless/bootstrap.txt+35 test/golden/importless/bordeaux-threads.nix+30 test/golden/importless/bordeaux-threads.txt+16 test/golden/importless/borgbackup.nix+675 test/golden/importless/bosun.nix+166 test/golden/importless/bounce.nix+14 test/golden/importless/bovo.nix+28 test/golden/importless/bovo.txt+29 test/golden/importless/bower-packages.nix+42 test/golden/importless/bower-packages.txt+5 test/golden/importless/breeze-grub.nix+15 test/golden/importless/breeze-grub.txt+1 test/golden/importless/breeze-gtk.nix+14 test/golden/importless/breeze-gtk.txt+18 test/golden/importless/breeze-icons.nix+17 test/golden/importless/breeze-icons.txt+19 test/golden/importless/breeze-qt5.nix+20 test/golden/importless/breeze-qt5.txt+26 test/golden/importless/brillo.nix+22 test/golden/importless/brillo.txt+17 test/golden/importless/brltty.nix+50 test/golden/importless/brltty.txt+45 test/golden/importless/broadcom-43xx.nix+3 test/golden/importless/broadcom-43xx.txt+1 test/golden/importless/brotli-crates.nix+95 test/golden/importless/browser.nix+25 test/golden/importless/browser.txt+34 test/golden/importless/browserpass.nix+32 test/golden/importless/browserpass.txt+27 test/golden/importless/brscan4.nix+112 test/golden/importless/bsh.nix+14 test/golden/importless/bson.nix+13 test/golden/importless/bson.txt+21 test/golden/importless/btc1.nix+41 test/golden/importless/btrfs.nix+140 test/golden/importless/buffer.nix+79 test/golden/importless/build-api.nix+14 test/golden/importless/build-app.nix+48 test/golden/importless/build-builtin-package.nix+25 test/golden/importless/build-crate.nix+110 test/golden/importless/build-dotnet.nix+92 test/golden/importless/build-eclipse.nix+61 test/golden/importless/build-erlang-mk.nix+97 test/golden/importless/build-hex.nix+20 test/golden/importless/build-idris-package.nix+77 test/golden/importless/build-mix.nix+100 test/golden/importless/build-pecl.nix+36 test/golden/importless/build-rebar3.nix+94 test/golden/importless/build-rebar3.txt+61 test/golden/importless/build-skaware-package.nix+106 test/golden/importless/build-skaware-package.txt+46 test/golden/importless/build-solution.nix+85 test/golden/importless/build-solution.txt+25 test/golden/importless/build-tools.nix+21 test/golden/importless/build-tools.txt+27 test/golden/importless/build-vim-plugin.nix+60 test/golden/importless/build.nix+55 test/golden/importless/build.txt+51 test/golden/importless/buildOcamlJane.nix+27 test/golden/importless/buildOcamlJane.txt+27 test/golden/importless/builder.nix+49 test/golden/importless/builder.txt+24 test/golden/importless/buildnode-xhtml.nix+48 test/golden/importless/buildnode-xhtml.txt+33 test/golden/importless/buildnode.nix+49 test/golden/importless/buildnode.txt+35 test/golden/importless/builds.nix+61 test/golden/importless/builds.txt+43 test/golden/importless/bumblebee.nix+93 test/golden/importless/bytes.nix+21 test/golden/importless/bytes.txt+13 test/golden/importless/cachefilesd.nix+63 test/golden/importless/cadvisor.nix+140 test/golden/importless/caffeine-plus.nix+32 test/golden/importless/caffeine-plus.txt+34 test/golden/importless/cage.nix+98 test/golden/importless/calendarsupport.nix+20 test/golden/importless/calendarsupport.txt+27 test/golden/importless/calibre-server.nix+63 test/golden/importless/calibre-server.txt+42 test/golden/importless/camlp4.nix+27 test/golden/importless/camlp4.txt+25 test/golden/importless/canto-daemon.nix+37 test/golden/importless/canto-daemon.txt+28 test/golden/importless/canvas.nix+23 test/golden/importless/canvas.txt+14 test/golden/importless/caps2esc.nix+23 test/golden/importless/caps2esc.txt+29 test/golden/importless/captive-browser.nix+122 test/golden/importless/carnix.nix+259 test/golden/importless/carnix.txt+209 test/golden/importless/case.kak.nix+27 test/golden/importless/case.kak.txt+28 test/golden/importless/cassandra.nix+479 test/golden/importless/categories.nix+21 test/golden/importless/categories.txt+13 test/golden/importless/caveman.nix+87 test/golden/importless/caveman.txt+80 test/golden/importless/ccache.nix+83 test/golden/importless/cde.nix+72 test/golden/importless/cde.txt+69 test/golden/importless/cdemu.nix+59 test/golden/importless/cdn-deps.nix+7028 test/golden/importless/cdn-deps.txt+1759 test/golden/importless/ceph.nix+418 test/golden/importless/cerberus.nix+19 test/golden/importless/certmgr.nix+201 test/golden/importless/cfdyndns.nix+70 test/golden/importless/cffi-grovel.nix+30 test/golden/importless/cffi-grovel.txt+18 test/golden/importless/cffi-toolchain.nix+31 test/golden/importless/cffi-toolchain.txt+17 test/golden/importless/cffi.nix+34 test/golden/importless/cffi.txt+20 test/golden/importless/cfssl.nix+209 test/golden/importless/cgit.nix+91 test/golden/importless/cgminer.nix+140 test/golden/importless/chacha.nix+82 test/golden/importless/chacha.txt+42 test/golden/importless/channel.nix+49 test/golden/importless/channel.txt+10 test/golden/importless/charybdis.nix+107 test/golden/importless/check-meta.nix+261 test/golden/importless/check-plugin.nix+35 test/golden/importless/check-plugin.txt+36 test/golden/importless/check_ssl_cert.nix+36 test/golden/importless/check_ssl_cert.txt+29 test/golden/importless/checkup.nix+34 test/golden/importless/checkup.txt+33 test/golden/importless/chicken.nix+59 test/golden/importless/chipz.nix+25 test/golden/importless/chipz.txt+11 test/golden/importless/chrome-gnome-shell.nix+33 test/golden/importless/chrome-gnome-shell.txt+34 test/golden/importless/chromium.nix+104 test/golden/importless/chrony.nix+125 test/golden/importless/chrootenv.nix+52 test/golden/importless/chrootenv.txt+62 test/golden/importless/chunga.nix+25 test/golden/importless/chunga.txt+14 test/golden/importless/cifs.nix+25 test/golden/importless/cinnamon.nix+205 test/golden/importless/circular-streams.nix+36 test/golden/importless/circular-streams.txt+22 test/golden/importless/cjdns.nix+294 test/golden/importless/cl-aa.nix+25 test/golden/importless/cl-aa.txt+11 test/golden/importless/cl-annot.nix+25 test/golden/importless/cl-annot.txt+11 test/golden/importless/cl-anonfun.nix+24 test/golden/importless/cl-anonfun.txt+11 test/golden/importless/cl-ansi-text.nix+29 test/golden/importless/cl-ansi-text.txt+17 test/golden/importless/cl-async-repl.nix+43 test/golden/importless/cl-async-repl.txt+29 test/golden/importless/cl-async-ssl.nix+44 test/golden/importless/cl-async-ssl.txt+29 test/golden/importless/cl-async.nix+41 test/golden/importless/cl-async.txt+28 test/golden/importless/cl-base64.nix+28 test/golden/importless/cl-base64.txt+16 test/golden/importless/cl-change-case.nix+31 test/golden/importless/cl-change-case.txt+17 test/golden/importless/cl-cli.nix+25 test/golden/importless/cl-cli.txt+14 test/golden/importless/cl-colors.nix+29 test/golden/importless/cl-colors.txt+18 test/golden/importless/cl-containers.nix+33 test/golden/importless/cl-containers.txt+17 test/golden/importless/cl-cookie.nix+35 test/golden/importless/cl-cookie.txt+24 test/golden/importless/cl-css.nix+24 test/golden/importless/cl-css.txt+11 test/golden/importless/cl-csv.nix+37 test/golden/importless/cl-csv.txt+22 test/golden/importless/cl-dbi.nix+36 test/golden/importless/cl-dbi.txt+23 test/golden/importless/cl-emb.nix+25 test/golden/importless/cl-emb.txt+11 test/golden/importless/cl-fad.nix+30 test/golden/importless/cl-fad.txt+18 test/golden/importless/cl-fuse-meta-fs.nix+40 test/golden/importless/cl-fuse-meta-fs.txt+27 test/golden/importless/cl-fuse.nix+35 test/golden/importless/cl-fuse.txt+24 test/golden/importless/cl-hooks.nix+34 test/golden/importless/cl-hooks.txt+20 test/golden/importless/cl-html-parse.nix+25 test/golden/importless/cl-html-parse.txt+11 test/golden/importless/cl-html5-parser.nix+31 test/golden/importless/cl-html5-parser.txt+17 test/golden/importless/cl-interpol.nix+31 test/golden/importless/cl-interpol.txt+18 test/golden/importless/cl-jpeg.nix+25 test/golden/importless/cl-jpeg.txt+11 test/golden/importless/cl-json.nix+28 test/golden/importless/cl-json.txt+12 test/golden/importless/cl-l10n-cldr.nix+26 test/golden/importless/cl-l10n-cldr.txt+11 test/golden/importless/cl-l10n.nix+42 test/golden/importless/cl-l10n.txt+32 test/golden/importless/cl-libuv.nix+30 test/golden/importless/cl-libuv.txt+19 test/golden/importless/cl-log.nix+24 test/golden/importless/cl-log.txt+11 test/golden/importless/cl-markdown.nix+36 test/golden/importless/cl-markdown.txt+20 test/golden/importless/cl-markup.nix+25 test/golden/importless/cl-markup.txt+11 test/golden/importless/cl-mysql.nix+28 test/golden/importless/cl-mysql.txt+17 test/golden/importless/cl-paths-ttf.nix+27 test/golden/importless/cl-paths-ttf.txt+15 test/golden/importless/cl-paths.nix+25 test/golden/importless/cl-paths.txt+11 test/golden/importless/cl-pdf.nix+27 test/golden/importless/cl-pdf.txt+16 test/golden/importless/cl-postgres.nix+32 test/golden/importless/cl-postgres.txt+18 test/golden/importless/cl-ppcre-template.nix+38 test/golden/importless/cl-ppcre-template.txt+15 test/golden/importless/cl-ppcre-unicode.nix+33 test/golden/importless/cl-ppcre-unicode.txt+18 test/golden/importless/cl-ppcre.nix+27 test/golden/importless/cl-ppcre.txt+15 test/golden/importless/cl-prevalence.nix+27 test/golden/importless/cl-prevalence.txt+15 test/golden/importless/cl-project.nix+35 test/golden/importless/cl-project.txt+25 test/golden/importless/cl-protobufs.nix+30 test/golden/importless/cl-protobufs.txt+18 test/golden/importless/cl-reexport.nix+25 test/golden/importless/cl-reexport.txt+11 test/golden/importless/cl-smtp.nix+38 test/golden/importless/cl-smtp.txt+25 test/golden/importless/cl-store.nix+27 test/golden/importless/cl-store.txt+12 test/golden/importless/cl-syntax-annot.nix+33 test/golden/importless/cl-syntax-annot.txt+18 test/golden/importless/cl-syntax-anonfun.nix+32 test/golden/importless/cl-syntax-anonfun.txt+17 test/golden/importless/cl-syntax-markup.nix+32 test/golden/importless/cl-syntax-markup.txt+17 test/golden/importless/cl-syntax.nix+30 test/golden/importless/cl-syntax.txt+15 test/golden/importless/cl-test-more.nix+32 test/golden/importless/cl-test-more.txt+20 test/golden/importless/cl-typesetting.nix+28 test/golden/importless/cl-typesetting.txt+16 test/golden/importless/cl-unicode.nix+30 test/golden/importless/cl-unicode.txt+16 test/golden/importless/cl-unification.nix+29 test/golden/importless/cl-unification.txt+11 test/golden/importless/cl-utilities.nix+25 test/golden/importless/cl-utilities.txt+11 test/golden/importless/cl-vectors.nix+26 test/golden/importless/cl-vectors.txt+15 test/golden/importless/cl-who.nix+27 test/golden/importless/cl-who.txt+15 test/golden/importless/cl-xmlspam.nix+34 test/golden/importless/cl-xmlspam.txt+21 test/golden/importless/cl_plus_ssl.nix+34 test/golden/importless/cl_plus_ssl.txt+22 test/golden/importless/clack-handler-hunchentoot.nix+54 test/golden/importless/clack-handler-hunchentoot.txt+33 test/golden/importless/clack-socket.nix+33 test/golden/importless/clack-socket.txt+11 test/golden/importless/clack-test.nix+79 test/golden/importless/clack-test.txt+66 test/golden/importless/clack-v1-compat.nix+84 test/golden/importless/clack-v1-compat.txt+70 test/golden/importless/clack.nix+43 test/golden/importless/clack.txt+22 test/golden/importless/clamsmtp.nix+181 test/golden/importless/clang.nix+66 test/golden/importless/classworlds.nix+25 test/golden/importless/clean-packaging.nix+53 test/golden/importless/clean-packaging.txt+8 test/golden/importless/clex.nix+25 test/golden/importless/clex.txt+23 test/golden/importless/clfswm.nix+24 test/golden/importless/clfswm.txt+24 test/golden/importless/cli.nix+83 test/golden/importless/clickhouse.nix+68 test/golden/importless/clickhouse.txt+53 test/golden/importless/clickshare.nix+21 test/golden/importless/clickshare.txt+26 test/golden/importless/client-ip-echo.nix+16 test/golden/importless/client-ip-echo.txt+20 test/golden/importless/client.nix+131 test/golden/importless/clientlib.nix+24 test/golden/importless/clientlib.txt+33 test/golden/importless/clight.nix+115 test/golden/importless/clightd.nix+75 test/golden/importless/clightd.txt+54 test/golden/importless/clightning.nix+50 test/golden/importless/clightning.txt+49 test/golden/importless/clingo.nix+25 test/golden/importless/clingo.txt+27 test/golden/importless/clipmenu.nix+31 test/golden/importless/clipmenu.txt+35 test/golden/importless/clippy.nix+34 test/golden/importless/clippy.txt+44 test/golden/importless/clooj.nix+30 test/golden/importless/clooj.txt+21 test/golden/importless/closer-mop.nix+25 test/golden/importless/closer-mop.txt+11 test/golden/importless/closure-common.nix+29 test/golden/importless/closure-common.txt+17 test/golden/importless/closure-html.nix+33 test/golden/importless/closure-html.txt+19 test/golden/importless/closure-info.nix+36 test/golden/importless/clprover.nix+27 test/golden/importless/clprover.txt+25 test/golden/importless/clsql-postgresql-socket.nix+31 test/golden/importless/clsql-postgresql-socket.txt+16 test/golden/importless/clsql-postgresql.nix+31 test/golden/importless/clsql-postgresql.txt+16 test/golden/importless/clsql-sqlite3.nix+31 test/golden/importless/clsql-sqlite3.txt+16 test/golden/importless/clsql-uffi.nix+30 test/golden/importless/clsql-uffi.txt+15 test/golden/importless/clsql.nix+29 test/golden/importless/clsql.txt+11 test/golden/importless/clss.nix+28 test/golden/importless/clss.txt+17 test/golden/importless/clx-truetype.nix+39 test/golden/importless/clx-truetype.txt+25 test/golden/importless/clx.nix+28 test/golden/importless/clx.txt+12 test/golden/importless/cmake-modules.nix+32 test/golden/importless/cmake-modules.txt+23 test/golden/importless/cmake.nix+130 test/golden/importless/cmt.nix+59 test/golden/importless/cntlm.nix+121 test/golden/importless/cockroachdb.nix+217 test/golden/importless/coda.nix+24 test/golden/importless/coda.txt+24 test/golden/importless/cohttp.nix+26 test/golden/importless/cohttp.txt+31 test/golden/importless/collectd-exporter.nix+26 test/golden/importless/collectd.nix+77 test/golden/importless/collections.nix+77 test/golden/importless/collections.txt+69 test/golden/importless/collectors.nix+35 test/golden/importless/collectors.txt+19 test/golden/importless/colord.nix+41 test/golden/importless/colord.txt+23 test/golden/importless/combinators.nix+13 test/golden/importless/combinators.txt+22 test/golden/importless/combine-packages.nix+20 test/golden/importless/command-line-arguments.nix+26 test/golden/importless/command-line-arguments.txt+11 test/golden/importless/command-not-found.nix+95 test/golden/importless/common-artifact-filters.nix+36 test/golden/importless/common-config.nix+822 test/golden/importless/common-overrides.nix+8 test/golden/importless/common-overrides.txt+11 test/golden/importless/common-path.nix+15 test/golden/importless/common-path.txt+18 test/golden/importless/common.nix+48 test/golden/importless/common.txt+38 test/golden/importless/commons-cli.nix+25 test/golden/importless/commons-io.nix+14 test/golden/importless/commons-lang.nix+36 test/golden/importless/commons-lang3.nix+14 test/golden/importless/commons-logging-api.nix+14 test/golden/importless/community-edition.nix+167 test/golden/importless/community-edition.txt+44 test/golden/importless/community.nix+131 test/golden/importless/community.txt+88 test/golden/importless/comonad.nix+22 test/golden/importless/comonad.txt+23 test/golden/importless/compiler-api.nix+14 test/golden/importless/compiler-javac.nix+14 test/golden/importless/compiler-manager.nix+14 test/golden/importless/compiler-rt.nix+83 test/golden/importless/compiler-rt.txt+55 test/golden/importless/compiler.nix+28 test/golden/importless/compiler.txt+35 test/golden/importless/component-annotations.nix+14 test/golden/importless/component-packages.nix+952 test/golden/importless/component-packages.txt+1061 test/golden/importless/compose-xcodewrapper.nix+33 test/golden/importless/compose-xcodewrapper.txt+5 test/golden/importless/composition.nix+25 test/golden/importless/composition.txt+25 test/golden/importless/compyte.nix+21 test/golden/importless/compyte.txt+7 test/golden/importless/condensed.nix+24 test/golden/importless/condensed.txt+25 test/golden/importless/conf.nix+31 test/golden/importless/conf.txt+9 test/golden/importless/confd.nix+90 test/golden/importless/config.nix+46 test/golden/importless/config.txt+7 test/golden/importless/configurable.nix+191 test/golden/importless/configuration-ghc-8.10.x.nix+132 test/golden/importless/configuration-ghc-8.2.x.nix+97 test/golden/importless/configuration-ghc-8.4.x.nix+92 test/golden/importless/configuration-ghc-8.4.x.txt+86 test/golden/importless/configuration-ghc-8.6.x.nix+97 test/golden/importless/configuration-ghc-8.6.x.txt+117 test/golden/importless/configuration-ghc-8.8.x.nix+129 test/golden/importless/configuration-ghc-head.nix+81 test/golden/importless/configuration-ghc-head.txt+82 test/golden/importless/configuration-nix.nix+785 test/golden/importless/configuration-tensorflow.nix+38 test/golden/importless/configuration-tensorflow.txt+30 test/golden/importless/configure-crate.nix+202 test/golden/importless/configured-ghcjs-src.nix+51 test/golden/importless/configured-ghcjs-src.txt+17 test/golden/importless/confluence.nix+197 test/golden/importless/connman.nix+171 test/golden/importless/console.nix+27 test/golden/importless/console.txt+27 test/golden/importless/constraint.nix+22 test/golden/importless/consul-exporter.nix+23 test/golden/importless/consul-exporter.txt+28 test/golden/importless/consul.nix+254 test/golden/importless/container-config.nix+31 test/golden/importless/container-config.txt+21 test/golden/importless/container-default.nix+36 test/golden/importless/containerd-shim.nix+35 test/golden/importless/containerd-shim.txt+28 test/golden/importless/containers.nix+26 test/golden/importless/containers.txt+26 test/golden/importless/contrib.nix+95 test/golden/importless/contrib.txt+62 test/golden/importless/control.nix+60 test/golden/importless/control.txt+41 test/golden/importless/convert.nix+43 test/golden/importless/convert.txt+29 test/golden/importless/convos.nix+72 test/golden/importless/coq-packages.nix+137 test/golden/importless/core.nix+47 test/golden/importless/core_bench.nix+20 test/golden/importless/core_bench.txt+25 test/golden/importless/coredns.nix+50 test/golden/importless/corerad.nix+88 test/golden/importless/cores.nix+1101 test/golden/importless/coturn.nix+334 test/golden/importless/couchdb.nix+201 test/golden/importless/couchpotato.nix+42 test/golden/importless/couchpotato.txt+43 test/golden/importless/cpp-test.nix+51 test/golden/importless/cpp-test.txt+14 test/golden/importless/cpu-freq.nix+90 test/golden/importless/cpuminer-cryptonight.nix+66 test/golden/importless/crashdump.nix+75 test/golden/importless/credentials.nix+38 test/golden/importless/criu.nix+27 test/golden/importless/criu.txt+23 test/golden/importless/cron.nix+133 test/golden/importless/crowd.nix+164 test/golden/importless/cryptpad.nix+54 test/golden/importless/cryptpad.txt+43 test/golden/importless/cryptsetup.nix+38 test/golden/importless/cryptsetup.txt+38 test/golden/importless/crystal2nix.nix+22 test/golden/importless/crystal2nix.txt+18 test/golden/importless/css-lite.nix+24 test/golden/importless/css-lite.txt+11 test/golden/importless/css-selectors-simple-tree.nix+51 test/golden/importless/css-selectors-simple-tree.txt+37 test/golden/importless/css-selectors-stp.nix+51 test/golden/importless/css-selectors-stp.txt+38 test/golden/importless/css-selectors.nix+50 test/golden/importless/css-selectors.txt+37 test/golden/importless/cstore_fdw.nix+32 test/golden/importless/cstore_fdw.txt+32 test/golden/importless/cstruct.nix+17 test/golden/importless/cstruct.txt+22 test/golden/importless/cube.nix+22 test/golden/importless/cube.txt+23 test/golden/importless/cups-exporter.nix+38 test/golden/importless/cups-exporter.txt+37 test/golden/importless/cups-pk-helper.nix+30 test/golden/importless/cups-pk-helper.txt+35 test/golden/importless/curaengine.nix+27 test/golden/importless/curaengine.txt+36 test/golden/importless/curry-base.nix+16 test/golden/importless/curry-base.txt+26 test/golden/importless/curry-frontend.nix+26 test/golden/importless/curry-frontend.txt+35 test/golden/importless/cursive.nix+39 test/golden/importless/cursive.txt+47 test/golden/importless/cutter.nix+53 test/golden/importless/cutter.txt+37 test/golden/importless/cwm.nix+23 test/golden/importless/cwm.txt+24 test/golden/importless/cxml-stp.nix+37 test/golden/importless/cxml-stp.txt+27 test/golden/importless/cxml.nix+34 test/golden/importless/cxml.txt+20 test/golden/importless/dante.nix+62 test/golden/importless/dante.txt+48 test/golden/importless/darkhttpd.nix+77 test/golden/importless/darwin-packages.nix+95 test/golden/importless/darwin.nix+34 test/golden/importless/darwin.txt+32 test/golden/importless/das_watchdog.nix+34 test/golden/importless/das_watchdog.txt+31 test/golden/importless/dash.nix+47 test/golden/importless/dash.txt+43 test/golden/importless/dashpay.nix+44 test/golden/importless/dashpay.txt+48 test/golden/importless/data-api.nix+25 test/golden/importless/data-api.txt+24 test/golden/importless/data.nix+25 test/golden/importless/data.txt+27 test/golden/importless/datadog-agent-deps.nix+1353 test/golden/importless/datadog-agent-deps.txt+4 test/golden/importless/datadog-agent.nix+294 test/golden/importless/datadog-process-agent-deps.nix+669 test/golden/importless/datadog-process-agent-deps.txt+4 test/golden/importless/datadog-process-agent.nix+24 test/golden/importless/datasets.nix+119 test/golden/importless/davfs2.nix+75 test/golden/importless/davmail.nix+99 test/golden/importless/db3.nix+24 test/golden/importless/db3.txt+11 test/golden/importless/dbd-mysql.nix+39 test/golden/importless/dbd-mysql.txt+27 test/golden/importless/dbd-postgres.nix+41 test/golden/importless/dbd-postgres.txt+27 test/golden/importless/dbd-sqlite3.nix+43 test/golden/importless/dbd-sqlite3.txt+30 test/golden/importless/dbi.nix+36 test/golden/importless/dbi.txt+22 test/golden/importless/dbus-sharp-1.0.nix+25 test/golden/importless/dbus-sharp-1.0.txt+25 test/golden/importless/dbus-sharp-glib-1.0.nix+25 test/golden/importless/dbus-sharp-glib-1.0.txt+26 test/golden/importless/dbus.nix+116 test/golden/importless/dconf.nix+64 test/golden/importless/dconf2nix.nix+21 test/golden/importless/dconf2nix.txt+23 test/golden/importless/dcrd.nix+26 test/golden/importless/dcrd.txt+26 test/golden/importless/dcrwallet.nix+26 test/golden/importless/dcrwallet.txt+26 test/golden/importless/dcw.nix+32 test/golden/importless/dcw.txt+22 test/golden/importless/dd-agent-defaults.nix+8 test/golden/importless/dd-agent-defaults.txt+1 test/golden/importless/debian-build.nix+98 test/golden/importless/debian-build.txt+29 test/golden/importless/debian-patches.nix+34 test/golden/importless/debian-patches.txt+1 test/golden/importless/debug-info.nix+45 test/golden/importless/debug-info.txt+18 test/golden/importless/debug.nix+253 test/golden/importless/declare-attrsOf.nix+6 test/golden/importless/declare-attrsOf.txt+8 test/golden/importless/declare-attrsOfSub-any-enable.nix+29 test/golden/importless/declare-coerced-value-unsound.nix+10 test/golden/importless/declare-coerced-value-unsound.txt+11 test/golden/importless/declare-coerced-value.nix+10 test/golden/importless/declare-either.nix+5 test/golden/importless/declare-either.txt+9 test/golden/importless/declare-enable-nested.nix+14 test/golden/importless/declare-enable-nested.txt+8 test/golden/importless/declare-enable.nix+14 test/golden/importless/declare-enable.txt+8 test/golden/importless/declare-int-between-value.nix+9 test/golden/importless/declare-int-between-value.txt+8 test/golden/importless/declare-int-positive-value-nested.nix+9 test/golden/importless/declare-int-positive-value-nested.txt+8 test/golden/importless/declare-int-positive-value.nix+9 test/golden/importless/declare-int-positive-value.txt+8 test/golden/importless/declare-int-unsigned-value.nix+9 test/golden/importless/declare-int-unsigned-value.txt+8 test/golden/importless/declare-lazyAttrsOf.nix+6 test/golden/importless/declare-lazyAttrsOf.txt+9 test/golden/importless/declare-oneOf.nix+9 test/golden/importless/declare-oneOf.txt+11 test/golden/importless/declare-submoduleWith-modules.nix+30 test/golden/importless/declare-submoduleWith-noshorthand.nix+13 test/golden/importless/declare-submoduleWith-path.nix+12 test/golden/importless/declare-submoduleWith-path.txt+7 test/golden/importless/declare-submoduleWith-shorthand.nix+14 test/golden/importless/declare-submoduleWith-special.nix+17 test/golden/importless/declare-submoduleWith-special.txt+17 test/golden/importless/declare.nix+53 test/golden/importless/default-crate-overrides.nix+112 test/golden/importless/default-crate-overrides.txt+64 test/golden/importless/default.nix+507 test/golden/importless/define-_module-args-custom.nix+7 test/golden/importless/define-_module-args-custom.txt+1 test/golden/importless/define-attrsOfSub-bar-enable.nix+3 test/golden/importless/define-attrsOfSub-bar-enable.txt+1 test/golden/importless/define-attrsOfSub-bar.nix+3 test/golden/importless/define-attrsOfSub-bar.txt+1 test/golden/importless/define-attrsOfSub-foo-enable-force.nix+5 test/golden/importless/define-attrsOfSub-foo-enable-force.txt+3 test/golden/importless/define-attrsOfSub-foo-enable-if.nix+5 test/golden/importless/define-attrsOfSub-foo-enable-if.txt+3 test/golden/importless/define-attrsOfSub-foo-enable.nix+3 test/golden/importless/define-attrsOfSub-foo-enable.txt+1 test/golden/importless/define-attrsOfSub-foo-force-enable.nix+7 test/golden/importless/define-attrsOfSub-foo-force-enable.txt+3 test/golden/importless/define-attrsOfSub-foo-if-enable.nix+7 test/golden/importless/define-attrsOfSub-foo-if-enable.txt+7 test/golden/importless/define-attrsOfSub-foo.nix+3 test/golden/importless/define-attrsOfSub-foo.txt+1 test/golden/importless/define-attrsOfSub-force-foo-enable.nix+7 test/golden/importless/define-attrsOfSub-force-foo-enable.txt+3 test/golden/importless/define-attrsOfSub-if-foo-enable.nix+7 test/golden/importless/define-attrsOfSub-if-foo-enable.txt+7 test/golden/importless/define-enable-force.nix+5 test/golden/importless/define-enable-force.txt+1 test/golden/importless/define-enable-with-custom-arg.nix+7 test/golden/importless/define-enable-with-custom-arg.txt+1 test/golden/importless/define-enable.nix+3 test/golden/importless/define-enable.txt+1 test/golden/importless/define-force-attrsOfSub-foo-enable.nix+5 test/golden/importless/define-force-attrsOfSub-foo-enable.txt+3 test/golden/importless/define-force-enable.nix+5 test/golden/importless/define-force-enable.txt+1 test/golden/importless/define-if-attrsOfSub-foo-enable.nix+5 test/golden/importless/define-if-attrsOfSub-foo-enable.txt+7 test/golden/importless/define-module-check.nix+3 test/golden/importless/define-module-check.txt+1 test/golden/importless/define-option-dependently-nested.nix+16 test/golden/importless/define-option-dependently-nested.txt+10 test/golden/importless/define-option-dependently.nix+16 test/golden/importless/define-option-dependently.txt+8 test/golden/importless/define-package.nix+116 test/golden/importless/define-submoduleWith-noshorthand.nix+3 test/golden/importless/define-submoduleWith-noshorthand.txt+1 test/golden/importless/define-submoduleWith-shorthand.nix+3 test/golden/importless/define-submoduleWith-shorthand.txt+1 test/golden/importless/define-value-int-negative.nix+3 test/golden/importless/define-value-int-negative.txt+1 test/golden/importless/define-value-int-positive.nix+3 test/golden/importless/define-value-int-positive.txt+1 test/golden/importless/define-value-int-zero.nix+3 test/golden/importless/define-value-int-zero.txt+1 test/golden/importless/define-value-list.nix+3 test/golden/importless/define-value-list.txt+1 test/golden/importless/define-value-string-arbitrary.nix+3 test/golden/importless/define-value-string-arbitrary.txt+1 test/golden/importless/define-value-string-bigint.nix+3 test/golden/importless/define-value-string-bigint.txt+1 test/golden/importless/define-value-string.nix+3 test/golden/importless/define-value-string.txt+1 test/golden/importless/deluge.nix+271 test/golden/importless/demo.nix+40 test/golden/importless/dep-overrides.nix+14 test/golden/importless/dep-overrides.txt+21 test/golden/importless/dependency-tree.nix+14 test/golden/importless/deploy-androidpackage.nix+46 test/golden/importless/deprecated.nix+278 test/golden/importless/deps.nix+12 test/golden/importless/deps.txt+4 test/golden/importless/derive.nix+26 test/golden/importless/derive.txt+26 test/golden/importless/dero.nix+27 test/golden/importless/dero.txt+38 test/golden/importless/descncrunch.nix+26 test/golden/importless/descncrunch.txt+26 test/golden/importless/desktop_items.nix+42 test/golden/importless/desktop_items.txt+15 test/golden/importless/detected.nix+12 test/golden/importless/detected.txt+5 test/golden/importless/dev.nix+23 test/golden/importless/dev.txt+16 test/golden/importless/devedition_sources.nix+965 test/golden/importless/devedition_sources.txt+3 test/golden/importless/device-tree.nix+67 test/golden/importless/devmon.nix+25 test/golden/importless/devmon.txt+31 test/golden/importless/dexador.nix+51 test/golden/importless/dexador.txt+43 test/golden/importless/dfu-util.nix+31 test/golden/importless/dfu-util.txt+29 test/golden/importless/dhall-kubernetes.nix+27 test/golden/importless/dhall-kubernetes.txt+20 test/golden/importless/dhall-packages.nix+48 test/golden/importless/dhall-packages.txt+16 test/golden/importless/dhcpcd.nix+225 test/golden/importless/dict.nix+29 test/golden/importless/dict.txt+26 test/golden/importless/dictd-db-collector.nix+80 test/golden/importless/dictd-db.nix+95 test/golden/importless/dictd-db.txt+41 test/golden/importless/dictd-wiktionary.nix+31 test/golden/importless/dictd-wiktionary.txt+28 test/golden/importless/dictd-wordnet.nix+36 test/golden/importless/dictd-wordnet.txt+21 test/golden/importless/dictd.nix+65 test/golden/importless/dictionaries.nix+944 test/golden/importless/dicts.nix+40 test/golden/importless/digest.nix+33 test/golden/importless/digest.txt+36 test/golden/importless/digibyte.nix+69 test/golden/importless/digimend.nix+38 test/golden/importless/digimend.txt+23 test/golden/importless/digitalbitbox.nix+30 test/golden/importless/diod.nix+159 test/golden/importless/disable-bar.nix+7 test/golden/importless/disable-bar.txt+1 test/golden/importless/disable-declare-enable.nix+5 test/golden/importless/disable-declare-enable.txt+1 test/golden/importless/disable-define-enable.nix+5 test/golden/importless/disable-define-enable.txt+1 test/golden/importless/disable-enable-modules.nix+5 test/golden/importless/disable-enable-modules.txt+1 test/golden/importless/disable-foo.nix+7 test/golden/importless/disable-foo.txt+1 test/golden/importless/discover.nix+20 test/golden/importless/discover.txt+30 test/golden/importless/disnix.nix+88 test/golden/importless/dispatch.nix+38 test/golden/importless/dispatch.txt+32 test/golden/importless/displaylink.nix+76 test/golden/importless/displaylink.txt+42 test/golden/importless/dissect.nix+25 test/golden/importless/dissect.txt+11 test/golden/importless/dist-tests.nix+17 test/golden/importless/dist-tests.txt+1 test/golden/importless/distribution.nix+23 test/golden/importless/django-crispy-forms.nix+36 test/golden/importless/django-crispy-forms.txt+29 test/golden/importless/django-filter.nix+26 test/golden/importless/django-filter.txt+33 test/golden/importless/dkimproxy-out.nix+120 test/golden/importless/dleyna-renderer.nix+28 test/golden/importless/dleyna-renderer.txt+19 test/golden/importless/dleyna-server.nix+28 test/golden/importless/dleyna-server.txt+19 test/golden/importless/dmraid.nix+26 test/golden/importless/dmraid.txt+21 test/golden/importless/dmrconfig.nix+38 test/golden/importless/dns.nix+334 test/golden/importless/dnscache.nix+108 test/golden/importless/dnscrypt-proxy2.nix+62 test/golden/importless/dnscrypt-wrapper.nix+284 test/golden/importless/dnsdist.nix+60 test/golden/importless/dnsmasq-exporter.nix+26 test/golden/importless/dnsmasq-exporter.txt+30 test/golden/importless/dnsmasq.nix+38 test/golden/importless/do-agent.nix+25 test/golden/importless/do-agent.txt+24 test/golden/importless/do-urlencode.nix+28 test/golden/importless/do-urlencode.txt+16 test/golden/importless/doas.nix+274 test/golden/importless/docker-registry.nix+157 test/golden/importless/documentation-utils.nix+27 test/golden/importless/documentation-utils.txt+14 test/golden/importless/documize.nix+149 test/golden/importless/dogecoin.nix+41 test/golden/importless/dogecoin.txt+49 test/golden/importless/dolphin-plugins.nix+18 test/golden/importless/dolphin-plugins.txt+19 test/golden/importless/dolphin.nix+31 test/golden/importless/dolphin.txt+46 test/golden/importless/dom.nix+27 test/golden/importless/dom.txt+27 test/golden/importless/dotnet-packages.nix+963 test/golden/importless/dotty-bare.nix+40 test/golden/importless/dotty-bare.txt+36 test/golden/importless/dotty.nix+22 test/golden/importless/dotty.txt+13 test/golden/importless/doubles.nix+81 test/golden/importless/dovecot-exporter-deps.nix+102 test/golden/importless/dovecot-exporter-deps.txt+4 test/golden/importless/dovecot-exporter.nix+26 test/golden/importless/dovecot-exporter.txt+29 test/golden/importless/dovecot.nix+73 test/golden/importless/download.nix+884 test/golden/importless/download.txt+7 test/golden/importless/downloads.nix+213 test/golden/importless/doxia-sink-api.nix+36 test/golden/importless/dragon.nix+25 test/golden/importless/dragon.txt+43 test/golden/importless/drakma.nix+39 test/golden/importless/drakma.txt+29 test/golden/importless/drbd.nix+65 test/golden/importless/dspam.nix+150 test/golden/importless/dsseries.nix+26 test/golden/importless/dsseries.txt+25 test/golden/importless/dune.nix+40 test/golden/importless/duplicati.nix+67 test/golden/importless/duplicity.nix+141 test/golden/importless/dust.nix+35 test/golden/importless/dust.txt+28 test/golden/importless/dvtm.nix+29 test/golden/importless/dvtm.txt+39 test/golden/importless/dwm-status.nix+73 test/golden/importless/dwm.nix+37 test/golden/importless/dwm.txt+24 test/golden/importless/dynamic-classes.nix+26 test/golden/importless/dynamic-classes.txt+14 test/golden/importless/dynamic-workspaces.nix+39 test/golden/importless/dynamic-workspaces.txt+35 test/golden/importless/dynamic.nix+26 test/golden/importless/dynamic.txt+34 test/golden/importless/eagle.nix+80 test/golden/importless/eagle.txt+57 test/golden/importless/eagle7.nix+97 test/golden/importless/earlyoom.nix+123 test/golden/importless/easyfocus.nix+32 test/golden/importless/easyfocus.txt+40 test/golden/importless/ec2-amis.nix+352 test/golden/importless/ec2-amis.txt+257 test/golden/importless/ec2-metadata-fetcher.nix+23 test/golden/importless/ec2-metadata-fetcher.txt+1 test/golden/importless/ecryptfs.nix+14 test/golden/importless/ecryptfs.txt+21 test/golden/importless/ecs-agent.nix+45 test/golden/importless/edit.nix+60 test/golden/importless/edit.txt+31 test/golden/importless/editable.nix+54 test/golden/importless/editor.nix+43 test/golden/importless/editor.txt+38 test/golden/importless/editors.nix+93 test/golden/importless/editors.txt+58 test/golden/importless/efi.nix+20 test/golden/importless/egg2nix.nix+29 test/golden/importless/egg2nix.txt+30 test/golden/importless/eggs.nix+91 test/golden/importless/eggs.txt+14 test/golden/importless/ejabberd.nix+157 test/golden/importless/elasticsearch-curator.nix+94 test/golden/importless/elasticsearch.nix+208 test/golden/importless/electron.nix+27 test/golden/importless/electron.txt+27 test/golden/importless/electronplayer.nix+33 test/golden/importless/electronplayer.txt+26 test/golden/importless/element-desktop.nix+81 test/golden/importless/element-desktop.txt+48 test/golden/importless/element-web.nix+40 test/golden/importless/elisa.nix+46 test/golden/importless/elisa.txt+27 test/golden/importless/elm-format.nix+40 test/golden/importless/elm-format.txt+46 test/golden/importless/elm-instrument.nix+34 test/golden/importless/elm-instrument.txt+48 test/golden/importless/elm-json.nix+29 test/golden/importless/elm-json.txt+34 test/golden/importless/elm-srcs.nix+72 test/golden/importless/elm-srcs.txt+15 test/golden/importless/elm.nix+31 test/golden/importless/elm.txt+51 test/golden/importless/elmi-to-json.nix+27 test/golden/importless/elmi-to-json.txt+34 test/golden/importless/elpa-generated.nix+4011 test/golden/importless/emacs.nix+103 test/golden/importless/emergency-mode.nix+37 test/golden/importless/emergency-mode.txt+14 test/golden/importless/emscripten-packages.nix+189 test/golden/importless/emscripten-packages.txt+49 test/golden/importless/emulate-app.nix+137 test/golden/importless/emulate-app.txt+30 test/golden/importless/emulator.nix+49 test/golden/importless/emulator.txt+47 test/golden/importless/encrypted-devices.nix+87 test/golden/importless/enforcer.nix+25 test/golden/importless/engelsystem.nix+186 test/golden/importless/engine.nix+25 test/golden/importless/engine.txt+37 test/golden/importless/engines.nix+41 test/golden/importless/engines.txt+20 test/golden/importless/enso-os.nix+140 test/golden/importless/enterprise-edition.nix+175 test/golden/importless/enterprise-edition.txt+55 test/golden/importless/env-locations.nix+49 test/golden/importless/env-locations.txt+19 test/golden/importless/env.nix+167 test/golden/importless/environment.nix+60 test/golden/importless/environment.txt+33 test/golden/importless/eos.nix+26 test/golden/importless/eos.txt+12 test/golden/importless/epmd.nix+56 test/golden/importless/epmd.txt+37 test/golden/importless/ergo.nix+141 test/golden/importless/error-diagnostics.nix+47 test/golden/importless/espanso.nix+25 test/golden/importless/espanso.txt+38 test/golden/importless/esrap-peg.nix+29 test/golden/importless/esrap-peg.txt+17 test/golden/importless/esrap.nix+29 test/golden/importless/esrap.txt+16 test/golden/importless/esxi.nix+38 test/golden/importless/esxi.txt+27 test/golden/importless/etc.nix+162 test/golden/importless/etcd.nix+195 test/golden/importless/eternal-terminal.nix+95 test/golden/importless/eternal.nix+32 test/golden/importless/eternal.txt+26 test/golden/importless/ethabi.nix+23 test/golden/importless/ethabi.txt+27 test/golden/importless/ethminer.nix+117 test/golden/importless/eventviews.nix+20 test/golden/importless/eventviews.txt+23 test/golden/importless/evilwm.nix+25 test/golden/importless/evilwm.txt+24 test/golden/importless/evolution-data-server.nix+45 test/golden/importless/evolution-data-server.txt+31 test/golden/importless/examples.nix+421 test/golden/importless/exfat.nix+11 test/golden/importless/exfat.txt+11 test/golden/importless/exim.nix+120 test/golden/importless/ext.nix+22 test/golden/importless/ext.txt+10 test/golden/importless/extensions.nix+111 test/golden/importless/external-program.nix+30 test/golden/importless/external-program.txt+16 test/golden/importless/extlinux-conf-builder.nix+8 test/golden/importless/extlinux-conf-builder.txt+9 test/golden/importless/extpack.nix+25 test/golden/importless/extra-target-flags.nix+33 test/golden/importless/extra-target-flags.txt+14 test/golden/importless/extra.nix+51 test/golden/importless/extra.txt+37 test/golden/importless/extract-nuget.nix+15 test/golden/importless/extract-nuget.txt+16 test/golden/importless/extras.nix+91 test/golden/importless/extras.txt+59 test/golden/importless/exwm.nix+54 test/golden/importless/f2fs.nix+25 test/golden/importless/facetimehd.nix+44 test/golden/importless/facetimehd.txt+30 test/golden/importless/factorio.nix+242 test/golden/importless/fail2ban.nix+306 test/golden/importless/fake-shell.nix+5 test/golden/importless/fakeroute.nix+65 test/golden/importless/fancontrol.nix+45 test/golden/importless/fancontrol.txt+34 test/golden/importless/fare-quasiquote-extras.nix+39 test/golden/importless/fare-quasiquote-extras.txt+21 test/golden/importless/fare-quasiquote-optima.nix+34 test/golden/importless/fare-quasiquote-optima.txt+18 test/golden/importless/fare-quasiquote-readtable.nix+33 test/golden/importless/fare-quasiquote-readtable.txt+16 test/golden/importless/fare-quasiquote.nix+29 test/golden/importless/fare-quasiquote.txt+11 test/golden/importless/fare-utils.nix+26 test/golden/importless/fare-utils.txt+11 test/golden/importless/farrp.nix+25 test/golden/importless/farrp.txt+25 test/golden/importless/fast-http.nix+35 test/golden/importless/fast-http.txt+22 test/golden/importless/fast-io.nix+33 test/golden/importless/fast-io.txt+21 test/golden/importless/faust1.nix+208 test/golden/importless/faust1.txt+76 test/golden/importless/faust2.nix+222 test/golden/importless/faust2.txt+102 test/golden/importless/faust2alqt.nix+15 test/golden/importless/faust2alqt.txt+4 test/golden/importless/faust2alsa.nix+29 test/golden/importless/faust2alsa.txt+15 test/golden/importless/faust2csound.nix+20 test/golden/importless/faust2csound.txt+5 test/golden/importless/faust2firefox.nix+14 test/golden/importless/faust2firefox.txt+5 test/golden/importless/faust2jack.nix+28 test/golden/importless/faust2jack.txt+13 test/golden/importless/faust2jackrust.nix+18 test/golden/importless/faust2jackrust.txt+14 test/golden/importless/faust2jaqt.nix+28 test/golden/importless/faust2jaqt.txt+13 test/golden/importless/faust2ladspa.nix+12 test/golden/importless/faust2ladspa.txt+4 test/golden/importless/faust2lv2.nix+15 test/golden/importless/faust2lv2.txt+4 test/golden/importless/faustlive.nix+44 test/golden/importless/faustlive.txt+46 test/golden/importless/faxq-default.nix+12 test/golden/importless/faxq-default.txt+7 test/golden/importless/fcgiwrap.nix+72 test/golden/importless/fcitx-configtool.nix+35 test/golden/importless/fcitx-configtool.txt+32 test/golden/importless/fcitx-qt5.nix+38 test/golden/importless/fcitx-qt5.txt+34 test/golden/importless/fcitx.nix+43 test/golden/importless/fcitx.txt+46 test/golden/importless/fcron.nix+167 test/golden/importless/felix.nix+102 test/golden/importless/ferm.nix+63 test/golden/importless/fetch-hex.nix+34 test/golden/importless/fetch-hex.txt+14 test/golden/importless/fetch-rebar-deps.nix+33 test/golden/importless/fetch-rebar-deps.txt+19 test/golden/importless/fetchCargoTarball.nix+81 test/golden/importless/fetchNodeModules.nix+26 test/golden/importless/fetchNodeModules.txt+15 test/golden/importless/fetchPackages.nix+130 test/golden/importless/fetchPackages.txt+1 test/golden/importless/fetchcrate.nix+38 test/golden/importless/fetchers.nix+13 test/golden/importless/fetchers.txt+1 test/golden/importless/fetchpypi.nix+28 test/golden/importless/ffmpeg-codecs.nix+32 test/golden/importless/ffmpeg-codecs.txt+25 test/golden/importless/ffmpegthumbs.nix+15 test/golden/importless/ffmpegthumbs.txt+20 test/golden/importless/fhsenv.nix+286 test/golden/importless/fiasco.nix+30 test/golden/importless/fiasco.txt+16 test/golden/importless/fieldslib.nix+19 test/golden/importless/fieldslib.txt+26 test/golden/importless/filelight.nix+18 test/golden/importless/filelight.txt+25 test/golden/importless/filesystem.nix+45 test/golden/importless/filesystems.nix+331 test/golden/importless/filtering.nix+14 test/golden/importless/filters.nix+71 test/golden/importless/filters.txt+49 test/golden/importless/firebird.nix+161 test/golden/importless/firejail.nix+54 test/golden/importless/firejail.txt+32 test/golden/importless/fireqos.nix+52 test/golden/importless/fish.nix+247 test/golden/importless/fiveam.nix+30 test/golden/importless/fiveam.txt+17 test/golden/importless/fixed-points.nix+104 test/golden/importless/fixed-points.txt+15 test/golden/importless/flannel.nix+191 test/golden/importless/flashpolicyd.nix+85 test/golden/importless/flask-oldsessions.nix+36 test/golden/importless/flask-oldsessions.txt+29 test/golden/importless/flask-openid.nix+28 test/golden/importless/flatpak-builder.nix+14 test/golden/importless/flatpak-builder.txt+17 test/golden/importless/flatpak.nix+66 test/golden/importless/flatpak.txt+48 test/golden/importless/flexget.nix+100 test/golden/importless/flexi-streams.nix+29 test/golden/importless/flexi-streams.txt+15 test/golden/importless/fluentd.nix+58 test/golden/importless/flutter.nix+129 test/golden/importless/fluxbox.nix+25 test/golden/importless/fluxbox.txt+24 test/golden/importless/fmod.nix+45 test/golden/importless/fontdir.nix+48 test/golden/importless/fontdir.txt+14 test/golden/importless/fontforge-fonttools.nix+1 test/golden/importless/fontforge-fonttools.txt+1 test/golden/importless/fonts.nix+19 test/golden/importless/fonts.txt+11 test/golden/importless/form-fiddle.nix+29 test/golden/importless/form-fiddle.txt+15 test/golden/importless/formats.nix+109 test/golden/importless/foundationdb.nix+429 test/golden/importless/fox-1.6.nix+43 test/golden/importless/fox-1.6.txt+46 test/golden/importless/fprintd.nix+54 test/golden/importless/fprot.nix+79 test/golden/importless/frab.nix+222 test/golden/importless/fractalart.nix+36 test/golden/importless/frameworkintegration.nix+17 test/golden/importless/frameworkintegration.txt+26 test/golden/importless/frameworks.nix+127 test/golden/importless/frameworks.txt+161 test/golden/importless/free.nix+24 test/golden/importless/free.txt+24 test/golden/importless/freefall.nix+64 test/golden/importless/freeform-attrsOf.nix+3 test/golden/importless/freeform-attrsOf.txt+8 test/golden/importless/freeform-lazyAttrsOf.nix+3 test/golden/importless/freeform-lazyAttrsOf.txt+8 test/golden/importless/freeform-nested.nix+7 test/golden/importless/freeform-nested.txt+7 test/golden/importless/freeform-str-dep-unstr.nix+8 test/golden/importless/freeform-str-dep-unstr.txt+11 test/golden/importless/freeform-unstr-dep-str.nix+8 test/golden/importless/freeform-unstr-dep-str.txt+11 test/golden/importless/freenet.nix+64 test/golden/importless/freeoffice.nix+27 test/golden/importless/freeoffice.txt+15 test/golden/importless/freepops.nix+89 test/golden/importless/freeradius.nix+84 test/golden/importless/freeswitch.nix+105 test/golden/importless/freetds.nix+61 test/golden/importless/freetds.txt+27 test/golden/importless/freicoin.nix+41 test/golden/importless/freicoin.txt+40 test/golden/importless/fritzbox-exporter-deps.nix+93 test/golden/importless/fritzbox-exporter-deps.txt+4 test/golden/importless/fritzbox-exporter.nix+28 test/golden/importless/fritzbox.nix+38 test/golden/importless/frog.nix+54 test/golden/importless/frogdata.nix+30 test/golden/importless/from-env.nix+4 test/golden/importless/frontend-params-submodule.nix+64 test/golden/importless/frontend.nix+23 test/golden/importless/frontends.nix+29 test/golden/importless/frontends.txt+36 test/golden/importless/frostwire-bin.nix+31 test/golden/importless/frostwire-bin.txt+28 test/golden/importless/fs.nix+23 test/golden/importless/fs.txt+23 test/golden/importless/fset.nix+31 test/golden/importless/fset.txt+15 test/golden/importless/fsm.nix+22 test/golden/importless/fsm.txt+23 test/golden/importless/fstrim.nix+46 test/golden/importless/fstrim.txt+30 test/golden/importless/full.nix+30 test/golden/importless/full.txt+31 test/golden/importless/functions.nix+93 test/golden/importless/fuse.nix+37 test/golden/importless/fuseki-binary.nix+41 test/golden/importless/fuseki-binary.txt+33 test/golden/importless/fusion-inventory.nix+63 test/golden/importless/fvwm.nix+41 test/golden/importless/fvwm.txt+32 test/golden/importless/fwupd.nix+129 test/golden/importless/gale.nix+181 test/golden/importless/game.nix+23 test/golden/importless/game.txt+29 test/golden/importless/games.nix+59 test/golden/importless/gammu-smsd.nix+253 test/golden/importless/gaps.nix+33 test/golden/importless/gaps.txt+34 test/golden/importless/garbage-pools.nix+25 test/golden/importless/garbage-pools.txt+11 test/golden/importless/garmindev.nix+25 test/golden/importless/garmindev.txt+29 test/golden/importless/gateone.nix+59 test/golden/importless/gateone.txt+62 test/golden/importless/gawk-with-extensions.nix+12 test/golden/importless/gawk-with-extensions.txt+7 test/golden/importless/gawkextlib.nix+149 test/golden/importless/gc.nix+33 test/golden/importless/gc.txt+37 test/golden/importless/gcab.nix+5 test/golden/importless/gcab.txt+2 test/golden/importless/gcc-support.nix+31 test/golden/importless/gcc-support.txt+22 test/golden/importless/gce-images.nix+9 test/golden/importless/gce-images.txt+8 test/golden/importless/gdal-1_11.nix+66 test/golden/importless/gdal-1_11.txt+49 test/golden/importless/gdk-pixbuf.nix+45 test/golden/importless/gdk-pixbuf.txt+25 test/golden/importless/gdomap.nix+29 test/golden/importless/gdomap.txt+27 test/golden/importless/geary.nix+24 test/golden/importless/geary.txt+31 test/golden/importless/gemset-beta.nix+374 test/golden/importless/gemset-beta.txt+229 test/golden/importless/gemset.nix+998 test/golden/importless/gemset.txt+537 test/golden/importless/gemset_libvirt.nix+159 test/golden/importless/gemset_libvirt.txt+98 test/golden/importless/generated-packages.nix+1590 test/golden/importless/generated.nix+7353 test/golden/importless/generations-dir.nix+65 test/golden/importless/generations-dir.txt+45 test/golden/importless/generatorrunner.nix+27 test/golden/importless/generatorrunner.txt+31 test/golden/importless/generators.nix+291 test/golden/importless/generic-builder.nix+54 test/golden/importless/generic-builder.txt+36 test/golden/importless/generic-stack-builder.nix+78 test/golden/importless/generic-stack-builder.txt+45 test/golden/importless/generic-updater.nix+108 test/golden/importless/generic-v3.nix+60 test/golden/importless/generic-v3.txt+73 test/golden/importless/generic.nix+93 test/golden/importless/generic.txt+42 test/golden/importless/genphrase.nix+32 test/golden/importless/genphrase.txt+31 test/golden/importless/geoclue2.nix+268 test/golden/importless/geogebra6.nix+46 test/golden/importless/geogebra6.txt+35 test/golden/importless/geoip-updater.nix+306 test/golden/importless/gerbil-crypto.nix+27 test/golden/importless/gerbil-crypto.txt+43 test/golden/importless/gerbil-ethereum.nix+28 test/golden/importless/gerbil-ethereum.txt+44 test/golden/importless/gerbil-persist.nix+27 test/golden/importless/gerbil-persist.txt+43 test/golden/importless/gerbil-poo.nix+27 test/golden/importless/gerbil-poo.txt+42 test/golden/importless/gerbil-utils.nix+25 test/golden/importless/gerbil-utils.txt+36 test/golden/importless/gerrit.nix+239 test/golden/importless/ghcjs-base.nix+29 test/golden/importless/ghcjs-base.txt+44 test/golden/importless/ghostscript.nix+33 test/golden/importless/ghostscript.txt+12 test/golden/importless/git-daemon.nix+130 test/golden/importless/git.nix+41 test/golden/importless/gitea.nix+609 test/golden/importless/gitit.nix+724 test/golden/importless/gitlab-ci-pipelines-exporter.nix+26 test/golden/importless/gitlab-ci-pipelines-exporter.txt+27 test/golden/importless/gitlab-ci-pipelines-exporter_deps.nix+390 test/golden/importless/gitlab-ci-pipelines-exporter_deps.txt+4 test/golden/importless/gitolite.nix+232 test/golden/importless/gitweb.nix+94 test/golden/importless/gjs.nix+6 test/golden/importless/gjs.txt+6 test/golden/importless/glfw.nix+34 test/golden/importless/glfw.txt+31 test/golden/importless/glib-networking.nix+37 test/golden/importless/glib-networking.txt+26 test/golden/importless/glib-testing.nix+5 test/golden/importless/glib-testing.txt+6 test/golden/importless/global-vars.nix+25 test/golden/importless/global-vars.txt+11 test/golden/importless/glusterfs.nix+211 test/golden/importless/gmusic.nix+29 test/golden/importless/gmusic.txt+27 test/golden/importless/gnome-initial-setup.nix+90 test/golden/importless/gnome-initial-setup.txt+41 test/golden/importless/gnome-keyring.nix+53 test/golden/importless/gnome-keyring.txt+37 test/golden/importless/gnome-online-accounts.nix+43 test/golden/importless/gnome-online-accounts.txt+27 test/golden/importless/gnome-online-miners.nix+43 test/golden/importless/gnome-online-miners.txt+29 test/golden/importless/gnome-photos.nix+35 test/golden/importless/gnome-photos.txt+31 test/golden/importless/gnome-remote-desktop.nix+24 test/golden/importless/gnome-remote-desktop.txt+24 test/golden/importless/gnome-user-share.nix+40 test/golden/importless/gnome-user-share.txt+24 test/golden/importless/gnome3.nix+464 test/golden/importless/gnu.nix+46 test/golden/importless/gnu.txt+33 test/golden/importless/gnunet.nix+166 test/golden/importless/gnupg.nix+151 test/golden/importless/go-ethereum.nix+46 test/golden/importless/go-ethereum.txt+37 test/golden/importless/go-neb.nix+53 test/golden/importless/go-shadowsocks2.nix+30 test/golden/importless/go-shadowsocks2.txt+34 test/golden/importless/go.d.plugin.nix+31 test/golden/importless/go.d.plugin.txt+27 test/golden/importless/goa-plugin.nix+31 test/golden/importless/goa-plugin.txt+31 test/golden/importless/gogoclient.nix+85 test/golden/importless/gogs.nix+279 test/golden/importless/gollum.nix+118 test/golden/importless/google_oslogin.nix+68 test/golden/importless/google_oslogin.txt+45 test/golden/importless/gotify-server.nix+49 test/golden/importless/gp2c.nix+27 test/golden/importless/gp2c.txt+28 test/golden/importless/gphoto2.nix+30 test/golden/importless/gphoto2.txt+27 test/golden/importless/gphotofs.nix+23 test/golden/importless/gphotofs.txt+34 test/golden/importless/gpio-utils.nix+25 test/golden/importless/gpio-utils.txt+24 test/golden/importless/gpm.nix+57 test/golden/importless/gppcscconnectionplugin.nix+21 test/golden/importless/gppcscconnectionplugin.txt+30 test/golden/importless/gpsd.nix+115 test/golden/importless/grafana-reporter.nix+66 test/golden/importless/grafana.nix+559 test/golden/importless/granatier.nix+23 test/golden/importless/granatier.txt+28 test/golden/importless/graphene.nix+5 test/golden/importless/graphene.txt+2 test/golden/importless/graphical.nix+20 test/golden/importless/graphical.txt+13 test/golden/importless/graphite2.nix+27 test/golden/importless/graphite2.txt+32 test/golden/importless/graphql.nix+23 test/golden/importless/graphql.txt+23 test/golden/importless/graphviz-2.0.nix+41 test/golden/importless/graphviz-2.0.txt+37 test/golden/importless/graphviz.nix+29 test/golden/importless/graphviz.txt+26 test/golden/importless/graylog.nix+170 test/golden/importless/greenclip.nix+31 test/golden/importless/greenclip.txt+36 test/golden/importless/grocy.nix+172 test/golden/importless/grow-partition.nix+3 test/golden/importless/grub1.patches.nix+34 test/golden/importless/grub1.patches.txt+1 test/golden/importless/grub2-theme.nix+5 test/golden/importless/grub2-theme.txt+1 test/golden/importless/gshhg.nix+31 test/golden/importless/gshhg.txt+22 test/golden/importless/gsignond.nix+45 test/golden/importless/gsl-1_16.nix+43 test/golden/importless/gsl-1_16.txt+30 test/golden/importless/gsm.nix+39 test/golden/importless/gsm.txt+43 test/golden/importless/gsmakeDerivation.nix+19 test/golden/importless/gstreamer.nix+65 test/golden/importless/gstreamer.txt+49 test/golden/importless/gtk-greeter.nix+72 test/golden/importless/gtk-greeter.txt+43 test/golden/importless/gtk-icon-cache.nix+86 test/golden/importless/gtk-icon-cache.txt+16 test/golden/importless/gtk.nix+173 test/golden/importless/gtk2.nix+55 test/golden/importless/gtk2.txt+41 test/golden/importless/gtk3.nix+121 test/golden/importless/gtkspell3.nix+8 test/golden/importless/gtkspell3.txt+21 test/golden/importless/gui.nix+49 test/golden/importless/gui.txt+54 test/golden/importless/guice.nix+14 test/golden/importless/gvpe.nix+124 test/golden/importless/gwenview.nix+21 test/golden/importless/gwenview.txt+35 test/golden/importless/hail.nix+61 test/golden/importless/haka.nix+156 test/golden/importless/hamster.nix+15 test/golden/importless/hamster.txt+23 test/golden/importless/hamt.nix+26 test/golden/importless/hamt.txt+26 test/golden/importless/hans.nix+145 test/golden/importless/haproxy-exporter.nix+24 test/golden/importless/haproxy.nix+112 test/golden/importless/hardened.nix+112 test/golden/importless/haveged.nix+67 test/golden/importless/haxe-packages.nix+119 test/golden/importless/hbase.nix+127 test/golden/importless/hdaps.nix+23 test/golden/importless/hdaps.txt+18 test/golden/importless/headerbar-gtk3.nix+30 test/golden/importless/headerbar-gtk3.txt+39 test/golden/importless/headers.nix+11 test/golden/importless/headers.txt+7 test/golden/importless/headless.nix+25 test/golden/importless/headless.txt+17 test/golden/importless/headphones.nix+87 test/golden/importless/heapster.nix+57 test/golden/importless/heartbeat.nix+74 test/golden/importless/heimdal.nix+68 test/golden/importless/hello-world-container.nix+19 test/golden/importless/hello-world-container.txt+29 test/golden/importless/helper.nix+34 test/golden/importless/helper.txt+31 test/golden/importless/helpers.nix+11 test/golden/importless/helpers.txt+1 test/golden/importless/herbstluftwm.nix+38 test/golden/importless/herbstluftwm.txt+34 test/golden/importless/heyefi.nix+82 test/golden/importless/hezarfen.nix+22 test/golden/importless/hezarfen.txt+23 test/golden/importless/hfaxd-default.nix+10 test/golden/importless/hfaxd-default.txt+1 test/golden/importless/hg.nix+39 test/golden/importless/hg.txt+33 test/golden/importless/hidepid.nix+27 test/golden/importless/hidepid.txt+31 test/golden/importless/hidpi.nix+16 test/golden/importless/hls-ghcide.nix+58 test/golden/importless/hls-ghcide.txt+84 test/golden/importless/hologram-agent.nix+58 test/golden/importless/hologram-server.nix+130 test/golden/importless/hoogle.nix+76 test/golden/importless/hostapd.nix+218 test/golden/importless/hound.nix+125 test/golden/importless/hpsa.nix+61 test/golden/importless/hpsa.txt+45 test/golden/importless/hrtime.nix+26 test/golden/importless/hrtime.txt+26 test/golden/importless/html.nix+31 test/golden/importless/html.txt+28 test/golden/importless/htpdate.nix+80 test/golden/importless/http-body.nix+49 test/golden/importless/http-body.txt+37 test/golden/importless/http-getter.nix+23 test/golden/importless/http-getter.txt+24 test/golden/importless/http.nix+25 test/golden/importless/http.txt+29 test/golden/importless/http4idris.nix+25 test/golden/importless/http4idris.txt+25 test/golden/importless/hu_dot_dwim_dot_asdf.nix+26 test/golden/importless/hu_dot_dwim_dot_asdf.txt+11 test/golden/importless/hu_dot_dwim_dot_stefil.nix+32 test/golden/importless/hu_dot_dwim_dot_stefil.txt+16 test/golden/importless/hunchentoot.nix+53 test/golden/importless/hunchentoot.txt+34 test/golden/importless/hyperkit.nix+23 test/golden/importless/hyperkit.txt+37 test/golden/importless/hyperkitty.nix+45 test/golden/importless/hyperv-guest.nix+64 test/golden/importless/hyperv-guest.txt+36 test/golden/importless/i18n.nix+91 test/golden/importless/i2p.nix+34 test/golden/importless/i2p.txt+46 test/golden/importless/i3ipc-glib.nix+34 test/golden/importless/i3ipc-glib.txt+38 test/golden/importless/iaia.nix+25 test/golden/importless/iaia.txt+25 test/golden/importless/ibus-qt.nix+26 test/golden/importless/ibus-qt.txt+35 test/golden/importless/ibus.nix+16 test/golden/importless/ibus.txt+24 test/golden/importless/icecast.nix+130 test/golden/importless/icewm.nix+27 test/golden/importless/icewm.txt+24 test/golden/importless/icingaweb2.nix+244 test/golden/importless/icons.nix+42 test/golden/importless/icons.txt+27 test/golden/importless/ide.nix+43 test/golden/importless/ide.txt+39 test/golden/importless/idle.nix+38 test/golden/importless/idle.txt+41 test/golden/importless/idna.nix+26 test/golden/importless/idna.txt+14 test/golden/importless/idris-wrapper.nix+14 test/golden/importless/idris-wrapper.txt+17 test/golden/importless/idrishighlighter.nix+27 test/golden/importless/idrishighlighter.txt+27 test/golden/importless/idrisscript.nix+22 test/golden/importless/idrisscript.txt+23 test/golden/importless/ieee-floats.nix+28 test/golden/importless/ieee-floats.txt+12 test/golden/importless/iftop.nix+18 test/golden/importless/iftop.txt+18 test/golden/importless/ihaskell.nix+63 test/golden/importless/iio.nix+35 test/golden/importless/iio.txt+22 test/golden/importless/illum.nix+35 test/golden/importless/illum.txt+25 test/golden/importless/imapfilter.nix+27 test/golden/importless/imapfilter.txt+31 test/golden/importless/impl.nix+14 test/golden/importless/impure-deps.nix+256 test/golden/importless/impure-deps.txt+51 test/golden/importless/imwheel.nix+69 test/golden/importless/incidenceeditor.nix+20 test/golden/importless/incidenceeditor.txt+25 test/golden/importless/incron.nix+98 test/golden/importless/indents.nix+11 test/golden/importless/indents.txt+19 test/golden/importless/infinoted.nix+160 test/golden/importless/infix.nix+23 test/golden/importless/influxdb.nix+197 test/golden/importless/info.nix+23 test/golden/importless/info.txt+17 test/golden/importless/infobar.nix+34 test/golden/importless/infobar.txt+35 test/golden/importless/init-script.nix+51 test/golden/importless/init-script.txt+21 test/golden/importless/initrd-network.nix+148 test/golden/importless/initrd-openvpn.nix+81 test/golden/importless/inject-bean.nix+14 test/golden/importless/inject-plexus.nix+14 test/golden/importless/install-crate.nix+51 test/golden/importless/install-crate.txt+1 test/golden/importless/integrations-core.nix+91 test/golden/importless/integrations-core.txt+29 test/golden/importless/intel-2200bg.nix+30 test/golden/importless/intel-2200bg.txt+13 test/golden/importless/intel-microcode.nix+29 test/golden/importless/intel-microcode.txt+18 test/golden/importless/intel.nix+33 test/golden/importless/intel.txt+31 test/golden/importless/interactivity-api.nix+14 test/golden/importless/interception-tools.nix+61 test/golden/importless/interpolation.nix+47 test/golden/importless/introspect-environment.nix+26 test/golden/importless/introspect-environment.txt+11 test/golden/importless/io.nix+14 test/golden/importless/iolib.nix+46 test/golden/importless/iolib.txt+27 test/golden/importless/iolib_dot_asdf.nix+28 test/golden/importless/iolib_dot_asdf.txt+11 test/golden/importless/iolib_dot_base.nix+35 test/golden/importless/iolib_dot_base.txt+18 test/golden/importless/iolib_dot_common-lisp.nix+32 test/golden/importless/iolib_dot_common-lisp.txt+16 test/golden/importless/iolib_dot_conf.nix+30 test/golden/importless/iolib_dot_conf.txt+15 test/golden/importless/iolib_dot_grovel.nix+39 test/golden/importless/iolib_dot_grovel.txt+23 test/golden/importless/iotop.nix+17 test/golden/importless/iotop.txt+16 test/golden/importless/ipadic.nix+18 test/golden/importless/ipadic.txt+15 test/golden/importless/iperf3.nix+97 test/golden/importless/ipfs.nix+307 test/golden/importless/ipkgparser.nix+26 test/golden/importless/ipkgparser.txt+17 test/golden/importless/iprange.nix+18 test/golden/importless/iprange.txt+20 test/golden/importless/iproute2.nix+32 test/golden/importless/iproute2.txt+38 test/golden/importless/ipxe.nix+64 test/golden/importless/iris.nix+29 test/golden/importless/irkerd.nix+67 test/golden/importless/ironclad.nix+31 test/golden/importless/ironclad.txt+18 test/golden/importless/irqbalance.nix+24 test/golden/importless/irqbalance.txt+18 test/golden/importless/iso-image.nix+716 test/golden/importless/iterate.nix+28 test/golden/importless/iterate.txt+12 test/golden/importless/iucode-tool.nix+25 test/golden/importless/iucode-tool.txt+28 test/golden/importless/iwd.nix+29 test/golden/importless/iwd.txt+29 test/golden/importless/ixf.nix+34 test/golden/importless/ixf.txt+23 test/golden/importless/jack.nix+291 test/golden/importless/jack1.nix+39 test/golden/importless/jackett.nix+82 test/golden/importless/janePackage.nix+19 test/golden/importless/janePackage.txt+21 test/golden/importless/janePackage_0_12.nix+19 test/golden/importless/janePackage_0_12.txt+20 test/golden/importless/janePackage_0_13.nix+19 test/golden/importless/janePackage_0_13.txt+20 test/golden/importless/java-boot-classpath-detector.nix+14 test/golden/importless/java-packages.nix+315 test/golden/importless/java-test.nix+58 test/golden/importless/java-test.txt+21 test/golden/importless/java.nix+58 test/golden/importless/java.txt+20 test/golden/importless/jdk-darwin-base.nix+53 test/golden/importless/jdk-darwin-base.txt+33 test/golden/importless/jdk-linux-base.nix+192 test/golden/importless/jdk11-linux.nix+54 test/golden/importless/jdk11-linux.txt+25 test/golden/importless/jdk14-linux.nix+54 test/golden/importless/jdk14-linux.txt+25 test/golden/importless/jellyfin.nix+70 test/golden/importless/jfs.nix+19 test/golden/importless/jgrpp.nix+13 test/golden/importless/jgrpp.txt+7 test/golden/importless/jheiling-extras.nix+25 test/golden/importless/jheiling-extras.txt+25 test/golden/importless/jheiling-js.nix+27 test/golden/importless/jheiling-js.txt+27 test/golden/importless/jicofo.nix+152 test/golden/importless/jira.nix+204 test/golden/importless/jitsi-meet.nix+334 test/golden/importless/jitsi-videobridge.nix+276 test/golden/importless/jmx-httpserver.nix+35 test/golden/importless/jmx-httpserver.txt+32 test/golden/importless/job-builder.nix+205 test/golden/importless/jonathan.nix+42 test/golden/importless/jonathan.txt+29 test/golden/importless/journalbeat.nix+107 test/golden/importless/journaldriver.nix+112 test/golden/importless/journalwatch.nix+264 test/golden/importless/js-build-tools.nix+29 test/golden/importless/js-build-tools.txt+27 test/golden/importless/js.nix+26 test/golden/importless/js.txt+26 test/golden/importless/json-exporter.nix+32 test/golden/importless/json-exporter.txt+31 test/golden/importless/json-exporter_deps.nix+111 test/golden/importless/json-exporter_deps.txt+4 test/golden/importless/json.nix+35 test/golden/importless/json.txt+15 test/golden/importless/jsr305.nix+15 test/golden/importless/jwm-settings-manager.nix+44 test/golden/importless/jwm-settings-manager.txt+42 test/golden/importless/jwm.nix+25 test/golden/importless/jwm.txt+24 test/golden/importless/k3b.nix+48 test/golden/importless/k3b.txt+59 test/golden/importless/kactivities-stats.nix+14 test/golden/importless/kactivities-stats.txt+18 test/golden/importless/kactivities.nix+15 test/golden/importless/kactivities.txt+20 test/golden/importless/kactivitymanagerd.nix+15 test/golden/importless/kactivitymanagerd.txt+16 test/golden/importless/kaddressbook.nix+22 test/golden/importless/kaddressbook.txt+35 test/golden/importless/kak-ansi.nix+32 test/golden/importless/kak-ansi.txt+28 test/golden/importless/kak-auto-pairs.nix+24 test/golden/importless/kak-auto-pairs.txt+28 test/golden/importless/kak-buffers.nix+24 test/golden/importless/kak-buffers.txt+28 test/golden/importless/kak-fzf.nix+38 test/golden/importless/kak-fzf.txt+33 test/golden/importless/kak-plumb.nix+31 test/golden/importless/kak-plumb.txt+29 test/golden/importless/kak-powerline.nix+29 test/golden/importless/kak-powerline.txt+30 test/golden/importless/kak-prelude.nix+25 test/golden/importless/kak-prelude.txt+28 test/golden/importless/kak-vertical-selection.nix+24 test/golden/importless/kak-vertical-selection.txt+28 test/golden/importless/kalarm.nix+37 test/golden/importless/kalarm.txt+53 test/golden/importless/kalarmcal.nix+19 test/golden/importless/kalarmcal.txt+22 test/golden/importless/kalzium.nix+26 test/golden/importless/kalzium.txt+34 test/golden/importless/kapacitor.nix+191 test/golden/importless/kapidox.nix+10 test/golden/importless/kapidox.txt+13 test/golden/importless/kapman.nix+21 test/golden/importless/kapman.txt+29 test/golden/importless/kapptemplate.nix+24 test/golden/importless/kapptemplate.txt+29 test/golden/importless/karchive.nix+17 test/golden/importless/karchive.txt+18 test/golden/importless/kate.nix+36 test/golden/importless/kate.txt+45 test/golden/importless/katomic.nix+22 test/golden/importless/katomic.txt+30 test/golden/importless/kbdlight.nix+16 test/golden/importless/kbdlight.txt+17 test/golden/importless/kbfs.nix+118 test/golden/importless/kblackbox.nix+21 test/golden/importless/kblackbox.txt+29 test/golden/importless/kblocks.nix+21 test/golden/importless/kblocks.txt+29 test/golden/importless/kbookmarks.nix+17 test/golden/importless/kbookmarks.txt+23 test/golden/importless/kbounce.nix+22 test/golden/importless/kbounce.txt+30 test/golden/importless/kbreakout.nix+22 test/golden/importless/kbreakout.txt+20 test/golden/importless/kcachegrind.nix+16 test/golden/importless/kcachegrind.txt+26 test/golden/importless/kcalc.nix+19 test/golden/importless/kcalc.txt+28 test/golden/importless/kcalendarcore.nix+16 test/golden/importless/kcalendarcore.txt+14 test/golden/importless/kcalutils.nix+20 test/golden/importless/kcalutils.txt+28 test/golden/importless/kcharselect.nix+19 test/golden/importless/kcharselect.txt+27 test/golden/importless/kcodecs.nix+13 test/golden/importless/kcodecs.txt+17 test/golden/importless/kcolorchooser.nix+15 test/golden/importless/kcolorchooser.txt+20 test/golden/importless/kcompletion.nix+14 test/golden/importless/kcompletion.txt+18 test/golden/importless/kconfig.nix+12 test/golden/importless/kconfig.txt+15 test/golden/importless/kcontacts.nix+15 test/golden/importless/kcontacts.txt+18 test/golden/importless/kcoreaddons.nix+16 test/golden/importless/kcoreaddons.txt+16 test/golden/importless/kcrash.nix+14 test/golden/importless/kcrash.txt+18 test/golden/importless/kdav.nix+15 test/golden/importless/kdav.txt+22 test/golden/importless/kdbusaddons.nix+16 test/golden/importless/kdbusaddons.txt+16 test/golden/importless/kde-cli-tools.nix+28 test/golden/importless/kde-cli-tools.txt+27 test/golden/importless/kdebugsettings.nix+20 test/golden/importless/kdebugsettings.txt+27 test/golden/importless/kdeclarative.nix+16 test/golden/importless/kdeclarative.txt+24 test/golden/importless/kdeconnect-kde.nix+72 test/golden/importless/kdeconnect-kde.txt+46 test/golden/importless/kdecoration.nix+12 test/golden/importless/kdecoration.txt+15 test/golden/importless/kded.nix+16 test/golden/importless/kded.txt+23 test/golden/importless/kdegraphics-mobipocket.nix+16 test/golden/importless/kdegraphics-mobipocket.txt+19 test/golden/importless/kdegraphics-thumbnailers.nix+14 test/golden/importless/kdegraphics-thumbnailers.txt+22 test/golden/importless/kdenetwork-filesharing.nix+15 test/golden/importless/kdenetwork-filesharing.txt+24 test/golden/importless/kdenlive.nix+104 test/golden/importless/kdenlive.txt+50 test/golden/importless/kdeplasma-addons.nix+18 test/golden/importless/kdeplasma-addons.txt+27 test/golden/importless/kdesignerplugin.nix+17 test/golden/importless/kdesignerplugin.txt+27 test/golden/importless/kdev-php.nix+22 test/golden/importless/kdev-php.txt+34 test/golden/importless/kdev-python.nix+26 test/golden/importless/kdev-python.txt+35 test/golden/importless/kdevelop-pg-qt.nix+31 test/golden/importless/kdevelop-pg-qt.txt+32 test/golden/importless/kdevelop.nix+73 test/golden/importless/kdevelop.txt+76 test/golden/importless/kdewebkit.nix+14 test/golden/importless/kdewebkit.txt+18 test/golden/importless/kdf.nix+15 test/golden/importless/kdf.txt+24 test/golden/importless/kdialog.nix+18 test/golden/importless/kdialog.txt+22 test/golden/importless/kdiamond.nix+23 test/golden/importless/kdiamond.txt+31 test/golden/importless/kdnssd.nix+17 test/golden/importless/kdnssd.txt+17 test/golden/importless/keditbookmarks.nix+17 test/golden/importless/keditbookmarks.txt+27 test/golden/importless/kemoticons.nix+13 test/golden/importless/kemoticons.txt+17 test/golden/importless/kernel-options.nix+60 test/golden/importless/kernel.nix+335 test/golden/importless/kernel_config.nix+137 test/golden/importless/kexec.nix+32 test/golden/importless/kexec.txt+31 test/golden/importless/keybase.nix+47 test/golden/importless/keybase.txt+37 test/golden/importless/keylight-exporter.nix+26 test/golden/importless/keylight-exporter.txt+30 test/golden/importless/keylight.nix+19 test/golden/importless/keylight.txt+8 test/golden/importless/keymaps.nix+36 test/golden/importless/kfind.nix+17 test/golden/importless/kfind.txt+24 test/golden/importless/kfloppy.nix+20 test/golden/importless/kfloppy.txt+28 test/golden/importless/kgamma5.nix+11 test/golden/importless/kgamma5.txt+12 test/golden/importless/kgeography.nix+15 test/golden/importless/kgeography.txt+19 test/golden/importless/kget.nix+22 test/golden/importless/kget.txt+32 test/golden/importless/kglobalaccel.nix+16 test/golden/importless/kglobalaccel.txt+20 test/golden/importless/kgpg.nix+24 test/golden/importless/kgpg.txt+39 test/golden/importless/kguiaddons.nix+17 test/golden/importless/kguiaddons.txt+16 test/golden/importless/khelpcenter.nix+15 test/golden/importless/khelpcenter.txt+18 test/golden/importless/kholidays.nix+16 test/golden/importless/kholidays.txt+24 test/golden/importless/khotkeys.nix+17 test/golden/importless/khotkeys.txt+24 test/golden/importless/khtml.nix+19 test/golden/importless/khtml.txt+33 test/golden/importless/ki18n.nix+16 test/golden/importless/ki18n.txt+18 test/golden/importless/kibana.nix+208 test/golden/importless/kidentitymanagement.nix+20 test/golden/importless/kidentitymanagement.txt+29 test/golden/importless/kidletime.nix+16 test/golden/importless/kidletime.txt+15 test/golden/importless/kig.nix+19 test/golden/importless/kig.txt+21 test/golden/importless/kigo.nix+22 test/golden/importless/kigo.txt+30 test/golden/importless/killbots.nix+21 test/golden/importless/killbots.txt+29 test/golden/importless/kimageformats.nix+16 test/golden/importless/kimageformats.txt+18 test/golden/importless/kimap.nix+17 test/golden/importless/kimap.txt+21 test/golden/importless/kinfocenter.nix+18 test/golden/importless/kinfocenter.txt+28 test/golden/importless/kio-extras.nix+23 test/golden/importless/kio-extras.txt+49 test/golden/importless/kipi-plugins.nix+23 test/golden/importless/kipi-plugins.txt+34 test/golden/importless/kippo.nix+117 test/golden/importless/kirigami2.nix+11 test/golden/importless/kirigami2.txt+15 test/golden/importless/kitemmodels.nix+16 test/golden/importless/kitemmodels.txt+14 test/golden/importless/kitemviews.nix+17 test/golden/importless/kitemviews.txt+16 test/golden/importless/kitinerary.nix+23 test/golden/importless/kitinerary.txt+27 test/golden/importless/kjobwidgets.nix+12 test/golden/importless/kjobwidgets.txt+16 test/golden/importless/kjs.nix+12 test/golden/importless/kjs.txt+15 test/golden/importless/kjsembed.nix+13 test/golden/importless/kjsembed.txt+18 test/golden/importless/kldap.nix+17 test/golden/importless/kldap.txt+21 test/golden/importless/kleopatra.nix+19 test/golden/importless/kleopatra.txt+26 test/golden/importless/klettres.nix+22 test/golden/importless/klettres.txt+30 test/golden/importless/klines.nix+21 test/golden/importless/klines.txt+29 test/golden/importless/klogd.nix+37 test/golden/importless/klogd.txt+33 test/golden/importless/kmag.nix+20 test/golden/importless/kmag.txt+28 test/golden/importless/kmahjongg.nix+19 test/golden/importless/kmahjongg.txt+22 test/golden/importless/kmail-account-wizard.nix+21 test/golden/importless/kmail-account-wizard.txt+33 test/golden/importless/kmail.nix+30 test/golden/importless/kmail.txt+56 test/golden/importless/kmailtransport.nix+19 test/golden/importless/kmailtransport.txt+28 test/golden/importless/kmbox.nix+16 test/golden/importless/kmbox.txt+23 test/golden/importless/kmediaplayer.nix+12 test/golden/importless/kmediaplayer.txt+14 test/golden/importless/kmenuedit.nix+14 test/golden/importless/kmenuedit.txt+15 test/golden/importless/kmime.nix+17 test/golden/importless/kmime.txt+22 test/golden/importless/kmines.nix+23 test/golden/importless/kmines.txt+31 test/golden/importless/kmix.nix+20 test/golden/importless/kmix.txt+29 test/golden/importless/kmod.nix+43 test/golden/importless/kmod.txt+39 test/golden/importless/kmplot.nix+15 test/golden/importless/kmplot.txt+25 test/golden/importless/kmrcl.nix+24 test/golden/importless/kmrcl.txt+11 test/golden/importless/kmscon.nix+100 test/golden/importless/knavalbattle.nix+22 test/golden/importless/knavalbattle.txt+30 test/golden/importless/knetwalk.nix+21 test/golden/importless/knetwalk.txt+29 test/golden/importless/knewstuff.nix+25 test/golden/importless/knewstuff.txt+32 test/golden/importless/knights.nix+23 test/golden/importless/knights.txt+31 test/golden/importless/knot.nix+117 test/golden/importless/knotes.nix+29 test/golden/importless/knotes.txt+40 test/golden/importless/knotifications.nix+16 test/golden/importless/knotifications.txt+20 test/golden/importless/knotifyconfig.nix+14 test/golden/importless/knotifyconfig.txt+20 test/golden/importless/kodi-advanced-launchers.nix+40 test/golden/importless/kodi.nix+31 test/golden/importless/kodi.txt+28 test/golden/importless/kolf.nix+16 test/golden/importless/kolf.txt+22 test/golden/importless/kollision.nix+21 test/golden/importless/kollision.txt+29 test/golden/importless/kolourpaint.nix+17 test/golden/importless/kolourpaint.txt+20 test/golden/importless/kompare.nix+15 test/golden/importless/kompare.txt+19 test/golden/importless/konqueror.nix+28 test/golden/importless/konqueror.txt+23 test/golden/importless/konquest.nix+18 test/golden/importless/konquest.txt+21 test/golden/importless/konsole.nix+24 test/golden/importless/konsole.txt+45 test/golden/importless/kontact.nix+23 test/golden/importless/kontact.txt+28 test/golden/importless/kontactinterface.nix+17 test/golden/importless/kontactinterface.txt+23 test/golden/importless/korganizer.nix+29 test/golden/importless/korganizer.txt+35 test/golden/importless/kparts.nix+17 test/golden/importless/kparts.txt+24 test/golden/importless/kpat.nix+25 test/golden/importless/kpat.txt+23 test/golden/importless/kpeople.nix+16 test/golden/importless/kpeople.txt+20 test/golden/importless/kpimtextedit.nix+23 test/golden/importless/kpimtextedit.txt+37 test/golden/importless/kpkpass.nix+16 test/golden/importless/kpkpass.txt+23 test/golden/importless/kplotting.nix+14 test/golden/importless/kplotting.txt+15 test/golden/importless/kpty.nix+9 test/golden/importless/kpty.txt+16 test/golden/importless/kqtquickcharts.nix+15 test/golden/importless/kqtquickcharts.txt+21 test/golden/importless/kquickcharts.nix+15 test/golden/importless/kquickcharts.txt+14 test/golden/importless/krb5.nix+97 test/golden/importless/krdc.nix+25 test/golden/importless/krdc.txt+36 test/golden/importless/kreversi.nix+19 test/golden/importless/kreversi.txt+27 test/golden/importless/krfb.nix+16 test/golden/importless/krfb.txt+26 test/golden/importless/krohnkite.nix+39 test/golden/importless/krohnkite.txt+35 test/golden/importless/kross.nix+14 test/golden/importless/kross.txt+25 test/golden/importless/kruler.nix+17 test/golden/importless/kruler.txt+22 test/golden/importless/krunner.nix+19 test/golden/importless/krunner.txt+25 test/golden/importless/kscreen.nix+17 test/golden/importless/kscreen.txt+21 test/golden/importless/kscreenlocker.nix+17 test/golden/importless/kscreenlocker.txt+25 test/golden/importless/kshisen.nix+22 test/golden/importless/kshisen.txt+30 test/golden/importless/kspaceduel.nix+22 test/golden/importless/kspaceduel.txt+20 test/golden/importless/ksquares.nix+22 test/golden/importless/ksquares.txt+30 test/golden/importless/ksshaskpass.nix+11 test/golden/importless/ksshaskpass.txt+12 test/golden/importless/ksudoku.nix+18 test/golden/importless/ksudoku.txt+21 test/golden/importless/ksysguard.nix+16 test/golden/importless/ksysguard.txt+18 test/golden/importless/ksystemlog.nix+17 test/golden/importless/ksystemlog.txt+22 test/golden/importless/kteatime.nix+23 test/golden/importless/kteatime.txt+31 test/golden/importless/ktexteditor.nix+19 test/golden/importless/ktexteditor.txt+28 test/golden/importless/ktextwidgets.nix+16 test/golden/importless/ktextwidgets.txt+23 test/golden/importless/ktimer.nix+20 test/golden/importless/ktimer.txt+28 test/golden/importless/ktnef.nix+18 test/golden/importless/ktnef.txt+24 test/golden/importless/ktouch.nix+28 test/golden/importless/ktouch.txt+42 test/golden/importless/kturtle.nix+21 test/golden/importless/kturtle.txt+29 test/golden/importless/kunitconversion.nix+9 test/golden/importless/kunitconversion.txt+15 test/golden/importless/kvm-deps.nix+21 test/golden/importless/kvm-deps.txt+4 test/golden/importless/kvm.nix+28 test/golden/importless/kvm.txt+33 test/golden/importless/kvm2.nix+27 test/golden/importless/kvm2.txt+39 test/golden/importless/kvmgt.nix+86 test/golden/importless/kwallet-pam.nix+21 test/golden/importless/kwallet-pam.txt+19 test/golden/importless/kwallet.nix+18 test/golden/importless/kwallet.txt+27 test/golden/importless/kwalletmanager.nix+26 test/golden/importless/kwalletmanager.txt+26 test/golden/importless/kwave.nix+37 test/golden/importless/kwave.txt+44 test/golden/importless/kwayland-integration.nix+11 test/golden/importless/kwayland-integration.txt+11 test/golden/importless/kwayland.nix+17 test/golden/importless/kwayland.txt+19 test/golden/importless/kwidgetsaddons.nix+17 test/golden/importless/kwidgetsaddons.txt+16 test/golden/importless/kwrited.nix+11 test/golden/importless/kwrited.txt+12 test/golden/importless/kxmlgui.nix+17 test/golden/importless/kxmlgui.txt+25 test/golden/importless/kxmlrpcclient.nix+10 test/golden/importless/kxmlrpcclient.txt+16 test/golden/importless/l10ns.nix+66 test/golden/importless/label.nix+72 test/golden/importless/labs_consol_de.nix+77 test/golden/importless/labs_consol_de.txt+38 test/golden/importless/lack-component.nix+34 test/golden/importless/lack-component.txt+11 test/golden/importless/lack-middleware-backtrace.nix+34 test/golden/importless/lack-middleware-backtrace.txt+11 test/golden/importless/lack-util.nix+38 test/golden/importless/lack-util.txt+17 test/golden/importless/lack.nix+41 test/golden/importless/lack.txt+19 test/golden/importless/ladspah.nix+26 test/golden/importless/ladspah.txt+25 test/golden/importless/lambdabot.nix+82 test/golden/importless/languages.nix+289 test/golden/importless/lastfm.nix+38 test/golden/importless/lastfm.txt+39 test/golden/importless/latest.nix+160 test/golden/importless/layout-manager.nix+39 test/golden/importless/layout-manager.txt+39 test/golden/importless/lazarus.nix+53 test/golden/importless/lazarus.txt+45 test/golden/importless/lazy-pack.nix+48 test/golden/importless/lcd.nix+172 test/golden/importless/ldap3.nix+17 test/golden/importless/leaps.nix+62 test/golden/importless/ledger.nix+14 test/golden/importless/ledger.txt+12 test/golden/importless/leftwm.nix+25 test/golden/importless/leftwm.txt+24 test/golden/importless/legacy.nix+43 test/golden/importless/legacy.txt+33 test/golden/importless/lens.nix+25 test/golden/importless/lens.txt+25 test/golden/importless/less.nix+131 test/golden/importless/let-plus.nix+29 test/golden/importless/let-plus.txt+17 test/golden/importless/lev.nix+28 test/golden/importless/lev.txt+17 test/golden/importless/lfarm-client.nix+41 test/golden/importless/lfarm-client.txt+22 test/golden/importless/lfarm-common.nix+41 test/golden/importless/lfarm-common.txt+20 test/golden/importless/lfarm-server.nix+40 test/golden/importless/lfarm-server.txt+21 test/golden/importless/lfarm-ssl.nix+42 test/golden/importless/lfarm-ssl.txt+26 test/golden/importless/lgc.nix+52 test/golden/importless/lgc.txt+29 test/golden/importless/lib.nix+33 test/golden/importless/libarcus.nix+33 test/golden/importless/libarcus.txt+37 test/golden/importless/libbitcoin-client.nix+38 test/golden/importless/libbitcoin-client.txt+36 test/golden/importless/libbitcoin-explorer.nix+39 test/golden/importless/libbitcoin-explorer.txt+37 test/golden/importless/libbitcoin-network.nix+38 test/golden/importless/libbitcoin-network.txt+36 test/golden/importless/libbitcoin-protocol.nix+39 test/golden/importless/libbitcoin-protocol.txt+38 test/golden/importless/libbitcoin.nix+39 test/golden/importless/libbitcoin.txt+35 test/golden/importless/libc++abi.nix+51 test/golden/importless/libc++abi.txt+43 test/golden/importless/libcroco.nix+33 test/golden/importless/libcroco.txt+32 test/golden/importless/libdislocator.nix+37 test/golden/importless/libdislocator.txt+27 test/golden/importless/libdispatch.nix+12 test/golden/importless/libdispatch.txt+12 test/golden/importless/libfakeXinerama.nix+33 test/golden/importless/libfakeXinerama.txt+31 test/golden/importless/libfolia.nix+34 test/golden/importless/libgdata.nix+11 test/golden/importless/libgdata.txt+11 test/golden/importless/libgenerated.nix+95 test/golden/importless/libgravatar.nix+18 test/golden/importless/libgravatar.txt+25 test/golden/importless/libinput.nix+252 test/golden/importless/libjcat.nix+5 test/golden/importless/libjcat.txt+2 test/golden/importless/libkcddb.nix+17 test/golden/importless/libkcddb.txt+27 test/golden/importless/libkdcraw.nix+13 test/golden/importless/libkdcraw.txt+23 test/golden/importless/libkdegames.nix+26 test/golden/importless/libkdegames.txt+26 test/golden/importless/libkdepim.nix+21 test/golden/importless/libkdepim.txt+29 test/golden/importless/libkexiv2.nix+13 test/golden/importless/libkexiv2.txt+23 test/golden/importless/libkgapi.nix+17 test/golden/importless/libkgapi.txt+27 test/golden/importless/libkipi.nix+12 test/golden/importless/libkipi.txt+24 test/golden/importless/libkleo.nix+21 test/golden/importless/libkleo.txt+27 test/golden/importless/libkmahjongg.nix+18 test/golden/importless/libkmahjongg.txt+26 test/golden/importless/libkomparediff2.nix+7 test/golden/importless/libkomparediff2.txt+10 test/golden/importless/libksane.nix+16 test/golden/importless/libksane.txt+23 test/golden/importless/libksieve.nix+23 test/golden/importless/libksieve.txt+30 test/golden/importless/libmaa.nix+22 test/golden/importless/libmaa.txt+16 test/golden/importless/libnvc.nix+55 test/golden/importless/libnvc.txt+29 test/golden/importless/libopenshot-audio.nix+35 test/golden/importless/libopenshot-audio.txt+41 test/golden/importless/libopenshot.nix+51 test/golden/importless/libopenshot.txt+48 test/golden/importless/liboping.nix+22 test/golden/importless/liboping.txt+16 test/golden/importless/libraries.nix+72 test/golden/importless/library.nix+22 test/golden/importless/library.txt+33 test/golden/importless/libreswan.nix+129 test/golden/importless/libsavitar.nix+33 test/golden/importless/libsavitar.txt+35 test/golden/importless/libsigrok4dsl.nix+28 test/golden/importless/libsigrok4dsl.txt+41 test/golden/importless/libsigrokdecode4dsl.nix+27 test/golden/importless/libsigrokdecode4dsl.txt+36 test/golden/importless/libtokencap.nix+32 test/golden/importless/libtokencap.txt+27 test/golden/importless/libtool2.nix+45 test/golden/importless/libtool2.txt+35 test/golden/importless/libungif.nix+17 test/golden/importless/libungif.txt+15 test/golden/importless/libunwind.nix+25 test/golden/importless/libunwind.txt+22 test/golden/importless/libusb1.nix+38 test/golden/importless/libusb1.txt+36 test/golden/importless/libxkbcommon_7.nix+32 test/golden/importless/libxkbcommon_7.txt+38 test/golden/importless/libxmlb.nix+5 test/golden/importless/libxmlb.txt+2 test/golden/importless/libxpdf.nix+53 test/golden/importless/libxpdf.txt+16 test/golden/importless/licenses.nix+808 test/golden/importless/licenses.txt+190 test/golden/importless/lidarr.nix+89 test/golden/importless/lift.nix+25 test/golden/importless/lift.txt+11 test/golden/importless/light.nix+27 test/golden/importless/light.txt+19 test/golden/importless/lightyear.nix+25 test/golden/importless/lightyear.txt+26 test/golden/importless/limesdr.nix+40 test/golden/importless/limesdr.txt+40 test/golden/importless/linux-4.14.nix+18 test/golden/importless/linux-4.14.txt+23 test/golden/importless/linux-4.19.nix+18 test/golden/importless/linux-4.19.txt+23 test/golden/importless/linux-4.4.nix+11 test/golden/importless/linux-4.4.txt+10 test/golden/importless/linux-4.9.nix+11 test/golden/importless/linux-4.9.txt+10 test/golden/importless/linux-5.4.nix+18 test/golden/importless/linux-5.4.txt+23 test/golden/importless/linux-5.8.nix+18 test/golden/importless/linux-5.8.txt+23 test/golden/importless/linux-5.9.nix+18 test/golden/importless/linux-5.9.txt+23 test/golden/importless/linux-hardkernel-4.14.nix+33 test/golden/importless/linux-hardkernel-4.14.txt+22 test/golden/importless/linux-libre.nix+42 test/golden/importless/linux-rpi.nix+70 test/golden/importless/linux-rt-5.4.nix+41 test/golden/importless/linux-rt-5.6.nix+41 test/golden/importless/linux-testing-bcachefs.nix+22 test/golden/importless/linux-testing-bcachefs.txt+27 test/golden/importless/linux-testing.nix+20 test/golden/importless/linux-zen.nix+24 test/golden/importless/linux-zen.txt+19 test/golden/importless/linux.nix+21 test/golden/importless/linux.txt+15 test/golden/importless/linuxbrowser.nix+49 test/golden/importless/linuxbrowser.txt+35 test/golden/importless/liquidsoap.nix+69 test/golden/importless/lirc.nix+100 test/golden/importless/lisp-namespace.nix+27 test/golden/importless/lisp-namespace.txt+11 test/golden/importless/lisp-packages.nix+81 test/golden/importless/lisp-unit2.nix+38 test/golden/importless/lisp-unit2.txt+22 test/golden/importless/list-of.nix+26 test/golden/importless/list-of.txt+14 test/golden/importless/lists.nix+675 test/golden/importless/litecoin.nix+55 test/golden/importless/litecoin.txt+55 test/golden/importless/lld.nix+33 test/golden/importless/lld.txt+32 test/golden/importless/lldb.nix+67 test/golden/importless/lldb.txt+54 test/golden/importless/lldpd.nix+39 test/golden/importless/lldpd.txt+43 test/golden/importless/llvm.nix+52 test/golden/importless/llvm.txt+48 test/golden/importless/lnd-exporter.nix+26 test/golden/importless/lnd-exporter.txt+28 test/golden/importless/lnd.nix+46 test/golden/importless/local-time.nix+32 test/golden/importless/local-time.txt+18 test/golden/importless/local.nix+30 test/golden/importless/locale.nix+94 test/golden/importless/locales.nix+68 test/golden/importless/locales.txt+20 test/golden/importless/localtime.nix+48 test/golden/importless/localtime.txt+34 test/golden/importless/location-options.nix+94 test/golden/importless/lock-color.nix+62 test/golden/importless/lock-color.txt+47 test/golden/importless/lock-effects.nix+39 test/golden/importless/lock-effects.txt+44 test/golden/importless/lock-fancy-rapid.nix+32 test/golden/importless/lock-fancy-rapid.txt+34 test/golden/importless/lock-fancy.nix+47 test/golden/importless/lock-fancy.txt+40 test/golden/importless/lock-kernel-modules.nix+48 test/golden/importless/lock-kernel-modules.txt+44 test/golden/importless/lock.nix+37 test/golden/importless/lock.txt+45 test/golden/importless/log.nix+59 test/golden/importless/log.txt+3 test/golden/importless/log4cl.nix+30 test/golden/importless/log4cl.txt+17 test/golden/importless/logcheck.nix+238 test/golden/importless/logic.nix+28 test/golden/importless/logic.txt+26 test/golden/importless/logkeys.nix+30 test/golden/importless/logkeys.txt+30 test/golden/importless/logmein-hamachi.nix+50 test/golden/importless/logmein-hamachi.txt+28 test/golden/importless/loki.nix+112 test/golden/importless/longview.nix+160 test/golden/importless/lorri.nix+56 test/golden/importless/lparallel.nix+27 test/golden/importless/lparallel.txt+15 test/golden/importless/lquery.nix+31 test/golden/importless/lquery.txt+19 test/golden/importless/lshd.nix+183 test/golden/importless/ltc.nix+61 test/golden/importless/ltc.txt+44 test/golden/importless/lts.nix+82 test/golden/importless/lua-packages.nix+164 test/golden/importless/luarocks-nix.nix+14 test/golden/importless/luarocks-nix.txt+9 test/golden/importless/lumina.nix+42 test/golden/importless/lumina.txt+28 test/golden/importless/lvm.nix+70 test/golden/importless/lvm2.nix+76 test/golden/importless/lvm2.txt+28 test/golden/importless/lwm.nix+25 test/golden/importless/lwm.txt+24 test/golden/importless/lwt-unix.nix+19 test/golden/importless/lwt-unix.txt+26 test/golden/importless/lwt.nix+16 test/golden/importless/lxc.nix+82 test/golden/importless/lxcfs.nix+45 test/golden/importless/lxcfs.txt+40 test/golden/importless/lxd.nix+150 test/golden/importless/lxmenu-data.nix+20 test/golden/importless/lxmenu-data.txt+18 test/golden/importless/lxqt.nix+67 test/golden/importless/lyricbar.nix+26 test/golden/importless/lyricbar.txt+34 test/golden/importless/m2install.nix+21 test/golden/importless/m2install.txt+20 test/golden/importless/m32edit.nix+9 test/golden/importless/m32edit.txt+12 test/golden/importless/mac.nix+69 test/golden/importless/mac.txt+46 test/golden/importless/machine.nix+26 test/golden/importless/machine.txt+24 test/golden/importless/macport.nix+120 test/golden/importless/macport.txt+63 test/golden/importless/macvim.nix+173 test/golden/importless/macvim.txt+52 test/golden/importless/magic-wormhole-mailbox-server.nix+28 test/golden/importless/magic-wormhole-mailbox-server.txt+36 test/golden/importless/magnetico.nix+218 test/golden/importless/mail-exporter.nix+34 test/golden/importless/mail-exporter.txt+37 test/golden/importless/mail-exporter_deps.nix+92 test/golden/importless/mail-exporter_deps.txt+4 test/golden/importless/mail.nix+158 test/golden/importless/mailcatcher.nix+68 test/golden/importless/mailhog.nix+44 test/golden/importless/mailhog.txt+33 test/golden/importless/mailpile.nix+72 test/golden/importless/mailpile.txt+57 test/golden/importless/mainline.nix+6 test/golden/importless/mainline.txt+4 test/golden/importless/maintainer-list.nix+9593 test/golden/importless/maintainer-list.txt+3003 test/golden/importless/maintainers.nix+76 test/golden/importless/make-bootstrap.nix+31 test/golden/importless/make-bootstrap.txt+3 test/golden/importless/make-channel.nix+31 test/golden/importless/make-channel.txt+15 test/golden/importless/make-dbus-conf.nix+42 test/golden/importless/make-dbus-conf.txt+18 test/golden/importless/make-disk-image.nix+296 test/golden/importless/make-ext4-fs.nix+88 test/golden/importless/make-ext4-fs.txt+23 test/golden/importless/make-fonts-cache.nix+33 test/golden/importless/make-fonts-cache.txt+15 test/golden/importless/make-fonts-conf.nix+15 test/golden/importless/make-fonts-conf.txt+11 test/golden/importless/make-initrd.nix+52 test/golden/importless/make-iso9660-image.nix+65 test/golden/importless/make-peer.nix+23 test/golden/importless/make-peer.txt+52 test/golden/importless/make-snap.nix+84 test/golden/importless/make-squashfs.nix+28 test/golden/importless/make-squashfs.txt+11 test/golden/importless/make-system-tarball.nix+56 test/golden/importless/makeDotElm.nix+35 test/golden/importless/makeDotElm.txt+20 test/golden/importless/malcontent.nix+40 test/golden/importless/malcontent.txt+21 test/golden/importless/malloc.nix+91 test/golden/importless/malloc.txt+37 test/golden/importless/mame.nix+67 test/golden/importless/man.nix+37 test/golden/importless/man.txt+31 test/golden/importless/manifestparser.nix+26 test/golden/importless/manual-packages.nix+177 test/golden/importless/map-set.nix+24

1970 more files changed are not listed.

.github/workflows/build_docs.yamlnew file+54
@@ -0,0 +1,54 @@
1+name: Build docs
2+on:
3+ push:
4+ branches:
5+ - master
6+ paths:
7+ - docs/**
8+ pull_request:
9+ branches:
10+ - master
11+ paths:
12+ - docs/**
13+
14+jobs:
15+ linux:
16+ name: Build docs
17+ runs-on: ubuntu-latest
18+ steps:
19+ - uses: actions/checkout@v2
20+ - uses: cachix/install-nix-action@v13
21+ - name: Build
22+ id: build
23+ run: |
24+ cd docs
25+ mkdir res
26+ for f in $(nix-build)
27+ do
28+ cp $f/*.pdf res
29+ done
30+ - uses: actions/upload-artifact@v2
31+ with:
32+ name: docs
33+ path: docs/res/*.pdf
34+ - uses: "marvinpinto/action-automatic-releases@latest"
35+ with:
36+ repo_token: "${{ secrets.GITHUB_TOKEN }}"
37+ automatic_release_tag: "docs_latest"
38+ # prerelease: true
39+ title: "Docs"
40+ files: |
41+ docs/res/*.pdf
42+ # - name: Create Release
43+ # uses: actions/create-release@v1
44+ # env:
45+ # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
46+ # with:
47+ # tag_name: ${{ github.ref }}
48+ # release_name: Release ${{ github.ref }}
49+ # body: |
50+ # Changes in this Release
51+ # - First Change
52+ # - Second Change
53+ # draft: false
54+ # prerelease: false
.gitignore+1
@@ -1,3 +1,4 @@
11.stack-work/
22*~
33tix.cabal
4+docs/result*
app/Main.hs+12−7
@@ -1,17 +1,22 @@
11module Main (main) where
22
3−import qualified Data.Text.IO as Text
4−import Lib
3+import Data.Aeson ((.=))
4+import qualified Data.ByteString.Char8 as BSC
5+import qualified Data.Text.IO as T
6+import qualified Data.Yaml as YAML
57import Nix.Parser
68import Tix.Typechecker
79
810main :: IO ()
911main = do
10− inp <- Text.getContents
12+ inp <- T.getContents
1113 case parseNixTextLoc inp of
1214 Failure err -> error $ show err
1315 Success r -> do
14− let (t, errs, uErrs) = getType r
15− print errs
16− print uErrs
17− print t
16+ let (t, errs, infErr, uErrs, pErrs, o) = getType r
17+ BSC.putStrLn . YAML.encode $
18+ o <> "errors" .= fmap show errs
19+ <> "unifying_errors" .= fmap show uErrs
20+ <> "resulting_type" .= renderPretty t
21+ <> "predicate_errors" .= fmap show pErrs
22+ <> "infer_errors" .= fmap show infErr
docs/.vscode/settings.jsonnew file+22
@@ -0,0 +1,22 @@
1+{
2+ "latex-workshop.latex.outDir": "result",
3+ "editor.wordWrap": "on",
4+ "grammarly.userWords": [
5+ "nixpkgs",
6+ "typechecked",
7+ "typechecking"
8+ ],
9+ "latex-workshop.latex.external.build.command": "nix-build",
10+ "latex-workshop.latex.external.build.args": [
11+ "-A",
12+ "%DOCFILE%"
13+ ],
14+ "nixEnvSelector.suggestion": false,
15+ "latex-workshop.latexindent.args": [
16+ "-c",
17+ "%DIR%/",
18+ "%TMPFILE%",
19+ "-y=defaultIndent: '%INDENT%'",
20+ "-l"
21+ ]
22+}
docs/bibl.bibnew file+217
@@ -0,0 +1,217 @@
1+%% This BibTeX bibliography file was created using BibDesk.
2+%% https://bibdesk.sourceforge.io/
3+
4+%% Created for Ilya at 2021-05-15 17:02:08 +0300
5+
6+
7+%% Saved with string encoding Unicode (UTF-8)
8+
9+
10+
11+@webpage{github-source,
12+ date-added = {2021-05-15 17:00:09 +0300},
13+ date-modified = {2021-05-15 17:02:05 +0300},
14+ url = {https://github.com/ilyakooo0/tix}}
15+
16+@article{goldberg2000mercury,
17+ author = {Goldberg, Ken and Gentner, Steve and Sutter, Carl and Wiegley, Jeff},
18+ date-added = {2021-04-25 18:35:16 +0300},
19+ date-modified = {2021-04-25 18:35:16 +0300},
20+ journal = {IEEE Robotics \& Automation Magazine},
21+ number = {1},
22+ pages = {35--40},
23+ publisher = {IEEE},
24+ title = {The mercury project: A feasibility study for internet robots},
25+ volume = {7},
26+ year = {2000}}
27+
28+@article{milner1990definition,
29+ author = {Milner, Robin and Tofte, Mads},
30+ date-added = {2021-04-25 18:31:13 +0300},
31+ date-modified = {2021-04-25 18:31:13 +0300},
32+ publisher = {Citeseer},
33+ title = {The definition of Standard ML},
34+ year = {1990}}
35+
36+@article{kiselyov2013extensible,
37+ author = {Kiselyov, Oleg and Sabry, Amr and Swords, Cameron},
38+ date-added = {2021-04-25 15:05:23 +0300},
39+ date-modified = {2021-04-25 15:05:23 +0300},
40+ journal = {ACM SIGPLAN Notices},
41+ number = {12},
42+ pages = {59--70},
43+ publisher = {ACM New York, NY, USA},
44+ title = {Extensible effects: an alternative to monad transformers},
45+ volume = {48},
46+ year = {2013}}
47+
48+@inproceedings{ploeg2014reflection,
49+ author = {Ploeg, Atze van der and Kiselyov, Oleg},
50+ booktitle = {Proceedings of the 2014 ACM SIGPLAN Symposium on Haskell},
51+ date-added = {2021-04-25 15:04:56 +0300},
52+ date-modified = {2021-04-25 15:04:56 +0300},
53+ pages = {133--144},
54+ title = {Reflection without remorse: revealing a hidden sequence to speed up monadic reflection},
55+ year = {2014}}
56+
57+@article{kiselyov2015freer,
58+ author = {Kiselyov, Oleg and Ishii, Hiromi},
59+ date-added = {2021-04-25 15:04:32 +0300},
60+ date-modified = {2021-04-25 15:04:32 +0300},
61+ journal = {ACM SIGPLAN Notices},
62+ number = {12},
63+ pages = {94--105},
64+ publisher = {ACM New York, NY, USA},
65+ title = {Freer monads, more extensible effects},
66+ volume = {50},
67+ year = {2015}}
68+
69+@inproceedings{liang1995monad,
70+ author = {Liang, Sheng and Hudak, Paul and Jones, Mark},
71+ booktitle = {Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages},
72+ date-added = {2021-04-25 14:47:43 +0300},
73+ date-modified = {2021-04-25 14:47:43 +0300},
74+ pages = {333--343},
75+ title = {Monad transformers and modular interpreters},
76+ year = {1995}}
77+
78+@book{moggi1988computational,
79+ author = {Moggi, Eugenio},
80+ date-added = {2021-04-25 14:44:33 +0300},
81+ date-modified = {2021-04-25 14:44:33 +0300},
82+ publisher = {University of Edinburgh, Department of Computer Science, Laboratory for~{\ldots}},
83+ title = {Computational lambda-calculus and monads},
84+ year = {1988}}
85+
86+@inproceedings{hughes1995design,
87+ author = {Hughes, John},
88+ booktitle = {International School on Advanced Functional Programming},
89+ date-added = {2021-02-23 23:13:30 +0300},
90+ date-modified = {2021-02-23 23:13:30 +0300},
91+ organization = {Springer},
92+ pages = {53--96},
93+ title = {The design of a pretty-printing library},
94+ year = {1995}}
95+
96+@inproceedings{orchard2010haskell,
97+ author = {Orchard, Dominic and Schrijvers, Tom},
98+ booktitle = {International Symposium on Functional and Logic Programming},
99+ date-added = {2021-02-23 23:13:12 +0300},
100+ date-modified = {2021-02-23 23:13:12 +0300},
101+ organization = {Springer},
102+ pages = {56--71},
103+ title = {Haskell type constraints unleashed},
104+ year = {2010}}
105+
106+@inproceedings{serrano2016type,
107+ author = {Serrano, Alejandro and Hage, Jurriaan},
108+ booktitle = {European Symposium on Programming},
109+ date-added = {2021-02-23 23:12:58 +0300},
110+ date-modified = {2021-02-23 23:12:58 +0300},
111+ organization = {Springer},
112+ pages = {672--698},
113+ title = {Type error diagnosis for embedded DSLs by Two-Stage specialized type rules},
114+ year = {2016}}
115+
116+@inproceedings{jones1999typing,
117+ author = {Jones, Mark P},
118+ booktitle = {Haskell workshop},
119+ date-added = {2021-02-23 23:12:45 +0300},
120+ date-modified = {2021-02-23 23:12:45 +0300},
121+ title = {Typing haskell in haskell},
122+ volume = {7},
123+ year = {1999}}
124+
125+@article{leijen2005extensible,
126+ author = {Leijen, Daan},
127+ date-added = {2021-02-23 23:12:32 +0300},
128+ date-modified = {2021-02-23 23:12:32 +0300},
129+ journal = {Trends in Functional Programming},
130+ pages = {179--194},
131+ title = {Extensible records with scoped labels.},
132+ volume = {6},
133+ year = {2005}}
134+
135+@article{morris2019abstracting,
136+ author = {Morris, J Garrett and McKinna, James},
137+ date-added = {2021-02-23 23:12:00 +0300},
138+ date-modified = {2021-02-23 23:12:00 +0300},
139+ journal = {Proceedings of the ACM on Programming Languages},
140+ number = {POPL},
141+ pages = {1--28},
142+ publisher = {ACM New York, NY, USA},
143+ title = {Abstracting extensible data types: or, rows by any other name},
144+ volume = {3},
145+ year = {2019}}
146+
147+@article{jones2005practical,
148+ author = {Jones, Simon Peyton and Vytiniotis, Dimitrios and Weirich, Stephanie and Shields, Mark},
149+ date-added = {2021-02-23 23:11:33 +0300},
150+ date-modified = {2021-02-23 23:11:33 +0300},
151+ journal = {Journal of functional programming},
152+ title = {Practical type inference for arbitrary-rank types},
153+ volume = {17},
154+ year = {2005}}
155+
156+@article{wadler2003prettier,
157+ author = {Wadler, Philip},
158+ date-added = {2021-02-23 23:11:11 +0300},
159+ date-modified = {2021-02-23 23:11:11 +0300},
160+ journal = {The Fun of Programming, Cornerstones of Computing},
161+ pages = {223--243},
162+ publisher = {Citeseer},
163+ title = {A prettier printer},
164+ year = {2003}}
165+
166+@article{mitchell2012shake,
167+ author = {Mitchell, Neil},
168+ date-added = {2021-02-23 23:10:56 +0300},
169+ date-modified = {2021-02-23 23:10:56 +0300},
170+ journal = {ACM SIGPLAN Notices},
171+ number = {9},
172+ pages = {55--66},
173+ publisher = {ACM New York, NY, USA},
174+ title = {Shake before building: Replacing make with Haskell},
175+ volume = {47},
176+ year = {2012}}
177+
178+@misc{vaughanproof,
179+ author = {Vaughan, Jeff},
180+ date-added = {2021-02-23 23:10:39 +0300},
181+ date-modified = {2021-02-23 23:10:39 +0300},
182+ title = {A proof of correctness for the Hindley-Milner type inference algorithm}}
183+
184+@inproceedings{damas1982principal,
185+ author = {Damas, Luis and Milner, Robin},
186+ booktitle = {Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages},
187+ date-added = {2021-02-23 23:10:11 +0300},
188+ date-modified = {2021-02-23 23:10:11 +0300},
189+ pages = {207--212},
190+ title = {Principal type-schemes for functional programs},
191+ year = {1982}}
192+
193+@article{ben2009yaml,
194+ author = {Ben-Kiki, Oren and Evans, Clark and Ingerson, Brian},
195+ date-added = {2021-02-23 23:09:50 +0300},
196+ date-modified = {2021-02-23 23:09:50 +0300},
197+ journal = {Working Draft 2008-05},
198+ title = {Yaml ain't markup language (yaml{\texttrademark}) version 1.1},
199+ volume = {11},
200+ year = {2009}}
201+
202+@inproceedings{dolstra2008nixos,
203+ author = {Dolstra, Eelco and L{\"o}h, Andres},
204+ booktitle = {Proceedings of the 13th ACM SIGPLAN international conference on Functional programming},
205+ pages = {367--378},
206+ title = {NixOS: A purely functional Linux distribution},
207+ year = {2008}}
208+
209+@article{wand1991type,
210+ author = {Wand, Mitchell},
211+ journal = {Information and Computation},
212+ number = {1},
213+ pages = {1--15},
214+ publisher = {Elsevier},
215+ title = {Type inference for record concatenation and multiple inheritance},
216+ volume = {93},
217+ year = {1991}}
docs/default.nixnew file+40
@@ -0,0 +1,40 @@
1+{ sources ? import nix/sources.nix }:
2+let
3+ pkgs = import sources.nixpkgs { };
4+ lhs2tex = file:
5+ let
6+ name = filename file;
7+ x = pkgs.runCommand "lhs2Tex-${name}"
8+ { } ''
9+ mkdir $out
10+ ${pkgs.haskellPackages.lhs2tex}/bin/lhs2TeX --output="$out/${name}.tex" ${file}
11+ '';
12+ in
13+ "${x}/${name}.tex";
14+ filename = x: builtins.head (pkgs.lib.splitString "." (builtins.baseNameOf x));
15+in
16+builtins.listToAttrs (map
17+ (file':
18+ let file = if pkgs.lib.hasSuffix ".lhs" file'.file then lhs2tex file'.file else file'.file;
19+ in
20+ {
21+ name = filename file'.file;
22+ value = pkgs.texFunctions.runLaTeX {
23+ rootFile = file;
24+ # , generatePDF ? true # generate PDF, not DVI
25+ # , generatePS ? false # generate PS in addition to DVI
26+ extraFiles = file'.extraFiles or [ ];
27+ # , compressBlanksInIndex ? true
28+ # , packages ? [ ]
29+ texPackages = {
30+ inherit (pkgs.texlive) scheme-medium IEEEtran polytable lazylist multirow;
31+ };
32+ # , copySources ? false
33+ };
34+ })
35+ [
36+ { file = ./tech_spec.tex; }
37+ { file = ./project_proposal.tex; }
38+ { file = ./paper.lhs; extraFiles = [ ./bibl.bib ./trfrac.sty ]; }
39+ ]
40+)
docs/en_pres/img/lsp.pngnew file

Binary file not shown.

docs/en_pres/img/nixpkgs.pngnew file

Binary file not shown.

docs/en_pres/pres.mdnew file+112
@@ -0,0 +1,112 @@
1+build-lists: false
2+slidenumbers: true
3+
4+[.header: alignment(center), Avenir Next]
5+
6+<br>
7+<br>
8+
9+## Language Server for the Nix Expression Language
10+
11+<br>
12+<br>
13+
14+_Author:_ Kostyuchenko Ilya
15+
16+---
17+
18+> Nix is a powerful package manager that makes package management reliable and reproducible.
19+-- [nixos.org](https://nixos.org)
20+
21+---
22+
23+# Nix
24+
25+- Package manager
26+- Build system*
27+- Ad hoc development environments
28+- Easy (cross-community) dependency management
29+- Reproducible builds
30+- *And much more: NixOS, NixOps, Build Caching, Docker ...*
31+
32+---
33+
34+# Nix Expression Language
35+
36+```nix
37+let pkgs = import ./nixpkgs {};
38+in derivation {
39+ name = "simple";
40+ builder = "${pkgs.bash}/bin/bash";
41+ args = [ ./simple_builder.sh ];
42+ gcc = pkgs.gcc;
43+ coreutils = pkgs.coreutils;
44+ src = ./simple.c;
45+ system = builtins.currentSystem;
46+}
47+```
48+
49+---
50+
51+[.build-lists: true]
52+
53+# Project scope
54+
55+1. Develop a type system (and type checker)
56+2. Develop a Language Server
57+
58+---
59+
60+# Language Server Protocol
61+
62+![inline](img/lsp.png)
63+
64+---
65+
66+# The Nix Ecosystem
67+
68+The central repository contains more than 60000 packages.
69+
70+![right fit](img/nixpkgs.png)
71+
72+---
73+
74+# Existing approaches
75+
76+Type systems for functional languages is an actively researched field.
77+
78+The Hindley–Milner type system_[1]_ is a simple, but well-studied type system for a very simple language. It is fully decidable, does not require annotations. It is the basis for many real-world type systems.
79+
80+---
81+
82+# Methods and algorithms
83+
84+The type system will be heavily influenced by the Hindley–Milner_[1]_ type system.
85+
86+The type system will implement arbitrary-ranked polymorphism_[3]_ with deep instantiation to disambiguate types in existing untyped code.
87+
88+The type system will allow the user to influence type checking by providing explicit type annotations._[4]_
89+
90+---
91+
92+# Methods and algorithms
93+
94+The system will use the Shake build system to manage dependencies and caches._[3]_
95+
96+---
97+
98+# Expected results
99+
100+1. An executable of the Nix expression language server with an integrated type checker.
101+2. A suite of automated tests to check some of the language server functionality.
102+
103+---
104+
105+[.text: text-scale(0.7)]
106+
107+# References
108+
109+1. Damas L., Milner R. Principal type-schemes for functional programs //Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages. – 1982. – С. 207-212.
110+2. Mitchell N. Shake before building: replacing make with haskell //ACM SIGPLAN Notices. – 2012. – Т. 47. – №. 9. – С. 55-66.
111+3. Jones S. P. et al. Practical type inference for arbitrary-rank types //Journal of functional programming. – 2007. – Т. 17. – №. 1. – С. 1-82. MLA
112+4. Stuckey P. J., Sulzmann M., Wazny J. Improved inference for checking type annotations //arXiv preprint cs/0507036. – 2005. MLA
docs/en_pres/pres.pdfnew file

Binary file not shown.

docs/localSettings.yamlnew file+7
@@ -0,0 +1,7 @@
1+verbatimEnvironments:
2+ code: 1
3+
4+defaultIndent: " "
5+
6+fileExtensionPreference:
7+ lhs: 1
docs/nix/sources.jsonnew file+38
@@ -0,0 +1,38 @@
1+{
2+ "GOST": {
3+ "branch": "master",
4+ "description": "BibTEX support for GOST standard bibliographies",
5+ "homepage": "",
6+ "owner": "kia999",
7+ "repo": "GOST",
8+ "rev": "072a2ef457b5dc9e5ddc6bfeb0b6f81d4147a328",
9+ "sha256": "1969lf1jlnnmi6sr44qskac1537s094mk21kqsm30j7qlfmhdk1q",
10+ "type": "tarball",
11+ "url": "https://github.com/kia999/GOST/archive/072a2ef457b5dc9e5ddc6bfeb0b6f81d4147a328.tar.gz",
12+ "url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
13+ },
14+ "niv": {
15+ "branch": "master",
16+ "description": "Easy dependency management for Nix projects",
17+ "homepage": "https://github.com/nmattia/niv",
18+ "owner": "nmattia",
19+ "repo": "niv",
20+ "rev": "af958e8057f345ee1aca714c1247ef3ba1c15f5e",
21+ "sha256": "1qjavxabbrsh73yck5dcq8jggvh3r2jkbr6b5nlz5d9yrqm9255n",
22+ "type": "tarball",
23+ "url": "https://github.com/nmattia/niv/archive/af958e8057f345ee1aca714c1247ef3ba1c15f5e.tar.gz",
24+ "url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
25+ },
26+ "nixpkgs": {
27+ "branch": "nixpkgs-unstable",
28+ "description": "Nix Packages collection",
29+ "homepage": "",
30+ "owner": "NixOS",
31+ "repo": "nixpkgs",
32+ "rev": "118485230c02d13f62133bce43177ffd49495694",
33+ "sha256": "0qj95jjr8y323zw70lkbngbkvwkchzaic4a5n2b9vwd8lbyf79hq",
34+ "type": "tarball",
35+ "url": "https://github.com/NixOS/nixpkgs/archive/118485230c02d13f62133bce43177ffd49495694.tar.gz",
36+ "url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
37+ }
38+}
docs/nix/sources.nixnew file+171
@@ -0,0 +1,171 @@
1+# This file has been generated by Niv.
2+
3+let
4+
5+ #
6+ # The fetchers. fetch_<type> fetches specs of type <type>.
7+ #
8+
9+ fetch_file = pkgs: name: spec:
10+ let
11+ name' = sanitizeName name + "-src";
12+ in
13+ if spec.builtin or true then
14+ builtins_fetchurl { inherit (spec) url sha256; name = name'; }
15+ else
16+ pkgs.fetchurl { inherit (spec) url sha256; name = name'; };
17+
18+ fetch_tarball = pkgs: name: spec:
19+ let
20+ name' = sanitizeName name + "-src";
21+ in
22+ if spec.builtin or true then
23+ builtins_fetchTarball { name = name'; inherit (spec) url sha256; }
24+ else
25+ pkgs.fetchzip { name = name'; inherit (spec) url sha256; };
26+
27+ fetch_git = name: spec:
28+ let
29+ ref =
30+ if spec ? ref then spec.ref else
31+ if spec ? branch then "refs/heads/${spec.branch}" else
32+ if spec ? tag then "refs/tags/${spec.tag}" else
33+ abort "In git source '${name}': Please specify `ref`, `tag` or `branch`!";
34+ in
35+ builtins.fetchGit { url = spec.repo; inherit (spec) rev; inherit ref; };
36+
37+ fetch_local = spec: spec.path;
38+
39+ fetch_builtin-tarball = name: throw
40+ ''[${name}] The niv type "builtin-tarball" is deprecated. You should instead use `builtin = true`.
41+ $ niv modify ${name} -a type=tarball -a builtin=true'';
42+
43+ fetch_builtin-url = name: throw
44+ ''[${name}] The niv type "builtin-url" will soon be deprecated. You should instead use `builtin = true`.
45+ $ niv modify ${name} -a type=file -a builtin=true'';
46+
47+ #
48+ # Various helpers
49+ #
50+
51+ # https://github.com/NixOS/nixpkgs/pull/83241/files#diff-c6f540a4f3bfa4b0e8b6bafd4cd54e8bR695
52+ sanitizeName = name:
53+ (
54+ concatMapStrings (s: if builtins.isList s then "-" else s)
55+ (
56+ builtins.split "[^[:alnum:]+._?=-]+"
57+ ((x: builtins.elemAt (builtins.match "\\.*(.*)" x) 0) name)
58+ )
59+ );
60+
61+ # The set of packages used when specs are fetched using non-builtins.
62+ mkPkgs = sources: system:
63+ let
64+ sourcesNixpkgs =
65+ import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) { inherit system; };
66+ hasNixpkgsPath = builtins.any (x: x.prefix == "nixpkgs") builtins.nixPath;
67+ hasThisAsNixpkgsPath = <nixpkgs> == ./.;
68+ in
69+ if builtins.hasAttr "nixpkgs" sources
70+ then sourcesNixpkgs
71+ else if hasNixpkgsPath && ! hasThisAsNixpkgsPath then
72+ import <nixpkgs> {}
73+ else
74+ abort
75+ ''
76+ Please specify either <nixpkgs> (through -I or NIX_PATH=nixpkgs=...) or
77+ add a package called "nixpkgs" to your sources.json.
78+ '';
79+
80+ # The actual fetching function.
81+ fetch = pkgs: name: spec:
82+
83+ if ! builtins.hasAttr "type" spec then
84+ abort "ERROR: niv spec ${name} does not have a 'type' attribute"
85+ else if spec.type == "file" then fetch_file pkgs name spec
86+ else if spec.type == "tarball" then fetch_tarball pkgs name spec
87+ else if spec.type == "git" then fetch_git name spec
88+ else if spec.type == "local" then fetch_local spec
89+ else if spec.type == "builtin-tarball" then fetch_builtin-tarball name
90+ else if spec.type == "builtin-url" then fetch_builtin-url name
91+ else
92+ abort "ERROR: niv spec ${name} has unknown type ${builtins.toJSON spec.type}";
93+
94+ # If the environment variable NIV_OVERRIDE_${name} is set, then use
95+ # the path directly as opposed to the fetched source.
96+ replace = name: drv:
97+ let
98+ saneName = stringAsChars (c: if isNull (builtins.match "[a-zA-Z0-9]" c) then "_" else c) name;
99+ ersatz = builtins.getEnv "NIV_OVERRIDE_${saneName}";
100+ in
101+ if ersatz == "" then drv else ersatz;
102+
103+ # Ports of functions for older nix versions
104+
105+ # a Nix version of mapAttrs if the built-in doesn't exist
106+ mapAttrs = builtins.mapAttrs or (
107+ f: set: with builtins;
108+ listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set))
109+ );
110+
111+ # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295
112+ range = first: last: if first > last then [] else builtins.genList (n: first + n) (last - first + 1);
113+
114+ # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257
115+ stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1));
116+
117+ # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L269
118+ stringAsChars = f: s: concatStrings (map f (stringToCharacters s));
119+ concatMapStrings = f: list: concatStrings (map f list);
120+ concatStrings = builtins.concatStringsSep "";
121+
122+ # https://github.com/NixOS/nixpkgs/blob/8a9f58a375c401b96da862d969f66429def1d118/lib/attrsets.nix#L331
123+ optionalAttrs = cond: as: if cond then as else {};
124+
125+ # fetchTarball version that is compatible between all the versions of Nix
126+ builtins_fetchTarball = { url, name ? null, sha256 }@attrs:
127+ let
128+ inherit (builtins) lessThan nixVersion fetchTarball;
129+ in
130+ if lessThan nixVersion "1.12" then
131+ fetchTarball ({ inherit url; } // (optionalAttrs (!isNull name) { inherit name; }))
132+ else
133+ fetchTarball attrs;
134+
135+ # fetchurl version that is compatible between all the versions of Nix
136+ builtins_fetchurl = { url, name ? null, sha256 }@attrs:
137+ let
138+ inherit (builtins) lessThan nixVersion fetchurl;
139+ in
140+ if lessThan nixVersion "1.12" then
141+ fetchurl ({ inherit url; } // (optionalAttrs (!isNull name) { inherit name; }))
142+ else
143+ fetchurl attrs;
144+
145+ # Create the final "sources" from the config
146+ mkSources = config:
147+ mapAttrs (
148+ name: spec:
149+ if builtins.hasAttr "outPath" spec
150+ then abort
151+ "The values in sources.json should not have an 'outPath' attribute"
152+ else
153+ spec // { outPath = replace name (fetch config.pkgs name spec); }
154+ ) config.sources;
155+
156+ # The "config" used by the fetchers
157+ mkConfig =
158+ { sourcesFile ? if builtins.pathExists ./sources.json then ./sources.json else null
159+ , sources ? if isNull sourcesFile then {} else builtins.fromJSON (builtins.readFile sourcesFile)
160+ , system ? builtins.currentSystem
161+ , pkgs ? mkPkgs sources system
162+ }: rec {
163+ # The sources, i.e. the attribute set of spec name to spec
164+ inherit sources;
165+
166+ # The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers
167+ inherit pkgs;
168+ };
169+
170+in
171+mkSources (mkConfig {}) // { __functor = _: settings: mkSources (mkConfig settings); }
docs/paper.lhsnew file+1215
@@ -0,0 +1,1215 @@
1+\documentclass[a4paper,journal,compsoc]{IEEEtran}
2+
3+% \usepackage{float}
4+\usepackage{mathtools}
5+\usepackage{hyperref}
6+\usepackage{microtype}
7+\usepackage{trfrac}
8+\usepackage{multirow}
9+\usepackage{textcomp}
10+% \usepackage{caption}
11+% \usepackage[main=english,russian]{babel}
12+
13+% \selectlanguage{english}
14+
15+% \sectionsAreChapters
16+
17+
18+%include polycode.fmt
19+
20+%format forall = "\forall"
21+%format a = "\alpha"
22+%format a'
23+%format b = "\beta"
24+%format b'
25+%format c = "\gamma"
26+%format c'
27+%format d = "\delta"
28+%format d'
29+%format s = "\sigma"
30+%format m = "\mu"
31+%format r = "\psi"
32+%format x = "\eta"
33+%format x'
34+%format y = "\zeta"
35+%format y'
36+%format ^ = " "
37+%format ^^ = "\;"
38+%format !! = "{\;}''\!\!"
39+%format <> = "\diamond"
40+
41+% \floatstyle{boxed}
42+% \newfloat{figure}{hbp}{lst}
43+
44+\newcommand{\parr}[1]{\medskip\textbf{#1}\hspace{0.6cm}}
45+\newcommand{\strOrNum}{(\text{String} || \text{Number})}
46+
47+
48+% \year{2021}
49+\title{Static analyzer for the Nix Expression Language}
50+% \author{Student, BSE174}{I. I. Kostyuchenko}
51+% \academicTeacher{Associate Professor, PhD}{V. V. Kuliamin}
52+
53+% \documentTitle{Explanatory note}
54+% \documentCode{RU.17701729.04.05-01 ПЗ 01-1}
55+
56+\author{
57+ \IEEEauthorblockN{Kostyuchenko Ilya}
58+ \IEEEauthorblockA{
59+ Faculty of Computer Science,\\
60+ Higher School of Economics,\\
61+ Moscow, Russia
62+ }
63+}
64+
65+\begin{document}
66+\maketitle
67+\thispagestyle{plain}
68+\pagestyle{plain}
69+
70+\begin{abstract}
71+ Configuring and building even the most straightforward software projects is often not simple -- it requires downloading and installing copious amounts of prerequisite software. This often makes reproducing builds of a project on different machines problematic. The Nix package manager aims to address this problem by providing a unified language for describing software packages in a purely functional way. This language is called the Nix Expression Language. Since all of the complexity of software configuration needs to be expressed in the Nix Expression Language, the expressions themselves often become pretty complicated, making it difficult to understand and extend existing expressions without introducing errors. A widespread tool for easing the understandability and correctness of expressions in other languages is static type checking. This paper will explore the techniques that can be used to add static type checking to the Nix Expression Language.
72+\end{abstract}
73+
74+% \begin{otherlanguage}{russian}
75+
76+% \begin{abstract}
77+% Настройка и сборка даже самых простых программных проектов часто бывает непростой задачей -- для этого требуется загрузить и установить большое количество необходимого программного обеспечения. Это часто делает проблематичным воспроизведение сборок проекта на разных компьютерах. Менеджер пакетов Nix стремится решить эту проблему, предоставляя единый язык для описания пакетов программного обеспечения чисто функциональным способом. Этот язык называется языком Nix Expression Language. Поскольку вся сложность конфигурации программного обеспечения должна быть выражена на языке Nix Expression Language, сами выражения часто становятся довольно сложными, что затрудняет понимание и расширение существующих выражений без ошибок. Широко распространенным инструментом для облегчения понимания и проверки корректности выражений на других языках является статическая проверка типов. В этой статье будут рассмотрены методы, которые можно использовать для добавления статической проверки типов в язык выражений Nix Expression Language.
78+% \end{abstract}
79+
80+% \end{otherlanguage}
81+
82+% \parr{Source code} \url{https://github.com/ilyakooo0/tix}
83+
84+% \newpage
85+
86+% \tableofcontents
87+
88+\section*{Introduction}
89+
90+Today developing software is riddled with large amounts of complexity -- newer software is built on top of older software, dragging the whole stack below as dependencies. As a result, building software requires a large number of dependencies to be preinstalled. Modern build systems like Gradle\footnote{\url{https://gradle.org}}, Maven\footnote{\url{https://maven.apache.org}}, and Stack\footnote{\url{https://docs.haskellstack.org/en/stable/README/}} try to mitigate the issue by automatically downloading and installing the required dependencies. However, in most cases, such tools can only manage language-level dependencies, requiring the user to manually install additional libraries and tools.
91+
92+Such manual dependency management leads to several problems. Firstly, when a user wants to work on a project he has not encountered before, he will have to install the required dependencies, leading to additional tedious work. Furthermore, the required versions of project dependencies might conflict with the versions that another project requires. The user will have to manually switch the versions of executables and libraries when switching between projects.
93+
94+So-called virtual environment tools partially solve this problem. A virtual environment is a way of restricting and customizing the available external tools (usually compilers) with the ability to switch between them dynamically. These tools can generally be split into one of two categories:
95+
96+\begin{enumerate}
97+ \item \emph{language-specific tools} which simplify installing and switching between different versions of some tools (usually compilers). Examples of such tools are:
98+ \begin{enumerate}
99+ \item |rustup|\footnote{\url{https://github.com/rust-lang/rustup}} for Rust tools
100+ \item |ghcup|\footnote{\url{https://www.haskell.org/ghcup/}} for Haskell tools
101+ \item |Ruby Version Manager|\footnote{\url{http://rvm.io}} for Ruby tools
102+ \end{enumerate}
103+ \item \emph{general-purpose tools} which automate switching the available tools (or versions of tools) that have been previously installed in some other way:
104+ \begin{enumerate}
105+ \item |direnv|\footnote{\url{https://direnv.net}}
106+ \item |autoenv|\footnote{\url{https://github.com/inishchith/autoenv}}
107+ \item |asdf|\footnote{\url{https://github.com/asdf-vm/asdf}}
108+ \item |ondir|\footnote{\url{https://github.com/alecthomas/ondir}}
109+ \end{enumerate}
110+\end{enumerate}
111+
112+Such tools still require explicit user action: the user needs to explicitly switch between (or install) the necessary tools when switching projects in the case of \emph{language-specific tools}, the user needs to explicitly install the required tools in some other way for them to be imported by \emph{general-purpose tools}.
113+
114+Secondly, manual dependency management impedes the reproducibility of the project builds -- building the same project on multiple machines will, in all likelihood, produce different results since the machines will likely differ in many ways that impact the build, such as having slightly different versions\footnote{``Version'' here refers to actual variations on the bit level, and not just version numbers.} of libraries and executables.
115+
116+Nix~\cite{dolstra2008nixos} attempts to solve the problems mentioned above by describing software project builds in a generic and language-agnostic way. Furthermore, the resulting descriptions define the build process in a complete and deterministic way -- everything that impacts the build in any way needs to be explicitly defined, even system-level libraries are reproducible on the bit level.
117+
118+Defining the build process in such a detailed and pedantic manner is not generally easy and often requires large amounts of boilerplate, which provides much room for error. While most build systems define project builds with static configurations using formats such as YAML~\cite{ben2009yaml}, Nix employs a fully-fledged programming language as its configuration language. This programming language is called the Nix Expression Language\footnote{\url{https://nixos.wiki/wiki/Nix_Expression_Language}}.
119+
120+Using a fully-fledged programming language allows the users to reuse common definitions and create new domain-specific abstractions. This helps to mitigate a lot of the aforementioned potential problems.
121+
122+Nix Expression Language is a dynamic, lazy, purely functional programming language. The purely functional nature of the language aids in build reproducibility guarantees that Nix aims to provide.
123+
124+Even considering the tremendous benefits that using a programming language for build configuration brings, the dynamic nature of the language often still makes it challenging to understand and reuse existing code. This is in part due to the large amounts of code required to describe real-world systems in all of their complexity.\footnote{The standard Nix package repository |nixpkgs| contains 2 million lines of code.}
125+
126+Refactoring existing code is also tricky since the generated expressions are only really checked for correctness\footnote{Here, ``correctness'' is used to mean the absence of evaluation-time errors.} at their evaluation time, and the evaluation time of expressions is difficult to predict due to the lazy nature of the language.
127+
128+A widespread tool for easing development and alleviate the aforementioned problems in other languages is static type checking -- the process of analyzing the types of expressions and detecting type errors in programs without evaluating them.
129+
130+Even though static type checking in most mainstream programming languages does not influence the semantics of the programs, it is nonetheless widely used. This is an indication of the usefulness of static type checking during development. Type checking helps detect likely ``incorrect'' programs without evaluating them (very helpful during refactoring) and aids in understanding existing code since types often expose some semantics of expressions (this is especially true for purely functional programs).
131+
132+The Nix Expression Language does not currently support static type checking of any kind. Of course, retrofitting a static type checker onto an existing dynamic programming language will reject programs that will not produce errors at runtime. However, this is still a goal worth pursuing because even with all of the situations when the type checker produces false negatives, inferring types for existing expressions, as mentioned above, will aid in understanding existing code and surface potentially problematic areas of code to the developer.
133+
134+\section{Nix Expression Language}
135+
136+In this chapter, we will examine the semantics of major terms of the Nix Expression Language. We will, from now on abbreviate \emph{Nix Expression Language} as \emph{Nix} as it is in most cases clear from the context what is being referred to: the language or the system as a whole.
137+
138+\subsection{Atomic types}
139+
140+Atomic types are described in table~\ref{tab:atomicTypes}.
141+
142+\begin{table}[hbp]
143+ \centering
144+ \caption{Table of atomic Nix Expression Language types}
145+ \begin{tabular}{ ||c||p{2cm}||p{4cm}|| } \hline
146+ \textbf{Atomic type} & \textbf{Description} & \textbf{Example terms} \\ \hline \hline
147+ URI & A string literal representing a URI. Does not require quoting. & \texttt{https://example.com} \\ \hline
148+ Path literal & A path literal referring to either a relative or absolute path. Does not require quoting. & \texttt{../../directory/file.txt} \\ \hline
149+ Integer & The current C implementation of Nix allows values of 64-bit signed integers. & \texttt{69} \newline \texttt{-42} \\ \hline
150+ Float & Floating point numbers. & \texttt{42.9} \newline \texttt{-69.42} \\ \hline
151+ Bool & Boolean values. & \texttt{true} \newline \texttt{false} \\ \hline
152+ Null & A type with a single value. & \texttt{null} \\ \hline
153+ \end{tabular}
154+ \label{tab:atomicTypes}
155+\end{table}
156+
157+\subsection{Strings}
158+
159+\subsubsection{Double quoted string literals}
160+
161+Double quoted string literals are string literals, just like in many other programming languages. It can contain escaped newline character literals \texttt{\textbackslash n} which will be preserved as shown in figure~\ref{lst:newlineString}.
162+
163+\begin{figure}
164+ \begin{minipage}{\textwidth}
165+ \begin{verbatim}
166+"Sampel\nPalnet"
167+ \end{verbatim}
168+ \end{minipage}
169+ \caption{Nix Expression Language double quoted string literal example}
170+ \label{lst:newlineString}
171+\end{figure}
172+
173+\subsubsection{Multiline string literals}
174+
175+Multiline string literals are enclosed by pairs of single quotes (\texttt{''} as opposed to \texttt{"}). Newlines are preserved, and indentation is stripped from the beginning of the literal. An example multiline string literal is shown in figure~\ref{lst:multilineString}.
176+
177+\begin{figure}
178+ \begin{minipage}{\textwidth}
179+ \begin{verbatim}
180+''
181+Sampel
182+Palnet''
183+
184+"Sampel\nPalnet"
185+ \end{verbatim}
186+ \end{minipage}
187+ \caption{Nix Expression Language multiline string literal example and an equivalent double quoted string literal}
188+ \label{lst:multilineString}
189+\end{figure}
190+
191+% \subsubsection{String interpolation}
192+
193+% The Nix Expression Language also allows for arbitrary expressions of the language to be interpolated in string using the following syntax: \texttt{\$\{ <expression> \}} where \texttt{<expression>} is a Nix expression.An example of string interpolation is show in figure~\ref{lst:stringInterpolation}.
194+
195+% \begin{figure}
196+% \begin{minipage}{\textwidth}
197+% \begin{verbatim}
198+% "one is ${ if 1 == 2 then "equal" else "not equal" } to two."
199+
200+% "one is not equal to two."
201+% \end{verbatim}
202+% \end{minipage}
203+% \caption{Nix Expression Language string interpolation example with the resulting string.}
204+% \label{lst:stringInterpolation}
205+% \end{figure}
206+
207+\subsection{Lists}
208+
209+Nix supports a list type. List literals are enclosed by square brackets \texttt{[]}, and the elements are separated by whitespace. Examples of list literals are shown in figure~\ref{lst:list}.
210+
211+\begin{figure}
212+ \begin{minipage}{\textwidth}
213+ \begin{verbatim}
214+[1 2 "hello" ../../file.txt]
215+ \end{verbatim}
216+ \end{minipage}
217+ \caption{Nix Expression Language List literals.}
218+ \label{lst:list}
219+\end{figure}
220+
221+\subsection{Attribute sets} \label{sec:attrSet}
222+
223+An attribute set is internally implemented as a hashmap with strings as keys where values can be arbitrary expressions. An example attribute set literal is shown in figure~\ref{lst:attrSet}.
224+
225+\begin{figure}
226+ \begin{minipage}{\textwidth}
227+ \begin{verbatim}
228+{ a = 42;
229+ b = 6 + 9;
230+ c = ../file.txt;
231+ d = "henlo, world";
232+}
233+ \end{verbatim}
234+ \end{minipage}
235+ \caption{Nix Expression Language attribute set literals.}
236+ \label{lst:attrSet}
237+\end{figure}
238+
239+Fields (keys) of an attribute set can be accessed through the \emph{dot} (\texttt{.}) operator, as shown in figure~\ref{lst:attrSetAccess}. Accessing an absent field yields a runtime error.
240+
241+\begin{figure}
242+ \begin{minipage}{\textwidth}
243+ \begin{verbatim}
244+{ a = 42;
245+ b = 6 + 9;
246+}.b
247+
248+15
249+ \end{verbatim}
250+ \end{minipage}
251+ \caption{Nix Expression Language attribute set field accessing.}
252+ \label{lst:attrSetAccess}
253+\end{figure}
254+
255+\subsection{Attribute set updates} \label{sec:update}
256+
257+There is a binary \emph{update} operator that takes two \emph{attribute sets} as operands and ``merges'' them in a shallow manner, preferring values from the right operand. The operator is written as two forward slashes \texttt{//}. This has the effect of updating the left operand with values from the right operand. An example is shown in figure~\ref{lst:update}.
258+
259+\begin{figure}
260+ \begin{minipage}{\textwidth}
261+ \begin{verbatim}
262+{x = {a = 1;}; y = 2;}
263+ // {x = "hello"; z = 1.5;}
264+
265+{ x = "hello"; y = 2; z = 1.5; }
266+ \end{verbatim}
267+ \end{minipage}
268+ \caption{Nix Expression Language attribute set updates.}
269+ \label{lst:update}
270+\end{figure}
271+
272+\subsection{Recursive attribute sets} \label{sec:recAttrSet}
273+
274+While ordinary \emph{attribute sets} discussed in section~\ref{sec:attrSet} can only reference values defined outside of the attribute set literal, \emph{recursive attribute sets} can also reference values defined in the attribute set literal itself. The keys of the attribute set are available in the scopes of the attribute set values. An example \emph{recursive attribute set} is given in figure~\ref{lst:recAttrSet}. Note that it is syntactically distinguished from normal \emph{attribute set} literals by the \texttt{rec} keyword at the beginning.
275+
276+\begin{figure}
277+ \begin{minipage}{\textwidth}
278+ \begin{verbatim}
279+rec {
280+ a = 42;
281+ b = a + 9;
282+ c = world;
283+ d = "henlo, ${c}";
284+}
285+ \end{verbatim}
286+ \end{minipage}
287+ \caption{Nix Expression Language recursive attribute set literals.}
288+ \label{lst:recAttrSet}
289+\end{figure}
290+
291+\subsection{Let expressions} \label{sec:let}
292+
293+A \emph{let expression} has two parts: \emph{declarations} and the \emph{body}. The format can be roughly described like so: \texttt{let <definitions> in <body>}. A \emph{let expression} allows us to define values in the \emph{declarations} that can be reused in the \emph{body} of the expression. Just like \emph{recursive attribute sets} from section~\ref{sec:recAttrSet} all declared values are available in scope in the defined expressions. An example of \emph{let expressions} is available in figure~\ref{lst:let}.
294+
295+\begin{figure}
296+ \begin{minipage}{\textwidth}
297+ \begin{verbatim}
298+let
299+ c = world;
300+ d = "henlo, ${c}";
301+in d
302+ \end{verbatim}
303+ \end{minipage}
304+ \caption{Nix Expression Language \emph{let} expression literals.}
305+ \label{lst:let}
306+\end{figure}
307+
308+\subsection{With expression} \label{sec:withExp}
309+
310+\emph{With expressions} are a way of bringing all values from an \emph{attribute set} into scope. It is conceptually very similar to \emph{let expressions} discussed in section~\ref{sec:let}. The syntax can be roughly described like so: \texttt{with <set>; <body>} where \texttt{<set>} is an expression which evaluates to an \emph{attribute set} and all values from the set are available as definitions in the \texttt{<body>} expression. An example of a \emph{with expression} can be found in figure~\ref{lst:with}.
311+
312+\begin{figure}
313+ \begin{minipage}{\textwidth}
314+ \begin{verbatim}
315+let
316+ c = world;
317+ d = "henlo, ${c}";
318+in d
319+ \end{verbatim}
320+ \end{minipage}
321+ \caption{Nix Expression Language \emph{with} expression literals.}
322+ \label{lst:with}
323+\end{figure}
324+
325+\section{Existing typecheckers implementations}
326+
327+In this section we will examine existing attempts at developing a typechecker for the Nix Expression Language, determine the features of the implemented type systems and assess how well maintained the implementations are.
328+
329+\subsection{regnat/tix} \label{sec:regnat/tix}
330+
331+regnat/tix\footnote{\url{https://github.com/regnat/tix}} is an implementation of a typechecker for the \emph{Nix Expression Language} implemented in \emph{OCaml}\footnote{\url{https://ocaml.org}}. The type checker itself is implemented on a different much simpler language named \emph{Nix Light}. To typecheck a normal \emph{Nix} program(expression) the program need to be first converted to an equivalent \emph{Nix Light} program. The type checker has a row-polymorphism-inspired feature: records are represented as a product of one-row types. In \emph{Nix Light} lists are represented as a single-linked heterogeneous list. The type system does not have support for parametric polymorphism in favour of a gradual typing paradigm.
332+
333+\parr{Status} The last commit was published in 2017 and the project is now abandoned in favour of regnat/ptyx which we examin in section~\ref{sec:regnat/ptyx}.
334+
335+\subsection{regnat/ptyx} \label{sec:regnat/ptyx}
336+
337+regnat/ptyx\footnote{\url{https://github.com/regnat/ptyx}} is in essence a reimplementation of regnat/tix in Haskell\footnote{\url{https://www.haskell.org}} which we examined in section~\ref{sec:regnat/tix}. The basic ideas and techniques are the same. In fact, so much so, that the simpler language is also called \emph{Nix Light} and \emph{Nix} expressions are also converted to it before type checking. There is still no support for parametric polymorphism.
338+
339+\parr{Status} The last commit was published in 2018. Unsupported language features include lists and attribute sets.
340+
341+\subsection{haskell-nix/hnix}
342+
343+haskell-nix/hnix\footnote{\url{https://github.com/haskell-nix/hnix}} is primarily not a typechecker, but rather the goal of the project is to fully reimplement the \emph{Nix Expression Language} interpreter in \emph{Haskell}. There is, however, a number of modules dedicated to a typechecker implementation which was migrated into the project. Contrary to how it may seem, the typechecker is not integrated with the rest of the project in any significant way. The type system itself is based on the Hindley-Milner type system. However, the type system was not extended with additional features to better support the dynamic nature of \emph{Nix}. For instance, there is no support for row-polymorphism which greatly impedes typechecking code that interacts with \emph{attribute sets} in any way.
344+
345+\parr{Status} Last time the typechecker was modified in any substantial way was in 2019. It does not appear to be actively developed. Furthermore, there is no description of the implemented type system.
346+
347+
348+\section{Existing type system research}
349+
350+In this section we will explore existing techniques used to develop typecheckers, and explore how they can be applicable to our implementation.
351+
352+\subsection{Type System Approach}
353+
354+There has been much research done in the field of type systems for functional programming languages. The most notable contribution was the introduction of the Damas-Milner\footnote{The Damas-Milner type system is sometimes referred to as the Hindley–Milner type system.} type system and the W inference algorithm~\cite{damas1982principal}, which was later proven to be sound and complete~\cite{vaughanproof}.
355+
356+The Damas-Milner type system is a type system for lambda calculus with parametric polymorphism. The most notable property of the Damas-Milner type system is the proven ability of the W algorithm to infer the most general types without any user-provided type annotations.
357+
358+While the Damas-Milner describes a simple language, it is robust enough to be used as the basis for more advanced type systems such as the one used in the Haskell programming language~\cite{jones1999typing}, which extends the Damas-Milner type system in many ways which break the excellent properties it provides but remains extremely useful in practice.
359+
360+Since the Nix Expression Language is a relatively simple functional programming language, extending the Damas-Milner type system and algorithms to fit the language will be the approach we take as the tried and true method.
361+
362+\subsection{Type Checker Error Handling}
363+
364+Due to the inevitable presence of false negatives during type checking, for the type checker to be useful enough to be worth implementing, the algorithm should gracefully recover after encountering expressions that it deems to be ``wrong''.
365+
366+Since the interpreter of the programs will not be related to the developed type checker in any way, the type checker can not influence the semantics of the programs. This fact can be used to implement the following failure recovery heuristic: when the type checker encounters an expression that yields type checking errors, the errors are collected to be displayed to the user, and the expression is given the least general type possible such that it does not yield type errors.
367+
368+This is, in general, always possible since any syntactically valid expression will be correct with respect to types if every subexpression is assigned the polymorphic type:
369+
370+\begin{equation}
371+ \forall \alpha. \alpha
372+\end{equation}
373+
374+In some cases, this approach will likely yield too little information to be useful, but it seems like a reasonable solution.
375+
376+\subsection{Improving Type Checker Error Reporting}
377+
378+The original W inference algorithm is a single-stage inference algorithm, meaning that it attempts to satisfy type constraints as soon as it encounters them. A consequence of this is that errors are reported as soon as they are encountered. Often, the information available about the program at the time the error had occurred is very limited due to not all of the program being processed. This leads to poor error reporting.
379+
380+In contrast to the single-stage algorithm, the two-stage algorithm~\cite{jones2005practical,serrano2016type} collects the type constraints as the first stage of type checking and solves the collected constraints as a second step. This leads to most errors occurring during the second stage when all available type information has already been collected. As a result, better type errors are produced. This is the more preferable approach for our goals.
381+
382+\subsection{Row-Polymorphism}
383+
384+One of the language-level constructs in the Nix Expression Language is the ``attribute set'' which can be thought of as a first-class hashmap with strings as keys. In combination with the dynamic nature of the language, these ``attribute sets'' have the semantics of row-polymorphic records.
385+
386+There has been some research conducted in the field of type systems with row-polymorphic records~\cite{morris2019abstracting,leijen2005extensible}. The approach that should be taken in developing a static type checker for the Nix Expression Language is describing row-polymorphic attribute sets with a construct similar\footnote{The way it should be displayed to the user will be distinct, since, unlike in Haskell, the Nix Expression Language does not have constraints as a language construct.} to Haskell constraints~\cite{orchard2010haskell}.
387+
388+% \subsection{Message Reporting}
389+
390+% Displaying errors to the user is not as simple as it might initially seem. For the type checker to be as helpful as possible, error messages should display the encountered issues in the language contexts in which they had occurred. Ideally, the errors should point to the exact terms that are most likely problematic.
391+
392+% Even if all of the information necessary for detailed error messages is collected during type checking, displaying errors to the user is a problem that deserves its own research\footnote{This also relates to how types are laid out when displaying to the user even when no errors have occurred.}. The users might have different screen sizes. The error message should reflow all of the displayed text, code, and type annotations to accommodate the available space.
393+
394+% Hughes introduced a general-purpose algebraic pretty-printer~\cite{hughes1995design}, which was later improved upon~\cite{wadler2003prettier}, to solve precisely this problem. Using one of the pretty-printers based on that research is the industry standard and will be used by our type checker.
395+
396+\section{Our Nix type system}
397+
398+As mentioned above, we have opted to use the Damas-Milner type system as a basis for our implementation. Our goal is not just to add types for the sake of types, but give additional reassurance to the developer, and reject as many potentially ``invalid'' programs as possible. If the developed typechecker processes a program without errors, then the program should have no type errors during execution.
399+
400+\subsection{Polymorphism} \label{sec:polymorphism}
401+
402+Dynamic languages have potentially limitless polymorphism – you can pass anything of any type to any function and it can potentially work without errors – it is in principal possible to check the ``types'' of passed values at runtime. This leads to the fact that there is really no way to know which ``types'' are acceptable in which positions without executing the program.
403+
404+The Nix community, just like with any other language, has developed idiomatic ways of solving problems. Some of these idioms are heavily based on polymorphic behavior at runtime. We should strive to develop a type system which supports as much of idiomatic behavior as possible (and where not possible, similar behavior should be expressible within the type system).
405+
406+Parametric polymorphism has proven to strike a nice balance between strictness, expressiveness and type inference. We feel it will be most useful as a type system for \emph{Nix}.
407+
408+Inferring types with parametric polymorphism implies generalizing the inferred types at certain points in the syntax tree. Generalization is also known as ``closing over type variable'' – it can be though of as explicitly choosing a point where the variable is quantified over. Figure~\ref{fig:closing} is an example of closing over a type variable.
409+
410+Traditionally in languages similar to \emph{simply-typed lambda calculus} generalization is performed in \emph{let} declarations – so-called \emph{let-generalization}. \emph{Nix} has a very similar \emph{let} construct as discussed in section~\ref{sec:let} which is also a great point to perform type generalization.
411+
412+\begin{figure}
413+
414+ \[
415+ (\alpha \rightarrow \beta \rightarrow \alpha) \xrightarrow{\text{close over } \alpha} (\forall \alpha.\; \alpha \rightarrow \beta \rightarrow \alpha)
416+ \]
417+ \caption{An example of closing over $\protect\alpha$. $\protect\beta$ is considered to be an open type variable.}
418+ \label{fig:closing}
419+\end{figure}
420+
421+Apart from \emph{let expressions} Nix also has \emph{attribute sets} discussed in section~\ref{sec:attrSet}, definitions in which are semantically similar to those in \emph{let expressions}. \emph{Attribute set} definitions also seem like a good point for \emph{generalization}.
422+
423+\subsection{Inferring recursive types} \label{sec:recLet}
424+
425+Recursive definitions pose a challenge for type inference without developer-supplied type annotations (which will be the case for the vast majority of code). There are three major approaches to inferring types of recursive definitions:
426+
427+\begin{enumerate}
428+ \item Infer all recursive definitions as being monomorphic. This is the approach taken in \emph{Standard ML}~\cite{milner1990definition}. The obvious drawback is the fact that types are monomorphic. This is not something we want as discussed in section~\ref{sec:polymorphism}.
429+ \item Analyze the call graph of recursive definitions, separate the definitions into strongly connected components, topologically sort the components, and infer the types of each strongly connected component separately. This is the approach taken in \emph{Haskell}~\cite{damas1982principal}. While this approach yields polymorphic types, it does not produce the ``most polymorphic'' (principal) types.
430+ \item The last implements a more complicated iteration-based type inference algorithm with a user-configurable number of iterations.~\cite{goldberg2000mercury} If the specified number of iterations is not enough to deduce the type of a recursive definition, it is rejected. The clear upside of this approach is that the inferred type (if it is given enough iterations and succeeds) is the principal (most general, most polymorphic) type of the expression.
431+\end{enumerate}
432+
433+While the last approach would allow us to, in theory, type more programs, we feel that tasking the user with configuring the typechecker would make the barrier to entry higher than it needs to be, and in practice the second approach would be useful enough (and faster), so that is the approach we chose to go with.
434+
435+\subsection{Row polymorphism}
436+
437+Nix has first-class hashmaps with strings as keys called \emph{attribute sets} as discussed in section~\ref{sec:attrSet} which are in practice used as structures in much the same way it is done in JavaScript\footnote{\url{https://www.javascript.com}}. This happens because the languages are dynamic and don't afford the programmer the ability to explicitly define custom structure types. Of course, there is the ability to not only create \emph{attribute sets}, but you can also modify existing \emph{attribute sets} as discussed in section~\ref{sec:update}.
438+
439+Of course, since \emph{attribute sets} are used as structures, their internal structure (keys and types of values) has significance and should be tracked in types just like objects and structures are tracked in most statically typed programming languages. Even though it is in most cases implemented as a mechanism that allows the programmer to introduce new types which correspond to a static set of field names and types, and the type system is presented in terms of those types, this is not significantly different from tracking keys directly. In fact, the \emph{Go}\footnote{\url{https://golang.org}} programming language has a notion of \emph{protocols} which bridges the gap between the two paradigms.
440+
441+This leads to a non-trivial typechecking case where modifying a structure leads to the resulting type depending on the type of the input structure as shown in figure~\ref{lst:update_ex}. The figure shows a lambda expression which receives an \emph{attribute set} as input, and updates the field \texttt{a} with the value of \texttt{1}. It quickly becomes problematic to derive a type for this expression if we decide to track fields at the type level: we can say that the lambda takes a value of type \texttt{\{\}} and returns a value of type \texttt{\{a = Integer;\}} (type of functions will later be written as \texttt{<input type> -> <output type>}). This might seem like a natural type to derive, however it is obviously not correct. Calling it with a values of type \texttt{\{b = String;\}} and \texttt{\{b = Float; a = Bool;\}} would both be very much valid, and would both produce different resulting types: \texttt{\{a = Integer; b = String;\}} and \texttt{\{a = Integer; b = Float;\}}. As stated above, the output type of a lambda expression like this depends on the input type.
442+
443+\begin{figure}
444+ \begin{minipage}{\textwidth}
445+ \begin{verbatim}
446+x: x // {a = 1;}
447+ \end{verbatim}
448+ \end{minipage}
449+ \caption{A lambda expression which updates an input set.}
450+ \label{lst:update_ex}
451+\end{figure}
452+
453+This problem is widely known as \emph{row polymorphism}~\cite{wand1991type} – the term \emph{row} refers to a single key-value type pair. Thus, \emph{row polymorphism} is the polymorphism of key-value pairs. This fields has already received some research attention: a recent paper on the topic was written by Morris and McKinna~\cite{morris2019abstracting}. In the paper the authors introduce the \emph{Rose}\footnote{The name is a pun on ``rows'' referring to row polymorphism.} programming language which supports \emph{row polymorphism}.
454+
455+\subsubsection{Rose} \label{sec:rose}
456+
457+In \emph{Rose} row polymorphism is implemented by introducing two predicates on types. The first one denotes a \emph{combination} of two ``record'' types:
458+
459+\begin{equation} \label{eq:combination}
460+ \alpha \odot \beta \sim \gamma
461+\end{equation}
462+
463+
464+where $\alpha$ and $\beta$ are the two types that are being combined and $\gamma$ is the resulting type. The semantics of what \emph{combination} is depend on the semantics of the language itself. Examples include:
465+
466+\begin{enumerate}
467+ \item The two types can not have overlapping rows (combining types with overlapping rows is considered an error), and the resulting type is the union of the rows from the two types.
468+ \item The two types can have overlapping rows, and the resulting type is either a left-biased or right-biased union of the rows from the two types.
469+\end{enumerate}
470+
471+\def\clt{\mathrel{\mathrlap{\bigcirc}\!<\:}}
472+
473+The second predicate is:
474+
475+\begin{equation}
476+ \alpha \clt \beta
477+\end{equation}
478+
479+where all rows from $\alpha$ are present in $\beta$. This predicate isn't strictly necessary, and can be expressed through predicate~\ref{eq:combination}:
480+
481+\begin{equation}
482+ \alpha \clt \gamma = \exists \beta. \; \beta \odot \alpha \sim \gamma
483+\end{equation}
484+
485+Nevertheless, this predicate was still introduced as it closely matches the language term syntax and simplifies further processing of type.
486+
487+\subsubsection{Row polymophism in Nix} \label{sec:nixRowPoly}
488+
489+When deciding how to represent row polymorphism in Nix it is helpful to examine the base operators which would conjure row-related predicates during type inference. They include:
490+
491+\begin{enumerate}
492+ \item Attribute set field accessing (the \texttt{.} operator) as discussed in section~\ref{sec:attrSet}
493+ \item Attribute set field accessing with a default value (\texttt{\{a = 1;\}.b or 8})
494+ \item Attribute set field presence check (\texttt{\{a = 1;\} ? a})
495+ \item Attribute set updates (the \texttt{//} operator) as discussed in section~\ref{sec:attrSet}
496+\end{enumerate}
497+
498+In terms of the predicates described in section~\ref{sec:rose} the expression \texttt{x: x.a}, which is a lambda expression which return the field \texttt{a} from the attribute set supplied as the argument, would have the following type:
499+
500+\begin{equation}
501+ \forall \alpha \beta. \; (\{ a = \beta; \} \clt \alpha) \Rightarrow \alpha \rightarrow \beta
502+\end{equation}
503+
504+Analogously, the expression \texttt{x: y: x // {a = y;}}, which returns the attribute set supplied as the argument updated with the field \texttt{a} supplied as the second argument, would have the following type:
505+
506+\begin{equation}
507+ \forall \alpha \beta \gamma. \; (\alpha \odot \{ a = \beta; \} \sim \gamma) \Rightarrow \alpha \rightarrow \beta \rightarrow \gamma
508+\end{equation}
509+
510+The types of the other two expressions are not fully expressible with the predicates from \emph{Rose}. This is due to the \emph{Rose} type system not having support for working with missing (optional) rows as it is very dynamic in nature. Nix, on the other hand, being a dynamic language, has full support for introspecting values at runtime, including branching on the presence of a key in an \emph{attribute set} as mentioned before.
511+
512+\subsubsection{Nix row predicates}
513+
514+When deciding how to model the four base row-related operations we decided to derive the predicates from the operations themselves. This would yield simpler types, and having simpler types for base operations leads to simpler types overall. Furthermore, the type system would in all likelihood be easier for Nix developers to use and understand if it is expressed in terms of familiar operations.
515+
516+We will now describe the row predicates we have chosen for Nix. Note the analogy with the enumeration from section~\ref{sec:nixRowPoly}.
517+
518+\newcommand{\update}{\mathbin{/\!\!/}}
519+\newcommand{\optDot}{.\!?}
520+
521+\paragraph{Attribute set field predicate} \label{sec:attrSetPred}
522+
523+\begin{equation} \label{eq:fieldPred}
524+ \alpha. \text{x} = \beta
525+\end{equation}
526+
527+The type $\alpha$ should be an attribute set and it should contain a field $x$ of the type $\beta$. This predicate arises from the use of the \emph{dot operator} (\texttt{.}) as discussed in section~\ref{sec:attrSet}. The syntax was chosen to be analogous to that of the Nix term syntax.
528+
529+The term \texttt{x: x.y} would yield the following type:
530+
531+\begin{equation} \label{eq:dotExample}
532+ \forall \alpha \beta. \; \alpha.\text{y} = \beta \Rightarrow \alpha \rightarrow \beta
533+\end{equation}
534+
535+\paragraph{Optional attribute set field predicate}
536+
537+\begin{equation} \label{eq:optFieldPred}
538+ \alpha \optDot \text{x} = \beta
539+\end{equation}
540+
541+The type $\alpha$ should be an attribute set and if it contains the field $x$, then the type of the field should be $\beta$. This predicate arises from the combination of the \emph{dot operator} (\texttt{.}) and the \emph{or operator} (\texttt{or}) which is used to supply a fallback value if the attribute set does not contain the required field. The syntax was chosen to be analogous to that of the Nix term syntax.
542+
543+The term \texttt{x: x.y or 1} would yield the following type:
544+
545+\begin{equation} \label{eq:optFieldPredExample}
546+ \forall \alpha. \; \alpha \optDot \text{y} = \text{Number} \Rightarrow \alpha \rightarrow \text{Number}
547+\end{equation}
548+
549+This predicate also arises from the use of the \emph{attribute set field presence check operator} (\texttt{?}). In that case the
550+
551+The term \texttt{x: x ? y} would yield the following type:
552+
553+\begin{equation} \label{eq:optFieldPredExample2}
554+ \forall \alpha \beta. \; \alpha \optDot \text{y} = \beta \Rightarrow \alpha \rightarrow \text{Bool}
555+\end{equation}
556+
557+\paragraph{Record update predicate}
558+
559+\begin{equation} \label{eq:upatePred}
560+ \alpha \update \beta \sim \gamma
561+\end{equation}
562+
563+All $\alpha$, $\beta$ and $\gamma$ should be \emph{attribute sets}. The \emph{attribute set} $\gamma$ should contain all fields from both $\alpha$ and $\beta$, preferring the types from $\beta$ if they happen to overlap. That is, if $\alpha$ and $\beta$ both contain a field with the same name, then $\gamma$ should contain the same field with the type from $\beta$. This behavior matches the way the \emph{update operator} (\texttt{//}) works as discussed in section~\ref{sec:update}.
564+
565+The term \texttt{x: y: x // y} would yield the following type:
566+
567+\begin{equation} \label{eq:updatePredExample}
568+ \forall \alpha \beta \gamma. \; \alpha \update \beta \sim \gamma \Rightarrow \alpha \rightarrow \beta \rightarrow \gamma
569+\end{equation}
570+
571+\subsection{Atomic types}
572+
573+Nix is a dynamic language, and as such, allows dynamic coercions between certain types. This means that we can not use the dynamic types from the interpreter to perform static type checking -- if we did that we would reject \emph{a lot} of valid programs.\footnote{``Valid'' not just in the sense that they would not produce runtime errors, but ``valid'' in the sense that the programmer would judge the program as being ``correct''.}
574+
575+For this reason, we will have to define a smaller set of static types that will be employed in our type system. The static types along with the corresponding dynamic types from table~\ref{tab:atomicTypes} are shown in table~\ref{tbl:staticTypes}.
576+
577+\begin{table}[hbp]
578+ \centering
579+ \caption{Mapping from static types to dynamic types}
580+ \begin{tabular}{ ||c||c|| } \hline
581+ \textbf{Static type} & \textbf{Dynamic types} \\ \hline \hline
582+ \multirow{3}{*}{String} & URI \\ \cline{2-2}
583+ & Path literal \\ \cline{2-2}
584+ & String \\ \hline \hline
585+ \multirow{2}{*}{Number} & Integer \\ \cline{2-2}
586+ & Float \\ \hline \hline
587+ Bool & Bool \\ \hline \hline
588+ Null & Null \\ \hline
589+ \end{tabular}
590+ \label{tbl:staticTypes}
591+\end{table}
592+
593+\begin{table*}[hbp]
594+ \centering
595+ \caption{Table of Nix Expression Language operators and their static types}
596+ \begin{tabular}{||c||c||c||c||} \hline
597+ \textbf{Operator} & \textbf{Operator description} & \textbf{Static type} \\ \hline \hline
598+ \texttt{-} & Numeric negation & $\text{Number} \rightarrow \text{Number}$ \\ \hline
599+ \texttt{!} & Boolean negation & $\text{Bool} \rightarrow \text{Bool}$ \\ \hline
600+ \texttt{++} & List concatenation & $\forall \alpha. \; [\alpha] \rightarrow [\alpha] \rightarrow [\alpha]$ \\ \hline
601+ \texttt{==} & Equality & $\forall \alpha. \; \alpha \rightarrow \alpha \rightarrow \text{Bool}$ \\ \hline
602+ \texttt{!=} & Not equality & $\forall \alpha. \; \alpha \rightarrow \alpha \rightarrow \text{Bool}$ \\ \hline
603+ \texttt{<} & Less than & $\text{Number} \rightarrow \text{Number} \rightarrow \text{Bool}$ \\ \hline
604+ \texttt{<=} & Less than or equal & $\text{Number} \rightarrow \text{Number} \rightarrow \text{Bool}$ \\ \hline
605+ \texttt{>} & Greater than & $\text{Number} \rightarrow \text{Number} \rightarrow \text{Bool}$ \\ \hline
606+ \texttt{>=} & Greater than or equal & $\text{Number} \rightarrow \text{Number} \rightarrow \text{Bool}$ \\ \hline
607+ \texttt{+} & Addition & $\forall \alpha. \; \strOrNum \sim \alpha \Rightarrow \alpha \rightarrow \alpha \rightarrow \alpha$ \\ \hline
608+ \texttt{-} & Subtraction & $\text{Number} \rightarrow \text{Number} \rightarrow \text{Number}$ \\ \hline
609+ \texttt{*} & Multiplication & $\text{Number} \rightarrow \text{Number} \rightarrow \text{Number}$ \\ \hline
610+ \texttt{/} & Division & $\text{Number} \rightarrow \text{Number} \rightarrow \text{Number}$ \\ \hline
611+ \texttt{\&\&} & Boolean ``and'' & $\text{Bool} \rightarrow \text{Bool} \rightarrow \text{Bool}$ \\ \hline
612+ \texttt{||||} & Boolean ``and'' & $\text{Bool} \rightarrow \text{Bool} \rightarrow \text{Bool}$ \\ \hline
613+ \texttt{->} & Implication & $\text{Bool} \rightarrow \text{Bool} \rightarrow \text{Bool}$ \\ \hline
614+ \texttt{//} & Attribute set update & $ \forall \alpha \beta \gamma. \; \alpha \update \beta \sim \gamma \Rightarrow \alpha \rightarrow \beta \rightarrow \gamma$ \\ \hline
615+ \end{tabular}
616+ \label{tbl:allOperators}
617+\end{table*}
618+
619+\subsection{Addition} \label{sec:addition}
620+
621+Among all operators, addition (\texttt{+}) has semantics that stand out from the rest: addition can be applied to either two \texttt{Number} operands or two \texttt{String} operands. All other operands are monomorphic in that they can only be applied to two operands of a predefined type. In that sense addition in polymorphic.
622+
623+Since our current implementation does not support sum types (see section~\ref{sec:sumTypes} for more detail), it is non-trivial to encode the type of addition in our current type system. We wanted to encode the type without having to resort to extending the type system too much (without implementing sum types).
624+
625+The simplest approach is to introduce a simple predicate which is satisfied only if the argument is either of type \texttt{Number} or \texttt{String}:
626+
627+\begin{equation}
628+ \strOrNum \sim \alpha
629+\end{equation}
630+
631+With this predicate the type of the addition operator (\texttt{+}) now becomes:
632+
633+\begin{equation}
634+ \forall \alpha. \; \strOrNum \sim \alpha \Rightarrow \alpha \rightarrow \alpha \rightarrow \alpha
635+\end{equation}
636+
637+\subsection{Typing rules}
638+
639+What follows is a formal description of the developed type system. For brevity we have omitted rules for typing literal constant values described in tables \ref{tab:atomicTypes} and \ref{tbl:staticTypes}, and most operators described in table~\ref{tbl:allOperators} as those rules are trivial.
640+
641+\subsubsection{Lists}
642+
643+After doing an informal analysis of existing Nix codebases we have concluded that it is not idiomatic to have heterogeneous lists in Nix. Thus, we have chosen to enforce homogenous lists in our static type system:
644+
645+\begin{equation}
646+ \trfrac
647+ {\Gamma \vdash e_1:\tau \quad \cdots \quad \Gamma \vdash e_n:\tau}
648+ {\Gamma \vdash [e_1 \; \cdots \; e_n ] : [\tau]}
649+\end{equation}
650+
651+\begin{equation}
652+ \trfrac
653+ {\Gamma \vdash e_1:[\tau] \qquad \Gamma \vdash e_2 : [\tau]}
654+ {\Gamma \vdash (e_1 +\!\!+ \: e_2) : [\tau]}
655+\end{equation}
656+
657+\subsubsection{Lambda abstractions}
658+
659+Typing rules for both lambda abstraction definitions and application is common among type system derived from Hindley-Milner:
660+
661+\begin{equation}
662+ \trfrac
663+ {\Gamma \vdash e_1:\tau_1 \rightarrow \tau_2 \qquad \Gamma \vdash e_2 : \tau_1}
664+ {\Gamma \vdash (e_1 \; e_2) : \tau_2}
665+\end{equation}
666+
667+\begin{equation}
668+ \trfrac
669+ {\Gamma, \text{x}: \tau_1 \vdash e : \tau_2}
670+ {\Gamma \vdash (\text{x: } e) : \tau_1 \rightarrow \tau_2}
671+\end{equation}
672+
673+\subsubsection{Addition}
674+
675+The rationale for having a special case for the addition operator is layed out in section~\ref{sec:addition}:
676+
677+\begin{equation}
678+ \trfrac
679+ {\Gamma \vdash e_1:\tau \qquad \Gamma \vdash e_2 : \tau \qquad \Gamma \vdash (\text{String} || \text{Number}) \sim \tau}
680+ {\Gamma \vdash (e_1 + e_2) : \tau}
681+\end{equation}
682+
683+\subsubsection{Conditional expressions}
684+
685+Conditionals are also very similar to what is described in the Hindley–Milner type system:
686+
687+\begin{equation}
688+ \trfrac
689+ {\Gamma \vdash e_1 : \text{Bool} \qquad \Gamma \vdash e_2 : \tau \qquad \Gamma \vdash e_3 : \tau}
690+ {\Gamma \vdash (\text{if} \; e_1 \; \text{then} \; e_2 \; \text{else} \; e_3) : \tau}
691+\end{equation}
692+
693+\subsubsection{\texttt{let}-generalization}
694+
695+Just like in many functional type systems, our type system will support let-generalization -- constants bound in a \texttt{let} expression are generalized as much as possible. All free type variables that were defined while inferring an expression are closed over.
696+
697+A simple version of rule is as follows:
698+
699+\begin{equation} \label{eq:letGeneralization}
700+ \trfrac
701+ {\Gamma \vdash e_1 : \tau_1 \qquad \Gamma, (\text{x}: \forall \{\text{ftv}(\tau_1) - \text{ftv}(\Gamma)\}. \; \tau_1) \vdash e_2 : \tau_2}
702+ {\Gamma \vdash (\text{let} \; \text{x = } e_1; \; \text{in} \; e_2) : \tau_2}
703+\end{equation}
704+
705+where $\text{fvt}(\alpha)$ is the set of all free variables that occur in $\alpha$.
706+
707+Of course, this does not cover all possible syntactic constructs -- it is only concerned with inferring a single declaration. It is trivially extendable to a series of independent declarations. Inferring recursive declarations is discussed in section~\ref{sec:recLet}.
708+
709+Inferring \emph{let expressions} trivially extends to inferring fields of \emph{attribute sets} and is omitted for brevity.
710+
711+\subsubsection{Instantiation}
712+
713+When using expressions with generalized types, we need to instantiate theme to concrete types:
714+
715+\begin{equation}
716+ \trfrac
717+ {\Gamma \vdash e : \forall \alpha. \; \tau_1}
718+ {\Gamma \vdash e: [\alpha \rightarrow \tau_2] \tau_1}
719+\end{equation}
720+
721+where $[\alpha \rightarrow \beta]\gamma$ denotes the result of substituting all free occurrences of $\alpha$ in $\gamma$ with $\beta$.
722+
723+\subsubsection{Attribute sets}
724+
725+Basic \emph{attribute set} operations are now trivially expressible through the predicate defined in section~\ref{sec:attrSetPred}:
726+
727+\begin{equation}
728+ \trfrac
729+ {\Gamma \vdash e_1 : \tau_1 \qquad \Gamma \vdash e_2 : \tau_2 \qquad \Gamma \vdash \tau_1 \update \tau_2 \sim \tau_3}
730+ {\Gamma \vdash (e_1 \update e_2) : \tau_3}
731+\end{equation}
732+
733+\begin{equation}
734+ \trfrac
735+ {\Gamma \vdash e.\text{x} = \tau}
736+ {\Gamma \vdash (e.\text{x}) : \tau}
737+\end{equation}
738+
739+\begin{equation}
740+ \trfrac
741+ {\Gamma \vdash e_2 : \tau \qquad \Gamma \vdash e_1 \optDot \text{x} = \tau}
742+ {\Gamma \vdash (e.\text{x} \; \text{or} \; e_2) : \tau}
743+\end{equation}
744+
745+\begin{equation}
746+ \trfrac
747+ {\Gamma \vdash e \optDot \text{x} = \tau}
748+ {\Gamma \vdash (e \; \text{?} \; \text{x}) : \text{Bool}}
749+\end{equation}
750+
751+When defining typing rules for \emph{attribute sets} we will use the notion of rows similar to what is used in the \emph{Rose} paper~\cite{morris2019abstracting}: for typing purposes an attribute set will be defined as a product of a set of \emph{rows} – key-value pairs: $\Pi \xi$ where $\xi$ is a set of \emph{rows}.
752+
753+A key-value pair will be denoted as $\text{x} = \alpha$ where `x' is the name of a field and $\alpha$ is the type of the field.
754+
755+Of course, a \emph{set of rows} can not contain multiple \emph{rows} with the same key.
756+
757+With that we can define how those predicate are actually satisfied:
758+
759+\begin{equation}
760+ \trfrac
761+ {(\text{x} = \tau) \in \xi}
762+ {(\Pi \xi).\text{x} = \tau}
763+\end{equation}
764+
765+\begin{equation}
766+ \trfrac
767+ {\text{x} \notin \xi}
768+ {(\Pi \xi) \optDot \text{x} = \tau}
769+\end{equation}
770+
771+\begin{equation}
772+ \trfrac
773+ {\Gamma \vdash \tau_1.\text{x} = \tau_2}
774+ {\Gamma \vdash (\tau_1 \optDot \text{x}) = \tau_2}
775+\end{equation}
776+
777+where $(\text{x} = \tau) \in \xi$ denotes the presence of the \emph{row} $(\text{x} = \tau)$ in the \emph{set} $\xi$, and $\text{x} \notin \xi$ denotes the absence of a \emph{row} with the key `x' in the \emph{set} $\xi$.
778+
779+The definition of the ``update'' predicate uses standard set comprehension notation:
780+
781+\begin{equation}
782+ \trfrac
783+ {}
784+ {\Pi \xi_1 \update \Pi \xi_2 \sim \Pi (\xi_2 \cup \{a = \tau || (a = \tau) \leftarrow \xi_1, a \notin \xi_2\})}
785+\end{equation}
786+
787+\subsubsection{with expressions} \label{sec:withExprType}
788+
789+\emph{with expressions} discussed in section~\ref{sec:withExp} are not difficult to define a typing rule for:
790+
791+\begin{equation}
792+ \trfrac
793+ {\Gamma \vdash e_1: \Pi \xi \qquad \Gamma, \xi \vdash e_2 : \tau}
794+ {\Gamma \vdash (\text{with } e_1\text{; } e_2) : \tau}
795+\end{equation}
796+
797+\emph{with expressions} do, however, pose a particularly hard problem when implementing the type system – we can't always statically know the fields in $e_1$ -- it can be passed in as a function argument. This means that the typing environment of a function can depend on its argument. Implementing this in a wholistic manner would require our type system support a form of dependent types. That is not a direction we want to pursue -- introducing dependent types would greatly complicate the type system to a point where automated type inference would not practical and the type system would be a lot harder to work with.
798+
799+Instead, we opted to define a heuristic which in our testing was proven to cover most practical cases: when encountering a variable in the body of a \emph{with expression}:
800+
801+\begin{enumerate}
802+ \item if a variable was defined in the body of the with expression and is in scope, return that type
803+ \item if the \emph{attribute set} from the \emph{with expression} is statically known and defined a key with the appropriate name then return that types
804+ \item if the \emph{attribute set} from the \emph{with expression} is not statically known and the outer context of the \emph{with expression} contains a variable with the appropriate name, return that type
805+ \item else, create a constraint that the first operand in the \emph{with expression} contains a field with the appropriate name and type
806+\end{enumerate}
807+
808+\section{Implementation} \label{sec:implementation}
809+
810+In this section we will explore the techniques employed in our implementation~\cite{github-source} of our type system. It is implemented in the \emph{Haskell}\footnote{\url{https://www.haskell.org}} programming language.
811+
812+% \subsubsection{Effects}
813+
814+% Our implementation uses the \emph{freer-simple}\footnote{\url{https://github.com/lexi-lambda/freer-simple}} library as the effects system.
815+
816+% The
817+
818+% \begin{code}
819+% type InferEffs =
820+% !! [ Fresh,
821+% Reader SrcSpan,
822+% Writer (SrcSpan, Errors),
823+% Writer PredicateError,
824+% Writer Pred,
825+% State (MKM.Map Pred),
826+% VariableMapEff,
827+% Writer UnifyingError,
828+% Writer InferError,
829+% State Substitution,
830+% TreeTracer
831+% ]
832+% \end{code}
833+
834+\subsection{Effect system}
835+
836+\subsubsection{Monad transformers}
837+
838+Developing a typechecker requires working with a large amount of non-trivial algorithms which influence each other in complex ways. A widespread way of dealing with such situations is introducing a common computational environment through which different parts of the program can interact (instead of ``manually'' passing state around). A well-established way of handling state in purely functional programming languages is the \emph{Monad} abstraction~\cite{moggi1988computational}.
839+
840+It is natural to want to abstract the underlying monad – explicitly declare what features a function actually needs the monad to have. Furthermore, it is desireable to decompose the features of the a monad not only in function definitions, but also at the call site – it is desireable to be able to conjure up monads with desireable traits in an ad-hoc manner. This has been achieved a while ago with \emph{monad transformers}~\cite{liang1995monad}.
841+
842+A drawback of monad transformers is their somewhat rigid nature – every behavior a monad needs to have needs to be defined as a distinct transformer with appropriate instances. The instances need to not only implement the desired behavior, but also explicitly ``pass through'' \emph{all} other effects that it might be used in combination with. This means that adding extra behavior leads to a large amount of boilerplate. Furthermore, monads themselves (monad transformers) are not in general composable, leading to a whole other set of problems. In addition, it is cumbersome to locally change parts of the underlying implementation of a monad dynamically – it might be useful to tweak some behavior in only a part of an algorithm, leaving the rest to the abstract implementation; monad transformers don't really have such capabilities.
843+
844+\subsubsection{Free monad extensible effects}
845+
846+Recently a new approach to effect systems has been getting more attention – \emph{free monads algebraic effects}~\cite{kiselyov2015freer, ploeg2014reflection, kiselyov2013extensible}. This approach solves the problems with monad transformers mentioned above. Rather than being transformers, effects are described as \emph{functors}. The composability problem is resolved due to functors being in general composable. Contrary to how monad transformers operate, effects (or their carriers) in \emph{free monads algebraic effects} (we will from now on refer to them as just \emph{algebraic effects}) don't have any particular interpretation of the effect associated with them. Effects are interpreted in an ad-hoc manner at the call site. Furthermore, this allows us to dynamically modify the behavior of effects without changing the types or implementations of functions we wish to change the behavior of.
847+% How we use \emph{algebraic effects} will be discussed in more detail in section~\ref{sec:implementation}.
848+
849+\subsection{Substitutions}
850+
851+\subsubsection{Substitutions in other implementations}
852+
853+In most typechecker implementations a substitution is a mapping from \emph{type variables} to \emph{types}. These substitutions are usually generated during the unification of type constraints and are, in general, applied to types as soon as they are available.
854+
855+The notion of substitution composition is usually taken to mean a binary operation which produces a new substitution that when applied (|sub|) to a type would produce the same result as sequentially applying the two source substitutions:
856+
857+\begin{code}
858+sub (s1 . s2) = sub s1 . sub s2
859+\end{code}
860+
861+\subsubsection{Substitutions in our implementation}
862+
863+In our implementation the application of substitutions is delayed as much as possible. They are applied in exactly two cases:
864+
865+\begin{enumerate}
866+ \item Right before unifying a constraint
867+ \item Right before closing over a type
868+\end{enumerate}
869+
870+This choice has several implications. Firstly, we can never have conflicting ``keys'' in substitutions (which is not the case in other implementations). Using this information we can define stronger substitution composition:
871+
872+\begin{code}
873+newtype Substitution = Substitution
874+ {unSubstitution :: Map TypeVariable NType}
875+
876+instance Semigroup Substitution where
877+ a'@(Substitution a) <> b'@(Substitution b) =
878+ Substitution $ M.unionWith undefined
879+ (fmap (sub b') a)
880+ (fmap (sub a') b)
881+\end{code}
882+
883+
884+This means that the order of composition does no longer matter, and applying the composition of substitutions yields more information than applying them sequentially.
885+
886+Another consequence of the decision to delay substitutions is that now the role of the |infer| step of typechecking only does the following three things:
887+
888+\begin{enumerate}
889+ \item returns a type variable that represents the type of the expression being inferred
890+ \item emits constraints generated during inferring
891+ \item emits predicates generated during inferring
892+\end{enumerate}
893+
894+\subsection{Typing context}
895+
896+The typing context in our implementation, in essence, consists of two distinct data structures:
897+
898+\begin{enumerate}
899+ \item the types of variables currently in scope
900+ \item the predicates which are applicable to those types
901+\end{enumerate}
902+
903+\subsubsection{Variables in scope}
904+
905+Note that in practice, the ``variables in scope'' data structure only needs to contain type variables since we apply substitutions as late as possible.
906+
907+In actual fact, due to the heuristics described in section~\ref{sec:withExprType}, the types of variables in scope can not be represented as a static data structure but rather is implemented as a scoped effect\footnote{Effects in our case are implemented using the \emph{freer-simple} library: \url{https://github.com/lexi-lambda/freer-simple}}:
908+
909+\begin{code}
910+data VariableMapEff x where
911+ LookupVariable
912+ :: VarName
913+ -> VariableMapEff (Maybe Scheme)
914+
915+lookupVar
916+ :: Member VariableMapEff eff
917+ => VarName -> Eff eff (Maybe Scheme)
918+lookupVar = send . LookupVariable
919+\end{code}
920+
921+This allows us to dynamically redefine what it means to look up a variable in terms of its implementation in the outer context.
922+
923+\subsubsection{Predicates}
924+
925+Predicates can, on the other hand, be stored as a static data structure. The only non-standard behavior is that the set of predicates needs to be queried and manipulated based on the types that they contain rather than on the predicates themselves.
926+
927+For this reason, we have developed a data structure we call ``multi-keyed map''.
928+
929+\begin{code}
930+class (Ord (Key t), Ord t) => Keyable t where
931+ type Key t :: Type
932+ getKeys :: t -> [Key t]
933+
934+data MultiKeyedMap t = MultiKeyedMap
935+ (M.Map (Key t) (S.Set t)) (S.Set t)
936+\end{code}
937+
938+The data structure is the product of two other data structures:
939+
940+\begin{enumerate}
941+ \item A map, mapping possible keys of the stored |t| to a set of values that contain the given key
942+ \item A set that contains the values that don't contain any keys
943+\end{enumerate}
944+
945+The |Keyable| typeclass is used to extract the keys from the values that need to be stored.
946+
947+The union of two maps is defined trivially -- by taking the union of the inner structures:
948+
949+\begin{code}
950+instance (Ord (Key t), Ord t)
951+ => Semigroup (MultiKeyedMap t) where
952+ (MultiKeyedMap x x') <> (MultiKeyedMap y y') =
953+ MultiKeyedMap
954+ (M.unionWith S.union x y) (x' <> y')
955+\end{code}
956+
957+Creating a singleton map from a single values is defined like so:
958+
959+\begin{code}
960+singleton :: Keyable t => t -> MultiKeyedMap t
961+singleton t = case getKeys t of
962+ [] -> MultiKeyedMap M.empty (S.singleton t)
963+ ks@(_ : _) -> MultiKeyedMap
964+ (M.fromList $ fmap (,s) ks) S.empty
965+ where
966+ s = S.singleton t
967+\end{code}
968+
969+With these operations defining the |insert| operation becomes trivial:
970+
971+\begin{code}
972+insert
973+ :: Keyable t
974+ => t -> MultiKeyedMap t -> MultiKeyedMap t
975+insert t m = m <> singleton t
976+\end{code}
977+
978+Now we come to the lookup operation. Note that the algorithmic complexity of querying the predicates by a type they contain is now the cost of an ordinary map lookup -- $O(log(n))$ where $n$ is the number of values contained in the map (in our case the number of all types referenced from within the predicates):
979+
980+\begin{code}
981+lookup
982+ :: Keyable t
983+ => Key t -> MultiKeyedMap t -> S.Set t
984+lookup k (MultiKeyedMap m _) =
985+ fromMaybe S.empty $ M.lookup k m
986+\end{code}
987+
988+\subsection{Closing over type variables}
989+
990+An observation we can make is the following: it only makes sense to close over the type variables that were generated during the inference of the type we are closing over. Any other type variables either:
991+
992+\begin{enumerate}
993+ \item are not present in the type
994+ \item are used in an outer lexical scope (environment)
995+\end{enumerate}
996+
997+This greatly simplifies implementing the typing rule~\ref{eq:letGeneralization} since instead of having to calculate a set of free type variables of the whole context, we only need to obtain a predicate that identifies if a type variable was introduced during the inference of an expression. This is made even easier if type variables are internally represented as integers, as they often are.
998+
999+In our case, this is complicated by the fact that we need to introduce type variables which are fields of an \emph{attribute set} from an outer lexical scope. This is problematic because while the type variable can be defined during inference, it is actually logically defined at the same position as the initial \emph{attribute set}; it has the same lexical scope as the \emph{attribute set}. So, the lexical scope of a type variable can not be derived from the inference context of an expression.
1000+
1001+A solution we came up with is to have two ways a type variable can be constructed -- as an ordinary type variable backed by a single integer or as a sub-type variable that has the same lexical scope as another type variable:
1002+
1003+\begin{code}
1004+data TypeVariable
1005+ = TypeVariable Int
1006+ | SubTypeVariable Int Int
1007+\end{code}
1008+
1009+This way, when applying a predicate to check the lexical scope of a type variable, we can always restrict ourselves to the first integer.
1010+
1011+\section{Evaluation of our implementation}
1012+
1013+In this section, we will examine how our implementation of the typechecker behaves on real input.
1014+
1015+\subsection{Evaluating nixpkgs}
1016+
1017+To evaluate our typechecker implementation~\cite{github-source}, we collected \emph{Nix} source files from the largest \emph{Nix} package repository – \emph{nixpkgs}\footnote{\url{https://github.com/NixOS/nixpkgs}}. Due to our current implementation not supporting file imports (file imports are the responsibility of the system calling the typechecker, not the type checker itself), the files were filtered down to those that do not contain import statements.
1018+
1019+Running our typechecker on the test set of \emph{Nix} source files results in \emph{1963} out of \emph{2948} (67\%) typechecking with no type errors.
1020+
1021+We believe this is a very good result since the files were not prepared in any way and were taken as-is from the package repository. Furthermore, it is important to note that rejecting a portion of ``valid'' programs is an unavoidable property of static typecheckers.
1022+
1023+We would also like to point out that even in those cases when type errors were encountered during typechecking, the typechecker still produces output types that can be useful to the developer and can be used for further typechecking of larger expressions (though providing fewer guarantees).
1024+
1025+\subsection{Evaluating common expressions}
1026+
1027+We will now examine a few language constructs to see how our typechecker handles them and what errors it can detect.
1028+
1029+\subsubsection{Script interpreters}
1030+
1031+In listing~\ref{lst:interpreters} we present a sample script that demonstrates our type inference algorithm.
1032+
1033+The function \texttt{getScriptInterpreters} takes a single ``package'' structure and returns a list of interpreters used in the scripts of the package. Out type inference algorithm correctly infers the following type of the function:
1034+
1035+\begin{equation}
1036+ \forall \alpha \beta \gamma. \; (\alpha. \text{scripts} = [\beta], \beta. \text{interpreter} = \gamma) \Rightarrow \alpha \rightarrow [\gamma]
1037+\end{equation}
1038+
1039+The constant \texttt{package} contains a sample ``package'' structure with three scripts. In real code, the structure would be a lot more complex, but it is simplified for brevity.
1040+
1041+The result of the whole expression (applying \texttt{getScriptInterpreters} to \texttt{package}) is correctly inferred by our type checker to have the type:
1042+
1043+\begin{equation}
1044+ [\text{String}]
1045+\end{equation}
1046+
1047+\begin{figure}
1048+ \begin{minipage}{\textwidth}
1049+ \begin{verbatim}
1050+let getScriptInterpreters = x:
1051+ builtins.map
1052+ (y: y.interpreter)
1053+ x.scripts;
1054+ package = {
1055+ scripts = [
1056+ {interpreter = "bash";}
1057+ {interpreter = "zsh";}
1058+ {interpreter = "fish";}
1059+ ];
1060+ };
1061+in getScriptInterpreters package
1062+\end{verbatim}
1063+ \end{minipage}
1064+ \caption{A sample nix program which gathers all interpreters used by a script in a package.}
1065+ \label{lst:interpreters}
1066+\end{figure}
1067+
1068+If a programmer makes a certain class of mistakes when developing the program, our typechecker would report an error. For example, the programmer might forget to access the ``scripts'' field of the package and pass the whole package by accident:
1069+
1070+\begin{verbatim}
1071+getScriptInterpreters =
1072+ x: builtins.map (y: y.interpreter) x;
1073+\end{verbatim}
1074+
1075+In that case, when evaluating the whole expression from listing~\ref{lst:interpreters}, he would receive the following error from the typechecker: ``could not match list with type \texttt{\{scripts = [{interpreter = String;}]\}}''. This error is a result of trying to \texttt{map} over an attribute set.
1076+
1077+\subsubsection{Haskell packages}
1078+
1079+In listing~\ref{lst:haskellPackages}, we defined a function \texttt{haskellPackage} that takes parameters for a Haskell package and returns a configuration that might describe how to build the package. Out tool correctly infers the type of the function:
1080+
1081+\begin{equation}
1082+ \begin{aligned}
1083+ \forall \alpha \beta. \; &
1084+ \\ ( & \alpha \optDot \text{compilerFlags} = [\text{String}],
1085+ \\ & \alpha \optDot \text{compilerVersion} = \text{String},
1086+ \\ & \alpha.\text{src} = \beta)
1087+ \\ \Rightarrow & \alpha
1088+ \\ \rightarrow & \{ \text{compiler} = \text{String};
1089+ \\ & \text{compilerFlags} = [\text{String}];
1090+ \\ & \text{src} = \beta; \}
1091+ \end{aligned}
1092+\end{equation}
1093+
1094+By the derived type of the function, we can clearly see that the \texttt{compilerFlags} and \texttt{compilerVersion} fields of the input attribute set are optional.
1095+
1096+The result of the whole expression is a list of applications of the \texttt{haskellPackage} function to multiple configurations. Ou implementation correctly infers the following type:
1097+
1098+\begin{equation}
1099+ [{\text{compiler} = \text{String}; \text{compilerFlags} = [\text{String}]; \text{src} = \text{String};}]
1100+\end{equation}
1101+
1102+\begin{figure}
1103+ \begin{minipage}{\textwidth}
1104+ \begin{verbatim}
1105+let haskellPackage = x: {
1106+ compiler = "ghc" + (x.compilerVersion or "900");
1107+ inherit (x) src;
1108+ compilerFlags = x.compilerFlags or ["-O3" "-j"];
1109+};
1110+in [
1111+ (haskellPackage {
1112+ src = ./project-m36;
1113+ compilerVersion = "865";
1114+ })
1115+ (haskellPackage {
1116+ src = ./pandoc;
1117+ compilerFlags = ["-static"];
1118+ })
1119+]
1120+ \end{verbatim}
1121+ \end{minipage}
1122+ \caption{A sample nix program which defined several haskell packages..}
1123+ \label{lst:haskellPackages}
1124+\end{figure}
1125+
1126+A mistake that is easy to make here is to forget to quote the \texttt{compilerVersion} field, leading to the type being `Number' instead of `String'. In that case, our implementation will convey exactly that in an error.
1127+
1128+Another common mistake is specifying the \texttt{compilerFlags} field as a single `String' instead of a list. In that case, our implementation will emit an appropriate error without the need to execute the expression.
1129+
1130+\section{Possible improvements}
1131+
1132+\subsection{Making predicates more user-friendly}
1133+
1134+\subsubsection{A novel technique}
1135+
1136+The reader might observe that, although the predicates have a parallel with the Nix term syntax, visually parsing predicates and mentally applying them to the specified type variables can be difficult even in such simple examples. Here we will explore a technique that can be used to make these predicates easier for the programmer to work with.
1137+
1138+The technique is based on the fact that a type variable by itself can only convey the following information:
1139+
1140+\begin{enumerate}
1141+ \item positional information -- a specific position in a type
1142+ \item identity information -- the type variable is equivalent to other type variables with the same name within the scope where it is declared
1143+\end{enumerate}
1144+
1145+Note that all of what follows is only concerned with syntactic constructs. It does in no way alter the semantic of the predicates described above.
1146+
1147+We would like to point out that all of the predicates have an operand which is the ``result'' of the predicate -- a single type variable that is said to be equivalent to a more complex expression. That is $\beta$ in predicates \ref{eq:fieldPred} and \ref{eq:optFieldPred}, and $\gamma$ in predicate \ref{eq:upatePred}.
1148+
1149+The observation we need to make is that \emph{referential transparency}\footnote{\url{https://en.wikipedia.org/wiki/Referential_transparency}} is a natural notion in functional programming languages like Nix, and it is natural to replace variables with their definitions. In some sense, the ``results'' of predicates described above can be interpreted as being ``defined'' by the predicate to be ``equal'' to the combination of the other operands and, as such, can be replaced with their definitions.
1150+
1151+This means that we can syntactically replace \emph{type variables} with a portion of a predicate -- replace the variable with the definition. If we apply this technique to the type~\ref{eq:dotExample}, we get the following type:
1152+
1153+\begin{equation}
1154+ \forall \alpha. \; \alpha \rightarrow \alpha.\text{y}
1155+\end{equation}
1156+
1157+When applied to the type~\ref{eq:updatePredExample}, it yields:
1158+
1159+\begin{equation}
1160+ \forall \alpha \beta. \; \alpha \rightarrow \beta \rightarrow (\alpha \update \beta)
1161+\end{equation}
1162+
1163+We believe the derived types above are a lot easier to understand than their initial counterparts.
1164+
1165+\subsubsection{Implementation notes}
1166+
1167+For practical reasons, when applying the technique, there should be a threshold that limits the syntactic complexity of types that can be ``inlined''. This is due to the types being potentially as big as literals in the source expressions.
1168+
1169+The complexity of types should also be used as a heuristic in cases where there are multiple potential ``definitions'' for the same type variable – it is preferable to use the ``definitions'' with the lowest syntactic complexity as it leads to simpler types.
1170+
1171+\subsubsection{Limitations}
1172+
1173+The technique is not applicable if the ``result'' of a predicate is not a type variable like in type \ref{eq:optFieldPredExample2}.
1174+
1175+Another limitation is that we can not remove predicates if their ``result'' type variable is not present in the head of the type like in type \ref{eq:optFieldPredExample}, since we would be losing typing information by doing so.
1176+
1177+\subsection{Type hints}
1178+
1179+Dynamic types in Nix contain more information than our static type system can convey. A usability improvement to provide more utility to the programmer might be to allow extra information to be tagged onto type information and propagated during type inference. This information would not influence the typechecking algorithm in any way. It would only provide utility to the person reading the resulting types or to external tools.
1180+
1181+Some information that might be useful as type hints:
1182+
1183+\begin{enumerate}
1184+ \item The dynamic type of strings (URI, Path, etc.) – useful information for the programmer
1185+ \item Programmer-supplied annotations. When writing nix expressions, it is common practice to have a program in some other programming language embedded in Nix as a string literal. It would be useful to propagate information about the underlying programming language to aid IDEs -- they could enable special syntax highlighting and linting based on the programming language.
1186+\end{enumerate}
1187+
1188+\subsection{Sum types} \label{sec:sumTypes}
1189+
1190+In our static type system, we introduced a ``special case'' for the \emph{addition operator} as it could be applied to a number of different types.
1191+
1192+The idea of this improvement is to generalize the case and allow the type system to handle arbitrary sums of arbitrary types. This can be implemented as a predicate stating that a type variable can be a certain type:
1193+
1194+\begin{equation}
1195+ \alpha \lessdot \beta
1196+\end{equation}
1197+
1198+where $\beta$ can be the type $\alpha$. With this predicate, our ``String or Number'' predicate can be expressed like so:
1199+
1200+\begin{equation}
1201+ \strOrNum \sim \alpha = (\text{String} \lessdot \alpha, \text{Number} \lessdot \alpha)
1202+\end{equation}
1203+
1204+\section*{Conclusion}
1205+
1206+In this paper, we have examined the existing approaches which have been used in developing type systems for functional programming languages. We have then adapted the existing approaches and developed a new static type system for the Nix Expression Language. We have also developed a preliminary implementation of our type system, which we tested on an existing codebase. We have also outlined further practical improvements to our implementation, which could improve the developer experience.
1207+
1208+\newpage
1209+
1210+\bibliographystyle{IEEEtran}
1211+\bibliography{bibl}
1212+
1213+% \registrationList
1214+
1215+\end{document}
docs/pres/img/lsp.pngnew file

Binary file not shown.

docs/pres/img/nixpkgs.pngnew file

Binary file not shown.

docs/pres/pres.mdnew file+213
@@ -0,0 +1,213 @@
1+build-lists: true
2+slidenumbers: true
3+
4+[.header: alignment(center), Avenir Next]
5+
6+## Языковой сервер для Nix Expression Language
7+
8+## Language Server for the Nix Expression Language
9+
10+<br>
11+
12+_Автор:_ Костюченко Илья Игоревич
13+
14+_Руководитель:_ Кулямин Виктор Вячеславович, Доцент, базовая кафедра "Системное программирование"
15+
16+---
17+
18+> Nix is a powerful package manager that makes package management reliable and reproducible.
19+-- [nixos.org](https://nixos.org)
20+
21+---
22+
23+# Nix
24+
25+- Package manager
26+- Build system*
27+- Ad hoc development environments
28+- Easy (cross-community) dependency management
29+- Reproducible builds
30+- *And much more: NixOS, NixOps, Build Caching, Docker ...*
31+
32+---
33+
34+# Nix Expression Language
35+
36+- Purely functional
37+ - No shared mutable state
38+ - Easy to reason about
39+ - Easy reuse
40+- Lazy
41+- Strict, but not static typing
42+
43+---
44+
45+# Nix Expression Language
46+
47+```nix
48+let pkgs = import ./nixpkgs {};
49+in derivation {
50+ name = "simple";
51+ builder = "${pkgs.bash}/bin/bash";
52+ args = [ ./simple_builder.sh ];
53+ gcc = pkgs.gcc;
54+ coreutils = pkgs.coreutils;
55+ src = ./simple.c;
56+ system = builtins.currentSystem;
57+}
58+```
59+
60+---
61+
62+# Language Server Protocol
63+
64+The Language Server Protocol (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like autocomplete, go to definition, find all references etc.
65+
66+---
67+
68+# Language Server Protocol
69+
70+![inline](img/lsp.png)
71+
72+---
73+
74+[.text: text-scale(0.85)]
75+
76+# Terms and definitions
77+
78+**Type system** – a logical system comprising a set of rules that assigns a property called a type to the various constructs of a computer program
79+
80+**Type checking** – the process of verifying and enforcing the constraints of types.
81+
82+**Hindley–Milner type system** – a classical type system for the lambda calculus with parametric polymorphism.
83+
84+**Language Server** – a service for analyzing code in a specific language which can be used in many code editors.
85+
86+---
87+
88+# Relevance
89+
90+The Nix ecosystem is slowly becoming popular.
91+
92+The central repository contains more than 60000 packages.
93+
94+There is a need to make writing Nix expressions less error-prone.
95+
96+![right fit](img/nixpkgs.png)
97+
98+---
99+
100+# The goal
101+
102+1. Develop a type system for the existing Nix expression language
103+2. Develop a type checker for the type system
104+3. Develop a Language server for the Nix expression language integrating the type checker
105+
106+---
107+
108+# Existing approaches
109+
110+Type systems for functional languages is an actively researched field.
111+
112+The Hindley–Milner type system_[1]_ is a simple, but well-studied type system for a very simple language. It is fully decidable, does not require annotations. It is the basis for many real-world type systems.
113+
114+---
115+
116+# Existing solutions
117+
118+## Type systems
119+
120+- github.com/regnat/ptyx – Abandoned and incomplete.
121+- github.com/regnat/tix – An older version of ptyx. Abandoned, terribly incomplete.
122+- github.com/haskell-nix/hnix – has a module with a type checker. Is very experimental and is not used.
123+
124+---
125+
126+# Existing solutions
127+
128+## Language servers
129+
130+- github.com/nix-community/rnix-lsp/ – Basic goto and error reporting. No type system, extremely simple.
131+- github.com/nix-community/vscode-nix-ide – Basic instantiation error reporting. (`nix-instantiate`)
132+
133+---
134+
135+# Functional requirements
136+
137+- The system should perform type checking for expression.
138+
139+- The system should analyze conditional statements where the condition consists only of type checks and boolean operators built into the Nix expression language.
140+
141+- The system should analyze the types and presence of attributes in attribute sets.
142+
143+- The system should report encountered typechecking.
144+
145+---
146+
147+# Functional requirements
148+
149+- The system should provide the location of definitions for all locally used terms .
150+
151+- The system should report the use of undefined terms through means defined by the Language Server Protocol.
152+
153+- The system should report the types of requested expressions through means defined by the Language Server Protocol.
154+
155+---
156+
157+# Functional requirements
158+
159+- The system should provide code completions suggestions from the variables currently in scope and expressions built into the language.
160+
161+- The system should provide a way for the programmer to explicitly annotate types of expressions which will influence type checking.
162+
163+---
164+
165+# Methods and algorithms
166+
167+The type system will be heavily influenced by the Hindley–Milner_[1]_ type system.
168+
169+The type system will implement arbitrary-ranked polymorphism_[3]_ with deep instantiation to disambiguate them in existing untyped code.
170+
171+The type system will allow the user to influence type checking by providing explicit type annotations._[4]_
172+
173+---
174+
175+# Methods and algorithms
176+
177+The system will use the Shake build system to manage dependencies and caches._[3]_
178+
179+---
180+
181+# Used tools
182+
183+1. Haskell
184+2. Nix
185+3. Visual Studio Code
186+4. Haskell Language Server
187+5. Haskell Stack
188+
189+---
190+
191+# Used libraries
192+
193+1. hnix – Nix expression language parsing, will need to be forked
194+2. shake
195+3. acts – semigroup actions
196+
197+---
198+
199+# Expected results
200+
201+1. An executable of the Nix expression language server with an integrated type checker.
202+2. A suite of automated tests to check some of the language server functionality.
203+
204+---
205+
206+[.text: text-scale(0.7)]
207+
208+# References
209+
210+1. Damas L., Milner R. Principal type-schemes for functional programs //Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages. – 1982. – С. 207-212.
211+2. Mitchell N. Shake before building: replacing make with haskell //ACM SIGPLAN Notices. – 2012. – Т. 47. – №. 9. – С. 55-66.
212+3. Jones S. P. et al. Practical type inference for arbitrary-rank types //Journal of functional programming. – 2007. – Т. 17. – №. 1. – С. 1-82. MLA
213+4. Stuckey P. J., Sulzmann M., Wazny J. Improved inference for checking type annotations //arXiv preprint cs/0507036. – 2005. MLA
docs/pres/pres.pdfnew file

Binary file not shown.

docs/pres_2/img/nixpkgs.pngnew file

Binary file not shown.

docs/pres_2/img/paper.pngnew file

Binary file not shown.

docs/pres_2/img/ter.pngnew file

Binary file not shown.

docs/pres_2/pres.mdnew file+407
@@ -0,0 +1,407 @@
1+build-lists: true
2+slidenumbers: true
3+footer: Kostyuchenko Ilya, Static analyzer for the Nix Expression Language
4+
5+[.header: alignment(center), Avenir Next]
6+
7+
8+## Static analyzer for the Nix Expression Language
9+
10+### Статический анализатор для Nix Expression Language
11+
12+<br>
13+<br>
14+
15+_Author:_ Kostyuchenko Ilya
16+
17+_Supervisor:_ Victor Kuliamin, Associate Professor, PhD
18+
19+#### _Source code:_ [github.com/ilyakooo0/tix](https://github.com/ilyakooo0/tix)
20+
21+---
22+
23+## Nix is a powerful package manager that makes package management reliable and reproducible.
24+
25+#### – [nixos.org](https://nixos.org)
26+
27+---
28+
29+[.build-lists: false]
30+
31+# Nix
32+
33+- Package manager
34+- Build system*
35+- Ad hoc development environments
36+- Easy (cross-community) dependency management
37+- Reproducible builds
38+- *And much more: NixOS, NixOps, Build Caching, Docker ...*
39+
40+---
41+
42+[.build-lists: false]
43+
44+# Nix Expression Language
45+
46+[.column]
47+
48+- Purely functional
49+- Lazy
50+- **Strict, but not static typing**
51+
52+[.column]
53+
54+```nix
55+let pkgs = import ./nixpkgs {};
56+in derivation {
57+ name = "simple";
58+ builder = "${pkgs.bash}/bin/bash";
59+ args = [ ./simple_builder.sh ];
60+ gcc = pkgs.gcc;
61+ coreutils = pkgs.coreutils;
62+ src = ./simple.c;
63+ system = builtins.currentSystem;
64+}
65+```
66+
67+---
68+
69+[.text: text-scale(0.55)]
70+
71+# Terms and definitions
72+
73+**Type** – an attribute of data which tells the compiler or interpreter how the programmer intends to use the data
74+
75+**Type system** – a logical system comprising a set of rules that assigns a property called a type to the various constructs of a computer program
76+
77+**Type checking** – the process of verifying and enforcing the constraints of types.
78+
79+**Hindley–Milner type system** – a classical type system for the lambda calculus with parametric polymorphism.
80+
81+**Parametric polymorphism** – a type of polymorphism where types are specified by abstract symbols that can represent any type.
82+
83+**Row polymorphism** – a kind of polymorphism that allows one to write programs that are polymorphic on record field types.
84+
85+---
86+
87+# Relevance
88+
89+The Nix ecosystem is slowly becoming popular.
90+
91+The central repository contains more than 60000 packages.
92+
93+There is a need to make writing Nix expressions less error-prone.
94+
95+![right fit](img/nixpkgs.png)
96+
97+---
98+
99+# Relevance
100+
101+Nix Expression Language: **Strict, but not static typing**.
102+
103+Adding static typing would:
104+
105+- Increase reliability of code
106+- Lower costs of development (resolving issue earlier is cheaper)
107+
108+<!-- _The typechecker should help find issues in existing code_ -->
109+
110+---
111+
112+# The goal
113+
114+1. Develop a static type system for the existing Nix expression language
115+2. Develop a type checker for this static type system
116+
117+---
118+
119+# Existing typecheckers
120+
121+- github.com/regnat/ptyx – Abandoned and incomplete.
122+- github.com/regnat/tix – An older version of ptyx. Abandoned, terribly incomplete.
123+- github.com/haskell-nix/hnix – has a module with a type checker. Is very experimental and is not used.
124+
125+---
126+
127+# Existing approaches
128+
129+Type systems for functional languages is an actively researched field.
130+
131+The Hindley–Milner type system_[1]_ is a simple, but well-studied type system for a very simple language. It is fully decidable, does not require annotations. It is the basis for many real-world type systems.
132+
133+---
134+
135+# Methods and algorithms
136+
137+The developed type system is heavily influenced by the Hindley–Milner_[1]_ type system.
138+
139+
140+---
141+
142+# Methods and algorithms
143+
144+The developed type system supports parametric polymorphism to support code that does not require a specific type.
145+
146+```nix
147+x: y: x ++ y
148+```
149+
150+```
151+∀ α. [α] -> [α] -> [α]
152+```
153+
154+---
155+
156+# Methods and algorithms
157+
158+The developed type system implements row polymorphism to work with attribute sets.
159+
160+```nix
161+x: x.v + 69
162+```
163+
164+```
165+∀ α. (α.v = Number) => α -> Number
166+```
167+
168+<br />
169+
170+```nix
171+x: x // {v = "hello";}
172+```
173+
174+```
175+∀ α β. (α // {v = String;} ~ β) => α -> β
176+```
177+
178+---
179+
180+[.build-lists: false]
181+
182+# Used tools
183+
184+1. Haskell
185+2. Visual Studio Code
186+3. Haskell Language Server
187+4. Haskell Stack
188+
189+---
190+
191+# Implementation
192+
193+The typechecker is implemented in a two-step architecture:
194+
195+1. Inferring the types of terms and collecting constraints
196+2. Solving the collected constraints
197+
198+---
199+
200+# Results
201+
202+- Theoretical
203+ - A static type system for the Nix Expression Language
204+
205+- Practical
206+
207+ - A typechecker executable that successfully typechecks _most_ of the selected files from _nixpkgs_.
208+
209+ - The typechecker supports all language constructs.
210+
211+![.right .fit](img/ter.png)
212+
213+---
214+
215+# Potential future developments
216+
217+- Add support for user-supplied type annotations.
218+- Type holes
219+- Language Server Integration
220+- Better type rendering
221+- Sum types
222+
223+---
224+
225+[.build-lists: false]
226+[.text: text-scale(0.7)]
227+
228+# References
229+
230+1. L. Damas and R. Milner, “Principal type-schemes for functional pro- grams,” in Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages, 1982, pp. 207–212.
231+2. E. Dolstra and A. Loh, “Nixos: A purely functional linux distribution,” in Proceedings of the 13th ACM SIGPLAN international conference on Functional programming, 2008, pp. 367–378.
232+3. J. G. Morris and J. McKinna, “Abstracting extensible data types: or, rows by any other name,” Proceedings of the ACM on Programming Languages, vol. 3, no. POPL, pp. 1–28, 2019.
233+4. D. Leijen, “Extensible records with scoped labels.” Trends in Functional Programming, vol. 6, pp. 179–194, 2005.
234+
235+---
236+
237+# Demonstration
238+
239+---
240+
241+## Parametric polymorphism
242+
243+```nix
244+let f = x: y: { a = x; b = y + 1;}; in f
245+```
246+
247+```
248+∀ α. α -> Integer -> {a = α; b = Integer;}
249+```
250+
251+---
252+
253+## Parametric polymorphism
254+
255+```nix
256+let f = x: y: { a = x; b = y + 1;}; in f
257+```
258+
259+```
260+∀ α. α -> Integer -> {a = α; b = Integer;}
261+```
262+
263+<br>
264+
265+```nix
266+let f = x: y: { a = x; b = y + 1;}; in f "hello" 42
267+```
268+
269+```
270+{a = String; b = Integer;}
271+```
272+
273+---
274+
275+## Row-polymorphism with _attribute sets_
276+
277+```nix
278+let f = x: x.a; in f
279+```
280+
281+```
282+∀ α β. (α.a = β) => α -> β
283+```
284+
285+---
286+
287+
288+
289+## Row-polymorphism with _attribute sets_
290+
291+```nix
292+let f = x: x.a; in f
293+```
294+
295+```
296+∀ α β. (α.a = β) => α -> β
297+```
298+
299+<br>
300+
301+```nix
302+let f = x: x.a; in f {a = 1; b = "hello";}
303+```
304+
305+```
306+Integer
307+```
308+
309+---
310+
311+## Row-polymorphism with _attribute sets_
312+
313+```nix
314+let f = x: x.a; in f
315+```
316+
317+```
318+∀ α β. (α.a = β) => α -> β
319+```
320+
321+<br>
322+
323+```nix
324+let f = x: x.a; in f {a = "1"; b = "hello";}
325+```
326+
327+```
328+String
329+```
330+
331+---
332+
333+## Row-polymorphism with _attribute sets_
334+
335+```nix
336+let f = x: x.a; in f
337+```
338+
339+```
340+∀ α β. (α.a = β) => α -> β
341+```
342+
343+<br>
344+
345+```nix
346+let f = x: x.a; in f {b = "hello";}
347+```
348+
349+```
350+Error: key "a" not present in { b = String; }
351+```
352+
353+---
354+
355+## Row-polymorphism with _attribute sets_
356+
357+```nix
358+let f = x: x // {a = 69;}; in f
359+```
360+
361+```
362+∀ α β. (α // {a = Integer;} ~ β) => α -> β
363+```
364+
365+---
366+
367+## Row-polymorphism with _attribute sets_
368+
369+```nix
370+let f = x: x // {a = 69;}; in f
371+```
372+
373+```
374+∀ α β. (α // {a = Integer;} ~ β) => α -> β
375+```
376+
377+<br>
378+
379+```nix
380+let f = x: x // {a = 69;}; in f {a = "hello"; b = "world";}
381+```
382+
383+```
384+{a = Integer; b = String;}
385+```
386+
387+---
388+
389+## Row-polymorphism with _attribute sets_
390+
391+```nix
392+let f = x: x // {a = 69;}; in f
393+```
394+
395+```
396+∀ α β. (α // {a = Integer;} ~ β) => α -> β
397+```
398+
399+<br>
400+
401+```nix
402+let f = x: x // {a = 69;}; in f {}
403+```
404+
405+```
406+{a = Integer;}
407+```
docs/pres_2/pres.pdfnew file

Binary file not shown.

docs/project_proposal.texnew file+131
@@ -0,0 +1,131 @@
1+\documentclass[a4paper,conference]{IEEEtran}
2+
3+\usepackage{xcolor}
4+\usepackage[hidelinks]{hyperref}
5+\usepackage{url}
6+\usepackage[main=english]{babel}
7+% \usepackage[T1]{fontenc}
8+% \usepackage[utf8]{inputenc} %support umlauts in the input
9+
10+\title{Language Server for the Nix Expression Language}
11+
12+\author{
13+ \IEEEauthorblockN{Kostyuchenko Ilya}
14+ \IEEEauthorblockA{
15+ Faculty of Computer Science,\\
16+ Higher School of Economics,\\
17+ Moscow, Russia
18+ }
19+}
20+
21+\begin{document}
22+\maketitle
23+
24+\begin{abstract}
25+ Configuring and building even the most straightforward software projects is often not simple -- it requires downloading and installing copious amounts of prerequisite software. This often makes reproducing builds of a project on different machines problematic. The Nix package manager aims to address this problem by providing a unified language for describing software packages in a purely functional way. This language is called the Nix Expression Language. Since all of the complexity of software configuration needs to be expressed in the Nix Expression Language, the expressions themselves often become quite complicated, making it difficult to understand and extend existing expressions without introducing errors. A widespread tool for easing the understandability and correctness of expressions in other languages is static type checking. This paper will explore the techniques that can be used to add static type checking to the Nix Expression Language. We will also investigate making development even more comfortable with the help of the Language Server Protocol.
26+\end{abstract}
27+
28+\begin{IEEEkeywords}
29+ programming languages, type systems, type inference, language server protocol, Nix Expression Language, build systems
30+\end{IEEEkeywords}
31+
32+\section{Introduction}
33+
34+Today developing software is riddled with large amounts of complexity -- newer software is built on top of older software, dragging the whole stack below as dependencies. As a result, building software requires a large number of dependencies to be preinstalled. Modern build systems like Gradle\footnote{\url{https://gradle.org}}, Maven\footnote{\url{https://maven.apache.org}}, and Stack\footnote{\url{https://docs.haskellstack.org/en/stable/README/}} try to mitigate the issue by automatically downloading and installing the required dependencies. However, in most cases, such tools can only manage language-level dependencies, requiring the user to install additional libraries and tools manually.
35+
36+Such manual dependency management leads to several problems. Firstly, when a user wants to work on a project he has not encountered before, he will have to install the required dependencies, leading to additional tedious work. Furthermore, the required versions of project dependencies might conflict with the versions that another project requires. The user will have to manually switch the versions of executables and libraries when switching between projects.
37+
38+Secondly, manual dependency management impedes the reproducibility of the project builds -- building the same project on multiple machines will, in all likelihood, produce different results since the machines will likely differ in many ways that impact the build, such as having slightly different versions\footnote{``Version'' here refers to actual variations on the bit level, and not just version numbers.} of libraries and executables.
39+
40+Nix~\cite{dolstra2008nixos} attempts to solve the problems mentioned above by describing software project builds in a generic and language-agnostic way. Furthermore, the resulting descriptions define the build process in a complete and deterministic way -- everything that impacts the build in any way needs to be explicitly defined, even system-level libraries are reproducible on the bit level.
41+
42+Defining the build process in such a detailed manner is not easy. While most build systems define project builds with static configurations using formats such as YAML~\cite{ben2009yaml}, Nix employs a fully-fledged programming language as its configuration language. This programming language is called the Nix Expression Language\footnote{\url{https://nixos.wiki/wiki/Nix_Expression_Language}}.
43+
44+\section{Nix Expression Language}
45+
46+Nix Expression Language is a dynamic, lazy, purely functional programming language. The purely functional nature of the language aids in build reproducibility guarantees that Nix aims to provide.
47+
48+The fact that the Nix configuration language is a programming language certainly helps manage the complexities\footnote{The sheer amount of configuration required is itself large enough to be problematic.} defining \emph{everything} involved in building a software project. Even so, the dynamic nature of the language often makes it challenging to understand and reuse existing code.
49+
50+Refactoring existing code is also tricky since the generated expressions are only really checked for correctness\footnote{Here, ``correctness'' is used to mean the absence of evaluation-time errors.} at their evaluation time, and the evaluation time of expressions is difficult to predict due to the lazy nature of the language.
51+
52+\section{Static type checking}
53+
54+Static type checking is the process of analyzing the types of expressions and detecting type errors in programs without evaluating them.
55+
56+Even though static type checking in most mainstream programming languages does not influence the semantics of the programs, it is nonetheless widely used. This is an indication of the usefulness of static type checking during development. Type checking helps detect likely ``incorrect'' programs without evaluating them (very helpful during refactoring), and aids in understanding existing code since types often expose some semantics of expressions (this is especially true for purely functional programs).
57+
58+The Nix Expression Language does not currently support static type checking of any kind. Of course, retrofitting a static type checker onto an existing dynamic programming language will reject programs that will not produce errors at runtime. However, this is still a goal worth pursuing because even with all of the situations when the type checker produces false negatives, inferring types for existing expressions, as mentioned above, will aid in understanding existing code and surface potentially problematic areas of code to the developer.
59+
60+\section{Type System Approach}
61+
62+There has been much research done in the field of type systems for functional programming languages. The most notable contribution was the introduction of the Damas-Milner\footnote{The Damas-Milner type system is sometimes referred to as the Hindley–Milner type system.} type system and the W inference algorithm~\cite{damas1982principal}, which was later proven to be sound and complete~\cite{vaughanproof}.
63+
64+The Damas-Milner type system is a type system for lambda calculus with parametric polymorphism. The most notable property of the Damas-Milner type system is the proven ability of the W algorithm to infer the most general types without any user-provided type annotations.
65+
66+While the Damas-Milner describes a simple language, it is robust enough to be used as the basis for more advanced type systems such as the one used in the Haskell programming language~\cite{jones1999typing}, which extends the Damas-Milner type system in many ways which break the excellent properties it provides but remains extremely useful in practice.
67+
68+Since the Nix Expression Language is a relatively simple functional programming language, extending the Damas-Milner type system and algorithms to fit the language will be the approach we take as the tried and true method.
69+
70+\section{Type Checker Error Handling}
71+
72+Due to the inevitable presence of false negatives during type checking, for the type checker to be useful enough to be worth implementing, the algorithm should gracefully recover after encountering expressions that it deems to be ``wrong''.
73+
74+Since the interpreter of the programs will not be related to the developed type checker in any way, the type checker can not influence the semantics of the programs. This fact can be used to implement the following failure recovery heuristic: when the type checker encounters an expression that yields type checking errors, the errors are collected to be displayed to the user, and the expression is given the least general type possible such that it does not yield type errors.
75+
76+This is, in general, always possible since any syntactically valid expression will be correct with respect to types if every subexpression is assigned the polymorphic type:
77+
78+\begin{equation}
79+ \forall \alpha. \alpha
80+\end{equation}
81+
82+In some cases, this approach will likely yield too little information to be useful, but it seems like a reasonable solution.
83+
84+\section{Improving Type Checker Error Reporting}
85+
86+The original W inference algorithm is a single-stage inference algorithm, meaning that it attempts to satisfy type constraints as soon as it encounters them. A consequence of this is that errors are reported as soon as they are encountered. Often, the information available about the program at the time the error had occurred is very limited due to not all of the program being processed. This leads to poor error reporting.
87+
88+In contrast to the single-stage algorithm, the two-stage algorithm~\cite{jones2005practical,serrano2016type} collects the type constraints as the first stage of type checking and solves the collected constraints as a second step. This leads to most errors occurring during the second stage when all available type information has already been collected. As a result, better type errors are produced. This is the preferable approach for our goals.
89+
90+\section{Row-Polymorphism}
91+
92+One of the language-level constructs in the Nix Expression Language is the ``attribute set'' which can be thought of as a first-class hashmap with strings as keys. In combination with the dynamic nature of the language, these ``attribute sets'' have the semantics of row-polymorphic records.
93+
94+There has been some research conducted in the field of type systems with row-polymorphic records~\cite{morris2019abstracting,leijen2005extensible}. The approach that should be taken in developing a static type checker for the Nix Expression Language is describing row-polymorphic attribute sets with a construct similar\footnote{The way it should be displayed to the user will be distinct, since, unlike in Haskell, the Nix Expression Language does not have constraints as a language construct.} to Haskell constraints~\cite{orchard2010haskell}.
95+
96+\section{Message Reporting}
97+
98+Displaying errors to the user is not as simple as it might initially seem. For the type checker to be as helpful as possible, error messages should display the encountered issues in the language contexts in which they had occurred. Ideally, the errors should point to the exact terms that are most likely problematic.
99+
100+Even if all of the information necessary for detailed error messages is collected during type checking, displaying errors to the user is a problem that deserves its own research\footnote{This also relates to how types are laid out when displaying to the user even when no errors have occurred.}. The users might have different screen sizes. The error message should reflow all of the displayed text, code, and type annotations to accommodate the available space.
101+
102+Hughes introduced a general-purpose algebraic pretty-printer~\cite{hughes1995design}, which was later improved upon~\cite{wadler2003prettier}, to solve precisely this problem. Using one of the pretty-printers based on that research is the industry standard and will be used by our type checker.
103+
104+\section{Language Server Architecture}
105+
106+A Language Server is a server providing language-specific code analysis. It communicates with various code editors using the Language Server Protocol\footnote{\url{https://microsoft.github.io/language-server-protocol/}}.
107+
108+Language Servers have received wide adoption across a large variety of programming languages. Integrating the developed type checker into a Language Server with ``go-to-definition'' and ``show types on hover'' support would significantly improve the experience of developing in the Nix Expression Language.
109+
110+One of the actively developed language servers is the Haskell Language Server\footnote{\url{https://github.com/haskell/haskell-language-server}}. To manage the complexities of tracking changes in files and dependencies between them, the Haskell Language Server employs the Shake library~\cite{mitchell2012shake}. It is described as an alternative to Make\footnote{\url{https://www.gnu.org/software/make/}} embedded as a DSL into Haskell with the ability to dynamically update the dependency tree, among other improvements.
111+
112+As it is already tested as the basis for a Language Server implementation, building our Language Server on top of the Shake library seems like the correct architectural decision.
113+
114+\section{Conclusion}
115+
116+Nix is a rapidly growing ecosystem. At the time of writing, nixpkgs, the Nix package registry, contains over 60000 packages\footnote{\url{https://github.com/NixOS/nixpkgs}} that can be either installed or used as dependencies in other projects. There is much interest in the approach used by Nix, and making the ever-growing codebase of configurations easier to manage and extend would be a welcome development.
117+
118+Even though the developed type checker will need to check code for an existing dynamic language, and no type checker can cover all of the valid cases, producing false negatives, covering most of the cases encountered in practice would be useful enough to be worth using. Furthermore, plenty of research has already been conducted on which the Nix Expression Language type checker can be based.
119+
120+Integrating the type checker into a Language Server would provide additional utility and afford the ability to implement additional features, such as ``go-to-definition'' in a practical way.
121+
122+
123+\bibliographystyle{IEEEtran}
124+\bibliography{bibl}
125+
126+\begin{flushright}
127+ \vspace{1cm}
128+ \fbox{\textsc{\textsf{\textbf{\large word count: 1593}}}}
129+\end{flushright}
130+
131+\end{document}
docs/tech_spec.texnew file+252
@@ -0,0 +1,252 @@
1+\documentclass[12pt]{article}
2+
3+\usepackage{xcolor}
4+\usepackage[hidelinks]{hyperref}
5+
6+\newcommand{\todo}{\addcontentsline{toc}{subsection}{{\color{red}\textbf{TODO}}}{\LARGE\color{red}\textbf{TODO}}}
7+
8+\newcounter{req}
9+
10+\newcommand{\req}[1][]{\refstepcounter{req}\label{req:#1}\paragraph{\fbox{\textsf{\textsc{REQ}-\thereq}}}}
11+\newcommand{\refreq}[1]{\hyperref[req:#1]{\fbox{\textsf{REQ-\ref*{req:#1}}}}}
12+
13+\title{Technical Specification for the Static Analyzer for the Nix Expression Language}
14+\author{Kostyuchenko Ilya}
15+\date{}
16+
17+\begin{document}
18+
19+\maketitle
20+
21+\newpage
22+
23+\tableofcontents
24+
25+\newpage
26+
27+\section{Purpose}
28+
29+The purpose of the \emph{Static analyzer for the Nix Expression Language} (later referred to as \emph{Tix} for brevity) is to simplify development in the Nix expression language.
30+
31+\section{Scope}
32+
33+The project consists of developing the following components:
34+
35+\paragraph{The Tix type checker} is a program which is designed to statically analyze the given Nix expression language source code and deduce the types of subexpressions used within while detecting some errors made by the programmer (type mismatch errors, which usually arise due to programming mistakes).
36+
37+\section{Product perspective}
38+
39+\subsection{System interfaces}
40+
41+The application runs on the latest versions of macOS and Linux.
42+
43+\subsection{User interfaces}
44+
45+The application does not provide a user interface.
46+
47+\subsection{Hardware interfaces}
48+
49+The application does not provide a hardware interface.
50+
51+\subsection{Software interfaces}
52+
53+The application allows interactions through standard UNIX input-output capabilities.
54+
55+\subsection{Communications interfaces}
56+
57+The application communicates with the user by reading input from the file system or terminal emulator, and outputting results to the standard UNIX output handle.
58+
59+\subsection{Memory}
60+
61+The memory required to run the system depends on the size of the project being processed. Typical projects should are processed within a 2 GB memory limit.
62+
63+\subsection{Operations}
64+
65+The application supports the following operations:
66+
67+\begin{enumerate}
68+ \item Typecheck the current file and report errors
69+\end{enumerate}
70+
71+\subsection{Site adaptation requirements}
72+
73+No site adaptations are required.
74+
75+\subsection{Interfaces with services}
76+
77+No interaction with services in performed.
78+
79+\section{Product functions}
80+
81+The application provides the following functionality to the user:
82+
83+\begin{enumerate}
84+ \item Checks user-supplied programs for type incompatibilities
85+ \item Reports the resulting types of user-supplied expressions
86+\end{enumerate}
87+
88+\section{User characteristics}
89+
90+The user of the application will need intermediate technical skills to set up the program. More precisely, the user will need to have basic understanding of how to use their operating system and command line.
91+
92+\section{Limitations}
93+
94+\subsection{Interface to other applications}
95+
96+Other applications can be interfaced with through standard input-output handles.
97+
98+\subsection{Criticality of the application}
99+
100+The software should not be used for critical applications as it is not capable of eliminating all runtime errors, or even eliminating all runtime type errors due to the dynamic nature of the underlying Nix expression language\footnote{Type systems inherently restrict some valid programs, and some expressions might not be well-typed, but execute without errors.}.
101+
102+\section{Assumptions and dependencies}
103+
104+The contents of this document assume the following:
105+
106+\begin{enumerate}
107+ \item The application will be used on a UNIX-like system that is supported by the Glasgow Haskell Compiler.
108+ \item All dependencies of the files being processed should be locally downloaded by Nix.
109+\end{enumerate}
110+
111+\section{Apportioning of requirements}
112+
113+The application is a self-contained executable file that, when executed, functions as a typechecker.
114+
115+\section{Specified requirements}
116+
117+\req[restrictons] The system should perform all static program analysis (instances of such analysis link to this requirement) under the following conditions:
118+\begin{enumerate}
119+ \item it is possible to perform analysis without (partially) evaluating expressions
120+ \item all input data linked to from the expressions being analyzed is locally downloaded by Nix
121+\end{enumerate}
122+
123+\req[typechecking] The system should perform type checking for expression where under conditions from \refreq{restrictons}.
124+
125+\req The system should analyze the types and presence of attributes in attribute sets under conditions from \refreq{restrictons}.
126+
127+\req The system should report encountered typechecking errors.
128+
129+\req The system should report the use of undefined terms through means defined by the Language Server Protocol under conditions from \refreq{restrictons}.
130+
131+\section{Usability requirements}
132+
133+\req The system should be able to process expressions from the nixpkgs repository.
134+
135+\req The system should never fail in unrecoverable ways in external imported expressions – if there are type errors in external code the system should resolve the errors automatically.
136+
137+\section{Performance requirements}
138+
139+\req The system should process incoming requests within 1 minute.
140+
141+\section{External interfaces}
142+
143+The only external interfaces of the system are standard input-output handles.
144+
145+\paragraph{The purpose} of this interface is to provide easy way to provide programs to typecheck as inputs.
146+
147+\section{Functions}
148+
149+The fundamental functions of the system are queries: get the type of an expression.
150+
151+\subsection{Generating the type of an expression}
152+
153+\begin{enumerate}
154+ \item the system queries the expression at the requested position in the source code from the \emph{analysis context}
155+ \item the system queries the type of the expression from the \emph{analysis context}
156+ \item the system returns the type
157+\end{enumerate}
158+
159+\subsection{Generating the definition of a variable}
160+
161+\begin{enumerate}
162+ \item the system queries the expression at the requested position in the source code from the \emph{analysis context}
163+ \item the system asserts that the expression is a variable reference
164+ \item the system queries the definition of the given variable reference from the \emph{analysis context}
165+ \item the system returns the definition
166+\end{enumerate}
167+
168+\subsection{Generating completions}
169+
170+\begin{enumerate}
171+ \item the system queries the variables in scope at the requested position in the source code from the \emph{analysis context}
172+ \item the system formulates a list of possible completions
173+ \item the system filters the list of possible completions based on the prefix already typed by the user
174+ \item the system returns the list of filtered possible completions
175+\end{enumerate}
176+
177+\subsection{Generating the analysis context}
178+
179+\begin{enumerate}
180+ \item the current file is parsed
181+ \item dependencies are gathered from the current file and the analysis context is recursively generated for all dependencies
182+ \item the current file is typechecked
183+ \begin{enumerate}
184+ \item type constraints are recursively generated for all subexpressions
185+ \item encountered variable definitions are gathered
186+ \item encountered variable references are gathered
187+ \item undefined variable definitions are gathered
188+ \item type constraints are generated for the given top-level expression
189+ \item type constraints are sequentially solved. If a typing error is encountered, the error is gathered with other errors and the problematic type is replaced with a polymorphic type to allow further typechecking
190+ \end{enumerate}
191+ \item all errors gathered during typechecking are reported to the user through means defined by the Language Server Protocol
192+ \item all analysis contexts are merged into a single analysis context
193+ \item the resulting analysis context is the returned
194+\end{enumerate}
195+
196+\subsection{Error handling}
197+
198+If the system encounters a typing error in the user's code, then the error is returned to the user.
199+
200+If the system encounters an internal (as opposed to a user error) the error is written to the standard error output.
201+
202+\section{Design constraints}
203+
204+The main design constraint is the fact that the Nix expression language is a dynamic language without an underlying static type system. This implies that there will be correct programs that will be ill-typed. The system should be designed in such a way as to gracefully handle such situations.
205+
206+\section{Software system attributes}
207+
208+\subsection{Reliability}
209+
210+\begin{enumerate}
211+ \item The system should automatically recover from any user error after the user resolves the error in code.
212+ \item The system should not enter unrecoverable states.
213+\end{enumerate}
214+
215+\subsection{Maintainability}
216+
217+The system should utilize free monad algebraic effects for managing side-effects as they improve maintainability by decoupling implementation from abstraction.
218+
219+\subsection{Portability}
220+
221+\begin{enumerate}
222+ \item The system should not contain host-dependant code
223+ \item The system should be written in the Haskell programming language which is not host-dependent
224+ \item The system should be compiled with the Glasgow Haskell Compiler as it supports a wide range of platforms
225+\end{enumerate}
226+
227+\section{Verification}
228+
229+The following approaches and methods are planned to be employed to qualify the software:
230+
231+\begin{enumerate}
232+ \item Automated hand-written unit-tests
233+ \item Manual testing
234+\end{enumerate}
235+
236+\section{Supporting information}
237+
238+\subsection{Nix}
239+
240+Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible.\footnote{Taken from \url{https://nixos.org}}.
241+
242+\subsection{Nix expression language}
243+
244+The Nix expression language is a purely functional dynamic strictly typed programming language used for configuration in the Nix package manager. It does not support defining custom types – all types are defined within the interpreter. The main purpose of the language is to produce \emph{derivation} – a description of how to build an artifact\footnote{\url{https://nixos.org/manual/nix/stable/\#ssec-derivation}}.
245+
246+\subsection{The problem to be solved}
247+
248+When working with the Nix expression language it is often the case that imported expressions (nixpkgs) are quite large, and it is not obvious what needs to be called with what arguments. It is often necessary to inspect the source code of imported files to grok how it should be used and if the current use is correct.
249+
250+This project aims to lighten the burden of development in the Nix expression language by providing some level of machine-generated introspection into the imported expressions and provide some level of verification of the correctness of the implementation.
251+
252+\end{document}
docs/trfrac.stynew file+193
@@ -0,0 +1,193 @@
1+%%
2+%% This is file `trfrac.sty',
3+%% generated with the docstrip utility.
4+%%
5+%% The original source files were:
6+%%
7+%% trfrac.dtx (with options: `file')
8+%%
9+%% This is a generated file.
10+%%
11+%% Copyright (C) 2009 by Kevin W. Hamlen
12+%%
13+%% This file may be distributed and/or modified under the conditions of
14+%% the LaTeX Project Public License, either version 1.3a of this license
15+%% or (at your option) any later version. The latest version of this
16+%% license is in:
17+%%
18+%% http://www.latex-project.org/lppl.txt
19+%%
20+%% and version 1.3a or later is part of all distributions of LaTeX version
21+%% 2004/10/01 or later.
22+%%
23+\newdimen\trtopgap\trtopgap\z@
24+\newdimen\trbotgap\trbotgap\z@
25+\newcommand\TRF@startp{31415926}
26+\newcommand\TRF@endp{27182818}
27+\newif\ifTRF@first
28+\newif\ifTRF@outer\TRF@outertrue
29+\newif\ifTRF@derivok\TRF@derivoktrue
30+\newdimen\TRF@lhang\TRF@lhang\z@
31+\newdimen\TRF@rhang\TRF@rhang\z@
32+\newdimen\TRF@lsave
33+\newdimen\TRF@ni
34+\newdimen\TRF@bi
35+\newdimen\TRF@bw
36+\newbox\TRF@numbox
37+\newbox\TRF@denombox
38+\newbox\TRF@eqbox
39+\newcommand\TRF@trfrac[3]{%
40+ \begingroup%
41+ \ifnum\lastpenalty=\TRF@startp\relax%
42+ \TRF@firsttrue%
43+ \else%
44+ \TRF@firstfalse%
45+ \fi%
46+ \TRF@lsave\TRF@lhang%
47+ \setbox\TRF@eqbox\hbox{\TRF@derivokfalse#1}%
48+ \ifdim\wd\TRF@eqbox>\z@%
49+ \setbox\TRF@eqbox\hbox{\kern\p@\unhbox\TRF@eqbox}%
50+ \fi%
51+ \TRF@lhang\z@%
52+ \setbox\TRF@numbox\hbox{%
53+ \TRF@outerfalse%
54+ \m@th$\strut%
55+ \penalty\TRF@startp\relax%
56+ #2%
57+ \ifnum\lastpenalty=\TRF@endp\relax\else%
58+ \global\TRF@rhang\z@%
59+ \fi%
60+ $%
61+ }%
62+ \setbox\TRF@denombox\hbox{%
63+ \TRF@derivokfalse%
64+ \m@th$\strut#3$%
65+ }%
66+ \dimen@\wd\TRF@numbox%
67+ \advance\dimen@-\TRF@rhang%
68+ \TRF@bw\dimen@%
69+ \advance\TRF@bw-\TRF@lhang%
70+ \ifdim\wd\TRF@denombox>\TRF@bw\TRF@bw\wd\TRF@denombox\fi%
71+ \advance\dimen@\TRF@lhang%
72+ \advance\dimen@-\wd\TRF@denombox%
73+ \TRF@ni\ifdim\dimen@>\z@\z@\else-.5\dimen@\fi%
74+ \TRF@bi\TRF@ni%
75+ \advance\TRF@bi\TRF@lhang%
76+ \TRF@lhang\ifdim\dimen@<\z@\z@\else.5\dimen@\fi%
77+ \ifdim\TRF@bi>\TRF@lhang\TRF@bi\TRF@lhang\fi%
78+ \TRF@rhang\TRF@ni%
79+ \advance\TRF@rhang\wd\TRF@numbox%
80+ \dimen@\TRF@bi%
81+ \advance\dimen@\TRF@bw%
82+ \advance\dimen@\wd\TRF@eqbox%
83+ \ifdim\dimen@>\TRF@rhang\TRF@rhang\dimen@\fi%
84+ \advance\TRF@rhang-\TRF@lhang%
85+ \advance\TRF@rhang-\wd\TRF@denombox%
86+ \global\TRF@rhang\TRF@rhang%
87+ \mathinner{%
88+ \ifTRF@outer%
89+ \raise\fontdimen22\textfont\tw@\vtop%
90+ \else%
91+ \vbox%
92+ \fi%
93+ {%
94+ \offinterlineskip%
95+ \hbox{%
96+ \vbox{%
97+ \dimen@\fontdimen8\textfont\tw@%
98+ \advance\dimen@-\fontdimen22\textfont\tw@%
99+ \advance\dimen@-.5\fontdimen8\textfont\thr@@%
100+ \advance\dimen@-\dp\TRF@numbox%
101+ \ifdim\dimen@<3\fontdimen8\textfont\thr@@%
102+ \dimen@3\fontdimen8\textfont\thr@@%
103+ \fi%
104+ \advance\dimen@\trtopgap%
105+ \hbox{\kern\TRF@ni\unhbox\TRF@numbox}%
106+ \kern\dimen@%
107+ \hbox{%
108+ \kern\TRF@bi%
109+ \vrule\@width\TRF@bw%
110+ \@height.5\fontdimen8\textfont\thr@@%
111+ \@depth.5\fontdimen8\textfont\thr@@%
112+ \vbox{%
113+ \dimen@.5\ht\TRF@eqbox%
114+ \advance\dimen@.5\dp\TRF@eqbox%
115+ \kern-\dimen@%
116+ \box\TRF@eqbox%
117+ \kern-\dimen@%
118+ }%
119+ }%
120+ }%
121+ }%
122+ \dimen@\fontdimen11\textfont\tw@%
123+ \advance\dimen@\fontdimen22\textfont\tw@%
124+ \advance\dimen@-.5\fontdimen8\textfont\thr@@%
125+ \advance\dimen@-\ht\TRF@denombox%
126+ \ifdim\dimen@<3\fontdimen8\textfont\thr@@%
127+ \dimen@3\fontdimen8\textfont\thr@@%
128+ \fi%
129+ \advance\dimen@\trbotgap%
130+ \kern\dimen@%
131+ \hbox{\kern\TRF@lhang\box\TRF@denombox}%
132+ }%
133+ }%
134+ \ifTRF@outer\else%
135+ \penalty\TRF@endp\relax%
136+ \fi%
137+ \global\TRF@lhang\ifTRF@first\TRF@lhang\else\TRF@lsave\fi%
138+ \endgroup%
139+}
140+\newcommand\trfrac[3][]{%
141+ \ifTRF@derivok%
142+ \ifmmode%
143+ \TRF@trfrac{#1}{#2}{#3}%
144+ \else%
145+ \TRF@mmerr%
146+ \fi%
147+ \else%
148+ \TRF@derr%
149+ \fi%
150+}
151+\newcommand\TRF@mmerr{%
152+ \PackageError{trfrac}{\protect\trfrac\space%
153+ only allowed in math mode}%
154+ {I encountered a \protect\trfrac\space%
155+ macro without first encountering a begin-math token.}%
156+}
157+\newcommand\TRF@derr{%
158+ \PackageError{trfrac}{\protect\trfrac\space%
159+ not allowed in the consequent of another \protect\trfrac}%
160+ {\protect\trfrac\space can only appear in the premise (numerator%
161+ ) of another \protect\trfrac, not in the consequent (denominator%
162+ ) of a \protect\trfrac.}%
163+}
164+\newcommand\TRF@next{}
165+\newcommand\TRF@sep{\futurelet\TRF@next\TRF@@sep}
166+\newcommand\TRF@@sep{%
167+ \ifx[\TRF@next%
168+ \let\TRF@next\TRF@separg%
169+ \else%
170+ \let\TRF@next\TRF@sepnoarg%
171+ \fi%
172+ \TRF@next%
173+}
174+\newcommand\TRF@separg{}
175+\def\TRF@separg[#1]{\cr\noalign{\kern#1}}
176+\newcommand\TRF@sepnoarg{\cr}
177+\newenvironment{trgather}{%
178+ \vbox\bgroup%
179+ \let\\\TRF@sep%
180+ \ialign\bgroup\hfil{\m@th$##$}\hfil\cr%
181+}{%
182+ \crcr\egroup\egroup%
183+}
184+\newenvironment{tralign}{%
185+ \vbox\bgroup%
186+ \let\\\TRF@sep%
187+ \ialign\bgroup\hfil{\m@th$##\null$}&{\m@th$\null##$}\hfil\cr%
188+}{%
189+ \crcr\egroup\egroup%
190+}
191+\endinput
192+%%
193+%% End of file `trfrac.sty'.
package.yaml+35−2
@@ -28,6 +28,20 @@ dependencies:
2828 - lens
2929 - data-fix
3030 - mono-traversable
31+ - acts
32+ - groups
33+ - yaml
34+ - aeson
35+ - vector
36+ - unordered-containers
37+ - bytestring
38+ - prettyprinter
39+ - range-set-list
40+ - generic-data
41+ - generic-lens
42+ - free
43+ - algebraic-graphs
44+
3145library:
3246 source-dirs: src
3347
@@ -44,14 +58,17 @@ executables:
4458
4559tests:
4660 tix-test:
47− main: Spec.hs
48− source-dirs: test
61+ main: Main.hs
62+ source-dirs: test/src
4963 ghc-options:
5064 - -threaded
5165 - -rtsopts
5266 - -with-rtsopts=-N
5367 dependencies:
5468 - tix
69+ - tasty
70+ - tasty-golden
71+ - filepath
5572
5673default-extensions:
5774 - GADTs
@@ -70,3 +87,19 @@ default-extensions:
7087 - PatternSynonyms
7188 - ViewPatterns
7289 - KindSignatures
90+ - MultiParamTypeClasses
91+ - TupleSections
92+ - EmptyDataDeriving
93+ - EmptyCase
94+ - OverloadedLists
95+ - StandaloneDeriving
96+ - DeriveGeneric
97+ - DerivingVia
98+ - RecordWildCards
99+ - FunctionalDependencies
100+ - DeriveDataTypeable
101+ - TypeFamilies
102+ - FlexibleInstances
103+ - DeriveAnyClass
104+ - ConstraintKinds
105+ - DeriveTraversable
paper.pdfnew file

Binary file not shown.

src/Control/Monad/Freer/Fresh.hsnew file+53
@@ -0,0 +1,53 @@
1+module Control.Monad.Freer.Fresh
2+ ( Fresh (..),
3+ fresh,
4+ freshSub,
5+ runFresh,
6+ registerTypeVariables,
7+ )
8+where
9+
10+import Control.Monad.Freer
11+import Control.Monad.Freer.State
12+import qualified Data.RangeSet.Map as RS
13+import Tix.Types
14+
15+data Fresh x where
16+ Fresh :: Fresh TypeVariable
17+ FreshSub :: TypeVariable -> Fresh TypeVariable
18+ -- | Inclusive
19+ MinFreshFromNow :: Fresh RangeTypeVariable
20+
21+fresh :: Member Fresh eff => Eff eff TypeVariable
22+fresh = send Fresh
23+{-# INLINE fresh #-}
24+
25+freshSub :: Member Fresh eff => TypeVariable -> Eff eff TypeVariable
26+freshSub = send . FreshSub
27+{-# INLINE freshSub #-}
28+
29+type Runner effect = forall effs a. Eff (effect ': effs) a -> Eff effs a
30+
31+runFresh :: Runner Fresh
32+runFresh =
33+ evalState (RangeTypeVariable 0)
34+ . reinterpret
35+ ( \case
36+ Fresh -> do
37+ (RangeTypeVariable x) <- get
38+ put (RangeTypeVariable $ x + 1)
39+ return (TypeVariable x)
40+ FreshSub tv -> do
41+ (RangeTypeVariable x) <- get
42+ put (RangeTypeVariable $ x + 1)
43+ return (SubTypeVariable (unRangeTypeVariable $ rangeTypeVariable tv) x)
44+ MinFreshFromNow -> get
45+ )
46+{-# INLINE runFresh #-}
47+
48+registerTypeVariables :: Member Fresh r => Eff r a -> Eff r (a, RS.RSet RangeTypeVariable)
49+registerTypeVariables m = do
50+ l <- send MinFreshFromNow
51+ a <- m
52+ r <- send MinFreshFromNow
53+ return (a, RS.singletonRange (l, pred r))
src/Control/Monad/Freer/TreeTracer.hsnew file+38
@@ -0,0 +1,38 @@
1+module Control.Monad.Freer.TreeTracer
2+ ( TreeTracer (..),
3+ traceValue,
4+ traceSubtree,
5+ runTreeTracer,
6+ runNoTreeTracer,
7+ )
8+where
9+
10+import Control.Monad.Freer
11+import Control.Monad.Freer.Internal (handleRelayS)
12+import qualified Data.Aeson as A
13+import qualified Data.HashMap.Strict as HM
14+import Data.Text (Text)
15+import qualified Data.Vector as V
16+
17+data TreeTracer a where
18+ TraceTree :: A.Object -> TreeTracer ()
19+
20+traceValue :: (A.ToJSON v, Member TreeTracer eff) => Text -> v -> Eff eff ()
21+traceValue k v = send $ TraceTree $ k A..= v
22+
23+traceSubtree :: Member TreeTracer eff => Text -> Eff eff a -> Eff eff a
24+traceSubtree k = interpose (\(TraceTree o) -> send $ TraceTree (k A..= o))
25+
26+runTreeTracer :: Eff (TreeTracer ': eff) a -> Eff eff (a, A.Object)
27+runTreeTracer = handleRelayS HM.empty (\s x -> pure (x, s)) $ \s (TraceTree o) k ->
28+ k (HM.unionWith unionToList s o) ()
29+ where
30+ unionToList :: A.Value -> A.Value -> A.Value
31+ unionToList (A.Array x) (A.Array y) = A.Array $ x <> y
32+ unionToList (A.Array x) y = A.Array $ V.snoc x y
33+ unionToList x (A.Array y) = A.Array $ V.cons x y
34+ unionToList (A.Object x) (A.Object y) = A.Object $ HM.unionWith unionToList x y
35+ unionToList x y = A.Array $ V.fromList [x, y]
36+
37+runNoTreeTracer :: Eff (TreeTracer ': eff) a -> Eff eff a
38+runNoTreeTracer = interpret (\(TraceTree _) -> return ())
src/Data/Map/Extra.hsnew file+13
@@ -0,0 +1,13 @@
1+module Data.Map.Extra
2+ ( restrictKeysToRange,
3+ )
4+where
5+
6+import qualified Data.Map as M
7+import Data.Map.Strict (Map)
8+import qualified Data.RangeSet.Map as RS
9+
10+restrictKeysToRange :: Ord k => RS.RSet k -> Map k v -> Map k v
11+restrictKeysToRange range =
12+ M.takeWhileAntitone (`RS.member` range)
13+ . M.dropWhileAntitone (`RS.notMember` range)
src/Data/Map/MultiKey/Strict.hsnew file+105
@@ -0,0 +1,105 @@
1+module Data.Map.MultiKey.Strict
2+ ( Keyable (..),
3+ Map (..),
4+ singleton,
5+ delete,
6+ lookup,
7+ lookupEmpty,
8+ insert,
9+ partition,
10+ fromList,
11+ toList,
12+ elems,
13+ keys,
14+ map,
15+ toMap,
16+ )
17+where
18+
19+import Control.Monad
20+import Data.Bifunctor
21+import Data.Foldable (fold)
22+import Data.Kind
23+import qualified Data.Map.Strict as M
24+import Data.Maybe
25+import Data.Monoid
26+import qualified Data.Set as S
27+import Prelude hiding (lookup, map)
28+
29+class (Ord (Key t), Ord t) => Keyable t where
30+ type Key t :: Type
31+ getKeys :: t -> [Key t]
32+
33+data Map t = Map (M.Map (Key t) (S.Set t)) (S.Set t)
34+
35+instance (Ord (Key t), Ord t) => Semigroup (Map t) where
36+ (Map x x') <> (Map y y') = Map (M.unionWith S.union x y) (x' <> y')
37+
38+instance (Ord (Key t), Ord t) => Monoid (Map t) where
39+ mempty = Map M.empty S.empty
40+
41+map :: (Keyable h, Ord t) => (t -> h) -> Map t -> Map h
42+map f = fromList . fmap f . toList
43+
44+deriving stock instance (Show (Key t), Show t) => Show (Map t)
45+
46+singleton :: Keyable t => t -> Map t
47+singleton t = case getKeys t of
48+ [] -> Map M.empty (S.singleton t)
49+ ks@(_ : _) -> Map (M.fromList $ fmap (,s) ks) S.empty
50+ where
51+ s = S.singleton t
52+
53+insert :: Keyable t => t -> Map t -> Map t
54+insert t m = m <> singleton t
55+
56+lookup :: Keyable t => Key t -> Map t -> S.Set t
57+lookup k (Map m _) = fromMaybe S.empty $ M.lookup k m
58+
59+lookupEmpty :: Map t -> S.Set t
60+lookupEmpty (Map _ s) = s
61+
62+fromList :: Keyable t => [t] -> Map t
63+fromList = foldMap singleton
64+
65+elems :: Ord t => Map t -> S.Set t
66+elems (Map m s) = (fold . M.elems $ m) <> s
67+
68+toList :: Ord t => Map t -> [t]
69+toList = S.toList . elems
70+
71+keys :: Map t -> S.Set (Key t)
72+keys (Map m _) = M.keysSet m
73+
74+toMap :: Ord (Key t) => Map t -> M.Map (Maybe (Key t)) (S.Set t)
75+toMap (Map m s) = M.insert Nothing s $ M.mapKeysMonotonic Just m
76+
77+delete :: Keyable t => t -> Map t -> Map t
78+delete t (Map m empties) = Map (f m) (S.delete t empties)
79+ where
80+ s = S.singleton t
81+ f =
82+ appEndo $
83+ foldMap
84+ ( Endo
85+ . M.update
86+ (\s' -> if s == s then Nothing else Just (S.delete t s'))
87+ )
88+ (getKeys t)
89+
90+partition :: Keyable t => (Key t -> Bool) -> Map t -> (Map t, Map t)
91+partition predicate (Map m empties) = (Map keep' empties, Map toss S.empty <> Map toss' S.empty)
92+ where
93+ (keep, toss) = M.partitionWithKey (\k _ -> predicate k) m
94+ (keep', toss') =
95+ join bimap M.fromAscList
96+ . p (join bimap nothingNull . S.partition (all predicate . getKeys))
97+ . M.toAscList
98+ $ keep
99+ p :: (v -> (Maybe v, Maybe v)) -> [(k, v)] -> ([(k, v)], [(k, v)])
100+ p _ [] = ([], [])
101+ p f ((k, x) : xs) = join bimap (maybe id ((:) . (k,))) (f x) `apBoth` p f xs
102+ apBoth :: (a -> b, x -> y) -> (a, x) -> (b, y)
103+ apBoth (f, g) (a, x) = (f a, g x)
104+ nothingNull :: S.Set x -> Maybe (S.Set x)
105+ nothingNull s = if S.null s then Nothing else Just s
src/Data/Map/Shifted/Strict.hsnew file+39
@@ -0,0 +1,39 @@
1+module Data.Map.Shifted.Strict
2+ ( ShiftedMap (..),
3+ Data.Map.Shifted.Strict.lookup,
4+ insert,
5+ shift,
6+ liftMap,
7+ unshift,
8+ )
9+where
10+
11+import Data.Act
12+import Data.Group
13+import Data.Map.Strict (Map)
14+import qualified Data.Map.Strict as M
15+
16+data ShiftedMap d k v = ShiftedMap d (Map k v)
17+ deriving stock (Eq, Ord, Show)
18+
19+instance (Act d v, Group d, Ord k) => Semigroup (ShiftedMap d k v) where
20+ (ShiftedMap d m) <> (ShiftedMap d' m') =
21+ ShiftedMap d $ m <> (act (invert d <> d') <$> m')
22+
23+instance (Monoid d, Semigroup (ShiftedMap d k v)) => Monoid (ShiftedMap d k v) where
24+ mempty = ShiftedMap mempty M.empty
25+
26+lookup :: (Ord k, Act d v) => k -> ShiftedMap d k v -> Maybe v
27+lookup k (ShiftedMap d m) = act d <$> M.lookup k m
28+
29+insert :: (Ord k, Act d v, Group d) => k -> v -> ShiftedMap d k v -> ShiftedMap d k v
30+insert k v (ShiftedMap d m) = ShiftedMap d $ M.insert k ((act . invert) d v) m
31+
32+shift :: (Semigroup d) => d -> ShiftedMap d k v -> ShiftedMap d k v
33+shift d' (ShiftedMap d m) = ShiftedMap (d <> d') m
34+
35+liftMap :: Monoid d => Map k v -> ShiftedMap d k v
36+liftMap = ShiftedMap mempty
37+
38+unshift :: Act d v => ShiftedMap d k v -> Map k v
39+unshift (ShiftedMap d m) = act d <$> m
src/Lib.hsdeleted−7
@@ -1,7 +0,0 @@
1−module Lib
2− ( someFunc,
3− )
4−where
5−
6−someFunc :: IO ()
7−someFunc = putStrLn "someFunc"
src/Tix/Builtins.hsnew file+68
@@ -0,0 +1,68 @@
1+module Tix.Builtins (builtins) where
2+
3+import Data.Map (Map)
4+import qualified Data.Map as M
5+import Data.Text (Text)
6+import Tix.Types
7+
8+builtins :: Map Text Scheme
9+builtins =
10+ M.fromList
11+ [ ( "builtins",
12+ scheme $
13+ NAttrSet $
14+ M.fromList
15+ [ ("abort", scheme $ NAtomic String :-> deBruijn 0 0),
16+ ("add", [StringOrNumber $ deBruijn 2 0] :=> (deBruijn 3 0 :-> (deBruijn 4 0 :-> deBruijn 4 0))),
17+ ("all", [] :=> ((deBruijn 4 0 :-> NAtomic Bool) :-> (List (deBruijn 5 0) :-> NAtomic Bool))),
18+ ("any", [] :=> ((deBruijn 4 0 :-> NAtomic Bool) :-> (List (deBruijn 5 0) :-> NAtomic Bool))),
19+ ("attrNames", [] :=> (deBruijn 3 0 :-> List (NAtomic String))),
20+ ("attrValues", [] :=> (deBruijn 3 0 :-> List (deBruijn 0 0))),
21+ ("baseNameOf", [] :=> (NAtomic String :-> NAtomic String)),
22+ ("bitAnd", [] :=> (NAtomic Number :-> (NAtomic Number :-> NAtomic Number))),
23+ ("bitXor", [] :=> (NAtomic Number :-> (NAtomic Number :-> NAtomic Number))),
24+ ("bitOr", [] :=> (NAtomic Number :-> (NAtomic Number :-> NAtomic Number))),
25+ ("ceil", [] :=> (NAtomic Number :-> NAtomic Number)),
26+ ("compareVersions", [] :=> (NAtomic String :-> (NAtomic String :-> NAtomic Number))),
27+ ("concatLists", [] :=> (List (List (deBruijn 5 0)) :-> List (deBruijn 4 0))),
28+ ("concatMap", [] :=> ((deBruijn 4 0 :-> List (deBruijn 5 1)) :-> (List (deBruijn 5 0) :-> List (deBruijn 5 1)))),
29+ ("map", [] :=> ((deBruijn 4 0 :-> deBruijn 4 1) :-> (List (deBruijn 5 0) :-> List (deBruijn 5 1)))),
30+ ("catAttrs", [] :=> (NAtomic String :-> (List (deBruijn 0 0) :-> List (deBruijn 0 0))))
31+ ]
32+ ),
33+ ( "derivation",
34+ [ deBruijn 2 0
35+ // attrSet
36+ [ ("all", scheme $ List (deBruijn 5 1)),
37+ ("drvAttrs", scheme $ deBruijn 4 0),
38+ ("drvPath", string),
39+ ("out", scheme $ deBruijn 4 1),
40+ ("outPath", string),
41+ ("outputName", string),
42+ ("type", string)
43+ ]
44+ $ deBruijn 2 1,
45+ deBruijn 2 0 .! ("name", string),
46+ deBruijn 2 0 .! ("builder", string),
47+ deBruijn 2 0 .! ("system", string),
48+ deBruijn 2 0 .? ("args", scheme $ List (NAtomic String)),
49+ deBruijn 2 0 .? ("outputs", scheme $ List (NAtomic String))
50+ ]
51+ :=> (deBruijn 3 0 :-> deBruijn 3 1)
52+ )
53+ ]
54+
55+string :: Scheme
56+string = scheme $ NAtomic String
57+
58+deBruijn :: Int -> Int -> NType
59+deBruijn a b = NBruijn $ DeBruijn a b
60+
61+attrSet :: [(Text, Scheme)] -> NType
62+attrSet = NAttrSet . M.fromList
63+
64+(.!) :: NType -> (Text, Scheme) -> Pred
65+(.!) = HasField RequiredField
66+
67+(.?) :: NType -> (Text, Scheme) -> Pred
68+(.?) = HasField OptionalField
src/Tix/Typechecker.hs+781−331
@@ -4,264 +4,307 @@ module Tix.Typechecker
44 runFresh,
55 runSeqWriter,
66 getType,
7+ runNoTreeTracer,
8+ renderPretty,
79 )
810where
911
12+import qualified Algebra.Graph.AdjacencyMap.Algorithm as AM
13+import qualified Algebra.Graph.Class as G
14+import qualified Algebra.Graph.NonEmpty.AdjacencyMap as AM
15+import Control.Lens hiding (Empty, List, cons, equality, set, set')
1016import Control.Monad
17+import qualified Control.Monad.Free as F
1118import Control.Monad.Freer
12−import Control.Monad.Freer.Error
19+import Control.Monad.Freer.Fresh
1320import Control.Monad.Freer.Internal (handleRelayS)
1421import Control.Monad.Freer.Reader
1522import Control.Monad.Freer.State
23+import Control.Monad.Freer.TreeTracer
1624import Control.Monad.Freer.Writer
25+import Data.Act
26+import qualified Data.Aeson as A
27+import Data.Either
1728import Data.Fix
1829import Data.Foldable
19−import Data.Functor
20−import Data.Functor.Classes
30+import Data.Group hiding ((~~))
2131import Data.List.NonEmpty (NonEmpty (..))
2232import qualified Data.List.NonEmpty as NE
33+import qualified Data.Map.MultiKey.Strict as MKM
34+import Data.Map.Shifted.Strict (ShiftedMap (..))
35+import qualified Data.Map.Shifted.Strict as SM
2336import Data.Map.Strict (Map)
2437import qualified Data.Map.Strict as M
38+import Data.Maybe
2539import Data.MonoTraversable
40+import Data.Monoid
41+import qualified Data.RangeSet.Map as RS
2642import Data.Sequence (Seq (..))
27−import Data.Sequences
43+import Data.Sequences hiding (catMaybes)
2844import Data.Set (Set)
2945import qualified Data.Set as S
3046import Data.Text (Text)
31−import qualified Data.Text.Lazy.Builder as T
47+import qualified Data.Text as T
48+import qualified Data.Text.Lazy as TL
49+import Data.Text.Prettyprint.Doc as P
50+import Data.Text.Prettyprint.Doc.Render.Text
3251import Data.Traversable
33−import Debug.Trace
3452import Nix.Atoms
3553import Nix.Expr
54+import Nix.Pretty
55+import Tix.Builtins (builtins)
56+import Tix.Types
57+import Prelude as P
3658
37−getType :: NExprLoc -> (NType, [(SrcSpan, Errors)], [UnifyingError])
59+getType :: NExprLoc -> (Scheme, [(SrcSpan, Errors)], [InferError], [UnifyingError], [PredicateError], A.Object)
3860getType r =
39− let ((((t, unifying), srcs), constraints), errs) =
61+ let ((((((t, traceTree), inf), predicate), unifying), errs), _srcs) =
4062 run
41− . runReader (M.empty :: VariableMap)
63+ . runReader nullSpan
64+ . evalState @(MKM.Map Pred) mempty
65+ . interpret @(Writer Pred) (\(Tell x) -> modify (<> MKM.singleton x))
66+ . runVariableMapEff
67+ . localVariablesMap builtins
68+ . evalState @Substitution mempty
69+ . runState @[(TypeVariable, SrcSpan)] []
70+ . interpret @(Writer (TypeVariable, SrcSpan)) (\(Tell x) -> modify (x :))
4271 . runSeqWriter @[(SrcSpan, Errors)]
43− . runSeqWriter @(Seq Constraint)
44− . runSeqWriter @[(TypeVariable, SrcSpan)]
4572 . runSeqWriter @[UnifyingError]
46− . runFresh
47− $ getType' r
48− in (t, errs, unifying)
73+ . runSeqWriter @[PredicateError]
74+ . runSeqWriter @[InferError]
75+ . runFreshSrc
76+ . runTreeTracer
77+ $ inferGeneral r
78+ in (t, errs, inf, unifying, predicate, traceTree)
79+
80+runFreshSrc ::
81+ Members '[Reader SrcSpan, Writer (TypeVariable, SrcSpan)] eff =>
82+ Eff (Fresh : eff) ~> Eff eff
83+runFreshSrc =
84+ runFresh
85+ . interpose @Fresh
86+ ( \case
87+ Fresh -> do
88+ v <- send Fresh
89+ src <- ask @SrcSpan
90+ tell (v, src)
91+ return v
92+ FreshSub x -> do
93+ v <- send $ FreshSub x
94+ src <- ask @SrcSpan
95+ tell (v, src)
96+ return v
97+ MinFreshFromNow -> send MinFreshFromNow
98+ )
4999
50−getType' ::
51− Members
52− '[ Writer (SrcSpan, Errors),
53− Reader VariableMap,
54− Writer (TypeVariable, SrcSpan),
55− Writer UnifyingError,
56− Fresh
57− ]
58− r =>
59− NExprLoc ->
60− Eff r NType
61−getType' r = do
62− (t, constraints) <-
63− runSeqWriter @(Seq Constraint) $
64− infer r
65− s <- solve (traceShowId constraints)
66− return . close $ sub s (traceShowId t)
67−
68−newtype TypeVariable = TypeVariable Int
69− deriving newtype (Show, Eq, Ord)
100+data VariableMapEff x where
101+ LookupVariable :: VarName -> VariableMapEff (Maybe Scheme)
70102
71−data Constraint = !NType :~ !NType
72− deriving stock (Eq, Ord, Show)
103+runVariableMapEff :: Eff (VariableMapEff ': effs) a -> Eff effs a
104+runVariableMapEff = interpret $ \(LookupVariable _) -> pure Nothing
73105
74−data DeBrujin = DeBrujin !Int !Int
75− deriving stock (Show, Eq, Ord)
76−
77−data NType
78− = NTypeVariable !TypeVariable
79− | NBrujin !DeBrujin
80− | NAtomic !AtomicType
81− | !NType :-> !NType
82− | -- These two introduce a new De Brujin binding context
83− List !NType
84− | NAttrSet !(Map Text NType)
85− deriving stock (Eq, Ord, Show)
106+lookupVar :: Member VariableMapEff eff => VarName -> Eff eff (Maybe Scheme)
107+lookupVar = send . LookupVariable
86108
87−data AtomicType
88− = Integer
89− | Float
90− | Bool
91− | String
92− | Path
93− | Null
94− | URI
95− deriving stock (Eq, Ord, Show)
109+replaceVariablesM :: Member VariableMapEff eff => (VarName -> Eff eff (Maybe Scheme)) -> Eff eff x -> Eff eff x
110+replaceVariablesM f = interpose $ \(LookupVariable x) -> f x
96111
97−isClosed :: NType -> Bool
98−isClosed (NTypeVariable _) = False
99−isClosed (NBrujin _) = True
100−isClosed (NAtomic _) = True
101−isClosed (x :-> y) = isClosed x && isClosed y
102−isClosed (List x) = isClosed x
103−isClosed (NAttrSet xs) = all isClosed . M.elems $ xs
112+localVariablesMap :: Member VariableMapEff eff => Map VarName Scheme -> Eff eff x -> Eff eff x
113+localVariablesMap m = interpose $ \(LookupVariable x) -> case M.lookup x m of
114+ Just t -> pure $ Just t
115+ Nothing -> lookupVar x
104116
105−close :: NType -> NType
106−close =
107− run
108− . evalState @(Map TypeVariable DeBrujin) M.empty
109− . runReader @Int 0
110− . evalState @Int 0
111− . close'
112− where
113− -- State is the sequential number, Reader is the binding context number
114− close' :: NType -> Eff '[State Int, Reader Int, State (Map TypeVariable DeBrujin)] NType
115− close' x@(NAtomic _) = return x
116− close' x@(NBrujin _) = return x
117− close' (x :-> y) = (:->) <$> close' x <*> close' y
118− close' (NTypeVariable tv) = NBrujin <$> newbrujin tv
119− close' (List x) = bndCtx $ List <$> close' x
120− close' (NAttrSet x) = bndCtx $ NAttrSet <$> traverse close' x
121−
122− bndCtx = local @Int (+ 1)
123− newbrujin t = do
124− get @(Map TypeVariable DeBrujin) <&> M.lookup t >>= \case
125− Nothing -> do
126− i <- ask
127− j <- get
128− modify @Int (+ 1)
129− let x = DeBrujin i j
130− modify @(Map TypeVariable DeBrujin) (M.insert t x)
131− return x
132− Just x -> return x
117+data Constraint = !NType :~ !NType
118+ deriving stock (Eq, Ord, Show)
119+
120+instance Pretty Constraint where
121+ pretty (x :~ y) = pretty x <+> "~" <+> pretty y
133122
134123class Free s where
135124 free :: s -> Set TypeVariable
125+ sub :: Substitution -> s -> s
136126
137127instance Free NType where
138128 free (NTypeVariable v) = S.singleton v
139− free (NAtomic _) = S.empty
140129 free (List x) = free x
141130 free (NAttrSet attrs) = foldMap free . M.elems $ attrs
142131 free (x :-> y) = free x <> free y
132+ free (NBruijn _) = S.empty
133+ free (NAtomic _) = S.empty
134+
135+ sub s r = case r of
136+ NBruijn _ -> r
137+ NTypeVariable x -> case M.lookup x $ unSubstitution s of
138+ Nothing -> NTypeVariable x
139+ Just t -> t
140+ List x -> List $ sub s x
141+ NAttrSet m -> NAttrSet $ sub s <$> m
142+ x :-> y -> sub s x :-> sub s y
143+ x@(NAtomic _) -> x
144+
145+instance Free Pred where
146+ free = \case
147+ Update x y z -> free x <> free y <> free z
148+ HasField _ x (_, y) -> free x <> free y
149+ StringOrNumber x -> free x
150+ sub s = \case
151+ Update x y z -> Update (sub s x) (sub s y) (sub s z)
152+ HasField r t (f, v) -> HasField r (sub s t) (f, sub s v)
153+ StringOrNumber x -> StringOrNumber $ sub s x
154+
155+instance Free Scheme where
156+ free (x :=> y) = free x <> free y
157+ sub s (x :=> y) = sub s x :=> sub s y
158+
159+instance Free a => Free [a] where
160+ free = foldMap free
161+ sub s = fmap (sub s)
162+
163+instance Free a => Free (Seq a) where
164+ free = foldMap free
165+ sub s = fmap (sub s)
166+
167+instance Free Substitution where
168+ free (Substitution s) = free . M.elems $ s
169+ sub new old = old <> new
170+
171+instance (Free a, Free b) => Free (a, b) where
172+ free (a, b) = free a <> free b
173+ sub s (a, b) = (sub s a, sub s b)
174+
175+instance Free (MKM.Map Pred) where
176+ free = MKM.keys
177+ sub subs@(Substitution s) mkm@(MKM.Map m _) = m'
178+ where
179+ vals = S.toList . fold . M.elems $ M.restrictKeys m (M.keysSet s)
180+ f = appEndo $ foldMap (Endo . MKM.delete) vals
181+ m' = f mkm <> MKM.fromList (sub subs vals)
143182
144183newtype Substitution = Substitution {unSubstitution :: Map TypeVariable NType}
184+ deriving newtype (Eq, Ord, Show)
185+
186+prettySubstitution :: Substitution -> A.Value
187+prettySubstitution = A.toJSON . M.mapKeysMonotonic (TL.pack . show) . fmap renderPretty . unSubstitution
145188
146189instance Semigroup Substitution where
147− x'@(Substitution x) <> (Substitution y) = Substitution (x <> fmap (sub x') y)
190+ x'@(Substitution x) <> y'@(Substitution y) = Substitution (M.unionWith (error "invariant") (fmap (sub y') x) (fmap (sub x') y))
148191
149192instance Monoid Substitution where
150193 mempty = Substitution mempty
151194
152−sub :: Substitution -> NType -> NType
153−sub s r = case r of
154− NAtomic _ -> r
155− NBrujin _ -> r
156− NTypeVariable x -> subTV x
157− List x -> List $ sub s x
158− NAttrSet m -> NAttrSet $ sub s <$> m
159− x :-> y -> sub s x :-> sub s y
160− where
161− subTV x = M.findWithDefault r x $ unSubstitution s
162−
163−subCon :: Substitution -> Constraint -> Constraint
164−subCon s (x :~ y) = sub s x :~ sub s y
195+instance Free Constraint where
196+ free (x :~ y) = free x <> free y
197+ sub s (x :~ y) = sub s x :~ sub s y
165198
166199(<<-) ::
167200 TypeVariable ->
168201 NType ->
169− UnifyM Substitution
170−v <<- (NTypeVariable x) | v == x = return mempty
202+ UnifyM ()
203+v <<- (NTypeVariable x) | v == x = pure ()
171204v <<- x | v `occursIn` x = tell (InfinityType x) >> return mempty
172−v <<- x = return $ Substitution $ M.singleton v x
173−
174−unify :: Constraint -> UnifyM Substitution
175−unify (lhs :~ rhs) =
176− case (lhs, rhs) of
177− (NAtomic x, NAtomic y) | x == y -> return mempty
205+ where
206+ occursIn :: Free x => TypeVariable -> x -> Bool
207+ occursIn t u = t `S.member` free u
208+v <<- x = modify (Substitution (M.singleton v x) <>)
209+
210+unifyWithPriority ::
211+ -- | The range of type variables to interpret as being lower
212+ -- priority (try to replace them if possible)
213+ RS.RSet RangeTypeVariable ->
214+ Constraint ->
215+ UnifyM ()
216+unifyWithPriority range (lhs :~ rhs) = do
217+ s <- get
218+ case sub s (lhs, rhs) of
219+ (x, y) | x == y -> return mempty
220+ (NTypeVariable x, NTypeVariable y) -> do
221+ if rangeTypeVariable y `RS.member` range
222+ then y <<- NTypeVariable x
223+ else x <<- NTypeVariable y
178224 (NTypeVariable t, x) -> t <<- x
179225 (x, NTypeVariable t) -> t <<- x
180− (List x, List y) -> unify $ x :~ y
226+ (List x, List y) -> unifyWithPriority range $ x :~ y
181227 (NAttrSet x, NAttrSet y) -> do
182− foldr (\c s -> s >>= \s' -> (<> s') <$> unify (subCon s' c)) (pure mempty)
183− . M.elems
184− $ M.intersectionWith (:~) x y
228+ assertSetsMatch (tell . KeysDontMatch) (M.keysSet x) (M.keysSet y)
229+ unifySchemes range . M.elems $ M.intersectionWith (,) x y
185230 (x1 :-> y1, x2 :-> y2) -> do
186− s <- unify (x1 :~ x2)
187− s' <- unify $ subCon s $ y1 :~ y2
188− return $ s' <> s
189− (x, y) -> tell (CanNotUnify x y) >> return mempty
190−
191−solve :: Seq Constraint -> UnifyM Substitution
192−solve Empty = return mempty
193−solve (rest :|> c) = do
194− s <- unify c
195− solve $ fmap (subCon s) rest
196−
197−pattern Sempty <- (S.null -> True) where Sempty = S.empty
198−
199−occursIn :: Free x => TypeVariable -> x -> Bool
200−occursIn t x = t `S.member` free x
201−
202−data SchemeX x = Scheme (Set TypeVariable) x
203− deriving stock (Eq, Ord, Show)
204−
205−instance Show1 SchemeX where
206− liftShowsPrec s _ p (Scheme Sempty x) = s p x
207− liftShowsPrec s _ p (Scheme tvs x) = ((("forall " <> show tvs)) <>) <> s p x
208−
209−instance Eq1 SchemeX where
210− liftEq eq (Scheme ts1 x1) (Scheme ts2 x2) = ts1 == ts2 && eq x1 x2
211−
212−-- type SchemeS = SchemeX NType
231+ unifyWithPriority range (x1 :~ x2)
232+ unifyWithPriority range $ y1 :~ y2
233+ (x, y) -> tell (CanNotUnify x y)
234+
235+unifySchemes :: RS.RSet RangeTypeVariable -> [(Scheme, Scheme)] -> UnifyM ()
236+unifySchemes _ [] = pure mempty
237+unifySchemes range ((x, y) : rest) = do
238+ unifyScheme range x y
239+ unifySchemes range rest
240+
241+unifyScheme :: RS.RSet RangeTypeVariable -> Scheme -> Scheme -> UnifyM ()
242+unifyScheme range (xs :=> x) (ys :=> y) = do
243+ solveWithPriority range (pure (x :~ y))
244+ s <- get
245+ let f = S.fromList . sub s
246+ assertSetsMatch (tell . ConstraintsDontMatch) (f xs) (f ys)
247+
248+assertSetsMatch :: Ord x => Applicative f => (Set x -> f ()) -> Set x -> Set x -> f ()
249+assertSetsMatch f x y = case (x S.\\ y, y S.\\ x) of
250+ (a, b) | S.null a, S.null b -> pure ()
251+ (a, b) -> f $ a <> b
252+
253+solve :: Seq Constraint -> UnifyM ()
254+solve = solveWithPriority mempty
255+
256+solveWithPriority ::
257+ -- | The range of type variables to interpret as being lower
258+ -- priority (try to replace them if possible)
259+ RS.RSet RangeTypeVariable ->
260+ Seq Constraint ->
261+ UnifyM ()
262+solveWithPriority _ Empty = return mempty
263+solveWithPriority range (rest :|> c) = do
264+ unifyWithPriority range c
265+ solveWithPriority range rest
213266
214267data Errors
215268 = UndefinedVariable VarName
216− | UnexpectedType {expected :: NType, got :: NType}
217− | KeyNotPresent Text
269+ | UnexpectedType {expected :: Scheme, got :: Scheme}
218270 deriving stock (Eq, Ord, Show)
219271
220−data Fresh x where
221− Fresh :: Fresh TypeVariable
222−
223−data ResumableExceptions x
224−
225−type Runner effect = forall effs a. Eff (effect ': effs) a -> Eff effs a
226−
227−runFresh :: Runner Fresh
228−runFresh =
229− evalState (TypeVariable 0)
230− . reinterpret
231− ( \Fresh -> do
232− (TypeVariable old) <- get
233− put (TypeVariable $ old + 1)
234− return (TypeVariable old)
235− )
236−
237−freshSrc ::
238− Members '[Fresh, Reader SrcSpan, Writer (TypeVariable, SrcSpan)] r =>
239− Eff r TypeVariable
240−freshSrc = do
241− v <- send Fresh
242− src <- ask @SrcSpan
243− tell (v, src)
244− return v
245−
246272data UnifyingError
247273 = InfinityType NType
248274 | CanNotUnify NType NType
275+ | ConstraintsDontMatch (Set Pred)
276+ | KeysDontMatch (Set Text)
277+ deriving stock (Eq, Show)
278+
279+data PredicateError
280+ = KeyNotPresent Text NType
281+ | NotAnAttributeSet NType
282+ | NotAddable NType
249283 deriving stock (Eq, Show)
250284
251−type UnifyM x = forall r. Members '[Writer UnifyingError] r => Eff r x
285+data InferError
286+ = ConflictingBindingDefinitions (NormalizedBinding' NExprLoc) (NormalizedBinding' NExprLoc)
287+ deriving stock (Show)
288+
289+type UnifyM x = forall r. Members '[Writer UnifyingError, State Substitution] r => Eff r x
252290
253291type InferEffs =
254292 '[ Fresh,
255− Writer (TypeVariable, SrcSpan),
256− Writer Constraint,
293+ Reader SrcSpan,
257294 Writer (SrcSpan, Errors),
258− Reader VariableMap,
259− Writer UnifyingError
295+ Writer PredicateError,
296+ Writer Pred,
297+ State (MKM.Map Pred),
298+ VariableMapEff,
299+ Writer UnifyingError,
300+ Writer InferError,
301+ State Substitution,
302+ TreeTracer
260303 ]
261304
262305type InferM x = forall r. Members InferEffs r => Eff r x
263306
264−type InferM' x = forall r. Members (Reader SrcSpan ': InferEffs) r => Eff r x
307+type InferM' x = forall r. Members (Writer Constraint : InferEffs) r => Eff r x
265308
266309runSeqWriter :: forall s w r a. (IsSequence s, Element s ~ w) => Eff (Writer w ': r) a -> Eff r (a, s)
267310runSeqWriter = handleRelayS mempty (\s x -> return (x, s)) $ \s (Tell w) k -> k (cons w s) ()
@@ -271,107 +314,129 @@ throwSrc e = do
271314 src <- ask @SrcSpan
272315 tell (src, e)
273316
274−throwSrcTV ::
317+throwTV ::
275318 Members
276319 '[ Reader SrcSpan,
277320 Writer (SrcSpan, e),
278− Writer (TypeVariable, SrcSpan),
279321 Fresh
280322 ]
281323 r =>
282324 e ->
283325 Eff r TypeVariable
284−throwSrcTV e = do
326+throwTV e = do
285327 throwSrc e
286− freshSrc
328+ fresh
287329
288−type VariableMap = Map VarName NType
330+type VariableMap = Map VarName Scheme
289331
290332(~~) :: Member (Writer Constraint) r => NType -> NType -> Eff r ()
291333lhs ~~ rhs = tell $ lhs :~ rhs
292334
293−withBindings ::
294− (Member (Reader r) effs, Semigroup r) =>
295− r ->
296− Eff effs a ->
297− Eff effs a
298−withBindings bindings = local (bindings <>)
335+instantiate ::
336+ forall effs.
337+ Members '[Fresh, Writer Pred] effs =>
338+ Scheme ->
339+ Eff effs NType
340+instantiate s = do
341+ (cs :=> t) <- runReader 0 . evalState M.empty . instantiateScheme $ s
342+ tell `traverse_` cs
343+ return t
344+ where
345+ instantiateScheme :: forall. Scheme -> Eff (State (Map DeBruijn TypeVariable) ': Reader Int ': effs) Scheme
346+ instantiateScheme =
347+ traverseNTypesWith (local @Int (+ 1)) %%~ \case
348+ (TBruijn db) -> TTypeVariable <$> freshInst db
349+ x@(TAtomic _) -> return x
350+ x@(TTypeVariable _) -> return x
351+
352+ freshInst :: DeBruijn -> Eff (State (Map DeBruijn TypeVariable) ': Reader Int ': effs) TypeVariable
353+ freshInst (DeBruijn i j) = do
354+ x <- ask @Int
355+ let db = DeBruijn (i - x) j
356+ gets (M.lookup db) >>= \case
357+ Just t -> return t
358+ Nothing -> do
359+ t <- fresh
360+ modify (M.insert db t)
361+ return t
299362
300−infer :: NExprLoc -> InferM NType
301−infer (Fix (Compose (Ann src x))) = runReader src $ case x of
363+infer :: NExprLoc -> InferM' NType
364+infer (Fix (Compose (Ann src x))) = local (const src) $ case x of
302365 NConstant a -> return . NAtomic $ case a of
303− NURI {} -> URI
304− NInt {} -> Integer
305− NFloat {} -> Float
366+ NURI {} -> String
367+ NInt {} -> Number
368+ NFloat {} -> Number
306369 NBool {} -> Bool
307370 NNull {} -> Null
308− NLiteralPath {} -> return . NAtomic $ Path
309− NEnvPath {} -> return . NAtomic $ Path
371+ NLiteralPath {} -> return . NAtomic $ String
372+ NEnvPath {} -> return . NAtomic $ String
310373 NStr {} -> return $ NAtomic String
311374 NSym var ->
312− ask @VariableMap
313− >>= maybe (NTypeVariable <$> throwSrcTV (UndefinedVariable var)) return . M.lookup var
375+ lookupVar var
376+ >>= maybe (scheme . NTypeVariable <$> throwTV (UndefinedVariable var)) return
377+ >>= instantiate -- I have no idea if this covers all cases.
314378 NList xs -> do
315379 xs' <- traverse infer xs
316380 traverse_ tell . fmap (uncurry (:~)) $ zip xs' (tail xs')
317381 case xs' of
318− [] -> NTypeVariable <$> freshSrc
382+ [] -> List . NTypeVariable <$> fresh
319383 y : _ -> return $ List y
320384 NUnary NNeg y -> do
321385 t <- infer y
322− -- TODO: Infer either Float or Integer
323− -- tell $ t :~ (normalType . NAtomic $ )
324− return t
386+ t ~~ NAtomic Number
387+ return $ NAtomic Number
325388 NUnary NNot y -> do
326389 t <- infer y
327390 t ~~ NAtomic Bool
328− return t
391+ return $ NAtomic Bool
329392 NBinary NUpdate lhs rhs -> do
330393 lhsT <- infer lhs
331394 rhsT <- infer rhs
332− lhsT ~~ rhsT
333− lhs' <- expectAttrSet lhsT
334− rhs' <- expectAttrSet rhsT
335− forM_ (M.toList $ M.intersectionWith (,) lhs' rhs') (\(_, (a, b)) -> a ~~ b)
336− return . NAttrSet $ rhs' <> lhs'
395+ res <- NTypeVariable <$> fresh
396+ tell (lhsT // rhsT $ res)
397+ return res
337398 NBinary NApp lhs rhs -> do
338399 lhst <- infer lhs
339400 rhst <- infer rhs
340− rest <- NTypeVariable <$> freshSrc
401+ rest <- NTypeVariable <$> fresh
341402 lhst ~~ (rhst :-> rest)
342− return rhst
403+ return rest
343404 NBinary NConcat lhs rhs -> do
344405 lhst <- infer lhs
345406 rhst <- infer rhs
346− t <- NTypeVariable <$> freshSrc
407+ t <- NTypeVariable <$> fresh
347408 let listt = List t
348409 lhst ~~ listt
349410 rhst ~~ listt
350− return $ listt
351− NBinary op lhs rhs | op `elem` [NEq, NNEq] -> do
411+ return listt
412+ NBinary NEq lhs rhs -> equality lhs rhs
413+ NBinary NNEq lhs rhs -> equality lhs rhs
414+ NBinary NLt lhs rhs -> comparison lhs rhs
415+ NBinary NLte lhs rhs -> comparison lhs rhs
416+ NBinary NGt lhs rhs -> comparison lhs rhs
417+ NBinary NGte lhs rhs -> comparison lhs rhs
418+ NBinary NPlus lhs rhs -> do
352419 lhst <- infer lhs
353420 rhst <- infer rhs
354421 lhst ~~ rhst
355− return $ NAtomic Bool
356− NBinary op lhs rhs
357− | op `elem` [NLt, NLte, NGt, NGte, NPlus, NMinus, NMult, NDiv] -> do
358− lhst <- infer lhs
359− rhst <- infer rhs
360− -- TODO: Infer lhst and rhst are either Integer or Double
361− lhst ~~ rhst
362− return $ NAtomic Bool
363− NBinary op lhs rhs | op `elem` [NAnd, NOr, NImpl] -> do
364− lhst <- infer lhs
365− rhst <- infer rhs
366− rhst ~~ NAtomic Bool
367− lhst ~~ NAtomic Bool
368− return $ NAtomic Bool
422+ tell $ StringOrNumber lhst
423+ return lhst
424+ NBinary NMinus lhs rhs -> math lhs rhs
425+ NBinary NMult lhs rhs -> math lhs rhs
426+ NBinary NDiv lhs rhs -> math lhs rhs
427+ NBinary NAnd lhs rhs -> logic lhs rhs
428+ NBinary NOr lhs rhs -> logic lhs rhs
429+ NBinary NImpl lhs rhs -> logic lhs rhs
369430 NSelect r path' def -> do
370431 setT <- infer r
371− path <- getPath path'
372− resT <- case path of
373− Just p -> lookupAttrSet p setT
374− Nothing -> NTypeVariable <$> freshSrc
432+ let path = getPath path'
433+ strictness = case def of
434+ Nothing -> RequiredField
435+ Just _ -> OptionalField
436+ resT <-
437+ NTypeVariable <$> case path of
438+ Just p -> lookupAttrSet strictness setT p
439+ Nothing -> fresh
375440 case def of
376441 Nothing -> return ()
377442 Just defR -> do
@@ -379,31 +444,53 @@ infer (Fix (Compose (Ann src x))) = runReader src $ case x of
379444 defT ~~ resT
380445 return resT
381446 NSet NNonRecursive xs -> NAttrSet <$> inferBinding xs
447+ NSet NRecursive xs -> NAttrSet <$> inferRecBinding xs
448+ NLet bindings body -> do
449+ bindingsT <- inferRecBinding bindings
450+ localVariablesMap bindingsT $ infer body
382451 NHasAttr attrSet path -> do
383452 setT <- infer attrSet
384− expectAttrSet setT
385− return setT
453+ case getPath path of
454+ Just p -> void $ lookupAttrSet OptionalField setT p
455+ Nothing -> pure ()
456+ return $ NAtomic Bool
386457 NAbs param body -> do
387458 (paramT, varMap :: VariableMap) <- case param of
388459 Param name -> do
389− t <- freshSrc
390− return (NTypeVariable t, M.singleton name $ NTypeVariable t)
460+ t <- fresh
461+ return (NTypeVariable t, M.singleton name . scheme $ NTypeVariable t)
391462 ParamSet set variadic binding -> do
392− setBindings <-
393− M.fromList <$> set
394− `for` ( \(name, def) -> do
395− t <- case def of
396− Nothing -> NTypeVariable <$> freshSrc
397− Just def' -> infer def'
398− return (name, t)
399− )
400− let setT = NAttrSet $ setBindings
401− return (setT, maybe M.empty (`M.singleton` setT) binding <> setBindings)
402− bodyT <- withBindings varMap $ infer body
463+ (paramT, varMap) <-
464+ if variadic
465+ then do
466+ setT <- NTypeVariable <$> fresh
467+ setBindings <-
468+ M.fromList <$> set
469+ `for` ( \(name, def) -> do
470+ let r = case def of
471+ Nothing -> RequiredField
472+ Just _ -> OptionalField
473+ (NTypeVariable -> t) <- lookupAttrSet r setT (pure name)
474+ case def of
475+ Nothing -> pure ()
476+ Just def' -> infer def' >>= (t ~~)
477+ return (name, scheme t)
478+ )
479+ return (setT, setBindings)
480+ else do
481+ setBindings <-
482+ M.fromList <$> set
483+ `for` ( \(name, def) -> do
484+ t <- case def of
485+ Nothing -> NTypeVariable <$> fresh
486+ Just def' -> infer def'
487+ return (name, scheme t)
488+ )
489+ let setT = NAttrSet setBindings
490+ return (setT, setBindings)
491+ return (paramT, maybe M.empty (`M.singleton` scheme paramT) binding <> varMap)
492+ bodyT <- localVariablesMap varMap $ infer body
403493 return $ paramT :-> bodyT
404− NLet bindings body -> do
405− bindingsT <- inferBinding bindings
406− withBindings bindingsT $ infer body
407494 NIf cond t f -> do
408495 condT <- infer cond
409496 condT ~~ NAtomic Bool
@@ -413,65 +500,413 @@ infer (Fix (Compose (Ann src x))) = runReader src $ case x of
413500 return tT
414501 NWith set body -> do
415502 setT <- infer set
416− vars <- expectAttrSet setT
417− withBindings vars $ infer body
503+ let f = case setT of
504+ NAttrSet vars -> localVariablesMap vars
505+ other -> replaceVariablesM $ \var -> do
506+ lookupVar var >>= \case
507+ Just t -> pure $ Just t
508+ Nothing -> do
509+ res <- lookupAttrSet RequiredField other (pure var)
510+ pure $ Just . scheme $ NTypeVariable res
511+ f $ infer body
418512 NAssert cond body -> do
419513 condT <- infer cond
420514 condT ~~ NAtomic Bool
421515 infer body
422− NSynHole _ -> NTypeVariable <$> freshSrc
423−
424−inferBinding :: [Binding (Fix NExprLocF)] -> InferM' (Map VarName NType)
425−inferBinding bindings = do
426− bindings' <-
427− bindings >>.= \case
428− (NamedVar path r src) -> do
429− getPath path >>= \case
430− Nothing -> return []
431− Just name -> do
432− t <- infer r
433− return $ [stack ((,) <$> name) (NAttrSet . uncurry M.singleton) t]
434− Inherit attrSet keys src -> do
435− vars <- case attrSet of
436− Just attr -> do
437− t <- infer attr
438− expectAttrSet t
439− Nothing -> ask @VariableMap
440− names <- catMaybes <$> traverse getKeyName keys
441− return $
442− catMaybes $
443− names <&> \name -> case M.lookup name vars of
444− Nothing -> Nothing
445− Just r -> Just (name, r)
446− return $ M.fromListWith mergeSetTypes bindings'
447−
448−expectAttrSet :: Members '[Reader SrcSpan, Writer (SrcSpan, Errors)] r => NType -> Eff r VariableMap
449−expectAttrSet (NAttrSet x) = return x
450−expectAttrSet g = do
451− throwSrc
452− UnexpectedType
453− { expected = NAttrSet M.empty,
454− got = g
455− }
456− return M.empty
457−
458−-- | Stacks functions recursively inside each other
459−-- >>> stack [f1, f2, f3] h x
460−-- f1 (h $ f2 (h $ f3 x))
461−stack :: forall x y. NonEmpty (x -> y) -> (y -> x) -> x -> y
462−stack (g :| gs) h x = g $ f gs
516+ NSynHole _ -> NTypeVariable <$> fresh
517+ where
518+ equality lhs rhs = do
519+ lhst <- infer lhs
520+ rhst <- infer rhs
521+ lhst ~~ rhst
522+ return $ NAtomic Bool
523+ comparison lhs rhs = do
524+ lhst <- infer lhs
525+ rhst <- infer rhs
526+ tell (StringOrNumber lhst)
527+ lhst ~~ rhst
528+ return $ NAtomic Bool
529+ math lhs rhs = do
530+ lhst <- infer lhs
531+ rhst <- infer rhs
532+ let t = NAtomic Number
533+ lhst ~~ t
534+ rhst ~~ t
535+ return t
536+ logic lhs rhs = do
537+ lhst <- infer lhs
538+ rhst <- infer rhs
539+ let t = NAtomic Bool
540+ rhst ~~ t
541+ lhst ~~ t
542+ return t
543+
544+type NormalizedBinding' = F.Free (Map VarName)
545+
546+type NormalizedBinding x = Map VarName (NormalizedBinding' x)
547+
548+normalizeBindings :: Member (Writer InferError) eff => [Binding NExprLoc] -> Eff eff (NormalizedBinding NExprLoc)
549+normalizeBindings bindings = case bindings' of
550+ [] -> return M.empty
551+ (x : xs) ->
552+ sequence $
553+ -- This is really sub-optimal
554+ foldl (\u -> M.unionWith (\i j -> i >>= \i' -> j >>= mergeBindings i') u . fmap pure) (fmap pure x) xs
555+ where
556+ mergeBindings (F.Free lhs) (F.Free rhs) =
557+ fmap F.Free . sequence $
558+ -- This is really sub-optimal
559+ M.unionWith (\x y -> x >>= \x' -> y >>= mergeBindings x') (pure <$> lhs) (pure <$> rhs)
560+ mergeBindings x y = do
561+ tell $ ConflictingBindingDefinitions x y
562+ return x
563+ fromName :: NonEmpty VarName -> x -> NormalizedBinding x
564+ fromName (n :| ns) x = M.singleton n $ foldr (\u t -> F.Free $ M.singleton u t) (F.Pure x) ns
565+ bindings' =
566+ bindings >>= \case
567+ (NamedVar path r _src) ->
568+ case getPath path of
569+ Nothing -> [] -- TODO: This should be an error (?)
570+ Just name -> pure $ fromName name r
571+ (Inherit attrSet keys src) ->
572+ let names :: [VarName] = mapMaybe getKeyName keys
573+ f :: VarName -> NExprLoc = case attrSet of
574+ Nothing -> \v -> Fix $ Compose $ Ann (SrcSpan src src) $ NSym v
575+ Just set -> \v -> Fix $ Compose $ Ann (SrcSpan src src) $ NSelect set (pure $ StaticKey v) Nothing
576+ in (\v -> fromName (pure v) (f v)) <$> names
577+
578+inferNormalizedBindings :: NormalizedBinding NExprLoc -> InferM (Map VarName Scheme)
579+inferNormalizedBindings = traverse inferNormalizedBindings'
580+ where
581+ inferNormalizedBindings' :: NormalizedBinding' NExprLoc -> InferM Scheme
582+ inferNormalizedBindings' (F.Pure expr) = inferGeneral expr
583+ inferNormalizedBindings' (F.Free m) = scheme . NAttrSet <$> inferNormalizedBindings' `traverse` m
584+
585+inferNormalizedBindingsRecursive :: NormalizedBinding NExprLoc -> InferM (Map VarName Scheme)
586+inferNormalizedBindingsRecursive n = do
587+ let components = case AM.topSort . AM.scc $ bindingGraph n of
588+ Left x -> [foldMap AM.vertexSet x]
589+ Right x -> AM.vertexSet <$> P.reverse x
590+ fmap toScheme <$> inferComponents n components
591+ where
592+ toScheme :: NormalizedBinding' Scheme -> Scheme
593+ toScheme (F.Pure t) = t
594+ toScheme (F.Free m) = scheme $ NAttrSet $ fmap toScheme m
595+
596+inferComponents :: NormalizedBinding NExprLoc -> [Set (NonEmpty VarName)] -> InferM (NormalizedBinding Scheme)
597+inferComponents _ [] = pure M.empty
598+inferComponents n ((S.toList -> paths) : otherComponents) = do
599+ let bindings = catMaybes $ paths <&> \path -> (path,) <$> lookupExpr path n
600+ (schemes, schemes') <- traceSubtree (showExpr . bindingsToNExpr $ bindings) $ do
601+ (types, p, preds, s) <-
602+ inferGeneral' (NAttrSet . fmap toScheme) $
603+ do
604+ tvsExprs <- for bindings (\(a, b) -> (a,b,) . NTypeVariable <$> fresh)
605+ let tvsExprs' =
606+ foldl' (M.unionWith mergeBindings) M.empty $
607+ fmap (\(a, b, c) -> normalize a (b, c)) tvsExprs
608+ tvs = toScheme . fmap snd <$> tvsExprs'
609+
610+ -- (type, tv)
611+ tvsTypes <-
612+ localVariablesMap tvs $
613+ tvsExprs' & traverse . traverse . _1 %%~ infer
614+ for_ tvsTypes $ traverse (uncurry (~~))
615+ return $ fmap fst <$> tvsTypes
616+ -- TODO: There should probably be some smarter predicate filtering
617+ schemes <- types & traverse . traverse %%~ (\t -> solveAndClose p $ sub s $ preds :=> t)
618+ let schemes' = toScheme' <$> schemes
619+ traceValue "resulting_type" $ renderPretty . scheme $ NAttrSet schemes'
620+ return (schemes, schemes')
621+
622+ otherBindings <-
623+ localVariablesMap schemes' $ inferComponents n otherComponents
624+ return $ M.unionWith mergeBindings schemes otherBindings
625+ where
626+ bindingToNExpr :: NonEmpty VarName -> NExprLoc -> Binding NExpr
627+ bindingToNExpr name expr = NamedVar (StaticKey <$> name) (stripAnnotation expr) nullPos
628+
629+ bindingsToNExpr :: [(NonEmpty VarName, NExprLoc)] -> NExpr
630+ bindingsToNExpr bs = Fix $ NSet NNonRecursive $ fmap (uncurry bindingToNExpr) bs
631+
632+ normalize :: NonEmpty VarName -> x -> NormalizedBinding x
633+ normalize (NESingle x) t = M.singleton x (F.Pure t)
634+ normalize (x :|| xs) t = M.singleton x (F.Free $ normalize xs t)
635+
636+ mergeBindings :: NormalizedBinding' x -> NormalizedBinding' x -> NormalizedBinding' x
637+ mergeBindings (F.Free lhs) (F.Free rhs) = F.Free $ M.unionWith mergeBindings lhs rhs
638+ -- This should have been taken care of when constructing the structures.
639+ mergeBindings _ _ = error "not possible"
640+
641+ toScheme :: NormalizedBinding' NType -> Scheme
642+ toScheme (F.Pure t) = scheme t
643+ toScheme (F.Free m) = scheme $ NAttrSet $ fmap toScheme m
644+
645+ toScheme' :: NormalizedBinding' Scheme -> Scheme
646+ toScheme' (F.Pure t) = t
647+ toScheme' (F.Free m) = scheme $ NAttrSet $ fmap toScheme' m
648+
649+ -- Returns Just only if it is the tip.
650+ -- This is what we want because non-tip elements are also part of the call graph.
651+ lookupExpr :: NonEmpty VarName -> NormalizedBinding x -> Maybe x
652+ lookupExpr (NESingle x) m =
653+ M.lookup x m >>= \case
654+ F.Pure a -> Just a
655+ F.Free _ -> Nothing
656+ lookupExpr (x :|| xs) m =
657+ M.lookup x m >>= \case
658+ F.Pure _ -> Nothing
659+ F.Free a -> lookupExpr xs a
660+
661+bindingGraph :: forall g. (G.Graph g, G.Vertex g ~ NonEmpty VarName) => NormalizedBinding NExprLoc -> g
662+bindingGraph n = G.overlays . fmap (\(k, v) -> getGraph (pure k) v) . M.toList $ n
463663 where
464− f :: [x -> y] -> x
465− f [] = x
466− f (k : ks) = h . k $ f ks
664+ getGraph :: NonEmpty VarName -> NormalizedBinding' NExprLoc -> g
665+ getGraph p (F.Pure e) = G.star p (P.filter (elemBindingSet n) $ getReferences e)
666+ getGraph p (F.Free m) = G.star p (fmap fst attrs) `G.overlay` G.overlays (fmap (uncurry getGraph) attrs)
667+ where
668+ attrs = (\(k, v) -> (p <> pure k, v)) <$> M.toList m
669+ elemBindingSet :: NormalizedBinding x -> NonEmpty VarName -> Bool
670+ elemBindingSet m = elemBindingSet' m . NE.toList
671+ elemBindingSet' :: NormalizedBinding x -> [VarName] -> Bool
672+ elemBindingSet' _ [] = True
673+ elemBindingSet' m (x : xs) = case M.lookup x m of
674+ Nothing -> False
675+ Just (F.Free next) -> elemBindingSet' next xs
676+ Just (F.Pure _) -> case xs of
677+ [] -> True
678+ _ -> False
679+
680+getReferences :: NExprLoc -> [NonEmpty VarName]
681+getReferences expr@(Fix (Compose (Ann _ x))) = case x of
682+ NConstant _ -> []
683+ NLiteralPath _ -> []
684+ NEnvPath _ -> []
685+ NStr _ -> []
686+ NSym var -> [pure var]
687+ NList xs -> foldMap getReferences xs
688+ NUnary _ a -> getReferences a
689+ NBinary _ a b -> getReferences a <> getReferences b
690+ NSelect {} -> case processSelect expr of
691+ (Nothing, other) -> other
692+ (Just p, other) -> pure p <> other
693+ NSet _ xs -> foldMap getReferences $ xs >>= toList -- This is not strictly correct
694+ NHasAttr a _ -> getReferences a
695+ NAbs _ a -> getReferences a -- This is not strictly correct
696+ NLet a b -> foldMap getReferences (a >>= toList) <> getReferences b -- This is not strictly correct
697+ NIf a b c -> getReferences a <> getReferences b <> getReferences c -- This is not strictly correct
698+ NWith a b -> getReferences a <> getReferences b -- This is not strictly correct
699+ NAssert a b -> getReferences a <> getReferences b
700+ NSynHole _ -> []
701+ where
702+ processSelect :: NExprLoc -> (Maybe (NonEmpty VarName), [NonEmpty VarName])
703+ processSelect u@(Fix (Compose (Ann _ y))) = case y of
704+ NSym var -> (Just $ pure var, [])
705+ NSelect l h m -> fmap
706+ (join (maybeToList (getReferences <$> m)) <>)
707+ $ case getPath h of
708+ Nothing -> (Nothing, getReferences l)
709+ Just p -> case processSelect l of
710+ (Just path, other) -> (Just $ path <> p, other)
711+ (Nothing, other) -> (Nothing, other)
712+ _ -> (Nothing, getReferences u)
713+
714+inferBinding :: [Binding NExprLoc] -> InferM (Map VarName Scheme)
715+inferBinding = normalizeBindings >=> inferNormalizedBindings
716+
717+inferRecBinding :: [Binding NExprLoc] -> InferM (Map VarName Scheme)
718+inferRecBinding = normalizeBindings >=> inferNormalizedBindingsRecursive
719+
720+renderPretty :: Pretty x => x -> TL.Text
721+renderPretty = renderLazy . layoutPretty defaultLayoutOptions . pretty
722+
723+showExpr :: NExpr -> Text
724+showExpr = TL.toStrict . renderLazy . layoutPretty defaultLayoutOptions . P.group . prettyNix
725+
726+inferGeneral :: NExprLoc -> InferM Scheme
727+inferGeneral x@(Fix (Compose (Ann src _))) =
728+ local (const src) . traceSubtree (showExpr . stripAnnotation $ x) $ do
729+ (t, p, keep, s) <- inferGeneral' id $ infer x
730+ res <- solveAndClose p $ sub s $ keep :=> t
731+ traceValue "resuting_type" $ renderPretty res
732+ return res
733+
734+inferGeneral' ::
735+ (Members InferEffs r, Pretty y) =>
736+ (x -> y) ->
737+ Eff (Writer Constraint : r) x ->
738+ Eff r (x, RS.RSet RangeTypeVariable, [Pred], Substitution)
739+inferGeneral' toPretty f = do
740+ ((x, cs), range) <-
741+ traceSubtree "subexpressions" . registerTypeVariables . runSeqWriter @(Seq Constraint) $ f
742+ traceSubtree "received" $ do
743+ traceValue "type" $ renderPretty $ toPretty x
744+ get >>= traceValue "substitutions" . prettySubstitution
745+ traceValue "constraints" $ fmap renderPretty cs
746+ traceValue "range" $ T.pack . show $ range
747+ get @(MKM.Map Pred) >>= traceValue "preds" . showPreds
748+ solveWithPriority range cs
749+ get >>= traceValue "substitutions_after_solving" . prettySubstitution
750+ (s, returnedS) <-
751+ get @Substitution
752+ <&> join bimap Substitution . M.partitionWithKey (\k _ -> rangeTypeVariable k `RS.member` range) . unSubstitution
753+ put returnedS
754+ -- modify @Substitution $ Substitution . M.filterWithKey (\k _ -> k `RS.notMember` range) . unSubstitution
755+ -- returnedS <- get @Substitution
756+ traceSubtree "returned" $ do
757+ traceValue "substitutions" $ prettySubstitution returnedS
758+ -- Filter for optimization purposes
759+ preds <- get @(MKM.Map Pred)
760+ let newRange = range RS.\\ rangeFromSet (free returnedS)
761+ (keep', toss) = MKM.partition ((`RS.member` newRange) . rangeTypeVariable) preds
762+ keep = MKM.toList keep'
763+ -- At this point the only predicates only contain type variables that are only used
764+ -- in the expression. This means that all of the generated constraints and
765+ -- substitutions can be safely restricted to this expression.
766+ traceValue "preds" $ showPreds toss
767+ traceValue "keep_preds" $ showPreds keep'
768+ put toss
769+ return (x, newRange, keep, s)
770+ where
771+ showPreds :: MKM.Map Pred -> Map String String
772+ showPreds = M.mapKeys show . fmap show . MKM.toMap
467773
468−(>>.=) :: (Applicative f, Monad t, Traversable t) => t a -> (a -> f (t b)) -> f (t b)
469−ta >>.= f = join <$> traverse f ta
774+rangeFromSet :: S.Set TypeVariable -> RS.RSet RangeTypeVariable
775+rangeFromSet = RS.fromAscList . fmap rangeTypeVariable . S.toAscList
470776
471−mergeSetTypes :: NType -> NType -> NType
472−mergeSetTypes (NAttrSet ks) (NAttrSet ks') =
473− NAttrSet $ M.unionWith mergeSetTypes ks ks'
474−mergeSetTypes _ x = x
777+solveAndClose ::
778+ Members
779+ '[ Fresh,
780+ Writer PredicateError,
781+ Writer UnifyingError
782+ ]
783+ eff =>
784+ RS.RSet RangeTypeVariable ->
785+ Scheme ->
786+ Eff eff Scheme
787+solveAndClose range (cs :=> t) = evalState @Substitution mempty $ do
788+ (((solvedPreds, range'), constraints), collectedPreds) <-
789+ runSeqWriter @[Pred]
790+ . runSeqWriter @(Seq Constraint)
791+ . registerTypeVariables
792+ $ solveConstraints range cs
793+ let newRange = range `RS.union` range'
794+ case (constraints, collectedPreds) of
795+ (Empty, []) -> return . close newRange $ solvedPreds :=> t
796+ _ -> do
797+ solveWithPriority newRange constraints
798+ s <- get
799+ solveAndClose newRange $ sub s $ (collectedPreds <> solvedPreds) :=> t
800+
801+solveConstraints ::
802+ forall effs.
803+ Members
804+ '[ Fresh,
805+ Writer Pred,
806+ Writer PredicateError,
807+ Writer Constraint,
808+ Writer UnifyingError,
809+ State Substitution
810+ ]
811+ effs =>
812+ RS.RSet RangeTypeVariable ->
813+ [Pred] ->
814+ Eff effs [Pred]
815+solveConstraints _ [] = pure []
816+solveConstraints range (p : ps) = case p of
817+ -- StringOrNumber
818+ StringOrNumber (NTypeVariable _) -> (p :) <$> solveConstraints range ps
819+ StringOrNumber t -> do
820+ case t of
821+ NAtomic String -> pure ()
822+ NAtomic Number -> pure ()
823+ other -> tell $ NotAddable other
824+ solveConstraints range ps
825+ -- HasField
826+ HasField r (NAttrSet ts) (f, t) -> case M.lookup f ts of
827+ Nothing -> do
828+ case r of
829+ OptionalField -> pure ()
830+ RequiredField -> tell $ KeyNotPresent f (NAttrSet ts)
831+ solveConstraints range ps
832+ Just t' -> do
833+ x <- instantiate t
834+ y <- instantiate t'
835+ x ~~ y
836+ solveConstraints range ps
837+ HasField r tv@(NTypeVariable _) (k, v) -> do
838+ let sameAttrSet :: Pred -> Either (FieldStrictness, Scheme) Pred
839+ sameAttrSet = \case
840+ HasField r' t (k', v') | t == tv, k == k' -> Left (r', v')
841+ x -> Right x
842+ raiseStrictness :: FieldStrictness -> FieldStrictness -> FieldStrictness
843+ raiseStrictness RequiredField _ = RequiredField
844+ raiseStrictness _ RequiredField = RequiredField
845+ raiseStrictness OptionalField OptionalField = OptionalField
846+ (unzip -> (strictnesses, same), different) = partitionWith sameAttrSet ps
847+ strictness = foldr raiseStrictness r strictnesses
848+ unifyScheme range v `traverse_` same
849+ (HasField strictness tv (k, v) :) <$> solveConstraints range different
850+ HasField _ t _ -> do
851+ tell $ NotAnAttributeSet t
852+ solveConstraints range ps
853+ -- Update
854+ (Update (NAttrSet a) (NAttrSet b) t) -> do
855+ (NAttrSet $ b <> a) ~~ t
856+ solveConstraints range ps
857+ (Update a b _) -> do
858+ allGood <- check `traverse` ([a, b] :: [NType])
859+ (if and allGood then (p :) else id) <$> solveConstraints range ps
860+ where
861+ check :: NType -> Eff effs Bool
862+ check = \case
863+ NTypeVariable _ -> pure True
864+ NAttrSet _ -> pure True
865+ other -> tell (NotAnAttributeSet other) >> pure False
866+
867+partitionWith :: (a -> Either b c) -> [a] -> ([b], [c])
868+partitionWith f = partitionEithers . map f
869+
870+newtype DeBruijnContext = DeBruijnContext (Sum Int)
871+ deriving newtype (Eq, Ord, Show, Semigroup, Monoid, Group, Num)
872+
873+instance Act DeBruijnContext DeBruijn where
874+ act (DeBruijnContext (Sum n)) (DeBruijn i j) = DeBruijn (i + n) j
875+
876+type TDeBruijnMap = ShiftedMap DeBruijnContext TypeVariable DeBruijn
877+
878+close :: TraversableNTypes x => RS.RSet RangeTypeVariable -> x -> x
879+close range =
880+ run
881+ . evalState @TDeBruijnMap mempty
882+ . runReader @Int 0
883+ . evalState @Int 0
884+ . close'
885+ where
886+ -- State is the sequential number, Reader is the binding context number
887+ -- close' :: NType -> Eff '[State Int, Reader Int, State TDeBruijnMap] NType
888+ close' =
889+ traverseNTypesWith bndCtx %%~ \case
890+ x@(TBruijn _) -> return x
891+ x@(TAtomic _) -> return x
892+ (TTypeVariable tv) | rangeTypeVariable tv `RS.member` range -> TBruijn <$> newbruijn tv
893+ x@(TTypeVariable _) -> return x
894+
895+ bndCtx m = do
896+ modify @TDeBruijnMap (SM.shift 1)
897+ x <- local @Int (+ 1) m
898+ modify @TDeBruijnMap (SM.shift (-1))
899+ return x
900+ newbruijn t = do
901+ get @TDeBruijnMap <&> SM.lookup t >>= \case
902+ Nothing -> do
903+ i <- ask
904+ j <- get
905+ modify @Int (+ 1)
906+ let x = DeBruijn i j
907+ modify @TDeBruijnMap (SM.insert t x)
908+ return x
909+ Just x -> return x
475910
476911-- TODO: process variables
477912antiAntiQuote :: Antiquoted (NString r) r -> Maybe Text
@@ -490,44 +925,59 @@ unNString :: NString r -> Maybe Text
490925unNString (DoubleQuoted ss) = foldMap antiAntiQuoteText ss
491926unNString (Indented _ ss) = foldMap antiAntiQuoteText ss
492927
493−getKeyName :: Monad m => NKeyName r -> m (Maybe VarName)
494−getKeyName (StaticKey k) = return $ Just k
495−getKeyName (DynamicKey k) = return $ antiAntiQuote k
928+getKeyName :: NKeyName r -> (Maybe VarName)
929+getKeyName (StaticKey k) = Just k
930+getKeyName (DynamicKey k) = antiAntiQuote k
496931
497932getPath ::
498− (Traversable t, Monad f) =>
933+ (Traversable t) =>
499934 t (NKeyName r) ->
500− f (Maybe (t Text))
501−getPath path = sequence <$> traverse getKeyName path
935+ Maybe (t Text)
936+getPath = mapM getKeyName
502937
503938type AttrSetPath = NonEmpty Text
504939
505940lookupAttrSet ::
506941 Members
507− '[ Reader SrcSpan,
508− Writer (SrcSpan, Errors),
509− Writer (TypeVariable, SrcSpan),
942+ '[ Writer (SrcSpan, Errors),
943+ Writer Pred,
510944 Fresh
511945 ]
512946 r =>
513− AttrSetPath ->
947+ FieldStrictness ->
514948 NType ->
515− Eff r NType
516−lookupAttrSet path = go (NE.toList path)
949+ AttrSetPath ->
950+ Eff r TypeVariable
951+lookupAttrSet r n = \case
952+ (NESingle p) -> do
953+ var <- getSubTV n
954+ tell (HasField r n (p, scheme . NTypeVariable $ var))
955+ return var
956+ (p :|| ps) -> do
957+ set <- NTypeVariable <$> getSubTV n
958+ var <- lookupAttrSet r set ps
959+ tell $ HasField r n (p, scheme set)
960+ return var
961+ where
962+ getSubTV (NTypeVariable tv) = freshSub tv
963+ getSubTV _ = fresh
964+
965+-- NonEmpty patterns
966+
967+pattern (:||) :: x -> NonEmpty x -> NonEmpty x
968+pattern (:||) x xs <-
969+ ( \case
970+ (a :| (aa : aaa)) -> Just (a, aa :| aaa)
971+ _ -> Nothing ->
972+ Just (x, xs)
973+ )
517974 where
518− go ::
519− Members
520− '[ Reader SrcSpan,
521− Writer (SrcSpan, Errors),
522− Writer (TypeVariable, SrcSpan),
523− Fresh
524− ]
525− r =>
526− [VarName] ->
527− NType ->
528− Eff r NType
529− go [] x = return x
530− go (p : ps) x = do
531− expectAttrSet x <&> M.lookup p >>= \case
532− Nothing -> NTypeVariable <$> throwSrcTV (KeyNotPresent p)
533− Just t -> go ps t
975+ x :|| xs = NE.cons x xs
976+
977+pattern NESingle :: x -> NonEmpty x
978+pattern NESingle x <-
979+ x :| []
980+ where
981+ NESingle x = x :| []
982+
983+{-# COMPLETE (:||), NESingle #-}
src/Tix/Types.hsnew file+304
@@ -0,0 +1,304 @@
1+module Tix.Types
2+ ( NType (..),
3+ FieldStrictness (..),
4+ AtomicType (..),
5+ DeBruijn (..),
6+ TypeVariable (..),
7+ RangeTypeVariable (..),
8+ rangeTypeVariable,
9+ Scheme (..),
10+ scheme,
11+ Pred (..),
12+ (//),
13+ TraversableNTypes (..),
14+ traverseNTypes,
15+ TerminalNType (..),
16+ )
17+where
18+
19+import Control.Lens hiding (List)
20+import Control.Monad.Freer
21+import Control.Monad.Freer.Reader
22+import Data.Bifunctor
23+import Data.Map (Map)
24+import qualified Data.Map as M
25+import qualified Data.Map.MultiKey.Strict as MKM
26+import Data.Set (Set)
27+import qualified Data.Set as S
28+import Data.Text (Text)
29+import qualified Data.Text as T
30+import Generic.Data
31+import Prettyprinter
32+
33+data Pred
34+ = -- | '(x // y) ~ z'
35+ Update
36+ !NType
37+ -- ^ x
38+ !NType
39+ -- ^ y
40+ !NType
41+ -- ^ z
42+ -- | 'x.a ~ y'
43+ | HasField !FieldStrictness !NType !(Text, Scheme)
44+ | -- | supports '+' operator (strings and numbers)
45+ StringOrNumber !NType
46+ deriving stock (Eq, Ord, Show, Generic)
47+
48+data FieldStrictness = OptionalField | RequiredField
49+ deriving stock (Eq, Ord, Show, Generic)
50+
51+instance MKM.Keyable Pred where
52+ type Key Pred = TypeVariable
53+ getKeys p =
54+ S.toList $
55+ p
56+ ^. traverseNTypes
57+ . to
58+ ( \case
59+ TAtomic _ -> S.empty
60+ TTypeVariable t -> S.singleton t
61+ TBruijn _ -> S.empty
62+ )
63+
64+(//) :: NType -> NType -> NType -> Pred
65+(//) = Update
66+{-# INLINE (//) #-}
67+
68+data Scheme = [Pred] :=> !NType
69+ deriving stock (Eq, Ord, Show, Generic)
70+
71+scheme :: NType -> Scheme
72+scheme t = [] :=> t
73+{-# INLINE scheme #-}
74+
75+data TerminalNType
76+ = TAtomic !AtomicType
77+ | TTypeVariable !TypeVariable
78+ | TBruijn !DeBruijn
79+ deriving stock (Show, Generic)
80+
81+class TraversableNTypes s where
82+ traverseNTypesWith ::
83+ (Applicative f) => (forall x. f x -> f x) -> (TerminalNType -> f TerminalNType) -> s -> f s
84+
85+instance TraversableNTypes NType where
86+ traverseNTypesWith ctx f = \case
87+ NAtomic a -> f' $ TAtomic a
88+ NTypeVariable a -> f' $ TTypeVariable a
89+ NBruijn a -> f' $ TBruijn a
90+ x :-> y -> ctx $ (:->) <$> traverseNextType x <*> traverseNextType y
91+ List t -> ctx $ List <$> traverseNextType t
92+ NAttrSet m -> ctx $ NAttrSet <$> traverseNTypesWith ctx f `traverse` m
93+ where
94+ traverseNextType = traverseNTypesWith ctx f
95+ f' = fmap fromTerminalNType . f
96+ fromTerminalNType :: TerminalNType -> NType
97+ fromTerminalNType = \case
98+ TAtomic a -> NAtomic a
99+ TTypeVariable a -> NTypeVariable a
100+ TBruijn a -> NBruijn a
101+ {-# INLINE traverseNTypesWith #-}
102+
103+instance TraversableNTypes Scheme where
104+ traverseNTypesWith ctx f (cs :=> t) =
105+ ctx $
106+ (:=>) <$> traverseNTypesWith ctx f `traverse` cs <*> traverseNTypesWith ctx f t
107+ {-# INLINE traverseNTypesWith #-}
108+
109+instance TraversableNTypes Pred where
110+ traverseNTypesWith ctx f = \case
111+ (HasField r t (k, h)) ->
112+ HasField r <$> traverseNTypesWith ctx f t <*> ((k,) <$> traverseNTypesWith ctx f h)
113+ (Update x y z) ->
114+ Update
115+ <$> traverseNTypesWith ctx f x
116+ <*> traverseNTypesWith ctx f y
117+ <*> traverseNTypesWith ctx f z
118+ (StringOrNumber x) -> StringOrNumber <$> traverseNTypesWith ctx f x
119+ {-# INLINE traverseNTypesWith #-}
120+
121+traverseNTypes :: TraversableNTypes s => Traversal' s TerminalNType
122+traverseNTypes = traverseNTypesWith id
123+{-# INLINE traverseNTypes #-}
124+
125+data NType
126+ = NTypeVariable !TypeVariable
127+ | NBruijn !DeBruijn
128+ | NAtomic !AtomicType
129+ | !NType :-> !NType
130+ | List !NType
131+ | NAttrSet !(Map Text Scheme)
132+ deriving stock (Eq, Ord, Show, Generic)
133+
134+data AtomicType
135+ = Number
136+ | Bool
137+ | String
138+ | Null
139+ deriving stock (Eq, Ord, Show, Generic)
140+
141+instance Pretty AtomicType where
142+ pretty = viaShow
143+
144+data DeBruijn = DeBruijn !Int !Int
145+ deriving stock (Show, Eq, Ord)
146+
147+data TypeVariable
148+ = TypeVariable !Int
149+ | SubTypeVariable !Int !Int
150+ deriving stock (Eq, Ord)
151+
152+rangeTypeVariable :: TypeVariable -> RangeTypeVariable
153+rangeTypeVariable (TypeVariable x) = RangeTypeVariable x
154+rangeTypeVariable (SubTypeVariable x _) = RangeTypeVariable x
155+{-# INLINE rangeTypeVariable #-}
156+
157+newtype RangeTypeVariable = RangeTypeVariable {unRangeTypeVariable :: Int}
158+ deriving newtype (Eq, Ord, Enum, Bounded)
159+
160+instance Show RangeTypeVariable where
161+ show (RangeTypeVariable n) = "〚" <> show n <> "〛"
162+
163+instance Show TypeVariable where
164+ show = show . pretty
165+
166+instance Pretty TypeVariable where
167+ pretty (TypeVariable n) = "〚" <> pretty n <> "〛"
168+ pretty (SubTypeVariable tv n) = "〚" <> pretty tv <> "." <> pretty n <> "〛"
169+
170+instance Pretty DeBruijn where
171+ pretty (DeBruijn i j) = "〚" <> pretty i <+> pretty j <> "〛"
172+
173+instance Pretty NType where
174+ pretty t = greekifyWith t $ prettyNType False t
175+
176+instance Pretty Scheme where
177+ pretty t = greekifyWith t $ prettyScheme t
178+
179+greekifyWith :: TraversableNTypes t => t -> Eff '[Reader (Map DeBruijn Text), Reader Depth] x -> x
180+greekifyWith t =
181+ run
182+ . runReader (Depth 0)
183+ . runReader (M.fromList $ zip (S.toList $ getAllDeBurjins t) variableNames)
184+
185+newtype Depth = Depth Int
186+
187+descend :: Member (Reader Depth) eff => Eff eff x -> Eff eff x
188+descend = local (\(Depth n) -> Depth $ n + 1)
189+
190+getDepthedDeBurjins :: (TraversableNTypes x, Member (Reader Depth) eff) => x -> Eff eff (Set DeBruijn)
191+getDepthedDeBurjins x = do
192+ Depth depth <- ask
193+ return $ S.mapMonotonic (DeBruijn (- depth)) $ getDeBurjins x
194+
195+getDeBurjin :: (Members '[Reader Depth, Reader (Map DeBruijn Text)] eff) => DeBruijn -> Eff eff (Maybe Text)
196+getDeBurjin (DeBruijn i j) = do
197+ Depth depth <- ask
198+ M.lookup (DeBruijn (i - depth) j) <$> ask
199+
200+type PrettyM a = forall eff. Members '[Reader Depth, Reader (Map DeBruijn Text)] eff => Eff eff a
201+
202+prettyNType :: Bool -> NType -> PrettyM (Doc ann)
203+prettyNType _ (NTypeVariable x) = return $ pretty x
204+prettyNType _ (NBruijn x) =
205+ getDeBurjin x <&> \case
206+ Nothing -> pretty x
207+ Just t -> pretty t
208+prettyNType _ (NAtomic x) = return $ pretty x
209+prettyNType rhs (x :-> y) = descend $ do
210+ x' <- prettyNType True x
211+ y' <- prettyNType False y
212+ return $ group $ (if rhs then bracketed "(" ")" else id) $ x' <+> "->" <> line <> y'
213+prettyNType _ (List x) = descend $ do
214+ x' <- prettyNType True x
215+ return $ group $ bracketed "[" "]" x'
216+prettyNType _ (NAttrSet m) = descend $ do
217+ decls <- prettyDecl `traverse` M.toAscList m
218+ return $ group $ bracketed "{" "}" $ vsep decls
219+ where
220+ prettyDecl :: (Text, Scheme) -> PrettyM (Doc ann)
221+ prettyDecl (name, sch) = do
222+ sch' <- prettyScheme sch
223+ return $ group $ pretty name <+> "=" <> nest 2 (line <> sch' <> ";")
224+
225+bracketed :: Doc ann -> Doc ann -> Doc ann -> Doc ann
226+bracketed l r d = flatAlt (l <> " ") l <> nest 2 d <> line' <> r
227+
228+prettyScheme :: Scheme -> PrettyM (Doc ann)
229+prettyScheme u@(cs :=> t) = do
230+ greekVars <- ask @(Map DeBruijn Text)
231+ foralls <-
232+ getDepthedDeBurjins u <&> \s -> case M.elems . M.restrictKeys greekVars $ s of
233+ [] -> mempty
234+ foralls -> "∀" <+> fillSep (pretty <$> foralls) <> "." <> line
235+ descend $ do
236+ cs' <-
237+ prettyPred `traverse` cs <&> \case
238+ [] -> mempty
239+ cs' -> group (paren (vsep $ punctuate "," cs') <+> "=>" <> line)
240+ t' <- prettyNType False t
241+ return $ group $ foralls <> cs' <> t'
242+ where
243+ prettyPred :: Pred -> PrettyM (Doc ann)
244+ prettyPred (HasField r h (k, v)) = do
245+ h' <- prettyNType False h
246+ v' <- prettyScheme v
247+ let dotOp = case r of
248+ OptionalField -> ".?"
249+ RequiredField -> "."
250+ return $ group $ group (h' <> nest 2 (line' <> dotOp <> pretty k <+> "=")) <> nest 2 (line <> v')
251+ prettyPred (Update x y z) = do
252+ x' <- prettyNType False x
253+ y' <- prettyNType False y
254+ z' <- prettyNType False z
255+ return $ group $ x' <+> "//" <> line <> y' <+> "~" <> line <> z'
256+ prettyPred (StringOrNumber x) = do
257+ x' <- prettyNType False x
258+ return $ "(String | Number)" <+> "~" <+> x'
259+ paren = bracketed "(" ")"
260+
261+-- | Returns the set of all De Bruijn type variables relative to the outermost
262+-- (current) binding context.
263+-- So variables that are bound in one of the inner contexts will have a negative
264+-- binding context number.
265+getAllDeBurjins :: TraversableNTypes x => x -> Set DeBruijn
266+getAllDeBurjins =
267+ view $
268+ traverseNTypesWith (first $ S.mapMonotonic (\(DeBruijn i j) -> DeBruijn (i - 1) j))
269+ . to
270+ ( \case
271+ TAtomic _ -> S.empty
272+ TBruijn b -> S.singleton b
273+ TTypeVariable _ -> S.empty
274+ )
275+
276+-- | Get all De Bruijn type variables that were bound in the the outermost
277+-- (current) binding context.
278+-- Only returns the second indexes.
279+getDeBurjins :: TraversableNTypes x => x -> Set Int
280+getDeBurjins t = getDeBurjins' t 0
281+
282+-- | Gets all De Bruijn variables with the given binding context offset.
283+-- Only returns the second indexes.
284+getDeBurjins' :: TraversableNTypes x => x -> Int -> Set Int
285+getDeBurjins' =
286+ view $
287+ traverseNTypesWith (\(Const f) -> Const (\n -> f (n + 1)))
288+ . to
289+ ( \case
290+ TAtomic _ -> const S.empty
291+ TBruijn (DeBruijn m j) -> \n ->
292+ if m == n
293+ then S.singleton j
294+ else S.empty
295+ TTypeVariable _ -> const S.empty
296+ )
297+
298+variableNames :: [Text]
299+variableNames =
300+ fmap T.pack $
301+ greek <> foldMap (\n -> (<> show n) <$> greek) ([1 :: Int ..] :: [Int])
302+ where
303+ greek :: [String]
304+ greek = ["α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ", "λ", "μ", "ν", "ξ", "ο", "π", "ρ", "σ", "τ", "υ", "φ", "χ", "ψ", "ω"]
stack.yaml+9−3
@@ -17,7 +17,7 @@
1717#
1818# resolver: ./custom-snapshot.yaml
1919# resolver: https://example.com/snapshots/2018-01-01.yaml
20−resolver: nightly-2020-10-18
20+resolver: lts-17.10
2121
2222# User packages to be built.
2323# Various formats can be used as shown in the example below.
@@ -35,8 +35,14 @@ packages:
3535# forks / in-progress versions pinned to a git hash. For example:
3636#
3737extra-deps:
38− - hnix-0.10.1
39− - prettyprinter-1.7.0
38+ - hnix-0.11.0
39+ - acts-0.3.1.0
40+ - finitary-2.0.0.0
41+ - typelits-witnesses-0.4.0.0
42+ - dependent-sum-0.7.1.0
43+ - constraints-extras-0.3.0.2
44+
45+allow-newer: true
4046# - acme-missiles-0.3
4147# - git: https://github.com/commercialhaskell/stack.git
4248# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a
test/Spec.hsdeleted−2
@@ -1,2 +0,0 @@
1−main :: IO ()
2−main = putStrLn "Test suite not yet implemented"
test/golden/importless/0.1.nixnew file+47
@@ -0,0 +1,47 @@
1+{ stdenv
2+, lib
3+, fetchFromGitHub
4+, autoreconfHook
5+, patchelf
6+, pkgconfig
7+, libusb1
8+}:
9+
10+stdenv.mkDerivation rec {
11+ pname = "libusb-compat";
12+ version = "0.1.7";
13+
14+ outputs = [ "out" "dev" ]; # get rid of propagating systemd closure
15+ outputBin = "dev";
16+
17+ nativeBuildInputs = [ autoreconfHook patchelf pkgconfig ];
18+
19+ buildInputs = [ libusb1 ];
20+
21+ src = fetchFromGitHub {
22+ owner = "libusb";
23+ repo = "libusb-compat-0.1";
24+ rev = "v${version}";
25+ sha256 = "1nybccgjs14b3phhaycq2jx1gym4nf6sghvnv9qdfmlqxacx0jz5";
26+ };
27+
28+ patches = stdenv.lib.optional stdenv.hostPlatform.isMusl ./fix-headers.patch;
29+
30+ # without this, libusb-compat is unable to find libusb1
31+ postFixup = ''
32+ find $out/lib -name \*.so\* -type f -exec \
33+ patchelf --set-rpath ${lib.makeLibraryPath buildInputs} {} \;
34+ '';
35+
36+ meta = with stdenv.lib; {
37+ homepage = "https://libusb.info/";
38+ repositories.git = "https://github.com/libusb/libusb-compat-0.1";
39+ description = "cross-platform user-mode USB device library";
40+ longDescription = ''
41+ libusb is a cross-platform user-mode library that provides access to USB devices.
42+ The current API is of 1.0 version (libusb-1.0 API), this library is a wrapper exposing the legacy API.
43+ '';
44+ license = licenses.lgpl2Plus;
45+ platforms = platforms.unix;
46+ };
47+}
test/golden/importless/0.1.txtnew file+40
@@ -0,0 +1,40 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο.
2+( α.hostPlatform = β,
3+ α.lib = γ,
4+ α.mkDerivation =
5+ { buildInputs = [δ];
6+ meta =
7+ { description = String;
8+ homepage = String;
9+ license = ε;
10+ longDescription = String;
11+ platforms = ζ;
12+ repositories = {git = String;};
13+ };
14+ nativeBuildInputs = [η];
15+ outputBin = String;
16+ outputs = [String];
17+ patches = θ;
18+ pname = String;
19+ postFixup = String;
20+ src = ι;
21+ version = String;
22+ } ->
23+ κ,
24+ γ.optional = λ -> String -> θ,
25+ β.isMusl = λ,
26+ μ.licenses = ν,
27+ μ.platforms = ξ,
28+ ν.lgpl2Plus = ε,
29+ ξ.unix = ζ
30+) =>
31+{ autoreconfHook = η;
32+ fetchFromGitHub =
33+ {owner = String; repo = String; rev = String; sha256 = String;} -> ι;
34+ lib = ο;
35+ libusb1 = δ;
36+ patchelf = η;
37+ pkgconfig = η;
38+ stdenv = α;
39+} ->
40+κ
test/golden/importless/0.10.nixnew file+39
@@ -0,0 +1,39 @@
1+{ stdenv, fetchurl, boost, zlib, libevent, openssl, python, pkgconfig, bison
2+, flex, twisted
3+}:
4+
5+stdenv.mkDerivation rec {
6+ pname = "thrift";
7+ version = "0.10.0";
8+
9+ src = fetchurl {
10+ url = "https://archive.apache.org/dist/thrift/${version}/${pname}-${version}.tar.gz";
11+ sha256 = "02x1xw0l669idkn6xww39j60kqxzcbmim4mvpb5h9nz8wqnx1292";
12+ };
13+
14+ #enableParallelBuilding = true; problems on hydra
15+
16+ # Workaround to make the python wrapper not drop this package:
17+ # pythonFull.buildEnv.override { extraLibs = [ thrift ]; }
18+ pythonPath = [];
19+
20+ nativeBuildInputs = [ pkgconfig ];
21+ buildInputs = [
22+ boost zlib libevent openssl python bison flex twisted
23+ ];
24+
25+ preConfigure = "export PY_PREFIX=$out";
26+
27+ # TODO: package boost-test, so we can run the test suite. (Currently it fails
28+ # to find libboost_unit_test_framework.a.)
29+ configureFlags = [ "--enable-tests=no" ];
30+ doCheck = false;
31+
32+ meta = with stdenv.lib; {
33+ description = "Library for scalable cross-language services";
34+ homepage = "http://thrift.apache.org/";
35+ license = licenses.asl20;
36+ platforms = platforms.linux ++ platforms.darwin;
37+ maintainers = [ maintainers.bjornfor ];
38+ };
39+}
test/golden/importless/0.10.txtnew file+42
@@ -0,0 +1,42 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ.
2+( β.lib = γ,
3+ β.mkDerivation =
4+ { buildInputs = [δ];
5+ configureFlags = [String];
6+ doCheck = Bool;
7+ meta =
8+ { description = String;
9+ homepage = String;
10+ license = ε;
11+ maintainers = [ζ];
12+ platforms = [η];
13+ };
14+ nativeBuildInputs = [θ];
15+ pname = String;
16+ preConfigure = String;
17+ pythonPath = ∀ α. [α];
18+ src = ι;
19+ version = String;
20+ } ->
21+ κ,
22+ γ.licenses = λ,
23+ γ.maintainers = μ,
24+ γ.platforms = ν,
25+ λ.asl20 = ε,
26+ μ.bjornfor = ζ,
27+ ν.linux = [η],
28+ ξ.darwin = [η]
29+) =>
30+{ bison = δ;
31+ boost = δ;
32+ fetchurl = {sha256 = String; url = String;} -> ι;
33+ flex = δ;
34+ libevent = δ;
35+ openssl = δ;
36+ pkgconfig = θ;
37+ python = δ;
38+ stdenv = β;
39+ twisted = δ;
40+ zlib = δ;
41+} ->
42+κ
test/golden/importless/0.11.1.nixnew file+22
@@ -0,0 +1,22 @@
1+{ stdenv, fetchurl, gmp }:
2+
3+stdenv.mkDerivation {
4+ name = "isl-0.11.1"; # CLooG 0.16.3 fails to build with ISL 0.08.
5+
6+ src = fetchurl {
7+ url = "https://src.fedoraproject.org/repo/pkgs/gcc/isl-0.11.1.tar.bz2/bce1586384d8635a76d2f017fb067cd2/isl-0.11.1.tar.bz2";
8+ sha256 = "13d9cqa5rzhbjq0xf0b2dyxag7pqa72xj9dhsa03m8ccr1a4npq9";
9+ };
10+
11+ buildInputs = [ gmp ];
12+ patches = [ ./fix-gcc-build.diff ];
13+
14+ enableParallelBuilding = true;
15+
16+ meta = {
17+ homepage = "https://www.kotnet.org/~skimo/isl/";
18+ license = stdenv.lib.licenses.lgpl21;
19+ description = "A library for manipulating sets and relations of integer points bounded by linear constraints";
20+ platforms = stdenv.lib.platforms.all;
21+ };
22+}
test/golden/importless/0.11.1.txtnew file+18
@@ -0,0 +1,18 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ enableParallelBuilding = Bool;
6+ meta =
7+ {description = String; homepage = String; license = δ; platforms = ε;};
8+ name = String;
9+ patches = [String];
10+ src = ζ;
11+ } ->
12+ η,
13+ β.licenses = θ,
14+ θ.lgpl21 = δ,
15+ ι.platforms = κ,
16+ κ.all = ε
17+) =>
18+{fetchurl = {sha256 = String; url = String;} -> ζ; gmp = γ; stdenv = α;} -> η
test/golden/importless/0.11.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage }:
2+
3+callPackage ./generic.nix {
4+ version = "0.11.4";
5+ sha256 = "1sykp9sji6f564s7bz0cvnr9w5x92n0l1r1djf1bl7jvv2mi1mcb";
6+}
test/golden/importless/0.11.txtnew file+1
@@ -0,0 +1 @@
1+∀ α. {callPackage = String -> {sha256 = String; version = String;} -> α;} -> α
test/golden/importless/0.12.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage }:
2+
3+callPackage ./generic.nix {
4+ version = "0.12.2";
5+ sha256 = "1gc286ag6plk5kxw7jzr32cp3n5rwydj1z7rds1rfd0fyq7an404";
6+}
test/golden/importless/0.12.txtnew file+1
@@ -0,0 +1 @@
1+∀ α. {callPackage = String -> {sha256 = String; version = String;} -> α;} -> α
test/golden/importless/0.13.nixnew file+514
@@ -0,0 +1,514 @@
1+{ janePackage
2+, ctypes
3+, dune-configurator
4+, num
5+, octavius
6+, ppxlib
7+, re
8+, openssl
9+}:
10+
11+rec {
12+
13+ ocaml-compiler-libs = janePackage {
14+ pname = "ocaml-compiler-libs";
15+ version = "0.12.1";
16+ hash = "0hpk54fcsfcjp536fgwr80mjjf88hjk58q7jwnyrhk2ljd8xzgiv";
17+ meta.description = "OCaml compiler libraries repackaged";
18+ };
19+
20+ sexplib0 = janePackage {
21+ pname = "sexplib0";
22+ hash = "1b1bk0xs1hqa12qs5y4h1yl3mq6xml4ya2570dyhdn1j0fbw4g3y";
23+ meta.description = "Library containing the definition of S-expressions and some base converters";
24+ };
25+
26+ base = janePackage {
27+ pname = "base";
28+ version = "0.13.1";
29+ hash = "08a5aymcgr5svvm8v0v20msd5cad64m6maakfbhz4172g7kd9jzw";
30+ meta.description = "Full standard library replacement for OCaml";
31+ propagatedBuildInputs = [ sexplib0 ];
32+ };
33+
34+ stdio = janePackage {
35+ pname = "stdio";
36+ hash = "1hkj9vh8n8p3n5pvx7053xis1pfmqd8p7shjyp1n555xzimfxzgh";
37+ meta.description = "Standard IO library for OCaml";
38+ propagatedBuildInputs = [ base ];
39+ };
40+
41+ ppx_sexp_conv = janePackage {
42+ pname = "ppx_sexp_conv";
43+ hash = "0jkhwmkrfq3ss6bv6i3m871alcr4xpngs6ci6bmzv3yfl7s8bwdf";
44+ meta.description = "[@@deriving] plugin to generate S-expression conversion functions";
45+ propagatedBuildInputs = [ ppxlib ];
46+ };
47+
48+ ppx_here = janePackage {
49+ pname = "ppx_here";
50+ hash = "1ahidrrjsyi0al06bhv5h6aqmdk7ryz8dybfhqjsn1zp9q056q35";
51+ meta.description = "Expands [%here] into its location";
52+ propagatedBuildInputs = [ ppxlib ];
53+ };
54+
55+ ppx_compare = janePackage {
56+ pname = "ppx_compare";
57+ hash = "14pnqa47gsvq93z1b8wb5pyq8zw90aaw71j4pwlyid4s86px454j";
58+ meta.description = "Generation of comparison functions from types";
59+ propagatedBuildInputs = [ ppxlib ];
60+ };
61+
62+ ppx_cold = janePackage {
63+ pname = "ppx_cold";
64+ hash = "0wnfwsgbzk4i5aqjlcaqp6lkvrq5345vazryvx2klbbrd4759h9f";
65+ meta.description = "Expands [@cold] into [@inline never][@specialise never][@local never]";
66+ propagatedBuildInputs = [ ppxlib ];
67+ };
68+
69+ ppx_assert = janePackage {
70+ pname = "ppx_assert";
71+ hash = "08dada2xcp3w5mir90z56qrdyd317lygml4qlfssj897534bwiqr";
72+ meta.description = "Assert-like extension nodes that raise useful errors on failure";
73+ propagatedBuildInputs = [ ppx_cold ppx_compare ppx_here ppx_sexp_conv ];
74+ };
75+
76+ ppx_inline_test = janePackage {
77+ pname = "ppx_inline_test";
78+ hash = "135qzbhqy33lmigbq1rakr9i3y59y3pczh4laanqjyss9b9kfs60";
79+ meta.description = "Syntax extension for writing in-line tests in ocaml code";
80+ propagatedBuildInputs = [ ppxlib ];
81+ };
82+
83+ ppx_custom_printf = janePackage {
84+ pname = "ppx_custom_printf";
85+ hash = "0kvfkdk4wg2z8x705bajvl1f8wiyy3aya203wdzc9425h73nqm5p";
86+ meta.description = "Printf-style format-strings for user-defined string conversion";
87+ propagatedBuildInputs = [ ppx_sexp_conv ];
88+ };
89+
90+ fieldslib = janePackage {
91+ pname = "fieldslib";
92+ hash = "0nsl0i9vjk73pr70ksxqa65rd5v84jzdaazryfdy6i4a5sfg7bxa";
93+ meta.description = "Syntax extension to define first class values representing record fields, to get and set record fields, iterate and fold over all fields of a record and create new record values";
94+ propagatedBuildInputs = [ base ];
95+ };
96+
97+ ppx_fields_conv = janePackage {
98+ pname = "ppx_fields_conv";
99+ hash = "0biw0fgphj522bj9wgjk263i2w92vnpaabzr5zn0grihp4yqy8w4";
100+ meta.description = "Generation of accessor and iteration functions for ocaml records";
101+ propagatedBuildInputs = [ fieldslib ppxlib ];
102+ };
103+
104+ variantslib = janePackage {
105+ pname = "variantslib";
106+ hash = "04nps65v1n0nv9n1c1kj5k9jyqsfsxb6h2w3vf6cibhjr5m7z8xc";
107+ meta.description = "Part of Jane Street's Core library";
108+ propagatedBuildInputs = [ base ];
109+ };
110+
111+ ppx_variants_conv = janePackage {
112+ pname = "ppx_variants_conv";
113+ hash = "1ssinizz11bws06qzjky486cj1zrflij1f7hi16d02j40qmyjz7b";
114+ meta.description = "Generation of accessor and iteration functions for ocaml variant types";
115+ propagatedBuildInputs = [ variantslib ppxlib ];
116+ };
117+
118+ ppx_expect = janePackage {
119+ pname = "ppx_expect";
120+ hash = "1hhcga960wjvhcx5pk7rcywl1p9n2ycvqa294n24m8dhzqia6i47";
121+ meta.description = "Cram like framework for OCaml";
122+ propagatedBuildInputs = [ ppx_assert ppx_custom_printf ppx_fields_conv ppx_inline_test ppx_variants_conv re ];
123+ };
124+
125+ ppx_enumerate = janePackage {
126+ pname = "ppx_enumerate";
127+ hash = "0hsg6f2nra1mb35jdgym5rf7spm642bs6qqifbikm9hg8f7z3ql4";
128+ meta.description = "Generate a list containing all values of a finite type";
129+ propagatedBuildInputs = [ ppxlib ];
130+ };
131+
132+ ppx_hash = janePackage {
133+ pname = "ppx_hash";
134+ hash = "1f7mfyx4wgk67hchi57w3142m61ka3vgy1969cbkwr3akv6ifly2";
135+ meta.description = "A ppx rewriter that generates hash functions from type expressions and definitions";
136+ propagatedBuildInputs = [ ppx_compare ppx_sexp_conv ];
137+ };
138+
139+ ppx_js_style = janePackage {
140+ pname = "ppx_js_style";
141+ hash = "1zlhcn0an5k9xjymk5z5m2vqi8zajy6nvcbl5sdn19pjl3zv645x";
142+ meta.description = "Code style checker for Jane Street Packages";
143+ propagatedBuildInputs = [ octavius ppxlib ];
144+ };
145+
146+ ppx_base = janePackage {
147+ pname = "ppx_base";
148+ hash = "0dkqc85x7bgbb6lgx9rghvj1q4dpdgy9qgjl88ywi4c8l9rgnnkz";
149+ meta.description = "Base set of ppx rewriters";
150+ propagatedBuildInputs = [ ppx_cold ppx_enumerate ppx_hash ppx_js_style ];
151+ };
152+
153+ ppx_bench = janePackage {
154+ pname = "ppx_bench";
155+ hash = "0snmy05d3jgihmppixx3dzamkykijqa2v43vpd7q4z8dpnip620g";
156+ meta.description = "Syntax extension for writing in-line benchmarks in ocaml code";
157+ propagatedBuildInputs = [ ppx_inline_test ];
158+ };
159+
160+ ppx_sexp_message = janePackage {
161+ pname = "ppx_sexp_message";
162+ hash = "03jhx3ajcv22iwxkg1jf1jjvd14gyrwi1yc6c5ryqi5ha0fywfw6";
163+ meta.description = "A ppx rewriter for easy construction of s-expressions";
164+ propagatedBuildInputs = [ ppx_here ppx_sexp_conv ];
165+ };
166+
167+ splittable_random = janePackage {
168+ pname = "splittable_random";
169+ hash = "1kgcd6k31vsd7638g8ip77bp1b7vzgkbvgvij4jm2igl09132r85";
170+ meta.description = "PRNG that can be split into independent streams";
171+ propagatedBuildInputs = [ base ppx_assert ppx_bench ppx_sexp_message ];
172+ };
173+
174+ ppx_let = janePackage {
175+ pname = "ppx_let";
176+ hash = "0qplsvbv10h7kwf6dhhgvi001gfphv1v66s83zjr5zbypyaarg5y";
177+ meta.description = "Monadic let-bindings";
178+ propagatedBuildInputs = [ ppxlib ];
179+ };
180+
181+ base_quickcheck = janePackage {
182+ pname = "base_quickcheck";
183+ hash = "0ik8llm01m2xap4gia0vpsh7yq311hph7a2kf5109ag4988s8p0w";
184+ meta.description = "Randomized testing framework, designed for compatibility with Base";
185+ propagatedBuildInputs = [ ppx_base ppx_fields_conv ppx_let splittable_random ];
186+ };
187+
188+ ppx_stable = janePackage {
189+ pname = "ppx_stable";
190+ hash = "0h7ls1bs0bsd8c4na4aj0nawwhvfy50ybm7sza7yz3qli9jammjk";
191+ meta.description = "Stable types conversions generator";
192+ propagatedBuildInputs = [ ppxlib ];
193+ };
194+
195+ bin_prot = janePackage {
196+ pname = "bin_prot";
197+ hash = "1nnr21rljlfglmhiji27d7c1d6gg5fk4cc5rl3750m98w28mfdjw";
198+ meta.description = "A binary protocol generator";
199+ propagatedBuildInputs = [ ppx_compare ppx_custom_printf ppx_fields_conv ppx_variants_conv ];
200+ };
201+
202+ ppx_bin_prot = janePackage {
203+ pname = "ppx_bin_prot";
204+ hash = "14nfjgqisdqqg8wg4qzvc859zil82y0qpr8fm4nhq05mgxp37iyc";
205+ meta.description = "Generation of bin_prot readers and writers from types";
206+ propagatedBuildInputs = [ bin_prot ppx_here ];
207+ };
208+
209+ ppx_fail = janePackage {
210+ pname = "ppx_fail";
211+ hash = "165mikjg4a1lahq3n9q9y2h36jbln5g3l2hapx17irvf0l0c3vn5";
212+ meta.description = "Add location to calls to failwiths";
213+ propagatedBuildInputs = [ ppx_here ];
214+ };
215+
216+ jst-config = janePackage {
217+ pname = "jst-config";
218+ hash = "15lj6f83hz555xhjy9aayl3adqwgl1blcjnja693a1ybi3ca8w0y";
219+ meta.description = "Compile-time configuration for Jane Street libraries";
220+ buildInputs = [ ppx_assert ];
221+ };
222+
223+ ppx_optcomp = janePackage {
224+ pname = "ppx_optcomp";
225+ hash = "13db395swqf7v87pgl9qiyj4igmvj57hpl8blx3kkrzj6ddh38a8";
226+ meta.description = "Optional compilation for OCaml";
227+ propagatedBuildInputs = [ ppxlib ];
228+ };
229+
230+ jane-street-headers = janePackage {
231+ pname = "jane-street-headers";
232+ hash = "1qjg2ari0xn40dlbk0h9xkwr37k97ldkxpkv792fbl6wc2jlv3x5";
233+ meta.description = "Jane Street C header files";
234+ };
235+
236+ time_now = janePackage {
237+ pname = "time_now";
238+ hash = "1if234kz1ssmv22c0vh1cwhbivab6yy3xvy37ny1q4k5ibjc3v0n";
239+ meta.description = "Reports the current time";
240+ buildInputs = [ jst-config ppx_optcomp ];
241+ propagatedBuildInputs = [ jane-street-headers base ppx_base ];
242+ };
243+
244+ ppx_module_timer = janePackage {
245+ pname = "ppx_module_timer";
246+ hash = "13kv5fzwf41wsaksj41hnvcpx8pnbmzcainlq6f5shj9671hpnhb";
247+ meta.description = "Ppx rewriter that records top-level module startup times";
248+ propagatedBuildInputs = [ time_now ];
249+ };
250+
251+ ppx_optional = janePackage {
252+ pname = "ppx_optional";
253+ hash = "1nwb9jvmszxddj9wxgv9g02qhr10yymm2q1w1gjfqd97m2m1mx4n";
254+ meta.description = "Pattern matching on flat options";
255+ propagatedBuildInputs = [ ppxlib ];
256+ };
257+
258+ ppx_pipebang = janePackage {
259+ pname = "ppx_pipebang";
260+ hash = "0ybj0flsi95pf13ayzz1lcrqhqvkv1lm2dz6y8w49f12583496mc";
261+ meta.description = "A ppx rewriter that inlines reverse application operators `|>` and `|!`";
262+ propagatedBuildInputs = [ ppxlib ];
263+ };
264+
265+ ppx_sexp_value = janePackage {
266+ pname = "ppx_sexp_value";
267+ hash = "18k5015awv9yjl44cvdmp3pn894cgsxmn5s7picxapm9675xqcg9";
268+ meta.description = "A ppx rewriter that simplifies building s-expressions from ocaml values";
269+ propagatedBuildInputs = [ ppx_here ppx_sexp_conv ];
270+ };
271+
272+ typerep = janePackage {
273+ pname = "typerep";
274+ hash = "116hlifww2cqq1i9vwpl7ziwkc1na7p9icqi9srpdxnvn8ibcsas";
275+ meta.description = "Typerep is a library for runtime types";
276+ propagatedBuildInputs = [ base ];
277+ };
278+
279+ ppx_typerep_conv = janePackage {
280+ pname = "ppx_typerep_conv";
281+ hash = "1jlmga9i79inr412l19n4vvmgafzp1bznqxwhy42x309wblbhxx9";
282+ meta.description = "Generation of runtime types from type declarations";
283+ propagatedBuildInputs = [ ppxlib typerep ];
284+ };
285+
286+ ppx_jane = janePackage {
287+ pname = "ppx_jane";
288+ hash = "1a86rvnry8lvjhsg2k73f5bgz7l2962k5i49yzmzn8w66kj0yz60";
289+ meta.description = "Standard Jane Street ppx rewriters";
290+ propagatedBuildInputs = [ base_quickcheck ppx_bench ppx_bin_prot ppx_expect ppx_fail ppx_module_timer ppx_optcomp ppx_optional ppx_pipebang ppx_sexp_value ppx_stable ppx_typerep_conv ];
291+ };
292+
293+ base_bigstring = janePackage {
294+ pname = "base_bigstring";
295+ hash = "1i3zr8bn71l442vl5rrvjpwphx20frp2vaw1qc05d348j76sxfp7";
296+ meta.description = "String type based on [Bigarray], for use in I/O and C-bindings";
297+ propagatedBuildInputs = [ ppx_jane ];
298+ };
299+
300+ parsexp = janePackage {
301+ pname = "parsexp";
302+ hash = "0fsxy5lpsvfadj8m2337j8iprs294dfikqxjcas7si74nskx6l38";
303+ meta.description = "S-expression parsing library";
304+ propagatedBuildInputs = [ base sexplib0 ];
305+ };
306+
307+ sexplib = janePackage {
308+ pname = "sexplib";
309+ hash = "059ypcyirw00x6dqa33x49930pwxcr3i72qz5pf220js2ai2nzhn";
310+ meta.description = "Library for serializing OCaml values to and from S-expressions";
311+ propagatedBuildInputs = [ num parsexp ];
312+ };
313+
314+ core_kernel = janePackage {
315+ version = "0.13.1";
316+ pname = "core_kernel";
317+ hash = "1ynyz6jkf23q0cwbn6kv06mgyjd644qxb0qkrydq0cglcaa4kjhp";
318+ meta.description = "System-independent part of Core";
319+ buildInputs = [ jst-config ];
320+ propagatedBuildInputs = [ base_bigstring sexplib ];
321+ };
322+
323+ spawn = janePackage {
324+ pname = "spawn";
325+ hash = "1w003k1kw1lmyiqlk58gkxx8rac7dchiqlz6ah7aj7bh49b36ppf";
326+ meta.description = "Spawning sub-processes";
327+ buildInputs = [ ppx_expect ];
328+ };
329+
330+ core = janePackage {
331+ pname = "core";
332+ hash = "1i5z9myl6i7axd8dz4b71gdsz9la6k07ib9njr4bn12yn0y76b1m";
333+ meta.description = "System-independent part of Core";
334+ buildInputs = [ jst-config ];
335+ propagatedBuildInputs = [ core_kernel spawn ];
336+ };
337+
338+ async_kernel = janePackage {
339+ pname = "async_kernel";
340+ hash = "1rrbyy3pyh31qwv0jiarhpgdyq2z2gx6axmaplgpxshk4qx6gsld";
341+ meta.description = "Monadic concurrency library";
342+ propagatedBuildInputs = [ core_kernel ];
343+ };
344+
345+ protocol_version_header = janePackage {
346+ pname = "protocol_version_header";
347+ hash = "19wscd81jlj355f9din1sg21m3af456a0id2a37bx38r390wrghc";
348+ meta.description = "Protocol versioning";
349+ propagatedBuildInputs = [ core_kernel ];
350+ };
351+
352+ async_rpc_kernel = janePackage {
353+ pname = "async_rpc_kernel";
354+ hash = "1k3f2psyd1xcf7nkk0q1fq57yyhfqbzyynsz821n7mrnm37simac";
355+ meta.description = "Platform-independent core of Async RPC library";
356+ propagatedBuildInputs = [ async_kernel protocol_version_header ];
357+ };
358+
359+ async_unix = janePackage {
360+ pname = "async_unix";
361+ version = "0.13.1";
362+ hash = "1sb8grbj4bv6ih3yfdihxhn5c9rqczr56b5bhl85wy2mi92m17xv";
363+ meta.description = "Monadic concurrency library";
364+ propagatedBuildInputs = [ async_kernel core ];
365+ };
366+
367+ async_extra = janePackage {
368+ pname = "async_extra";
369+ hash = "06q1farx7dwi4h490xi1azq7ym57ih2d23sq17g2jfvw889kf4n1";
370+ meta.description = "Monadic concurrency library";
371+ propagatedBuildInputs = [ async_rpc_kernel async_unix ];
372+ };
373+
374+ textutils = janePackage {
375+ pname = "textutils";
376+ hash = "1wnyqj9dzfgl0kddmdl4n9rkl16hwy432dd2i4ksvk2z5g9kkb0d";
377+ meta.description = "Text output utilities";
378+ propagatedBuildInputs = [ core ];
379+ };
380+
381+ async = janePackage {
382+ pname = "async";
383+ hash = "002j9yxpw0ghi12a84163vaqa3n9h8j35f4i72nbxnilxwvy95sr";
384+ meta.description = "Monadic concurrency library";
385+ propagatedBuildInputs = [ async_rpc_kernel async_unix textutils ];
386+ };
387+
388+ async_find = janePackage {
389+ pname = "async_find";
390+ hash = "0l8cfhyrx2rb2avdcfx5m70aj6rx2d57qxqvfycad5afqz4xx2n9";
391+ meta.description = "Directory traversal with Async";
392+ propagatedBuildInputs = [ async ];
393+ };
394+
395+ re2 = janePackage {
396+ pname = "re2";
397+ hash = "0hmizznlzilynn5kh6149bbpkfw2l0xi7zi1y1fxfww2ma3wpim0";
398+ meta.description = "OCaml bindings for RE2, Google's regular expression library";
399+ propagatedBuildInputs = [ core_kernel ];
400+ prePatch = ''
401+ substituteInPlace src/re2_c/dune --replace 'CXX=g++' 'CXX=c++'
402+ substituteInPlace src/dune --replace '(cxx_flags (:standard \ -pedantic) (-I re2_c/libre2))' '(cxx_flags (:standard \ -pedantic) (-I re2_c/libre2) (-x c++))'
403+ '';
404+ };
405+
406+ shell = janePackage {
407+ pname = "shell";
408+ hash = "190ymhm0z9b7hngbcpg88wwrfxwfcdh339d7rd2xhmrhi4z99r18";
409+ meta.description = "Yet another implementation of fork&exec and related functionality";
410+ buildInputs = [ jst-config ];
411+ propagatedBuildInputs = [ re2 textutils ];
412+ };
413+
414+ async_shell = janePackage {
415+ pname = "async_shell";
416+ hash = "0bfxyvdmyv23zfr49pb4c3bgfkjr4s3nb3z07xrw6szia3j1kp4j";
417+ meta.description = "Shell helpers for Async";
418+ propagatedBuildInputs = [ async shell ];
419+ };
420+
421+ async_ssl = janePackage {
422+ pname = "async_ssl";
423+ useDune2 = true;
424+ hash = "0z5dbiam5k7ipx9ph4r8nqv0a1ldx1ymxw3xjxgrdjda90lmwf2k";
425+ meta.description = "Async wrappers for SSL";
426+ buildInputs = [ dune-configurator ];
427+ propagatedBuildInputs = [ async ctypes openssl ];
428+ };
429+
430+ core_bench = janePackage {
431+ pname = "core_bench";
432+ hash = "1nk0i3z8rqrljbf4bc7ljp71g0a4361nh85s2ang0lgxri74zacm";
433+ meta.description = "Benchmarking library";
434+ propagatedBuildInputs = [ textutils ];
435+ };
436+
437+ core_extended = janePackage {
438+ pname = "core_extended";
439+ hash = "0zh1wwkg5cxkz633dl9zbbl65aksvzb5mss1q8f7w6i1sv3n0135";
440+ meta.description = "Extra components that are not as closely vetted or as stable as Core";
441+ propagatedBuildInputs = [ core ];
442+ };
443+
444+ sexp_pretty = janePackage {
445+ pname = "sexp_pretty";
446+ hash = "1a59xc9frmvi7n0i32dzs8gpf5ral80xkwv97a13zv5cyg8l6216";
447+ meta.description = "S-expression pretty-printer";
448+ propagatedBuildInputs = [ ppx_base re sexplib ];
449+ };
450+
451+ expect_test_helpers_kernel = janePackage {
452+ pname = "expect_test_helpers_kernel";
453+ hash = "11m0i7mj6b1cmqnwhmsrqdc814s0lk3sip8rh97k75grngazmjvn";
454+ meta.description = "Helpers for writing expectation tests";
455+ buildInputs = [ ppx_jane ];
456+ propagatedBuildInputs = [ core_kernel sexp_pretty ];
457+ };
458+
459+ expect_test_helpers = janePackage {
460+ pname = "expect_test_helpers";
461+ hash = "0sw9yam8d9hdam8p194q0hgc4i26vvwj5qi2cba1jxfhdzhy8jdd";
462+ meta.description = "Async helpers for writing expectation tests";
463+ propagatedBuildInputs = [ async expect_test_helpers_kernel ];
464+ };
465+
466+ patience_diff = janePackage {
467+ pname = "patience_diff";
468+ hash = "012rlbnw21yq2lsbfk3f7l4m4qq3jdx238146z36v54vnhhs6r2r";
469+ meta.description = "Diff library using Bram Cohen's patience diff algorithm";
470+ propagatedBuildInputs = [ core_kernel ];
471+ };
472+
473+ ecaml = janePackage {
474+ pname = "ecaml";
475+ hash = "0jmmsi1m7d4cl5mnw6v9h4ng29anwxy73a6qfi28lgpzafn452bc";
476+ meta.description = "Library for writing Emacs plugin in OCaml";
477+ propagatedBuildInputs = [ async expect_test_helpers_kernel ];
478+ };
479+
480+ ### Packages at version 0.11, with dependencies at version 0.12
481+
482+ configurator = janePackage {
483+ pname = "configurator";
484+ version = "0.11.0";
485+ hash = "0h686630cscav7pil8c3w0gbh6rj4b41dvbnwmicmlkc746q5bfk";
486+ propagatedBuildInputs = [ stdio ];
487+ meta.description = "Helper library for gathering system configuration";
488+ };
489+
490+ ppx_core = janePackage {
491+ pname = "ppx_core";
492+ version = "0.11.0";
493+ hash = "11hgm9mxig4cm3c827f6dns9mjv3pf8g6skf10x0gw9xnp1dmzmx";
494+ propagatedBuildInputs = [ ppxlib ];
495+ meta.description = "Deprecated (see ppxlib)";
496+ };
497+
498+ ppx_driver = janePackage {
499+ pname = "ppx_driver";
500+ version = "0.11.0";
501+ hash = "00kfx6js2kxk57k4v7hiqvwk7h35whgjihnxf75m82rnaf4yzvfi";
502+ propagatedBuildInputs = [ ppxlib ];
503+ meta.description = "Deprecated (see ppxlib)";
504+ };
505+
506+ ppx_type_conv = janePackage {
507+ pname = "ppx_type_conv";
508+ version = "0.11.0";
509+ hash = "04dbrglqqhkas25cpjz8xhjcbpk141c35qggzw66bn69izczfmaf";
510+ propagatedBuildInputs = [ ppxlib ];
511+ meta.description = "Deprecated (see ppxlib)";
512+ };
513+
514+}
test/golden/importless/0.14.1.nixnew file+21
@@ -0,0 +1,21 @@
1+{ stdenv, fetchurl, gmp }:
2+
3+stdenv.mkDerivation rec {
4+ name = "isl-0.14.1";
5+
6+ src = fetchurl {
7+ url = "http://isl.gforge.inria.fr/${name}.tar.xz";
8+ sha256 = "0xa6xagah5rywkywn19rzvbvhfvkmylhcxr6z9z7bz29cpiwk0l8";
9+ };
10+
11+ buildInputs = [ gmp ];
12+
13+ enableParallelBuilding = true;
14+
15+ meta = {
16+ homepage = "https://www.kotnet.org/~skimo/isl/";
17+ license = stdenv.lib.licenses.lgpl21;
18+ description = "A library for manipulating sets and relations of integer points bounded by linear constraints";
19+ platforms = stdenv.lib.platforms.all;
20+ };
21+}
test/golden/importless/0.14.1.txtnew file+17
@@ -0,0 +1,17 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ enableParallelBuilding = Bool;
6+ meta =
7+ {description = String; homepage = String; license = δ; platforms = ε;};
8+ name = String;
9+ src = ζ;
10+ } ->
11+ η,
12+ β.licenses = θ,
13+ θ.lgpl21 = δ,
14+ ι.platforms = κ,
15+ κ.all = ε
16+) =>
17+{fetchurl = {sha256 = String; url = String;} -> ζ; gmp = γ; stdenv = α;} -> η
test/golden/importless/0.14.nixnew file+25
@@ -0,0 +1,25 @@
1+{ lib, buildPythonPackage, fetchPypi, h11, enum34, pytest }:
2+
3+buildPythonPackage rec {
4+ pname = "wsproto";
5+ version = "0.14.1";
6+
7+ src = fetchPypi {
8+ inherit pname version;
9+ sha256 = "051s127qb5dladxa14n9nqajwq7xki1dz1was5r5v9df5a0jq8pd";
10+ };
11+
12+ propagatedBuildInputs = [ h11 enum34 ];
13+
14+ checkInputs = [ pytest ];
15+
16+ checkPhase = ''
17+ py.test
18+ '';
19+
20+ meta = with lib; {
21+ description = "Pure Python, pure state-machine WebSocket implementation";
22+ homepage = "https://github.com/python-hyper/wsproto/";
23+ license = licenses.mit;
24+ };
25+}
test/golden/importless/0.17.1.nixnew file+21
@@ -0,0 +1,21 @@
1+{ stdenv, fetchurl, gmp }:
2+
3+stdenv.mkDerivation rec {
4+ name = "isl-0.17.1";
5+
6+ src = fetchurl {
7+ url = "http://isl.gforge.inria.fr/${name}.tar.xz";
8+ sha256 = "be152e5c816b477594f4c6194b5666d8129f3a27702756ae9ff60346a8731647";
9+ };
10+
11+ buildInputs = [ gmp ];
12+
13+ enableParallelBuilding = true;
14+
15+ meta = {
16+ homepage = "https://www.kotnet.org/~skimo/isl/";
17+ license = stdenv.lib.licenses.lgpl21;
18+ description = "A library for manipulating sets and relations of integer points bounded by linear constraints";
19+ platforms = stdenv.lib.platforms.all;
20+ };
21+}
test/golden/importless/0.17.1.txtnew file+17
@@ -0,0 +1,17 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ enableParallelBuilding = Bool;
6+ meta =
7+ {description = String; homepage = String; license = δ; platforms = ε;};
8+ name = String;
9+ src = ζ;
10+ } ->
11+ η,
12+ β.licenses = θ,
13+ θ.lgpl21 = δ,
14+ ι.platforms = κ,
15+ κ.all = ε
16+) =>
17+{fetchurl = {sha256 = String; url = String;} -> ζ; gmp = γ; stdenv = α;} -> η
test/golden/importless/0.18.0.nixnew file+63
@@ -0,0 +1,63 @@
1+{ fetchurl, stdenv, gmp, isl }:
2+
3+stdenv.mkDerivation rec {
4+ name = "cloog-0.18.0";
5+
6+ src = fetchurl {
7+ url = "http://www.bastoul.net/cloog/pages/download/count.php3?url=./${name}.tar.gz";
8+ sha256 = "1c4aa8dde7886be9cbe0f9069c334843b21028f61d344a2d685f88cb1dcf2228";
9+ };
10+
11+ buildInputs = [ gmp ];
12+
13+ propagatedBuildInputs = [ isl ];
14+
15+ configureFlags = [ "--with-isl=system" ];
16+
17+ enableParallelBuilding = true;
18+
19+ doCheck = true;
20+
21+ meta = {
22+ description = "Library that generates loops for scanning polyhedra";
23+
24+ longDescription = ''
25+ CLooG is a free software library to generate code for scanning
26+ Z-polyhedra. That is, it finds a code (e.g., in C, FORTRAN...) that
27+ reaches each integral point of one or more parameterized polyhedra.
28+ CLooG has been originally written to solve the code generation problem
29+ for optimizing compilers based on the polytope model. Nevertheless it
30+ is used now in various area e.g., to build control automata for
31+ high-level synthesis or to find the best polynomial approximation of a
32+ function. CLooG may help in any situation where scanning polyhedra
33+ matters. While the user has full control on generated code quality,
34+ CLooG is designed to avoid control overhead and to produce a very
35+ effective code.
36+ '';
37+
38+ homepage = "http://www.cloog.org/";
39+
40+ license = stdenv.lib.licenses.gpl2Plus;
41+
42+ /* Leads to an ICE on Cygwin:
43+
44+ make[3]: Entering directory `/tmp/nix-build-9q5gw5m37q5l4f0kjfv9ar8fsc9plk27-ppl-0.10.2.drv-1/ppl-0.10.2/src'
45+ /bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -g -O2 -frounding-math -W -Wall -c -o Box.lo Box.cc
46+ libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -g -O2 -frounding-math -W -Wall -c Box.cc -DDLL_EXPORT -DPIC -o .libs/Box.o
47+ In file included from checked.defs.hh:595,
48+ from Checked_Number.defs.hh:27,
49+ from Coefficient.types.hh:15,
50+ from Coefficient.defs.hh:26,
51+ from Box.defs.hh:28,
52+ from Box.cc:24:
53+ checked.inlines.hh: In function `Parma_Polyhedra_Library::Result Parma_Polyhedra_Library::Checked::input_generic(Type&, std::istream&, Parma_Polyhedra_Library::Rounding_Dir)':
54+ checked.inlines.hh:607: internal compiler error: in invert_truthvalue, at fold-const.c:2719
55+ Please submit a full bug report,
56+ with preprocessed source if appropriate.
57+ See <URL:http://cygwin.com/problems.html> for instructions.
58+ make[3]: *** [Box.lo] Error 1
59+
60+ */
61+ platforms = stdenv.lib.platforms.unix; # Once had cygwin problems
62+ };
63+}
test/golden/importless/0.18.0.txtnew file+30
@@ -0,0 +1,30 @@
1+∀ α β γ δ ε ζ η θ ι κ λ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ configureFlags = [String];
6+ doCheck = Bool;
7+ enableParallelBuilding = Bool;
8+ meta =
9+ { description = String;
10+ homepage = String;
11+ license = δ;
12+ longDescription = String;
13+ platforms = ε;
14+ };
15+ name = String;
16+ propagatedBuildInputs = [ζ];
17+ src = η;
18+ } ->
19+ θ,
20+ β.licenses = ι,
21+ ι.gpl2Plus = δ,
22+ κ.platforms = λ,
23+ λ.unix = ε
24+) =>
25+{ fetchurl = {sha256 = String; url = String;} -> η;
26+ gmp = γ;
27+ isl = ζ;
28+ stdenv = α;
29+} ->
30+θ
test/golden/importless/0.2.nixnew file+49
@@ -0,0 +1,49 @@
1+{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, doxygen, graphviz, valgrind
2+, glib, dbus, gst_all_1, alsaLib, ffmpeg_3, libjack2, udev, libva, xorg
3+, sbc, SDL2, makeFontsConf
4+}:
5+
6+let
7+ fontsConf = makeFontsConf {
8+ fontDirectories = [ ];
9+ };
10+in stdenv.mkDerivation rec {
11+ pname = "pipewire";
12+ version = "0.2.7";
13+
14+ src = fetchFromGitHub {
15+ owner = "PipeWire";
16+ repo = "pipewire";
17+ rev = version;
18+ sha256 = "1q5wrqnhhs6r49p8yvkw1pl0cnsd4rndxy4h5lvdydwgf1civcwc";
19+ };
20+
21+ outputs = [ "out" "lib" "dev" "doc" ];
22+
23+ nativeBuildInputs = [
24+ meson ninja pkgconfig doxygen graphviz valgrind
25+ ];
26+ buildInputs = [
27+ glib dbus gst_all_1.gst-plugins-base gst_all_1.gstreamer
28+ alsaLib ffmpeg_3 libjack2 udev libva xorg.libX11 sbc SDL2
29+ ];
30+
31+ mesonFlags = [
32+ "-Ddocs=true"
33+ "-Dgstreamer=enabled"
34+ ];
35+
36+ PKG_CONFIG_SYSTEMD_SYSTEMDUSERUNITDIR = "${placeholder "out"}/lib/systemd/user";
37+
38+ FONTCONFIG_FILE = fontsConf; # Fontconfig error: Cannot load default config file
39+
40+ doCheck = true;
41+
42+ meta = with stdenv.lib; {
43+ description = "Server and user space API to deal with multimedia pipelines";
44+ homepage = "https://pipewire.org/";
45+ license = licenses.lgpl21;
46+ platforms = platforms.linux;
47+ maintainers = with maintainers; [ jtojnar ];
48+ };
49+}
test/golden/importless/0.2.txtnew file+55
@@ -0,0 +1,55 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π.
2+( β.lib = γ,
3+ β.mkDerivation =
4+ { FONTCONFIG_FILE = δ;
5+ PKG_CONFIG_SYSTEMD_SYSTEMDUSERUNITDIR = String;
6+ buildInputs = [ε];
7+ doCheck = Bool;
8+ mesonFlags = [String];
9+ meta =
10+ { description = String;
11+ homepage = String;
12+ license = ζ;
13+ maintainers = [η];
14+ platforms = θ;
15+ };
16+ nativeBuildInputs = [ι];
17+ outputs = [String];
18+ pname = String;
19+ src = κ;
20+ version = String;
21+ } ->
22+ λ,
23+ μ.gst-plugins-base = ε,
24+ μ.gstreamer = ε,
25+ ν.libX11 = ε,
26+ γ.jtojnar = η,
27+ γ.licenses = ξ,
28+ γ.maintainers = ο,
29+ γ.platforms = π,
30+ ξ.lgpl21 = ζ,
31+ π.linux = θ
32+) =>
33+{ SDL2 = ε;
34+ alsaLib = ε;
35+ dbus = ε;
36+ doxygen = ι;
37+ fetchFromGitHub =
38+ {owner = String; repo = String; rev = String; sha256 = String;} -> κ;
39+ ffmpeg_3 = ε;
40+ glib = ε;
41+ graphviz = ι;
42+ gst_all_1 = μ;
43+ libjack2 = ε;
44+ libva = ε;
45+ makeFontsConf = {fontDirectories = ∀ α. [α];} -> δ;
46+ meson = ι;
47+ ninja = ι;
48+ pkgconfig = ι;
49+ sbc = ε;
50+ stdenv = β;
51+ udev = ε;
52+ valgrind = ι;
53+ xorg = ν;
54+} ->
55+λ
test/golden/importless/0.20.0.nixnew file+21
@@ -0,0 +1,21 @@
1+{ stdenv, fetchurl, gmp }:
2+
3+stdenv.mkDerivation rec {
4+ name = "isl-0.20";
5+
6+ src = fetchurl {
7+ url = "http://isl.gforge.inria.fr/${name}.tar.xz";
8+ sha256 = "1akpgq0rbqbah5517blg2zlnfvjxfcl9cjrfc75nbcx5p2gnlnd5";
9+ };
10+
11+ buildInputs = [ gmp ];
12+
13+ enableParallelBuilding = true;
14+
15+ meta = {
16+ homepage = "http://isl.gforge.inria.fr/";
17+ license = stdenv.lib.licenses.lgpl21;
18+ description = "A library for manipulating sets and relations of integer points bounded by linear constraints";
19+ platforms = stdenv.lib.platforms.all;
20+ };
21+}
test/golden/importless/0.20.0.txtnew file+17
@@ -0,0 +1,17 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ enableParallelBuilding = Bool;
6+ meta =
7+ {description = String; homepage = String; license = δ; platforms = ε;};
8+ name = String;
9+ src = ζ;
10+ } ->
11+ η,
12+ β.licenses = θ,
13+ θ.lgpl21 = δ,
14+ ι.platforms = κ,
15+ κ.all = ε
16+) =>
17+{fetchurl = {sha256 = String; url = String;} -> ζ; gmp = γ; stdenv = α;} -> η
test/golden/importless/0.29.nixnew file+49
@@ -0,0 +1,49 @@
1+{ stdenv, fetchurl, libxml2, pkgconfig, perl
2+, compressionSupport ? true, zlib ? null
3+, sslSupport ? true, openssl ? null
4+, static ? false
5+, shared ? true
6+}:
7+
8+assert compressionSupport -> zlib != null;
9+assert sslSupport -> openssl != null;
10+assert static || shared;
11+
12+let
13+ inherit (stdenv.lib) optionals;
14+in
15+
16+stdenv.mkDerivation rec {
17+ version = "0.29.6";
18+ pname = "neon";
19+
20+ src = fetchurl {
21+ url = "http://www.webdav.org/neon/${pname}-${version}.tar.gz";
22+ sha256 = "0hzbjqdx1z8zw0vmbknf159wjsxbcq8ii0wgwkqhxj3dimr0nr4w";
23+ };
24+
25+ patches = optionals stdenv.isDarwin [ ./0.29.6-darwin-fix-configure.patch ];
26+
27+ nativeBuildInputs = [ pkgconfig ];
28+ buildInputs = [libxml2 openssl]
29+ ++ stdenv.lib.optional compressionSupport zlib;
30+
31+ configureFlags = [
32+ (stdenv.lib.enableFeature shared "shared")
33+ (stdenv.lib.enableFeature static "static")
34+ (stdenv.lib.withFeature compressionSupport "zlib")
35+ (stdenv.lib.withFeature sslSupport "ssl")
36+ ];
37+
38+ passthru = {inherit compressionSupport sslSupport;};
39+
40+ checkInputs = [ perl ];
41+ doCheck = false; # fails, needs the net
42+
43+ meta = with stdenv.lib; {
44+ description = "An HTTP and WebDAV client library";
45+ homepage = "http://www.webdav.org/neon/";
46+ platforms = platforms.unix;
47+ license = licenses.lgpl2;
48+ };
49+}
test/golden/importless/0.29.txtnew file+42
@@ -0,0 +1,42 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ.
2+( α.isDarwin = β,
3+ α.lib = γ,
4+ α.mkDerivation =
5+ { buildInputs = [Null];
6+ checkInputs = [δ];
7+ configureFlags = [ε];
8+ doCheck = Bool;
9+ meta =
10+ {description = String; homepage = String; license = ζ; platforms = η;};
11+ nativeBuildInputs = [θ];
12+ passthru = {compressionSupport = Bool; sslSupport = Bool;};
13+ patches = ι;
14+ pname = String;
15+ src = κ;
16+ version = String;
17+ } ->
18+ λ,
19+ γ.optionals = β -> [String] -> ι,
20+ μ.licenses = ν,
21+ μ.platforms = ξ,
22+ ν.lgpl2 = ζ,
23+ ξ.unix = η,
24+ ο.enableFeature = Bool -> String -> ε,
25+ π.enableFeature = Bool -> String -> ε,
26+ ρ.withFeature = Bool -> String -> ε,
27+ σ.withFeature = Bool -> String -> ε,
28+ τ.optional = Bool -> Null -> [Null]
29+) =>
30+{ compressionSupport = Bool;
31+ fetchurl = {sha256 = String; url = String;} -> κ;
32+ libxml2 = Null;
33+ openssl = Null;
34+ perl = δ;
35+ pkgconfig = θ;
36+ shared = Bool;
37+ sslSupport = Bool;
38+ static = Bool;
39+ stdenv = α;
40+ zlib = Null;
41+} ->
42+λ
test/golden/importless/0.3.3.nixnew file+7
@@ -0,0 +1,7 @@
1+{ callPackage, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "0.3.3";
5+ sha256 = "0g5df00cj4nczrmr4k791l7la0sq2wnf8rn981fsrz1f3d2yix4i";
6+ patches = [ ./drop-comments.patch ]; # we would get into a cycle when using fetchpatch on this one
7+})
test/golden/importless/0.3.3.txtnew file+5
@@ -0,0 +1,5 @@
1+∀ α β γ.
2+( α // {patches = [String]; sha256 = String; version = String;} ~ β,
3+ α.callPackage = String -> β -> γ
4+) =>
5+α -> γ
test/golden/importless/0.4.nixnew file+29
@@ -0,0 +1,29 @@
1+{ stdenv, buildPythonPackage, fetchPypi, scikitlearn, pandas, nose, pytest }:
2+
3+buildPythonPackage rec {
4+ pname = "imbalanced-learn";
5+ version = "0.4.3";
6+
7+ src = fetchPypi {
8+ inherit pname version;
9+ sha256 = "5bd9e86e40ce4001a57426541d7c79b18143cbd181e3330c1a3e5c5c43287083";
10+ };
11+
12+ propagatedBuildInputs = [ scikitlearn ];
13+ checkInputs = [ nose pytest pandas ];
14+ checkPhase = ''
15+ export HOME=$PWD
16+ # skip some tests that fail because of minimal rounding errors
17+ # or large dependencies
18+ py.test imblearn -k 'not classification \
19+ and not _generator \
20+ and not _forest \
21+ and not wrong_memory'
22+ '';
23+
24+ meta = with stdenv.lib; {
25+ description = "Library offering a number of re-sampling techniques commonly used in datasets showing strong between-class imbalance";
26+ homepage = "https://github.com/scikit-learn-contrib/imbalanced-learn";
27+ license = licenses.mit;
28+ };
29+}
test/golden/importless/0.5.1.nixnew file+17
@@ -0,0 +1,17 @@
1+{ callPackage, fetchurl, ... } @ args:
2+
3+callPackage ./generic.nix (args // rec {
4+ version = "0.5.1.3";
5+
6+ src = fetchurl {
7+ url = "http://downloads.xiph.org/releases/celt/celt-${version}.tar.gz";
8+ sha256 = "0bkam9z5vnrxpbxkkh9kw6yzjka9di56h11iijikdd1f71l5nbpw";
9+ };
10+
11+ # Don't build tests due to badness with ec_ilog
12+ prePatch = ''
13+ substituteInPlace Makefile.in \
14+ --replace 'SUBDIRS = libcelt tests' \
15+ 'SUBDIRS = libcelt'
16+ '';
17+})
test/golden/importless/0.5.1.txtnew file+6
@@ -0,0 +1,6 @@
1+∀ α β γ δ.
2+( α // {prePatch = String; src = β; version = String;} ~ γ,
3+ α.callPackage = String -> γ -> δ,
4+ α.fetchurl = {sha256 = String; url = String;} -> β
5+) =>
6+α -> δ
test/golden/importless/0.6.nixnew file+45
@@ -0,0 +1,45 @@
1+{ stdenv, buildGoModule, fetchurl, nixosTests }:
2+
3+buildGoModule rec {
4+ pname = "ipfs";
5+ version = "0.6.0";
6+ rev = "v${version}";
7+
8+ # go-ipfs makes changes to it's source tarball that don't match the git source.
9+ src = fetchurl {
10+ url = "https://github.com/ipfs/go-ipfs/releases/download/${rev}/go-ipfs-source.tar.gz";
11+ sha256 = "14bgq2j2bjjy0pspy2lsj5dm3w9rmfha0l8kyq5ig86yhc4nzn80";
12+ };
13+
14+ # tarball contains multiple files/directories
15+ postUnpack = ''
16+ mkdir ipfs-src
17+ shopt -s extglob
18+ mv !(ipfs-src) ipfs-src || true
19+ cd ipfs-src
20+ '';
21+
22+ sourceRoot = ".";
23+
24+ subPackages = [ "cmd/ipfs" ];
25+
26+ passthru.tests.ipfs = nixosTests.ipfs;
27+
28+ vendorSha256 = null;
29+
30+ postInstall = ''
31+ install --mode=444 -D misc/systemd/ipfs.service $out/etc/systemd/system/ipfs.service
32+ install --mode=444 -D misc/systemd/ipfs-api.socket $out/etc/systemd/system/ipfs-api.socket
33+ install --mode=444 -D misc/systemd/ipfs-gateway.socket $out/etc/systemd/system/ipfs-gateway.socket
34+ substituteInPlace $out/etc/systemd/system/ipfs.service \
35+ --replace /usr/bin/ipfs $out/bin/ipfs
36+ '';
37+
38+ meta = with stdenv.lib; {
39+ description = "A global, versioned, peer-to-peer filesystem";
40+ homepage = "https://ipfs.io/";
41+ license = licenses.mit;
42+ platforms = platforms.unix;
43+ maintainers = with maintainers; [ fpletz ];
44+ };
45+}
test/golden/importless/0.6.txtnew file+35
@@ -0,0 +1,35 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ.
2+( α.lib = β,
3+ γ.ipfs = δ,
4+ β.fpletz = ε,
5+ β.licenses = ζ,
6+ β.maintainers = η,
7+ β.platforms = θ,
8+ ζ.mit = ι,
9+ θ.unix = κ
10+) =>
11+{ buildGoModule =
12+ { meta =
13+ { description = String;
14+ homepage = String;
15+ license = ι;
16+ maintainers = [ε];
17+ platforms = κ;
18+ };
19+ passthru = {tests = {ipfs = δ;};};
20+ pname = String;
21+ postInstall = String;
22+ postUnpack = String;
23+ rev = String;
24+ sourceRoot = String;
25+ src = λ;
26+ subPackages = [String];
27+ vendorSha256 = Null;
28+ version = String;
29+ } ->
30+ μ;
31+ fetchurl = {sha256 = String; url = String;} -> λ;
32+ nixosTests = γ;
33+ stdenv = α;
34+} ->
35+μ
test/golden/importless/0.61.nixnew file+68
@@ -0,0 +1,68 @@
1+{ stdenv, lib, fetchurl, cmake, ninja, pkgconfig, libiconv, libintl
2+, zlib, curl, cairo, freetype, fontconfig, lcms, libjpeg, openjpeg, fetchpatch
3+, withData ? true, poppler_data
4+, qt5Support ? false, qtbase ? null
5+, introspectionSupport ? false, gobject-introspection ? null
6+, utils ? false
7+, minimal ? false, suffix ? "glib"
8+}:
9+
10+let
11+ version = "0.61.1";
12+ mkFlag = optset: flag: "-DENABLE_${flag}=${if optset then "on" else "off"}";
13+in
14+stdenv.mkDerivation rec {
15+ name = "poppler-${suffix}-${version}";
16+
17+ src = fetchurl {
18+ url = "${meta.homepage}/poppler-${version}.tar.xz";
19+ sha256 = "1afdrxxkaivvviazxkg5blsf2x24sjkfj92ib0d3q5pm8dihjrhj";
20+ };
21+
22+ outputs = [ "out" "dev" ];
23+
24+ patches = [
25+ (fetchpatch {
26+ name = "CVE-2018-13988";
27+ url = "https://cgit.freedesktop.org/poppler/poppler/patch/?id=004e3c10df0abda214f0c293f9e269fdd979c5ee";
28+ sha256 = "1l8713s57xc6g81bldw934rsfm140fqc7ggd50ha5mxdl1b3app2";
29+ })
30+ ./0.61-CVE-2019-9959.patch
31+ ];
32+
33+ buildInputs = [ libiconv libintl ] ++ lib.optional withData poppler_data;
34+
35+ # TODO: reduce propagation to necessary libs
36+ propagatedBuildInputs = with lib;
37+ [ zlib freetype fontconfig libjpeg openjpeg ]
38+ ++ optionals (!minimal) [ cairo lcms curl ]
39+ ++ optional qt5Support qtbase
40+ ++ optional introspectionSupport gobject-introspection;
41+
42+ nativeBuildInputs = [ cmake ninja pkgconfig ];
43+
44+ # Not sure when and how to pass it. It seems an upstream bug anyway.
45+ CXXFLAGS = stdenv.lib.optionalString stdenv.cc.isClang "-std=c++11";
46+
47+ cmakeFlags = [
48+ (mkFlag true "XPDF_HEADERS")
49+ (mkFlag (!minimal) "GLIB")
50+ (mkFlag (!minimal) "CPP")
51+ (mkFlag (!minimal) "LIBCURL")
52+ (mkFlag utils "UTILS")
53+ (mkFlag qt5Support "QT5")
54+ ];
55+
56+ meta = with lib; {
57+ homepage = "https://poppler.freedesktop.org/";
58+ description = "A PDF rendering library";
59+
60+ longDescription = ''
61+ Poppler is a PDF rendering library based on the xpdf-3.0 code base.
62+ '';
63+
64+ license = licenses.gpl2;
65+ platforms = platforms.all;
66+ maintainers = with maintainers; [ ttuegel ];
67+ };
68+}
test/golden/importless/0.61.txtnew file+62
@@ -0,0 +1,62 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ.
2+( α.cc = β,
3+ α.lib = γ,
4+ α.mkDerivation =
5+ { CXXFLAGS = δ;
6+ buildInputs = [ε];
7+ cmakeFlags = [String];
8+ meta =
9+ { description = String;
10+ homepage = String;
11+ license = ζ;
12+ longDescription = String;
13+ maintainers = [η];
14+ platforms = θ;
15+ };
16+ name = String;
17+ nativeBuildInputs = [ι];
18+ outputs = [String];
19+ patches = [String];
20+ propagatedBuildInputs = [κ];
21+ src = λ;
22+ } ->
23+ μ,
24+ ν.licenses = ξ,
25+ ν.maintainers = ο,
26+ ν.optional = Bool -> Null -> [κ],
27+ ν.optionals = Bool -> [π] -> [κ],
28+ ν.platforms = ρ,
29+ ν.ttuegel = η,
30+ γ.optionalString = σ -> String -> δ,
31+ β.isClang = σ,
32+ ξ.gpl2 = ζ,
33+ ρ.all = θ
34+) =>
35+{ cairo = π;
36+ cmake = ι;
37+ curl = π;
38+ fetchpatch = {name = String; sha256 = String; url = String;} -> String;
39+ fetchurl = {sha256 = String; url = String;} -> λ;
40+ fontconfig = κ;
41+ freetype = κ;
42+ gobject-introspection = Null;
43+ introspectionSupport = Bool;
44+ lcms = π;
45+ lib = ν;
46+ libiconv = ε;
47+ libintl = ε;
48+ libjpeg = κ;
49+ minimal = Bool;
50+ ninja = ι;
51+ openjpeg = κ;
52+ pkgconfig = ι;
53+ poppler_data = τ;
54+ qt5Support = Bool;
55+ qtbase = Null;
56+ stdenv = α;
57+ suffix = String;
58+ utils = Bool;
59+ withData = Bool;
60+ zlib = κ;
61+} ->
62+μ
test/golden/importless/0.7.nixnew file+45
@@ -0,0 +1,45 @@
1+{ stdenv, buildGoModule, fetchurl, nixosTests }:
2+
3+buildGoModule rec {
4+ pname = "ipfs";
5+ version = "0.7.0";
6+ rev = "v${version}";
7+
8+ # go-ipfs makes changes to it's source tarball that don't match the git source.
9+ src = fetchurl {
10+ url = "https://github.com/ipfs/go-ipfs/releases/download/${rev}/go-ipfs-source.tar.gz";
11+ sha256 = "1fkzwm4qxxpmbjammk6s5qcyjxivfa0ydqz4mpz1w756c4jq0jf3";
12+ };
13+
14+ # tarball contains multiple files/directories
15+ postUnpack = ''
16+ mkdir ipfs-src
17+ shopt -s extglob
18+ mv !(ipfs-src) ipfs-src || true
19+ cd ipfs-src
20+ '';
21+
22+ sourceRoot = ".";
23+
24+ subPackages = [ "cmd/ipfs" ];
25+
26+ passthru.tests.ipfs = nixosTests.ipfs;
27+
28+ vendorSha256 = null;
29+
30+ postInstall = ''
31+ install --mode=444 -D misc/systemd/ipfs.service $out/etc/systemd/system/ipfs.service
32+ install --mode=444 -D misc/systemd/ipfs-api.socket $out/etc/systemd/system/ipfs-api.socket
33+ install --mode=444 -D misc/systemd/ipfs-gateway.socket $out/etc/systemd/system/ipfs-gateway.socket
34+ substituteInPlace $out/etc/systemd/system/ipfs.service \
35+ --replace /usr/bin/ipfs $out/bin/ipfs
36+ '';
37+
38+ meta = with stdenv.lib; {
39+ description = "A global, versioned, peer-to-peer filesystem";
40+ homepage = "https://ipfs.io/";
41+ license = licenses.mit;
42+ platforms = platforms.unix;
43+ maintainers = with maintainers; [ fpletz ];
44+ };
45+}
test/golden/importless/0.7.txtnew file+35
@@ -0,0 +1,35 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ.
2+( α.lib = β,
3+ γ.ipfs = δ,
4+ β.fpletz = ε,
5+ β.licenses = ζ,
6+ β.maintainers = η,
7+ β.platforms = θ,
8+ ζ.mit = ι,
9+ θ.unix = κ
10+) =>
11+{ buildGoModule =
12+ { meta =
13+ { description = String;
14+ homepage = String;
15+ license = ι;
16+ maintainers = [ε];
17+ platforms = κ;
18+ };
19+ passthru = {tests = {ipfs = δ;};};
20+ pname = String;
21+ postInstall = String;
22+ postUnpack = String;
23+ rev = String;
24+ sourceRoot = String;
25+ src = λ;
26+ subPackages = [String];
27+ vendorSha256 = Null;
28+ version = String;
29+ } ->
30+ μ;
31+ fetchurl = {sha256 = String; url = String;} -> λ;
32+ nixosTests = γ;
33+ stdenv = α;
34+} ->
35+μ
test/golden/importless/0.8.2.nixnew file+30
@@ -0,0 +1,30 @@
1+{stdenv, fetchurl, ocaml, findlib, camlp4}:
2+
3+if stdenv.lib.versionAtLeast ocaml.version "4.05"
4+then throw "camomile-0.8.2 is not available for OCaml ${ocaml.version}"
5+else
6+
7+stdenv.mkDerivation rec {
8+ pname = "camomile";
9+ version = "0.8.2";
10+
11+ src = fetchurl {
12+ url = "mirror://sourceforge/camomile/camomile-${version}.tar.bz2";
13+ sha256 = "0x43pjxx70kgip86mmdn08s97k4qzdqc8i79xfyyx28smy1bsa00";
14+ };
15+
16+ buildInputs = [ocaml findlib camlp4];
17+
18+ createFindlibDestdir = true;
19+
20+ meta = {
21+ homepage = "http://camomile.sourceforge.net/";
22+ description = "A comprehensive Unicode library for OCaml";
23+ license = stdenv.lib.licenses.lgpl21;
24+ branch = "0.8.2";
25+ platforms = ocaml.meta.platforms or [];
26+ maintainers = [
27+ stdenv.lib.maintainers.maggesi
28+ ];
29+ };
30+}
test/golden/importless/0.8.5.nixnew file+30
@@ -0,0 +1,30 @@
1+{stdenv, fetchurl, fetchpatch, ocaml, findlib, camlp4}:
2+
3+stdenv.mkDerivation {
4+ pname = "camomile";
5+ version = "0.8.5";
6+
7+ src = fetchurl {
8+ url = "https://github.com/yoriyuki/Camomile/releases/download/rel-0.8.5/camomile-0.8.5.tar.bz2";
9+ sha256 = "003ikpvpaliy5hblhckfmln34zqz0mk3y2m1fqvbjngh3h2np045";
10+ };
11+
12+ patches = [ (fetchpatch {
13+ url = "https://raw.githubusercontent.com/ocaml/opam-repository/master/packages/camomile/camomile.0.8.5/files/4.05-typing-fix.patch";
14+ sha256 = "167279lia6qx62mdcyc5rjsi4gf4yi52wn9mhgd9y1v3754z7fwb";
15+ })];
16+
17+ buildInputs = [ocaml findlib camlp4];
18+
19+ createFindlibDestdir = true;
20+
21+ meta = {
22+ homepage = "https://github.com/yoriyuki/Camomile/tree/master/Camomile";
23+ description = "A comprehensive Unicode library for OCaml";
24+ license = stdenv.lib.licenses.lgpl21;
25+ platforms = ocaml.meta.platforms or [];
26+ maintainers = [
27+ stdenv.lib.maintainers.maggesi
28+ ];
29+ };
30+}
test/golden/importless/0.8.5.txtnew file+33
@@ -0,0 +1,33 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν.
2+( α.?meta = β,
3+ β.?platforms = [γ],
4+ δ.lib = ε,
5+ δ.mkDerivation =
6+ { buildInputs = [α];
7+ createFindlibDestdir = Bool;
8+ meta =
9+ { description = String;
10+ homepage = String;
11+ license = ζ;
12+ maintainers = [η];
13+ platforms = [γ];
14+ };
15+ patches = [θ];
16+ pname = String;
17+ src = ι;
18+ version = String;
19+ } ->
20+ κ,
21+ ε.licenses = λ,
22+ λ.lgpl21 = ζ,
23+ μ.maintainers = ν,
24+ ν.maggesi = η
25+) =>
26+{ camlp4 = α;
27+ fetchpatch = {sha256 = String; url = String;} -> θ;
28+ fetchurl = {sha256 = String; url = String;} -> ι;
29+ findlib = α;
30+ ocaml = α;
31+ stdenv = δ;
32+} ->
33+κ
test/golden/importless/0.8.nixnew file+55
@@ -0,0 +1,55 @@
1+{ stdenv, fetchurl, pkgconfig
2+, SDL, libGLU, libGL, openal, lua
3+, libdevil, freetype, physfs
4+, libmodplug, mpg123, libvorbis, libogg
5+}:
6+
7+stdenv.mkDerivation rec {
8+ pname = "love";
9+ version = "0.8.0";
10+
11+ src = fetchurl {
12+ url = "https://bitbucket.org/rude/love/downloads/${pname}-${version}-linux-src.tar.gz";
13+ sha256 = "1k4fcsa8zzi04ja179bmj24hvqcbm3icfvrvrzyz2gw9qwfclrwi";
14+ };
15+
16+ nativeBuildInputs = [ pkgconfig ];
17+ buildInputs = [
18+ SDL libGLU libGL openal lua
19+ libdevil freetype physfs libmodplug mpg123 libvorbis libogg
20+ ];
21+
22+ preConfigure = ''
23+ luaoptions="${"''"} lua luajit "
24+ for i in lua luajit-; do
25+ for j in 5 5.0 5.1 5.2 5.3 5.4; do
26+ luaoptions="$luaoptions $i$j "
27+ done
28+ done
29+ luaso="$(echo "${lua}/lib/"lib*.so.*)"
30+ luaso="''${luaso##*/lib}"
31+ luaso="''${luaso%%.so*}"
32+ luaoptions="$luaoptions $luaso"
33+ sed -e "s/${"''"} lua lua.*;/$luaoptions;/" -i configure
34+
35+ luaincdir="$(echo "${lua}/include"/*/ )"
36+ test -d "$luaincdir" && {
37+ export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I$luaincdir"
38+ } || true
39+ '';
40+
41+ NIX_CFLAGS_COMPILE = toString [
42+ "-I${SDL.dev}/include/SDL"
43+ "-I${freetype.dev}include/freetype2"
44+ "-DGL_GLEXT_PROTOTYPES" # https://community.khronos.org/t/glgenbuffers-was-not-declared-in-this-scope/59283/2
45+ ];
46+
47+ meta = {
48+ homepage = "http://love2d.org";
49+ description = "A Lua-based 2D game engine/scripting language";
50+ license = stdenv.lib.licenses.zlib;
51+
52+ platforms = stdenv.lib.platforms.linux;
53+ maintainers = [ stdenv.lib.maintainers.raskin ];
54+ };
55+}
test/golden/importless/0.9.1.nixnew file+33
@@ -0,0 +1,33 @@
1+{ lib
2+, buildPythonPackage
3+, fetchPypi
4+, nose
5+, pandas
6+, matplotlib
7+}:
8+
9+buildPythonPackage rec {
10+ pname = "seaborn";
11+ version = "0.9.1";
12+ src = fetchPypi {
13+ inherit pname version;
14+ sha256 = "da33aa8c20a9a342ce73831d02831a10413f54a05471c7f31edf34f225d456ae";
15+ };
16+
17+ checkInputs = [ nose ];
18+ propagatedBuildInputs = [ pandas matplotlib ];
19+
20+ checkPhase = ''
21+ nosetests -v
22+ '';
23+
24+ # Computationally very demanding tests
25+ doCheck = false;
26+
27+ meta = {
28+ description = "Statisitical data visualization";
29+ homepage = "http://stanford.edu/~mwaskom/software/seaborn/";
30+ license = with lib.licenses; [ bsd3 ];
31+ maintainers = [ ];
32+ };
33+}
test/golden/importless/0.9.5.nixnew file+21
@@ -0,0 +1,21 @@
1+{ stdenv, fetchurl, python2Packages }:
2+
3+let version = "0.9.5.1.1"; in
4+
5+python2Packages.buildPythonPackage {
6+ pname = "pyrex";
7+ inherit version;
8+
9+ src = fetchurl {
10+ url = "https://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/oldtar/Pyrex-${version}.tar.gz";
11+ sha256 = "0lxxvn4mjfb83swcbqb5908q4iy53w4ip5i0f9angm2va1jyhd3z";
12+ };
13+
14+ doCheck = false;
15+
16+ meta = {
17+ homepage = "http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/";
18+ description = "A language for writing Python extension modules";
19+ license = stdenv.lib.licenses.asl20;
20+ };
21+}
test/golden/importless/0.9.5.txtnew file+18
@@ -0,0 +1,18 @@
1+∀ α β γ δ ε ζ η.
2+( α.lib = β,
3+ γ.buildPythonPackage =
4+ { doCheck = Bool;
5+ meta = {description = String; homepage = String; license = δ;};
6+ pname = String;
7+ src = ε;
8+ version = String;
9+ } ->
10+ ζ,
11+ β.licenses = η,
12+ η.asl20 = δ
13+) =>
14+{ fetchurl = {sha256 = String; url = String;} -> ε;
15+ python2Packages = γ;
16+ stdenv = α;
17+} ->
18+ζ
test/golden/importless/0.9.6.nixnew file+21
@@ -0,0 +1,21 @@
1+{ stdenv, fetchurl, python2Packages }:
2+
3+let version = "0.9.6.4"; in
4+
5+python2Packages.buildPythonPackage {
6+ pname = "pyrex";
7+ inherit version;
8+
9+ src = fetchurl {
10+ url = "https://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/oldtar/Pyrex-${version}.tar.gz";
11+ sha256 = "18pd9f8al3l6i27cc0ddhgg7hxf28lnfs75x4a8jzscydxgiq5a8";
12+ };
13+
14+ doCheck = false;
15+
16+ meta = {
17+ homepage = "http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/";
18+ description = "A language for writing Python extension modules";
19+ license = stdenv.lib.licenses.asl20;
20+ };
21+}
test/golden/importless/0.9.6.txtnew file+18
@@ -0,0 +1,18 @@
1+∀ α β γ δ ε ζ η.
2+( α.lib = β,
3+ γ.buildPythonPackage =
4+ { doCheck = Bool;
5+ meta = {description = String; homepage = String; license = δ;};
6+ pname = String;
7+ src = ε;
8+ version = String;
9+ } ->
10+ ζ,
11+ β.licenses = η,
12+ η.asl20 = δ
13+) =>
14+{ fetchurl = {sha256 = String; url = String;} -> ε;
15+ python2Packages = γ;
16+ stdenv = α;
17+} ->
18+ζ
test/golden/importless/0.9.8.6-rc1.nixnew file+43
@@ -0,0 +1,43 @@
1+{stdenv, fetchurl, makeWrapper, ocaml, ncurses}:
2+let
3+ pname = "omake";
4+ version = "0.9.8.6-0.rc1";
5+ webpage = "http://omake.metaprl.org";
6+in
7+
8+if stdenv.lib.versionAtLeast ocaml.version "4.06"
9+then throw "${pname}-${version} is not available for OCaml ${ocaml.version}"
10+else
11+
12+stdenv.mkDerivation {
13+
14+ name = "${pname}-${version}";
15+
16+ src = fetchurl {
17+ url = "https://src.fedoraproject.org/repo/pkgs/ocaml-omake/${pname}-${version}.tar.gz/fe39a476ef4e33b7ba2ca77a6bcaded2/${pname}-${version}.tar.gz";
18+ sha256 = "1sas02pbj56m7wi5vf3vqrrpr4ynxymw2a8ybvfj2dkjf7q9ii13";
19+ };
20+ patchFlags = [ "-p0" ];
21+ patches = [ ./warn.patch ];
22+
23+ buildInputs = [ ocaml makeWrapper ncurses ];
24+
25+ phases = "unpackPhase patchPhase buildPhase";
26+ buildPhase = ''
27+ make bootstrap
28+ make PREFIX=$out all
29+ make PREFIX=$out install
30+ '';
31+# prefixKey = "-prefix ";
32+#
33+# configureFlags = if transitional then "--transitional" else "--strict";
34+#
35+# buildFlags = [ "world.opt" ];
36+
37+ meta = {
38+ description = "Omake build system";
39+ homepage = webpage;
40+ license = "GPL";
41+ platforms = ocaml.meta.platforms or [];
42+ };
43+}
test/golden/importless/0.9.nixnew file+51
@@ -0,0 +1,51 @@
1+{stdenv, fetchurl, ocaml, findlib, ounit, expat}:
2+
3+let
4+ pname = "ocaml-expat";
5+ testcase = fetchurl {
6+ url = "http://www.w3.org/TR/1998/REC-xml-19980210.xml";
7+ sha256 = "00a3gsfvlkdhmcbziqhvpvy1zmcgbcihfqwcvl6ay03zf7gvw0k1";
8+ };
9+
10+in
11+
12+stdenv.mkDerivation rec {
13+ name = "${pname}-${version}";
14+ version = "0.9.1";
15+
16+ src = fetchurl {
17+ url = "http://www.xs4all.nl/~mmzeeman/ocaml/${pname}-${version}.tar.gz";
18+ sha256 = "16n2j3y0jc9xgqyshw9plrwqnjiz30vnpbhahmgxlidbycw8rgjz";
19+ };
20+
21+ buildInputs = [ocaml findlib ounit expat];
22+
23+ createFindlibDestdir = true;
24+
25+ patches = [ ./unittest.patch ];
26+
27+ postPatch = ''
28+ substituteInPlace "unittest.ml" \
29+ --replace "/home/maas/xml-samples/REC-xml-19980210.xml.txt" "${testcase}"
30+ substituteInPlace Makefile --replace "EXPAT_LIBDIR=/usr/local/lib" "EXPAT_LIBDIR=${expat.out}/lib" \
31+ --replace "EXPAT_INCDIR=/usr/local/include" "EXPAT_INCDIR=${expat.dev}/include" \
32+ --replace "gcc" "\$(CC)"
33+ '';
34+
35+ dontConfigure = true; # Skip configure
36+
37+ buildPhase = ''
38+ make all allopt
39+ '';
40+
41+ doCheck = true;
42+
43+ checkTarget = "testall";
44+
45+ meta = {
46+ homepage = "http://www.xs4all.nl/~mmzeeman/ocaml/";
47+ description = "An ocaml wrapper for the Expat XML parsing library";
48+ license = stdenv.lib.licenses.mit;
49+ maintainers = [ stdenv.lib.maintainers.roconnor ];
50+ };
51+}
test/golden/importless/0.9.txtnew file+35
@@ -0,0 +1,35 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ buildPhase = String;
6+ checkTarget = String;
7+ createFindlibDestdir = Bool;
8+ doCheck = Bool;
9+ dontConfigure = Bool;
10+ meta =
11+ { description = String;
12+ homepage = String;
13+ license = δ;
14+ maintainers = [ε];
15+ };
16+ name = String;
17+ patches = [String];
18+ postPatch = String;
19+ src = ζ;
20+ version = String;
21+ } ->
22+ η,
23+ β.licenses = θ,
24+ θ.mit = δ,
25+ ι.maintainers = κ,
26+ κ.roconnor = ε
27+) =>
28+{ expat = γ;
29+ fetchurl = {sha256 = String; url = String;} -> ζ;
30+ findlib = γ;
31+ ocaml = γ;
32+ ounit = γ;
33+ stdenv = α;
34+} ->
35+η
test/golden/importless/0.nixnew file+26
@@ -0,0 +1,26 @@
1+{ stdenv, fetchurl, pkgconfig, cmake
2+, alsaLib, boost, glib, lash, libjack2, libarchive, libsndfile, lrdf, qt4
3+}:
4+
5+stdenv.mkDerivation rec {
6+ version = "0.9.7";
7+ pname = "hydrogen";
8+
9+ src = fetchurl {
10+ url = "https://github.com/hydrogen-music/hydrogen/archive/${version}.tar.gz";
11+ sha256 = "1dy2jfkdw0nchars4xi4isrz66fqn53a9qk13bqza7lhmsg3s3qy";
12+ };
13+
14+ nativeBuildInputs = [ pkgconfig cmake ];
15+ buildInputs = [
16+ alsaLib boost glib lash libjack2 libarchive libsndfile lrdf qt4
17+ ];
18+
19+ meta = with stdenv.lib; {
20+ description = "Advanced drum machine";
21+ homepage = "http://www.hydrogen-music.org";
22+ license = licenses.gpl2;
23+ platforms = platforms.linux;
24+ maintainers = [ maintainers.goibhniu ];
25+ };
26+}
test/golden/importless/0.txtnew file+39
@@ -0,0 +1,39 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ meta =
6+ { description = String;
7+ homepage = String;
8+ license = δ;
9+ maintainers = [ε];
10+ platforms = ζ;
11+ };
12+ nativeBuildInputs = [η];
13+ pname = String;
14+ src = θ;
15+ version = String;
16+ } ->
17+ ι,
18+ β.licenses = κ,
19+ β.maintainers = λ,
20+ β.platforms = μ,
21+ κ.gpl2 = δ,
22+ λ.goibhniu = ε,
23+ μ.linux = ζ
24+) =>
25+{ alsaLib = γ;
26+ boost = γ;
27+ cmake = η;
28+ fetchurl = {sha256 = String; url = String;} -> θ;
29+ glib = γ;
30+ lash = γ;
31+ libarchive = γ;
32+ libjack2 = γ;
33+ libsndfile = γ;
34+ lrdf = γ;
35+ pkgconfig = η;
36+ qt4 = γ;
37+ stdenv = α;
38+} ->
39+ι
test/golden/importless/0.x.nixnew file+72
@@ -0,0 +1,72 @@
1+{
2+ lib
3+ , buildPythonPackage
4+ , fetchFromGitHub
5+ , cloudpickle
6+ , ipykernel
7+ , wurlitzer
8+ , jupyter_client
9+ , pyzmq
10+ , numpy
11+ , pandas
12+ , scipy
13+ , matplotlib
14+ , xarray
15+ , pytest
16+ , flaky
17+ , isPy3k
18+}:
19+
20+buildPythonPackage rec {
21+ pname = "spyder-kernels";
22+ version = "0.5.2";
23+
24+ src = fetchFromGitHub {
25+ owner = "spyder-ide";
26+ repo = "spyder-kernels";
27+ rev = "v0.5.2";
28+ sha256 = "1yan589g0470y61bcyjy3wj13i94ndyffckqdyrg97vw2qhfrisb";
29+ };
30+
31+ # requirement xarray not available on Py2k
32+ disabled = !isPy3k;
33+
34+ propagatedBuildInputs = [
35+ cloudpickle
36+ ipykernel
37+ wurlitzer
38+ jupyter_client
39+ pyzmq
40+ ];
41+
42+ checkInputs = [
43+ numpy
44+ pandas
45+ scipy
46+ matplotlib
47+ xarray
48+ pytest
49+ flaky
50+ ];
51+
52+ # skipped tests:
53+ # turtle requires graphics
54+ # cython test fails, I don't think this can ever access cython?
55+ # umr pathlist test assumes standard directories, not compatible with nix
56+ checkPhase = ''
57+ export JUPYTER_RUNTIME_DIR=$(mktemp -d)
58+ pytest -x -vv -k '\
59+ not test_turtle_launch \
60+ and not test_umr_skip_cython \
61+ and not test_umr_pathlist' \
62+ -W 'ignore::DeprecationWarning' \
63+ spyder_kernels
64+ '';
65+
66+ meta = with lib; {
67+ description = "Jupyter kernels for Spyder's console";
68+ homepage = "https://github.com/spyder-ide/spyder-kernels";
69+ license = licenses.mit;
70+ maintainers = with maintainers; [ gebner marcus7070 ];
71+ };
72+}
test/golden/importless/0.x.txtnew file+41
@@ -0,0 +1,41 @@
1+∀ α β γ δ ε ζ η θ ι.
2+( α.gebner = β,
3+ α.licenses = γ,
4+ α.maintainers = δ,
5+ α.marcus7070 = β,
6+ γ.mit = ε
7+) =>
8+{ buildPythonPackage =
9+ { checkInputs = [ζ];
10+ checkPhase = String;
11+ disabled = Bool;
12+ meta =
13+ { description = String;
14+ homepage = String;
15+ license = ε;
16+ maintainers = [β];
17+ };
18+ pname = String;
19+ propagatedBuildInputs = [η];
20+ src = θ;
21+ version = String;
22+ } ->
23+ ι;
24+ cloudpickle = η;
25+ fetchFromGitHub =
26+ {owner = String; repo = String; rev = String; sha256 = String;} -> θ;
27+ flaky = ζ;
28+ ipykernel = η;
29+ isPy3k = Bool;
30+ jupyter_client = η;
31+ lib = α;
32+ matplotlib = ζ;
33+ numpy = ζ;
34+ pandas = ζ;
35+ pytest = ζ;
36+ pyzmq = η;
37+ scipy = ζ;
38+ wurlitzer = η;
39+ xarray = ζ;
40+} ->
41+ι
test/golden/importless/1-default.nixnew file+46
@@ -0,0 +1,46 @@
1+{ stdenv, fetchurl, pkgconfig, sg3_utils, udev, glib, dbus, dbus-glib
2+, polkit, parted, lvm2, libatasmart, intltool, libuuid, mdadm
3+, libxslt, docbook_xsl, utillinux, libgudev }:
4+
5+stdenv.mkDerivation rec {
6+ name = "udisks-1.0.5";
7+
8+ src = fetchurl {
9+ url = "https://hal.freedesktop.org/releases/${name}.tar.gz";
10+ sha256 = "0wbg3jrv8limdgvcygf4dqin3y6d30y9pcmmk711vq571vmq5v7j";
11+ };
12+
13+ patches = [ ./purity.patch ./no-pci-db.patch ./glibc.patch ];
14+
15+ preConfigure =
16+ ''
17+ configureFlagsArray+=(--with-systemdsystemunitdir=$out/lib/systemd/system)
18+ '';
19+
20+ postPatch =
21+ ''
22+ sed -e 's,/sbin/mdadm,${mdadm}&,g' -e "s,@slashlibdir@,$out/lib,g" -i data/80-udisks.rules
23+
24+ substituteInPlace src/main.c --replace \
25+ "/sbin:/bin:/usr/sbin:/usr/bin" \
26+ "${utillinux}/bin:${mdadm}/sbin:/run/current-system/sw/bin:/run/current-system/sw/bin"
27+ '';
28+
29+ buildInputs =
30+ [ sg3_utils udev glib dbus dbus-glib polkit parted libgudev
31+ lvm2 libatasmart intltool libuuid libxslt docbook_xsl
32+ ];
33+
34+ nativeBuildInputs = [ pkgconfig ];
35+
36+ configureFlags = [ "--localstatedir=/var" "--enable-lvm2" ];
37+
38+ meta = with stdenv.lib; {
39+ homepage = "http://www.freedesktop.org/wiki/Software/udisks";
40+ description = "A daemon and command-line utility for querying and manipulating storage devices";
41+ platforms = platforms.linux;
42+ license = with licenses; [ gpl2 lgpl2Plus ];
43+ broken = true;
44+ hydraPlatforms = [];
45+ };
46+}
test/golden/importless/1-default.txtnew file+48
@@ -0,0 +1,48 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν.
2+( β.lib = γ,
3+ β.mkDerivation =
4+ { buildInputs = [δ];
5+ configureFlags = [String];
6+ meta =
7+ { broken = Bool;
8+ description = String;
9+ homepage = String;
10+ hydraPlatforms = ∀ α. [α];
11+ license = [ε];
12+ platforms = ζ;
13+ };
14+ name = String;
15+ nativeBuildInputs = [η];
16+ patches = [String];
17+ postPatch = String;
18+ preConfigure = String;
19+ src = θ;
20+ } ->
21+ ι,
22+ γ.gpl2 = ε,
23+ γ.lgpl2Plus = ε,
24+ γ.licenses = κ,
25+ γ.platforms = λ,
26+ λ.linux = ζ
27+) =>
28+{ dbus = δ;
29+ dbus-glib = δ;
30+ docbook_xsl = δ;
31+ fetchurl = {sha256 = String; url = String;} -> θ;
32+ glib = δ;
33+ intltool = δ;
34+ libatasmart = δ;
35+ libgudev = δ;
36+ libuuid = δ;
37+ libxslt = δ;
38+ lvm2 = δ;
39+ mdadm = μ;
40+ parted = δ;
41+ pkgconfig = η;
42+ polkit = δ;
43+ sg3_utils = δ;
44+ stdenv = β;
45+ udev = δ;
46+ utillinux = ν;
47+} ->
48+ι
test/golden/importless/1.0.0.nixnew file+37
@@ -0,0 +1,37 @@
1+{ stdenv, lib, fetchurl, libX11, pkgconfig, libXext, libdrm, libXfixes, wayland, libffi
2+, libGL, mesa
3+, minimal ? false, libva1-minimal
4+}:
5+
6+stdenv.mkDerivation rec {
7+ pname = "libva";
8+ version = "1.7.3";
9+
10+ src = fetchurl {
11+ url = "https://www.freedesktop.org/software/vaapi/releases/libva/${pname}-${version}.tar.bz2";
12+ sha256 = "1ndrf136rlw03xag7j1xpmf9015d1h0dpnv6v587jnh6k2a17g12";
13+ };
14+
15+ outputs = [ "bin" "dev" "out" ];
16+
17+ nativeBuildInputs = [ pkgconfig ];
18+
19+ buildInputs = [ libdrm ]
20+ ++ lib.optionals (!minimal) [ libva1-minimal libX11 libXext libXfixes wayland libffi libGL ];
21+ # TODO: share libs between minimal and !minimal - perhaps just symlink them
22+
23+ configureFlags =
24+ # Add FHS paths for non-NixOS applications.
25+ [ "--with-drivers-path=${mesa.drivers.driverLink}/lib/dri:/usr/lib/dri:/usr/lib32/dri" ] ++
26+ lib.optionals (!minimal) [ "--enable-glx" ];
27+
28+ installFlags = [ "dummy_drv_video_ladir=$(out)/lib/dri" ];
29+
30+ meta = with stdenv.lib; {
31+ homepage = "http://www.freedesktop.org/wiki/Software/vaapi";
32+ license = licenses.mit;
33+ description = "VAAPI library: Video Acceleration API";
34+ platforms = platforms.unix;
35+ maintainers = with maintainers; [ ];
36+ };
37+}
test/golden/importless/1.0.0.txtnew file+43
@@ -0,0 +1,43 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο.
2+( β.lib = γ,
3+ β.mkDerivation =
4+ { buildInputs = [δ];
5+ configureFlags = [String];
6+ installFlags = [String];
7+ meta =
8+ { description = String;
9+ homepage = String;
10+ license = ε;
11+ maintainers = ∀ α. [α];
12+ platforms = ζ;
13+ };
14+ nativeBuildInputs = [η];
15+ outputs = [String];
16+ pname = String;
17+ src = θ;
18+ version = String;
19+ } ->
20+ ι,
21+ κ.optionals = Bool -> [String] -> [String],
22+ γ.licenses = λ,
23+ γ.maintainers = μ,
24+ γ.platforms = ν,
25+ λ.mit = ε,
26+ ν.unix = ζ
27+) =>
28+{ fetchurl = {sha256 = String; url = String;} -> θ;
29+ lib = κ;
30+ libGL = ξ;
31+ libX11 = ξ;
32+ libXext = ξ;
33+ libXfixes = ξ;
34+ libdrm = δ;
35+ libffi = ξ;
36+ libva1-minimal = ξ;
37+ mesa = ο;
38+ minimal = Bool;
39+ pkgconfig = η;
40+ stdenv = β;
41+ wayland = ξ;
42+} ->
43+ι
test/golden/importless/1.0.nixnew file+36
@@ -0,0 +1,36 @@
1+{stdenv, fetchurl, ocaml, findlib, easy-format}:
2+let
3+ pname = "biniou";
4+ version = "1.0.9";
5+ webpage = "http://mjambon.com/${pname}.html";
6+in
7+
8+assert stdenv.lib.versionAtLeast (stdenv.lib.getVersion ocaml) "3.11";
9+
10+stdenv.mkDerivation rec {
11+
12+ name = "${pname}-${version}";
13+
14+ src = fetchurl {
15+ url = "http://mjambon.com/releases/${pname}/${name}.tar.gz";
16+ sha256 = "14j3hrhbjqxbizr1pr8fcig9dmfzhbjjwzwyc99fcsdic67w8izb";
17+ };
18+
19+ buildInputs = [ ocaml findlib easy-format ];
20+
21+ createFindlibDestdir = true;
22+
23+ makeFlags = [ "PREFIX=$(out)" ];
24+
25+ preBuild = ''
26+ mkdir $out/bin
27+ '';
28+
29+ meta = with stdenv.lib; {
30+ description = "A binary data format designed for speed, safety, ease of use and backward compatibility as protocols evolve";
31+ homepage = webpage;
32+ license = licenses.bsd3;
33+ maintainers = [ maintainers.vbgl ];
34+ platforms = ocaml.meta.platforms or [];
35+ };
36+}
test/golden/importless/1.0.txtnew file+34
@@ -0,0 +1,34 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ.
2+( α.?meta = β,
3+ β.?platforms = [γ],
4+ δ.lib = ε,
5+ δ.mkDerivation =
6+ { buildInputs = [α];
7+ createFindlibDestdir = Bool;
8+ makeFlags = [String];
9+ meta =
10+ { description = String;
11+ homepage = String;
12+ license = ζ;
13+ maintainers = [η];
14+ platforms = [γ];
15+ };
16+ name = String;
17+ preBuild = String;
18+ src = θ;
19+ } ->
20+ ι,
21+ ε.versionAtLeast = κ -> String -> Bool,
22+ λ.getVersion = α -> κ,
23+ μ.licenses = ν,
24+ μ.maintainers = ξ,
25+ ν.bsd3 = ζ,
26+ ξ.vbgl = η
27+) =>
28+{ easy-format = α;
29+ fetchurl = {sha256 = String; url = String;} -> θ;
30+ findlib = α;
31+ ocaml = α;
32+ stdenv = δ;
33+} ->
34+ι
test/golden/importless/1.00.37.nixnew file+98
@@ -0,0 +1,98 @@
1+{ stdenv, fetchurl, cups, libusb-compat-0_1, libxml2 }:
2+
3+let
4+
5+ arch = if stdenv.hostPlatform.system == "x86_64-linux"
6+ then "x86_64"
7+ else "i386";
8+
9+in stdenv.mkDerivation rec {
10+ pname = "samsung-unified-linux-driver";
11+ version = "1.00.37";
12+
13+ src = fetchurl {
14+ sha256 = "0r66l9zp0p1qgakh4j08hynwsr4lsgq5yrpxyr0x4ldvl0z2b1bb";
15+ url = "http://www.bchemnet.com/suldr/driver/UnifiedLinuxDriver-${version}.tar.gz";
16+ };
17+
18+ buildInputs = [
19+ cups
20+ libusb-compat-0_1
21+ libxml2
22+ ];
23+
24+ installPhase = ''
25+
26+ mkdir -p $out/bin
27+ cp -R ${arch}/{gettext,pstosecps,rastertospl,smfpnetdiscovery,usbresetter} $out/bin
28+
29+ mkdir -p $out/etc/sane.d/dll.d/
30+ install -m644 noarch/etc/smfp.conf $out/etc/sane.d
31+ echo smfp >> $out/etc/sane.d/dll.d/smfp-scanner.conf
32+
33+ mkdir -p $out/lib
34+ install -m755 ${arch}/libscmssc.so* $out/lib
35+
36+ mkdir -p $out/lib/cups/backend
37+ ln -s $out/bin/smfpnetdiscovery $out/lib/cups/backend
38+
39+ mkdir -p $out/lib/cups/filter
40+ ln -s $out/bin/{pstosecps,rastertospl} $out/lib/cups/filter
41+ ln -s $ghostscript/bin/gs $out/lib/cups/filter
42+
43+ mkdir -p $out/lib/sane
44+ install -m755 ${arch}/libsane-smfp.so* $out/lib/sane
45+ ln -s libsane-smfp.so.1.0.1 $out/lib/sane/libsane-smfp.so.1
46+ ln -s libsane-smfp.so.1 $out/lib/sane/libsane-smfp.so
47+
48+ mkdir -p $out/lib/udev/rules.d
49+ (
50+ OEM_FILE=noarch/oem.conf
51+ INSTALL_LOG_FILE=/dev/null
52+ . noarch/scripting_utils
53+ . noarch/package_utils
54+ . noarch/scanner-script.pkg
55+ fill_full_template noarch/etc/smfp.rules.in $out/lib/udev/rules.d/60_smfp_samsung.rules
56+ chmod -x $out/lib/udev/rules.d/60_smfp_samsung.rules
57+ )
58+
59+ mkdir -p $out/share
60+ cp -R noarch/share/* $out/share
61+ gzip -9 $out/share/ppd/*.ppd
62+ rm -r $out/share/locale/*/*/install.mo
63+
64+ mkdir -p $out/share/cups
65+ cd $out/share/cups
66+ ln -s ../ppd .
67+ ln -s ppd model
68+ '';
69+
70+ preFixup = ''
71+ for bin in "$out/bin/"*; do
72+ patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$bin"
73+ patchelf --set-rpath "$out/lib:${stdenv.lib.getLib cups}/lib" "$bin"
74+ done
75+
76+ patchelf --set-rpath "$out/lib:${stdenv.lib.getLib cups}/lib" "$out/lib/libscmssc.so"
77+ patchelf --set-rpath "$out/lib:${libxml2.out}/lib:${libusb-compat-0_1.out}/lib" "$out/lib/sane/libsane-smfp.so.1.0.1"
78+
79+ ln -s ${stdenv.cc.cc.lib}/lib/libstdc++.so.6 $out/lib/
80+ '';
81+
82+ # all binaries are already stripped
83+ dontStrip = true;
84+
85+ # we did this in prefixup already
86+ dontPatchELF = true;
87+
88+ meta = with stdenv.lib; {
89+ description = "Unified Linux Driver for Samsung printers and scanners";
90+ homepage = "http://www.bchemnet.com/suldr";
91+ downloadPage = "http://www.bchemnet.com/suldr/driver/";
92+ license = licenses.unfree;
93+
94+ # Tested on linux-x86_64. Might work on linux-i386.
95+ # Probably won't work on anything else.
96+ platforms = platforms.linux;
97+ };
98+}
test/golden/importless/1.00.37.txtnew file+34
@@ -0,0 +1,34 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.hostPlatform = β,
3+ α.lib = γ,
4+ α.mkDerivation =
5+ { buildInputs = [δ];
6+ dontPatchELF = Bool;
7+ dontStrip = Bool;
8+ installPhase = String;
9+ meta =
10+ { description = String;
11+ downloadPage = String;
12+ homepage = String;
13+ license = ε;
14+ platforms = ζ;
15+ };
16+ pname = String;
17+ preFixup = String;
18+ src = η;
19+ version = String;
20+ } ->
21+ θ,
22+ β.system = String,
23+ γ.licenses = ι,
24+ γ.platforms = κ,
25+ ι.unfree = ε,
26+ κ.linux = ζ
27+) =>
28+{ cups = δ;
29+ fetchurl = {sha256 = String; url = String;} -> η;
30+ libusb-compat-0_1 = δ;
31+ libxml2 = δ;
32+ stdenv = α;
33+} ->
34+θ
test/golden/importless/1.10.nixnew file+51
@@ -0,0 +1,51 @@
1+{ stdenv, fetchurl, libGLU, xlibsWrapper, libXmu, libXi
2+, AGL ? null
3+}:
4+
5+with stdenv.lib;
6+
7+stdenv.mkDerivation rec {
8+ name = "glew-1.10.0";
9+
10+ src = fetchurl {
11+ url = "mirror://sourceforge/glew/${name}.tgz";
12+ sha256 = "01zki46dr5khzlyywr3cg615bcal32dazfazkf360s1znqh17i4r";
13+ };
14+
15+ buildInputs = [ xlibsWrapper libXmu libXi ]
16+ ++ optionals stdenv.isDarwin [ AGL ];
17+ propagatedBuildInputs = [ libGLU ]; # GL/glew.h includes GL/glu.h
18+
19+ patchPhase = ''
20+ sed -i 's|lib64|lib|' config/Makefile.linux
21+ ${optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
22+ sed -i -e 's/\(INSTALL.*\)-s/\1/' Makefile
23+ ''}
24+ '';
25+
26+ buildFlags = [ "all" ];
27+ installFlags = [ "install.all" ];
28+
29+ preInstall = ''
30+ export GLEW_DEST="$out"
31+ '';
32+
33+ postInstall = ''
34+ mkdir -pv $out/share/doc/glew
35+ mkdir -p $out/lib/pkgconfig
36+ cp glew*.pc $out/lib/pkgconfig
37+ cp -r README.txt LICENSE.txt doc $out/share/doc/glew
38+ '';
39+
40+ makeFlags = [
41+ "SYSTEM=${if stdenv.hostPlatform.isMinGW then "mingw" else stdenv.hostPlatform.parsed.kernel.name}"
42+ ];
43+
44+ meta = with stdenv.lib; {
45+ description = "An OpenGL extension loading library for C(++)";
46+ homepage = "http://glew.sourceforge.net/";
47+ license = licenses.free; # different files under different licenses
48+ #["BSD" "GLX" "SGI-B" "GPL2"]
49+ platforms = platforms.mesaPlatforms;
50+ };
51+}
test/golden/importless/1.10.txtnew file+33
@@ -0,0 +1,33 @@
1+∀ α β γ δ ε ζ η θ ι κ λ.
2+( α.isDarwin = β,
3+ α.lib = γ,
4+ α.mkDerivation =
5+ { buildFlags = [String];
6+ buildInputs = [δ];
7+ installFlags = [String];
8+ makeFlags = [String];
9+ meta =
10+ {description = String; homepage = String; license = ε; platforms = ζ;};
11+ name = String;
12+ patchPhase = String;
13+ postInstall = String;
14+ preInstall = String;
15+ propagatedBuildInputs = [η];
16+ src = θ;
17+ } ->
18+ ι,
19+ γ.licenses = κ,
20+ γ.optionals = β -> [Null] -> [δ],
21+ γ.platforms = λ,
22+ κ.free = ε,
23+ λ.mesaPlatforms = ζ
24+) =>
25+{ AGL = Null;
26+ fetchurl = {sha256 = String; url = String;} -> θ;
27+ libGLU = η;
28+ libXi = δ;
29+ libXmu = δ;
30+ stdenv = α;
31+ xlibsWrapper = δ;
32+} ->
33+ι
test/golden/importless/1.10.x.nixnew file+42
@@ -0,0 +1,42 @@
1+{ fetchurl, stdenv, lib
2+, cmake, libGLU, libGL
3+, freetype, freeimage, zziplib, xorgproto, libXrandr
4+, libXaw, freeglut, libXt, libpng, boost, ois
5+, libX11, libXmu, libSM, pkgconfig
6+, libXxf86vm, libICE
7+, libXrender
8+, withNvidiaCg ? false, nvidia_cg_toolkit
9+, withSamples ? false }:
10+
11+stdenv.mkDerivation {
12+ name = "ogre-1.10.11";
13+
14+ src = fetchurl {
15+ url = "https://bitbucket.org/sinbad/ogre/get/v1-10-11.tar.gz";
16+ sha256 = "1zwvlx5dz9nwjazhnrhzb0w8ilpa84r0hrxrmmy69pgr1p1yif5a";
17+ };
18+
19+ cmakeFlags = [ "-DOGRE_BUILD_SAMPLES=${toString withSamples}" ]
20+ ++ map (x: "-DOGRE_BUILD_PLUGIN_${x}=on")
21+ ([ "BSP" "OCTREE" "PCZ" "PFX" ] ++ lib.optional withNvidiaCg "CG")
22+ ++ map (x: "-DOGRE_BUILD_RENDERSYSTEM_${x}=on") [ "GL" ];
23+
24+ enableParallelBuilding = true;
25+
26+ buildInputs =
27+ [ cmake libGLU libGL
28+ freetype freeimage zziplib xorgproto libXrandr
29+ libXaw freeglut libXt libpng boost ois
30+ libX11 libXmu libSM pkgconfig
31+ libXxf86vm libICE
32+ libXrender
33+ ] ++ lib.optional withNvidiaCg nvidia_cg_toolkit;
34+
35+ meta = {
36+ description = "A 3D engine";
37+ homepage = "https://www.ogre3d.org/";
38+ maintainers = [ stdenv.lib.maintainers.raskin ];
39+ platforms = stdenv.lib.platforms.linux;
40+ license = stdenv.lib.licenses.mit;
41+ };
42+}
test/golden/importless/1.14.nixnew file+252
@@ -0,0 +1,252 @@
1+{ stdenv, fetchurl, tzdata, iana-etc, runCommand
2+, perl, which, pkgconfig, patch, procps, pcre, cacert, Security, Foundation
3+, mailcap, runtimeShell
4+, buildPackages, pkgsTargetTarget
5+, fetchpatch
6+}:
7+
8+let
9+
10+ inherit (stdenv.lib) optionals optionalString;
11+
12+ goBootstrap = runCommand "go-bootstrap" {} ''
13+ mkdir $out
14+ cp -rf ${buildPackages.go_bootstrap}/* $out/
15+ chmod -R u+w $out
16+ find $out -name "*.c" -delete
17+ cp -rf $out/bin/* $out/share/go/bin/
18+ '';
19+
20+ goarch = platform: {
21+ "i686" = "386";
22+ "x86_64" = "amd64";
23+ "aarch64" = "arm64";
24+ "arm" = "arm";
25+ "armv5tel" = "arm";
26+ "armv6l" = "arm";
27+ "armv7l" = "arm";
28+ }.${platform.parsed.cpu.name} or (throw "Unsupported system");
29+
30+in
31+
32+stdenv.mkDerivation rec {
33+ pname = "go";
34+ version = "1.14.12";
35+
36+ src = fetchurl {
37+ url = "https://dl.google.com/go/go${version}.src.tar.gz";
38+ sha256 = "0wdr85l3rr6w50dmlbsib895gs9cc19z5piblp0v9slrsxx4nkxk";
39+ };
40+
41+ # perl is used for testing go vet
42+ nativeBuildInputs = [ perl which pkgconfig patch procps ];
43+ buildInputs = [ cacert pcre ]
44+ ++ optionals stdenv.isLinux [ stdenv.cc.libc.out ]
45+ ++ optionals (stdenv.hostPlatform.libc == "glibc") [ stdenv.cc.libc.static ];
46+
47+ depsTargetTargetPropagated = optionals stdenv.isDarwin [ Security Foundation ];
48+
49+ hardeningDisable = [ "all" ];
50+
51+ prePatch = ''
52+ patchShebangs ./ # replace /bin/bash
53+
54+ # This source produces shell script at run time,
55+ # and thus it is not corrected by patchShebangs.
56+ substituteInPlace misc/cgo/testcarchive/carchive_test.go \
57+ --replace '#!/usr/bin/env bash' '#!${runtimeShell}'
58+
59+ # Patch the mimetype database location which is missing on NixOS.
60+ # but also allow static binaries built with NixOS to run outside nix
61+ sed -i 's,\"/etc/mime.types,"${mailcap}/etc/mime.types\"\,\n\t&,' src/mime/type_unix.go
62+
63+ # Disabling the 'os/http/net' tests (they want files not available in
64+ # chroot builds)
65+ rm src/net/{listen,parse}_test.go
66+ rm src/syscall/exec_linux_test.go
67+
68+ # !!! substituteInPlace does not seems to be effective.
69+ # The os test wants to read files in an existing path. Just don't let it be /usr/bin.
70+ sed -i 's,/usr/bin,'"`pwd`", src/os/os_test.go
71+ sed -i 's,/bin/pwd,'"`type -P pwd`", src/os/os_test.go
72+ # Disable the unix socket test
73+ sed -i '/TestShutdownUnix/aif true \{ return\; \}' src/net/net_test.go
74+ # Disable the hostname test
75+ sed -i '/TestHostname/aif true \{ return\; \}' src/os/os_test.go
76+ # ParseInLocation fails the test
77+ sed -i '/TestParseInSydney/aif true \{ return\; \}' src/time/format_test.go
78+ # Remove the api check as it never worked
79+ sed -i '/src\/cmd\/api\/run.go/ireturn nil' src/cmd/dist/test.go
80+ # Remove the coverage test as we have removed this utility
81+ sed -i '/TestCoverageWithCgo/aif true \{ return\; \}' src/cmd/go/go_test.go
82+ # Remove the timezone naming test
83+ sed -i '/TestLoadFixed/aif true \{ return\; \}' src/time/time_test.go
84+ # Remove disable setgid test
85+ sed -i '/TestRespectSetgidDir/aif true \{ return\; \}' src/cmd/go/internal/work/build_test.go
86+ # Remove cert tests that conflict with NixOS's cert resolution
87+ sed -i '/TestEnvVars/aif true \{ return\; \}' src/crypto/x509/root_unix_test.go
88+ # TestWritevError hangs sometimes
89+ sed -i '/TestWritevError/aif true \{ return\; \}' src/net/writev_test.go
90+ # TestVariousDeadlines fails sometimes
91+ sed -i '/TestVariousDeadlines/aif true \{ return\; \}' src/net/timeout_test.go
92+
93+ sed -i 's,/etc/protocols,${iana-etc}/etc/protocols,' src/net/lookup_unix.go
94+ sed -i 's,/etc/services,${iana-etc}/etc/services,' src/net/port_unix.go
95+
96+ # Disable cgo lookup tests not works, they depend on resolver
97+ rm src/net/cgo_unix_test.go
98+
99+ '' + optionalString stdenv.isLinux ''
100+ # prepend the nix path to the zoneinfo files but also leave the original value for static binaries
101+ # that run outside a nix server
102+ sed -i 's,\"/usr/share/zoneinfo/,"${tzdata}/share/zoneinfo/\"\,\n\t&,' src/time/zoneinfo_unix.go
103+
104+ '' + optionalString stdenv.isAarch32 ''
105+ echo '#!${runtimeShell}' > misc/cgo/testplugin/test.bash
106+ '' + optionalString stdenv.isDarwin ''
107+ substituteInPlace src/race.bash --replace \
108+ "sysctl machdep.cpu.extfeatures | grep -qv EM64T" true
109+ sed -i 's,strings.Contains(.*sysctl.*,true {,' src/cmd/dist/util.go
110+ sed -i 's,"/etc","'"$TMPDIR"'",' src/os/os_test.go
111+ sed -i 's,/_go_os_test,'"$TMPDIR"'/_go_os_test,' src/os/path_test.go
112+
113+ sed -i '/TestChdirAndGetwd/aif true \{ return\; \}' src/os/os_test.go
114+ sed -i '/TestCredentialNoSetGroups/aif true \{ return\; \}' src/os/exec/exec_posix_test.go
115+ sed -i '/TestRead0/aif true \{ return\; \}' src/os/os_test.go
116+ sed -i '/TestSystemRoots/aif true \{ return\; \}' src/crypto/x509/root_darwin_test.go
117+
118+ sed -i '/TestGoInstallRebuildsStalePackagesInOtherGOPATH/aif true \{ return\; \}' src/cmd/go/go_test.go
119+ sed -i '/TestBuildDashIInstallsDependencies/aif true \{ return\; \}' src/cmd/go/go_test.go
120+
121+ sed -i '/TestDisasmExtld/aif true \{ return\; \}' src/cmd/objdump/objdump_test.go
122+
123+ sed -i 's/unrecognized/unknown/' src/cmd/link/internal/ld/lib.go
124+
125+ # TestCurrent fails because Current is not implemented on Darwin
126+ sed -i 's/TestCurrent/testCurrent/g' src/os/user/user_test.go
127+ sed -i 's/TestLookup/testLookup/g' src/os/user/user_test.go
128+
129+ touch $TMPDIR/group $TMPDIR/hosts $TMPDIR/passwd
130+ '';
131+
132+ patches = [
133+ ./remove-tools-1.11.patch
134+ ./ssl-cert-file-1.13.patch
135+ ./remove-test-pie-1.14.patch
136+ ./creds-test.patch
137+ ./go-1.9-skip-flaky-19608.patch
138+ ./go-1.9-skip-flaky-20072.patch
139+ ./skip-external-network-tests.patch
140+ ./skip-nohup-tests.patch
141+
142+ # fix rare TestDontCacheBrokenHTTP2Conn failure
143+ (fetchpatch {
144+ url = "https://github.com/golang/go/commit/ea1437a8cdf6bb3c2d2447833a5d06dbd75f7ae4.patch";
145+ sha256 = "1lyzy4nf8c34a966vw45j3j7hzpvncq2gqspfxffzkyh17xd8sgy";
146+ })
147+ ] ++ [
148+ # breaks under load: https://github.com/golang/go/issues/25628
149+ (if stdenv.isAarch32
150+ then ./skip-test-extra-files-on-aarch32-1.14.patch
151+ else ./skip-test-extra-files-on-386-1.14.patch)
152+ ];
153+
154+ postPatch = ''
155+ find . -name '*.orig' -exec rm {} ';'
156+ '';
157+
158+ GOOS = stdenv.targetPlatform.parsed.kernel.name;
159+ GOARCH = goarch stdenv.targetPlatform;
160+ # GOHOSTOS/GOHOSTARCH must match the building system, not the host system.
161+ # Go will nevertheless build a for host system that we will copy over in
162+ # the install phase.
163+ GOHOSTOS = stdenv.buildPlatform.parsed.kernel.name;
164+ GOHOSTARCH = goarch stdenv.buildPlatform;
165+
166+ # {CC,CXX}_FOR_TARGET must be only set for cross compilation case as go expect those
167+ # to be different from CC/CXX
168+ CC_FOR_TARGET = if (stdenv.buildPlatform != stdenv.targetPlatform) then
169+ "${pkgsTargetTarget.stdenv.cc}/bin/${pkgsTargetTarget.stdenv.cc.targetPrefix}cc"
170+ else
171+ null;
172+ CXX_FOR_TARGET = if (stdenv.buildPlatform != stdenv.targetPlatform) then
173+ "${pkgsTargetTarget.stdenv.cc}/bin/${pkgsTargetTarget.stdenv.cc.targetPrefix}c++"
174+ else
175+ null;
176+
177+ GOARM = toString (stdenv.lib.intersectLists [(stdenv.hostPlatform.parsed.cpu.version or "")] ["5" "6" "7"]);
178+ GO386 = 387; # from Arch: don't assume sse2 on i686
179+ CGO_ENABLED = 1;
180+ # Hopefully avoids test timeouts on Hydra
181+ GO_TEST_TIMEOUT_SCALE = 3;
182+
183+ # Indicate that we are running on build infrastructure
184+ # Some tests assume things like home directories and users exists
185+ GO_BUILDER_NAME = "nix";
186+
187+ GOROOT_BOOTSTRAP="${goBootstrap}/share/go";
188+
189+ postConfigure = ''
190+ export GOCACHE=$TMPDIR/go-cache
191+ # this is compiled into the binary
192+ export GOROOT_FINAL=$out/share/go
193+
194+ export PATH=$(pwd)/bin:$PATH
195+
196+ ${optionalString (stdenv.buildPlatform != stdenv.targetPlatform) ''
197+ # Independent from host/target, CC should produce code for the building system.
198+ # We only set it when cross-compiling.
199+ export CC=${buildPackages.stdenv.cc}/bin/cc
200+ ''}
201+ ulimit -a
202+ '';
203+
204+ postBuild = ''
205+ (cd src && ./make.bash)
206+ '';
207+
208+ doCheck = stdenv.hostPlatform == stdenv.targetPlatform && !stdenv.isDarwin;
209+
210+ checkPhase = ''
211+ runHook preCheck
212+ (cd src && HOME=$TMPDIR GOCACHE=$TMPDIR/go-cache ./run.bash --no-rebuild)
213+ runHook postCheck
214+ '';
215+
216+ preInstall = ''
217+ rm -r pkg/obj
218+ # Contains the wrong perl shebang when cross compiling,
219+ # since it is not used for anything we can deleted as well.
220+ rm src/regexp/syntax/make_perl_groups.pl
221+ '' + (if (stdenv.buildPlatform != stdenv.hostPlatform) then ''
222+ mv bin/*_*/* bin
223+ rmdir bin/*_*
224+ ${optionalString (!(GOHOSTARCH == GOARCH && GOOS == GOHOSTOS)) ''
225+ rm -rf pkg/${GOHOSTOS}_${GOHOSTARCH} pkg/tool/${GOHOSTOS}_${GOHOSTARCH}
226+ ''}
227+ '' else if (stdenv.hostPlatform != stdenv.targetPlatform) then ''
228+ rm -rf bin/*_*
229+ ${optionalString (!(GOHOSTARCH == GOARCH && GOOS == GOHOSTOS)) ''
230+ rm -rf pkg/${GOOS}_${GOARCH} pkg/tool/${GOOS}_${GOARCH}
231+ ''}
232+ '' else "");
233+
234+ installPhase = ''
235+ runHook preInstall
236+ mkdir -p $GOROOT_FINAL
237+ cp -a bin pkg src lib misc api doc $GOROOT_FINAL
238+ ln -s $GOROOT_FINAL/bin $out/bin
239+ runHook postInstall
240+ '';
241+
242+ disallowedReferences = [ goBootstrap ];
243+
244+ meta = with stdenv.lib; {
245+ branch = "1.14";
246+ homepage = "http://golang.org/";
247+ description = "The Go Programming language";
248+ license = licenses.bsd3;
249+ maintainers = teams.golang.members;
250+ platforms = platforms.linux ++ platforms.darwin;
251+ };
252+}
test/golden/importless/1.15.nixnew file+255
@@ -0,0 +1,255 @@
1+{ stdenv, fetchurl, tzdata, iana-etc, runCommand
2+, perl, which, pkgconfig, patch, procps, pcre, cacert, Security, Foundation
3+, mailcap, runtimeShell
4+, buildPackages, pkgsTargetTarget
5+, fetchpatch
6+}:
7+
8+let
9+
10+ inherit (stdenv.lib) optionals optionalString;
11+
12+ goBootstrap = runCommand "go-bootstrap" {} ''
13+ mkdir $out
14+ cp -rf ${buildPackages.go_bootstrap}/* $out/
15+ chmod -R u+w $out
16+ find $out -name "*.c" -delete
17+ cp -rf $out/bin/* $out/share/go/bin/
18+ '';
19+
20+ goarch = platform: {
21+ "i686" = "386";
22+ "x86_64" = "amd64";
23+ "aarch64" = "arm64";
24+ "arm" = "arm";
25+ "armv5tel" = "arm";
26+ "armv6l" = "arm";
27+ "armv7l" = "arm";
28+ }.${platform.parsed.cpu.name} or (throw "Unsupported system");
29+
30+in
31+
32+stdenv.mkDerivation rec {
33+ pname = "go";
34+ version = "1.15.5";
35+
36+ src = fetchurl {
37+ url = "https://dl.google.com/go/go${version}.src.tar.gz";
38+ sha256 = "1wc43h3pmi92r6ypmh58vq13vm44rl1di09assz3xdwlry86n1y1";
39+ };
40+
41+ # perl is used for testing go vet
42+ nativeBuildInputs = [ perl which pkgconfig patch procps ];
43+ buildInputs = [ cacert pcre ]
44+ ++ optionals stdenv.isLinux [ stdenv.cc.libc.out ]
45+ ++ optionals (stdenv.hostPlatform.libc == "glibc") [ stdenv.cc.libc.static ];
46+
47+ depsTargetTargetPropagated = optionals stdenv.isDarwin [ Security Foundation ];
48+
49+ hardeningDisable = [ "all" ];
50+
51+ prePatch = ''
52+ patchShebangs ./ # replace /bin/bash
53+
54+ # This source produces shell script at run time,
55+ # and thus it is not corrected by patchShebangs.
56+ substituteInPlace misc/cgo/testcarchive/carchive_test.go \
57+ --replace '#!/usr/bin/env bash' '#!${runtimeShell}'
58+
59+ # Patch the mimetype database location which is missing on NixOS.
60+ # but also allow static binaries built with NixOS to run outside nix
61+ sed -i 's,\"/etc/mime.types,"${mailcap}/etc/mime.types\"\,\n\t&,' src/mime/type_unix.go
62+
63+ # Disabling the 'os/http/net' tests (they want files not available in
64+ # chroot builds)
65+ rm src/net/{listen,parse}_test.go
66+ rm src/syscall/exec_linux_test.go
67+
68+ # !!! substituteInPlace does not seems to be effective.
69+ # The os test wants to read files in an existing path. Just don't let it be /usr/bin.
70+ sed -i 's,/usr/bin,'"`pwd`", src/os/os_test.go
71+ sed -i 's,/bin/pwd,'"`type -P pwd`", src/os/os_test.go
72+ # Fails on aarch64
73+ sed -i '/TestFallocate/aif true \{ return\; \}' src/cmd/link/internal/ld/fallocate_test.go
74+ # Skip this test since ssl patches mess it up.
75+ sed -i '/TestLoadSystemCertsLoadColonSeparatedDirs/aif true \{ return\; \}' src/crypto/x509/root_unix_test.go
76+ # Disable another PIE test which breaks.
77+ sed -i '/TestTrivialPIE/aif true \{ return\; \}' misc/cgo/testshared/shared_test.go
78+ # Disable the BuildModePie test
79+ sed -i '/TestBuildmodePIE/aif true \{ return\; \}' src/cmd/go/go_test.go
80+ # Disable the unix socket test
81+ sed -i '/TestShutdownUnix/aif true \{ return\; \}' src/net/net_test.go
82+ # Disable the hostname test
83+ sed -i '/TestHostname/aif true \{ return\; \}' src/os/os_test.go
84+ # ParseInLocation fails the test
85+ sed -i '/TestParseInSydney/aif true \{ return\; \}' src/time/format_test.go
86+ # Remove the api check as it never worked
87+ sed -i '/src\/cmd\/api\/run.go/ireturn nil' src/cmd/dist/test.go
88+ # Remove the coverage test as we have removed this utility
89+ sed -i '/TestCoverageWithCgo/aif true \{ return\; \}' src/cmd/go/go_test.go
90+ # Remove the timezone naming test
91+ sed -i '/TestLoadFixed/aif true \{ return\; \}' src/time/time_test.go
92+ # Remove disable setgid test
93+ sed -i '/TestRespectSetgidDir/aif true \{ return\; \}' src/cmd/go/internal/work/build_test.go
94+ # Remove cert tests that conflict with NixOS's cert resolution
95+ sed -i '/TestEnvVars/aif true \{ return\; \}' src/crypto/x509/root_unix_test.go
96+ # TestWritevError hangs sometimes
97+ sed -i '/TestWritevError/aif true \{ return\; \}' src/net/writev_test.go
98+ # TestVariousDeadlines fails sometimes
99+ sed -i '/TestVariousDeadlines/aif true \{ return\; \}' src/net/timeout_test.go
100+
101+ sed -i 's,/etc/protocols,${iana-etc}/etc/protocols,' src/net/lookup_unix.go
102+ sed -i 's,/etc/services,${iana-etc}/etc/services,' src/net/port_unix.go
103+
104+ # Disable cgo lookup tests not works, they depend on resolver
105+ rm src/net/cgo_unix_test.go
106+
107+ '' + optionalString stdenv.isLinux ''
108+ # prepend the nix path to the zoneinfo files but also leave the original value for static binaries
109+ # that run outside a nix server
110+ sed -i 's,\"/usr/share/zoneinfo/,"${tzdata}/share/zoneinfo/\"\,\n\t&,' src/time/zoneinfo_unix.go
111+
112+ '' + optionalString stdenv.isAarch32 ''
113+ echo '#!${runtimeShell}' > misc/cgo/testplugin/test.bash
114+ '' + optionalString stdenv.isDarwin ''
115+ substituteInPlace src/race.bash --replace \
116+ "sysctl machdep.cpu.extfeatures | grep -qv EM64T" true
117+ sed -i 's,strings.Contains(.*sysctl.*,true {,' src/cmd/dist/util.go
118+ sed -i 's,"/etc","'"$TMPDIR"'",' src/os/os_test.go
119+ sed -i 's,/_go_os_test,'"$TMPDIR"'/_go_os_test,' src/os/path_test.go
120+
121+ sed -i '/TestChdirAndGetwd/aif true \{ return\; \}' src/os/os_test.go
122+ sed -i '/TestCredentialNoSetGroups/aif true \{ return\; \}' src/os/exec/exec_posix_test.go
123+ sed -i '/TestRead0/aif true \{ return\; \}' src/os/os_test.go
124+ sed -i '/TestSystemRoots/aif true \{ return\; \}' src/crypto/x509/root_darwin_test.go
125+
126+ sed -i '/TestGoInstallRebuildsStalePackagesInOtherGOPATH/aif true \{ return\; \}' src/cmd/go/go_test.go
127+ sed -i '/TestBuildDashIInstallsDependencies/aif true \{ return\; \}' src/cmd/go/go_test.go
128+
129+ sed -i '/TestDisasmExtld/aif true \{ return\; \}' src/cmd/objdump/objdump_test.go
130+
131+ sed -i 's/unrecognized/unknown/' src/cmd/link/internal/ld/lib.go
132+
133+ # TestCurrent fails because Current is not implemented on Darwin
134+ sed -i 's/TestCurrent/testCurrent/g' src/os/user/user_test.go
135+ sed -i 's/TestLookup/testLookup/g' src/os/user/user_test.go
136+
137+ touch $TMPDIR/group $TMPDIR/hosts $TMPDIR/passwd
138+ '';
139+
140+ patches = [
141+ ./remove-tools-1.11.patch
142+ ./ssl-cert-file-1.15.patch
143+ ./remove-test-pie-1.15.patch
144+ ./creds-test.patch
145+ ./go-1.9-skip-flaky-19608.patch
146+ ./go-1.9-skip-flaky-20072.patch
147+ ./skip-external-network-tests-1.15.patch
148+ ./skip-nohup-tests.patch
149+ ./skip-cgo-tests-1.15.patch
150+ ] ++ [
151+ # breaks under load: https://github.com/golang/go/issues/25628
152+ (if stdenv.isAarch32
153+ then ./skip-test-extra-files-on-aarch32-1.14.patch
154+ else ./skip-test-extra-files-on-386-1.14.patch)
155+ ];
156+
157+ postPatch = ''
158+ find . -name '*.orig' -exec rm {} ';'
159+ '';
160+
161+ GOOS = stdenv.targetPlatform.parsed.kernel.name;
162+ GOARCH = goarch stdenv.targetPlatform;
163+ # GOHOSTOS/GOHOSTARCH must match the building system, not the host system.
164+ # Go will nevertheless build a for host system that we will copy over in
165+ # the install phase.
166+ GOHOSTOS = stdenv.buildPlatform.parsed.kernel.name;
167+ GOHOSTARCH = goarch stdenv.buildPlatform;
168+
169+ # {CC,CXX}_FOR_TARGET must be only set for cross compilation case as go expect those
170+ # to be different from CC/CXX
171+ CC_FOR_TARGET = if (stdenv.buildPlatform != stdenv.targetPlatform) then
172+ "${pkgsTargetTarget.stdenv.cc}/bin/${pkgsTargetTarget.stdenv.cc.targetPrefix}cc"
173+ else
174+ null;
175+ CXX_FOR_TARGET = if (stdenv.buildPlatform != stdenv.targetPlatform) then
176+ "${pkgsTargetTarget.stdenv.cc}/bin/${pkgsTargetTarget.stdenv.cc.targetPrefix}c++"
177+ else
178+ null;
179+
180+ GOARM = toString (stdenv.lib.intersectLists [(stdenv.hostPlatform.parsed.cpu.version or "")] ["5" "6" "7"]);
181+ GO386 = 387; # from Arch: don't assume sse2 on i686
182+ CGO_ENABLED = 1;
183+ # Hopefully avoids test timeouts on Hydra
184+ GO_TEST_TIMEOUT_SCALE = 3;
185+
186+ # Indicate that we are running on build infrastructure
187+ # Some tests assume things like home directories and users exists
188+ GO_BUILDER_NAME = "nix";
189+
190+ GOROOT_BOOTSTRAP="${goBootstrap}/share/go";
191+
192+ postConfigure = ''
193+ export GOCACHE=$TMPDIR/go-cache
194+ # this is compiled into the binary
195+ export GOROOT_FINAL=$out/share/go
196+
197+ export PATH=$(pwd)/bin:$PATH
198+
199+ ${optionalString (stdenv.buildPlatform != stdenv.targetPlatform) ''
200+ # Independent from host/target, CC should produce code for the building system.
201+ # We only set it when cross-compiling.
202+ export CC=${buildPackages.stdenv.cc}/bin/cc
203+ ''}
204+ ulimit -a
205+ '';
206+
207+ postBuild = ''
208+ (cd src && ./make.bash)
209+ '';
210+
211+ doCheck = stdenv.hostPlatform == stdenv.targetPlatform && !stdenv.isDarwin;
212+
213+ checkPhase = ''
214+ runHook preCheck
215+ (cd src && HOME=$TMPDIR GOCACHE=$TMPDIR/go-cache ./run.bash --no-rebuild)
216+ runHook postCheck
217+ '';
218+
219+ preInstall = ''
220+ rm -r pkg/obj
221+ # Contains the wrong perl shebang when cross compiling,
222+ # since it is not used for anything we can deleted as well.
223+ rm src/regexp/syntax/make_perl_groups.pl
224+ '' + (if (stdenv.buildPlatform != stdenv.hostPlatform) then ''
225+ mv bin/*_*/* bin
226+ rmdir bin/*_*
227+ ${optionalString (!(GOHOSTARCH == GOARCH && GOOS == GOHOSTOS)) ''
228+ rm -rf pkg/${GOHOSTOS}_${GOHOSTARCH} pkg/tool/${GOHOSTOS}_${GOHOSTARCH}
229+ ''}
230+ '' else if (stdenv.hostPlatform != stdenv.targetPlatform) then ''
231+ rm -rf bin/*_*
232+ ${optionalString (!(GOHOSTARCH == GOARCH && GOOS == GOHOSTOS)) ''
233+ rm -rf pkg/${GOOS}_${GOARCH} pkg/tool/${GOOS}_${GOARCH}
234+ ''}
235+ '' else "");
236+
237+ installPhase = ''
238+ runHook preInstall
239+ mkdir -p $GOROOT_FINAL
240+ cp -a bin pkg src lib misc api doc $GOROOT_FINAL
241+ ln -s $GOROOT_FINAL/bin $out/bin
242+ runHook postInstall
243+ '';
244+
245+ disallowedReferences = [ goBootstrap ];
246+
247+ meta = with stdenv.lib; {
248+ branch = "1.15";
249+ homepage = "http://golang.org/";
250+ description = "The Go Programming language";
251+ license = licenses.bsd3;
252+ maintainers = teams.golang.members;
253+ platforms = platforms.linux ++ platforms.darwin;
254+ };
255+}
test/golden/importless/1.2.2.nixnew file+92
@@ -0,0 +1,92 @@
1+{ stdenv, lib, fetchurl, makeWrapper,
2+ ocaml, unzip, ncurses, curl, aspcud
3+}:
4+
5+assert lib.versionAtLeast ocaml.version "3.12.1";
6+
7+let
8+ srcs = {
9+ cudf = fetchurl {
10+ url = "https://gforge.inria.fr/frs/download.php/file/33593/cudf-0.7.tar.gz";
11+ sha256 = "92c8a9ed730bbac73f3513abab41127d966c9b9202ab2aaffcd02358c030a701";
12+ };
13+ extlib = fetchurl {
14+ url = "http://ocaml-extlib.googlecode.com/files/extlib-1.5.3.tar.gz";
15+ sha256 = "c095eef4202a8614ff1474d4c08c50c32d6ca82d1015387785cf03d5913ec021";
16+ };
17+ ocaml_re = fetchurl {
18+ url = "https://github.com/ocaml/ocaml-re/archive/ocaml-re-1.2.0.tar.gz";
19+ sha256 = "a34dd9d6136731436a963bbab5c4bbb16e5d4e21b3b851d34887a3dec451999f";
20+ };
21+ ocamlgraph = fetchurl {
22+ url = "http://ocamlgraph.lri.fr/download/ocamlgraph-1.8.5.tar.gz";
23+ sha256 = "d167466435a155c779d5ec25b2db83ad851feb42ebc37dca8ffa345ddaefb82f";
24+ };
25+ dose3 = fetchurl {
26+ url = "https://gforge.inria.fr/frs/download.php/file/34277/dose3-3.3.tar.gz";
27+ sha256 = "8dc4dae9b1a81bb3a42abb283df785ba3eb00ade29b13875821c69f03e00680e";
28+ };
29+ cmdliner = fetchurl {
30+ url = "https://erratique.ch/software/cmdliner/releases/cmdliner-0.9.7.tbz";
31+ sha256 = "9c19893cffb5d3c3469ee0cce85e3eeeba17d309b33b9ace31aba06f68f0bf7a";
32+ };
33+ uutf = fetchurl {
34+ url = "https://erratique.ch/software/uutf/releases/uutf-0.9.3.tbz";
35+ sha256 = "1f364f89b1179e5182a4d3ad8975f57389d45548735d19054845e06a27107877";
36+ };
37+ jsonm = fetchurl {
38+ url = "https://erratique.ch/software/jsonm/releases/jsonm-0.9.1.tbz";
39+ sha256 = "3fd4dca045d82332da847e65e981d8b504883571d299a3f7e71447d46bc65f73";
40+ };
41+ opam = fetchurl {
42+ url = "https://github.com/ocaml/opam/archive/1.2.2.zip";
43+ sha256 = "c590ce55ae69ec74f46215cf16a156a02b23c5f3ecb22f23a3ad9ba3d91ddb6e";
44+ };
45+ };
46+in stdenv.mkDerivation {
47+ pname = "opam";
48+ version = "1.2.2";
49+
50+ buildInputs = [ unzip curl ncurses ocaml makeWrapper ];
51+
52+ src = srcs.opam;
53+
54+ postUnpack = ''
55+ ln -sv ${srcs.cudf} $sourceRoot/src_ext/${srcs.cudf.name}
56+ ln -sv ${srcs.extlib} $sourceRoot/src_ext/${srcs.extlib.name}
57+ ln -sv ${srcs.ocaml_re} $sourceRoot/src_ext/${srcs.ocaml_re.name}
58+ ln -sv ${srcs.ocamlgraph} $sourceRoot/src_ext/${srcs.ocamlgraph.name}
59+ ln -sv ${srcs.dose3} $sourceRoot/src_ext/${srcs.dose3.name}
60+ ln -sv ${srcs.cmdliner} $sourceRoot/src_ext/${srcs.cmdliner.name}
61+ ln -sv ${srcs.uutf} $sourceRoot/src_ext/${srcs.uutf.name}
62+ ln -sv ${srcs.jsonm} $sourceRoot/src_ext/${srcs.jsonm.name}
63+ '';
64+
65+ preConfigure = ''
66+ substituteInPlace ./src_ext/Makefile --replace "%.stamp: %.download" "%.stamp:"
67+ '';
68+
69+ postConfigure = "make lib-ext";
70+
71+ # Dirty, but apparently ocp-build requires a TERM
72+ makeFlags = ["TERM=screen"];
73+
74+ # change argv0 to "opam" as a workaround for
75+ # https://github.com/ocaml/opam/issues/2142
76+ postInstall = ''
77+ mv $out/bin/opam $out/bin/.opam-wrapped
78+ makeWrapper $out/bin/.opam-wrapped $out/bin/opam \
79+ --argv0 "opam" \
80+ --suffix PATH : ${aspcud}/bin:${unzip}/bin:${curl}/bin
81+ '';
82+
83+ doCheck = false;
84+
85+ meta = with stdenv.lib; {
86+ description = "A package manager for OCaml";
87+ homepage = "http://opam.ocamlpro.com/";
88+ maintainers = [ maintainers.henrytill ];
89+ platforms = platforms.all;
90+ license = licenses.lgpl21Plus;
91+ };
92+}
test/golden/importless/1.2.2.txtnew file+42
@@ -0,0 +1,42 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο.
2+( β.lib = γ,
3+ β.mkDerivation =
4+ { buildInputs = [δ];
5+ doCheck = Bool;
6+ makeFlags = [String];
7+ meta =
8+ { description = String;
9+ homepage = String;
10+ license = ε;
11+ maintainers = [ζ];
12+ platforms = η;
13+ };
14+ pname = String;
15+ postConfigure = String;
16+ postInstall = String;
17+ postUnpack = String;
18+ preConfigure = String;
19+ src = ∀ α. α;
20+ version = String;
21+ } ->
22+ θ,
23+ ι.versionAtLeast = κ -> String -> Bool,
24+ δ.version = κ,
25+ γ.licenses = λ,
26+ γ.maintainers = μ,
27+ γ.platforms = ν,
28+ λ.lgpl21Plus = ε,
29+ μ.henrytill = ζ,
30+ ν.all = η
31+) =>
32+{ aspcud = ξ;
33+ curl = δ;
34+ fetchurl = {sha256 = String; url = String;} -> ο;
35+ lib = ι;
36+ makeWrapper = δ;
37+ ncurses = δ;
38+ ocaml = δ;
39+ stdenv = β;
40+ unzip = δ;
41+} ->
42+θ
test/golden/importless/1.2.nixnew file+21
@@ -0,0 +1,21 @@
1+{stdenv, fetchurl, pkgconfig, m4}:
2+
3+stdenv.mkDerivation rec {
4+ name = "libsigc++-1.2.7";
5+
6+ src = fetchurl {
7+ url = "mirror://gnome/sources/libsigc++/1.2/${name}.tar.bz2";
8+ sha256 = "099224v5y0y1ggqrfc8vga8afr3nb93iicn7cj8xxgsrwa83s5nr";
9+ };
10+
11+ nativeBuildInputs = [ pkgconfig ];
12+ buildInputs = [ m4];
13+
14+ meta = with stdenv.lib; {
15+ homepage = "https://libsigcplusplus.github.io/libsigcplusplus/";
16+ description = "A typesafe callback system for standard C++";
17+ branch = "1.2";
18+ platforms = platforms.unix;
19+ license = licenses.lgpl3;
20+ };
21+}
test/golden/importless/1.2.txtnew file+27
@@ -0,0 +1,27 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ meta =
6+ { branch = String;
7+ description = String;
8+ homepage = String;
9+ license = δ;
10+ platforms = ε;
11+ };
12+ name = String;
13+ nativeBuildInputs = [ζ];
14+ src = η;
15+ } ->
16+ θ,
17+ β.licenses = ι,
18+ β.platforms = κ,
19+ ι.lgpl3 = δ,
20+ κ.unix = ε
21+) =>
22+{ fetchurl = {sha256 = String; url = String;} -> η;
23+ m4 = γ;
24+ pkgconfig = ζ;
25+ stdenv = α;
26+} ->
27+θ
test/golden/importless/1.3.nixnew file+160
@@ -0,0 +1,160 @@
1+{ stdenv, fetchurl, fetchzip, fetchFromGitHub
2+# build tools
3+, gfortran, m4, makeWrapper, patchelf, perl, which, python2
4+, cmake
5+# libjulia dependencies
6+, libunwind, readline, utf8proc, zlib
7+# standard library dependencies
8+, curl, fftwSinglePrec, fftw, gmp, libgit2, mpfr, openlibm, openspecfun, pcre2
9+# linear algebra
10+, blas, lapack, arpack
11+# Darwin frameworks
12+, CoreServices, ApplicationServices
13+}:
14+
15+assert (!blas.isILP64) && (!lapack.isILP64);
16+
17+with stdenv.lib;
18+
19+let
20+ majorVersion = "1";
21+ minorVersion = "3";
22+ maintenanceVersion = "1";
23+ src_sha256 = "0q9a7yc3b235psrwl5ghyxgwly25lf8n818l8h6bkf2ymdbsv5p6";
24+ version = "${majorVersion}.${minorVersion}.${maintenanceVersion}";
25+in
26+
27+stdenv.mkDerivation rec {
28+ pname = "julia";
29+ inherit version;
30+
31+ src = fetchzip {
32+ url = "https://github.com/JuliaLang/julia/releases/download/v${majorVersion}.${minorVersion}.${maintenanceVersion}/julia-${majorVersion}.${minorVersion}.${maintenanceVersion}-full.tar.gz";
33+ sha256 = src_sha256;
34+ };
35+
36+ prePatch = ''
37+ export PATH=$PATH:${cmake}/bin
38+ '';
39+
40+ patches = [
41+ ./use-system-utf8proc-julia-1.3.patch
42+
43+ # Julia recompiles a precompiled file if the mtime stored *in* the
44+ # .ji file differs from the mtime of the .ji file. This
45+ # doesn't work in Nix because Nix changes the mtime of files in
46+ # the Nix store to 1. So patch Julia to accept mtimes of 1.
47+ ./allow_nix_mtime.patch
48+ ];
49+
50+ postPatch = ''
51+ patchShebangs . contrib
52+ for i in backtrace cmdlineargs; do
53+ mv test/$i.jl{,.off}
54+ touch test/$i.jl
55+ done
56+ rm stdlib/Sockets/test/runtests.jl && touch stdlib/Sockets/test/runtests.jl
57+ rm stdlib/Distributed/test/runtests.jl && touch stdlib/Distributed/test/runtests.jl
58+ sed -e 's/Invalid Content-Type:/invalid Content-Type:/g' -i ./stdlib/LibGit2/test/libgit2.jl
59+ sed -e 's/Failed to resolve /failed to resolve /g' -i ./stdlib/LibGit2/test/libgit2.jl
60+ '';
61+
62+ buildInputs = [
63+ arpack fftw fftwSinglePrec gmp libgit2 libunwind mpfr
64+ pcre2.dev blas lapack openlibm openspecfun readline utf8proc
65+ zlib
66+ ]
67+ ++ stdenv.lib.optionals stdenv.isDarwin [CoreServices ApplicationServices]
68+ ;
69+
70+ nativeBuildInputs = [ curl gfortran m4 makeWrapper patchelf perl python2 which ];
71+
72+ makeFlags =
73+ let
74+ arch = head (splitString "-" stdenv.system);
75+ march = { x86_64 = stdenv.hostPlatform.platform.gcc.arch or "x86-64"; i686 = "pentium4"; }.${arch}
76+ or (throw "unsupported architecture: ${arch}");
77+ # Julia requires Pentium 4 (SSE2) or better
78+ cpuTarget = { x86_64 = "x86-64"; i686 = "pentium4"; }.${arch}
79+ or (throw "unsupported architecture: ${arch}");
80+ # Julia applies a lot of patches to its dependencies, so for now do not use the system LLVM
81+ # https://github.com/JuliaLang/julia/tree/master/deps/patches
82+ in [
83+ "ARCH=${arch}"
84+ "MARCH=${march}"
85+ "JULIA_CPU_TARGET=${cpuTarget}"
86+ "PREFIX=$(out)"
87+ "prefix=$(out)"
88+ "SHELL=${stdenv.shell}"
89+
90+ "USE_SYSTEM_BLAS=1"
91+ "USE_BLAS64=${if blas.isILP64 then "1" else "0"}"
92+
93+ "USE_SYSTEM_LAPACK=1"
94+
95+ "USE_SYSTEM_ARPACK=1"
96+ "USE_SYSTEM_FFTW=1"
97+ "USE_SYSTEM_GMP=1"
98+ "USE_SYSTEM_LIBGIT2=1"
99+ "USE_SYSTEM_LIBUNWIND=1"
100+
101+ "USE_SYSTEM_MPFR=1"
102+ "USE_SYSTEM_OPENLIBM=1"
103+ "USE_SYSTEM_OPENSPECFUN=1"
104+ "USE_SYSTEM_PATCHELF=1"
105+ "USE_SYSTEM_PCRE=1"
106+ "PCRE_CONFIG=${pcre2.dev}/bin/pcre2-config"
107+ "PCRE_INCL_PATH=${pcre2.dev}/include/pcre2.h"
108+ "USE_SYSTEM_READLINE=1"
109+ "USE_SYSTEM_UTF8PROC=1"
110+ "USE_SYSTEM_ZLIB=1"
111+
112+ "USE_BINARYBUILDER=0"
113+ ];
114+
115+ LD_LIBRARY_PATH = makeLibraryPath [
116+ arpack fftw fftwSinglePrec gmp libgit2 mpfr blas openlibm
117+ openspecfun pcre2 lapack
118+ ];
119+
120+ enableParallelBuilding = true;
121+
122+ doCheck = !stdenv.isDarwin;
123+ checkTarget = "testall";
124+ # Julia's tests require read/write access to $HOME
125+ preCheck = ''
126+ export HOME="$NIX_BUILD_TOP"
127+ '';
128+
129+ preBuild = ''
130+ sed -e '/^install:/s@[^ ]*/doc/[^ ]*@@' -i Makefile
131+ sed -e '/[$](DESTDIR)[$](docdir)/d' -i Makefile
132+ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
133+ '';
134+
135+ postInstall = ''
136+ # Symlink shared libraries from LD_LIBRARY_PATH into lib/julia,
137+ # as using a wrapper with LD_LIBRARY_PATH causes segmentation
138+ # faults when program returns an error:
139+ # $ julia -e 'throw(Error())'
140+ find $(echo $LD_LIBRARY_PATH | sed 's|:| |g') -maxdepth 1 -name '*.${if stdenv.isDarwin then "dylib" else "so"}*' | while read lib; do
141+ if [[ ! -e $out/lib/julia/$(basename $lib) ]]; then
142+ ln -sv $lib $out/lib/julia/$(basename $lib)
143+ fi
144+ done
145+ '';
146+
147+ passthru = {
148+ inherit majorVersion minorVersion maintenanceVersion;
149+ site = "share/julia/site/v${majorVersion}.${minorVersion}";
150+ };
151+
152+ meta = {
153+ broken = true;
154+ description = "High-level performance-oriented dynamical language for technical computing";
155+ homepage = "https://julialang.org/";
156+ license = stdenv.lib.licenses.mit;
157+ maintainers = with stdenv.lib.maintainers; [ raskin rob garrison ];
158+ platforms = [ "i686-linux" "x86_64-linux" "x86_64-darwin" ];
159+ };
160+}
test/golden/importless/1.3.txtnew file+87
@@ -0,0 +1,87 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1.
2+( β.?hostPlatform = γ,
3+ γ.?platform = δ,
4+ δ.?gcc = ε,
5+ ε.?arch = String,
6+ β.isDarwin = Bool,
7+ β.lib = ζ,
8+ β.mkDerivation =
9+ { LD_LIBRARY_PATH = η;
10+ buildInputs = [θ];
11+ checkTarget = String;
12+ doCheck = Bool;
13+ enableParallelBuilding = Bool;
14+ makeFlags = [String];
15+ meta =
16+ { broken = Bool;
17+ description = String;
18+ homepage = String;
19+ license = ι;
20+ maintainers = [κ];
21+ platforms = [String];
22+ };
23+ nativeBuildInputs = [λ];
24+ passthru =
25+ { maintenanceVersion = String;
26+ majorVersion = String;
27+ minorVersion = String;
28+ site = String;
29+ };
30+ patches = [String];
31+ pname = String;
32+ postInstall = String;
33+ postPatch = String;
34+ preBuild = String;
35+ preCheck = String;
36+ prePatch = String;
37+ src = μ;
38+ version = ∀ α. α;
39+ } ->
40+ ν,
41+ β.system = ξ,
42+ θ.dev = θ,
43+ θ.isILP64 = Bool,
44+ ζ.garrison = κ,
45+ ζ.head = ο -> π,
46+ ζ.makeLibraryPath = [θ] -> η,
47+ ζ.raskin = κ,
48+ ζ.rob = κ,
49+ ζ.splitString = String -> ξ -> ο,
50+ ζ.throw = String -> ρ,
51+ σ.licenses = τ,
52+ τ.mit = ι,
53+ υ.maintainers = φ,
54+ χ.optionals = ψ -> [ω] -> [θ]
55+) =>
56+{ ApplicationServices = ω;
57+ CoreServices = ω;
58+ arpack = θ;
59+ blas = θ;
60+ cmake = α1;
61+ curl = λ;
62+ fetchFromGitHub = β1;
63+ fetchurl = γ1;
64+ fetchzip = {sha256 = String; url = String;} -> μ;
65+ fftw = θ;
66+ fftwSinglePrec = θ;
67+ gfortran = λ;
68+ gmp = θ;
69+ lapack = θ;
70+ libgit2 = θ;
71+ libunwind = θ;
72+ m4 = λ;
73+ makeWrapper = λ;
74+ mpfr = θ;
75+ openlibm = θ;
76+ openspecfun = θ;
77+ patchelf = λ;
78+ pcre2 = θ;
79+ perl = λ;
80+ python2 = λ;
81+ readline = θ;
82+ stdenv = β;
83+ utf8proc = θ;
84+ which = λ;
85+ zlib = θ;
86+} ->
87+ν
test/golden/importless/1.4.nixnew file+22
@@ -0,0 +1,22 @@
1+{stdenv, fetchurl}:
2+
3+stdenv.mkDerivation rec {
4+ name = "tetgen-1.4.3";
5+
6+ src = fetchurl {
7+ url = "${meta.homepage}/files/tetgen1.4.3.tar.gz";
8+ sha256 = "0d70vjqdapmy1ghlsxjlvl5z9yp310zw697bapc4zxmp0sxi29wm";
9+ };
10+
11+ installPhase = ''
12+ mkdir -p $out/bin
13+ cp tetgen $out/bin
14+ '';
15+
16+ meta = {
17+ description = "Quality Tetrahedral Mesh Generator and 3D Delaunay Triangulator";
18+ homepage = "http://tetgen.org/";
19+ license = stdenv.lib.licenses.mit;
20+ platforms = stdenv.lib.platforms.linux;
21+ };
22+}
test/golden/importless/1.4.txtnew file+16
@@ -0,0 +1,16 @@
1+∀ α β γ δ ε ζ η θ ι.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { installPhase = String;
5+ meta =
6+ {description = String; homepage = String; license = γ; platforms = δ;};
7+ name = String;
8+ src = ε;
9+ } ->
10+ ζ,
11+ β.licenses = η,
12+ η.mit = γ,
13+ θ.platforms = ι,
14+ ι.linux = δ
15+) =>
16+{fetchurl = {sha256 = String; url = String;} -> ε; stdenv = α;} -> ζ
test/golden/importless/1.43.nixnew file+35
@@ -0,0 +1,35 @@
1+{ lib
2+, buildPythonPackage
3+, fetchPypi
4+, fetchpatch
5+, hypothesis
6+, pycodestyle
7+, pyflakes
8+, pytest
9+, setuptools
10+, pkgs
11+}:
12+
13+buildPythonPackage rec {
14+ pname = "mutagen";
15+ version = "1.43.1";
16+
17+ src = fetchPypi {
18+ inherit pname version;
19+ sha256 = "d873baeb7815311d3420aab0a1d83f050f628228cbc2d6045a14a16460411bc9";
20+ };
21+
22+ propagatedBuildInputs = [ setuptools ];
23+ checkInputs = [
24+ pkgs.faad2 pkgs.flac pkgs.vorbis-tools pkgs.liboggz
25+ pkgs.glibcLocales pycodestyle pyflakes pytest hypothesis
26+ ];
27+ LC_ALL = "en_US.UTF-8";
28+
29+ meta = with lib; {
30+ description = "Python multimedia tagging library";
31+ homepage = "https://mutagen.readthedocs.io";
32+ license = licenses.lgpl2Plus;
33+ platforms = platforms.all;
34+ };
35+}
test/golden/importless/1.5.nixnew file+32
@@ -0,0 +1,32 @@
1+{ stdenv, fetchzip, ocaml, findlib, ocamlbuild }:
2+
3+stdenv.mkDerivation {
4+
5+ name = "ocaml${ocaml.version}-csv-1.5";
6+
7+ src = fetchzip {
8+ url = "https://github.com/Chris00/ocaml-csv/releases/download/1.5/csv-1.5.tar.gz";
9+ sha256 = "1ca7jgg58j24pccs5fshis726s06fdcjshnwza5kwxpjgdbvc63g";
10+ };
11+
12+ buildInputs = [ ocaml findlib ocamlbuild ];
13+
14+ createFindlibDestdir = true;
15+
16+ configurePhase = "ocaml setup.ml -configure --prefix $out --enable-tests";
17+
18+ buildPhase = "ocaml setup.ml -build";
19+
20+ doCheck = true;
21+ checkPhase = "ocaml setup.ml -test";
22+
23+ installPhase = "ocaml setup.ml -install";
24+
25+ meta = with stdenv.lib; {
26+ description = "A pure OCaml library to read and write CSV files";
27+ homepage = "https://github.com/Chris00/ocaml-csv";
28+ license = licenses.lgpl21;
29+ maintainers = [ maintainers.vbgl ];
30+ platforms = ocaml.meta.platforms or [];
31+ };
32+}
test/golden/importless/1.5.txtnew file+35
@@ -0,0 +1,35 @@
1+∀ α β γ δ ε ζ η θ ι κ λ.
2+( α.?meta = β,
3+ β.?platforms = [γ],
4+ δ.lib = ε,
5+ δ.mkDerivation =
6+ { buildInputs = [α];
7+ buildPhase = String;
8+ checkPhase = String;
9+ configurePhase = String;
10+ createFindlibDestdir = Bool;
11+ doCheck = Bool;
12+ installPhase = String;
13+ meta =
14+ { description = String;
15+ homepage = String;
16+ license = ζ;
17+ maintainers = [η];
18+ platforms = [γ];
19+ };
20+ name = String;
21+ src = θ;
22+ } ->
23+ ι,
24+ ε.licenses = κ,
25+ ε.maintainers = λ,
26+ κ.lgpl21 = ζ,
27+ λ.vbgl = η
28+) =>
29+{ fetchzip = {sha256 = String; url = String;} -> θ;
30+ findlib = α;
31+ ocaml = α;
32+ ocamlbuild = α;
33+ stdenv = δ;
34+} ->
35+ι
test/golden/importless/1.55.nixnew file+12
@@ -0,0 +1,12 @@
1+{ callPackage, fetchurl, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "1.55.0";
5+
6+ patches = [ ./clang-math.patch ./clang-math-2.patch ./gcc-5.patch ];
7+
8+ src = fetchurl {
9+ url = "mirror://sourceforge/boost/boost_1_55_0.tar.bz2";
10+ sha256 = "0lkv5dzssbl5fmh2nkaszi8x9qbj80pr4acf9i26sj3rvlih1w7z";
11+ };
12+})
test/golden/importless/1.55.txtnew file+6
@@ -0,0 +1,6 @@
1+∀ α β γ δ.
2+( α // {patches = [String]; src = β; version = String;} ~ γ,
3+ α.callPackage = String -> γ -> δ,
4+ α.fetchurl = {sha256 = String; url = String;} -> β
5+) =>
6+α -> δ
test/golden/importless/1.59.nixnew file+10
@@ -0,0 +1,10 @@
1+{ stdenv, callPackage, fetchurl, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "1.59.0";
5+
6+ src = fetchurl {
7+ url = "mirror://sourceforge/boost/boost_1_59_0.tar.bz2";
8+ sha256 = "1jj1aai5rdmd72g90a3pd8sw9vi32zad46xv5av8fhnr48ir6ykj";
9+ };
10+})
test/golden/importless/1.59.txtnew file+7
@@ -0,0 +1,7 @@
1+∀ α β γ δ ε.
2+( α // {src = β; version = String;} ~ γ,
3+ α.callPackage = String -> γ -> δ,
4+ α.fetchurl = {sha256 = String; url = String;} -> β,
5+ α.stdenv = ε
6+) =>
7+α -> δ
test/golden/importless/1.6.nixnew file+7
@@ -0,0 +1,7 @@
1+{ mkDerivation }:
2+
3+mkDerivation {
4+ version = "1.6.6";
5+ sha256 = "1wl8rfpw0dxacq4f7xf6wjr8v2ww5691d0cfw9pzw7phd19vazgl";
6+ minimumOTPVersion = "19";
7+}
test/golden/importless/1.6.txtnew file+5
@@ -0,0 +1,5 @@
1+∀ α.
2+{ mkDerivation =
3+ {minimumOTPVersion = String; sha256 = String; version = String;} -> α;
4+} ->
5+α
test/golden/importless/1.60.nixnew file+11
@@ -0,0 +1,11 @@
1+{ stdenv, callPackage, fetchurl, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "1.60.0";
5+
6+ src = fetchurl {
7+ url = "mirror://sourceforge/boost/boost_1_60_0.tar.bz2";
8+ sha256 = "0fzx6dwqbrkd4bcd8pjv0fpapwmrxxwr8yx9g67lihlsk3zzysk8";
9+ };
10+
11+})
test/golden/importless/1.60.txtnew file+7
@@ -0,0 +1,7 @@
1+∀ α β γ δ ε.
2+( α // {src = β; version = String;} ~ γ,
3+ α.callPackage = String -> γ -> δ,
4+ α.fetchurl = {sha256 = String; url = String;} -> β,
5+ α.stdenv = ε
6+) =>
7+α -> δ
test/golden/importless/1.65.nixnew file+12
@@ -0,0 +1,12 @@
1+{ stdenv, callPackage, fetchurl, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "1.65.1";
5+
6+ src = fetchurl {
7+ url = "mirror://sourceforge/boost/boost_1_65_1.tar.bz2";
8+ # SHA256 from http://www.boost.org/users/history/version_1_65_1.html
9+ sha256 = "9807a5d16566c57fd74fb522764e0b134a8bbe6b6e8967b83afefd30dcd3be81";
10+ };
11+
12+})
test/golden/importless/1.65.txtnew file+7
@@ -0,0 +1,7 @@
1+∀ α β γ δ ε.
2+( α // {src = β; version = String;} ~ γ,
3+ α.callPackage = String -> γ -> δ,
4+ α.fetchurl = {sha256 = String; url = String;} -> β,
5+ α.stdenv = ε
6+) =>
7+α -> δ
test/golden/importless/1.66.nixnew file+11
@@ -0,0 +1,11 @@
1+{ stdenv, callPackage, fetchurl, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "1.66.0";
5+
6+ src = fetchurl {
7+ url = "mirror://sourceforge/boost/boost_1_66_0.tar.bz2";
8+ # SHA256 from http://www.boost.org/users/history/version_1_66_0.html
9+ sha256 = "5721818253e6a0989583192f96782c4a98eb6204965316df9f5ad75819225ca9";
10+ };
11+})
test/golden/importless/1.66.txtnew file+7
@@ -0,0 +1,7 @@
1+∀ α β γ δ ε.
2+( α // {src = β; version = String;} ~ γ,
3+ α.callPackage = String -> γ -> δ,
4+ α.fetchurl = {sha256 = String; url = String;} -> β,
5+ α.stdenv = ε
6+) =>
7+α -> δ
test/golden/importless/1.67.nixnew file+39
@@ -0,0 +1,39 @@
1+{ stdenv, callPackage, fetchurl, fetchpatch, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "1.67.0";
5+
6+ patches = [
7+ (fetchpatch {
8+ url = "https://github.com/boostorg/lockfree/commit/12726cda009a855073b9bedbdce57b6ce7763da2.patch";
9+ sha256 = "0x65nkwzv8fdacj8sw5njl3v63jj19dirrpklbwy6qpsncw7fc7h";
10+ stripLen = 1;
11+ })
12+ ] ++ stdenv.lib.optionals stdenv.cc.isClang [
13+ # Fixes https://github.com/boostorg/atomic/issues/15
14+ (fetchpatch {
15+ url = "https://github.com/boostorg/atomic/commit/6e14ca24dab50ad4c1fa8c27c7dd6f1cb791b534.patch";
16+ sha256 = "102g35ygvv8cxagp9651284xk4vybk93q2fm577y4mdxf5k46b7a";
17+ stripLen = 1;
18+ })
19+
20+ # Needed for the next patch
21+ (fetchpatch {
22+ url = "https://github.com/boostorg/asio/commit/38cb19719748ad56b14d73ca1fff5828f36e5894.patch";
23+ sha256 = "0cj9cxz9rfbsx8p8f5alxx00dq3r7g0vh23j68bbxbs9gq1arq2n";
24+ stripLen = 1;
25+ })
26+ # Fixes https://github.com/boostorg/asio/pull/91
27+ (fetchpatch {
28+ url = "https://github.com/boostorg/asio/commit/43874d5497414c67655d901e48c939ef01337edb.patch";
29+ sha256 = "1c2ds164s2ygvpb4785p4ncv8ywbpm08cphirb99xp4mqvb693is";
30+ stripLen = 1;
31+ })
32+ ];
33+
34+ src = fetchurl {
35+ url = "mirror://sourceforge/boost/boost_1_67_0.tar.bz2";
36+ # SHA256 from http://www.boost.org/users/history/version_1_66_0.html
37+ sha256 = "2684c972994ee57fc5632e03bf044746f6eb45d4920c343937a465fd67a5adba";
38+ };
39+})
test/golden/importless/1.67.txtnew file+12
@@ -0,0 +1,12 @@
1+∀ α β γ δ ε ζ η θ ι.
2+( α // {patches = [β]; src = γ; version = String;} ~ δ,
3+ α.callPackage = String -> δ -> ε,
4+ α.fetchpatch = {sha256 = String; stripLen = Number; url = String;} -> β,
5+ α.fetchurl = {sha256 = String; url = String;} -> γ,
6+ α.stdenv = ζ,
7+ ζ.cc = η,
8+ ζ.lib = θ,
9+ θ.optionals = ι -> [β] -> [β],
10+ η.isClang = ι
11+) =>
12+α -> ε
test/golden/importless/1.68.nixnew file+11
@@ -0,0 +1,11 @@
1+{ stdenv, callPackage, fetchurl, fetchpatch, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "1.68.0";
5+
6+ src = fetchurl {
7+ url = "mirror://sourceforge/boost/boost_1_68_0.tar.bz2";
8+ # SHA256 from http://www.boost.org/users/history/version_1_68_0.html
9+ sha256 = "7f6130bc3cf65f56a618888ce9d5ea704fa10b462be126ad053e80e553d6d8b7";
10+ };
11+})
test/golden/importless/1.68.txtnew file+8
@@ -0,0 +1,8 @@
1+∀ α β γ δ ε ζ.
2+( α // {src = β; version = String;} ~ γ,
3+ α.callPackage = String -> γ -> δ,
4+ α.fetchpatch = ε,
5+ α.fetchurl = {sha256 = String; url = String;} -> β,
6+ α.stdenv = ζ
7+) =>
8+α -> δ
test/golden/importless/1.69.nixnew file+11
@@ -0,0 +1,11 @@
1+{ stdenv, callPackage, fetchurl, fetchpatch, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "1.69.0";
5+
6+ src = fetchurl {
7+ url = "mirror://sourceforge/boost/boost_1_69_0.tar.bz2";
8+ # SHA256 from http://www.boost.org/users/history/version_1_69_0.html
9+ sha256 = "8f32d4617390d1c2d16f26a27ab60d97807b35440d45891fa340fc2648b04406";
10+ };
11+})
test/golden/importless/1.69.txtnew file+8
@@ -0,0 +1,8 @@
1+∀ α β γ δ ε ζ.
2+( α // {src = β; version = String;} ~ γ,
3+ α.callPackage = String -> γ -> δ,
4+ α.fetchpatch = ε,
5+ α.fetchurl = {sha256 = String; url = String;} -> β,
6+ α.stdenv = ζ
7+) =>
8+α -> δ
test/golden/importless/1.7.nixnew file+27
@@ -0,0 +1,27 @@
1+{ stdenv
2+, buildPythonPackage
3+, fetchPypi
4+, numpy
5+}:
6+
7+buildPythonPackage rec {
8+ version = "1.7.0";
9+ pname = "gsd";
10+
11+ src = fetchPypi {
12+ inherit pname version;
13+ sha256 = "0fpk69wachyydpk9cbs901m7hkwrrvq24ykxsrz62km9ql8lr2vp";
14+ };
15+
16+ propagatedBuildInputs = [ numpy ];
17+
18+ # tests not packaged with gsd
19+ doCheck = false;
20+
21+ meta = with stdenv.lib; {
22+ homepage = "https://bitbucket.org/glotzer/gsd";
23+ description = "General simulation data file format";
24+ license = licenses.bsd2;
25+ maintainers = [ maintainers.costrouc ];
26+ };
27+}
test/golden/importless/1.70.nixnew file+11
@@ -0,0 +1,11 @@
1+{ stdenv, callPackage, fetchurl, fetchpatch, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "1.70.0";
5+
6+ src = fetchurl {
7+ url = "mirror://sourceforge/boost/boost_1_70_0.tar.bz2";
8+ # SHA256 from http://www.boost.org/users/history/version_1_70_0.html
9+ sha256 = "430ae8354789de4fd19ee52f3b1f739e1fba576f0aded0897c3c2bc00fb38778";
10+ };
11+})
test/golden/importless/1.70.txtnew file+8
@@ -0,0 +1,8 @@
1+∀ α β γ δ ε ζ.
2+( α // {src = β; version = String;} ~ γ,
3+ α.callPackage = String -> γ -> δ,
4+ α.fetchpatch = ε,
5+ α.fetchurl = {sha256 = String; url = String;} -> β,
6+ α.stdenv = ζ
7+) =>
8+α -> δ
test/golden/importless/1.71.nixnew file+15
@@ -0,0 +1,15 @@
1+{ stdenv, callPackage, fetchurl, fetchpatch, ... } @ args:
2+
3+callPackage ./generic.nix (args // rec {
4+ version = "1.71.0";
5+
6+ src = fetchurl {
7+ #url = "mirror://sourceforge/boost/boost_1_71_0.tar.bz2";
8+ urls = [
9+ "mirror://sourceforge/boost/boost_1_71_0.tar.bz2"
10+ "https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.tar.bz2"
11+ ];
12+ # SHA256 from http://www.boost.org/users/history/version_1_71_0.html
13+ sha256 = "d73a8da01e8bf8c7eda40b4c84915071a8c8a0df4a6734537ddde4a8580524ee";
14+ };
15+})
test/golden/importless/1.71.txtnew file+8
@@ -0,0 +1,8 @@
1+∀ α β γ δ ε ζ.
2+( α // {src = β; version = String;} ~ γ,
3+ α.callPackage = String -> γ -> δ,
4+ α.fetchpatch = ε,
5+ α.fetchurl = {sha256 = String; urls = [String];} -> β,
6+ α.stdenv = ζ
7+) =>
8+α -> δ
test/golden/importless/1.72.nixnew file+16
@@ -0,0 +1,16 @@
1+{ stdenv, callPackage, fetchurl, fetchpatch, ... } @ args:
2+
3+callPackage ./generic.nix (args // rec {
4+ version = "1.72.0";
5+
6+ src = fetchurl {
7+ #url = "mirror://sourceforge/boost/boost_1_72_0.tar.bz2";
8+ urls = [
9+ "mirror://sourceforge/boost/boost_1_72_0.tar.bz2"
10+ "https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.bz2"
11+ ];
12+ # SHA256 from http://www.boost.org/users/history/version_1_72_0.html
13+ sha256 = "59c9b274bc451cf91a9ba1dd2c7fdcaf5d60b1b3aa83f2c9fa143417cc660722";
14+ };
15+})
16+
test/golden/importless/1.72.txtnew file+8
@@ -0,0 +1,8 @@
1+∀ α β γ δ ε ζ.
2+( α // {src = β; version = String;} ~ γ,
3+ α.callPackage = String -> γ -> δ,
4+ α.fetchpatch = ε,
5+ α.fetchurl = {sha256 = String; urls = [String];} -> β,
6+ α.stdenv = ζ
7+) =>
8+α -> δ
test/golden/importless/1.8.5.nixnew file+79
@@ -0,0 +1,79 @@
1+{ stdenv, lib, autoconf213, fetchurl, fetchpatch, pkgconfig, nspr, perl, python2, zip }:
2+
3+stdenv.mkDerivation {
4+ pname = "spidermonkey";
5+ version = "1.8.5";
6+
7+ src = fetchurl {
8+ url = "mirror://mozilla/js/js185-1.0.0.tar.gz";
9+ sha256 = "5d12f7e1f5b4a99436685d97b9b7b75f094d33580227aa998c406bbae6f2a687";
10+ };
11+
12+ propagatedBuildInputs = [ nspr ];
13+
14+ nativeBuildInputs = [ pkgconfig ] ++ lib.optional stdenv.isAarch32 autoconf213;
15+ buildInputs = [ perl python2 zip ];
16+
17+ postUnpack = "sourceRoot=\${sourceRoot}/js/src";
18+
19+ preConfigure = ''
20+ export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${nspr.dev}/include/nspr"
21+ export LIBXUL_DIST=$out
22+ ${lib.optionalString stdenv.isAarch32 "autoreconf --verbose --force"}
23+ '';
24+
25+ patches = [
26+ (fetchpatch {
27+ name = "gcc6.patch";
28+ url = "https://sources.debian.org/data/main/m/mozjs/1.8.5-1.0.0+dfsg-6/debian/patches/fix-811665.patch";
29+ sha256 = "1q8477xqxiy5d8376k5902l45gd0qkd4nxmhl8vr6rr1pxfcny99";
30+ })
31+ ] ++ stdenv.lib.optionals stdenv.isAarch32 [
32+ # Explained below in configureFlags for ARM
33+ ./1.8.5-findvanilla.patch
34+ # Fix for hard float flags.
35+ ./1.8.5-arm-flags.patch
36+ ];
37+
38+ patchFlags = [ "-p3" ];
39+
40+ # fixes build on gcc8
41+ postPatch = ''
42+ substituteInPlace ./methodjit/MethodJIT.cpp \
43+ --replace 'asm volatile' 'asm'
44+ '';
45+
46+ # On the Sheevaplug, ARM, its nanojit thing segfaults in japi-tests in
47+ # "make check". Disabling tracejit makes it work, but then it needs the
48+ # patch findvanilla.patch do disable a checker about allocator safety. In case
49+ # of polkit, which is what matters most, it does not override the allocator
50+ # so the failure of that test does not matter much.
51+ configureFlags = [ "--enable-threadsafe" "--with-system-nspr" ] ++
52+ stdenv.lib.optionals (stdenv.hostPlatform.system == "armv5tel-linux") [
53+ "--with-cpu-arch=armv5t"
54+ "--disable-tracejit" ];
55+
56+ # hack around a make problem, see https://github.com/NixOS/nixpkgs/issues/1279#issuecomment-29547393
57+ preBuild = ''
58+ touch -- {.,shell,jsapi-tests}/{-lpthread,-ldl}
59+ ${if stdenv.isAarch32 then "rm -r jit-test/tests/jaeger/bug563000" else ""}
60+ '';
61+
62+ enableParallelBuilding = true;
63+
64+ doCheck = true;
65+
66+ preCheck = ''
67+ rm jit-test/tests/sunspider/check-date-format-tofte.js # https://bugzil.la/600522
68+ '';
69+
70+ meta = with stdenv.lib; {
71+ description = "Mozilla's JavaScript engine written in C/C++";
72+ homepage = "https://developer.mozilla.org/en/SpiderMonkey";
73+ # TODO: MPL/GPL/LGPL tri-license.
74+ maintainers = [ maintainers.goibhniu ];
75+ platforms = platforms.linux;
76+ broken = stdenv.isAarch64; # 2018-08-21, broken since 2017-03-08
77+ };
78+}
79+
test/golden/importless/1.8.5.txtnew file+52
@@ -0,0 +1,52 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ.
2+( α.hostPlatform = β,
3+ α.isAarch32 = γ,
4+ α.isAarch64 = δ,
5+ α.lib = ε,
6+ α.mkDerivation =
7+ { buildInputs = [ζ];
8+ configureFlags = [String];
9+ doCheck = Bool;
10+ enableParallelBuilding = Bool;
11+ meta =
12+ { broken = δ;
13+ description = String;
14+ homepage = String;
15+ maintainers = [η];
16+ platforms = θ;
17+ };
18+ nativeBuildInputs = [ι];
19+ patchFlags = [String];
20+ patches = [κ];
21+ pname = String;
22+ postPatch = String;
23+ postUnpack = String;
24+ preBuild = String;
25+ preCheck = String;
26+ preConfigure = String;
27+ propagatedBuildInputs = [λ];
28+ src = μ;
29+ version = String;
30+ } ->
31+ ν,
32+ ξ.optional = γ -> ο -> [ι],
33+ ε.optionals = Bool -> [String] -> [String],
34+ β.system = String,
35+ π.maintainers = ρ,
36+ π.platforms = σ,
37+ ρ.goibhniu = η,
38+ σ.linux = θ,
39+ τ.optionals = υ -> [String] -> [κ]
40+) =>
41+{ autoconf213 = ο;
42+ fetchpatch = {name = String; sha256 = String; url = String;} -> κ;
43+ fetchurl = {sha256 = String; url = String;} -> μ;
44+ lib = ξ;
45+ nspr = λ;
46+ perl = ζ;
47+ pkgconfig = ι;
48+ python2 = ζ;
49+ stdenv = α;
50+ zip = ζ;
51+} ->
52+ν
test/golden/importless/1.8.nixnew file+80
@@ -0,0 +1,80 @@
1+{ stdenv, pkgsBuildBuild, buildPackages
2+, fetchurl, makeWrapper, gawk, pkgconfig
3+, libtool, readline, gmp
4+}:
5+
6+stdenv.mkDerivation rec {
7+ name = "guile-1.8.8";
8+
9+ src = fetchurl {
10+ url = "mirror://gnu/guile/${name}.tar.gz";
11+ sha256 = "0l200a0v7h8bh0cwz6v7hc13ds39cgqsmfrks55b1rbj5vniyiy3";
12+ };
13+
14+ outputs = [ "out" "dev" "info" ];
15+ setOutputFlags = false; # $dev gets into the library otherwise
16+
17+ # GCC 4.6 raises a number of set-but-unused warnings.
18+ configureFlags = [ "--disable-error-on-warning" ]
19+ # Guile needs patching to preset results for the configure tests about
20+ # pthreads, which work only in native builds.
21+ ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
22+ "--with-threads=no";
23+
24+ depsBuildBuild = [ buildPackages.stdenv.cc ]
25+ ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
26+ pkgsBuildBuild.guile_1_8;
27+ nativeBuildInputs = [ makeWrapper gawk pkgconfig ];
28+ buildInputs = [ readline libtool ];
29+
30+ propagatedBuildInputs = [
31+ gmp
32+
33+ # XXX: These ones aren't normally needed here, but `libguile*.la' has '-l'
34+ # flags for them without corresponding '-L' flags. Adding them here will add
35+ # the needed `-L' flags. As for why the `.la' file lacks the `-L' flags,
36+ # see below.
37+ libtool
38+ ];
39+
40+ patches = [ ./cpp-4.5.patch ];
41+
42+ preBuild = ''
43+ sed -e '/lt_dlinit/a lt_dladdsearchdir("'$out/lib'");' -i libguile/dynl.c
44+ '';
45+
46+
47+ postInstall = ''
48+ wrapProgram $out/bin/guile-snarf --prefix PATH : "${gawk}/bin"
49+ ''
50+ # XXX: See http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/18903 for
51+ # why `--with-libunistring-prefix' and similar options coming from
52+ # `AC_LIB_LINKFLAGS_BODY' don't work on NixOS/x86_64.
53+ + ''
54+ sed -i "$out/lib/pkgconfig/guile"-*.pc \
55+ -e "s|-lltdl|-L${libtool.lib}/lib -lltdl|g"
56+ '';
57+
58+ # One test fails.
59+ # ERROR: file: "libtest-asmobs", message: "file not found"
60+ # This is fixed here:
61+ # <https://git.savannah.gnu.org/cgit/guile.git/commit/?h=branch_release-1-8&id=a0aa1e5b69d6ef0311aeea8e4b9a94eae18a1aaf>.
62+ doCheck = false;
63+ doInstallCheck = doCheck;
64+
65+ setupHook = ./setup-hook.sh;
66+
67+ meta = {
68+ description = "Embeddable Scheme implementation";
69+ homepage = "https://www.gnu.org/software/guile/";
70+ license = stdenv.lib.licenses.lgpl2Plus;
71+ maintainers = [ stdenv.lib.maintainers.ludo ];
72+ platforms = stdenv.lib.platforms.unix;
73+
74+ longDescription = ''
75+ GNU Guile is an interpreter for the Scheme programming language,
76+ packaged as a library that can be embedded into programs to make
77+ them extensible. It supports many SRFIs.
78+ '';
79+ };
80+}
test/golden/importless/1.8.txtnew file+54
@@ -0,0 +1,54 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ.
2+( α.buildPlatform = β,
3+ α.hostPlatform = β,
4+ α.lib = γ,
5+ α.mkDerivation =
6+ { buildInputs = [δ];
7+ configureFlags = [String];
8+ depsBuildBuild = [ε];
9+ doCheck = Bool;
10+ doInstallCheck = Bool;
11+ meta =
12+ { description = String;
13+ homepage = String;
14+ license = ζ;
15+ longDescription = String;
16+ maintainers = [η];
17+ platforms = θ;
18+ };
19+ name = String;
20+ nativeBuildInputs = [ι];
21+ outputs = [String];
22+ patches = [String];
23+ postInstall = String;
24+ preBuild = String;
25+ propagatedBuildInputs = [δ];
26+ setOutputFlags = Bool;
27+ setupHook = String;
28+ src = κ;
29+ } ->
30+ λ,
31+ μ.guile_1_8 = ν,
32+ ξ.stdenv = ο,
33+ γ.licenses = π,
34+ π.lgpl2Plus = ζ,
35+ ρ.maintainers = σ,
36+ σ.ludo = η,
37+ τ.platforms = υ,
38+ υ.unix = θ,
39+ φ.optional = Bool -> ν -> [ε],
40+ χ.optional = Bool -> String -> [String],
41+ ο.cc = ε
42+) =>
43+{ buildPackages = ξ;
44+ fetchurl = {sha256 = String; url = String;} -> κ;
45+ gawk = ι;
46+ gmp = δ;
47+ libtool = δ;
48+ makeWrapper = ι;
49+ pkgconfig = ι;
50+ pkgsBuildBuild = μ;
51+ readline = δ;
52+ stdenv = α;
53+} ->
54+λ
test/golden/importless/1.9.0.nixnew file+36
@@ -0,0 +1,36 @@
1+{ stdenv, fetchFromGitHub, ocaml, ocamlbuild, ocplib-endian, sexplib, findlib, ppx_tools
2+, async ? null, lwt ? null
3+}:
4+
5+assert stdenv.lib.versionAtLeast ocaml.version "4.01";
6+
7+let version = "1.9.0"; in
8+
9+let opt = b: "--${if b != null then "en" else "dis"}able"; in
10+
11+stdenv.mkDerivation {
12+ name = "ocaml${ocaml.version}-cstruct-${version}";
13+
14+ src = fetchFromGitHub {
15+ owner = "mirage";
16+ repo = "ocaml-cstruct";
17+ rev = "v${version}";
18+ sha256 = "1c1j21zgmxi9spq23imy7byn50qr7hlds1cfpzxlsx9dp309jngy";
19+ };
20+
21+ configureFlags = [ "${opt lwt}-lwt" "${opt async}-async" "${opt ppx_tools}-ppx" ];
22+
23+ buildInputs = [ ocaml findlib ocamlbuild ppx_tools lwt async ];
24+ propagatedBuildInputs = [ ocplib-endian sexplib ];
25+
26+ createFindlibDestdir = true;
27+ dontStrip = true;
28+
29+ meta = with stdenv.lib; {
30+ homepage = "https://github.com/mirage/ocaml-cstruct";
31+ description = "Map OCaml arrays onto C-like structs";
32+ license = stdenv.lib.licenses.isc;
33+ maintainers = [ maintainers.vbgl maintainers.ericbmerritt ];
34+ platforms = ocaml.meta.platforms or [];
35+ };
36+}
test/golden/importless/1.9.nixnew file+51
@@ -0,0 +1,51 @@
1+{ stdenv, lib, buildPythonPackage, fetchPypi, astroid, six, isort,
2+ mccabe, configparser, backports_functools_lru_cache, singledispatch,
3+ pytest, pytestrunner, setuptools }:
4+
5+buildPythonPackage rec {
6+ pname = "pylint";
7+ version = "1.9.5";
8+
9+ src = fetchPypi {
10+ inherit pname version;
11+ sha256 = "004kfapkqxqy2s85pmddqv0fabxdxywxrlbi549p0v237pr2v94p";
12+ };
13+
14+ checkInputs = [ pytest pytestrunner ];
15+
16+ propagatedBuildInputs = [ astroid six isort mccabe configparser backports_functools_lru_cache singledispatch setuptools ];
17+
18+ postPatch = lib.optionalString stdenv.isDarwin ''
19+ # Remove broken darwin test
20+ rm -vf pylint/test/test_functional.py
21+ '';
22+
23+ checkPhase = ''
24+ pytest pylint/test -k "not ${lib.concatStringsSep " and not " (
25+ [ # Broken test
26+ "test_good_comprehension_checks"
27+ # requires setuptools
28+ "test_pkginfo"
29+ # See PyCQA/pylint#2535
30+ "test_libmodule" ] ++
31+ # Disable broken darwin tests
32+ lib.optionals stdenv.isDarwin [
33+ "test_parallel_execution"
34+ "test_py3k_jobs_option"
35+ ]
36+ )}"
37+ '';
38+
39+ postInstall = ''
40+ mkdir -p $out/share/emacs/site-lisp
41+ cp "elisp/"*.el $out/share/emacs/site-lisp/
42+ '';
43+
44+ meta = with lib; {
45+ homepage = "https://github.com/PyCQA/pylint";
46+ description = "A bug and style checker for Python";
47+ platforms = platforms.all;
48+ license = licenses.gpl1Plus;
49+ maintainers = with maintainers; [ nand0p ];
50+ };
51+}
test/golden/importless/1.9.x.nixnew file+45
@@ -0,0 +1,45 @@
1+{ fetchFromGitHub, stdenv, lib
2+, cmake, libGLU, libGL
3+, freetype, freeimage, zziplib, xorgproto, libXrandr
4+, libXaw, freeglut, libXt, libpng, boost, ois
5+, libX11, libXmu, libSM, pkgconfig
6+, libXxf86vm, libICE
7+, libXrender
8+, withNvidiaCg ? false, nvidia_cg_toolkit
9+, withSamples ? false }:
10+
11+stdenv.mkDerivation rec {
12+ pname = "ogre";
13+ version = "1.9.1";
14+
15+ src = fetchFromGitHub {
16+ owner = "OGRECave";
17+ repo = "ogre";
18+ rev = "v${version}";
19+ sha256 = "11lfgzqaps3728dswrq3cbwk7aicigyz08q4hfyy6ikc6m35r4wg";
20+ };
21+
22+ cmakeFlags = [ "-DOGRE_BUILD_SAMPLES=${toString withSamples}" ]
23+ ++ map (x: "-DOGRE_BUILD_PLUGIN_${x}=on")
24+ ([ "BSP" "OCTREE" "PCZ" "PFX" ] ++ lib.optional withNvidiaCg "CG")
25+ ++ map (x: "-DOGRE_BUILD_RENDERSYSTEM_${x}=on") [ "GL" ];
26+
27+ enableParallelBuilding = true;
28+
29+ buildInputs =
30+ [ cmake libGLU libGL
31+ freetype freeimage zziplib xorgproto libXrandr
32+ libXaw freeglut libXt libpng boost ois
33+ libX11 libXmu libSM pkgconfig
34+ libXxf86vm libICE
35+ libXrender
36+ ] ++ lib.optional withNvidiaCg nvidia_cg_toolkit;
37+
38+ meta = {
39+ description = "A 3D engine";
40+ homepage = "https://www.ogre3d.org/";
41+ maintainers = [ stdenv.lib.maintainers.raskin ];
42+ platforms = stdenv.lib.platforms.linux;
43+ license = stdenv.lib.licenses.mit;
44+ };
45+}
test/golden/importless/1.nixnew file+31
@@ -0,0 +1,31 @@
1+{ stdenv, buildGoPackage, fetchFromGitHub }:
2+
3+buildGoPackage rec {
4+ pname = "git-lfs";
5+ version = "1.5.6";
6+ rev = "0d02fb7d9a1c599bbf8c55e146e2845a908e04e0";
7+
8+ goPackagePath = "github.com/git-lfs/git-lfs";
9+
10+ src = fetchFromGitHub {
11+ inherit rev;
12+ owner = "git-lfs";
13+ repo = "git-lfs";
14+ sha256 = "0wddry1lqjccf4522fvhx6grx8h57xsz17lkaf5aybnrgw677w3d";
15+ };
16+
17+ subPackages = [ "." ];
18+
19+ preBuild = ''
20+ pushd go/src/github.com/git-lfs/git-lfs
21+ go generate ./commands
22+ popd
23+ '';
24+
25+ meta = with stdenv.lib; {
26+ description = "Git extension for versioning large files";
27+ homepage = "https://git-lfs.github.com/";
28+ license = [ licenses.mit ];
29+ maintainers = [ maintainers.twey ];
30+ };
31+}
test/golden/importless/1.x.nixnew file+34
@@ -0,0 +1,34 @@
1+{ stdenv, fetchurl, pythonPackages }:
2+
3+pythonPackages.buildPythonApplication rec {
4+ pname = "radicale";
5+ version = "1.1.6";
6+
7+ src = fetchurl {
8+ url = "mirror://pypi/R/Radicale/Radicale-${version}.tar.gz";
9+ sha256 = "0ay90nj6fmr2aq8imi0mbjl4m2rzq7a83ikj8qs9gxsylj71j1y0";
10+ };
11+
12+ propagatedBuildInputs = stdenv.lib.optionals (!pythonPackages.isPy3k) [
13+ pythonPackages.flup
14+ pythonPackages.ldap
15+ pythonPackages.sqlalchemy
16+ ];
17+
18+ doCheck = !pythonPackages.isPy3k;
19+
20+ meta = with stdenv.lib; {
21+ homepage = "http://www.radicale.org/";
22+ description = "CalDAV CardDAV server";
23+ longDescription = ''
24+ The Radicale Project is a complete CalDAV (calendar) and CardDAV
25+ (contact) server solution. Calendars and address books are available for
26+ both local and remote access, possibly limited through authentication
27+ policies. They can be viewed and edited by calendar and contact clients
28+ on mobile phones or computers.
29+ '';
30+ license = licenses.gpl3Plus;
31+ platforms = platforms.all;
32+ maintainers = with maintainers; [ edwtjo pSub ];
33+ };
34+}
test/golden/importless/1.x.txtnew file+36
@@ -0,0 +1,36 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ.
2+( α.lib = β,
3+ γ.buildPythonApplication =
4+ { doCheck = Bool;
5+ meta =
6+ { description = String;
7+ homepage = String;
8+ license = δ;
9+ longDescription = String;
10+ maintainers = [ε];
11+ platforms = ζ;
12+ };
13+ pname = String;
14+ propagatedBuildInputs = η;
15+ src = θ;
16+ version = String;
17+ } ->
18+ ι,
19+ γ.flup = κ,
20+ γ.isPy3k = Bool,
21+ γ.ldap = κ,
22+ γ.sqlalchemy = κ,
23+ β.optionals = Bool -> [κ] -> η,
24+ λ.edwtjo = ε,
25+ λ.licenses = μ,
26+ λ.maintainers = ν,
27+ λ.pSub = ε,
28+ λ.platforms = ξ,
29+ μ.gpl3Plus = δ,
30+ ξ.all = ζ
31+) =>
32+{ fetchurl = {sha256 = String; url = String;} -> θ;
33+ pythonPackages = γ;
34+ stdenv = α;
35+} ->
36+ι
test/golden/importless/10.5.x.nixnew file+61
@@ -0,0 +1,61 @@
1+{ stdenv, lib, fetchurl, unzip, sqlite, makeWrapper, dotnetCorePackages, ffmpeg,
2+ fontconfig, freetype, nixosTests }:
3+
4+let
5+ os = if stdenv.isDarwin then "osx" else "linux";
6+ arch =
7+ with stdenv.hostPlatform;
8+ if isx86_32 then "x86"
9+ else if isx86_64 then "x64"
10+ else if isAarch32 then "arm"
11+ else if isAarch64 then "arm64"
12+ else lib.warn "Unsupported architecture, some image processing features might be unavailable" "unknown";
13+ musl = lib.optionalString stdenv.hostPlatform.isMusl
14+ (if (arch != "x64")
15+ then lib.warn "Some image processing features might be unavailable for non x86-64 with Musl" "musl-"
16+ else "musl-");
17+ runtimeDir = "${os}-${musl}${arch}";
18+
19+in stdenv.mkDerivation rec {
20+ pname = "jellyfin";
21+ version = "10.5.5";
22+
23+ # Impossible to build anything offline with dotnet
24+ src = fetchurl {
25+ url = "https://github.com/jellyfin/jellyfin/releases/download/v${version}/jellyfin_${version}_portable.tar.gz";
26+ sha256 = "1s3hva1j5w74qc9wyqnmr5clk4smzfi7wvx8qrzrwy81mx7r5w27";
27+ };
28+
29+ buildInputs = [
30+ unzip
31+ makeWrapper
32+ ];
33+
34+ propagatedBuildInputs = [
35+ dotnetCorePackages.aspnetcore_3_1
36+ sqlite
37+ ];
38+
39+ preferLocalBuild = true;
40+
41+ installPhase = ''
42+ install -dm 755 "$out/opt/jellyfin"
43+ cp -r * "$out/opt/jellyfin"
44+ makeWrapper "${dotnetCorePackages.aspnetcore_3_1}/bin/dotnet" $out/bin/jellyfin \
45+ --prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [
46+ sqlite fontconfig freetype stdenv.cc.cc.lib
47+ ]}:$out/opt/jellyfin/runtimes/${runtimeDir}/native/" \
48+ --add-flags "$out/opt/jellyfin/jellyfin.dll --ffmpeg ${ffmpeg}/bin/ffmpeg"
49+ '';
50+
51+ passthru.tests = {
52+ smoke-test = nixosTests.jellyfin;
53+ };
54+
55+ meta = with stdenv.lib; {
56+ description = "The Free Software Media System";
57+ homepage = "https://jellyfin.org/";
58+ license = licenses.gpl2;
59+ maintainers = with maintainers; [ nyanloutre minijackson ];
60+ };
61+}
test/golden/importless/10.5.x.txtnew file+49
@@ -0,0 +1,49 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ.
2+( α.hostPlatform = β,
3+ α.isDarwin = Bool,
4+ α.lib = γ,
5+ α.mkDerivation =
6+ { buildInputs = [δ];
7+ installPhase = String;
8+ meta =
9+ { description = String;
10+ homepage = String;
11+ license = ε;
12+ maintainers = [ζ];
13+ };
14+ passthru = {tests = {smoke-test = η;};};
15+ pname = String;
16+ preferLocalBuild = Bool;
17+ propagatedBuildInputs = [θ];
18+ src = ι;
19+ version = String;
20+ } ->
21+ κ,
22+ λ.optionalString = μ -> String -> ν,
23+ λ.warn = String -> String -> String,
24+ ξ.aspnetcore_3_1 = θ,
25+ ο.jellyfin = η,
26+ β.isAarch32 = Bool,
27+ β.isAarch64 = Bool,
28+ β.isx86_32 = Bool,
29+ β.isx86_64 = Bool,
30+ π.isMusl = μ,
31+ γ.licenses = ρ,
32+ γ.maintainers = σ,
33+ γ.minijackson = ζ,
34+ γ.nyanloutre = ζ,
35+ ρ.gpl2 = ε
36+) =>
37+{ dotnetCorePackages = ξ;
38+ fetchurl = {sha256 = String; url = String;} -> ι;
39+ ffmpeg = τ;
40+ fontconfig = υ;
41+ freetype = φ;
42+ lib = λ;
43+ makeWrapper = δ;
44+ nixosTests = ο;
45+ sqlite = θ;
46+ stdenv = α;
47+ unzip = δ;
48+} ->
49+κ
test/golden/importless/10.nixnew file+136
@@ -0,0 +1,136 @@
1+{ stdenv
2+, coreutils
3+, patchelf
4+, requireFile
5+, alsaLib
6+, fontconfig
7+, freetype
8+, gcc
9+, glib
10+, ncurses
11+, opencv2
12+, openssl
13+, unixODBC
14+, xorg
15+, libxml2
16+, libuuid
17+}:
18+
19+let
20+ platform =
21+ if stdenv.hostPlatform.system == "i686-linux" || stdenv.hostPlatform.system == "x86_64-linux" then
22+ "Linux"
23+ else
24+ throw "Mathematica requires i686-linux or x86_64 linux";
25+in
26+stdenv.mkDerivation rec {
27+ version = "10.0.2";
28+
29+ pname = "mathematica";
30+
31+ src = requireFile rec {
32+ name = "Mathematica_${version}_LINUX.sh";
33+ message = ''
34+ This nix expression requires that ${name} is
35+ already part of the store. Find the file on your Mathematica CD
36+ and add it to the nix store with nix-store --add-fixed sha256 <FILE>.
37+ '';
38+ sha256 = "1d2yaiaikzcacjamlw64g3xkk81m3pb4vz4an12cv8nb7kb20x9l";
39+ };
40+
41+ buildInputs = [
42+ coreutils
43+ patchelf
44+ alsaLib
45+ coreutils
46+ fontconfig
47+ freetype
48+ gcc.cc
49+ gcc.libc
50+ glib
51+ ncurses
52+ opencv2
53+ openssl
54+ unixODBC
55+ libxml2
56+ libuuid
57+ ] ++ (with xorg; [
58+ libX11
59+ libXext
60+ libXtst
61+ libXi
62+ libXmu
63+ libXrender
64+ libxcb
65+ libXcursor
66+ libXfixes
67+ libXrandr
68+ libICE
69+ libSM
70+ ]);
71+
72+ ldpath = stdenv.lib.makeLibraryPath buildInputs
73+ + stdenv.lib.optionalString (stdenv.hostPlatform.system == "x86_64-linux")
74+ (":" + stdenv.lib.makeSearchPathOutput "lib" "lib64" buildInputs);
75+
76+ phases = "unpackPhase installPhase fixupPhase";
77+
78+ unpackPhase = ''
79+ echo "=== Extracting makeself archive ==="
80+ # find offset from file
81+ offset=$(${stdenv.shell} -c "$(grep -axm1 -e 'offset=.*' $src); echo \$offset" $src)
82+ dd if="$src" ibs=$offset skip=1 | tar -xf -
83+ cd Unix
84+ '';
85+
86+ installPhase = ''
87+ cd Installer
88+ # don't restrict PATH, that has already been done
89+ sed -i -e 's/^PATH=/# PATH=/' MathInstaller
90+
91+ echo "=== Running MathInstaller ==="
92+ ./MathInstaller -auto -createdir=y -execdir=$out/bin -targetdir=$out/libexec/Mathematica -platforms=${platform} -silent
93+ '';
94+
95+ preFixup = ''
96+ echo "=== PatchElfing away ==="
97+ # This code should be a bit forgiving of errors, unfortunately
98+ set +e
99+ find $out/libexec/Mathematica/SystemFiles -type f -perm -0100 | while read f; do
100+ type=$(readelf -h "$f" 2>/dev/null | grep 'Type:' | sed -e 's/ *Type: *\([A-Z]*\) (.*/\1/')
101+ if [ -z "$type" ]; then
102+ :
103+ elif [ "$type" == "EXEC" ]; then
104+ echo "patching $f executable <<"
105+ patchelf --shrink-rpath "$f"
106+ patchelf \
107+ --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
108+ --set-rpath "$(patchelf --print-rpath "$f"):${ldpath}" \
109+ "$f" \
110+ && patchelf --shrink-rpath "$f" \
111+ || echo unable to patch ... ignoring 1>&2
112+ elif [ "$type" == "DYN" ]; then
113+ echo "patching $f library <<"
114+ patchelf \
115+ --set-rpath "$(patchelf --print-rpath "$f"):${ldpath}" \
116+ "$f" \
117+ && patchelf --shrink-rpath "$f" \
118+ || echo unable to patch ... ignoring 1>&2
119+ else
120+ echo "not patching $f <<: unknown elf type"
121+ fi
122+ done
123+ '';
124+
125+ # all binaries are already stripped
126+ dontStrip = true;
127+
128+ # we did this in prefixup already
129+ dontPatchELF = true;
130+
131+ meta = {
132+ description = "Wolfram Mathematica computational software system";
133+ homepage = "http://www.wolfram.com/mathematica/";
134+ license = stdenv.lib.licenses.unfree;
135+ };
136+}
test/golden/importless/108.08.00.nixnew file+27
@@ -0,0 +1,27 @@
1+{stdenv, fetchurl, ocaml, findlib, camlp4}:
2+
3+if !stdenv.lib.versionAtLeast ocaml.version "3.12"
4+|| stdenv.lib.versionAtLeast ocaml.version "4.03"
5+then throw "type_conv-108.08.00 is not available for OCaml ${ocaml.version}" else
6+
7+stdenv.mkDerivation {
8+ name = "ocaml-type_conv-108.08.00";
9+
10+ src = fetchurl {
11+ url = "https://ocaml.janestreet.com/ocaml-core/108.08.00/individual/type_conv-108.08.00.tar.gz";
12+ sha256 = "08ysikwwp69zvc147lzzg79nwlrzrk738rj0ggcfadi8h5il42sl";
13+ };
14+
15+ buildInputs = [ocaml findlib camlp4];
16+
17+ createFindlibDestdir = true;
18+
19+ meta = with stdenv.lib; {
20+ homepage = "https://ocaml.janestreet.com/";
21+ description = "Support library for OCaml preprocessor type conversions";
22+ license = licenses.asl20;
23+ branch = "108";
24+ platforms = ocaml.meta.platforms or [];
25+ maintainers = with maintainers; [ maggesi ];
26+ };
27+}
test/golden/importless/109.60.01.nixnew file+26
@@ -0,0 +1,26 @@
1+{stdenv, fetchurl, ocaml, findlib, camlp4}:
2+
3+if !stdenv.lib.versionAtLeast ocaml.version "4.00"
4+|| stdenv.lib.versionAtLeast ocaml.version "4.03"
5+then throw "type_conv-109.60.01 is not available for OCaml ${ocaml.version}" else
6+
7+stdenv.mkDerivation {
8+ name = "ocaml-type_conv-109.60.01";
9+
10+ src = fetchurl {
11+ url = "https://github.com/janestreet/type_conv/archive/109.60.01.tar.gz";
12+ sha256 = "0lpxri68glgq1z2pp02rp45cb909xywbff8d4idljrf6fzzil2zx";
13+ };
14+
15+ buildInputs = [ocaml findlib camlp4];
16+
17+ createFindlibDestdir = true;
18+
19+ meta = {
20+ homepage = "http://forge.ocamlcore.org/projects/type-conv/";
21+ description = "Support library for OCaml preprocessor type conversions";
22+ license = stdenv.lib.licenses.lgpl21;
23+ platforms = ocaml.meta.platforms or [];
24+ maintainers = with stdenv.lib.maintainers; [ maggesi ];
25+ };
26+}
test/golden/importless/11.1.nixnew file+41
@@ -0,0 +1,41 @@
1+{ stdenv, fetchFromBitbucket, pkgconfig, SDL2, libGLU, libGL, openal, luajit,
2+ libdevil, freetype, physfs, libmodplug, mpg123, libvorbis, libogg,
3+ libtheora, which, autoconf, automake, libtool
4+}:
5+
6+let
7+ pname = "love";
8+ version = "11.3";
9+in
10+
11+stdenv.mkDerivation {
12+ name = "${pname}-${version}";
13+ src = fetchFromBitbucket {
14+ owner = "rude";
15+ repo = "love";
16+ rev = version;
17+ sha256 = "18gfp65ngb8k8g7hgbw2bhrwk2i7m56m21d39pk4484q9z8p4vm7";
18+ };
19+
20+ nativeBuildInputs = [ pkgconfig ];
21+ buildInputs = [
22+ SDL2 libGLU libGL openal luajit libdevil freetype physfs libmodplug mpg123
23+ libvorbis libogg libtheora autoconf which libtool automake
24+ ];
25+
26+ preConfigure = "$shell ./platform/unix/automagic";
27+
28+ configureFlags = [
29+ "--with-lua=luajit"
30+ ];
31+
32+ NIX_CFLAGS_COMPILE = "-DluaL_reg=luaL_Reg"; # needed since luajit-2.1.0-beta3
33+
34+ meta = {
35+ homepage = "http://love2d.org";
36+ description = "A Lua-based 2D game engine/scripting language";
37+ license = stdenv.lib.licenses.zlib;
38+ platforms = stdenv.lib.platforms.linux;
39+ maintainers = [ stdenv.lib.maintainers.raskin ];
40+ };
41+}
test/golden/importless/11.1.txtnew file+49
@@ -0,0 +1,49 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { NIX_CFLAGS_COMPILE = String;
5+ buildInputs = [γ];
6+ configureFlags = [String];
7+ meta =
8+ { description = String;
9+ homepage = String;
10+ license = δ;
11+ maintainers = [ε];
12+ platforms = ζ;
13+ };
14+ name = String;
15+ nativeBuildInputs = [η];
16+ preConfigure = String;
17+ src = θ;
18+ } ->
19+ ι,
20+ β.licenses = κ,
21+ κ.zlib = δ,
22+ λ.maintainers = μ,
23+ μ.raskin = ε,
24+ ν.platforms = ξ,
25+ ξ.linux = ζ
26+) =>
27+{ SDL2 = γ;
28+ autoconf = γ;
29+ automake = γ;
30+ fetchFromBitbucket =
31+ {owner = String; repo = String; rev = String; sha256 = String;} -> θ;
32+ freetype = γ;
33+ libGL = γ;
34+ libGLU = γ;
35+ libdevil = γ;
36+ libmodplug = γ;
37+ libogg = γ;
38+ libtheora = γ;
39+ libtool = γ;
40+ libvorbis = γ;
41+ luajit = γ;
42+ mpg123 = γ;
43+ openal = γ;
44+ physfs = γ;
45+ pkgconfig = η;
46+ stdenv = α;
47+ which = γ;
48+} ->
49+ι
test/golden/importless/11.nixnew file+61
@@ -0,0 +1,61 @@
1+{ stdenv, fetchurl, unzip, setJavaClassPath, freetype }:
2+let
3+ jce-policies = fetchurl {
4+ # Ugh, unversioned URLs... I hope this doesn't change often enough to cause pain before we move to a Darwin source build of OpenJDK!
5+ url = "http://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip";
6+ sha256 = "0nk7m0lgcbsvldq2wbfni2pzq8h818523z912i7v8hdcij5s48c0";
7+ };
8+
9+ jdk = stdenv.mkDerivation rec {
10+ name = "zulu11.2.3-jdk11.0.1";
11+
12+ src = fetchurl {
13+ url = "https://cdn.azul.com/zulu/bin/${name}-macosx_x64.tar.gz";
14+ sha256 = "1jxnxmy79inwf3146ygry1mzv3dj6yrzqll16j7dpr91x1p3dpqy";
15+ curlOpts = "-H Referer:https://www.azul.com/downloads/zulu/zulu-mac/";
16+ };
17+
18+ buildInputs = [ unzip freetype ];
19+
20+ installPhase = ''
21+ mkdir -p $out
22+ mv * $out
23+
24+ unzip ${jce-policies}
25+ mv -f ZuluJCEPolicies/*.jar $out/lib/security/
26+
27+ # jni.h expects jni_md.h to be in the header search path.
28+ ln -s $out/include/darwin/*_md.h $out/include/
29+
30+ if [ -f $out/LICENSE ]; then
31+ install -D $out/LICENSE $out/share/zulu/LICENSE
32+ rm $out/LICENSE
33+ fi
34+ '';
35+
36+ preFixup = ''
37+ # Propagate the setJavaClassPath setup hook from the JDK so that
38+ # any package that depends on the JDK has $CLASSPATH set up
39+ # properly.
40+ mkdir -p $out/nix-support
41+ printWords ${setJavaClassPath} > $out/nix-support/propagated-build-inputs
42+
43+ install_name_tool -change /usr/X11/lib/libfreetype.6.dylib ${freetype}/lib/libfreetype.6.dylib $out/lib/libfontmanager.dylib
44+
45+ # Set JAVA_HOME automatically.
46+ cat <<EOF >> $out/nix-support/setup-hook
47+ if [ -z "\''${JAVA_HOME-}" ]; then export JAVA_HOME=$out; fi
48+ EOF
49+ '';
50+
51+ passthru = {
52+ home = jdk;
53+ };
54+
55+ meta = with stdenv.lib; {
56+ license = licenses.gpl2;
57+ platforms = platforms.darwin;
58+ };
59+
60+ };
61+in jdk
test/golden/importless/112.01.01.nixnew file+20
@@ -0,0 +1,20 @@
1+{stdenv, fetchurl, buildOcaml}:
2+
3+buildOcaml rec {
4+ minimumSupportedOcamlVersion = "4.02";
5+
6+ name = "type_conv";
7+ version = "113.00.02";
8+
9+ src = fetchurl {
10+ url = "https://github.com/janestreet/type_conv/archive/${version}.tar.gz";
11+ sha256 = "1718yl2q8zandrs4xqffkfmssfld1iz62dzcqdm925735c1x01fk";
12+ };
13+
14+ meta = {
15+ homepage = "https://github.com/janestreet/type_conv/";
16+ description = "Support library for preprocessor type conversions";
17+ license = stdenv.lib.licenses.asl20;
18+ maintainers = with stdenv.lib.maintainers; [ maggesi ericbmerritt ];
19+ };
20+}
test/golden/importless/112.01.01.txtnew file+25
@@ -0,0 +1,25 @@
1+∀ α β γ δ ε ζ η θ ι.
2+( α.lib = β,
3+ β.licenses = γ,
4+ γ.asl20 = δ,
5+ ε.maintainers = ζ,
6+ ζ.ericbmerritt = η,
7+ ζ.maggesi = η
8+) =>
9+{ buildOcaml =
10+ { meta =
11+ { description = String;
12+ homepage = String;
13+ license = δ;
14+ maintainers = [η];
15+ };
16+ minimumSupportedOcamlVersion = String;
17+ name = String;
18+ src = θ;
19+ version = String;
20+ } ->
21+ ι;
22+ fetchurl = {sha256 = String; url = String;} -> θ;
23+ stdenv = α;
24+} ->
25+ι
test/golden/importless/12.nixnew file+31
@@ -0,0 +1,31 @@
1+{ stdenv, fetchurl, zlib }:
2+
3+assert stdenv.hostPlatform == stdenv.buildPlatform -> zlib != null;
4+
5+stdenv.mkDerivation rec {
6+ name = "libpng-1.2.59";
7+
8+ src = fetchurl {
9+ url = "mirror://sourceforge/libpng/${name}.tar.xz";
10+ sha256 = "1izw9ybm27llk8531w6h4jp4rk2rxy2s9vil16nwik5dp0amyqxl";
11+ };
12+
13+ outputs = [ "out" "dev" "man" ];
14+
15+ propagatedBuildInputs = [ zlib ];
16+
17+ passthru = { inherit zlib; };
18+
19+ configureFlags = [ "--enable-static" ];
20+
21+ postInstall = ''mv "$out/bin" "$dev/bin"'';
22+
23+ meta = with stdenv.lib; {
24+ description = "The official reference implementation for the PNG file format";
25+ homepage = "http://www.libpng.org/pub/png/libpng.html";
26+ license = licenses.libpng;
27+ maintainers = [ ];
28+ branch = "1.2";
29+ platforms = platforms.unix;
30+ };
31+}
test/golden/importless/12.txtnew file+29
@@ -0,0 +1,29 @@
1+∀ β γ δ ε ζ η θ ι κ.
2+( β.buildPlatform = γ,
3+ β.hostPlatform = γ,
4+ β.lib = δ,
5+ β.mkDerivation =
6+ { configureFlags = [String];
7+ meta =
8+ { branch = String;
9+ description = String;
10+ homepage = String;
11+ license = ε;
12+ maintainers = ∀ α. [α];
13+ platforms = ζ;
14+ };
15+ name = String;
16+ outputs = [String];
17+ passthru = {zlib = Null;};
18+ postInstall = String;
19+ propagatedBuildInputs = [Null];
20+ src = η;
21+ } ->
22+ θ,
23+ δ.licenses = ι,
24+ δ.platforms = κ,
25+ ι.libpng = ε,
26+ κ.unix = ζ
27+) =>
28+{fetchurl = {sha256 = String; url = String;} -> η; stdenv = β; zlib = Null;} ->
29+θ
test/golden/importless/14.nixnew file+115
@@ -0,0 +1,115 @@
1+{ stdenv, lib, fetchFromGitHub, writeText, openjdk11_headless, gradleGen
2+, pkgconfig, perl, cmake, gperf, gtk2, gtk3, libXtst, libXxf86vm, glib, alsaLib
3+, ffmpeg_3, python, ruby }:
4+
5+let
6+ major = "14";
7+ update = "";
8+ build = "-ga";
9+ repover = "${major}${update}${build}";
10+ gradle_ = (gradleGen.override {
11+ java = openjdk11_headless;
12+ }).gradle_5_6;
13+
14+ makePackage = args: stdenv.mkDerivation ({
15+ version = "${major}${update}${build}";
16+
17+ src = fetchFromGitHub {
18+ owner = "openjdk";
19+ repo = "jfx";
20+ rev = repover;
21+ sha256 = "16aj15xksc266gv3y42m0g277pfvp71901lrngndcnpr7i2zshnr";
22+ };
23+
24+ buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsaLib ffmpeg_3 ];
25+ nativeBuildInputs = [ gradle_ perl pkgconfig cmake gperf python ruby ];
26+
27+ dontUseCmakeConfigure = true;
28+
29+ config = writeText "gradle.properties" (''
30+ CONF = Release
31+ JDK_HOME = ${openjdk11_headless.home}
32+ '' + args.gradleProperties or "");
33+
34+ #avoids errors about deprecation of GTypeDebugFlags, GTimeVal, etc.
35+ NIX_CFLAGS_COMPILE = [ "-DGLIB_DISABLE_DEPRECATION_WARNINGS" ];
36+
37+ buildPhase = ''
38+ runHook preBuild
39+
40+ export GRADLE_USER_HOME=$(mktemp -d)
41+ ln -s $config gradle.properties
42+ export NIX_CFLAGS_COMPILE="$(pkg-config --cflags glib-2.0) $NIX_CFLAGS_COMPILE"
43+ gradle --no-daemon $gradleFlags sdk
44+
45+ runHook postBuild
46+ '';
47+ } // args);
48+
49+ # Fake build to pre-download deps into fixed-output derivation.
50+ # We run nearly full build because I see no other way to download everything that's needed.
51+ # Anyone who knows a better way?
52+ deps = makePackage {
53+ pname = "openjfx-deps";
54+
55+ # perl code mavenizes pathes (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar)
56+ installPhase = ''
57+ find $GRADLE_USER_HOME -type f -regex '.*/modules.*\.\(jar\|pom\)' \
58+ | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
59+ | sh
60+ rm -rf $out/tmp
61+ '';
62+
63+ outputHashAlgo = "sha256";
64+ outputHashMode = "recursive";
65+ # Downloaded AWT jars differ by platform.
66+ outputHash = {
67+ x86_64-linux = "077zss95iq6iskx7ghz1c57ymydpzj0wm7r1pkznw99l9xwvdmqi";
68+ i686-linux = "03gglr2sh77cyg16qw9g45ji33dg7i93s5s30hz3mh420g112qa0";
69+ }.${stdenv.system} or (throw "Unsupported platform");
70+ };
71+
72+in makePackage {
73+ pname = "openjfx-modular-sdk";
74+
75+ gradleProperties = ''
76+ COMPILE_MEDIA = true
77+ COMPILE_WEBKIT = true
78+ '';
79+
80+ preBuild = ''
81+ swtJar="$(find ${deps} -name org.eclipse.swt\*.jar)"
82+ substituteInPlace build.gradle \
83+ --replace 'mavenCentral()' 'mavenLocal(); maven { url uri("${deps}") }' \
84+ --replace 'name: SWT_FILE_NAME' "files('$swtJar')"
85+ '';
86+
87+ installPhase = ''
88+ cp -r build/modular-sdk $out
89+ '';
90+
91+ # glib-2.62 deprecations
92+ NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
93+
94+ stripDebugList = [ "." ];
95+
96+ postFixup = ''
97+ # Remove references to bootstrap.
98+ find "$out" -name \*.so | while read lib; do
99+ new_refs="$(patchelf --print-rpath "$lib" | sed -E 's,:?${lib.escape ["+"] openjdk11_headless.outPath}[^:]*,,')"
100+ patchelf --set-rpath "$new_refs" "$lib"
101+ done
102+ '';
103+
104+ disallowedReferences = [ openjdk11_headless ];
105+
106+ passthru.deps = deps;
107+
108+ meta = with stdenv.lib; {
109+ homepage = "http://openjdk.java.net/projects/openjfx/";
110+ license = licenses.gpl2;
111+ description = "The next-generation Java client toolkit.";
112+ maintainers = with maintainers; [ abbradar ];
113+ platforms = [ "i686-linux" "x86_64-linux" ];
114+ };
115+}
test/golden/importless/16.1.2.nixnew file+84
@@ -0,0 +1,84 @@
1+{ stdenv, fetchurl, fetchpatch
2+, libtool, autoconf, automake
3+, gmp, mpfr, libffi, makeWrapper
4+, noUnicode ? false
5+, gcc
6+, threadSupport ? false
7+, useBoehmgc ? true, boehmgc
8+}:
9+
10+assert useBoehmgc -> boehmgc != null;
11+
12+let
13+ s = # Generated upstream information
14+ rec {
15+ baseName="ecl";
16+ version="16.1.2";
17+ name="${baseName}-${version}";
18+ url="https://common-lisp.net/project/ecl/static/files/release/ecl-16.1.2.tgz";
19+ sha256="16ab8qs3awvdxy8xs8jy82v8r04x4wr70l9l2j45vgag18d2nj1d";
20+ };
21+ buildInputs = [
22+ libtool autoconf automake makeWrapper
23+ ];
24+ propagatedBuildInputs = [
25+ libffi gmp mpfr gcc
26+ ] ++ stdenv.lib.optionals useBoehmgc [
27+ # replaces ecl's own gc which other packages can depend on, thus propagated
28+ boehmgc
29+ ];
30+in
31+stdenv.mkDerivation {
32+ inherit (s) name version;
33+ inherit buildInputs propagatedBuildInputs;
34+
35+ src = fetchurl {
36+ inherit (s) url sha256;
37+ };
38+
39+ configureFlags = [
40+ (if threadSupport then "--enable-threads" else "--disable-threads")
41+ "--with-gmp-prefix=${gmp.dev}"
42+ "--with-libffi-prefix=${libffi.dev}"
43+ ]
44+ ++
45+ (stdenv.lib.optional (! noUnicode)
46+ "--enable-unicode")
47+ ;
48+
49+ patches = [
50+ (fetchpatch {
51+ # Avoid infinite loop, see https://gitlab.com/embeddable-common-lisp/ecl/issues/43 (fixed upstream)
52+ name = "avoid-infinite-loop.patch";
53+ url = "https://gitlab.com/embeddable-common-lisp/ecl/commit/caba1989f40ef917e7486f41b9cd5c7e3c5c2d79.patch";
54+ sha256 = "07vw91psbc9gdn8grql46ra8lq3bgkzg5v480chnbryna4sv6lbb";
55+ })
56+ (fetchpatch {
57+ # Fix getcwd with long pathnames
58+ # Rebased version of
59+ # https://gitlab.com/embeddable-common-lisp/ecl/commit/ac5f011f57a85a38627af154bc3ee7580e7fecd4.patch
60+ name = "getcwd.patch";
61+ url = "https://git.sagemath.org/sage.git/plain/build/pkgs/ecl/patches/16.1.2-getcwd.patch?id=07d6c37d18811e2b377a9689790a7c5e24da16ba";
62+ sha256 = "1fbi8gn7rv8nqff5mpaijsrch3k3z7qc5cn4h1vl8qrr8xwqlqhb";
63+ })
64+ ./ecl-1.16.2-libffi-3.3-abi.patch
65+ ];
66+
67+ hardeningDisable = [ "format" ];
68+
69+ postInstall = ''
70+ sed -e 's/@[-a-zA-Z_]*@//g' -i $out/bin/ecl-config
71+ wrapProgram "$out/bin/ecl" \
72+ --prefix PATH ':' "${gcc}/bin" \
73+ --prefix NIX_LDFLAGS ' ' "-L${gmp.lib or gmp.out or gmp}/lib" \
74+ --prefix NIX_LDFLAGS ' ' "-L${libffi.lib or libffi.out or libffi}/lib"
75+ '';
76+
77+ meta = {
78+ inherit (s) version;
79+ description = "Lisp implementation aiming to be small, fast and easy to embed";
80+ license = stdenv.lib.licenses.mit ;
81+ maintainers = [stdenv.lib.maintainers.raskin];
82+ platforms = stdenv.lib.platforms.unix;
83+ };
84+}
test/golden/importless/16.1.2.txtnew file+47
@@ -0,0 +1,47 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ configureFlags = [String];
6+ hardeningDisable = [String];
7+ meta =
8+ { description = String;
9+ license = δ;
10+ maintainers = [ε];
11+ platforms = ζ;
12+ version = String;
13+ };
14+ name = String;
15+ patches = [String];
16+ postInstall = String;
17+ propagatedBuildInputs = [η];
18+ src = θ;
19+ version = String;
20+ } ->
21+ ι,
22+ β.optionals = Bool -> [Null] -> [η],
23+ κ.optional = Bool -> String -> [String],
24+ λ.licenses = μ,
25+ μ.mit = δ,
26+ ν.maintainers = ξ,
27+ ξ.raskin = ε,
28+ ο.platforms = π,
29+ π.unix = ζ
30+) =>
31+{ autoconf = γ;
32+ automake = γ;
33+ boehmgc = Null;
34+ fetchpatch = {name = String; sha256 = String; url = String;} -> String;
35+ fetchurl = {sha256 = String; url = String;} -> θ;
36+ gcc = η;
37+ gmp = η;
38+ libffi = η;
39+ libtool = γ;
40+ makeWrapper = γ;
41+ mpfr = η;
42+ noUnicode = Bool;
43+ stdenv = α;
44+ threadSupport = Bool;
45+ useBoehmgc = Bool;
46+} ->
47+ι
test/golden/importless/17.nixnew file+36
@@ -0,0 +1,36 @@
1+{ stdenv, buildPythonPackage, fetchPypi
2+, setuptools_scm
3+, cheroot, contextlib2, portend, routes, six, zc_lockfile
4+, backports_unittest-mock, objgraph, pathpy, pytest, pytestcov, backports_functools_lru_cache, requests_toolbelt
5+}:
6+
7+buildPythonPackage rec {
8+ pname = "cherrypy";
9+ version = "17.4.2";
10+
11+ src = fetchPypi {
12+ pname = "CherryPy";
13+ inherit version;
14+ sha256 = "ef1619ad161f526745d4f0e4e517753d9d985814f1280e330661333d2ba05cdf";
15+ };
16+
17+ propagatedBuildInputs = [
18+ cheroot contextlib2 portend routes six zc_lockfile
19+ ];
20+
21+ nativeBuildInputs = [ setuptools_scm ];
22+
23+ checkInputs = [
24+ backports_unittest-mock objgraph pathpy pytest pytestcov backports_functools_lru_cache requests_toolbelt
25+ ];
26+
27+ checkPhase = ''
28+ pytest ${stdenv.lib.optionalString stdenv.isDarwin "--ignore=cherrypy/test/test_wsgi_unix_socket.py"}
29+ '';
30+
31+ meta = with stdenv.lib; {
32+ homepage = "https://www.cherrypy.org";
33+ description = "A pythonic, object-oriented HTTP framework";
34+ license = licenses.bsd3;
35+ };
36+}
test/golden/importless/17.txtnew file+30
@@ -0,0 +1,30 @@
1+∀ α β γ δ ε ζ η θ ι.
2+(α.lib = β, β.licenses = γ, γ.bsd3 = δ) => { backports_functools_lru_cache = ε;
3+ backports_unittest-mock = ε;
4+ buildPythonPackage =
5+ { checkInputs = [ε];
6+ checkPhase = String;
7+ meta = {description = String; homepage = String; license = δ;};
8+ nativeBuildInputs = [ζ];
9+ pname = String;
10+ propagatedBuildInputs = [η];
11+ src = θ;
12+ version = String;
13+ } ->
14+ ι;
15+ cheroot = η;
16+ contextlib2 = η;
17+ fetchPypi = {pname = String; sha256 = String; version = String;} -> θ;
18+ objgraph = ε;
19+ pathpy = ε;
20+ portend = η;
21+ pytest = ε;
22+ pytestcov = ε;
23+ requests_toolbelt = ε;
24+ routes = η;
25+ setuptools_scm = ζ;
26+ six = η;
27+ stdenv = α;
28+ zc_lockfile = η;
29+} ->
30+ι
test/golden/importless/1_1.nixnew file+25
@@ -0,0 +1,25 @@
1+{ lib
2+, buildPythonPackage
3+, fetchPypi
4+, six
5+}:
6+
7+buildPythonPackage rec {
8+ pname = "sphinxcontrib-websupport";
9+ version = "1.1.2";
10+
11+ src = fetchPypi {
12+ inherit pname version;
13+ sha256 = "1501befb0fdf1d1c29a800fdbf4ef5dc5369377300ddbdd16d2cd40e54c6eefc";
14+ };
15+
16+ propagatedBuildInputs = [ six ];
17+
18+ doCheck = false;
19+
20+ meta = {
21+ description = "Sphinx API for Web Apps";
22+ homepage = "http://sphinx-doc.org/";
23+ license = lib.licenses.bsd2;
24+ };
25+}
test/golden/importless/1_12.nixnew file+27
@@ -0,0 +1,27 @@
1+{ stdenv
2+, buildPythonPackage
3+, fetchPypi
4+, pytz
5+, six
6+}:
7+
8+buildPythonPackage rec {
9+ pname = "pg8000";
10+ version = "1.12.5";
11+
12+ src = fetchPypi {
13+ inherit pname version;
14+ sha256 = "1yc3knh28cx3rjb2ifg5kmqqa78yyyw2gzzslbm9fj0mzh5aq1sx";
15+ };
16+
17+ propagatedBuildInputs = [ pytz six ];
18+
19+ meta = with stdenv.lib; {
20+ homepage = "https://github.com/tlocke/pg8000";
21+ description = "PostgreSQL interface library, for asyncio";
22+ maintainers = with maintainers; [ domenkozar ];
23+ platforms = platforms.unix;
24+ };
25+
26+}
27+
test/golden/importless/1_8.nixnew file+183
@@ -0,0 +1,183 @@
1+{ stdenv, fetchFromGitHub, perl, yasm
2+, vp8DecoderSupport ? true # VP8 decoder
3+, vp8EncoderSupport ? true # VP8 encoder
4+, vp9DecoderSupport ? true # VP9 decoder
5+, vp9EncoderSupport ? true # VP9 encoder
6+, extraWarningsSupport ? false # emit non-fatal warnings
7+, werrorSupport ? false # treat warnings as errors (not available with all compilers)
8+, debugSupport ? false # debug mode
9+, gprofSupport ? false # gprof profiling instrumentation
10+, gcovSupport ? false # gcov coverage instrumentation
11+, sizeLimitSupport ? true # limit max size to allow in the decoder
12+, optimizationsSupport ? true # compiler optimization flags
13+, runtimeCpuDetectSupport ? true # detect cpu capabilities at runtime
14+, thumbSupport ? false # build arm assembly in thumb mode
15+, examplesSupport ? true # build examples (vpxdec & vpxenc are part of examples)
16+, debugLibsSupport ? false # include debug version of each library
17+, postprocSupport ? true # postprocessing
18+, multithreadSupport ? true # multithreaded decoding & encoding
19+, internalStatsSupport ? false # output of encoder internal stats for debug, if supported (encoders)
20+, spatialResamplingSupport ? true # spatial sampling (scaling)
21+, realtimeOnlySupport ? false # build for real-time encoding
22+, ontheflyBitpackingSupport ? false # on-the-fly bitpacking in real-time encoding
23+, errorConcealmentSupport ? false # decoder conceals losses
24+, smallSupport ? false # favor smaller binary over speed
25+, postprocVisualizerSupport ? false # macro block/block level visualizers
26+, unitTestsSupport ? false, curl ? null, coreutils ? null # unit tests
27+, webmIOSupport ? true # input from and output to webm container
28+, libyuvSupport ? true # libyuv
29+, decodePerfTestsSupport ? false # build decoder perf tests with unit tests
30+, encodePerfTestsSupport ? false # build encoder perf tests with unit tests
31+, multiResEncodingSupport ? false # multiple-resolution encoding
32+, temporalDenoisingSupport ? true # use temporal denoising instead of spatial denoising
33+, coefficientRangeCheckingSupport ? false # decoder checks if intermediate transform coefficients are in valid range
34+, vp9HighbitdepthSupport ? true # 10/12 bit color support in VP9
35+# Experimental features
36+, experimentalSpatialSvcSupport ? false # Spatial scalable video coding
37+, experimentalFpMbStatsSupport ? false
38+, experimentalEmulateHardwareSupport ? false
39+}:
40+
41+let
42+ inherit (stdenv) is64bit isMips isDarwin isCygwin;
43+ inherit (stdenv.lib) enableFeature optional optionals;
44+in
45+
46+assert vp8DecoderSupport || vp8EncoderSupport || vp9DecoderSupport || vp9EncoderSupport;
47+assert internalStatsSupport && (vp9DecoderSupport || vp9EncoderSupport) -> postprocSupport;
48+/* If spatialResamplingSupport not enabled, build will fail with undeclared variable errors.
49+ Variables called in vpx_scale/generic/vpx_scale.c are declared by vpx_scale/vpx_scale_rtcd.pl,
50+ but is only executed if spatialResamplingSupport is enabled */
51+assert spatialResamplingSupport;
52+assert postprocVisualizerSupport -> postprocSupport;
53+assert unitTestsSupport -> curl != null && coreutils != null;
54+assert vp9HighbitdepthSupport -> (vp9DecoderSupport || vp9EncoderSupport);
55+assert isCygwin -> unitTestsSupport && webmIOSupport && libyuvSupport;
56+
57+stdenv.mkDerivation rec {
58+ pname = "libvpx";
59+ version = "1.8.2";
60+
61+ src = fetchFromGitHub {
62+ owner = "webmproject";
63+ repo = "libvpx";
64+ rev = "v${version}";
65+ sha256 = "0gyq4fkbd2fv7m1mm9xrvn6rk6f4jsmbv8bnlhingmnrvyncnmnr";
66+ };
67+
68+ patches = [
69+# ./CVE-2019-9232.CVE-2019-9325.CVE-2019-9371.CVE-2019-9433.patch
70+ ];
71+
72+ postPatch = ''patchShebangs .'';
73+
74+ outputs = [ "bin" "dev" "out" ];
75+ setOutputFlags = false;
76+
77+ configurePlatforms = [];
78+ configureFlags = [
79+ (enableFeature (vp8EncoderSupport || vp8DecoderSupport) "vp8")
80+ (enableFeature vp8EncoderSupport "vp8-encoder")
81+ (enableFeature vp8DecoderSupport "vp8-decoder")
82+ (enableFeature (vp9EncoderSupport || vp9DecoderSupport) "vp9")
83+ (enableFeature vp9EncoderSupport "vp9-encoder")
84+ (enableFeature vp9DecoderSupport "vp9-decoder")
85+ (enableFeature extraWarningsSupport "extra-warnings")
86+ (enableFeature werrorSupport "werror")
87+ "--disable-install-docs"
88+ (enableFeature examplesSupport "install-bins")
89+ "--enable-install-libs"
90+ "--disable-install-srcs"
91+ (enableFeature debugSupport "debug")
92+ (enableFeature gprofSupport "gprof")
93+ (enableFeature gcovSupport "gcov")
94+ # Required to build shared libraries
95+ (enableFeature (!isCygwin) "pic")
96+ (enableFeature optimizationsSupport "optimizations")
97+ (enableFeature runtimeCpuDetectSupport "runtime-cpu-detect")
98+ (enableFeature thumbSupport "thumb")
99+ "--enable-libs"
100+ (enableFeature examplesSupport "examples")
101+ "--disable-docs"
102+ "--as=yasm"
103+ # Limit default decoder max to WHXGA
104+ (if sizeLimitSupport then "--size-limit=5120x3200" else null)
105+ "--disable-codec-srcs"
106+ (enableFeature debugLibsSupport "debug-libs")
107+ (enableFeature isMips "dequant-tokens")
108+ (enableFeature isMips "dc-recon")
109+ (enableFeature postprocSupport "postproc")
110+ (enableFeature (postprocSupport && (vp9DecoderSupport || vp9EncoderSupport)) "vp9-postproc")
111+ (enableFeature multithreadSupport "multithread")
112+ (enableFeature internalStatsSupport "internal-stats")
113+ (enableFeature spatialResamplingSupport "spatial-resampling")
114+ (enableFeature realtimeOnlySupport "realtime-only")
115+ (enableFeature ontheflyBitpackingSupport "onthefly-bitpacking")
116+ (enableFeature errorConcealmentSupport "error-concealment")
117+ # Shared libraries are only supported on ELF platforms
118+ (if isDarwin || isCygwin then
119+ "--enable-static --disable-shared"
120+ else
121+ "--enable-shared")
122+ (enableFeature smallSupport "small")
123+ (enableFeature postprocVisualizerSupport "postproc-visualizer")
124+ (enableFeature unitTestsSupport "unit-tests")
125+ (enableFeature webmIOSupport "webm-io")
126+ (enableFeature libyuvSupport "libyuv")
127+ (enableFeature decodePerfTestsSupport "decode-perf-tests")
128+ (enableFeature encodePerfTestsSupport "encode-perf-tests")
129+ (enableFeature multiResEncodingSupport "multi-res-encoding")
130+ (enableFeature temporalDenoisingSupport "temporal-denoising")
131+ (enableFeature (temporalDenoisingSupport && (vp9DecoderSupport || vp9EncoderSupport)) "vp9-temporal-denoising")
132+ (enableFeature coefficientRangeCheckingSupport "coefficient-range-checking")
133+ (enableFeature (vp9HighbitdepthSupport && is64bit) "vp9-highbitdepth")
134+ (enableFeature (experimentalSpatialSvcSupport ||
135+ experimentalFpMbStatsSupport ||
136+ experimentalEmulateHardwareSupport) "experimental")
137+ ] ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
138+ #"--extra-cflags="
139+ #"--extra-cxxflags="
140+ #"--prefix="
141+ #"--libc="
142+ #"--libdir="
143+ "--enable-external-build"
144+ # libvpx darwin targets include darwin version (ie. ARCH-darwinXX-gcc, XX being the darwin version)
145+ # See all_platforms: https://github.com/webmproject/libvpx/blob/master/configure
146+ # Darwin versions: 10.4=8, 10.5=9, 10.6=10, 10.7=11, 10.8=12, 10.9=13, 10.10=14
147+ "--force-target=${stdenv.hostPlatform.config}${
148+ if stdenv.hostPlatform.isDarwin then
149+ if stdenv.hostPlatform.osxMinVersion == "10.10" then "14"
150+ else if stdenv.hostPlatform.osxMinVersion == "10.9" then "13"
151+ else if stdenv.hostPlatform.osxMinVersion == "10.8" then "12"
152+ else if stdenv.hostPlatform.osxMinVersion == "10.7" then "11"
153+ else if stdenv.hostPlatform.osxMinVersion == "10.6" then "10"
154+ else if stdenv.hostPlatform.osxMinVersion == "10.5" then "9"
155+ else "8"
156+ else ""}-gcc"
157+ (if stdenv.hostPlatform.isCygwin then "--enable-static-msvcrt" else "")
158+ ] # Experimental features
159+ ++ optional experimentalSpatialSvcSupport "--enable-spatial-svc"
160+ ++ optional experimentalFpMbStatsSupport "--enable-fp-mb-stats"
161+ ++ optional experimentalEmulateHardwareSupport "--enable-emulate-hardware";
162+
163+ nativeBuildInputs = [ perl yasm ];
164+
165+ buildInputs = [ ]
166+ ++ optionals unitTestsSupport [ coreutils curl ];
167+
168+ NIX_LDFLAGS = [
169+ "-lpthread" # fixes linker errors
170+ ];
171+
172+ enableParallelBuilding = true;
173+
174+ postInstall = ''moveToOutput bin "$bin" '';
175+
176+ meta = with stdenv.lib; {
177+ description = "WebM VP8/VP9 codec SDK";
178+ homepage = "https://www.webmproject.org/";
179+ license = licenses.bsd3;
180+ maintainers = with maintainers; [ codyopel ];
181+ platforms = platforms.all;
182+ };
183+}
test/golden/importless/1_x.nixnew file+37
@@ -0,0 +1,37 @@
1+{ stdenv, buildPythonPackage, fetchFromGitHub, cairocffi, nose, fontconfig
2+, cssselect2, defusedxml, pillow, tinycss2 }:
3+
4+# CairoSVG 2.x dropped support for Python 2 so offer CairoSVG 1.x as an
5+# alternative
6+buildPythonPackage rec {
7+ pname = "CairoSVG";
8+ version = "1.0.22";
9+
10+ # PyPI doesn't include tests so use GitHub
11+ src = fetchFromGitHub {
12+ owner = "Kozea";
13+ repo = pname;
14+ rev = version;
15+ sha256 = "15z0cag5s79ghhrlgs5xc9ayvzzdr3v8151vf6k819f1drsfjfxl";
16+ };
17+
18+ propagatedBuildInputs = [ cairocffi ];
19+
20+ checkInputs = [ nose fontconfig cssselect2 defusedxml pillow tinycss2 ];
21+
22+ # Almost all tests just fail. Not sure how to fix them.
23+ doCheck = false;
24+
25+ # checkInputs = [ nose fontconfig cssselect2 defusedxml pillow tinycss2 ];
26+
27+ # checkPhase = ''
28+ # FONTCONFIG_FILE=${fontconfig.out}/etc/fonts/fonts.conf nosetests .
29+ # '';
30+
31+ meta = with stdenv.lib; {
32+ homepage = "https://cairosvg.org";
33+ license = licenses.lgpl3;
34+ description = "SVG converter based on Cairo";
35+ maintainers = with maintainers; [ jluttine ];
36+ };
37+}
test/golden/importless/1_x.txtnew file+34
@@ -0,0 +1,34 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ β.jluttine = γ,
4+ β.licenses = δ,
5+ β.maintainers = ε,
6+ δ.lgpl3 = ζ
7+) =>
8+{ buildPythonPackage =
9+ { checkInputs = [η];
10+ doCheck = Bool;
11+ meta =
12+ { description = String;
13+ homepage = String;
14+ license = ζ;
15+ maintainers = [γ];
16+ };
17+ pname = String;
18+ propagatedBuildInputs = [θ];
19+ src = ι;
20+ version = String;
21+ } ->
22+ κ;
23+ cairocffi = θ;
24+ cssselect2 = η;
25+ defusedxml = η;
26+ fetchFromGitHub =
27+ {owner = String; repo = String; rev = String; sha256 = String;} -> ι;
28+ fontconfig = η;
29+ nose = η;
30+ pillow = η;
31+ stdenv = α;
32+ tinycss2 = η;
33+} ->
34+κ
test/golden/importless/1compat.nixnew file+30
@@ -0,0 +1,30 @@
1+{ stdenv, gnupg, coreutils, writeScript }:
2+
3+stdenv.mkDerivation {
4+ name = "gnupg1compat-${gnupg.version}";
5+
6+ builder = writeScript "gnupg1compat-builder" ''
7+ PATH=${coreutils}/bin
8+ # First symlink all top-level dirs
9+ mkdir -p $out
10+ ln -s "${gnupg}/"* $out
11+
12+ # Replace bin with directory and symlink it contents
13+ rm $out/bin
14+ mkdir -p $out/bin
15+ ln -s "${gnupg}/bin/"* $out/bin
16+
17+ # Add symlinks for any executables that end in 2 and lack any non-*2 version
18+ for f in $out/bin/*2; do
19+ [[ -x $f ]] || continue # ignore failed globs and non-executable files
20+ [[ -e ''${f%2} ]] && continue # ignore commands that already have non-*2 versions
21+ ln -s -- "''${f##*/}" "''${f%2}"
22+ done
23+ '';
24+
25+ meta = gnupg.meta // {
26+ description = gnupg.meta.description +
27+ " with symbolic links for gpg and gpgv";
28+ priority = -1;
29+ };
30+}
test/golden/importless/1compat.txtnew file+8
@@ -0,0 +1,8 @@
1+∀ β γ δ ε ζ η θ ι.
2+( β // {description = String; priority = Number;} ~ γ,
3+ δ.mkDerivation = {builder = ε; meta = ∀ α. α; name = String;} -> ζ,
4+ η.meta = β,
5+ θ.description = String
6+) =>
7+{coreutils = ι; gnupg = η; stdenv = δ; writeScript = String -> String -> ε;} ->
8+ζ
test/golden/importless/2-default.nixnew file+89
@@ -0,0 +1,89 @@
1+{ stdenv, fetchFromGitHub, fetchpatch, substituteAll, libtool, pkgconfig, gettext, gnused
2+, gtk-doc, acl, systemd, glib, libatasmart, polkit, coreutils, bash, which
3+, expat, libxslt, docbook_xsl, utillinux, mdadm, libgudev, libblockdev, parted
4+, gobject-introspection, docbook_xml_dtd_412, docbook_xml_dtd_43, autoconf, automake
5+, xfsprogs, f2fs-tools, dosfstools, e2fsprogs, btrfs-progs, exfat, nilfs-utils, ntfs3g
6+}:
7+
8+stdenv.mkDerivation rec {
9+ pname = "udisks";
10+ version = "2.8.4";
11+
12+ src = fetchFromGitHub {
13+ owner = "storaged-project";
14+ repo = "udisks";
15+ rev = "${pname}-${version}";
16+ sha256 = "01wx2x8xyal595dhdih7rva2bz7gqzgwdp56gi0ikjdzayx17wcf";
17+ };
18+
19+ outputs = [ "out" "man" "dev" ] ++ stdenv.lib.optional (stdenv.hostPlatform == stdenv.buildPlatform) "devdoc";
20+
21+ patches = [
22+ (substituteAll {
23+ src = ./fix-paths.patch;
24+ bash = "${bash}/bin/bash";
25+ blkid = "${utillinux}/bin/blkid";
26+ false = "${coreutils}/bin/false";
27+ mdadm = "${mdadm}/bin/mdadm";
28+ sed = "${gnused}/bin/sed";
29+ sh = "${bash}/bin/sh";
30+ sleep = "${coreutils}/bin/sleep";
31+ true = "${coreutils}/bin/true";
32+ })
33+ (substituteAll {
34+ src = ./force-path.patch;
35+ path = stdenv.lib.makeBinPath [
36+ btrfs-progs coreutils dosfstools e2fsprogs exfat f2fs-tools nilfs-utils
37+ xfsprogs ntfs3g parted utillinux
38+ ];
39+ })
40+
41+ # Fix tests: https://github.com/storaged-project/udisks/issues/724
42+ (fetchpatch {
43+ url = "https://github.com/storaged-project/udisks/commit/60a0c1c967821d317046d9494e45b9a8e4e7a1c1.patch";
44+ sha256 = "0rlgqsxn7rb074x6ivm0ya5lywc4llifj5br0zr31mwwckv7hsdm";
45+ })
46+ ];
47+
48+ nativeBuildInputs = [
49+ autoconf automake pkgconfig libtool gettext which gobject-introspection
50+ gtk-doc libxslt docbook_xml_dtd_412 docbook_xml_dtd_43 docbook_xsl
51+ ];
52+
53+ postPatch = stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
54+ substituteInPlace udisks/udisksclient.c \
55+ --replace 'defined( __GNUC_PREREQ)' 1 \
56+ --replace '__GNUC_PREREQ(4,6)' 1
57+ '';
58+
59+ buildInputs = [
60+ expat libgudev libblockdev acl systemd glib libatasmart polkit
61+ ];
62+
63+ preConfigure = "NOCONFIGURE=1 ./autogen.sh";
64+
65+ configureFlags = [
66+ (stdenv.lib.enableFeature (stdenv.buildPlatform == stdenv.hostPlatform) "gtk-doc")
67+ "--localstatedir=/var"
68+ "--with-systemdsystemunitdir=$(out)/etc/systemd/system"
69+ "--with-udevdir=$(out)/lib/udev"
70+ "--with-tmpfilesdir=no"
71+ ];
72+
73+ makeFlags = [
74+ "INTROSPECTION_GIRDIR=$(dev)/share/gir-1.0"
75+ "INTROSPECTION_TYPELIBDIR=$(out)/lib/girepository-1.0"
76+ ];
77+
78+ enableParallelBuilding = true;
79+
80+ doCheck = true;
81+
82+ meta = with stdenv.lib; {
83+ description = "A daemon, tools and libraries to access and manipulate disks, storage devices and technologies";
84+ homepage = "https://www.freedesktop.org/wiki/Software/udisks/";
85+ license = with licenses; [ lgpl2Plus gpl2Plus ]; # lgpl2Plus for the library, gpl2Plus for the tools & daemon
86+ maintainers = with maintainers; [ johnazoidberg ];
87+ platforms = platforms.linux;
88+ };
89+}
test/golden/importless/2.0.0.nixnew file+57
@@ -0,0 +1,57 @@
1+{ stdenv, fetchurl, erlang, icu, openssl, spidermonkey
2+, coreutils, bash, makeWrapper, python3 }:
3+
4+stdenv.mkDerivation rec {
5+ pname = "couchdb";
6+ version = "2.3.1";
7+
8+
9+ # when updating this, please consider bumping the OTP version
10+ # in all-packages.nix
11+ src = fetchurl {
12+ url = "mirror://apache/couchdb/source/${version}/apache-${pname}-${version}.tar.gz";
13+ sha256 = "0z926hjqyhxhyr65kqxwpmp80nyfqbig6d9dy8dqflpb87n8rss3";
14+ };
15+
16+ nativeBuildInputs = [ makeWrapper ];
17+ buildInputs = [ erlang icu openssl spidermonkey (python3.withPackages(ps: with ps; [ requests ]))];
18+
19+ patches = [ ./jsapi.patch ];
20+ postPatch = ''
21+ substituteInPlace src/couch/rebar.config.script --replace '-DHAVE_CURL -I/usr/local/include' "-DHAVE_CURL -I/usr/local/include $NIX_CFLAGS_COMPILE"
22+
23+ patch bin/rebar <<EOF
24+ 1c1
25+ < #!/usr/bin/env escript
26+ ---
27+ > #!${coreutils}/bin/env escript
28+ EOF
29+
30+ '';
31+
32+ # Configure a username. The build system would use "couchdb" as
33+ # default if none is provided. Note that it is unclear where this
34+ # username is actually used in the build, as any choice seems to be
35+ # working.
36+ configurePhase = ''
37+ ./configure -u nobody
38+ '';
39+
40+ buildPhase = ''
41+ make release
42+ '';
43+
44+ installPhase = ''
45+ mkdir -p $out
46+ cp -r rel/couchdb/* $out
47+ wrapProgram $out/bin/couchdb --suffix PATH : ${bash}/bin
48+ '';
49+
50+ meta = with stdenv.lib; {
51+ description = "A database that uses JSON for documents, JavaScript for MapReduce queries, and regular HTTP for an API";
52+ homepage = "http://couchdb.apache.org";
53+ license = licenses.asl20;
54+ platforms = platforms.all;
55+ maintainers = with maintainers; [ ];
56+ };
57+}
test/golden/importless/2.0.0.txtnew file+42
@@ -0,0 +1,42 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ.
2+( β.lib = γ,
3+ β.mkDerivation =
4+ { buildInputs = [δ];
5+ buildPhase = String;
6+ configurePhase = String;
7+ installPhase = String;
8+ meta =
9+ { description = String;
10+ homepage = String;
11+ license = ε;
12+ maintainers = ∀ α. [α];
13+ platforms = ζ;
14+ };
15+ nativeBuildInputs = [η];
16+ patches = [String];
17+ pname = String;
18+ postPatch = String;
19+ src = θ;
20+ version = String;
21+ } ->
22+ ι,
23+ κ.withPackages = (λ -> [μ]) -> δ,
24+ λ.requests = μ,
25+ γ.licenses = ν,
26+ γ.maintainers = ξ,
27+ γ.platforms = ο,
28+ ν.asl20 = ε,
29+ ο.all = ζ
30+) =>
31+{ bash = π;
32+ coreutils = ρ;
33+ erlang = δ;
34+ fetchurl = {sha256 = String; url = String;} -> θ;
35+ icu = δ;
36+ makeWrapper = η;
37+ openssl = δ;
38+ python3 = κ;
39+ spidermonkey = δ;
40+ stdenv = β;
41+} ->
42+ι
test/golden/importless/2.0.nixnew file+21
@@ -0,0 +1,21 @@
1+{ stdenv, fetchurl, cmake, libgcrypt, qt4, xorg, ... }:
2+
3+stdenv.mkDerivation rec {
4+ pname = "keepassx2";
5+ version = "2.0.3";
6+
7+ src = fetchurl {
8+ url = "https://www.keepassx.org/releases/${version}/keepassx-${version}.tar.gz";
9+ sha256 = "1ia7cqx9ias38mnffsl7da7g1f66bcbjsi23k49sln0c6spb9zr3";
10+ };
11+
12+ buildInputs = [ cmake libgcrypt qt4 xorg.libXtst ];
13+
14+ meta = {
15+ description = "Qt password manager compatible with its Win32 and Pocket PC versions";
16+ homepage = "https://www.keepassx.org/";
17+ license = stdenv.lib.licenses.gpl2;
18+ maintainers = with stdenv.lib.maintainers; [ qknight ];
19+ platforms = with stdenv.lib.platforms; linux;
20+ };
21+}
test/golden/importless/2.0.txtnew file+31
@@ -0,0 +1,31 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο.
2+( α.cmake = β,
3+ α.fetchurl = {sha256 = String; url = String;} -> γ,
4+ α.libgcrypt = β,
5+ α.qt4 = β,
6+ α.stdenv = δ,
7+ α.xorg = ε,
8+ δ.lib = ζ,
9+ δ.mkDerivation =
10+ { buildInputs = [β];
11+ meta =
12+ { description = String;
13+ homepage = String;
14+ license = η;
15+ maintainers = [θ];
16+ platforms = ι;
17+ };
18+ pname = String;
19+ src = γ;
20+ version = String;
21+ } ->
22+ κ,
23+ ε.libXtst = β,
24+ ζ.licenses = λ,
25+ λ.gpl2 = η,
26+ μ.maintainers = ν,
27+ ν.qknight = θ,
28+ ξ.platforms = ο,
29+ ο.linux = ι
30+) =>
31+α -> κ
test/golden/importless/2.0x.nixnew file+134
@@ -0,0 +1,134 @@
1+{ stdenv, fetchgit, flex, bison, python3, autoconf, automake, gnulib, libtool
2+, gettext, ncurses, libusb-compat-0_1, freetype, qemu, lvm2, unifont, pkgconfig
3+, fuse # only needed for grub-mount
4+, zfs ? null
5+, efiSupport ? false
6+, zfsSupport ? true
7+, xenSupport ? false
8+}:
9+
10+with stdenv.lib;
11+let
12+ pcSystems = {
13+ i686-linux.target = "i386";
14+ x86_64-linux.target = "i386";
15+ };
16+
17+ efiSystemsBuild = {
18+ i686-linux.target = "i386";
19+ x86_64-linux.target = "x86_64";
20+ aarch64-linux.target = "aarch64";
21+ };
22+
23+ # For aarch64, we need to use '--target=aarch64-efi' when building,
24+ # but '--target=arm64-efi' when installing. Insanity!
25+ efiSystemsInstall = {
26+ i686-linux.target = "i386";
27+ x86_64-linux.target = "x86_64";
28+ aarch64-linux.target = "arm64";
29+ };
30+
31+ canEfi = any (system: stdenv.hostPlatform.system == system) (mapAttrsToList (name: _: name) efiSystemsBuild);
32+ inPCSystems = any (system: stdenv.hostPlatform.system == system) (mapAttrsToList (name: _: name) pcSystems);
33+
34+ version = "2.04";
35+
36+in (
37+
38+assert efiSupport -> canEfi;
39+assert zfsSupport -> zfs != null;
40+assert !(efiSupport && xenSupport);
41+
42+stdenv.mkDerivation rec {
43+ pname = "grub";
44+ inherit version;
45+
46+ src = fetchgit {
47+ url = "git://git.savannah.gnu.org/grub.git";
48+ rev = "${pname}-${version}";
49+ sha256 = "02gly3xw88pj4zzqjniv1fxa1ilknbq1mdk30bj6qy8n44g90i8w";
50+ };
51+
52+ patches = [
53+ ./fix-bash-completion.patch
54+ ];
55+
56+ nativeBuildInputs = [ bison flex python3 pkgconfig autoconf automake ];
57+ buildInputs = [ ncurses libusb-compat-0_1 freetype gettext lvm2 fuse libtool ]
58+ ++ optional doCheck qemu
59+ ++ optional zfsSupport zfs;
60+
61+ hardeningDisable = [ "all" ];
62+
63+ # Work around a bug in the generated flex lexer (upstream flex bug?)
64+ NIX_CFLAGS_COMPILE = "-Wno-error";
65+
66+ preConfigure =
67+ '' for i in "tests/util/"*.in
68+ do
69+ sed -i "$i" -e's|/bin/bash|${stdenv.shell}|g'
70+ done
71+
72+ # Apparently, the QEMU executable is no longer called
73+ # `qemu-system-i386', even on i386.
74+ #
75+ # In addition, use `-nodefaults' to avoid errors like:
76+ #
77+ # chardev: opening backend "stdio" failed
78+ # qemu: could not open serial device 'stdio': Invalid argument
79+ #
80+ # See <http://www.mail-archive.com/qemu-devel@nongnu.org/msg22775.html>.
81+ sed -i "tests/util/grub-shell.in" \
82+ -e's/qemu-system-i386/qemu-system-x86_64 -nodefaults/g'
83+
84+ unset CPP # setting CPP intereferes with dependency calculation
85+
86+ patchShebangs .
87+
88+ ./bootstrap --no-git --gnulib-srcdir=${gnulib}
89+
90+ substituteInPlace ./configure --replace '/usr/share/fonts/unifont' '${unifont}/share/fonts'
91+ '';
92+
93+ configureFlags = [ "--enable-grub-mount" ] # dep of os-prober
94+ ++ optional zfsSupport "--enable-libzfs"
95+ ++ optionals efiSupport [ "--with-platform=efi" "--target=${efiSystemsBuild.${stdenv.hostPlatform.system}.target}" "--program-prefix=" ]
96+ ++ optionals xenSupport [ "--with-platform=xen" "--target=${efiSystemsBuild.${stdenv.hostPlatform.system}.target}"];
97+
98+ # save target that grub is compiled for
99+ grubTarget = if efiSupport
100+ then "${efiSystemsInstall.${stdenv.hostPlatform.system}.target}-efi"
101+ else if inPCSystems
102+ then "${pcSystems.${stdenv.hostPlatform.system}.target}-pc"
103+ else "";
104+
105+ doCheck = false;
106+ enableParallelBuilding = true;
107+
108+ postInstall = ''
109+ # Avoid a runtime reference to gcc
110+ sed -i $out/lib/grub/*/modinfo.sh -e "/grub_target_cppflags=/ s|'.*'|' '|"
111+ '';
112+
113+ meta = with stdenv.lib; {
114+ description = "GNU GRUB, the Grand Unified Boot Loader (2.x beta)";
115+
116+ longDescription =
117+ '' GNU GRUB is a Multiboot boot loader. It was derived from GRUB, GRand
118+ Unified Bootloader, which was originally designed and implemented by
119+ Erich Stefan Boleyn.
120+
121+ Briefly, the boot loader is the first software program that runs when a
122+ computer starts. It is responsible for loading and transferring
123+ control to the operating system kernel software (such as the Hurd or
124+ the Linux). The kernel, in turn, initializes the rest of the
125+ operating system (e.g., GNU).
126+ '';
127+
128+ homepage = "https://www.gnu.org/software/grub/";
129+
130+ license = licenses.gpl3Plus;
131+
132+ platforms = platforms.gnu ++ platforms.linux;
133+ };
134+})
test/golden/importless/2.1.1.nixnew file+70
@@ -0,0 +1,70 @@
1+{ stdenv, lib, fetchurl, unzip, erlang, git, wget, which, pam
2+, Carbon ? null, Cocoa ? null }:
3+
4+stdenv.mkDerivation {
5+ name = "riak_cs-2.1.1";
6+
7+ buildInputs = [
8+ which unzip erlang git wget
9+ ] ++ lib.optionals stdenv.isDarwin [ Carbon Cocoa ]
10+ ++ lib.optional stdenv.isLinux [ pam ];
11+
12+ src = fetchurl {
13+ url = "https://s3.amazonaws.com/downloads.basho.com/riak-cs/2.1/2.1.1/riak-cs-2.1.1.tar.gz";
14+ sha256 = "115cac127aac6d759c1b429a52e0d18e491c0719a6530b1b88aa52c4efdbedd5";
15+ };
16+
17+
18+ postPatch = ''
19+ sed -i deps/node_package/priv/base/env.sh \
20+ -e 's@{{platform_data_dir}}@''${RIAK_DATA_DIR:-/var/db/riak-cs}@' \
21+ -e 's@^RUNNER_SCRIPT_DIR=.*@RUNNER_SCRIPT_DIR='$out'/bin@' \
22+ -e 's@^RUNNER_BASE_DIR=.*@RUNNER_BASE_DIR='$out'@' \
23+ -e 's@^RUNNER_ETC_DIR=.*@RUNNER_ETC_DIR=''${RIAK_ETC_DIR:-/etc/riak-cs}@' \
24+ -e 's@^RUNNER_LOG_DIR=.*@RUNNER_LOG_DIR=''${RIAK_LOG_DIR:-/var/log}@'
25+
26+ sed -i ./Makefile \
27+ -e 's@rel: deps compile@rel: deps compile-src@'
28+ '';
29+
30+ preBuild = ''
31+ patchShebangs .
32+ '';
33+
34+ buildPhase = ''
35+ runHook preBuild
36+
37+ make locked-deps
38+ make rel
39+
40+ runHook postBuild
41+ '';
42+
43+ doCheck = false;
44+
45+ installPhase = ''
46+ runHook preInstall
47+
48+ mkdir $out
49+ mv rel/riak-cs/etc rel/riak-cs/riak-etc
50+ mkdir -p rel/riak-cs/etc
51+ mv rel/riak-cs/riak-etc rel/riak-cs/etc/riak-cs
52+ mv rel/riak-cs/* $out
53+
54+ for prog in $out/bin/*; do
55+ substituteInPlace $prog \
56+ --replace '. "`cd \`dirname $0\` && /bin/pwd`/../lib/env.sh"' \
57+ ". $out/lib/env.sh"
58+ done
59+
60+ runHook postInstall
61+ '';
62+
63+ meta = with lib; {
64+ description = "Dynamo inspired NoSQL DB by Basho with S3 compatibility";
65+ platforms = [ "x86_64-linux" "x86_64-darwin" ];
66+ license = licenses.asl20;
67+ maintainers = with maintainers; [ mdaiter ];
68+ knownVulnerabilities = [ "CVE-2017-3163 - see https://github.com/NixOS/nixpkgs/issues/33876" ];
69+ };
70+}
test/golden/importless/2.1.1.txtnew file+41
@@ -0,0 +1,41 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ.
2+( α.isDarwin = β,
3+ α.isLinux = γ,
4+ α.mkDerivation =
5+ { buildInputs = [δ];
6+ buildPhase = String;
7+ doCheck = Bool;
8+ installPhase = String;
9+ meta =
10+ { description = String;
11+ knownVulnerabilities = [String];
12+ license = ε;
13+ maintainers = [ζ];
14+ platforms = [String];
15+ };
16+ name = String;
17+ postPatch = String;
18+ preBuild = String;
19+ src = η;
20+ } ->
21+ θ,
22+ ι.licenses = κ,
23+ ι.maintainers = λ,
24+ ι.mdaiter = ζ,
25+ ι.optional = γ -> [μ] -> [δ],
26+ ι.optionals = β -> [Null] -> [δ],
27+ κ.asl20 = ε
28+) =>
29+{ Carbon = Null;
30+ Cocoa = Null;
31+ erlang = δ;
32+ fetchurl = {sha256 = String; url = String;} -> η;
33+ git = δ;
34+ lib = ι;
35+ pam = μ;
36+ stdenv = α;
37+ unzip = δ;
38+ wget = δ;
39+ which = δ;
40+} ->
41+θ
test/golden/importless/2.1.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "2.1.20";
5+ sha256 = "0ik7a4jg3s3xnyrj1sa0rvbh066fv1y2202l7cv6nbca72pgyl6a";
6+})
test/golden/importless/2.1.txtnew file+5
@@ -0,0 +1,5 @@
1+∀ α β γ.
2+( α // {sha256 = String; version = String;} ~ β,
3+ α.callPackage = String -> β -> γ
4+) =>
5+α -> γ
test/golden/importless/2.10.nixnew file+43
@@ -0,0 +1,43 @@
1+{ stdenv, fetchurl, makeWrapper, jre, gnugrep, coreutils }:
2+
3+stdenv.mkDerivation rec {
4+ name = "scala-2.10.7";
5+
6+ src = fetchurl {
7+ url = "https://www.scala-lang.org/files/archive/${name}.tgz";
8+ sha256 = "04gi55lzgrhsb78qw8jmnccqim92rw6898knw0a7gfzn2sci30wj";
9+ };
10+
11+ propagatedBuildInputs = [ jre ] ;
12+ buildInputs = [ makeWrapper ] ;
13+
14+ installPhase = ''
15+ mkdir -p $out
16+ rm bin/*.bat
17+ mv * $out
18+
19+ for p in $(ls $out/bin/) ; do
20+ wrapProgram $out/bin/$p \
21+ --prefix PATH ":" ${coreutils}/bin \
22+ --prefix PATH ":" ${gnugrep}/bin \
23+ --prefix PATH ":" ${jre}/bin \
24+ --set JAVA_HOME ${jre}
25+ done
26+ '';
27+
28+ meta = {
29+ description = "A general purpose programming language";
30+ longDescription = ''
31+ Scala is a general purpose programming language designed to express
32+ common programming patterns in a concise, elegant, and type-safe way.
33+ It smoothly integrates features of object-oriented and functional
34+ languages, enabling Java and other programmers to be more productive.
35+ Code sizes are typically reduced by a factor of two to three when
36+ compared to an equivalent Java application.
37+ '';
38+ homepage = "https://www.scala-lang.org/";
39+ license = stdenv.lib.licenses.bsd3;
40+ platforms = stdenv.lib.platforms.all;
41+ branch = "2.10";
42+ };
43+}
test/golden/importless/2.10.txtnew file+31
@@ -0,0 +1,31 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ installPhase = String;
6+ meta =
7+ { branch = String;
8+ description = String;
9+ homepage = String;
10+ license = δ;
11+ longDescription = String;
12+ platforms = ε;
13+ };
14+ name = String;
15+ propagatedBuildInputs = [ζ];
16+ src = η;
17+ } ->
18+ θ,
19+ β.licenses = ι,
20+ ι.bsd3 = δ,
21+ κ.platforms = λ,
22+ λ.all = ε
23+) =>
24+{ coreutils = μ;
25+ fetchurl = {sha256 = String; url = String;} -> η;
26+ gnugrep = ν;
27+ jre = ζ;
28+ makeWrapper = γ;
29+ stdenv = α;
30+} ->
31+θ
test/golden/importless/2.11.nixnew file+48
@@ -0,0 +1,48 @@
1+{ stdenv, fetchurl, makeWrapper, jre, gnugrep, coreutils }:
2+
3+stdenv.mkDerivation rec {
4+ name = "scala-2.11.12";
5+
6+ src = fetchurl {
7+ url = "https://www.scala-lang.org/files/archive/${name}.tgz";
8+ sha256 = "1a4nc4qp9dm4rps47j92hlmxxqskv67qbdmjqc5zd94wd4rps7di";
9+ };
10+
11+ propagatedBuildInputs = [ jre ] ;
12+ buildInputs = [ makeWrapper ] ;
13+
14+ installPhase = ''
15+ mkdir -p $out
16+ rm "bin/"*.bat
17+ mv * $out
18+
19+ # put docs in correct subdirectory
20+ mkdir -p $out/share/doc
21+ mv $out/doc $out/share/doc/${name}
22+ mv $out/man $out/share/man
23+
24+ for p in $(ls $out/bin/) ; do
25+ wrapProgram $out/bin/$p \
26+ --prefix PATH ":" ${coreutils}/bin \
27+ --prefix PATH ":" ${gnugrep}/bin \
28+ --prefix PATH ":" ${jre}/bin \
29+ --set JAVA_HOME ${jre}
30+ done
31+ '';
32+
33+ meta = {
34+ description = "General purpose programming language";
35+ longDescription = ''
36+ Scala is a general purpose programming language designed to express
37+ common programming patterns in a concise, elegant, and type-safe way.
38+ It smoothly integrates features of object-oriented and functional
39+ languages, enabling Java and other programmers to be more productive.
40+ Code sizes are typically reduced by a factor of two to three when
41+ compared to an equivalent Java application.
42+ '';
43+ homepage = "https://www.scala-lang.org/";
44+ license = stdenv.lib.licenses.bsd3;
45+ platforms = stdenv.lib.platforms.all;
46+ branch = "2.11";
47+ };
48+}
test/golden/importless/2.11.txtnew file+31
@@ -0,0 +1,31 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ installPhase = String;
6+ meta =
7+ { branch = String;
8+ description = String;
9+ homepage = String;
10+ license = δ;
11+ longDescription = String;
12+ platforms = ε;
13+ };
14+ name = String;
15+ propagatedBuildInputs = [ζ];
16+ src = η;
17+ } ->
18+ θ,
19+ β.licenses = ι,
20+ ι.bsd3 = δ,
21+ κ.platforms = λ,
22+ λ.all = ε
23+) =>
24+{ coreutils = μ;
25+ fetchurl = {sha256 = String; url = String;} -> η;
26+ gnugrep = ν;
27+ jre = ζ;
28+ makeWrapper = γ;
29+ stdenv = α;
30+} ->
31+θ
test/golden/importless/2.12.nixnew file+47
@@ -0,0 +1,47 @@
1+{ stdenv, fetchurl, makeWrapper, jre, gnugrep, coreutils }:
2+
3+stdenv.mkDerivation rec {
4+ name = "scala-2.12.10";
5+
6+ src = fetchurl {
7+ url = "https://www.scala-lang.org/files/archive/${name}.tgz";
8+ sha256 = "0sk5n3ir5zkgr8jayq5pn4l87ia5zmjr2zzwchgxkv8g62ivs4iv";
9+ };
10+
11+ propagatedBuildInputs = [ jre ] ;
12+ buildInputs = [ makeWrapper ] ;
13+
14+ installPhase = ''
15+ mkdir -p $out
16+ rm "bin/"*.bat
17+ mv * $out
18+
19+ # put docs in correct subdirectory
20+ mkdir -p $out/share/doc
21+ mv $out/doc $out/share/doc/scala
22+ mv $out/{LICENSE,NOTICE} $out/share/doc/scala
23+
24+ for p in $(ls $out/bin/) ; do
25+ wrapProgram $out/bin/$p \
26+ --prefix PATH ":" ${coreutils}/bin \
27+ --prefix PATH ":" ${gnugrep}/bin \
28+ --prefix PATH ":" ${jre}/bin \
29+ --set JAVA_HOME ${jre}
30+ done
31+ '';
32+
33+ meta = {
34+ description = "General purpose programming language";
35+ longDescription = ''
36+ Scala is a general purpose programming language designed to express
37+ common programming patterns in a concise, elegant, and type-safe way.
38+ It smoothly integrates features of object-oriented and functional
39+ languages, enabling Java and other programmers to be more productive.
40+ Code sizes are typically reduced by a factor of two to three when
41+ compared to an equivalent Java application.
42+ '';
43+ homepage = "https://www.scala-lang.org/";
44+ license = stdenv.lib.licenses.bsd3;
45+ platforms = stdenv.lib.platforms.all;
46+ };
47+}
test/golden/importless/2.12.txtnew file+30
@@ -0,0 +1,30 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ installPhase = String;
6+ meta =
7+ { description = String;
8+ homepage = String;
9+ license = δ;
10+ longDescription = String;
11+ platforms = ε;
12+ };
13+ name = String;
14+ propagatedBuildInputs = [ζ];
15+ src = η;
16+ } ->
17+ θ,
18+ β.licenses = ι,
19+ ι.bsd3 = δ,
20+ κ.platforms = λ,
21+ λ.all = ε
22+) =>
23+{ coreutils = μ;
24+ fetchurl = {sha256 = String; url = String;} -> η;
25+ gnugrep = ν;
26+ jre = ζ;
27+ makeWrapper = γ;
28+ stdenv = α;
29+} ->
30+θ
test/golden/importless/2.13.nixnew file+47
@@ -0,0 +1,47 @@
1+{ stdenv, fetchurl, makeWrapper, jre, gnugrep, coreutils }:
2+
3+stdenv.mkDerivation rec {
4+ name = "scala-2.13.3";
5+
6+ src = fetchurl {
7+ url = "https://www.scala-lang.org/files/archive/${name}.tgz";
8+ sha256 = "0zv9w9f6g2cfydsvp8mqcfgv2v3487xp4ca1qndg6v7jrhdp7wy9";
9+ };
10+
11+ propagatedBuildInputs = [ jre ] ;
12+ buildInputs = [ makeWrapper ] ;
13+
14+ installPhase = ''
15+ mkdir -p $out
16+ rm "bin/"*.bat
17+ mv * $out
18+
19+ # put docs in correct subdirectory
20+ mkdir -p $out/share/doc
21+ mv $out/doc $out/share/doc/scala
22+ mv $out/{LICENSE,NOTICE} $out/share/doc/scala
23+
24+ for p in $(ls $out/bin/) ; do
25+ wrapProgram $out/bin/$p \
26+ --prefix PATH ":" ${coreutils}/bin \
27+ --prefix PATH ":" ${gnugrep}/bin \
28+ --prefix PATH ":" ${jre}/bin \
29+ --set JAVA_HOME ${jre}
30+ done
31+ '';
32+
33+ meta = {
34+ description = "General purpose programming language";
35+ longDescription = ''
36+ Scala is a general purpose programming language designed to express
37+ common programming patterns in a concise, elegant, and type-safe way.
38+ It smoothly integrates features of object-oriented and functional
39+ languages, enabling Java and other programmers to be more productive.
40+ Code sizes are typically reduced by a factor of two to three when
41+ compared to an equivalent Java application.
42+ '';
43+ homepage = "https://www.scala-lang.org/";
44+ license = stdenv.lib.licenses.bsd3;
45+ platforms = stdenv.lib.platforms.all;
46+ };
47+}
test/golden/importless/2.13.txtnew file+30
@@ -0,0 +1,30 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ installPhase = String;
6+ meta =
7+ { description = String;
8+ homepage = String;
9+ license = δ;
10+ longDescription = String;
11+ platforms = ε;
12+ };
13+ name = String;
14+ propagatedBuildInputs = [ζ];
15+ src = η;
16+ } ->
17+ θ,
18+ β.licenses = ι,
19+ ι.bsd3 = δ,
20+ κ.platforms = λ,
21+ λ.all = ε
22+) =>
23+{ coreutils = μ;
24+ fetchurl = {sha256 = String; url = String;} -> η;
25+ gnugrep = ν;
26+ jre = ζ;
27+ makeWrapper = γ;
28+ stdenv = α;
29+} ->
30+θ
test/golden/importless/2.14.0.nixnew file+41
@@ -0,0 +1,41 @@
1+{ stdenv, fetchurl, ocaml, findlib, pkgconfig, gtk2, libgnomecanvas, libglade, gtksourceview, camlp4 }:
2+
3+if stdenv.lib.versionAtLeast ocaml.version "4.04"
4+then throw "lablgtk-2.14 is not available for OCaml ${ocaml.version}" else
5+
6+let
7+ pname = "lablgtk";
8+in
9+
10+stdenv.mkDerivation (rec {
11+ name = "${pname}-${version}";
12+ version = "2.14.0";
13+
14+ src = fetchurl {
15+ url = "https://forge.ocamlcore.org/frs/download.php/561/${name}.tar.gz";
16+ sha256 = "1fnh0amm7lwgyjdhmlqgsp62gwlar1140425yc1j6inwmgnsp0a9";
17+ };
18+
19+ nativeBuildInputs = [ pkgconfig ];
20+ buildInputs = [ ocaml findlib gtk2 libgnomecanvas libglade gtksourceview camlp4 ];
21+
22+ configureFlags = [ "--with-libdir=$(out)/lib/ocaml/${ocaml.version}/site-lib" ];
23+ buildFlags = [ "world" ];
24+
25+ preInstall = ''
26+ mkdir -p $out/lib/ocaml/${ocaml.version}/site-lib
27+ export OCAMLPATH=$out/lib/ocaml/${ocaml.version}/site-lib/:$OCAMLPATH
28+ '';
29+
30+ meta = {
31+ branch = "2.14";
32+ platforms = ocaml.meta.platforms or [];
33+ maintainers = [
34+ stdenv.lib.maintainers.maggesi
35+ stdenv.lib.maintainers.roconnor
36+ ];
37+ homepage = "http://wwwfun.kurims.kyoto-u.ac.jp/soft/lsl/lablgtk.html";
38+ description = "LablGTK is is an Objective Caml interface to GTK";
39+ license = stdenv.lib.licenses.lgpl21Plus;
40+ };
41+})
test/golden/importless/2.2.0.nixnew file+98
@@ -0,0 +1,98 @@
1+{ stdenv, lib, fetchurl, unzip, erlang, which, pam }:
2+
3+let
4+ solrName = "solr-4.10.4-yz-2.tgz";
5+ yokozunaJarName = "yokozuna-3.jar";
6+ yzMonitorJarName = "yz_monitor-1.jar";
7+
8+ srcs = {
9+ riak = fetchurl {
10+ url = "https://s3.amazonaws.com/downloads.basho.com/riak/2.2/2.2.0/riak-2.2.0.tar.gz";
11+ sha256 = "0kl28bpyzajcllybili46jfr1schl45w5ysii187jr0ssgls2c9p";
12+ };
13+ solr = fetchurl {
14+ url = "http://s3.amazonaws.com/files.basho.com/solr/${solrName}";
15+ sha256 = "0fy5slnldn628gmr2kilyx606ph0iykf7pz6j0xjcc3wqvrixa2a";
16+ };
17+ yokozunaJar = fetchurl {
18+ url = "http://s3.amazonaws.com/files.basho.com/yokozuna/${yokozunaJarName}";
19+ sha256 = "17n6m100fz8affdcxsn4niw2lrpnswgfnd6aszgzipffwbg7v8v5";
20+ };
21+ yzMonitorJar = fetchurl {
22+ url = "http://s3.amazonaws.com/files.basho.com/yokozuna/${yzMonitorJarName}";
23+ sha256 = "0kb97d1a43vw759j1h5qwbhx455pidn2pi7sfxijqic37h81ri1m";
24+ };
25+ };
26+in
27+
28+stdenv.mkDerivation {
29+ name = "riak-2.2.0";
30+
31+ buildInputs = [
32+ which unzip erlang pam
33+ ];
34+
35+ src = srcs.riak;
36+
37+ hardeningDisable = [ "format" ];
38+
39+ postPatch = ''
40+ sed -i deps/node_package/priv/base/env.sh \
41+ -e 's@{{platform_data_dir}}@''${RIAK_DATA_DIR:-/var/db/riak}@' \
42+ -e 's@^RUNNER_SCRIPT_DIR=.*@RUNNER_SCRIPT_DIR='$out'/bin@' \
43+ -e 's@^RUNNER_BASE_DIR=.*@RUNNER_BASE_DIR='$out'@' \
44+ -e 's@^RUNNER_ETC_DIR=.*@RUNNER_ETC_DIR=''${RIAK_ETC_DIR:-/etc/riak}@' \
45+ -e 's@^RUNNER_LOG_DIR=.*@RUNNER_LOG_DIR=''${RIAK_LOG_DIR:-/var/log}@'
46+ '';
47+
48+ preBuild = ''
49+ mkdir solr-pkg
50+ cp ${srcs.solr} solr-pkg/${solrName}
51+ export SOLR_PKG_DIR=$(readlink -f solr-pkg)
52+
53+ mkdir -p deps/yokozuna/priv/java_lib
54+ cp ${srcs.yokozunaJar} deps/yokozuna/priv/java_lib/${yokozunaJarName}
55+
56+ mkdir -p deps/yokozuna/priv/solr/lib/ext
57+ cp ${srcs.yzMonitorJar} deps/yokozuna/priv/solr/lib/ext/${yzMonitorJarName}
58+
59+ patchShebangs .
60+ '';
61+
62+ buildPhase = ''
63+ runHook preBuild
64+
65+ make locked-deps
66+ make rel
67+
68+ runHook postBuild
69+ '';
70+
71+ doCheck = false;
72+
73+ installPhase = ''
74+ runHook preInstall
75+
76+ mkdir $out
77+ mv rel/riak/etc rel/riak/riak-etc
78+ mkdir -p rel/riak/etc
79+ mv rel/riak/riak-etc rel/riak/etc/riak
80+ mv rel/riak/* $out
81+
82+ for prog in $out/bin/*; do
83+ substituteInPlace $prog \
84+ --replace '. "`cd \`dirname $0\` && /bin/pwd`/../lib/env.sh"' \
85+ ". $out/lib/env.sh"
86+ done
87+
88+ runHook postInstall
89+ '';
90+
91+ meta = with lib; {
92+ maintainers = with maintainers; [ cstrahan mdaiter ];
93+ description = "Dynamo inspired NoSQL DB by Basho";
94+ platforms = [ "x86_64-linux" ];
95+ license = licenses.asl20;
96+ knownVulnerabilities = [ "CVE-2017-3163 - see https://github.com/NixOS/nixpkgs/issues/33876" ];
97+ };
98+}
test/golden/importless/2.2.0.txtnew file+35
@@ -0,0 +1,35 @@
1+∀ β γ δ ε ζ η θ ι κ.
2+( β.mkDerivation =
3+ { buildInputs = [γ];
4+ buildPhase = String;
5+ doCheck = Bool;
6+ hardeningDisable = [String];
7+ installPhase = String;
8+ meta =
9+ { description = String;
10+ knownVulnerabilities = [String];
11+ license = δ;
12+ maintainers = [ε];
13+ platforms = [String];
14+ };
15+ name = String;
16+ postPatch = String;
17+ preBuild = String;
18+ src = ∀ α. α;
19+ } ->
20+ ζ,
21+ η.cstrahan = ε,
22+ η.licenses = θ,
23+ η.maintainers = ι,
24+ η.mdaiter = ε,
25+ θ.asl20 = δ
26+) =>
27+{ erlang = γ;
28+ fetchurl = {sha256 = String; url = String;} -> κ;
29+ lib = η;
30+ pam = γ;
31+ stdenv = β;
32+ unzip = γ;
33+ which = γ;
34+} ->
35+ζ
test/golden/importless/2.2.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "2.2.14";
5+ sha256 = "1b2x3q1ach44qg07sh8wr7d8a10n36w5522drd3p35djbiwa3d9q";
6+})
test/golden/importless/2.2.txtnew file+5
@@ -0,0 +1,5 @@
1+∀ α β γ.
2+( α // {sha256 = String; version = String;} ~ β,
3+ α.callPackage = String -> β -> γ
4+) =>
5+α -> γ
test/golden/importless/2.22.nixnew file+45
@@ -0,0 +1,45 @@
1+{stdenv, fetchurl, unzip}:
2+let
3+ s = # Generated upstream information
4+ rec {
5+ baseName="angelscript";
6+ version = "2.22.2";
7+ name="${baseName}-${version}";
8+ url="http://www.angelcode.com/angelscript/sdk/files/angelscript_${version}.zip";
9+ sha256 = "1pp853lbnz383ilp9wbgc3wv1dn7lpx3idz8dmzda94rckl7sd43";
10+ };
11+ buildInputs = [
12+ unzip
13+ ];
14+in
15+stdenv.mkDerivation {
16+ inherit (s) name version;
17+ inherit buildInputs;
18+ src = fetchurl {
19+ inherit (s) url sha256;
20+ };
21+ preConfigure = ''
22+ cd angelscript/projects/gnuc
23+ sed -i makefile -e "s@LOCAL = .*@LOCAL = $out@"
24+ export SHARED=1
25+ export VERSION="${s.version}"
26+ mkdir -p "$out/lib" "$out/bin" "$out/share" "$out/include"
27+ '';
28+ postBuild = ''
29+ rm ../../lib/*
30+ '';
31+ postInstall = ''
32+ mkdir -p "$out/share/docs/angelscript"
33+ cp -r ../../../docs/* "$out/share/docs/angelscript"
34+ '';
35+ meta = {
36+ inherit (s) version;
37+ description = "Light-weight scripting library";
38+ license = stdenv.lib.licenses.zlib ;
39+ maintainers = [stdenv.lib.maintainers.raskin];
40+ platforms = stdenv.lib.platforms.linux;
41+ badPlatforms = [ "aarch64-linux" ];
42+ downloadPage = "http://www.angelcode.com/angelscript/downloads.html";
43+ homepage="http://www.angelcode.com/angelscript/";
44+ };
45+}
test/golden/importless/2.22.txtnew file+30
@@ -0,0 +1,30 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ meta =
6+ { badPlatforms = [String];
7+ description = String;
8+ downloadPage = String;
9+ homepage = String;
10+ license = δ;
11+ maintainers = [ε];
12+ platforms = ζ;
13+ version = String;
14+ };
15+ name = String;
16+ postBuild = String;
17+ postInstall = String;
18+ preConfigure = String;
19+ src = η;
20+ version = String;
21+ } ->
22+ θ,
23+ β.licenses = ι,
24+ ι.zlib = δ,
25+ κ.maintainers = λ,
26+ λ.raskin = ε,
27+ μ.platforms = ν,
28+ ν.linux = ζ
29+) =>
30+{fetchurl = {sha256 = String; url = String;} -> η; stdenv = α; unzip = γ;} -> θ
test/golden/importless/2.26.nixnew file+41
@@ -0,0 +1,41 @@
1+{stdenv, fetchurl, texinfo, texLive, perl}:
2+let
3+ s = # Generated upstream information
4+ rec {
5+ baseName="asdf";
6+ version="2.26";
7+ name="${baseName}-${version}";
8+ url="http://common-lisp.net/project/asdf/archives/asdf-${version}.tar.gz";
9+ sha256="1qzp444rgnqf1cz9v48nh0yvz7wjq9fjdpimifsfcjswaqi2xrdn";
10+ };
11+ buildInputs = [
12+ texinfo texLive perl
13+ ];
14+in
15+stdenv.mkDerivation {
16+ inherit (s) name version;
17+ inherit buildInputs;
18+ src = fetchurl {
19+ inherit (s) url sha256;
20+ };
21+
22+ buildPhase = ''
23+ make asdf.lisp
24+ mkdir build
25+ ln -s ../asdf.lisp build
26+ '';
27+ installPhase = ''
28+ mkdir -p "$out"/lib/common-lisp/asdf/
29+ mkdir -p "$out"/share/doc/asdf/
30+ cp -r ./* "$out"/lib/common-lisp/asdf/
31+ cp -r doc/* "$out"/share/doc/asdf/
32+ ln -s "$out"/lib/common-lisp/{asdf/uiop,uiop}
33+ '';
34+ meta = {
35+ inherit (s) version;
36+ description = ''Standard software-system definition library for Common Lisp'';
37+ license = stdenv.lib.licenses.mit ;
38+ maintainers = [stdenv.lib.maintainers.raskin];
39+ platforms = stdenv.lib.platforms.linux;
40+ };
41+}
test/golden/importless/2.26.txtnew file+32
@@ -0,0 +1,32 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ buildPhase = String;
6+ installPhase = String;
7+ meta =
8+ { description = String;
9+ license = δ;
10+ maintainers = [ε];
11+ platforms = ζ;
12+ version = String;
13+ };
14+ name = String;
15+ src = η;
16+ version = String;
17+ } ->
18+ θ,
19+ β.licenses = ι,
20+ ι.mit = δ,
21+ κ.maintainers = λ,
22+ λ.raskin = ε,
23+ μ.platforms = ν,
24+ ν.linux = ζ
25+) =>
26+{ fetchurl = {sha256 = String; url = String;} -> η;
27+ perl = γ;
28+ stdenv = α;
29+ texLive = γ;
30+ texinfo = γ;
31+} ->
32+θ
test/golden/importless/2.4.0.nixnew file+25
@@ -0,0 +1,25 @@
1+{ stdenv, fetchurl, unzip }:
2+
3+stdenv.mkDerivation {
4+ name = "gwt-java-2.4.0";
5+
6+ src = fetchurl {
7+ url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/google-web-toolkit/gwt-2.4.0.zip";
8+ sha256 = "1gvyg00vx7fdqgfl2w7nhql78clg3abs6fxxy7m03pprdm5qmm17";
9+ };
10+
11+ buildInputs = [ unzip ];
12+
13+ installPhase = ''
14+ mkdir -p $out
15+ unzip $src
16+ mv gwt-2.4.0 $out/bin
17+ '';
18+
19+ meta = {
20+ homepage = "http://www.gwtproject.org/";
21+ description = "A development toolkit for building and optimizing complex browser-based applications";
22+ license = stdenv.lib.licenses.asl20;
23+ platforms = stdenv.lib.platforms.unix;
24+ };
25+}
test/golden/importless/2.4.0.txtnew file+17
@@ -0,0 +1,17 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ installPhase = String;
6+ meta =
7+ {description = String; homepage = String; license = δ; platforms = ε;};
8+ name = String;
9+ src = ζ;
10+ } ->
11+ η,
12+ β.licenses = θ,
13+ θ.asl20 = δ,
14+ ι.platforms = κ,
15+ κ.unix = ε
16+) =>
17+{fetchurl = {sha256 = String; url = String;} -> ζ; stdenv = α; unzip = γ;} -> η
test/golden/importless/2.4.nixnew file+97
@@ -0,0 +1,97 @@
1+{ stdenv, fetchurl, perl, zlib, apr, aprutil, pcre, libiconv, lynx
2+, proxySupport ? true
3+, sslSupport ? true, openssl
4+, http2Support ? true, nghttp2
5+, ldapSupport ? true, openldap
6+, libxml2Support ? true, libxml2
7+, brotliSupport ? true, brotli
8+, luaSupport ? false, lua5
9+}:
10+
11+let inherit (stdenv.lib) optional;
12+in
13+
14+assert sslSupport -> aprutil.sslSupport && openssl != null;
15+assert ldapSupport -> aprutil.ldapSupport && openldap != null;
16+assert http2Support -> nghttp2 != null;
17+
18+stdenv.mkDerivation rec {
19+ version = "2.4.46";
20+ pname = "apache-httpd";
21+
22+ src = fetchurl {
23+ url = "mirror://apache/httpd/httpd-${version}.tar.bz2";
24+ sha256 = "1sj1rwgbcjgkzac3ybjy7j68c9b3dv3ap71m48mrjhf6w7vds3kl";
25+ };
26+
27+ # FIXME: -dev depends on -doc
28+ outputs = [ "out" "dev" "man" "doc" ];
29+ setOutputFlags = false; # it would move $out/modules, etc.
30+
31+ buildInputs = [perl] ++
32+ optional brotliSupport brotli ++
33+ optional sslSupport openssl ++
34+ optional ldapSupport openldap ++ # there is no --with-ldap flag
35+ optional libxml2Support libxml2 ++
36+ optional http2Support nghttp2 ++
37+ optional stdenv.isDarwin libiconv;
38+
39+ prePatch = ''
40+ sed -i config.layout -e "s|installbuilddir:.*|installbuilddir: $dev/share/build|"
41+ sed -i support/apachectl.in -e 's|@LYNX_PATH@|${lynx}/bin/lynx|'
42+ '';
43+
44+ # Required for ‘pthread_cancel’.
45+ NIX_LDFLAGS = stdenv.lib.optionalString (!stdenv.isDarwin) "-lgcc_s";
46+
47+ configureFlags = [
48+ "--with-apr=${apr.dev}"
49+ "--with-apr-util=${aprutil.dev}"
50+ "--with-z=${zlib.dev}"
51+ "--with-pcre=${pcre.dev}"
52+ "--disable-maintainer-mode"
53+ "--disable-debugger-mode"
54+ "--enable-mods-shared=all"
55+ "--enable-mpms-shared=all"
56+ "--enable-cern-meta"
57+ "--enable-imagemap"
58+ "--enable-cgi"
59+ "--includedir=${placeholder "dev"}/include"
60+ (stdenv.lib.enableFeature proxySupport "proxy")
61+ (stdenv.lib.enableFeature sslSupport "ssl")
62+ (stdenv.lib.withFeatureAs libxml2Support "libxml2" "${libxml2.dev}/include/libxml2")
63+ "--docdir=$(doc)/share/doc"
64+
65+ (stdenv.lib.enableFeature brotliSupport "brotli")
66+ (stdenv.lib.withFeatureAs brotliSupport "brotli" brotli)
67+
68+ (stdenv.lib.enableFeature http2Support "http2")
69+ (stdenv.lib.withFeature http2Support "nghttp2")
70+
71+ (stdenv.lib.enableFeature luaSupport "lua")
72+ (stdenv.lib.withFeatureAs luaSupport "lua" lua5)
73+ ];
74+
75+ enableParallelBuilding = true;
76+
77+ stripDebugList = [ "lib" "modules" "bin" ];
78+
79+ postInstall = ''
80+ mkdir -p $doc/share/doc/httpd
81+ mv $out/manual $doc/share/doc/httpd
82+ mkdir -p $dev/bin
83+ mv $out/bin/apxs $dev/bin/apxs
84+ '';
85+
86+ passthru = {
87+ inherit apr aprutil sslSupport proxySupport ldapSupport;
88+ };
89+
90+ meta = with stdenv.lib; {
91+ description = "Apache HTTPD, the world's most popular web server";
92+ homepage = "http://httpd.apache.org/";
93+ license = licenses.asl20;
94+ platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
95+ maintainers = with maintainers; [ lovek323 peti ];
96+ };
97+}
test/golden/importless/2.4.txtnew file+79
@@ -0,0 +1,79 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω α1 β1 γ1 δ1 ε1 ζ1 η1 θ1.
2+( α.isDarwin = Bool,
3+ α.lib = β,
4+ α.mkDerivation =
5+ { NIX_LDFLAGS = γ;
6+ buildInputs = [δ];
7+ configureFlags = [String];
8+ enableParallelBuilding = Bool;
9+ meta =
10+ { description = String;
11+ homepage = String;
12+ license = ε;
13+ maintainers = [ζ];
14+ platforms = [η];
15+ };
16+ outputs = [String];
17+ passthru =
18+ { apr = θ;
19+ aprutil = ι;
20+ ldapSupport = Bool;
21+ proxySupport = Bool;
22+ sslSupport = Bool;
23+ };
24+ pname = String;
25+ postInstall = String;
26+ prePatch = String;
27+ setOutputFlags = Bool;
28+ src = κ;
29+ stripDebugList = [String];
30+ version = String;
31+ } ->
32+ λ,
33+ ι.ldapSupport = Bool,
34+ ι.sslSupport = Bool,
35+ β.optional = Bool -> Null -> [δ],
36+ μ.licenses = ν,
37+ μ.lovek323 = ζ,
38+ μ.maintainers = ξ,
39+ μ.peti = ζ,
40+ ν.asl20 = ε,
41+ ο.platforms = π,
42+ π.linux = [η],
43+ ρ.platforms = σ,
44+ σ.darwin = [η],
45+ τ.enableFeature = Bool -> String -> String,
46+ υ.enableFeature = Bool -> String -> String,
47+ φ.withFeatureAs = Bool -> String -> String -> String,
48+ χ.enableFeature = Bool -> String -> String,
49+ ψ.withFeatureAs = Bool -> String -> Null -> String,
50+ ω.enableFeature = Bool -> String -> String,
51+ α1.withFeature = Bool -> String -> String,
52+ β1.enableFeature = Bool -> String -> String,
53+ γ1.withFeatureAs = Bool -> String -> δ1 -> String,
54+ ε1.optionalString = Bool -> String -> γ
55+) =>
56+{ apr = θ;
57+ aprutil = ι;
58+ brotli = Null;
59+ brotliSupport = Bool;
60+ fetchurl = {sha256 = String; url = String;} -> κ;
61+ http2Support = Bool;
62+ ldapSupport = Bool;
63+ libiconv = Null;
64+ libxml2 = Null;
65+ libxml2Support = Bool;
66+ lua5 = δ1;
67+ luaSupport = Bool;
68+ lynx = ζ1;
69+ nghttp2 = Null;
70+ openldap = Null;
71+ openssl = Null;
72+ pcre = η1;
73+ perl = δ;
74+ proxySupport = Bool;
75+ sslSupport = Bool;
76+ stdenv = α;
77+ zlib = θ1;
78+} ->
79+λ
test/golden/importless/2.5.35.nixnew file+33
@@ -0,0 +1,33 @@
1+{ stdenv, fetchurl, autoreconfHook, flex, bison, texinfo, help2man, m4 }:
2+
3+stdenv.mkDerivation {
4+ name = "flex-2.5.35";
5+
6+ src = fetchurl {
7+ url = "https://github.com/westes/flex/archive/flex-2-5-35.tar.gz";
8+ sha256 = "0wh06nix8bd4w1aq4k2fbbkdq5i30a9lxz3xczf3ff28yy0kfwzm";
9+ };
10+
11+ postPatch = ''
12+ patchShebangs tests
13+ '';
14+
15+ nativeBuildInputs = [ flex bison texinfo help2man autoreconfHook ];
16+
17+ propagatedBuildInputs = [ m4 ];
18+
19+ preConfigure = stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
20+ "ac_cv_func_malloc_0_nonnull=yes"
21+ "ac_cv_func_realloc_0_nonnull=yes"
22+ ];
23+
24+ doCheck = false; # fails 2 out of 46 tests
25+
26+ meta = with stdenv.lib; {
27+ branch = "2.5.35";
28+ homepage = "http://flex.sourceforge.net/";
29+ description = "A fast lexical analyser generator";
30+ license = licenses.bsd2;
31+ platforms = platforms.unix;
32+ };
33+}
test/golden/importless/2.5.35.txtnew file+37
@@ -0,0 +1,37 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν.
2+( α.buildPlatform = β,
3+ α.hostPlatform = β,
4+ α.lib = γ,
5+ α.mkDerivation =
6+ { doCheck = Bool;
7+ meta =
8+ { branch = String;
9+ description = String;
10+ homepage = String;
11+ license = δ;
12+ platforms = ε;
13+ };
14+ name = String;
15+ nativeBuildInputs = [ζ];
16+ postPatch = String;
17+ preConfigure = η;
18+ propagatedBuildInputs = [θ];
19+ src = ι;
20+ } ->
21+ κ,
22+ γ.licenses = λ,
23+ γ.platforms = μ,
24+ λ.bsd2 = δ,
25+ μ.unix = ε,
26+ ν.optionals = Bool -> [String] -> η
27+) =>
28+{ autoreconfHook = ζ;
29+ bison = ζ;
30+ fetchurl = {sha256 = String; url = String;} -> ι;
31+ flex = ζ;
32+ help2man = ζ;
33+ m4 = θ;
34+ stdenv = α;
35+ texinfo = ζ;
36+} ->
37+κ
test/golden/importless/2.5.nixnew file+10
@@ -0,0 +1,10 @@
1+{ callPackage, fetchurl, ... } @ args:
2+
3+callPackage ./generic.nix (args // rec {
4+ version = "2.5.0";
5+ # make sure you test also -A pythonPackages.protobuf
6+ src = fetchurl {
7+ url = "http://protobuf.googlecode.com/files/${version}.tar.bz2";
8+ sha256 = "0xxn9gxhvsgzz2sgmihzf6pf75clr05mqj6218camwrwajpcbgqk";
9+ };
10+})
test/golden/importless/2.5.txtnew file+6
@@ -0,0 +1,6 @@
1+∀ α β γ δ.
2+( α // {src = β; version = String;} ~ γ,
3+ α.callPackage = String -> γ -> δ,
4+ α.fetchurl = {sha256 = String; url = String;} -> β
5+) =>
6+α -> δ
test/golden/importless/2.6.1.nixnew file+36
@@ -0,0 +1,36 @@
1+{ stdenv, fetchurl, bison, m4 }:
2+
3+stdenv.mkDerivation {
4+ name = "flex-2.6.1";
5+
6+ src = fetchurl {
7+ url = "https://github.com/westes/flex/releases/download/v2.6.1/flex-2.6.1.tar.gz";
8+ sha256 = "0fy14c35yz2m1n1m4f02by3501fn0cca37zn7jp8lpp4b3kgjhrw";
9+ };
10+
11+ postPatch = ''
12+ patchShebangs tests
13+ '' + stdenv.lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
14+ substituteInPlace Makefile.in --replace "tests" " ";
15+ '';
16+
17+ buildInputs = [ bison ];
18+
19+ propagatedBuildInputs = [ m4 ];
20+
21+ preConfigure = stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
22+ "ac_cv_func_malloc_0_nonnull=yes"
23+ "ac_cv_func_realloc_0_nonnull=yes"
24+ ];
25+
26+ postConfigure = stdenv.lib.optionalString (stdenv.isDarwin || stdenv.isCygwin) ''
27+ sed -i Makefile -e 's/-no-undefined//;'
28+ '';
29+
30+ meta = with stdenv.lib; {
31+ homepage = "https://github.com/westes/flex";
32+ description = "A fast lexical analyser generator";
33+ license = licenses.bsd2;
34+ platforms = platforms.unix;
35+ };
36+}
test/golden/importless/2.6.1.txtnew file+32
@@ -0,0 +1,32 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π.
2+( α.buildPlatform = β,
3+ α.hostPlatform = β,
4+ α.isCygwin = Bool,
5+ α.isDarwin = Bool,
6+ α.lib = γ,
7+ α.mkDerivation =
8+ { buildInputs = [δ];
9+ meta =
10+ {description = String; homepage = String; license = ε; platforms = ζ;};
11+ name = String;
12+ postConfigure = η;
13+ postPatch = String;
14+ preConfigure = θ;
15+ propagatedBuildInputs = [ι];
16+ src = κ;
17+ } ->
18+ λ,
19+ γ.licenses = μ,
20+ γ.platforms = ν,
21+ μ.bsd2 = ε,
22+ ν.unix = ζ,
23+ ξ.optionalString = Bool -> String -> η,
24+ ο.optionalString = Bool -> String -> String,
25+ π.optionals = Bool -> [String] -> θ
26+) =>
27+{ bison = δ;
28+ fetchurl = {sha256 = String; url = String;} -> κ;
29+ m4 = ι;
30+ stdenv = α;
31+} ->
32+λ
test/golden/importless/2.6.13-pre.nixnew file+51
@@ -0,0 +1,51 @@
1+{ stdenv, fetchgit, mpfr, m4, binutils, emacs, zlib, which
2+, texinfo, libX11, xorgproto, libXi, gmp, readline, strace
3+, libXext, libXt, libXaw, libXmu } :
4+
5+assert stdenv ? cc ;
6+assert stdenv.cc.isGNU ;
7+assert stdenv.cc ? libc ;
8+assert stdenv.cc.libc != null ;
9+
10+stdenv.mkDerivation {
11+ pname = "gcl";
12+ version = "2.6.13pre50";
13+
14+ src = fetchgit {
15+ sha256 = "0vpxb6z5g9fjavrgx8gz8fsjvskfz64f63qibh5s00fvvndlwi88";
16+ url = "https://git.savannah.gnu.org/r/gcl.git";
17+ rev = "refs/tags/Version_2_6_13pre50";
18+ };
19+
20+ postPatch = ''
21+ sed -e 's/<= obj-date/<= (if (= 0 obj-date) 1 obj-date)/' -i lsp/make.lisp
22+ ''
23+ # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=902475
24+ + ''
25+ substituteInPlace h/elf64_i386_reloc.h \
26+ --replace 'case R_X86_64_PC32:' 'case R_X86_64_PC32: case R_X86_64_PLT32:'
27+ '';
28+
29+ sourceRoot = "gcl/gcl";
30+
31+ patches = [];
32+
33+ buildInputs = [
34+ mpfr m4 binutils emacs gmp
35+ libX11 xorgproto libXi
36+ libXext libXt libXaw libXmu
37+ zlib which texinfo readline strace
38+ ];
39+
40+ configureFlags = [
41+ "--enable-ansi"
42+ ];
43+
44+ hardeningDisable = [ "pic" "bindnow" ];
45+
46+ meta = {
47+ description = "GNU Common Lisp compiler working via GCC";
48+ maintainers = [ stdenv.lib.maintainers.raskin ];
49+ platforms = stdenv.lib.platforms.linux;
50+ };
51+}
test/golden/importless/2.6.13-pre.txtnew file+45
@@ -0,0 +1,45 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π.
2+( β.cc = γ,
3+ δ.?libc = ε,
4+ β.lib = ζ,
5+ β.mkDerivation =
6+ { buildInputs = [η];
7+ configureFlags = [String];
8+ hardeningDisable = [String];
9+ meta = {description = String; maintainers = [θ]; platforms = ι;};
10+ patches = ∀ α. [α];
11+ pname = String;
12+ postPatch = String;
13+ sourceRoot = String;
14+ src = κ;
15+ version = String;
16+ } ->
17+ λ,
18+ μ.isGNU = Bool,
19+ ν.libc = Null,
20+ ζ.maintainers = ξ,
21+ ξ.raskin = θ,
22+ ο.platforms = π,
23+ π.linux = ι
24+) =>
25+{ binutils = η;
26+ emacs = η;
27+ fetchgit = {rev = String; sha256 = String; url = String;} -> κ;
28+ gmp = η;
29+ libX11 = η;
30+ libXaw = η;
31+ libXext = η;
32+ libXi = η;
33+ libXmu = η;
34+ libXt = η;
35+ m4 = η;
36+ mpfr = η;
37+ readline = η;
38+ stdenv = β;
39+ strace = η;
40+ texinfo = η;
41+ which = η;
42+ xorgproto = η;
43+ zlib = η;
44+} ->
45+λ
test/golden/importless/2.6.2.nixnew file+80
@@ -0,0 +1,80 @@
1+{ stdenv, fetchurl, unzip }:
2+
3+let
4+ version = "2.6.2";
5+ SHLIB_EXT = stdenv.hostPlatform.extensions.sharedLibrary;
6+in stdenv.mkDerivation {
7+ pname = "tinyxml";
8+ inherit version;
9+
10+ src = fetchurl {
11+ url = "mirror://sourceforge/project/tinyxml/tinyxml/${version}/tinyxml_2_6_2.zip";
12+ sha256 = "04nmw6im2d1xp12yir8va93xns5iz816pwi25n9cql3g3i8bjsxc";
13+ };
14+
15+ patches = [
16+ # add pkgconfig file
17+ ./2.6.2-add-pkgconfig.patch
18+
19+ # https://sourceforge.net/tracker/index.php?func=detail&aid=3031828&group_id=13559&atid=313559
20+ ./2.6.2-entity.patch
21+
22+ # Use CC, CXX, and LD from environment
23+ ./2.6.2-cxx.patch
24+ ];
25+
26+ preConfigure = "export LD=${stdenv.cc.targetPrefix}c++";
27+
28+ hardeningDisable = [ "format" ];
29+
30+ NIX_CFLAGS_COMPILE =
31+ stdenv.lib.optionalString stdenv.isDarwin "-mmacosx-version-min=10.9";
32+
33+ nativeBuildInputs = [ unzip ];
34+ buildPhase = ''
35+ # use STL (xbmc requires it)
36+ sed '1i#define TIXML_USE_STL 1' -i tinyxml.h
37+ sed '1i#define TIXML_USE_STL 1' -i xmltest.cpp
38+
39+ # build xmltest
40+ make
41+
42+ # build the lib as a shared library
43+ ''${CXX} -Wall -O2 -shared -fpic tinyxml.cpp \
44+ tinyxmlerror.cpp tinyxmlparser.cpp \
45+ tinystr.cpp -o libtinyxml${SHLIB_EXT}
46+ '';
47+
48+ doCheck = true;
49+ checkPhase = ''
50+ ./xmltest
51+ result=$?
52+ if [[ $result != 0 ]] ; then
53+ exit $result
54+ fi
55+ '';
56+
57+ installPhase = ''
58+ mkdir -pv $out/include/
59+ mkdir -pv $out/lib/pkgconfig/
60+ mkdir -pv $out/share/doc/tinyxml/
61+
62+ cp -v libtinyxml${SHLIB_EXT} $out/lib/
63+ cp -v *.h $out/include/
64+
65+ substituteInPlace tinyxml.pc --replace "@out@" "$out"
66+ substituteInPlace tinyxml.pc --replace "@version@" "${version}"
67+ cp -v tinyxml.pc $out/lib/pkgconfig/
68+
69+ cp -v docs/* $out/share/doc/tinyxml/
70+ '' + stdenv.lib.optionalString stdenv.isDarwin ''
71+ install_name_tool -id $out/lib/libtinyxml.dylib $out/lib/libtinyxml.dylib
72+ '';
73+
74+ meta = {
75+ description = "Simple, small, C++ XML parser that can be easily integrating into other programs";
76+ homepage = "http://www.grinninglizard.com/tinyxml/index.html";
77+ license = stdenv.lib.licenses.free;
78+ platforms = stdenv.lib.platforms.unix;
79+ };
80+}
test/golden/importless/2.6.2.txtnew file+31
@@ -0,0 +1,31 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ.
2+( α.hostPlatform = β,
3+ α.isDarwin = γ,
4+ α.lib = δ,
5+ α.mkDerivation =
6+ { NIX_CFLAGS_COMPILE = ε;
7+ buildPhase = String;
8+ checkPhase = String;
9+ doCheck = Bool;
10+ hardeningDisable = [String];
11+ installPhase = String;
12+ meta =
13+ {description = String; homepage = String; license = ζ; platforms = η;};
14+ nativeBuildInputs = [θ];
15+ patches = [String];
16+ pname = String;
17+ preConfigure = String;
18+ src = ι;
19+ version = String;
20+ } ->
21+ κ,
22+ β.extensions = λ,
23+ λ.sharedLibrary = μ,
24+ δ.optionalString = γ -> String -> ε,
25+ ν.optionalString = ξ -> String -> String,
26+ ο.licenses = π,
27+ π.free = ζ,
28+ ρ.platforms = σ,
29+ σ.unix = η
30+) =>
31+{fetchurl = {sha256 = String; url = String;} -> ι; stdenv = α; unzip = θ;} -> κ
test/golden/importless/2.64.nixnew file+51
@@ -0,0 +1,51 @@
1+{ stdenv, fetchurl, m4, perl }:
2+
3+stdenv.mkDerivation rec {
4+ name = "autoconf-2.64";
5+
6+ src = fetchurl {
7+ url = "mirror://gnu/autoconf/${name}.tar.xz";
8+ sha256 = "0j3jdjpf5ly39dlp0bg70h72nzqr059k0x8iqxvaxf106chpgn9j";
9+ };
10+
11+ buildInputs = [ m4 perl ];
12+
13+ # Work around a known issue in Cygwin. See
14+ # http://thread.gmane.org/gmane.comp.sysutils.autoconf.bugs/6822 for
15+ # details.
16+ # There are many test failures on `i386-pc-solaris2.11'.
17+ #doCheck = ((!stdenv.isCygwin) && (!stdenv.isSunOS));
18+ doCheck = false;
19+
20+ # Don't fixup "#! /bin/sh" in Autoconf, otherwise it will use the
21+ # "fixed" path in generated files!
22+ dontPatchShebangs = true;
23+
24+ enableParallelBuilding = true;
25+
26+ # Make the Autotest test suite run in parallel.
27+ preCheck =''
28+ export TESTSUITEFLAGS="-j$NIX_BUILD_CORES"
29+ '';
30+
31+ doInstallCheck = false; # fails
32+
33+ meta = {
34+ homepage = "https://www.gnu.org/software/autoconf/";
35+ description = "Part of the GNU Build System";
36+
37+ longDescription = ''
38+ GNU Autoconf is an extensible package of M4 macros that produce
39+ shell scripts to automatically configure software source code
40+ packages. These scripts can adapt the packages to many kinds of
41+ UNIX-like systems without manual user intervention. Autoconf
42+ creates a configuration script for a package from a template
43+ file that lists the operating system features that the package
44+ can use, in the form of M4 macro calls.
45+ '';
46+
47+ license = stdenv.lib.licenses.gpl2Plus;
48+
49+ platforms = stdenv.lib.platforms.all;
50+ };
51+}
test/golden/importless/2.64.txtnew file+31
@@ -0,0 +1,31 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ doCheck = Bool;
6+ doInstallCheck = Bool;
7+ dontPatchShebangs = Bool;
8+ enableParallelBuilding = Bool;
9+ meta =
10+ { description = String;
11+ homepage = String;
12+ license = δ;
13+ longDescription = String;
14+ platforms = ε;
15+ };
16+ name = String;
17+ preCheck = String;
18+ src = ζ;
19+ } ->
20+ η,
21+ β.licenses = θ,
22+ θ.gpl2Plus = δ,
23+ ι.platforms = κ,
24+ κ.all = ε
25+) =>
26+{ fetchurl = {sha256 = String; url = String;} -> ζ;
27+ m4 = γ;
28+ perl = γ;
29+ stdenv = α;
30+} ->
31+η
test/golden/importless/2.7-html.nixnew file+18
@@ -0,0 +1,18 @@
1+# This file was generated and will be overwritten by ./generate.sh
2+
3+{ stdenv, fetchurl, lib }:
4+
5+stdenv.mkDerivation {
6+ name = "python27-docs-html-2.7.16";
7+ src = fetchurl {
8+ url = "http://docs.python.org/ftp/python/doc/2.7.16/python-2.7.16-docs-html.tar.bz2";
9+ sha256 = "1razs1grzhai65ihaiyph8kz6ncjkgp1gsn3c8v7kanf13lqim02";
10+ };
11+ installPhase = ''
12+ mkdir -p $out/share/doc/python27
13+ cp -R ./ $out/share/doc/python27/html
14+ '';
15+ meta = {
16+ maintainers = [ ];
17+ };
18+}
test/golden/importless/2.7-html.txtnew file+10
@@ -0,0 +1,10 @@
1+∀ β γ δ ε.
2+( β.mkDerivation =
3+ { installPhase = String;
4+ meta = {maintainers = ∀ α. [α];};
5+ name = String;
6+ src = γ;
7+ } ->
8+ δ
9+) =>
10+{fetchurl = {sha256 = String; url = String;} -> γ; lib = ε; stdenv = β;} -> δ
test/golden/importless/2.7-pdf-a4.nixnew file+18
@@ -0,0 +1,18 @@
1+# This file was generated and will be overwritten by ./generate.sh
2+
3+{ stdenv, fetchurl, lib }:
4+
5+stdenv.mkDerivation {
6+ name = "python27-docs-pdf-a4-2.7.16";
7+ src = fetchurl {
8+ url = "http://docs.python.org/ftp/python/doc/2.7.16/python-2.7.16-docs-pdf-a4.tar.bz2";
9+ sha256 = "14ml1ynrlbhg43737bdsb8k5y39wsffqj4iwhylhb8n8l5dplfdq";
10+ };
11+ installPhase = ''
12+ mkdir -p $out/share/doc/python27
13+ cp -R ./ $out/share/doc/python27/pdf-a4
14+ '';
15+ meta = {
16+ maintainers = [ ];
17+ };
18+}
test/golden/importless/2.7-pdf-a4.txtnew file+10
@@ -0,0 +1,10 @@
1+∀ β γ δ ε.
2+( β.mkDerivation =
3+ { installPhase = String;
4+ meta = {maintainers = ∀ α. [α];};
5+ name = String;
6+ src = γ;
7+ } ->
8+ δ
9+) =>
10+{fetchurl = {sha256 = String; url = String;} -> γ; lib = ε; stdenv = β;} -> δ
test/golden/importless/2.7-pdf-letter.nixnew file+18
@@ -0,0 +1,18 @@
1+# This file was generated and will be overwritten by ./generate.sh
2+
3+{ stdenv, fetchurl, lib }:
4+
5+stdenv.mkDerivation {
6+ name = "python27-docs-pdf-letter-2.7.16";
7+ src = fetchurl {
8+ url = "http://docs.python.org/ftp/python/doc/2.7.16/python-2.7.16-docs-pdf-letter.tar.bz2";
9+ sha256 = "019i8n48m71mn31v8d85kkwyqfgcgqnqh506y4a7fcgf656bajs0";
10+ };
11+ installPhase = ''
12+ mkdir -p $out/share/doc/python27
13+ cp -R ./ $out/share/doc/python27/pdf-letter
14+ '';
15+ meta = {
16+ maintainers = [ ];
17+ };
18+}
test/golden/importless/2.7-pdf-letter.txtnew file+10
@@ -0,0 +1,10 @@
1+∀ β γ δ ε.
2+( β.mkDerivation =
3+ { installPhase = String;
4+ meta = {maintainers = ∀ α. [α];};
5+ name = String;
6+ src = γ;
7+ } ->
8+ δ
9+) =>
10+{fetchurl = {sha256 = String; url = String;} -> γ; lib = ε; stdenv = β;} -> δ
test/golden/importless/2.7-text.nixnew file+18
@@ -0,0 +1,18 @@
1+# This file was generated and will be overwritten by ./generate.sh
2+
3+{ stdenv, fetchurl, lib }:
4+
5+stdenv.mkDerivation {
6+ name = "python27-docs-text-2.7.16";
7+ src = fetchurl {
8+ url = "http://docs.python.org/ftp/python/doc/2.7.16/python-2.7.16-docs-text.tar.bz2";
9+ sha256 = "1da7swlykvc013684nywycinfz3v8dqkcmv0zj8p7l5lyi5mq03r";
10+ };
11+ installPhase = ''
12+ mkdir -p $out/share/doc/python27
13+ cp -R ./ $out/share/doc/python27/text
14+ '';
15+ meta = {
16+ maintainers = [ ];
17+ };
18+}
test/golden/importless/2.7-text.txtnew file+10
@@ -0,0 +1,10 @@
1+∀ β γ δ ε.
2+( β.mkDerivation =
3+ { installPhase = String;
4+ meta = {maintainers = ∀ α. [α];};
5+ name = String;
6+ src = γ;
7+ } ->
8+ δ
9+) =>
10+{fetchurl = {sha256 = String; url = String;} -> γ; lib = ε; stdenv = β;} -> δ
test/golden/importless/2.7.7.nixnew file+26
@@ -0,0 +1,26 @@
1+{ stdenv, fetchurl, jdk, python2 }:
2+
3+stdenv.mkDerivation {
4+ name = "antlr-2.7.7";
5+ src = fetchurl {
6+ url = "https://www.antlr2.org/download/antlr-2.7.7.tar.gz";
7+ sha256 = "1ffvcwdw73id0dk6pj2mlxjvbg0662qacx4ylayqcxgg381fnfl5";
8+ };
9+ patches = [ ./2.7.7-fixes.patch ];
10+ buildInputs = [ jdk ];
11+ nativeBuildInputs = [ python2 ];
12+
13+ meta = with stdenv.lib; {
14+ description = "Powerful parser generator";
15+ longDescription = ''
16+ ANTLR (ANother Tool for Language Recognition) is a powerful parser
17+ generator for reading, processing, executing, or translating structured
18+ text or binary files. It's widely used to build languages, tools, and
19+ frameworks. From a grammar, ANTLR generates a parser that can build and
20+ walk parse trees.
21+ '';
22+ homepage = "https://www.antlr.org/";
23+ license = licenses.bsd3;
24+ platforms = platforms.unix;
25+ };
26+}
test/golden/importless/2.7.7.txtnew file+28
@@ -0,0 +1,28 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ meta =
6+ { description = String;
7+ homepage = String;
8+ license = δ;
9+ longDescription = String;
10+ platforms = ε;
11+ };
12+ name = String;
13+ nativeBuildInputs = [ζ];
14+ patches = [String];
15+ src = η;
16+ } ->
17+ θ,
18+ β.licenses = ι,
19+ β.platforms = κ,
20+ ι.bsd3 = δ,
21+ κ.unix = ε
22+) =>
23+{ fetchurl = {sha256 = String; url = String;} -> η;
24+ jdk = γ;
25+ python2 = ζ;
26+ stdenv = α;
27+} ->
28+θ
test/golden/importless/2.7.nixnew file+31
@@ -0,0 +1,31 @@
1+{ lib
2+, buildPythonPackage
3+, fetchPypi
4+, nose
5+, six
6+, stdenv
7+}:
8+
9+
10+buildPythonPackage rec {
11+ pname = "more-itertools";
12+ version = "5.0.0";
13+
14+ src = fetchPypi {
15+ inherit pname version;
16+ sha256 = "38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4";
17+ };
18+
19+ checkInputs = [ nose ];
20+ propagatedBuildInputs = [ six ];
21+
22+ # iterable = range(10 ** 10) # Is efficiently reversible
23+ # OverflowError: Python int too large to convert to C long
24+ doCheck = !stdenv.hostPlatform.is32bit;
25+
26+ meta = {
27+ homepage = "https://more-itertools.readthedocs.org";
28+ description = "Expansion of the itertools module";
29+ license = lib.licenses.mit;
30+ };
31+}
test/golden/importless/2.8.nixnew file+7
@@ -0,0 +1,7 @@
1+{ callPackage, ... } @ args:
2+
3+callPackage ./generic.nix (rec {
4+ version = "${branch}.17";
5+ branch = "2.8";
6+ sha256 = "05bnhvs2f82aq95z1wd3wr42sljdfq4kiyzqwhpji983mndx14vl";
7+} // args)
test/golden/importless/2.8.txtnew file+5
@@ -0,0 +1,5 @@
1+∀ α β γ.
2+( {branch = String; sha256 = String; version = String;} // α ~ β,
3+ α.callPackage = String -> β -> γ
4+) =>
5+α -> γ
test/golden/importless/2.9.nixnew file+74
@@ -0,0 +1,74 @@
1+{ stdenv
2+, buildPythonPackage
3+, fetchPypi
4+, fetchpatch
5+, isPy27
6+, ipaddress
7+, openssl
8+, cryptography_vectors
9+, darwin
10+, packaging
11+, six
12+, pythonOlder
13+, isPyPy
14+, cffi
15+, pytest
16+, pretend
17+, iso8601
18+, pytz
19+, hypothesis
20+, enum34
21+}:
22+
23+buildPythonPackage rec {
24+ pname = "cryptography";
25+ version = "2.9.2"; # Also update the hash in vectors.nix
26+
27+ src = fetchPypi {
28+ inherit pname version;
29+ sha256 = "0af25w5mkd6vwns3r6ai1w5ip9xp0ms9s261zzssbpadzdr05hx0";
30+ };
31+
32+ outputs = [ "out" "dev" ];
33+
34+ buildInputs = [ openssl ]
35+ ++ stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
36+ propagatedBuildInputs = [
37+ packaging
38+ six
39+ ] ++ stdenv.lib.optional (!isPyPy) cffi
40+ ++ stdenv.lib.optionals isPy27 [ ipaddress enum34 ];
41+
42+ checkInputs = [
43+ cryptography_vectors
44+ hypothesis
45+ iso8601
46+ pretend
47+ pytest
48+ pytz
49+ ];
50+
51+ checkPhase = ''
52+ py.test --disable-pytest-warnings tests
53+ '';
54+
55+ # IOKit's dependencies are inconsistent between OSX versions, so this is the best we
56+ # can do until nix 1.11's release
57+ __impureHostDeps = [ "/usr/lib" ];
58+
59+ meta = with stdenv.lib; {
60+ description = "A package which provides cryptographic recipes and primitives";
61+ longDescription = ''
62+ Cryptography includes both high level recipes and low level interfaces to
63+ common cryptographic algorithms such as symmetric ciphers, message
64+ digests, and key derivation functions.
65+ Our goal is for it to be your "cryptographic standard library". It
66+ supports Python 2.7, Python 3.5+, and PyPy 5.4+.
67+ '';
68+ homepage = "https://github.com/pyca/cryptography";
69+ changelog = "https://cryptography.io/en/latest/changelog/#v"
70+ + replaceStrings [ "." ] [ "-" ] version;
71+ license = with licenses; [ asl20 bsd3 psfl ];
72+ maintainers = with maintainers; [ primeos ];
73+ };
74+}
test/golden/importless/2.90.nixnew file+41
@@ -0,0 +1,41 @@
1+{ stdenv, fetchurl, intltool, pkgconfig, glib, gtk3, ncurses, gobject-introspection }:
2+
3+stdenv.mkDerivation rec {
4+ versionMajor = "0.36";
5+ versionMinor = "3";
6+ moduleName = "vte";
7+
8+ name = "${moduleName}-${versionMajor}.${versionMinor}";
9+
10+ src = fetchurl {
11+ url = "mirror://gnome/sources/${moduleName}/${versionMajor}/${name}.tar.xz";
12+ sha256 = "54e5b07be3c0f7b158302f54ee79d4de1cb002f4259b6642b79b1e0e314a959c";
13+ };
14+
15+ nativeBuildInputs = [ pkgconfig ];
16+ buildInputs = [ gobject-introspection intltool glib gtk3 ncurses ];
17+
18+ configureFlags = [ "--enable-introspection" ];
19+
20+ enableParallelBuilding = true;
21+
22+ postInstall = ''
23+ substituteInPlace $out/lib/libvte2_90.la --replace "-lncurses" "-L${ncurses.out}/lib -lncurses"
24+ '';
25+
26+ meta = with stdenv.lib; {
27+ homepage = "https://www.gnome.org/";
28+ description = "A library implementing a terminal emulator widget for GTK";
29+ longDescription = ''
30+ VTE is a library (libvte) implementing a terminal emulator widget for
31+ GTK, and a minimal sample application (vte) using that. Vte is
32+ mainly used in gnome-terminal, but can also be used to embed a
33+ console/terminal in games, editors, IDEs, etc. VTE supports Unicode and
34+ character set conversion, as well as emulating any terminal known to
35+ the system's terminfo database.
36+ '';
37+ license = licenses.lgpl2;
38+ maintainers = with maintainers; [ astsmtl antono lethalman ];
39+ platforms = platforms.linux;
40+ };
41+}
test/golden/importless/2.90.txtnew file+42
@@ -0,0 +1,42 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ configureFlags = [String];
6+ enableParallelBuilding = Bool;
7+ meta =
8+ { description = String;
9+ homepage = String;
10+ license = δ;
11+ longDescription = String;
12+ maintainers = [ε];
13+ platforms = ζ;
14+ };
15+ moduleName = String;
16+ name = String;
17+ nativeBuildInputs = [η];
18+ postInstall = String;
19+ src = θ;
20+ versionMajor = String;
21+ versionMinor = String;
22+ } ->
23+ ι,
24+ β.antono = ε,
25+ β.astsmtl = ε,
26+ β.lethalman = ε,
27+ β.licenses = κ,
28+ β.maintainers = λ,
29+ β.platforms = μ,
30+ κ.lgpl2 = δ,
31+ μ.linux = ζ
32+) =>
33+{ fetchurl = {sha256 = String; url = String;} -> θ;
34+ glib = γ;
35+ gobject-introspection = γ;
36+ gtk3 = γ;
37+ intltool = γ;
38+ ncurses = γ;
39+ pkgconfig = η;
40+ stdenv = α;
41+} ->
42+ι
test/golden/importless/2.nixnew file+35
@@ -0,0 +1,35 @@
1+{ stdenv, fetchzip, libpng, zlib, zopfli }:
2+
3+stdenv.mkDerivation rec {
4+ pname = "apngasm";
5+ version = "2.91";
6+
7+ src = fetchzip {
8+ url = "mirror://sourceforge/${pname}/${pname}-${version}-src.zip";
9+ stripRoot = false;
10+ sha256 = "0qhljqql159xkn1l83vz0q8wvzr7rjz4jnhiy0zn36pgvacg0zn1";
11+ };
12+
13+ buildInputs = [ libpng zlib zopfli ];
14+
15+ postPatch = ''
16+ rm -rf libpng zlib zopfli
17+ '';
18+
19+ NIX_CFLAGS_LINK = "-lzopfli";
20+
21+ installPhase = ''
22+ install -Dt $out/bin apngasm
23+ '';
24+
25+ enableParallelBuilding = true;
26+
27+ meta = with stdenv.lib; {
28+ description = "Create highly optimized Animated PNG files from PNG/TGA images";
29+ homepage = "http://apngasm.sourceforge.net/";
30+ license = licenses.zlib;
31+ maintainers = with maintainers; [ orivej ];
32+ platforms = platforms.linux;
33+ };
34+
35+}
test/golden/importless/2.txtnew file+34
@@ -0,0 +1,34 @@
1+∀ α β γ δ ε ζ η θ ι κ λ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { NIX_CFLAGS_LINK = String;
5+ buildInputs = [γ];
6+ enableParallelBuilding = Bool;
7+ installPhase = String;
8+ meta =
9+ { description = String;
10+ homepage = String;
11+ license = δ;
12+ maintainers = [ε];
13+ platforms = ζ;
14+ };
15+ pname = String;
16+ postPatch = String;
17+ src = η;
18+ version = String;
19+ } ->
20+ θ,
21+ β.licenses = ι,
22+ β.maintainers = κ,
23+ β.orivej = ε,
24+ β.platforms = λ,
25+ ι.zlib = δ,
26+ λ.linux = ζ
27+) =>
28+{ fetchzip = {sha256 = String; stripRoot = Bool; url = String;} -> η;
29+ libpng = γ;
30+ stdenv = α;
31+ zlib = γ;
32+ zopfli = γ;
33+} ->
34+θ
test/golden/importless/2.x.nixnew file+46
@@ -0,0 +1,46 @@
1+{ stdenv, fetchFromGitHub, python3 }:
2+
3+python3.pkgs.buildPythonApplication rec {
4+ pname = "Radicale";
5+ version = "2.1.12";
6+
7+ # No tests in PyPI tarball
8+ src = fetchFromGitHub {
9+ owner = "Kozea";
10+ repo = "Radicale";
11+ rev = version;
12+ sha256 = "14f9ql0fiwapaa4xaslwgk1ah9fzxxan2p1p2rxb4a5iqph1z0cl";
13+ };
14+
15+ # We only want functional tests
16+ postPatch = ''
17+ sed -i "s/pytest-cov\|pytest-flake8\|pytest-isort//g" setup.py
18+ sed -i "/^addopts/d" setup.cfg
19+ '';
20+
21+ propagatedBuildInputs = with python3.pkgs; [
22+ vobject
23+ python-dateutil
24+ passlib
25+ setuptools
26+ ];
27+
28+ checkInputs = with python3.pkgs; [
29+ pytestrunner
30+ pytest
31+ ];
32+
33+ meta = with stdenv.lib; {
34+ homepage = "https://www.radicale.org/2.x.nix";
35+ description = "CalDAV CardDAV server";
36+ longDescription = ''
37+ The Radicale Project is a complete CalDAV (calendar) and CardDAV
38+ (contact) server solution. Calendars and address books are available for
39+ both local and remote access, possibly limited through authentication
40+ policies. They can be viewed and edited by calendar and contact clients
41+ on mobile phones or computers.
42+ '';
43+ license = licenses.gpl3Plus;
44+ maintainers = with maintainers; [ edwtjo pSub aneeshusa infinisil ];
45+ };
46+}
test/golden/importless/2.x.txtnew file+39
@@ -0,0 +1,39 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ.
2+( α.lib = β,
3+ γ.pkgs = δ,
4+ β.aneeshusa = ε,
5+ β.edwtjo = ε,
6+ β.infinisil = ε,
7+ β.licenses = ζ,
8+ β.maintainers = η,
9+ β.pSub = ε,
10+ ζ.gpl3Plus = θ,
11+ δ.buildPythonApplication =
12+ { checkInputs = [ι];
13+ meta =
14+ { description = String;
15+ homepage = String;
16+ license = θ;
17+ longDescription = String;
18+ maintainers = [ε];
19+ };
20+ pname = String;
21+ postPatch = String;
22+ propagatedBuildInputs = [κ];
23+ src = λ;
24+ version = String;
25+ } ->
26+ μ,
27+ ν.passlib = κ,
28+ ν.python-dateutil = κ,
29+ ν.setuptools = κ,
30+ ν.vobject = κ,
31+ ξ.pytest = ι,
32+ ξ.pytestrunner = ι
33+) =>
34+{ fetchFromGitHub =
35+ {owner = String; repo = String; rev = String; sha256 = String;} -> λ;
36+ python3 = γ;
37+ stdenv = α;
38+} ->
39+μ
test/golden/importless/2.x.x.nixnew file+58
@@ -0,0 +1,58 @@
1+{ fetchurl, python, cairomm, sparsehash, pycairo, autoreconfHook
2+, pkg-config, boost, expat, scipy, cgal, gmp, mpfr
3+, gobject-introspection, pygobject3, gtk3, matplotlib, ncurses
4+, buildPythonPackage
5+, fetchpatch
6+, pythonAtLeast
7+, lib
8+}:
9+
10+buildPythonPackage rec {
11+ pname = "graph-tool";
12+ format = "other";
13+ version = "2.31";
14+
15+ src = fetchurl {
16+ url = "https://downloads.skewed.de/graph-tool/graph-tool-${version}.tar.bz2";
17+ sha256 = "0z6n9xkb5yz7z6rlwl6z9gq3ac5vdsby90nhvvvskadsx2pagd7v";
18+ };
19+
20+ configureFlags = [
21+ "--with-python-module-path=$(out)/${python.sitePackages}"
22+ "--with-boost-libdir=${boost}/lib"
23+ "--with-expat=${expat}"
24+ "--with-cgal=${cgal}"
25+ "--enable-openmp"
26+ ];
27+
28+ nativeBuildInputs = [ autoreconfHook pkg-config ];
29+ buildInputs = [ ncurses ];
30+
31+ propagatedBuildInputs = [
32+ boost
33+ cgal
34+ expat
35+ gmp
36+ mpfr
37+ python
38+ scipy
39+ # optional
40+ sparsehash
41+ # drawing
42+ cairomm
43+ gobject-introspection
44+ gtk3
45+ pycairo
46+ matplotlib
47+ pygobject3
48+ ];
49+
50+ enableParallelBuilding = false;
51+
52+ meta = with lib; {
53+ description = "Python module for manipulation and statistical analysis of graphs";
54+ homepage = "https://graph-tool.skewed.de/";
55+ license = licenses.gpl3;
56+ maintainers = [ maintainers.joelmo ];
57+ };
58+}
test/golden/importless/2.x.x.txtnew file+47
@@ -0,0 +1,47 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ.
2+( α.licenses = β,
3+ α.maintainers = γ,
4+ β.gpl3 = δ,
5+ γ.joelmo = ε
6+) =>
7+{ autoreconfHook = ζ;
8+ boost = η;
9+ buildPythonPackage =
10+ { buildInputs = [θ];
11+ configureFlags = [String];
12+ enableParallelBuilding = Bool;
13+ format = String;
14+ meta =
15+ { description = String;
16+ homepage = String;
17+ license = δ;
18+ maintainers = [ε];
19+ };
20+ nativeBuildInputs = [ζ];
21+ pname = String;
22+ propagatedBuildInputs = [η];
23+ src = ι;
24+ version = String;
25+ } ->
26+ κ;
27+ cairomm = η;
28+ cgal = η;
29+ expat = η;
30+ fetchpatch = λ;
31+ fetchurl = {sha256 = String; url = String;} -> ι;
32+ gmp = η;
33+ gobject-introspection = η;
34+ gtk3 = η;
35+ lib = α;
36+ matplotlib = η;
37+ mpfr = η;
38+ ncurses = θ;
39+ pkg-config = ζ;
40+ pycairo = η;
41+ pygobject3 = η;
42+ python = η;
43+ pythonAtLeast = μ;
44+ scipy = η;
45+ sparsehash = η;
46+} ->
47+κ
test/golden/importless/20160331.nixnew file+22
@@ -0,0 +1,22 @@
1+{stdenv, fetchFromGitHub, autoconf, automake, libtool, gettext, autoreconfHook
2+, gmp, mpfr
3+}:
4+stdenv.mkDerivation rec {
5+ pname = "fplll";
6+ version = "20160331";
7+ src = fetchFromGitHub {
8+ owner = pname;
9+ repo = pname;
10+ rev = "11dea26c2f9396ffb7a7191aa371343f1f74c5c3";
11+ sha256 = "1clxch9hbr30w6s84m2mprxv58adhg5qw6sa2p3jr1cy4r7r59ib";
12+ };
13+ nativeBuildInputs = [autoconf automake libtool gettext autoreconfHook];
14+ buildInputs = [gmp mpfr];
15+ meta = {
16+ inherit version;
17+ description = ''Lattice algorithms using floating-point arithmetic'';
18+ license = stdenv.lib.licenses.lgpl21Plus;
19+ maintainers = [stdenv.lib.maintainers.raskin];
20+ platforms = stdenv.lib.platforms.linux;
21+ };
22+}
test/golden/importless/20160331.txtnew file+36
@@ -0,0 +1,36 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ meta =
6+ { description = String;
7+ license = δ;
8+ maintainers = [ε];
9+ platforms = ζ;
10+ version = String;
11+ };
12+ nativeBuildInputs = [η];
13+ pname = String;
14+ src = θ;
15+ version = String;
16+ } ->
17+ ι,
18+ β.licenses = κ,
19+ κ.lgpl21Plus = δ,
20+ λ.maintainers = μ,
21+ μ.raskin = ε,
22+ ν.platforms = ξ,
23+ ξ.linux = ζ
24+) =>
25+{ autoconf = η;
26+ automake = η;
27+ autoreconfHook = η;
28+ fetchFromGitHub =
29+ {owner = String; repo = String; rev = String; sha256 = String;} -> θ;
30+ gettext = η;
31+ gmp = γ;
32+ libtool = η;
33+ mpfr = γ;
34+ stdenv = α;
35+} ->
36+ι
test/golden/importless/2018.nixnew file+21
@@ -0,0 +1,21 @@
1+{ stdenv
2+, buildPythonPackage
3+, fetchPypi
4+}:
5+
6+buildPythonPackage rec {
7+ pname = "html2text";
8+ version = "2018.1.9";
9+
10+ src = fetchPypi {
11+ inherit pname version;
12+ sha256 = "627514fb30e7566b37be6900df26c2c78a030cc9e6211bda604d8181233bcdd4";
13+ };
14+
15+ meta = with stdenv.lib; {
16+ description = "Turn HTML into equivalent Markdown-structured text";
17+ homepage = "https://github.com/Alir3z4/html2text/";
18+ license = licenses.gpl3;
19+ };
20+
21+}
test/golden/importless/25.nixnew file+62
@@ -0,0 +1,62 @@
1+{deployAndroidPackage, lib, package, autoPatchelfHook, makeWrapper, os, pkgs, pkgs_i686, postInstall ? ""}:
2+
3+deployAndroidPackage {
4+ name = "androidsdk";
5+ buildInputs = [ autoPatchelfHook makeWrapper ]
6+ ++ lib.optional (os == "linux") [ pkgs.glibc pkgs.xlibs.libX11 pkgs.xlibs.libXext pkgs.xlibs.libXdamage pkgs.xlibs.libxcb pkgs.xlibs.libXfixes pkgs.xlibs.libXrender pkgs.fontconfig.lib pkgs.freetype pkgs.libGL pkgs.zlib pkgs.ncurses5 pkgs.libpulseaudio pkgs_i686.glibc pkgs_i686.xlibs.libX11 pkgs_i686.xlibs.libXrender pkgs_i686.fontconfig pkgs_i686.freetype pkgs_i686.zlib ];
7+ inherit package os;
8+
9+ patchInstructions = ''
10+ ${lib.optionalString (os == "linux") ''
11+ # Auto patch all binaries
12+ addAutoPatchelfSearchPath $PWD/lib64
13+ addAutoPatchelfSearchPath $PWD/lib64/libstdc++
14+ addAutoPatchelfSearchPath $PWD/lib64/qt/lib
15+ addAutoPatchelfSearchPath $PWD/lib
16+ addAutoPatchelfSearchPath $PWD/lib/libstdc++
17+ autoPatchelf .
18+ ''}
19+
20+ # Wrap all scripts that require JAVA_HOME
21+ for i in bin
22+ do
23+ find $i -maxdepth 1 -type f -executable | while read program
24+ do
25+ if grep -q "JAVA_HOME" $program
26+ then
27+ wrapProgram $PWD/$program --prefix PATH : ${pkgs.jdk8}/bin
28+ fi
29+ done
30+ done
31+
32+ # Wrap programs that require java
33+ for i in draw9patch jobb lint screenshot2
34+ do
35+ wrapProgram $PWD/$i \
36+ --prefix PATH : ${pkgs.jdk8}/bin
37+ done
38+
39+ # Wrap programs that require java and SWT
40+ for i in android ddms hierarchyviewer monitor monkeyrunner traceview uiautomatorviewer
41+ do
42+ wrapProgram $PWD/$i \
43+ --prefix PATH : ${pkgs.jdk8}/bin \
44+ --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ pkgs.xlibs.libX11 pkgs.xlibs.libXtst ]}
45+ done
46+
47+ ${lib.optionalString (os == "linux") ''
48+ wrapProgram $PWD/emulator \
49+ --prefix PATH : ${pkgs.file}/bin:${pkgs.glxinfo}/bin:${pkgs.pciutils}/bin \
50+ --set QT_XKB_CONFIG_ROOT ${pkgs.xkeyboard_config}/share/X11/xkb \
51+ --set QTCOMPOSE ${pkgs.xorg.libX11.out}/share/X11/locale
52+ ''}
53+
54+ # Patch all script shebangs
55+ patchShebangs .
56+
57+ cd ..
58+ ${postInstall}
59+ '';
60+
61+ meta.licenses = lib.licenses.unfree;
62+}
test/golden/importless/25.txtnew file+46
@@ -0,0 +1,46 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ.
2+( α.licenses = β,
3+ α.optional = Bool -> [γ] -> [δ],
4+ ε.fontconfig = ζ,
5+ ε.freetype = γ,
6+ ε.glibc = γ,
7+ ε.libGL = γ,
8+ ε.libpulseaudio = γ,
9+ ε.ncurses5 = γ,
10+ ε.xlibs = η,
11+ ε.zlib = γ,
12+ θ.fontconfig = γ,
13+ θ.freetype = γ,
14+ θ.glibc = γ,
15+ θ.xlibs = ι,
16+ θ.zlib = γ,
17+ β.unfree = κ,
18+ η.libX11 = γ,
19+ λ.libXext = γ,
20+ μ.libXdamage = γ,
21+ ν.libxcb = γ,
22+ ξ.libXfixes = γ,
23+ ο.libXrender = γ,
24+ ζ.lib = γ,
25+ ι.libX11 = γ,
26+ π.libXrender = γ
27+) =>
28+{ autoPatchelfHook = δ;
29+ deployAndroidPackage =
30+ { buildInputs = [δ];
31+ meta = {licenses = κ;};
32+ name = String;
33+ os = String;
34+ package = ρ;
35+ patchInstructions = String;
36+ } ->
37+ σ;
38+ lib = α;
39+ makeWrapper = δ;
40+ os = String;
41+ package = ρ;
42+ pkgs = ε;
43+ pkgs_i686 = θ;
44+ postInstall = String;
45+} ->
46+σ
test/golden/importless/26.nixnew file+40
@@ -0,0 +1,40 @@
1+{deployAndroidPackage, lib, package, autoPatchelfHook, makeWrapper, os, pkgs, pkgs_i686, postInstall ? ""}:
2+
3+deployAndroidPackage {
4+ name = "androidsdk";
5+ inherit os package;
6+ buildInputs = [ autoPatchelfHook makeWrapper ]
7+ ++ lib.optional (os == "linux") [ pkgs.glibc pkgs.xlibs.libX11 pkgs.xlibs.libXrender pkgs.xlibs.libXext pkgs.fontconfig pkgs.freetype pkgs_i686.glibc pkgs_i686.xlibs.libX11 pkgs_i686.xlibs.libXrender pkgs_i686.xlibs.libXext pkgs_i686.fontconfig.lib pkgs_i686.freetype pkgs_i686.zlib pkgs.fontconfig.lib ];
8+
9+ patchInstructions = ''
10+ ${lib.optionalString (os == "linux") ''
11+ # Auto patch all binaries
12+ autoPatchelf .
13+ ''}
14+
15+ # Wrap all scripts that require JAVA_HOME
16+ for i in bin
17+ do
18+ find $i -maxdepth 1 -type f -executable | while read program
19+ do
20+ if grep -q "JAVA_HOME" $program
21+ then
22+ wrapProgram $PWD/$program --prefix PATH : ${pkgs.jdk8}/bin
23+ fi
24+ done
25+ done
26+
27+ # Wrap monitor script
28+ wrapProgram $PWD/monitor \
29+ --prefix PATH : ${pkgs.jdk8}/bin \
30+ --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ pkgs.xlibs.libX11 pkgs.xlibs.libXtst ]}
31+
32+ # Patch all script shebangs
33+ patchShebangs .
34+
35+ cd ..
36+ ${postInstall}
37+ '';
38+
39+ meta.licenses = lib.licenses.unfree;
40+}
test/golden/importless/26.txtnew file+41
@@ -0,0 +1,41 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ.
2+( α.licenses = β,
3+ α.optional = Bool -> [γ] -> [δ],
4+ ε.fontconfig = γ,
5+ ε.freetype = γ,
6+ ε.glibc = γ,
7+ ε.xlibs = ζ,
8+ η.fontconfig = θ,
9+ η.freetype = γ,
10+ η.glibc = γ,
11+ η.xlibs = ι,
12+ η.zlib = γ,
13+ β.unfree = κ,
14+ ζ.libX11 = γ,
15+ λ.libXrender = γ,
16+ μ.libXext = γ,
17+ ν.lib = γ,
18+ ι.libX11 = γ,
19+ ξ.libXrender = γ,
20+ ο.libXext = γ,
21+ θ.lib = γ
22+) =>
23+{ autoPatchelfHook = δ;
24+ deployAndroidPackage =
25+ { buildInputs = [δ];
26+ meta = {licenses = κ;};
27+ name = String;
28+ os = String;
29+ package = π;
30+ patchInstructions = String;
31+ } ->
32+ ρ;
33+ lib = α;
34+ makeWrapper = δ;
35+ os = String;
36+ package = π;
37+ pkgs = ε;
38+ pkgs_i686 = η;
39+ postInstall = String;
40+} ->
41+ρ
test/golden/importless/2_2.nixnew file+38
@@ -0,0 +1,38 @@
1+{ stdenv, buildPythonPackage, fetchPypi, substituteAll,
2+ isPy3k,
3+ geos, gdal, pytz, sqlparse,
4+ withGdal ? false
5+}:
6+
7+buildPythonPackage rec {
8+ pname = "Django";
9+ version = "2.2.16";
10+
11+ disabled = !isPy3k;
12+
13+ src = fetchPypi {
14+ inherit pname version;
15+ sha256 = "1535g2r322cl4x52fb0dmzlbg23539j2wx6027j54p22xvjlbkv2";
16+ };
17+
18+ patches = stdenv.lib.optional withGdal
19+ (substituteAll {
20+ src = ./1.10-gis-libs.template.patch;
21+ geos = geos;
22+ gdal = gdal;
23+ extension = stdenv.hostPlatform.extensions.sharedLibrary;
24+ })
25+ ;
26+
27+ propagatedBuildInputs = [ pytz sqlparse ];
28+
29+ # too complicated to setup
30+ doCheck = false;
31+
32+ meta = with stdenv.lib; {
33+ description = "A high-level Python Web framework";
34+ homepage = "https://www.djangoproject.com/";
35+ license = licenses.bsd3;
36+ maintainers = with maintainers; [ georgewhewell lsix ];
37+ };
38+}
test/golden/importless/2_4.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "2.4.20";
5+ sha256 = "0awdpkcgvx2aq7pwxy8jyzkin6cyrrh3d576x9ldm851kis9n5ii";
6+})
test/golden/importless/2_4.txtnew file+5
@@ -0,0 +1,5 @@
1+∀ α β γ.
2+( α // {sha256 = String; version = String;} ~ β,
3+ α.callPackage = String -> β -> γ
4+) =>
5+α -> γ
test/golden/importless/2_5.nixnew file+27
@@ -0,0 +1,27 @@
1+{ lib
2+, buildPythonPackage
3+, fetchPypi
4+, docutils
5+}:
6+
7+buildPythonPackage rec {
8+ pname = "Pygments";
9+ version = "2.5.2";
10+
11+ src = fetchPypi {
12+ inherit pname version;
13+ sha256 = "98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe";
14+ };
15+
16+ propagatedBuildInputs = [ docutils ];
17+
18+ # Circular dependency with sphinx
19+ doCheck = false;
20+
21+ meta = {
22+ homepage = "https://pygments.org/";
23+ description = "A generic syntax highlighter";
24+ license = lib.licenses.bsd2;
25+ maintainers = with lib.maintainers; [ ];
26+ };
27+}
test/golden/importless/2bwm.nixnew file+37
@@ -0,0 +1,37 @@
1+{ config, lib, pkgs, ... }:
2+
3+with lib;
4+
5+let
6+
7+ cfg = config.services.xserver.windowManager."2bwm";
8+
9+in
10+
11+{
12+
13+ ###### interface
14+
15+ options = {
16+ services.xserver.windowManager."2bwm".enable = mkEnableOption "2bwm";
17+ };
18+
19+
20+ ###### implementation
21+
22+ config = mkIf cfg.enable {
23+
24+ services.xserver.windowManager.session = singleton
25+ { name = "2bwm";
26+ start =
27+ ''
28+ ${pkgs._2bwm}/bin/2bwm &
29+ waitPID=$!
30+ '';
31+ };
32+
33+ environment.systemPackages = [ pkgs._2bwm ];
34+
35+ };
36+
37+}
test/golden/importless/2bwm.txtnew file+24
@@ -0,0 +1,24 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν.
2+( α.config = β,
3+ α.lib = γ,
4+ α.pkgs = δ,
5+ β.services = ε,
6+ γ.mkEnableOption = String -> ζ,
7+ γ.mkIf =
8+ η ->
9+ { environment = {systemPackages = [θ];};
10+ services = {xserver = {windowManager = {session = ι;};};};
11+ } ->
12+ κ,
13+ γ.singleton = {name = String; start = String;} -> ι,
14+ δ._2bwm = θ,
15+ ε.xserver = λ,
16+ λ.windowManager = μ,
17+ μ.2bwm = ν,
18+ ν.enable = η
19+) =>
20+α ->
21+{ config = κ;
22+ options =
23+ {services = {xserver = {windowManager = {2bwm = {enable = ζ;};};};};};
24+}
test/golden/importless/3.0.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "3.0.17";
5+ sha256 = "0568r5xdy78pl29zby5g4m9qngf29cb9222sc1q1wisapb7zkl2p";
6+})
test/golden/importless/3.0.txtnew file+5
@@ -0,0 +1,5 @@
1+∀ α β γ.
2+( α // {sha256 = String; version = String;} ~ β,
3+ α.callPackage = String -> β -> γ
4+) =>
5+α -> γ
test/golden/importless/3.0.x.nixnew file+35
@@ -0,0 +1,35 @@
1+{stdenv, fetchurl, autoreconfHook }:
2+
3+stdenv.mkDerivation rec {
4+ name = "gperf-3.0.4";
5+
6+ src = fetchurl {
7+ url = "mirror://gnu/gperf/${name}.tar.gz";
8+ sha256 = "0gnnm8iqcl52m8iha3sxrzrl9mcyhg7lfrhhqgdn4zj00ji14wbn";
9+ };
10+
11+ nativeBuildInputs = [ autoreconfHook ];
12+ patches = [ ./gperf-ar-fix.patch ];
13+ meta = {
14+ description = "Perfect hash function generator";
15+
16+ longDescription = ''
17+ GNU gperf is a perfect hash function generator. For a given
18+ list of strings, it produces a hash function and hash table, in
19+ form of C or C++ code, for looking up a value depending on the
20+ input string. The hash function is perfect, which means that
21+ the hash table has no collisions, and the hash table lookup
22+ needs a single string comparison only.
23+
24+ GNU gperf is highly customizable. There are options for
25+ generating C or C++ code, for emitting switch statements or
26+ nested ifs instead of a hash table, and for tuning the algorithm
27+ employed by gperf.
28+ '';
29+
30+ license = stdenv.lib.licenses.gpl3Plus;
31+
32+ homepage = "https://www.gnu.org/software/gperf/";
33+ platforms = stdenv.lib.platforms.unix;
34+ };
35+}
test/golden/importless/3.0.x.txtnew file+26
@@ -0,0 +1,26 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { meta =
5+ { description = String;
6+ homepage = String;
7+ license = γ;
8+ longDescription = String;
9+ platforms = δ;
10+ };
11+ name = String;
12+ nativeBuildInputs = [ε];
13+ patches = [String];
14+ src = ζ;
15+ } ->
16+ η,
17+ β.licenses = θ,
18+ θ.gpl3Plus = γ,
19+ ι.platforms = κ,
20+ κ.unix = δ
21+) =>
22+{ autoreconfHook = ε;
23+ fetchurl = {sha256 = String; url = String;} -> ζ;
24+ stdenv = α;
25+} ->
26+η
test/golden/importless/3.08.0.nixnew file+21
@@ -0,0 +1,21 @@
1+{ stdenv, fetchurl, xlibsWrapper }:
2+
3+stdenv.mkDerivation rec {
4+ pname = "ocaml";
5+ version = "3.08.0";
6+
7+ builder = ./builder.sh;
8+ src = fetchurl {
9+ url = "http://tarballs.nixos.org/${pname}-${version}.tar.gz";
10+ sha256 = "135g5waj7djzrj0dbc8z1llasfs2iv5asq41jifhldxb4l2b97mx";
11+ };
12+ configureScript = ./configure-3.08.0;
13+ dontAddPrefix = "True";
14+ configureFlags = ["-no-tk" "-x11lib" xlibsWrapper];
15+ buildFlags = ["world" "bootstrap" "opt"];
16+ checkTarget = ["opt.opt"];
17+
18+ meta = {
19+ platforms = stdenv.lib.platforms.linux;
20+ };
21+}
test/golden/importless/3.08.0.txtnew file+23
@@ -0,0 +1,23 @@
1+∀ α β γ δ ε ζ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildFlags = [String];
5+ builder = String;
6+ checkTarget = [String];
7+ configureFlags = [String];
8+ configureScript = String;
9+ dontAddPrefix = String;
10+ meta = {platforms = γ;};
11+ pname = String;
12+ src = δ;
13+ version = String;
14+ } ->
15+ ε,
16+ β.platforms = ζ,
17+ ζ.linux = γ
18+) =>
19+{ fetchurl = {sha256 = String; url = String;} -> δ;
20+ stdenv = α;
21+ xlibsWrapper = String;
22+} ->
23+ε
test/golden/importless/3.1.nixnew file+37
@@ -0,0 +1,37 @@
1+{ stdenv, fetchurl, unzip }:
2+
3+let
4+
5+ src = fetchurl {
6+ url = "http://www.oasis-open.org/docbook/sgml/3.1/docbk31.zip";
7+ sha256 = "0f25ch7bywwhdxb1qa0hl28mgq1blqdap3rxzamm585rf4kis9i0";
8+ };
9+
10+ isoents = fetchurl {
11+ url = "http://www.oasis-open.org/cover/ISOEnts.zip";
12+ sha256 = "1clrkaqnvc1ja4lj8blr0rdlphngkcda3snm7b9jzvcn76d3br6w";
13+ };
14+
15+in
16+
17+stdenv.mkDerivation {
18+ name = "docbook-sgml-3.1";
19+
20+ dontUnpack = true;
21+
22+ nativeBuildInputs = [ unzip ];
23+
24+ installPhase =
25+ ''
26+ o=$out/sgml/dtd/docbook-3.1
27+ mkdir -p $o
28+ cd $o
29+ unzip ${src}
30+ unzip ${isoents}
31+ sed -e "s/iso-/ISO/" -e "s/.gml//" -i docbook.cat
32+ '';
33+
34+ meta = {
35+ platforms = stdenv.lib.platforms.unix;
36+ };
37+}
test/golden/importless/3.1.txtnew file+14
@@ -0,0 +1,14 @@
1+∀ α β γ δ ε ζ η.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { dontUnpack = Bool;
5+ installPhase = String;
6+ meta = {platforms = γ;};
7+ name = String;
8+ nativeBuildInputs = [δ];
9+ } ->
10+ ε,
11+ β.platforms = ζ,
12+ ζ.unix = γ
13+) =>
14+{fetchurl = {sha256 = String; url = String;} -> η; stdenv = α; unzip = δ;} -> ε
test/golden/importless/3.10.0.nixnew file+34
@@ -0,0 +1,34 @@
1+{ stdenv, fetchurl, xlibsWrapper, ncurses }:
2+
3+stdenv.mkDerivation (rec {
4+
5+ pname = "ocaml";
6+ version = "3.10.0";
7+
8+ src = fetchurl {
9+ url = "https://caml.inria.fr/pub/distrib/ocaml-3.10/${pname}-${version}.tar.bz2";
10+ sha256 = "1ihmx1civ78s7k2hfc05z1s9vbyx2qw7fg8lnbxnfd6zxkk8878d";
11+ };
12+
13+ prefixKey = "-prefix ";
14+ configureFlags = ["-no-tk" "-x11lib" xlibsWrapper];
15+ buildFlags = [ "world" "bootstrap" "world.opt" ];
16+ buildInputs = [xlibsWrapper ncurses];
17+ installTargets = "install installopt";
18+ patchPhase = ''
19+ CAT=$(type -tp cat)
20+ sed -e "s@/bin/cat@$CAT@" -i config/auto-aux/sharpbang
21+ '';
22+ postBuild = ''
23+ mkdir -p $out/include
24+ ln -sv $out/lib/ocaml/caml $out/include/caml
25+ '';
26+
27+ meta = {
28+ homepage = "http://caml.inria.fr/ocaml";
29+ license = with stdenv.lib.licenses; [ qpl lgpl2 ];
30+ description = "Most popular variant of the Caml language";
31+ platforms = stdenv.lib.platforms.linux;
32+ };
33+
34+})
test/golden/importless/3.10.0.txtnew file+33
@@ -0,0 +1,33 @@
1+∀ α β γ δ ε ζ η θ ι.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildFlags = [String];
5+ buildInputs = [String];
6+ configureFlags = [String];
7+ installTargets = String;
8+ meta =
9+ { description = String;
10+ homepage = String;
11+ license = [γ];
12+ platforms = δ;
13+ };
14+ patchPhase = String;
15+ pname = String;
16+ postBuild = String;
17+ prefixKey = String;
18+ src = ε;
19+ version = String;
20+ } ->
21+ ζ,
22+ β.licenses = η,
23+ η.lgpl2 = γ,
24+ η.qpl = γ,
25+ θ.platforms = ι,
26+ ι.linux = δ
27+) =>
28+{ fetchurl = {sha256 = String; url = String;} -> ε;
29+ ncurses = String;
30+ stdenv = α;
31+ xlibsWrapper = String;
32+} ->
33+ζ
test/golden/importless/3.10.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... }:
2+
3+callPackage ./generic-v3.nix {
4+ version = "3.10.1";
5+ sha256 = "1kbi2i1m5c7ss02ip8h0bdzvns4dgxx30a5c0iiph8g2ns02lr33";
6+}
test/golden/importless/3.10.txtnew file+2
@@ -0,0 +1,2 @@
1+∀ α β.
2+(α.callPackage = String -> {sha256 = String; version = String;} -> β) => α -> β
test/golden/importless/3.11.2.nixnew file+75
@@ -0,0 +1,75 @@
1+{ stdenv, fetchurl, ncurses, xlibsWrapper }:
2+
3+let
4+ useX11 = stdenv.isi686 || stdenv.isx86_64;
5+ useNativeCompilers = stdenv.isi686 || stdenv.isx86_64 || stdenv.isMips;
6+ inherit (stdenv.lib) optionals optionalString;
7+in
8+
9+stdenv.mkDerivation rec {
10+
11+ pname = "ocaml";
12+ version = "3.11.2";
13+
14+ src = fetchurl {
15+ url = "https://caml.inria.fr/pub/distrib/ocaml-3.11/${pname}-${version}.tar.bz2";
16+ sha256 = "86f3387a0d7e7c8be2a3c53af083a5a726e333686208d5ea0dd6bb5ac3f58143";
17+ };
18+
19+ # Needed to avoid a SIGBUS on the final executable on mips
20+ NIX_CFLAGS_COMPILE = if stdenv.isMips then "-fPIC" else "";
21+
22+ patches = optionals stdenv.isDarwin [ ./gnused-on-osx-fix.patch ] ++
23+ [ (fetchurl {
24+ name = "0007-Fix-ocamlopt-w.r.t.-binutils-2.21.patch";
25+ url = "http://caml.inria.fr/mantis/file_download.php?file_id=418&type=bug";
26+ sha256 = "612a9ac108bbfce2238aa5634123da162f0315dedb219958be705e0d92dcdd8e";
27+ })
28+ ];
29+
30+ prefixKey = "-prefix ";
31+ configureFlags = ["-no-tk"] ++ optionals useX11 [ "-x11lib" xlibsWrapper ];
32+ buildFlags = [ "world" ] ++ optionals useNativeCompilers [ "bootstrap" "world.opt" ];
33+ buildInputs = [ncurses] ++ optionals useX11 [ xlibsWrapper ];
34+ installTargets = "install" + optionalString useNativeCompilers " installopt";
35+ prePatch = ''
36+ CAT=$(type -tp cat)
37+ sed -e "s@/bin/cat@$CAT@" -i config/auto-aux/sharpbang
38+ patch -p0 < ${./mips64.patch}
39+ '';
40+ postBuild = ''
41+ mkdir -p $out/include
42+ ln -sv $out/lib/ocaml/caml $out/include/caml
43+ '';
44+
45+ meta = with stdenv.lib; {
46+ homepage = "http://caml.inria.fr/ocaml";
47+ license = with licenses; [
48+ qpl /* compiler */
49+ lgpl2 /* library */
50+ ];
51+ description = "Most popular variant of the Caml language";
52+
53+ longDescription =
54+ '' Objective Caml is the most popular variant of the Caml language.
55+ From a language standpoint, it extends the core Caml language with a
56+ fully-fledged object-oriented layer, as well as a powerful module
57+ system, all connected by a sound, polymorphic type system featuring
58+ type inference.
59+
60+ The Objective Caml system is an industrial-strength implementation
61+ of this language, featuring a high-performance native-code compiler
62+ (ocamlopt) for 9 processor architectures (IA32, PowerPC, AMD64,
63+ Alpha, Sparc, Mips, IA64, HPPA, StrongArm), as well as a bytecode
64+ compiler (ocamlc) and an interactive read-eval-print loop (ocaml)
65+ for quick development and portability. The Objective Caml
66+ distribution includes a comprehensive standard library, a replay
67+ debugger (ocamldebug), lexer (ocamllex) and parser (ocamlyacc)
68+ generators, a pre-processor pretty-printer (camlp4) and a
69+ documentation generator (ocamldoc).
70+ '';
71+
72+ platforms = with platforms; linux ++ darwin;
73+ };
74+
75+}
test/golden/importless/3.11.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "3.11.4";
5+ sha256 = "11wr0vcps8w8g2sd8qwp1yp8y873c4q32azc041xpi7zqciqwnax";
6+})
test/golden/importless/3.11.txtnew file+5
@@ -0,0 +1,5 @@
1+∀ α β γ.
2+( α // {sha256 = String; version = String;} ~ β,
3+ α.callPackage = String -> β -> γ
4+) =>
5+α -> γ
test/golden/importless/3.12.1.nixnew file+69
@@ -0,0 +1,69 @@
1+{ stdenv, fetchurl, ncurses, xlibsWrapper }:
2+
3+let
4+ useX11 = !stdenv.isAarch32 && !stdenv.isMips;
5+ useNativeCompilers = !stdenv.isMips;
6+ inherit (stdenv.lib) optionals optionalString;
7+in
8+
9+stdenv.mkDerivation rec {
10+
11+ pname = "ocaml";
12+ version = "3.12.1";
13+
14+ src = fetchurl {
15+ url = "https://caml.inria.fr/pub/distrib/ocaml-3.12/${pname}-${version}.tar.bz2";
16+ sha256 = "13cmhkh7s6srnlvhg3s9qzh3a5dbk2m9qr35jzq922sylwymdkzd";
17+ };
18+
19+ prefixKey = "-prefix ";
20+ configureFlags = ["-no-tk"] ++ optionals useX11 [ "-x11lib" xlibsWrapper ];
21+ buildFlags = [ "world" ] ++ optionals useNativeCompilers [ "bootstrap" "world.opt" ];
22+ buildInputs = [ncurses] ++ optionals useX11 [ xlibsWrapper ];
23+ installTargets = "install" + optionalString useNativeCompilers " installopt";
24+ patches = optionals stdenv.isDarwin [ ./3.12.1-darwin-fix-configure.patch ];
25+ preConfigure = ''
26+ CAT=$(type -tp cat)
27+ sed -e "s@/bin/cat@$CAT@" -i config/auto-aux/sharpbang
28+ '';
29+ postBuild = ''
30+ mkdir -p $out/include
31+ ln -sv $out/lib/ocaml/caml $out/include/caml
32+ '';
33+
34+ passthru = {
35+ nativeCompilers = useNativeCompilers;
36+ };
37+
38+ meta = with stdenv.lib; {
39+ homepage = "http://caml.inria.fr/ocaml";
40+ branch = "3.12";
41+ license = with licenses; [
42+ qpl /* compiler */
43+ lgpl2 /* library */
44+ ];
45+ description = "Most popular variant of the Caml language";
46+
47+ longDescription =
48+ ''
49+ OCaml is the most popular variant of the Caml language. From a
50+ language standpoint, it extends the core Caml language with a
51+ fully-fledged object-oriented layer, as well as a powerful module
52+ system, all connected by a sound, polymorphic type system featuring
53+ type inference.
54+
55+ The OCaml system is an industrial-strength implementation of this
56+ language, featuring a high-performance native-code compiler (ocamlopt)
57+ for 9 processor architectures (IA32, PowerPC, AMD64, Alpha, Sparc,
58+ Mips, IA64, HPPA, StrongArm), as well as a bytecode compiler (ocamlc)
59+ and an interactive read-eval-print loop (ocaml) for quick development
60+ and portability. The OCaml distribution includes a comprehensive
61+ standard library, a replay debugger (ocamldebug), lexer (ocamllex) and
62+ parser (ocamlyacc) generators, a pre-processor pretty-printer (camlp4)
63+ and a documentation generator (ocamldoc).
64+ '';
65+
66+ platforms = with platforms; linux;
67+ };
68+
69+}
test/golden/importless/3.12.1.txtnew file+42
@@ -0,0 +1,42 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.isAarch32 = Bool,
3+ α.isDarwin = Bool,
4+ α.isMips = Bool,
5+ α.lib = β,
6+ α.mkDerivation =
7+ { buildFlags = [String];
8+ buildInputs = [String];
9+ configureFlags = [String];
10+ installTargets = String;
11+ meta =
12+ { branch = String;
13+ description = String;
14+ homepage = String;
15+ license = [γ];
16+ longDescription = String;
17+ platforms = δ;
18+ };
19+ passthru = {nativeCompilers = Bool;};
20+ patches = [String];
21+ pname = String;
22+ postBuild = String;
23+ preConfigure = String;
24+ prefixKey = String;
25+ src = ε;
26+ version = String;
27+ } ->
28+ ζ,
29+ β.optionals = Bool -> [String] -> [String],
30+ η.optionalString = Bool -> String -> String,
31+ θ.lgpl2 = γ,
32+ θ.licenses = ι,
33+ θ.linux = δ,
34+ θ.platforms = κ,
35+ θ.qpl = γ
36+) =>
37+{ fetchurl = {sha256 = String; url = String;} -> ε;
38+ ncurses = String;
39+ stdenv = α;
40+ xlibsWrapper = String;
41+} ->
42+ζ
test/golden/importless/3.12.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... }:
2+
3+callPackage ./generic-v3.nix {
4+ version = "3.12.4";
5+ sha256 = "1gzvnd0g5hmx5ln39w7p4z4qphw87ksgsa1fgbpvi8d0asmwab2p";
6+}
test/golden/importless/3.12.txtnew file+2
@@ -0,0 +1,2 @@
1+∀ α β.
2+(α.callPackage = String -> {sha256 = String; version = String;} -> β) => α -> β
test/golden/importless/3.13.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... }:
2+
3+callPackage ./generic-v3.nix {
4+ version = "3.13.0";
5+ sha256 = "1nqsvi2yfr93kiwlinz8z7c68ilg1j75b2vcpzxzvripxx5h6xhd";
6+}
test/golden/importless/3.13.txtnew file+2
@@ -0,0 +1,2 @@
1+∀ α β.
2+(α.callPackage = String -> {sha256 = String; version = String;} -> β) => α -> β
test/golden/importless/3.17.nixnew file+36
@@ -0,0 +1,36 @@
1+{ lib
2+, fetchPypi
3+, buildPythonPackage
4+, numpy
5+, scipy
6+, matplotlib
7+, flask
8+, pillow
9+, psycopg2
10+}:
11+
12+buildPythonPackage rec {
13+ pname = "ase";
14+ version = "3.17.0";
15+
16+ src = fetchPypi {
17+ inherit pname version;
18+ sha256 = "1d4gxypaahby45zcpl0rffcn2z7n55dg9lcd8sv6jjsmbbf9vr4g";
19+ };
20+
21+ propagatedBuildInputs = [ numpy scipy matplotlib flask pillow psycopg2 ];
22+
23+ checkPhase = ''
24+ $out/bin/ase test
25+ '';
26+
27+ # tests just hang most likely due to something with subprocesses and cli
28+ doCheck = false;
29+
30+ meta = with lib; {
31+ description = "Atomic Simulation Environment";
32+ homepage = "https://wiki.fysik.dtu.dk/ase/";
33+ license = licenses.lgpl21Plus;
34+ maintainers = with maintainers; [ costrouc ];
35+ };
36+}
test/golden/importless/3.4.nixnew file+36
@@ -0,0 +1,36 @@
1+{ lib, buildGoModule, fetchFromGitHub }:
2+
3+buildGoModule rec {
4+ pname = "etcd";
5+ version = "3.4.13";
6+
7+ deleteVendor = true;
8+ vendorSha256 = "0jlnh4789xa2dhbyp33k9r278kc588ykggamnnfqivb27s2646bc";
9+
10+ doCheck = false;
11+
12+ src = fetchFromGitHub {
13+ owner = "etcd-io";
14+ repo = "etcd";
15+ rev = "v${version}";
16+ sha256 = "0bvky593241i60qf6793sxzsxwfl3f56cgscnva9f2jfhk157wmy";
17+ };
18+
19+ buildPhase = ''
20+ patchShebangs .
21+ ./build
22+ ./functional/build
23+ '';
24+
25+ installPhase = ''
26+ install -Dm755 bin/* bin/functional/cmd/* -t $out/bin
27+ '';
28+
29+ meta = with lib; {
30+ description = "Distributed reliable key-value store for the most critical data of a distributed system";
31+ license = licenses.asl20;
32+ homepage = "https://etcd.io/";
33+ maintainers = with maintainers; [ offline zowoq ];
34+ platforms = platforms.unix;
35+ };
36+}
test/golden/importless/3.4.txtnew file+32
@@ -0,0 +1,32 @@
1+∀ α β γ δ ε ζ η θ ι.
2+( α.licenses = β,
3+ α.maintainers = γ,
4+ α.offline = δ,
5+ α.platforms = ε,
6+ α.zowoq = δ,
7+ β.asl20 = ζ,
8+ ε.unix = η
9+) =>
10+{ buildGoModule =
11+ { buildPhase = String;
12+ deleteVendor = Bool;
13+ doCheck = Bool;
14+ installPhase = String;
15+ meta =
16+ { description = String;
17+ homepage = String;
18+ license = ζ;
19+ maintainers = [δ];
20+ platforms = η;
21+ };
22+ pname = String;
23+ src = θ;
24+ vendorSha256 = String;
25+ version = String;
26+ } ->
27+ ι;
28+ fetchFromGitHub =
29+ {owner = String; repo = String; rev = String; sha256 = String;} -> θ;
30+ lib = α;
31+} ->
32+ι
test/golden/importless/3.44.nixnew file+144
@@ -0,0 +1,144 @@
1+{ stdenv, fetchurl, nspr, perl, zlib, sqlite, fixDarwinDylibNames, buildPackages }:
2+
3+let
4+ nssPEM = fetchurl {
5+ url = "http://dev.gentoo.org/~polynomial-c/mozilla/nss-3.15.4-pem-support-20140109.patch.xz";
6+ sha256 = "10ibz6y0hknac15zr6dw4gv9nb5r5z9ym6gq18j3xqx7v7n3vpdw";
7+ };
8+ version = "3.44.4";
9+ underscoreVersion = builtins.replaceStrings ["."] ["_"] version;
10+
11+in stdenv.mkDerivation rec {
12+ pname = "nss";
13+ inherit version;
14+
15+ src = fetchurl {
16+ url = "mirror://mozilla/security/nss/releases/NSS_${underscoreVersion}_RTM/src/${pname}-${version}.tar.gz";
17+ sha256 = "7ec1a52e20fd9a23e1907eeba8f4f2ecd619dac5d20fa023ec5b4faa1843e847";
18+ };
19+
20+ depsBuildBuild = [ buildPackages.stdenv.cc ];
21+
22+ nativeBuildInputs = [ perl ];
23+
24+ buildInputs = [ zlib sqlite ]
25+ ++ stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames;
26+
27+ propagatedBuildInputs = [ nspr ];
28+
29+ prePatch = ''
30+ xz -d < ${nssPEM} | patch -p1
31+ '';
32+
33+ patches =
34+ [
35+ # Based on http://patch-tracker.debian.org/patch/series/dl/nss/2:3.15.4-1/85_security_load.patch
36+ ./85_security_load-3.44.patch
37+ ./ckpem.patch
38+ ];
39+
40+ patchFlags = [ "-p0" ];
41+
42+ postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
43+ substituteInPlace nss/coreconf/Darwin.mk --replace '@executable_path/$(notdir $@)' "$out/lib/\$(notdir \$@)"
44+ '';
45+
46+ outputs = [ "out" "dev" "tools" ];
47+
48+ preConfigure = "cd nss";
49+
50+ makeFlags = let
51+ # NSS's build systems expects aarch32 to be called arm; if we pass in armv6l/armv7l, it
52+ # fails with a linker error
53+ cpu = if stdenv.hostPlatform.isAarch32 then "arm" else stdenv.hostPlatform.parsed.cpu.name;
54+ in [
55+ "NSPR_INCLUDE_DIR=${nspr.dev}/include"
56+ "NSPR_LIB_DIR=${nspr.out}/lib"
57+ "NSDISTMODE=copy"
58+ "BUILD_OPT=1"
59+ "SOURCE_PREFIX=\$(out)"
60+ "NSS_ENABLE_ECC=1"
61+ "USE_SYSTEM_ZLIB=1"
62+ "NSS_USE_SYSTEM_SQLITE=1"
63+ "NATIVE_CC=${buildPackages.stdenv.cc}/bin/cc"
64+ ] ++ stdenv.lib.optionals (!stdenv.isDarwin) [
65+ # Pass in CPU even if we're not cross compiling, because otherwise it tries to guess with
66+ # uname, which can be wrong if e.g. we're compiling for aarch32 on aarch64
67+ "OS_TEST=${cpu}"
68+ "CPU_ARCH=${cpu}"
69+ ] ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) [
70+ "CROSS_COMPILE=1"
71+ "NSS_DISABLE_GTESTS=1" # don't want to build tests when cross-compiling
72+ ] ++ stdenv.lib.optional stdenv.is64bit "USE_64=1"
73+ ++ stdenv.lib.optional stdenv.isDarwin "CCC=clang++";
74+
75+ NIX_CFLAGS_COMPILE = "-Wno-error";
76+
77+ # TODO(@oxij): investigate this: `make -n check` works but `make
78+ # check` fails with "no rule", same for "installcheck".
79+ doCheck = false;
80+ doInstallCheck = false;
81+
82+ postInstall = ''
83+ rm -rf $out/private
84+ mv $out/public $out/include
85+ mv $out/*.OBJ/* $out/
86+ rmdir $out/*.OBJ
87+
88+ ln -s lib $out/lib64
89+
90+ # Upstream issue: https://bugzilla.mozilla.org/show_bug.cgi?id=530672
91+ # https://gitweb.gentoo.org/repo/gentoo.git/plain/dev-libs/nss/files/nss-3.32-gentoo-fixups.patch?id=af1acce6c6d2c3adb17689261dfe2c2b6771ab8a
92+ NSS_MAJOR_VERSION=`grep "NSS_VMAJOR" lib/nss/nss.h | awk '{print $3}'`
93+ NSS_MINOR_VERSION=`grep "NSS_VMINOR" lib/nss/nss.h | awk '{print $3}'`
94+ NSS_PATCH_VERSION=`grep "NSS_VPATCH" lib/nss/nss.h | awk '{print $3}'`
95+ PREFIX="$out"
96+
97+ mkdir -p $out/lib/pkgconfig
98+ sed -e "s,%prefix%,$PREFIX," \
99+ -e "s,%exec_prefix%,$PREFIX," \
100+ -e "s,%libdir%,$PREFIX/lib64," \
101+ -e "s,%includedir%,$dev/include/nss," \
102+ -e "s,%NSS_VERSION%,$NSS_MAJOR_VERSION.$NSS_MINOR_VERSION.$NSS_PATCH_VERSION,g" \
103+ -e "s,%NSPR_VERSION%,4.16,g" \
104+ pkg/pkg-config/nss.pc.in > $out/lib/pkgconfig/nss.pc
105+ chmod 0644 $out/lib/pkgconfig/nss.pc
106+
107+ sed -e "s,@prefix@,$PREFIX," \
108+ -e "s,@MOD_MAJOR_VERSION@,$NSS_MAJOR_VERSION," \
109+ -e "s,@MOD_MINOR_VERSION@,$NSS_MINOR_VERSION," \
110+ -e "s,@MOD_PATCH_VERSION@,$NSS_PATCH_VERSION," \
111+ pkg/pkg-config/nss-config.in > $out/bin/nss-config
112+ chmod 0755 $out/bin/nss-config
113+ '';
114+
115+ postFixup = let
116+ isCross = stdenv.hostPlatform != stdenv.buildPlatform;
117+ nss = if isCross then buildPackages.nss.tools else "$out";
118+ in ''
119+ for libname in freebl3 nssdbm3 softokn3
120+ do '' +
121+ (if stdenv.isDarwin
122+ then ''
123+ libfile="$out/lib/lib$libname.dylib"
124+ DYLD_LIBRARY_PATH=$out/lib:${nspr.out}/lib \
125+ '' else ''
126+ libfile="$out/lib/lib$libname.so"
127+ LD_LIBRARY_PATH=$out/lib:${nspr.out}/lib \
128+ '') + ''
129+ ${nss}/bin/shlibsign -v -i "$libfile"
130+ done
131+
132+ moveToOutput bin "$tools"
133+ moveToOutput bin/nss-config "$dev"
134+ moveToOutput lib/libcrmf.a "$dev" # needed by firefox, for example
135+ rm -f "$out"/lib/*.a
136+ '';
137+
138+ meta = with stdenv.lib; {
139+ homepage = "https://developer.mozilla.org/en-US/docs/NSS";
140+ description = "A set of libraries for development of security-enabled client and server applications";
141+ license = licenses.mpl20;
142+ platforms = platforms.all;
143+ };
144+}
test/golden/importless/3.5.nixnew file+12
@@ -0,0 +1,12 @@
1+{ callPackage, fetchFromGitHub, autoreconfHook, ... } @ args:
2+
3+callPackage ./generic.nix (args // {
4+ version = "1.0";
5+
6+ src = fetchFromGitHub {
7+ owner = "arpa2";
8+ repo = "gnutls-kdh";
9+ rev = "ff3bb36f70a746f28554641d466e124098dfcb25";
10+ sha256 = "1rr3p4r145lnprxn8hqyyzh3qkj3idsbqp08g07ndrhqnxq0k0sw";
11+ };
12+})
test/golden/importless/3.5.txtnew file+8
@@ -0,0 +1,8 @@
1+∀ α β γ δ ε.
2+( α // {src = β; version = String;} ~ γ,
3+ α.autoreconfHook = δ,
4+ α.callPackage = String -> γ -> ε,
5+ α.fetchFromGitHub =
6+ {owner = String; repo = String; rev = String; sha256 = String;} -> β
7+) =>
8+α -> ε
test/golden/importless/3.6.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... }:
2+
3+callPackage ./generic-v3.nix {
4+ version = "3.6.1.3";
5+ sha256 = "1spj0d4flx6h3phxx3sg9r00yv734hina3365avkcz9brnm089c1";
6+}
test/golden/importless/3.6.txtnew file+2
@@ -0,0 +1,2 @@
1+∀ α β.
2+(α.callPackage = String -> {sha256 = String; version = String;} -> β) => α -> β
test/golden/importless/3.7-html.nixnew file+18
@@ -0,0 +1,18 @@
1+# This file was generated and will be overwritten by ./generate.sh
2+
3+{ stdenv, fetchurl, lib }:
4+
5+stdenv.mkDerivation {
6+ name = "python37-docs-html-3.7.2";
7+ src = fetchurl {
8+ url = "http://docs.python.org/ftp/python/doc/3.7.2/python-3.7.2-docs-html.tar.bz2";
9+ sha256 = "19wbrawpdam09fmyipfy92sxwn1rl93v8jkfqsfx028qhvzf0422";
10+ };
11+ installPhase = ''
12+ mkdir -p $out/share/doc/python37
13+ cp -R ./ $out/share/doc/python37/html
14+ '';
15+ meta = {
16+ maintainers = [ ];
17+ };
18+}
test/golden/importless/3.7-html.txtnew file+10
@@ -0,0 +1,10 @@
1+∀ β γ δ ε.
2+( β.mkDerivation =
3+ { installPhase = String;
4+ meta = {maintainers = ∀ α. [α];};
5+ name = String;
6+ src = γ;
7+ } ->
8+ δ
9+) =>
10+{fetchurl = {sha256 = String; url = String;} -> γ; lib = ε; stdenv = β;} -> δ
test/golden/importless/3.7-pdf-a4.nixnew file+18
@@ -0,0 +1,18 @@
1+# This file was generated and will be overwritten by ./generate.sh
2+
3+{ stdenv, fetchurl, lib }:
4+
5+stdenv.mkDerivation {
6+ name = "python37-docs-pdf-a4-3.7.2";
7+ src = fetchurl {
8+ url = "http://docs.python.org/ftp/python/doc/3.7.2/python-3.7.2-docs-pdf-a4.tar.bz2";
9+ sha256 = "0vdx762m30hjaabn6w88awcj2qpbz0b6z59zn9wmamd35k59lfba";
10+ };
11+ installPhase = ''
12+ mkdir -p $out/share/doc/python37
13+ cp -R ./ $out/share/doc/python37/pdf-a4
14+ '';
15+ meta = {
16+ maintainers = [ ];
17+ };
18+}
test/golden/importless/3.7-pdf-a4.txtnew file+10
@@ -0,0 +1,10 @@
1+∀ β γ δ ε.
2+( β.mkDerivation =
3+ { installPhase = String;
4+ meta = {maintainers = ∀ α. [α];};
5+ name = String;
6+ src = γ;
7+ } ->
8+ δ
9+) =>
10+{fetchurl = {sha256 = String; url = String;} -> γ; lib = ε; stdenv = β;} -> δ
test/golden/importless/3.7-pdf-letter.nixnew file+18
@@ -0,0 +1,18 @@
1+# This file was generated and will be overwritten by ./generate.sh
2+
3+{ stdenv, fetchurl, lib }:
4+
5+stdenv.mkDerivation {
6+ name = "python37-docs-pdf-letter-3.7.2";
7+ src = fetchurl {
8+ url = "http://docs.python.org/ftp/python/doc/3.7.2/python-3.7.2-docs-pdf-letter.tar.bz2";
9+ sha256 = "17g57vlyvqx0k916q84q2pcx7y8myw0fda9fvg9kh0ph930c837x";
10+ };
11+ installPhase = ''
12+ mkdir -p $out/share/doc/python37
13+ cp -R ./ $out/share/doc/python37/pdf-letter
14+ '';
15+ meta = {
16+ maintainers = [ ];
17+ };
18+}
test/golden/importless/3.7-pdf-letter.txtnew file+10
@@ -0,0 +1,10 @@
1+∀ β γ δ ε.
2+( β.mkDerivation =
3+ { installPhase = String;
4+ meta = {maintainers = ∀ α. [α];};
5+ name = String;
6+ src = γ;
7+ } ->
8+ δ
9+) =>
10+{fetchurl = {sha256 = String; url = String;} -> γ; lib = ε; stdenv = β;} -> δ
test/golden/importless/3.7-text.nixnew file+18
@@ -0,0 +1,18 @@
1+# This file was generated and will be overwritten by ./generate.sh
2+
3+{ stdenv, fetchurl, lib }:
4+
5+stdenv.mkDerivation {
6+ name = "python37-docs-text-3.7.2";
7+ src = fetchurl {
8+ url = "http://docs.python.org/ftp/python/doc/3.7.2/python-3.7.2-docs-text.tar.bz2";
9+ sha256 = "0h50rlr8jclwfxa106b42q2vn2ynp219c4zsy5qz65n5m3b7y1g2";
10+ };
11+ installPhase = ''
12+ mkdir -p $out/share/doc/python37
13+ cp -R ./ $out/share/doc/python37/text
14+ '';
15+ meta = {
16+ maintainers = [ ];
17+ };
18+}
test/golden/importless/3.7-text.txtnew file+10
@@ -0,0 +1,10 @@
1+∀ β γ δ ε.
2+( β.mkDerivation =
3+ { installPhase = String;
4+ meta = {maintainers = ∀ α. [α];};
5+ name = String;
6+ src = γ;
7+ } ->
8+ δ
9+) =>
10+{fetchurl = {sha256 = String; url = String;} -> γ; lib = ε; stdenv = β;} -> δ
test/golden/importless/3.7.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... }:
2+
3+callPackage ./generic-v3.nix {
4+ version = "3.7.1";
5+ sha256 = "00zkijvj80bmhlj8290x4bc416mng2dlbzwc4bkvfmbal1fx93m2";
6+}
test/golden/importless/3.7.txtnew file+2
@@ -0,0 +1,2 @@
1+∀ α β.
2+(α.callPackage = String -> {sha256 = String; version = String;} -> β) => α -> β
test/golden/importless/3.8.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... }:
2+
3+callPackage ./generic-v3.nix {
4+ version = "3.8.0";
5+ sha256 = "0vll02a6k46k720wfh25sl4hdai0130s3ix2l1wh6j1lm9pi7bm8";
6+}
test/golden/importless/3.8.txtnew file+2
@@ -0,0 +1,2 @@
1+∀ α β.
2+(α.callPackage = String -> {sha256 = String; version = String;} -> β) => α -> β
test/golden/importless/3.9.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... }:
2+
3+callPackage ./generic-v3.nix {
4+ version = "3.9.2";
5+ sha256 = "080zxa9w1pxp5y05aiwc0c8mlqkkh98wmid4l7m99cliphsd4qnn";
6+}
test/golden/importless/3.9.txtnew file+2
@@ -0,0 +1,2 @@
1+∀ α β.
2+(α.callPackage = String -> {sha256 = String; version = String;} -> β) => α -> β
test/golden/importless/3.nixnew file+18
@@ -0,0 +1,18 @@
1+{stdenv, fetchurl, automake, autoconf, libtool, autoreconfHook, gmpxx}:
2+stdenv.mkDerivation rec {
3+ pname = "givaro";
4+ version = "3.8.0";
5+ src = fetchurl {
6+ url = "https://forge.imag.fr/frs/download.php/592/givaro-${version}.tar.gz";
7+ sha256 = "1822ksv8653a84hvcz0vxl3nk8dqz7d41ys8rplq0zjjmvb2i5yq";
8+ };
9+ nativeBuildInputs = [ autoreconfHook ];
10+ buildInputs = [autoconf automake libtool gmpxx];
11+ meta = {
12+ inherit version;
13+ description = ''A C++ library for arithmetic and algebraic computations'';
14+ license = stdenv.lib.licenses.cecill-b;
15+ maintainers = [stdenv.lib.maintainers.raskin];
16+ platforms = stdenv.lib.platforms.linux;
17+ };
18+}
test/golden/importless/3.txtnew file+33
@@ -0,0 +1,33 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ meta =
6+ { description = String;
7+ license = δ;
8+ maintainers = [ε];
9+ platforms = ζ;
10+ version = String;
11+ };
12+ nativeBuildInputs = [η];
13+ pname = String;
14+ src = θ;
15+ version = String;
16+ } ->
17+ ι,
18+ β.licenses = κ,
19+ κ.cecill-b = δ,
20+ λ.maintainers = μ,
21+ μ.raskin = ε,
22+ ν.platforms = ξ,
23+ ξ.linux = ζ
24+) =>
25+{ autoconf = γ;
26+ automake = γ;
27+ autoreconfHook = η;
28+ fetchurl = {sha256 = String; url = String;} -> θ;
29+ gmpxx = γ;
30+ libtool = γ;
31+ stdenv = α;
32+} ->
33+ι
test/golden/importless/3.x.nixnew file+38
@@ -0,0 +1,38 @@
1+{ lib, python3, fetchFromGitHub }:
2+
3+python3.pkgs.buildPythonApplication rec {
4+ pname = "radicale";
5+ version = "3.0.5";
6+
7+ # No tests in PyPI tarball
8+ src = fetchFromGitHub {
9+ owner = "Kozea";
10+ repo = "Radicale";
11+ rev = version;
12+ sha256 = "0w8qkjm7b62cr49dbis41kvv3179sfmvvzlhlc0rbqss6vmwbq4p";
13+ };
14+
15+ propagatedBuildInputs = with python3.pkgs; [
16+ defusedxml
17+ passlib
18+ vobject
19+ python-dateutil
20+ setuptools
21+ ];
22+
23+ checkInputs = with python3.pkgs; [
24+ pytestrunner
25+ pytest
26+ pytestcov
27+ pytest-flake8
28+ pytest-isort
29+ waitress
30+ ];
31+
32+ meta = with lib; {
33+ homepage = "https://www.radicale.org/3.0.html";
34+ description = "CalDAV and CardDAV server";
35+ license = licenses.gpl3Plus;
36+ maintainers = with maintainers; [ dotlambda ];
37+ };
38+}
test/golden/importless/3.x.txtnew file+38
@@ -0,0 +1,38 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν.
2+( α.dotlambda = β,
3+ α.licenses = γ,
4+ α.maintainers = δ,
5+ ε.pkgs = ζ,
6+ γ.gpl3Plus = η,
7+ ζ.buildPythonApplication =
8+ { checkInputs = [θ];
9+ meta =
10+ { description = String;
11+ homepage = String;
12+ license = η;
13+ maintainers = [β];
14+ };
15+ pname = String;
16+ propagatedBuildInputs = [ι];
17+ src = κ;
18+ version = String;
19+ } ->
20+ λ,
21+ μ.defusedxml = ι,
22+ μ.passlib = ι,
23+ μ.python-dateutil = ι,
24+ μ.setuptools = ι,
25+ μ.vobject = ι,
26+ ν.pytest = θ,
27+ ν.pytest-flake8 = θ,
28+ ν.pytest-isort = θ,
29+ ν.pytestcov = θ,
30+ ν.pytestrunner = θ,
31+ ν.waitress = θ
32+) =>
33+{ fetchFromGitHub =
34+ {owner = String; repo = String; rev = String; sha256 = String;} -> κ;
35+ lib = α;
36+ python3 = ε;
37+} ->
38+λ
test/golden/importless/38.nixnew file+71
@@ -0,0 +1,71 @@
1+{ stdenv, fetchurl, pkgconfig, gnused_422, perl, python2, zip, libffi, readline, icu, zlib, buildPackages
2+, libobjc }:
3+
4+with stdenv.lib;
5+
6+stdenv.mkDerivation rec {
7+ version = "38.8.0";
8+ pname = "spidermonkey";
9+
10+ src = fetchurl {
11+ url = "mirror://mozilla/firefox/releases/${version}esr/source/firefox-${version}esr.source.tar.bz2";
12+ sha256 = "10lrync6cxnjlnadc0j3vg8r2dq9b3wwanw8qj1h6ncxwb7asxcl";
13+ };
14+
15+ buildInputs = [ libffi readline icu zlib ]
16+ ++ stdenv.lib.optional stdenv.isDarwin libobjc;
17+ nativeBuildInputs = [ pkgconfig perl python2 zip gnused_422 ];
18+
19+ postUnpack = "sourceRoot=\${sourceRoot}/js/src";
20+
21+ preConfigure = ''
22+ export CXXFLAGS="-fpermissive"
23+ export LIBXUL_DIST=$out
24+ export PYTHON="${buildPackages.python2.interpreter}"
25+ '';
26+
27+ configureFlags = [
28+ "--enable-threadsafe"
29+ "--with-system-ffi"
30+ "--enable-posix-nspr-emulation"
31+ "--with-system-zlib"
32+ "--with-system-icu"
33+ "--enable-readline"
34+
35+ # enabling these because they're wanted by 0ad. They may or may
36+ # not be good defaults for other uses.
37+ "--enable-gcgenerational"
38+ "--enable-shared-js"
39+ ] ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
40+ # Spidermonkey seems to use different host/build terminology for cross
41+ # compilation here.
42+ "--host=${stdenv.buildPlatform.config}"
43+ "--target=${stdenv.hostPlatform.config}"
44+ ];
45+
46+ configurePlatforms = [];
47+
48+ depsBuildBuild = [ buildPackages.stdenv.cc ];
49+
50+ # This addresses some build system bug. It's quite likely to be safe
51+ # to re-enable parallel builds if the source revision changes.
52+ enableParallelBuilding = true;
53+
54+ postFixup = ''
55+ # The headers are symlinks to a directory that doesn't get put
56+ # into $out, so they end up broken. Fix that by just resolving the
57+ # symlinks.
58+ for i in $(find $out -type l); do
59+ cp --remove-destination "$(readlink "$i")" "$i";
60+ done
61+ '';
62+
63+ meta = with stdenv.lib; {
64+ description = "Mozilla's JavaScript engine written in C/C++";
65+ homepage = "https://developer.mozilla.org/en/SpiderMonkey";
66+ # TODO: MPL/GPL/LGPL tri-license.
67+
68+ maintainers = [ maintainers.abbradar ];
69+ platforms = platforms.unix;
70+ };
71+}
test/golden/importless/38.txtnew file+50
@@ -0,0 +1,50 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ.
2+( β.buildPlatform = γ,
3+ β.hostPlatform = γ,
4+ β.isDarwin = δ,
5+ β.lib = ε,
6+ β.mkDerivation =
7+ { buildInputs = [ζ];
8+ configureFlags = [String];
9+ configurePlatforms = ∀ α. [α];
10+ depsBuildBuild = [η];
11+ enableParallelBuilding = Bool;
12+ meta =
13+ { description = String;
14+ homepage = String;
15+ maintainers = [θ];
16+ platforms = ι;
17+ };
18+ nativeBuildInputs = [κ];
19+ pname = String;
20+ postFixup = String;
21+ postUnpack = String;
22+ preConfigure = String;
23+ src = λ;
24+ version = String;
25+ } ->
26+ μ,
27+ ν.stdenv = ξ,
28+ ε.maintainers = ο,
29+ ε.optionals = Bool -> [String] -> [String],
30+ ε.platforms = π,
31+ ο.abbradar = θ,
32+ π.unix = ι,
33+ ρ.optional = δ -> σ -> [ζ],
34+ ξ.cc = η
35+) =>
36+{ buildPackages = ν;
37+ fetchurl = {sha256 = String; url = String;} -> λ;
38+ gnused_422 = κ;
39+ icu = ζ;
40+ libffi = ζ;
41+ libobjc = σ;
42+ perl = κ;
43+ pkgconfig = κ;
44+ python2 = κ;
45+ readline = ζ;
46+ stdenv = β;
47+ zip = κ;
48+ zlib = ζ;
49+} ->
50+μ
test/golden/importless/3_1.nixnew file+6
@@ -0,0 +1,6 @@
1+{ callPackage, ... } @ args:
2+
3+callPackage ./. (args // {
4+ version = "3.1.8";
5+ sha256 = "0yrzhsxmjiwkhchagx8dymzhvxl3k5h40wn9wpicqjvgjb9k8523";
6+})
test/golden/importless/3_1.txtnew file+5
@@ -0,0 +1,5 @@
1+∀ α β γ.
2+( α // {sha256 = String; version = String;} ~ β,
3+ α.callPackage = String -> β -> γ
4+) =>
5+α -> γ
test/golden/importless/3dovideo.nixnew file+61
@@ -0,0 +1,61 @@
1+{ stdenv, requireFile, writeText, fetchurl, haskellPackages }:
2+
3+with stdenv.lib;
4+
5+let
6+ makeSpin = num: let
7+ padded = (optionalString (lessThan num 10) "0") + toString num;
8+ in "slides.spins.${padded} = 3DOVID:" +
9+ "addons/3dovideo/spins/ship${padded}.duk:" +
10+ "addons/3dovideo/spins/spin.aif:" +
11+ "addons/3dovideo/spins/ship${padded}.aif:89";
12+
13+ videoRMP = writeText "3dovideo.rmp" (''
14+ slides.ending = 3DOVID:addons/3dovideo/ending/victory.duk
15+ slides.intro = 3DOVID:addons/3dovideo/intro/intro.duk
16+ '' + concatMapStrings makeSpin (range 0 24));
17+
18+ helper = with haskellPackages; mkDerivation {
19+ pname = "uqm3donix";
20+ version = "0.1.0.0";
21+
22+ src = fetchurl {
23+ url = "https://github.com/aszlig/uqm3donix/archive/v0.1.0.0.tar.gz";
24+ sha256 = "0d40gpc3bqkw68varjxwgbdzxw0dvwqksijmvij5ixmlcspbjgvb";
25+ };
26+
27+ isLibrary = false;
28+ isExecutable = true;
29+
30+ buildDepends = [ base binary bytestring filepath tar ];
31+
32+ description = "Extract video files from a Star Control II 3DO image";
33+ license = stdenv.lib.licenses.bsd3;
34+ };
35+
36+in stdenv.mkDerivation {
37+ name = "uqm-3dovideo";
38+
39+ src = requireFile rec {
40+ name = "videos.tar";
41+ sha256 = "044h0cl69r0kc43vk4n0akk0prwzb7inq324h5yfqb38sd4zkds1";
42+ message = ''
43+ In order to get the intro and ending sequences from the 3DO version, you
44+ need to have the original 3DO Star Control II CD. Create an image from
45+ the CD and use uqm3donix* to extract a tarball with the videos from it.
46+ The reason for this is because the 3DO uses its own proprietary disk
47+ format.
48+
49+ Save the file as videos.tar and use "nix-prefetch-url file://\$PWD/${name}" to
50+ add it to the Nix store.
51+
52+ [*] ${helper}/bin/uqm3donix CDIMAGE ${name}
53+ '';
54+ };
55+
56+ buildCommand = ''
57+ mkdir -vp "$out"
58+ tar xf "$src" -C "$out" --strip-components=3
59+ cp "${videoRMP}" "$out/3dovideo.rmp"
60+ '';
61+}
test/golden/importless/3dovideo.txtnew file+35
@@ -0,0 +1,35 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π.
2+( α.lib = β,
3+ α.mkDerivation = {buildCommand = String; name = String; src = γ;} -> δ,
4+ β.base = ε,
5+ β.binary = ε,
6+ β.bytestring = ε,
7+ β.concatMapStrings = (ζ -> String) -> η -> String,
8+ β.filepath = ε,
9+ β.lessThan = ζ -> Number -> θ,
10+ β.mkDerivation =
11+ { buildDepends = [ε];
12+ description = String;
13+ isExecutable = Bool;
14+ isLibrary = Bool;
15+ license = ι;
16+ pname = String;
17+ src = κ;
18+ version = String;
19+ } ->
20+ λ,
21+ β.optionalString = θ -> String -> μ,
22+ β.range = Number -> Number -> η,
23+ β.tar = ε,
24+ β.toString = ζ -> μ,
25+ ν.licenses = ξ,
26+ ξ.bsd3 = ι,
27+ (String | Number) ~ μ
28+) =>
29+{ fetchurl = {sha256 = String; url = String;} -> κ;
30+ haskellPackages = ο;
31+ requireFile = {message = String; name = String; sha256 = String;} -> γ;
32+ stdenv = α;
33+ writeText = String -> String -> π;
34+} ->
35+δ
test/golden/importless/3proxy.nixnew file+426
@@ -0,0 +1,426 @@
1+{ config, lib, pkgs, ... }:
2+with lib;
3+let
4+ pkg = pkgs._3proxy;
5+ cfg = config.services._3proxy;
6+ optionalList = list: if list == [ ] then "*" else concatMapStringsSep "," toString list;
7+in {
8+ options.services._3proxy = {
9+ enable = mkEnableOption "3proxy";
10+ confFile = mkOption {
11+ type = types.path;
12+ example = "/var/lib/3proxy/3proxy.conf";
13+ description = ''
14+ Ignore all other 3proxy options and load configuration from this file.
15+ '';
16+ };
17+ usersFile = mkOption {
18+ type = types.nullOr types.path;
19+ default = null;
20+ example = "/var/lib/3proxy/3proxy.passwd";
21+ description = ''
22+ Load users and passwords from this file.
23+
24+ Example users file with plain-text passwords:
25+
26+ <literal>
27+ test1:CL:password1
28+ test2:CL:password2
29+ </literal>
30+
31+ Example users file with md5-crypted passwords:
32+
33+ <literal>
34+ test1:CR:$1$tFkisVd2$1GA8JXkRmTXdLDytM/i3a1
35+ test2:CR:$1$rkpibm5J$Aq1.9VtYAn0JrqZ8M.1ME.
36+ </literal>
37+
38+ You can generate md5-crypted passwords via https://unix4lyfe.org/crypt/
39+ Note that htpasswd tool generates incompatible md5-crypted passwords.
40+ Consult <link xlink:href="https://github.com/z3APA3A/3proxy/wiki/How-To-(incomplete)#USERS">documentation</link> for more information.
41+ '';
42+ };
43+ services = mkOption {
44+ type = types.listOf (types.submodule {
45+ options = {
46+ type = mkOption {
47+ type = types.enum [
48+ "proxy"
49+ "socks"
50+ "pop3p"
51+ "ftppr"
52+ "admin"
53+ "dnspr"
54+ "tcppm"
55+ "udppm"
56+ ];
57+ example = "proxy";
58+ description = ''
59+ Service type. The following values are valid:
60+
61+ <itemizedlist>
62+ <listitem><para>
63+ <literal>"proxy"</literal>: HTTP/HTTPS proxy (default port 3128).
64+ </para></listitem>
65+ <listitem><para>
66+ <literal>"socks"</literal>: SOCKS 4/4.5/5 proxy (default port 1080).
67+ </para></listitem>
68+ <listitem><para>
69+ <literal>"pop3p"</literal>: POP3 proxy (default port 110).
70+ </para></listitem>
71+ <listitem><para>
72+ <literal>"ftppr"</literal>: FTP proxy (default port 21).
73+ </para></listitem>
74+ <listitem><para>
75+ <literal>"admin"</literal>: Web interface (default port 80).
76+ </para></listitem>
77+ <listitem><para>
78+ <literal>"dnspr"</literal>: Caching DNS proxy (default port 53).
79+ </para></listitem>
80+ <listitem><para>
81+ <literal>"tcppm"</literal>: TCP portmapper.
82+ </para></listitem>
83+ <listitem><para>
84+ <literal>"udppm"</literal>: UDP portmapper.
85+ </para></listitem>
86+ </itemizedlist>
87+ '';
88+ };
89+ bindAddress = mkOption {
90+ type = types.str;
91+ default = "[::]";
92+ example = "127.0.0.1";
93+ description = ''
94+ Address used for service.
95+ '';
96+ };
97+ bindPort = mkOption {
98+ type = types.nullOr types.int;
99+ default = null;
100+ example = 3128;
101+ description = ''
102+ Override default port used for service.
103+ '';
104+ };
105+ maxConnections = mkOption {
106+ type = types.int;
107+ default = 100;
108+ example = 1000;
109+ description = ''
110+ Maximum number of simulationeous connections to this service.
111+ '';
112+ };
113+ auth = mkOption {
114+ type = types.listOf (types.enum [ "none" "iponly" "strong" ]);
115+ example = [ "iponly" "strong" ];
116+ description = ''
117+ Authentication type. The following values are valid:
118+
119+ <itemizedlist>
120+ <listitem><para>
121+ <literal>"none"</literal>: disables both authentication and authorization. You can not use ACLs.
122+ </para></listitem>
123+ <listitem><para>
124+ <literal>"iponly"</literal>: specifies no authentication. ACLs authorization is used.
125+ </para></listitem>
126+ <listitem><para>
127+ <literal>"strong"</literal>: authentication by username/password. If user is not registered their access is denied regardless of ACLs.
128+ </para></listitem>
129+ </itemizedlist>
130+
131+ Double authentication is possible, e.g.
132+
133+ <literal>
134+ {
135+ auth = [ "iponly" "strong" ];
136+ acl = [
137+ {
138+ rule = "allow";
139+ targets = [ "192.168.0.0/16" ];
140+ }
141+ {
142+ rule = "allow"
143+ users = [ "user1" "user2" ];
144+ }
145+ ];
146+ }
147+ </literal>
148+ In this example strong username authentication is not required to access 192.168.0.0/16.
149+ '';
150+ };
151+ acl = mkOption {
152+ type = types.listOf (types.submodule {
153+ options = {
154+ rule = mkOption {
155+ type = types.enum [ "allow" "deny" ];
156+ example = "allow";
157+ description = ''
158+ ACL rule. The following values are valid:
159+
160+ <itemizedlist>
161+ <listitem><para>
162+ <literal>"allow"</literal>: connections allowed.
163+ </para></listitem>
164+ <listitem><para>
165+ <literal>"deny"</literal>: connections not allowed.
166+ </para></listitem>
167+ </itemizedlist>
168+ '';
169+ };
170+ users = mkOption {
171+ type = types.listOf types.str;
172+ default = [ ];
173+ example = [ "user1" "user2" "user3" ];
174+ description = ''
175+ List of users, use empty list for any.
176+ '';
177+ };
178+ sources = mkOption {
179+ type = types.listOf types.str;
180+ default = [ ];
181+ example = [ "127.0.0.1" "192.168.1.0/24" ];
182+ description = ''
183+ List of source IP range, use empty list for any.
184+ '';
185+ };
186+ targets = mkOption {
187+ type = types.listOf types.str;
188+ default = [ ];
189+ example = [ "127.0.0.1" "192.168.1.0/24" ];
190+ description = ''
191+ List of target IP ranges, use empty list for any.
192+ May also contain host names instead of addresses.
193+ It's possible to use wildmask in the begginning and in the the end of hostname, e.g. *badsite.com or *badcontent*.
194+ Hostname is only checked if hostname presents in request.
195+ '';
196+ };
197+ targetPorts = mkOption {
198+ type = types.listOf types.int;
199+ default = [ ];
200+ example = [ 80 443 ];
201+ description = ''
202+ List of target ports, use empty list for any.
203+ '';
204+ };
205+ };
206+ });
207+ default = [ ];
208+ example = literalExample ''
209+ [
210+ {
211+ rule = "allow";
212+ users = [ "user1" ];
213+ }
214+ {
215+ rule = "allow";
216+ sources = [ "192.168.1.0/24" ];
217+ }
218+ {
219+ rule = "deny";
220+ }
221+ ]
222+ '';
223+ description = ''
224+ Use this option to limit user access to resources.
225+ '';
226+ };
227+ extraArguments = mkOption {
228+ type = types.nullOr types.str;
229+ default = null;
230+ example = "-46";
231+ description = ''
232+ Extra arguments for service.
233+ Consult "Options" section in <link xlink:href="https://github.com/z3APA3A/3proxy/wiki/3proxy.cfg">documentation</link> for available arguments.
234+ '';
235+ };
236+ extraConfig = mkOption {
237+ type = types.nullOr types.lines;
238+ default = null;
239+ description = ''
240+ Extra configuration for service. Use this to configure things like bandwidth limiter or ACL-based redirection.
241+ Consult <link xlink:href="https://github.com/z3APA3A/3proxy/wiki/3proxy.cfg">documentation</link> for available options.
242+ '';
243+ };
244+ };
245+ });
246+ default = [ ];
247+ example = literalExample ''
248+ [
249+ {
250+ type = "proxy";
251+ bindAddress = "192.168.1.24";
252+ bindPort = 3128;
253+ auth = [ "none" ];
254+ }
255+ {
256+ type = "proxy";
257+ bindAddress = "10.10.1.20";
258+ bindPort = 3128;
259+ auth = [ "iponly" ];
260+ }
261+ {
262+ type = "socks";
263+ bindAddress = "172.17.0.1";
264+ bindPort = 1080;
265+ auth = [ "strong" ];
266+ }
267+ ]
268+ '';
269+ description = ''
270+ Use this option to define 3proxy services.
271+ '';
272+ };
273+ denyPrivate = mkOption {
274+ type = types.bool;
275+ default = true;
276+ description = ''
277+ Whether to deny access to private IP ranges including loopback.
278+ '';
279+ };
280+ privateRanges = mkOption {
281+ type = types.listOf types.str;
282+ default = [
283+ "0.0.0.0/8"
284+ "127.0.0.0/8"
285+ "10.0.0.0/8"
286+ "100.64.0.0/10"
287+ "172.16.0.0/12"
288+ "192.168.0.0/16"
289+ "::"
290+ "::1"
291+ "fc00::/7"
292+ ];
293+ example = [
294+ "0.0.0.0/8"
295+ "127.0.0.0/8"
296+ "10.0.0.0/8"
297+ "100.64.0.0/10"
298+ "172.16.0.0/12"
299+ "192.168.0.0/16"
300+ "::"
301+ "::1"
302+ "fc00::/7"
303+ ];
304+ description = ''
305+ What IP ranges to deny access when denyPrivate is set tu true.
306+ '';
307+ };
308+ resolution = mkOption {
309+ type = types.submodule {
310+ options = {
311+ nserver = mkOption {
312+ type = types.listOf types.str;
313+ default = [ ];
314+ example = [ "127.0.0.53" "192.168.1.3:5353/tcp" ];
315+ description = ''
316+ List of nameservers to use.
317+
318+ Up to 5 nservers may be specified. If no nserver is configured,
319+ default system name resolution functions are used.
320+ '';
321+ };
322+ nscache = mkOption {
323+ type = types.int;
324+ default = 65535;
325+ example = 65535;
326+ description = "Set name cache size for IPv4.";
327+ };
328+ nscache6 = mkOption {
329+ type = types.int;
330+ default = 65535;
331+ example = 65535;
332+ description = "Set name cache size for IPv6.";
333+ };
334+ nsrecord = mkOption {
335+ type = types.attrsOf types.str;
336+ default = { };
337+ example = literalExample ''
338+ {
339+ "files.local" = "192.168.1.12";
340+ "site.local" = "192.168.1.43";
341+ }
342+ '';
343+ description = "Adds static nsrecords.";
344+ };
345+ };
346+ };
347+ default = { };
348+ description = ''
349+ Use this option to configure name resolution and DNS caching.
350+ '';
351+ };
352+ extraConfig = mkOption {
353+ type = types.nullOr types.lines;
354+ default = null;
355+ description = ''
356+ Extra configuration, appended to the 3proxy configuration file.
357+ Consult <link xlink:href="https://github.com/z3APA3A/3proxy/wiki/3proxy.cfg">documentation</link> for available options.
358+ '';
359+ };
360+ };
361+
362+ config = mkIf cfg.enable {
363+ services._3proxy.confFile = mkDefault (pkgs.writeText "3proxy.conf" ''
364+ # log to stdout
365+ log
366+
367+ ${concatMapStringsSep "\n" (x: "nserver " + x) cfg.resolution.nserver}
368+
369+ nscache ${toString cfg.resolution.nscache}
370+ nscache6 ${toString cfg.resolution.nscache6}
371+
372+ ${concatMapStringsSep "\n" (x: "nsrecord " + x)
373+ (mapAttrsToList (name: value: "${name} ${value}")
374+ cfg.resolution.nsrecord)}
375+
376+ ${optionalString (cfg.usersFile != null)
377+ ''users $"${cfg.usersFile}"''
378+ }
379+
380+ ${concatMapStringsSep "\n" (service: ''
381+ auth ${concatStringsSep " " service.auth}
382+
383+ ${optionalString (cfg.denyPrivate)
384+ "deny * * ${optionalList cfg.privateRanges}"}
385+
386+ ${concatMapStringsSep "\n" (acl:
387+ "${acl.rule} ${
388+ concatMapStringsSep " " optionalList [
389+ acl.users
390+ acl.sources
391+ acl.targets
392+ acl.targetPorts
393+ ]
394+ }") service.acl}
395+
396+ maxconn ${toString service.maxConnections}
397+
398+ ${optionalString (service.extraConfig != null) service.extraConfig}
399+
400+ ${service.type} -i${toString service.bindAddress} ${
401+ optionalString (service.bindPort != null)
402+ "-p${toString service.bindPort}"
403+ } ${
404+ optionalString (service.extraArguments != null) service.extraArguments
405+ }
406+
407+ flush
408+ '') cfg.services}
409+ ${optionalString (cfg.extraConfig != null) cfg.extraConfig}
410+ '');
411+ systemd.services."3proxy" = {
412+ description = "Tiny free proxy server";
413+ documentation = [ "https://github.com/z3APA3A/3proxy/wiki" ];
414+ after = [ "network.target" ];
415+ wantedBy = [ "multi-user.target" ];
416+ serviceConfig = {
417+ DynamicUser = true;
418+ StateDirectory = "3proxy";
419+ ExecStart = "${pkg}/bin/3proxy ${cfg.confFile}";
420+ Restart = "on-failure";
421+ };
422+ };
423+ };
424+
425+ meta.maintainers = with maintainers; [ misuzu ];
426+}
test/golden/importless/4.0.nixnew file+41
@@ -0,0 +1,41 @@
1+{ stdenv, fetchurl, omake, ocaml, libtiff, libjpeg, libpng, giflib, findlib, libXpm, freetype, graphicsmagick, ghostscript }:
2+
3+let
4+ pname = "camlimages";
5+ version = "4.0.1";
6+in
7+
8+stdenv.mkDerivation {
9+ name = "${pname}-${version}";
10+
11+ src = fetchurl {
12+ url = "https://bitbucket.org/camlspotter/camlimages/get/v4.0.1.tar.gz";
13+ sha256 = "b40237c1505487049799a7af296eb3996b3fa08eab94415546f46d61355747c4";
14+ };
15+
16+ buildInputs = [ ocaml omake findlib graphicsmagick ghostscript ];
17+
18+ propagatedBuildInputs = [libtiff libjpeg libpng giflib freetype libXpm ];
19+
20+ createFindlibDestdir = true;
21+
22+ preConfigure = ''
23+ rm ./configure
24+ '';
25+
26+ buildPhase = ''
27+ omake
28+ '';
29+
30+ installPhase = ''
31+ omake install
32+ '';
33+
34+ meta = with stdenv.lib; {
35+ branch = "4.0";
36+ homepage = "https://bitbucket.org/camlspotter/camlimages";
37+ description = "OCaml image processing library";
38+ license = licenses.lgpl2;
39+ maintainers = [ maintainers.vbgl ];
40+ };
41+}
test/golden/importless/4.0.txtnew file+40
@@ -0,0 +1,40 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ buildPhase = String;
6+ createFindlibDestdir = Bool;
7+ installPhase = String;
8+ meta =
9+ { branch = String;
10+ description = String;
11+ homepage = String;
12+ license = δ;
13+ maintainers = [ε];
14+ };
15+ name = String;
16+ preConfigure = String;
17+ propagatedBuildInputs = [ζ];
18+ src = η;
19+ } ->
20+ θ,
21+ β.licenses = ι,
22+ β.maintainers = κ,
23+ ι.lgpl2 = δ,
24+ κ.vbgl = ε
25+) =>
26+{ fetchurl = {sha256 = String; url = String;} -> η;
27+ findlib = γ;
28+ freetype = ζ;
29+ ghostscript = γ;
30+ giflib = ζ;
31+ graphicsmagick = γ;
32+ libXpm = ζ;
33+ libjpeg = ζ;
34+ libpng = ζ;
35+ libtiff = ζ;
36+ ocaml = γ;
37+ omake = γ;
38+ stdenv = α;
39+} ->
40+θ
test/golden/importless/4.00.1.nixnew file+67
@@ -0,0 +1,67 @@
1+{ stdenv, fetchurl, ncurses, xlibsWrapper }:
2+
3+let
4+ useX11 = !stdenv.isAarch32 && !stdenv.isMips;
5+ useNativeCompilers = !stdenv.isMips;
6+ inherit (stdenv.lib) optional optionals optionalString;
7+in
8+
9+stdenv.mkDerivation rec {
10+ pname = "ocaml";
11+ version = "4.00.1";
12+
13+ src = fetchurl {
14+ url = "https://caml.inria.fr/pub/distrib/ocaml-4.00/${pname}-${version}.tar.bz2";
15+ sha256 = "33c3f4acff51685f5bfd7c260f066645e767d4e865877bf1613c176a77799951";
16+ };
17+
18+ prefixKey = "-prefix ";
19+ configureFlags = [ "-no-tk" ] ++ optionals useX11 [ "-x11lib" xlibsWrapper ];
20+ buildFlags = [ "world" ] ++ optionals useNativeCompilers [ "bootstrap" "world.opt" ];
21+ buildInputs = [ ncurses ] ++ optional useX11 xlibsWrapper;
22+ installTargets = "install" + optionalString useNativeCompilers " installopt";
23+ preConfigure = ''
24+ CAT=$(type -tp cat)
25+ sed -e "s@/bin/cat@$CAT@" -i config/auto-aux/sharpbang
26+ '';
27+ postBuild = ''
28+ mkdir -p $out/include
29+ ln -sv $out/lib/ocaml/caml $out/include/caml
30+ '';
31+
32+ passthru = {
33+ nativeCompilers = useNativeCompilers;
34+ };
35+
36+ meta = with stdenv.lib; {
37+ homepage = "http://caml.inria.fr/ocaml";
38+ branch = "4.00";
39+ license = with licenses; [
40+ qpl /* compiler */
41+ lgpl2 /* library */
42+ ];
43+ description = "Most popular variant of the Caml language";
44+
45+ longDescription =
46+ ''
47+ OCaml is the most popular variant of the Caml language. From a
48+ language standpoint, it extends the core Caml language with a
49+ fully-fledged object-oriented layer, as well as a powerful module
50+ system, all connected by a sound, polymorphic type system featuring
51+ type inference.
52+
53+ The OCaml system is an industrial-strength implementation of this
54+ language, featuring a high-performance native-code compiler (ocamlopt)
55+ for 9 processor architectures (IA32, PowerPC, AMD64, Alpha, Sparc,
56+ Mips, IA64, HPPA, StrongArm), as well as a bytecode compiler (ocamlc)
57+ and an interactive read-eval-print loop (ocaml) for quick development
58+ and portability. The OCaml distribution includes a comprehensive
59+ standard library, a replay debugger (ocamldebug), lexer (ocamllex) and
60+ parser (ocamlyacc) generators, a pre-processor pretty-printer (camlp4)
61+ and a documentation generator (ocamldoc).
62+ '';
63+
64+ platforms = with platforms; linux;
65+ };
66+
67+}
test/golden/importless/4.00.1.txtnew file+41
@@ -0,0 +1,41 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ.
2+( α.isAarch32 = Bool,
3+ α.isMips = Bool,
4+ α.lib = β,
5+ α.mkDerivation =
6+ { buildFlags = [String];
7+ buildInputs = [γ];
8+ configureFlags = [String];
9+ installTargets = String;
10+ meta =
11+ { branch = String;
12+ description = String;
13+ homepage = String;
14+ license = [δ];
15+ longDescription = String;
16+ platforms = ε;
17+ };
18+ passthru = {nativeCompilers = Bool;};
19+ pname = String;
20+ postBuild = String;
21+ preConfigure = String;
22+ prefixKey = String;
23+ src = ζ;
24+ version = String;
25+ } ->
26+ η,
27+ β.optionals = Bool -> [String] -> [String],
28+ θ.optionalString = Bool -> String -> String,
29+ ι.optional = Bool -> String -> [γ],
30+ κ.lgpl2 = δ,
31+ κ.licenses = λ,
32+ κ.linux = ε,
33+ κ.platforms = μ,
34+ κ.qpl = δ
35+) =>
36+{ fetchurl = {sha256 = String; url = String;} -> ζ;
37+ ncurses = γ;
38+ stdenv = α;
39+ xlibsWrapper = String;
40+} ->
41+η
test/golden/importless/4.01.17.nixnew file+82
@@ -0,0 +1,82 @@
1+# Tested on linux-x86_64. Might work on linux-i386. Probably won't work on anything else.
2+
3+# To use this driver in NixOS, add it to printing.drivers in configuration.nix.
4+# configuration.nix might look like this when you're done:
5+# { pkgs, ... }: {
6+# printing = {
7+# enable = true;
8+# drivers = [ pkgs.samsung-unified-linux-driver_4_01_17 ];
9+# };
10+# (more stuff)
11+# }
12+# (This advice was tested on the 1st November 2016.)
13+
14+{ stdenv, fetchurl, cups, libusb-compat-0_1 }:
15+
16+# Do not bump lightly! Visit <http://www.bchemnet.com/suldr/supported.html>
17+# to see what will break when upgrading. Consider a new versioned attribute.
18+let
19+ installationPath = if stdenv.hostPlatform.system == "x86_64-linux" then "x86_64" else "i386";
20+ appendPath = if stdenv.hostPlatform.system == "x86_64-linux" then "64" else "";
21+ libPath = stdenv.lib.makeLibraryPath [ cups libusb-compat-0_1 ] + ":$out/lib:${stdenv.cc.cc.lib}/lib${appendPath}";
22+in stdenv.mkDerivation rec {
23+ pname = "samsung-UnifiedLinuxDriver";
24+ version = "4.01.17";
25+
26+ src = fetchurl {
27+ url = "http://www.bchemnet.com/suldr/driver/UnifiedLinuxDriver-${version}.tar.gz";
28+ sha256 = "1vv3pzvqpg1dq3xjr8161x2yp3v7ca75vil56ranhw5pkjwq66x0";
29+ };
30+
31+ dontPatchELF = true;
32+ dontStrip = true;
33+
34+ installPhase = ''
35+ cd Linux/${installationPath}
36+ mkdir -p $out/lib/cups/{backend,filter}
37+ install -Dm755 mfp $out/lib/cups/backend/
38+ install -Dm755 pstosecps pstospl pstosplc rastertospl rastertosplc $out/lib/cups/filter/
39+ install -Dm755 libscmssc.so $out/lib/
40+
41+ GLOBIGNORE=*.so
42+ for exe in $out/lib/cups/**/*; do
43+ echo "Patching $exe"
44+ patchelf \
45+ --set-rpath ${libPath} \
46+ --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
47+ $exe
48+ done
49+ unset GLOBIGNORE
50+
51+ install -v at_root/usr/lib${appendPath}/libmfp.so.1.0.1 $out/lib
52+ cd $out/lib
53+ ln -s -f libmfp.so.1.0.1 libmfp.so.1
54+ ln -s -f libmfp.so.1 libmfp.so
55+
56+ for lib in $out/lib/*.so; do
57+ echo "Patching $lib"
58+ patchelf \
59+ --set-rpath ${libPath} \
60+ $lib
61+ done
62+
63+ mkdir -p $out/share/cups/model/samsung
64+ cd -
65+ cd ../noarch/at_opt/share/ppd
66+ for i in *.ppd; do
67+ sed -i $i -e \
68+ "s,pstosecps,$out/lib/cups/filter/pstosecps,g; \
69+ s,pstospl,$out/lib/cups/filter/pstospl,g; \
70+ s,rastertospl,$out/lib/cups/filter/rastertospl,g"
71+ done;
72+ cp -r ./* $out/share/cups/model/samsung
73+ '';
74+
75+ meta = with stdenv.lib; {
76+ description = "Samsung's Linux printing drivers; includes binaries without source code";
77+ homepage = "http://www.samsung.com/";
78+ license = licenses.unfree;
79+ platforms = platforms.linux;
80+ maintainers = with maintainers; [ joko ];
81+ };
82+}
test/golden/importless/4.01.17.txtnew file+35
@@ -0,0 +1,35 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ.
2+( α.hostPlatform = β,
3+ α.lib = γ,
4+ α.mkDerivation =
5+ { dontPatchELF = Bool;
6+ dontStrip = Bool;
7+ installPhase = String;
8+ meta =
9+ { description = String;
10+ homepage = String;
11+ license = δ;
12+ maintainers = [ε];
13+ platforms = ζ;
14+ };
15+ pname = String;
16+ src = η;
17+ version = String;
18+ } ->
19+ θ,
20+ γ.makeLibraryPath = [ι] -> String,
21+ β.system = String,
22+ κ.system = String,
23+ λ.joko = ε,
24+ λ.licenses = μ,
25+ λ.maintainers = ν,
26+ λ.platforms = ξ,
27+ μ.unfree = δ,
28+ ξ.linux = ζ
29+) =>
30+{ cups = ι;
31+ fetchurl = {sha256 = String; url = String;} -> η;
32+ libusb-compat-0_1 = ι;
33+ stdenv = α;
34+} ->
35+θ
test/golden/importless/4.1.nixnew file+37
@@ -0,0 +1,37 @@
1+{ stdenv, fetchurl, unzip }:
2+
3+let
4+
5+ src = fetchurl {
6+ url = "http://www.oasis-open.org/docbook/sgml/4.1/docbk41.zip";
7+ sha256 = "04b3gp4zkh9c5g9kvnywdkdfkcqx3kjc04j4mpkr4xk7lgqgrany";
8+ };
9+
10+ isoents = fetchurl {
11+ url = "http://www.oasis-open.org/cover/ISOEnts.zip";
12+ sha256 = "1clrkaqnvc1ja4lj8blr0rdlphngkcda3snm7b9jzvcn76d3br6w";
13+ };
14+
15+in
16+
17+stdenv.mkDerivation {
18+ name = "docbook-sgml-4.1";
19+
20+ dontUnpack = true;
21+
22+ nativeBuildInputs = [ unzip ];
23+
24+ installPhase =
25+ ''
26+ o=$out/sgml/dtd/docbook-4.1
27+ mkdir -p $o
28+ cd $o
29+ unzip ${src}
30+ unzip ${isoents}
31+ sed -e "s/iso-/ISO/" -e "s/.gml//" -i docbook.cat
32+ '';
33+
34+ meta = {
35+ platforms = stdenv.lib.platforms.unix;
36+ };
37+}
test/golden/importless/4.1.txtnew file+14
@@ -0,0 +1,14 @@
1+∀ α β γ δ ε ζ η.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { dontUnpack = Bool;
5+ installPhase = String;
6+ meta = {platforms = γ;};
7+ name = String;
8+ nativeBuildInputs = [δ];
9+ } ->
10+ ε,
11+ β.platforms = ζ,
12+ ζ.unix = γ
13+) =>
14+{fetchurl = {sha256 = String; url = String;} -> η; stdenv = α; unzip = δ;} -> ε
test/golden/importless/4.13a.nixnew file+19
@@ -0,0 +1,19 @@
1+{ stdenv, fetchurl, texinfo, ncurses, lzma }:
2+
3+stdenv.mkDerivation rec {
4+ pname = "texinfo";
5+ version = "4.13a";
6+
7+ src = fetchurl {
8+ url = "mirror://gnu/texinfo/${pname}-${version}.tar.lzma";
9+ sha256 = "1rf9ckpqwixj65bw469i634897xwlgkm5i9g2hv3avl6mv7b0a3d";
10+ };
11+
12+ buildInputs = [ ncurses ];
13+ nativeBuildInputs = [ lzma ];
14+
15+ # Disabled because we don't have zdiff in the stdenv bootstrap.
16+ #doCheck = true;
17+
18+ meta = texinfo.meta // { branch = version; };
19+}
test/golden/importless/4.13a.txtnew file+20
@@ -0,0 +1,20 @@
1+∀ β γ δ ε ζ η θ ι.
2+( β // {branch = String;} ~ γ,
3+ δ.mkDerivation =
4+ { buildInputs = [ε];
5+ meta = ∀ α. α;
6+ nativeBuildInputs = [ζ];
7+ pname = String;
8+ src = η;
9+ version = String;
10+ } ->
11+ θ,
12+ ι.meta = β
13+) =>
14+{ fetchurl = {sha256 = String; url = String;} -> η;
15+ lzma = ζ;
16+ ncurses = ε;
17+ stdenv = δ;
18+ texinfo = ι;
19+} ->
20+θ
test/golden/importless/4.2.1.nixnew file+29
@@ -0,0 +1,29 @@
1+{stdenv, fetchurl, pkgconfig, libdvdread}:
2+
3+stdenv.mkDerivation {
4+ name = "libdvdnav-4.2.1";
5+
6+ src = fetchurl {
7+ url = "http://dvdnav.mplayerhq.hu/releases/libdvdnav-4.2.1.tar.xz";
8+ sha256 = "7fca272ecc3241b6de41bbbf7ac9a303ba25cb9e0c82aa23901d3104887f2372";
9+ };
10+
11+ nativeBuildInputs = [ pkgconfig ];
12+ buildInputs = [libdvdread];
13+
14+ configureScript = "./configure2"; # wtf?
15+
16+ preConfigure = ''
17+ mkdir -p $out
18+ '';
19+
20+ meta = {
21+ homepage = "http://dvdnav.mplayerhq.hu/";
22+ description = "A library that implements DVD navigation features such as DVD menus";
23+ license = stdenv.lib.licenses.gpl2;
24+ maintainers = [ stdenv.lib.maintainers.wmertens ];
25+ platforms = stdenv.lib.platforms.linux;
26+ };
27+
28+ passthru = { inherit libdvdread; };
29+}
test/golden/importless/4.2.1.txtnew file+32
@@ -0,0 +1,32 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ configureScript = String;
6+ meta =
7+ { description = String;
8+ homepage = String;
9+ license = δ;
10+ maintainers = [ε];
11+ platforms = ζ;
12+ };
13+ name = String;
14+ nativeBuildInputs = [η];
15+ passthru = {libdvdread = γ;};
16+ preConfigure = String;
17+ src = θ;
18+ } ->
19+ ι,
20+ β.licenses = κ,
21+ κ.gpl2 = δ,
22+ λ.maintainers = μ,
23+ μ.wmertens = ε,
24+ ν.platforms = ξ,
25+ ξ.linux = ζ
26+) =>
27+{ fetchurl = {sha256 = String; url = String;} -> θ;
28+ libdvdread = γ;
29+ pkgconfig = η;
30+ stdenv = α;
31+} ->
32+ι
test/golden/importless/4.2.nixnew file+43
@@ -0,0 +1,43 @@
1+{ stdenv, fetchurl, gfortran, blas, lapack }:
2+
3+let
4+ int_t = if blas.isILP64 then "int64_t" else "int32_t";
5+in
6+stdenv.mkDerivation rec {
7+ version = "4.2.1";
8+ pname = "suitesparse";
9+ src = fetchurl {
10+ url = "http://www.cise.ufl.edu/research/sparse/SuiteSparse/SuiteSparse-${version}.tar.gz" ;
11+ sha256 = "1ga69637x7kdkiy3w3lq9dvva7220bdangv2lch2wx1hpi83h0p8";
12+ };
13+
14+ nativeBuildInputs = [ gfortran ];
15+ buildInputs = [ blas lapack ];
16+
17+ preConfigure = ''
18+ mkdir -p $out/lib
19+ mkdir -p $out/include
20+
21+ sed -i "SuiteSparse_config/SuiteSparse_config.mk" \
22+ -e 's/METIS .*$/METIS =/' \
23+ -e 's/METIS_PATH .*$/METIS_PATH =/' \
24+ -e '/CHOLMOD_CONFIG/ s/$/-DNPARTITION -DLONGBLAS=${int_t}/' \
25+ -e '/UMFPACK_CONFIG/ s/$/-DLONGBLAS=${int_t}/'
26+ '';
27+
28+ makeFlags = [
29+ "PREFIX=\"$(out)\""
30+ "INSTALL_LIB=$(out)/lib"
31+ "INSTALL_INCLUDE=$(out)/include"
32+ "BLAS=-lblas"
33+ "LAPACK=-llapack"
34+ ];
35+
36+ meta = with stdenv.lib; {
37+ homepage = "http://faculty.cse.tamu.edu/davis/suitesparse.html";
38+ description = "A suite of sparse matrix algorithms";
39+ license = with licenses; [ bsd2 gpl2Plus lgpl21Plus ];
40+ maintainers = with maintainers; [ ttuegel ];
41+ platforms = with platforms; unix;
42+ };
43+}
test/golden/importless/4.2.txtnew file+36
@@ -0,0 +1,36 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ makeFlags = [String];
6+ meta =
7+ { description = String;
8+ homepage = String;
9+ license = [δ];
10+ maintainers = [ε];
11+ platforms = ζ;
12+ };
13+ nativeBuildInputs = [η];
14+ pname = String;
15+ preConfigure = String;
16+ src = θ;
17+ version = String;
18+ } ->
19+ ι,
20+ γ.isILP64 = Bool,
21+ β.bsd2 = δ,
22+ β.gpl2Plus = δ,
23+ β.lgpl21Plus = δ,
24+ β.licenses = κ,
25+ β.maintainers = λ,
26+ β.platforms = μ,
27+ β.ttuegel = ε,
28+ β.unix = ζ
29+) =>
30+{ blas = γ;
31+ fetchurl = {sha256 = String; url = String;} -> θ;
32+ gfortran = η;
33+ lapack = γ;
34+ stdenv = α;
35+} ->
36+ι
test/golden/importless/4.25.nixnew file+53
@@ -0,0 +1,53 @@
1+{ stdenv, fetchurl
2+, openssl, readline, ncurses, zlib
3+, dataDir ? "/var/lib/softether" }:
4+
5+let
6+ os = if stdenv.isLinux then "1"
7+ else if stdenv.isFreeBSD then "2"
8+ else if stdenv.isSunOS then "3"
9+ else if stdenv.isDarwin then "4"
10+ else if stdenv.isOpenBSD then "5"
11+ else "";
12+ cpuBits = if stdenv.is64bit then "2" else "1";
13+
14+in
15+
16+stdenv.mkDerivation rec {
17+ pname = "softether";
18+ version = "4.25";
19+ build = "9656";
20+ compiledDate = "2018.01.15";
21+
22+ src = fetchurl {
23+ url = "http://www.softether-download.com/files/softether/v${version}-${build}-rtm-${compiledDate}-tree/Source_Code/softether-src-v${version}-${build}-rtm.tar.gz";
24+ sha256 = "1y1m8lf0xfh7m70d15wj2jjf5a5qhi3j49ciwqmsscsqvb1xwimr";
25+ };
26+
27+ buildInputs = [ openssl readline ncurses zlib ];
28+
29+ preConfigure = ''
30+ echo "${os}
31+ ${cpuBits}
32+ " | ./configure
33+ rm configure
34+ '';
35+
36+ buildPhase = ''
37+ mkdir -p $out/bin
38+ sed -i \
39+ -e "/INSTALL_BINDIR=/s|/usr/bin|/bin|g" \
40+ -e "/_DIR=/s|/usr|${dataDir}|g" \
41+ -e "s|\$(INSTALL|$out/\$(INSTALL|g" \
42+ -e "/echo/s|echo $out/|echo |g" \
43+ Makefile
44+ '';
45+
46+ meta = with stdenv.lib; {
47+ description = "An Open-Source Free Cross-platform Multi-protocol VPN Program";
48+ homepage = "https://www.softether.org/";
49+ license = licenses.gpl2;
50+ maintainers = [ maintainers.rick68 ];
51+ platforms = [ "x86_64-linux" ];
52+ };
53+}
test/golden/importless/4.25.txtnew file+40
@@ -0,0 +1,40 @@
1+∀ α β γ δ ε ζ η θ ι.
2+( α.is64bit = Bool,
3+ α.isDarwin = Bool,
4+ α.isFreeBSD = Bool,
5+ α.isLinux = Bool,
6+ α.isOpenBSD = Bool,
7+ α.isSunOS = Bool,
8+ α.lib = β,
9+ α.mkDerivation =
10+ { build = String;
11+ buildInputs = [γ];
12+ buildPhase = String;
13+ compiledDate = String;
14+ meta =
15+ { description = String;
16+ homepage = String;
17+ license = δ;
18+ maintainers = [ε];
19+ platforms = [String];
20+ };
21+ pname = String;
22+ preConfigure = String;
23+ src = ζ;
24+ version = String;
25+ } ->
26+ η,
27+ β.licenses = θ,
28+ β.maintainers = ι,
29+ θ.gpl2 = δ,
30+ ι.rick68 = ε
31+) =>
32+{ dataDir = String;
33+ fetchurl = {sha256 = String; url = String;} -> ζ;
34+ ncurses = γ;
35+ openssl = γ;
36+ readline = γ;
37+ stdenv = α;
38+ zlib = γ;
39+} ->
40+η
test/golden/importless/4.29.nixnew file+38
@@ -0,0 +1,38 @@
1+{ stdenv, fetchurl
2+, openssl, readline, ncurses, zlib
3+, dataDir ? "/var/lib/softether" }:
4+
5+stdenv.mkDerivation rec {
6+ pname = "softether";
7+ version = "4.29";
8+ build = "9680";
9+
10+ src = fetchurl {
11+ url = "https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v${version}-${build}-rtm/softether-src-v${version}-${build}-rtm.tar.gz";
12+ sha256 = "1r169s5dr31060r2mxkmm08riy6zrxgapmrc6kdrpxdav6kmy0z6";
13+ };
14+
15+ buildInputs = [ openssl readline ncurses zlib ];
16+
17+ preConfigure = ''
18+ ./configure
19+ '';
20+
21+ buildPhase = ''
22+ mkdir -p $out/bin
23+ sed -i \
24+ -e "/INSTALL_BINDIR=/s|/usr/bin|/bin|g" \
25+ -e "/_DIR=/s|/usr|${dataDir}|g" \
26+ -e "s|\$(INSTALL|$out/\$(INSTALL|g" \
27+ -e "/echo/s|echo $out/|echo |g" \
28+ Makefile
29+ '';
30+
31+ meta = with stdenv.lib; {
32+ description = "An Open-Source Free Cross-platform Multi-protocol VPN Program";
33+ homepage = "https://www.softether.org/";
34+ license = licenses.asl20;
35+ maintainers = [ maintainers.rick68 ];
36+ platforms = [ "x86_64-linux" ];
37+ };
38+}
test/golden/importless/4.29.txtnew file+33
@@ -0,0 +1,33 @@
1+∀ α β γ δ ε ζ η θ ι.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { build = String;
5+ buildInputs = [γ];
6+ buildPhase = String;
7+ meta =
8+ { description = String;
9+ homepage = String;
10+ license = δ;
11+ maintainers = [ε];
12+ platforms = [String];
13+ };
14+ pname = String;
15+ preConfigure = String;
16+ src = ζ;
17+ version = String;
18+ } ->
19+ η,
20+ β.licenses = θ,
21+ β.maintainers = ι,
22+ θ.asl20 = δ,
23+ ι.rick68 = ε
24+) =>
25+{ dataDir = String;
26+ fetchurl = {sha256 = String; url = String;} -> ζ;
27+ ncurses = γ;
28+ openssl = γ;
29+ readline = γ;
30+ stdenv = α;
31+ zlib = γ;
32+} ->
33+η
test/golden/importless/4.3.2.nixnew file+75
@@ -0,0 +1,75 @@
1+{ stdenv, fetchurl, m4, cxx ? true }:
2+
3+let self = stdenv.mkDerivation rec {
4+ name = "gmp-4.3.2";
5+
6+ src = fetchurl {
7+ url = "mirror://gnu/gmp/${name}.tar.bz2";
8+ sha256 = "0x8prpqi9amfcmi7r4zrza609ai9529pjaq0h4aw51i867064qck";
9+ };
10+
11+ #outputs TODO: split $cxx due to libstdc++ dependency
12+ # maybe let ghc use a version with *.so shared with rest of nixpkgs and *.a added
13+ # - see #5855 for related discussion
14+ outputs = [ "out" "dev" "info" ];
15+ passthru.static = self.out;
16+
17+ nativeBuildInputs = [ m4 ];
18+
19+ # Prevent the build system from using sub-architecture-specific
20+ # instructions (e.g., SSE2 on i686).
21+ #
22+ # This is not a problem for Apple machines, which are all alike. In
23+ # addition, `configfsf.guess' would return `i386-apple-darwin10.2.0' on
24+ # `x86_64-darwin', leading to a 32-bit ABI build, which is undesirable.
25+ preConfigure =
26+ if !stdenv.isDarwin
27+ then "ln -sf configfsf.guess config.guess"
28+ else ''echo "Darwin host is `./config.guess`."'';
29+
30+ configureFlags = [
31+ (stdenv.lib.enableFeature cxx "cxx")
32+ ] ++ stdenv.lib.optionals stdenv.isDarwin [
33+ "ac_cv_build=x86_64-apple-darwin13.4.0"
34+ "ac_cv_host=x86_64-apple-darwin13.4.0"
35+ ];
36+
37+ # The test t-lucnum_ui fails (on Linux/x86_64) when built with GCC 4.8.
38+ # Newer versions of GMP don't have that issue anymore.
39+ doCheck = false;
40+
41+ meta = {
42+ branch = "4";
43+ description = "GNU multiple precision arithmetic library";
44+
45+ longDescription =
46+ '' GMP is a free library for arbitrary precision arithmetic, operating
47+ on signed integers, rational numbers, and floating point numbers.
48+ There is no practical limit to the precision except the ones implied
49+ by the available memory in the machine GMP runs on. GMP has a rich
50+ set of functions, and the functions have a regular interface.
51+
52+ The main target applications for GMP are cryptography applications
53+ and research, Internet security applications, algebra systems,
54+ computational algebra research, etc.
55+
56+ GMP is carefully designed to be as fast as possible, both for small
57+ operands and for huge operands. The speed is achieved by using
58+ fullwords as the basic arithmetic type, by using fast algorithms,
59+ with highly optimised assembly code for the most common inner loops
60+ for a lot of CPUs, and by a general emphasis on speed.
61+
62+ GMP is faster than any other bignum library. The advantage for GMP
63+ increases with the operand sizes for many operations, since GMP uses
64+ asymptotically faster algorithms.
65+ '';
66+
67+ homepage = "https://gmplib.org/";
68+ license = stdenv.lib.licenses.lgpl3Plus;
69+
70+ maintainers = [ ];
71+ platforms = stdenv.lib.platforms.all;
72+ badPlatforms = [ "x86_64-darwin" ];
73+ };
74+};
75+ in self
test/golden/importless/4.3.2.txtnew file+38
@@ -0,0 +1,38 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ.
2+( β.isDarwin = Bool,
3+ β.lib = γ,
4+ β.mkDerivation =
5+ { configureFlags = [δ];
6+ doCheck = Bool;
7+ meta =
8+ { badPlatforms = [String];
9+ branch = String;
10+ description = String;
11+ homepage = String;
12+ license = ε;
13+ longDescription = String;
14+ maintainers = ∀ α. [α];
15+ platforms = ζ;
16+ };
17+ name = String;
18+ nativeBuildInputs = [η];
19+ outputs = [String];
20+ passthru = {static = θ;};
21+ preConfigure = String;
22+ src = ι;
23+ } ->
24+ κ,
25+ κ.out = λ,
26+ γ.licenses = μ,
27+ μ.lgpl3Plus = ε,
28+ ν.platforms = ξ,
29+ ξ.all = ζ,
30+ ο.enableFeature = Bool -> String -> δ,
31+ π.optionals = ρ -> [String] -> [δ]
32+) =>
33+{ cxx = Bool;
34+ fetchurl = {sha256 = String; url = String;} -> ι;
35+ m4 = η;
36+ stdenv = β;
37+} ->
38+κ
test/golden/importless/4.4.nixnew file+100
@@ -0,0 +1,100 @@
1+{ stdenv, fetchurl, gfortran, blas, lapack
2+, enableCuda ? false, cudatoolkit
3+}:
4+
5+let
6+ version = "4.4.4";
7+ name = "suitesparse-${version}";
8+
9+ int_t = if blas.isILP64 then "int64_t" else "int32_t";
10+ SHLIB_EXT = stdenv.hostPlatform.extensions.sharedLibrary;
11+in
12+stdenv.mkDerivation {
13+ inherit name;
14+
15+ src = fetchurl {
16+ url = "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-${version}.tar.gz";
17+ sha256 = "1zdn1y0ij6amj7smmcslkqgbqv9yy5cwmbyzqc9v6drzdzllgbpj";
18+ };
19+
20+ preConfigure = ''
21+ mkdir -p $out/lib
22+ mkdir -p $out/include
23+
24+ sed -i "SuiteSparse_config/SuiteSparse_config.mk" \
25+ -e 's/METIS .*$/METIS =/' \
26+ -e 's/METIS_PATH .*$/METIS_PATH =/' \
27+ -e '/CHOLMOD_CONFIG/ s/$/-DNPARTITION -DLONGBLAS=${int_t}/' \
28+ -e '/UMFPACK_CONFIG/ s/$/-DLONGBLAS=${int_t}/'
29+ ''
30+ + stdenv.lib.optionalString stdenv.isDarwin ''
31+ sed -i "SuiteSparse_config/SuiteSparse_config.mk" \
32+ -e 's/^[[:space:]]*\(LIB = -lm\) -lrt/\1/'
33+ ''
34+ + stdenv.lib.optionalString enableCuda ''
35+ sed -i "SuiteSparse_config/SuiteSparse_config.mk" \
36+ -e 's|^[[:space:]]*\(CUDA_ROOT =\)|CUDA_ROOT = ${cudatoolkit}|' \
37+ -e 's|^[[:space:]]*\(GPU_BLAS_PATH =\)|GPU_BLAS_PATH = $(CUDA_ROOT)|' \
38+ -e 's|^[[:space:]]*\(GPU_CONFIG =\)|GPU_CONFIG = -I$(CUDA_ROOT)/include -DGPU_BLAS -DCHOLMOD_OMP_NUM_THREADS=$(NIX_BUILD_CORES) |' \
39+ -e 's|^[[:space:]]*\(CUDA_PATH =\)|CUDA_PATH = $(CUDA_ROOT)|' \
40+ -e 's|^[[:space:]]*\(CUDART_LIB =\)|CUDART_LIB = $(CUDA_ROOT)/lib64/libcudart.so|' \
41+ -e 's|^[[:space:]]*\(CUBLAS_LIB =\)|CUBLAS_LIB = $(CUDA_ROOT)/lib64/libcublas.so|' \
42+ -e 's|^[[:space:]]*\(CUDA_INC_PATH =\)|CUDA_INC_PATH = $(CUDA_ROOT)/include/|' \
43+ -e 's|^[[:space:]]*\(NV20 =\)|NV20 = -arch=sm_20 -Xcompiler -fPIC|' \
44+ -e 's|^[[:space:]]*\(NV30 =\)|NV30 = -arch=sm_30 -Xcompiler -fPIC|' \
45+ -e 's|^[[:space:]]*\(NV35 =\)|NV35 = -arch=sm_35 -Xcompiler -fPIC|' \
46+ -e 's|^[[:space:]]*\(NVCC =\) echo|NVCC = $(CUDA_ROOT)/bin/nvcc|' \
47+ -e 's|^[[:space:]]*\(NVCCFLAGS =\)|NVCCFLAGS = $(NV20) -O3 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35 -gencode=arch=compute_60,code=sm_60|'
48+ '';
49+
50+ makeFlags = [
51+ "PREFIX=\"$(out)\""
52+ "INSTALL_LIB=$(out)/lib"
53+ "INSTALL_INCLUDE=$(out)/include"
54+ "BLAS=-lblas"
55+ "LAPACK=-llapack"
56+ ];
57+
58+ NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isDarwin " -DNTIMER";
59+
60+ postInstall = ''
61+ # Build and install shared library
62+ (
63+ cd "$(mktemp -d)"
64+ for i in "$out"/lib/lib*.a; do
65+ ar -x $i
66+ done
67+ ${if enableCuda then cudatoolkit else stdenv.cc.outPath}/bin/${if enableCuda then "nvcc" else "cc"} *.o ${if stdenv.isDarwin then "-dynamiclib" else "--shared"} -o "$out/lib/libsuitesparse${SHLIB_EXT}" -lblas ${stdenv.lib.optionalString enableCuda "-lcublas"}
68+ )
69+ for i in umfpack cholmod amd camd colamd spqr; do
70+ ln -s libsuitesparse${SHLIB_EXT} "$out"/lib/lib$i${SHLIB_EXT}
71+ done
72+
73+ # Install documentation
74+ outdoc=$out/share/doc/${name}
75+ mkdir -p $outdoc
76+ cp -r AMD/Doc $outdoc/amd
77+ cp -r BTF/Doc $outdoc/bft
78+ cp -r CAMD/Doc $outdoc/camd
79+ cp -r CCOLAMD/Doc $outdoc/ccolamd
80+ cp -r CHOLMOD/Doc $outdoc/cholmod
81+ cp -r COLAMD/Doc $outdoc/colamd
82+ cp -r CXSparse/Doc $outdoc/cxsparse
83+ cp -r KLU/Doc $outdoc/klu
84+ cp -r LDL/Doc $outdoc/ldl
85+ cp -r RBio/Doc $outdoc/rbio
86+ cp -r SPQR/Doc $outdoc/spqr
87+ cp -r UMFPACK/Doc $outdoc/umfpack
88+ '';
89+
90+ nativeBuildInputs = [ gfortran ];
91+ buildInputs = [ blas lapack ];
92+
93+ meta = with stdenv.lib; {
94+ homepage = "http://faculty.cse.tamu.edu/davis/suitesparse.html";
95+ description = "A suite of sparse matrix algorithms";
96+ license = with licenses; [ bsd2 gpl2Plus lgpl21Plus ];
97+ maintainers = with maintainers; [ ttuegel ];
98+ platforms = with platforms; unix;
99+ };
100+}
test/golden/importless/4.4.txtnew file+46
@@ -0,0 +1,46 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ.
2+( α.hostPlatform = β,
3+ α.isDarwin = γ,
4+ α.lib = δ,
5+ α.mkDerivation =
6+ { NIX_CFLAGS_COMPILE = ε;
7+ buildInputs = [ζ];
8+ makeFlags = [String];
9+ meta =
10+ { description = String;
11+ homepage = String;
12+ license = [η];
13+ maintainers = [θ];
14+ platforms = ι;
15+ };
16+ name = String;
17+ nativeBuildInputs = [κ];
18+ postInstall = String;
19+ preConfigure = String;
20+ src = λ;
21+ } ->
22+ μ,
23+ ζ.isILP64 = Bool,
24+ β.extensions = ν,
25+ ν.sharedLibrary = ξ,
26+ δ.optionalString = γ -> String -> ε,
27+ ο.bsd2 = η,
28+ ο.gpl2Plus = η,
29+ ο.lgpl21Plus = η,
30+ ο.licenses = π,
31+ ο.maintainers = ρ,
32+ ο.platforms = σ,
33+ ο.ttuegel = θ,
34+ ο.unix = ι,
35+ τ.optionalString = υ -> String -> String,
36+ φ.optionalString = Bool -> String -> String
37+) =>
38+{ blas = ζ;
39+ cudatoolkit = χ;
40+ enableCuda = Bool;
41+ fetchurl = {sha256 = String; url = String;} -> λ;
42+ gfortran = κ;
43+ lapack = ζ;
44+ stdenv = α;
45+} ->
46+μ
test/golden/importless/4.7.nixnew file+84
@@ -0,0 +1,84 @@
1+{ stdenv, fetchurl, jre
2+, fetchFromGitHub, cmake, ninja, pkgconfig, libuuid, darwin }:
3+
4+let
5+ version = "4.7.2";
6+ source = fetchFromGitHub {
7+ owner = "antlr";
8+ repo = "antlr4";
9+ rev = version;
10+ sha256 = "1pl0zs6c6wx9nmq30s7ccpc3dl72az55i8vfp574fw9sywmvxmlj";
11+ };
12+
13+ runtime = {
14+ cpp = stdenv.mkDerivation {
15+ pname = "antlr-runtime-cpp";
16+ inherit version;
17+ src = source;
18+
19+ outputs = [ "out" "dev" "doc" ];
20+
21+ nativeBuildInputs = [ cmake ninja pkgconfig ];
22+ buildInputs = stdenv.lib.optional stdenv.isLinux libuuid
23+ ++ stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.CoreFoundation;
24+
25+ postUnpack = ''
26+ export sourceRoot=$sourceRoot/runtime/Cpp
27+ '';
28+
29+ meta = with stdenv.lib; {
30+ description = "C++ target for ANTLR 4";
31+ homepage = "https://www.antlr.org/";
32+ license = licenses.bsd3;
33+ platforms = platforms.unix;
34+ };
35+ };
36+ };
37+
38+ antlr = stdenv.mkDerivation {
39+ pname = "antlr";
40+ inherit version;
41+
42+ src = fetchurl {
43+ url ="https://www.antlr.org/download/antlr-${version}-complete.jar";
44+ sha256 = "1d40nfkq3ws8g4ksx4gj6l6m2l9j4b605q6sf68z5vvmg5nkhlk8";
45+ };
46+
47+ dontUnpack = true;
48+
49+ installPhase = ''
50+ mkdir -p "$out"/{share/java,bin}
51+ cp "$src" "$out/share/java/antlr-${version}-complete.jar"
52+
53+ echo "#! ${stdenv.shell}" >> "$out/bin/antlr"
54+ echo "'${jre}/bin/java' -cp '$out/share/java/antlr-${version}-complete.jar:$CLASSPATH' -Xmx500M org.antlr.v4.Tool \"\$@\"" >> "$out/bin/antlr"
55+
56+ echo "#! ${stdenv.shell}" >> "$out/bin/grun"
57+ echo "'${jre}/bin/java' -cp '$out/share/java/antlr-${version}-complete.jar:$CLASSPATH' org.antlr.v4.gui.TestRig \"\$@\"" >> "$out/bin/grun"
58+
59+ chmod a+x "$out/bin/antlr" "$out/bin/grun"
60+ ln -s "$out/bin/antlr"{,4}
61+ '';
62+
63+ inherit jre;
64+
65+ passthru = {
66+ inherit runtime;
67+ jarLocation = "${antlr}/share/java/antlr-${version}-complete.jar";
68+ };
69+
70+ meta = with stdenv.lib; {
71+ description = "Powerful parser generator";
72+ longDescription = ''
73+ ANTLR (ANother Tool for Language Recognition) is a powerful parser
74+ generator for reading, processing, executing, or translating structured
75+ text or binary files. It's widely used to build languages, tools, and
76+ frameworks. From a grammar, ANTLR generates a parser that can build and
77+ walk parse trees.
78+ '';
79+ homepage = "https://www.antlr.org/";
80+ license = licenses.bsd3;
81+ platforms = platforms.unix;
82+ };
83+ };
84+in antlr
test/golden/importless/4.9.9.nixnew file+26
@@ -0,0 +1,26 @@
1+{stdenv, fetchurl, libdvdcss}:
2+
3+stdenv.mkDerivation {
4+ name = "libdvdread-4.9.9";
5+
6+ src = fetchurl {
7+ url = "http://dvdnav.mplayerhq.hu/releases/libdvdread-4.9.9.tar.xz";
8+ sha256 = "d91275471ef69d488b05cf15c60e1cd65e17648bfc692b405787419f47ca424a";
9+ };
10+
11+ buildInputs = [libdvdcss];
12+
13+ NIX_LDFLAGS = "-ldvdcss";
14+
15+ postInstall = ''
16+ ln -s dvdread $out/include/libdvdread
17+ '';
18+
19+ meta = {
20+ homepage = "http://dvdnav.mplayerhq.hu/";
21+ description = "A library for reading DVDs";
22+ license = stdenv.lib.licenses.gpl2;
23+ maintainers = [ stdenv.lib.maintainers.wmertens ];
24+ platforms = stdenv.lib.platforms.linux;
25+ };
26+}
test/golden/importless/4.9.9.txtnew file+29
@@ -0,0 +1,29 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { NIX_LDFLAGS = String;
5+ buildInputs = [γ];
6+ meta =
7+ { description = String;
8+ homepage = String;
9+ license = δ;
10+ maintainers = [ε];
11+ platforms = ζ;
12+ };
13+ name = String;
14+ postInstall = String;
15+ src = η;
16+ } ->
17+ θ,
18+ β.licenses = ι,
19+ ι.gpl2 = δ,
20+ κ.maintainers = λ,
21+ λ.wmertens = ε,
22+ μ.platforms = ν,
23+ ν.linux = ζ
24+) =>
25+{ fetchurl = {sha256 = String; url = String;} -> η;
26+ libdvdcss = γ;
27+ stdenv = α;
28+} ->
29+θ
test/golden/importless/4.9.nixnew file+71
@@ -0,0 +1,71 @@
1+{ stdenv, fetchurl, python2Packages, makeWrapper, unzip
2+, guiSupport ? false, tk ? null
3+, ApplicationServices
4+, mercurialSrc ? fetchurl rec {
5+ meta.name = "mercurial-${meta.version}";
6+ meta.version = "4.9.1";
7+ url = "https://mercurial-scm.org/release/${meta.name}.tar.gz";
8+ sha256 = "0iybbkd9add066729zg01kwz5hhc1s6lhp9rrnsmzq6ihyxj3p8v";
9+ }
10+}:
11+
12+let
13+ inherit (python2Packages) docutils hg-git dulwich python;
14+
15+in python2Packages.buildPythonApplication {
16+
17+ inherit (mercurialSrc.meta) name version;
18+ src = mercurialSrc;
19+
20+ format = "other";
21+
22+ inherit python; # pass it so that the same version can be used in hg2git
23+
24+ buildInputs = [ makeWrapper docutils unzip ]
25+ ++ stdenv.lib.optionals stdenv.isDarwin [ ApplicationServices ];
26+
27+ propagatedBuildInputs = [ hg-git dulwich ];
28+
29+ makeFlags = [ "PREFIX=$(out)" ];
30+
31+ postInstall = (stdenv.lib.optionalString guiSupport
32+ ''
33+ mkdir -p $out/etc/mercurial
34+ cp contrib/hgk $out/bin
35+ cat >> $out/etc/mercurial/hgrc << EOF
36+ [extensions]
37+ hgk=$out/lib/${python.libPrefix}/site-packages/hgext/hgk.py
38+ EOF
39+ # setting HG so that hgk can be run itself as well (not only hg view)
40+ WRAP_TK=" --set TK_LIBRARY ${tk}/lib/${tk.libPrefix}
41+ --set HG $out/bin/hg
42+ --prefix PATH : ${tk}/bin "
43+ '') +
44+ ''
45+ for i in $(cd $out/bin && ls); do
46+ wrapProgram $out/bin/$i \
47+ $WRAP_TK
48+ done
49+
50+ # copy hgweb.cgi to allow use in apache
51+ mkdir -p $out/share/cgi-bin
52+ cp -v hgweb.cgi contrib/hgweb.wsgi $out/share/cgi-bin
53+ chmod u+x $out/share/cgi-bin/hgweb.cgi
54+
55+ # install bash/zsh completions
56+ install -v -m644 -D contrib/bash_completion $out/share/bash-completion/completions/_hg
57+ install -v -m644 -D contrib/zsh_completion $out/share/zsh/site-functions/_hg
58+ '';
59+
60+ meta = {
61+ inherit (mercurialSrc.meta) version;
62+ description = "A fast, lightweight SCM system for very large distributed projects";
63+ homepage = "https://www.mercurial-scm.org";
64+ downloadPage = "https://www.mercurial-scm.org/release/";
65+ license = stdenv.lib.licenses.gpl2;
66+ maintainers = [ stdenv.lib.maintainers.eraserhd ];
67+ updateWalker = true;
68+ platforms = stdenv.lib.platforms.unix;
69+ };
70+}
71+
test/golden/importless/4.nixnew file+9
@@ -0,0 +1,9 @@
1+{ callPackage, Foundation, libobjc }:
2+
3+callPackage ./generic.nix ({
4+ inherit Foundation libobjc;
5+ version = "4.8.1.0";
6+ sha256 = "1vyvp2g28ihcgxgxr8nhzyzdmzicsh5djzk8dk1hj5p5f2k3ijqq";
7+ enableParallelBuilding = false; # #32386, https://hydra.nixos.org/build/65600645
8+ extraPatches = [ ./mono4-glibc.patch ];
9+})
test/golden/importless/4.txtnew file+15
@@ -0,0 +1,15 @@
1+∀ α β γ.
2+{ Foundation = α;
3+ callPackage =
4+ String ->
5+ { Foundation = α;
6+ enableParallelBuilding = Bool;
7+ extraPatches = [String];
8+ libobjc = β;
9+ sha256 = String;
10+ version = String;
11+ } ->
12+ γ;
13+ libobjc = β;
14+} ->
15+γ
test/golden/importless/4.x.nixnew file+157
@@ -0,0 +1,157 @@
1+{ stdenv
2+, fetchurl
3+, python
4+, pkgconfig
5+, bison
6+, flex
7+, perl
8+, libxslt
9+, docbook_xsl
10+, rpcgen
11+, fixDarwinDylibNames
12+, docbook_xml_dtd_45
13+, readline
14+, popt
15+, libbsd
16+, libarchive
17+, zlib
18+, liburing
19+, fam
20+, gnutls
21+, libunwind
22+, systemd
23+, jansson
24+, libtasn1
25+, tdb
26+, cmocka
27+, nixosTests
28+
29+, enableLDAP ? false, openldap
30+, enablePrinting ? false, cups
31+, enableProfiling ? true
32+, enableMDNS ? false, avahi
33+, enableDomainController ? false, gpgme, lmdb
34+, enableRegedit ? true, ncurses
35+, enableCephFS ? false, libceph
36+, enableGlusterFS ? false, glusterfs, libuuid
37+, enableAcl ? (!stdenv.isDarwin), acl
38+, enablePam ? (!stdenv.isDarwin), pam
39+}:
40+
41+with stdenv.lib;
42+
43+stdenv.mkDerivation rec {
44+ pname = "samba";
45+ version = "4.12.6";
46+
47+ src = fetchurl {
48+ url = "mirror://samba/pub/samba/stable/${pname}-${version}.tar.gz";
49+ sha256 = "1v3cmw40csmi3jd8mhlx4bm7bk4m0426zkyin7kq11skwnsrna02";
50+ };
51+
52+ outputs = [ "out" "dev" "man" ];
53+
54+ patches = [
55+ ./4.x-no-persistent-install.patch
56+ ./patch-source3__libads__kerberos_keytab.c.patch
57+ ./4.x-no-persistent-install-dynconfig.patch
58+ ./4.x-fix-makeflags-parsing.patch
59+ ];
60+
61+ nativeBuildInputs = [
62+ pkgconfig
63+ bison
64+ flex
65+ perl
66+ perl.pkgs.ParseYapp
67+ libxslt
68+ docbook_xsl
69+ docbook_xml_dtd_45
70+ cmocka
71+ ] ++ optionals stdenv.isDarwin [
72+ rpcgen
73+ fixDarwinDylibNames
74+ ];
75+
76+ buildInputs = [
77+ python
78+ readline
79+ popt
80+ jansson
81+ libbsd
82+ libarchive
83+ zlib
84+ fam
85+ libunwind
86+ gnutls
87+ libtasn1
88+ tdb
89+ ] ++ optionals stdenv.isLinux [ liburing systemd ]
90+ ++ optional enableLDAP openldap
91+ ++ optional (enablePrinting && stdenv.isLinux) cups
92+ ++ optional enableMDNS avahi
93+ ++ optionals enableDomainController [ gpgme lmdb ]
94+ ++ optional enableRegedit ncurses
95+ ++ optional (enableCephFS && stdenv.isLinux) libceph
96+ ++ optionals (enableGlusterFS && stdenv.isLinux) [ glusterfs libuuid ]
97+ ++ optional enableAcl acl
98+ ++ optional enablePam pam;
99+
100+ postPatch = ''
101+ # Removes absolute paths in scripts
102+ sed -i 's,/sbin/,,g' ctdb/config/functions
103+
104+ # Fix the XML Catalog Paths
105+ sed -i "s,\(XML_CATALOG_FILES=\"\),\1$XML_CATALOG_FILES ,g" buildtools/wafsamba/wafsamba.py
106+
107+ patchShebangs ./buildtools/bin
108+ '';
109+
110+ configureFlags = [
111+ "--with-static-modules=NONE"
112+ "--with-shared-modules=ALL"
113+ "--enable-fhs"
114+ "--sysconfdir=/etc"
115+ "--localstatedir=/var"
116+ "--disable-rpath"
117+ ] ++ optional (!enableDomainController)
118+ "--without-ad-dc"
119+ ++ optionals (!enableLDAP) [
120+ "--without-ldap"
121+ "--without-ads"
122+ ] ++ optional enableProfiling "--with-profiling-data"
123+ ++ optional (!enableAcl) "--without-acl-support"
124+ ++ optional (!enablePam) "--without-pam";
125+
126+ preBuild = ''
127+ export MAKEFLAGS="-j $NIX_BUILD_CORES"
128+ '';
129+
130+ # Some libraries don't have /lib/samba in RPATH but need it.
131+ # Use find -type f -executable -exec echo {} \; -exec sh -c 'ldd {} | grep "not found"' \;
132+ # Looks like a bug in installer scripts.
133+ postFixup = ''
134+ export SAMBA_LIBS="$(find $out -type f -name \*.so -exec dirname {} \; | sort | uniq)"
135+ read -r -d "" SCRIPT << EOF || true
136+ [ -z "\$SAMBA_LIBS" ] && exit 1;
137+ BIN='{}';
138+ OLD_LIBS="\$(patchelf --print-rpath "\$BIN" 2>/dev/null | tr ':' '\n')";
139+ ALL_LIBS="\$(echo -e "\$SAMBA_LIBS\n\$OLD_LIBS" | sort | uniq | tr '\n' ':')";
140+ patchelf --set-rpath "\$ALL_LIBS" "\$BIN" 2>/dev/null || exit $?;
141+ patchelf --shrink-rpath "\$BIN";
142+ EOF
143+ find $out -type f -name \*.so -exec $SHELL -c "$SCRIPT" \;
144+ '';
145+
146+ passthru = {
147+ tests.samba = nixosTests.samba;
148+ };
149+
150+ meta = with stdenv.lib; {
151+ homepage = "https://www.samba.org";
152+ description = "The standard Windows interoperability suite of programs for Linux and Unix";
153+ license = licenses.gpl3;
154+ platforms = platforms.unix;
155+ maintainers = with maintainers; [ aneeshusa ];
156+ };
157+}
test/golden/importless/422.nixnew file+33
@@ -0,0 +1,33 @@
1+{ stdenv, fetchurl }:
2+
3+stdenv.mkDerivation {
4+ name = "gnused-4.2.2";
5+
6+ src = fetchurl {
7+ url = "mirror://gnu/sed/sed-4.2.2.tar.bz2";
8+ sha256 = "f048d1838da284c8bc9753e4506b85a1e0cc1ea8999d36f6995bcb9460cddbd7";
9+ };
10+
11+ configureFlags = stdenv.lib.optional stdenv.hostPlatform.isMinGW "ac_cv_func__set_invalid_parameter_handler=no";
12+
13+ outputs = [ "out" "info" ];
14+
15+ meta = {
16+ homepage = "https://www.gnu.org/software/sed/";
17+ description = "GNU sed, a batch stream editor";
18+
19+ longDescription = ''
20+ Sed (stream editor) isn't really a true text editor or text
21+ processor. Instead, it is used to filter text, i.e., it takes
22+ text input and performs some operation (or set of operations) on
23+ it and outputs the modified text. Sed is typically used for
24+ extracting part of a file using pattern matching or substituting
25+ multiple occurrences of a string within a file.
26+ '';
27+
28+ license = stdenv.lib.licenses.gpl3Plus;
29+
30+ platforms = stdenv.lib.platforms.all;
31+ maintainers = [ ];
32+ };
33+}
test/golden/importless/422.txtnew file+26
@@ -0,0 +1,26 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ.
2+( β.hostPlatform = γ,
3+ β.lib = δ,
4+ β.mkDerivation =
5+ { configureFlags = ε;
6+ meta =
7+ { description = String;
8+ homepage = String;
9+ license = ζ;
10+ longDescription = String;
11+ maintainers = ∀ α. [α];
12+ platforms = η;
13+ };
14+ name = String;
15+ outputs = [String];
16+ src = θ;
17+ } ->
18+ ι,
19+ δ.optional = κ -> String -> ε,
20+ γ.isMinGW = κ,
21+ λ.licenses = μ,
22+ μ.gpl3Plus = ζ,
23+ ν.platforms = ξ,
24+ ξ.all = η
25+) =>
26+{fetchurl = {sha256 = String; url = String;} -> θ; stdenv = β;} -> ι
test/golden/importless/44.0.nixnew file+74
@@ -0,0 +1,74 @@
1+{ stdenv
2+, buildPythonPackage
3+, fetchFromGitHub
4+, python
5+, wrapPython
6+, unzip
7+, callPackage
8+, bootstrapped-pip
9+, lib
10+, pipInstallHook
11+, setuptoolsBuildHook
12+}:
13+
14+let
15+ pname = "setuptools";
16+ version = "44.0.0";
17+
18+ # Create an sdist of setuptools
19+ sdist = stdenv.mkDerivation rec {
20+ name = "${pname}-${version}-sdist.tar.gz";
21+
22+ src = fetchFromGitHub {
23+ owner = "pypa";
24+ repo = pname;
25+ rev = "v${version}";
26+ sha256 = "0z3q0qinyp1rmnxkw3y5f6nbsxhqlfq5k7skfrqa6ymb3zr009y1";
27+ name = "${pname}-${version}-source";
28+ };
29+
30+ buildPhase = ''
31+ ${python.pythonForBuild.interpreter} bootstrap.py
32+ ${python.pythonForBuild.interpreter} setup.py sdist --formats=gztar
33+ '';
34+
35+ installPhase = ''
36+ echo "Moving sdist..."
37+ mv dist/*.tar.gz $out
38+ '';
39+ };
40+in buildPythonPackage rec {
41+ inherit pname version;
42+ # Because of bootstrapping we don't use the setuptoolsBuildHook that comes with format="setuptools" directly.
43+ # Instead, we override it to remove setuptools to avoid a circular dependency.
44+ # The same is done for pip and the pipInstallHook.
45+ format = "other";
46+
47+ src = sdist;
48+
49+ nativeBuildInputs = [
50+ bootstrapped-pip
51+ (pipInstallHook.override{pip=null;})
52+ (setuptoolsBuildHook.override{setuptools=null; wheel=null;})
53+ ];
54+
55+ preBuild = lib.strings.optionalString (!stdenv.hostPlatform.isWindows) ''
56+ export SETUPTOOLS_INSTALL_WINDOWS_SPECIFIC_FILES=0
57+ '';
58+
59+ pipInstallFlags = [ "--ignore-installed" ];
60+
61+ # Adds setuptools to nativeBuildInputs causing infinite recursion.
62+ catchConflicts = false;
63+
64+ # Requires pytest, causing infinite recursion.
65+ doCheck = false;
66+
67+ meta = with stdenv.lib; {
68+ description = "Utilities to facilitate the installation of Python packages";
69+ homepage = "https://pypi.python.org/pypi/setuptools";
70+ license = with licenses; [ psfl zpl20 ];
71+ platforms = python.meta.platforms;
72+ priority = 10;
73+ };
74+}
test/golden/importless/44.0.txtnew file+54
@@ -0,0 +1,54 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ.
2+( β.hostPlatform = γ,
3+ β.lib = δ,
4+ β.mkDerivation =
5+ {buildPhase = String; installPhase = String; name = String; src = ε;} -> ζ,
6+ η.meta = θ,
7+ ι.strings = κ,
8+ λ.override = {pip = Null;} -> μ,
9+ ν.override = {setuptools = Null; wheel = Null;} -> μ,
10+ γ.isWindows = Bool,
11+ δ.licenses = ξ,
12+ δ.psfl = ο,
13+ δ.zpl20 = ο,
14+ θ.platforms = π,
15+ κ.optionalString = Bool -> String -> ρ
16+) =>
17+{ bootstrapped-pip = μ;
18+ buildPythonPackage =
19+ { catchConflicts = Bool;
20+ doCheck = Bool;
21+ format = String;
22+ meta =
23+ { description = String;
24+ homepage = String;
25+ license = [ο];
26+ platforms = π;
27+ priority = Number;
28+ };
29+ nativeBuildInputs = [μ];
30+ pipInstallFlags = [String];
31+ pname = ∀ α. α;
32+ preBuild = ρ;
33+ src = ζ;
34+ version = ∀ α. α;
35+ } ->
36+ σ;
37+ callPackage = τ;
38+ fetchFromGitHub =
39+ { name = String;
40+ owner = String;
41+ repo = String;
42+ rev = String;
43+ sha256 = String;
44+ } ->
45+ ε;
46+ lib = ι;
47+ pipInstallHook = λ;
48+ python = η;
49+ setuptoolsBuildHook = ν;
50+ stdenv = β;
51+ unzip = υ;
52+ wrapPython = φ;
53+} ->
54+σ
test/golden/importless/4_0.nixnew file+33
@@ -0,0 +1,33 @@
1+{ stdenv
2+, buildPythonPackage
3+, fetchPypi
4+, unittest2
5+, pyasn1
6+, mock
7+, isPy3k
8+, pythonOlder
9+}:
10+
11+buildPythonPackage rec {
12+ pname = "rsa";
13+ version = "4.0";
14+
15+ src = fetchPypi {
16+ inherit pname version;
17+ sha256 = "1a836406405730121ae9823e19c6e806c62bbad73f890574fff50efa4122c487";
18+ };
19+
20+ checkInputs = [ unittest2 mock ];
21+ propagatedBuildInputs = [ pyasn1 ];
22+
23+ preConfigure = stdenv.lib.optionalString (isPy3k && pythonOlder "3.7") ''
24+ substituteInPlace setup.py --replace "open('README.md')" "open('README.md',encoding='utf-8')"
25+ '';
26+
27+ meta = with stdenv.lib; {
28+ homepage = "https://stuvel.eu/rsa";
29+ license = licenses.asl20;
30+ description = "A pure-Python RSA implementation";
31+ };
32+
33+}
test/golden/importless/5.1.138.nixnew file+29
@@ -0,0 +1,29 @@
1+{ stdenv, fetchurl, b43FirmwareCutter }:
2+
3+let version = "5.100.138"; in
4+
5+stdenv.mkDerivation {
6+ pname = "b43-firmware";
7+ inherit version;
8+
9+ src = fetchurl {
10+ url = "http://www.lwfinger.com/b43-firmware/broadcom-wl-${version}.tar.bz2";
11+ sha256 = "0vz4ka8gycf72gmnaq61k8rh8y17j1wm2k3fidxvcqjvmix0drzi";
12+ };
13+
14+ buildInputs = [ b43FirmwareCutter ];
15+
16+ phases = [ "unpackPhase" "installPhase" ];
17+
18+ installPhase = ''
19+ mkdir -p $out/lib/firmware
20+ b43-fwcutter -w $out/lib/firmware linux/wl_apsta.o
21+ '';
22+
23+ meta = {
24+ description = "Firmware for cards supported by the b43 kernel module";
25+ homepage = "http://wireless.kernel.org/en/users/Drivers/b43";
26+ license = stdenv.lib.licenses.unfree;
27+ };
28+}
29+
test/golden/importless/5.1.138.txtnew file+20
@@ -0,0 +1,20 @@
1+∀ α β γ δ ε ζ η.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ installPhase = String;
6+ meta = {description = String; homepage = String; license = δ;};
7+ phases = [String];
8+ pname = String;
9+ src = ε;
10+ version = String;
11+ } ->
12+ ζ,
13+ β.licenses = η,
14+ η.unfree = δ
15+) =>
16+{ b43FirmwareCutter = γ;
17+ fetchurl = {sha256 = String; url = String;} -> ε;
18+ stdenv = α;
19+} ->
20+ζ
test/golden/importless/5.1.x.nixnew file+78
@@ -0,0 +1,78 @@
1+{ stdenv, fetchurl, m4, cxx ? true, withStatic ? true }:
2+
3+let inherit (stdenv.lib) optional; in
4+
5+let self = stdenv.mkDerivation rec {
6+ name = "gmp-5.1.3";
7+
8+ src = fetchurl { # we need to use bz2, others aren't in bootstrapping stdenv
9+ urls = [ "mirror://gnu/gmp/${name}.tar.bz2" "ftp://ftp.gmplib.org/pub/${name}/${name}.tar.bz2" ];
10+ sha256 = "0q5i39pxrasgn9qdxzpfbwhh11ph80p57x6hf48m74261d97j83m";
11+ };
12+
13+ #outputs TODO: split $cxx due to libstdc++ dependency
14+ # maybe let ghc use a version with *.so shared with rest of nixpkgs and *.a added
15+ # - see #5855 for related discussion
16+ outputs = [ "out" "dev" "info" ];
17+ passthru.static = self.out;
18+
19+ nativeBuildInputs = [ m4 ];
20+
21+ patches = if stdenv.isDarwin then [ ./need-size-t.patch ] else null;
22+
23+ configureFlags = [
24+ "--with-pic"
25+ (stdenv.lib.enableFeature cxx "cxx")
26+ # Build a "fat binary", with routines for several sub-architectures
27+ # (x86), except on Solaris where some tests crash with "Memory fault".
28+ # See <https://hydra.nixos.org/build/2760931>, for instance.
29+ #
30+ # no darwin because gmp uses ASM that clang doesn't like
31+ (stdenv.lib.enableFeature (!stdenv.isSunOS && stdenv.hostPlatform.isx86) "fat")
32+ # The config.guess in GMP tries to runtime-detect various
33+ # ARM optimization flags via /proc/cpuinfo (and is also
34+ # broken on multicore CPUs). Avoid this impurity.
35+ "--build=${stdenv.buildPlatform.config}"
36+ ] ++ optional (cxx && stdenv.isDarwin) "CPPFLAGS=-fexceptions"
37+ ++ optional (stdenv.isDarwin && stdenv.is64bit) "ABI=64"
38+ ;
39+
40+ doCheck = true;
41+
42+ dontDisableStatic = withStatic;
43+
44+ enableParallelBuilding = true;
45+
46+ meta = with stdenv.lib; {
47+ homepage = "https://gmplib.org/";
48+ description = "GNU multiple precision arithmetic library";
49+ license = licenses.gpl3Plus;
50+
51+ longDescription =
52+ '' GMP is a free library for arbitrary precision arithmetic, operating
53+ on signed integers, rational numbers, and floating point numbers.
54+ There is no practical limit to the precision except the ones implied
55+ by the available memory in the machine GMP runs on. GMP has a rich
56+ set of functions, and the functions have a regular interface.
57+
58+ The main target applications for GMP are cryptography applications
59+ and research, Internet security applications, algebra systems,
60+ computational algebra research, etc.
61+
62+ GMP is carefully designed to be as fast as possible, both for small
63+ operands and for huge operands. The speed is achieved by using
64+ fullwords as the basic arithmetic type, by using fast algorithms,
65+ with highly optimised assembly code for the most common inner loops
66+ for a lot of CPUs, and by a general emphasis on speed.
67+
68+ GMP is faster than any other bignum library. The advantage for GMP
69+ increases with the operand sizes for many operations, since GMP uses
70+ asymptotically faster algorithms.
71+ '';
72+
73+ platforms = platforms.all;
74+ badPlatforms = [ "x86_64-darwin" ];
75+ maintainers = [ maintainers.peti ];
76+ };
77+};
78+ in self
test/golden/importless/5.2.nixnew file+20
@@ -0,0 +1,20 @@
1+{ stdenv, fetchurl }:
2+
3+stdenv.mkDerivation {
4+ name = "proj-5.2.0";
5+
6+ src = fetchurl {
7+ url = "https://download.osgeo.org/proj/proj-5.2.0.tar.gz";
8+ sha256 = "0q3ydh2j8qhwlxmnac72pg69rw2znbi5b6k5wama8qmwzycr94gg";
9+ };
10+
11+ doCheck = stdenv.is64bit;
12+
13+ meta = with stdenv.lib; {
14+ description = "Cartographic Projections Library";
15+ homepage = "https://proj4.org";
16+ license = licenses.mit;
17+ platforms = platforms.linux ++ platforms.darwin;
18+ maintainers = with maintainers; [ vbgl ];
19+ };
20+}
test/golden/importless/5.2.txtnew file+25
@@ -0,0 +1,25 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ.
2+( α.is64bit = β,
3+ α.lib = γ,
4+ α.mkDerivation =
5+ { doCheck = β;
6+ meta =
7+ { description = String;
8+ homepage = String;
9+ license = δ;
10+ maintainers = [ε];
11+ platforms = [ζ];
12+ };
13+ name = String;
14+ src = η;
15+ } ->
16+ θ,
17+ γ.licenses = ι,
18+ γ.maintainers = κ,
19+ γ.platforms = λ,
20+ γ.vbgl = ε,
21+ ι.mit = δ,
22+ λ.linux = [ζ],
23+ μ.darwin = [ζ]
24+) =>
25+{fetchurl = {sha256 = String; url = String;} -> η; stdenv = α;} -> θ
test/golden/importless/5.41.nixnew file+102
@@ -0,0 +1,102 @@
1+{ stdenv, fetchurl, fetchpatch, sbcl, texinfo, perl, python, makeWrapper, rlwrap ? null
2+, tk ? null, gnuplot ? null, ecl ? null, ecl-fasl ? false
3+}:
4+
5+let
6+ name = "maxima";
7+ # old version temporarily kept for sage, see discussion at
8+ # https://github.com/NixOS/nixpkgs/commit/82254747af35f3e0e0d6f78023ded3a81e25331b
9+ version = "5.41.0";
10+
11+ searchPath =
12+ stdenv.lib.makeBinPath
13+ (stdenv.lib.filter (x: x != null) [ sbcl ecl rlwrap tk gnuplot ]);
14+in
15+stdenv.mkDerivation ({
16+ inherit version;
17+ name = "${name}-${version}";
18+
19+ src = fetchurl {
20+ url = "mirror://sourceforge/${name}/${name}-${version}.tar.gz";
21+ sha256 = "0x0n81z0s4pl8nwpf7ivlsbvsdphm9w42250g7qdkizl0132by6s";
22+ };
23+
24+ buildInputs = stdenv.lib.filter (x: x != null) [
25+ sbcl ecl texinfo perl python makeWrapper
26+ ];
27+
28+ postInstall = ''
29+ # Make sure that maxima can find its runtime dependencies.
30+ for prog in "$out/bin/"*; do
31+ wrapProgram "$prog" --prefix PATH ":" "$out/bin:${searchPath}"
32+ done
33+ # Move emacs modules and documentation into the right place.
34+ mkdir -p $out/share/emacs $out/share/doc
35+ ln -s ../maxima/${version}/emacs $out/share/emacs/site-lisp
36+ ln -s ../maxima/${version}/doc $out/share/doc/maxima
37+ ''
38+ + (stdenv.lib.optionalString ecl-fasl ''
39+ cp src/binary-ecl/maxima.fas* "$out/lib/maxima/${version}/binary-ecl/"
40+ '')
41+ ;
42+
43+ patches = [
44+ # fix path to info dir (see https://trac.sagemath.org/ticket/11348)
45+ (fetchpatch {
46+ url = "https://git.sagemath.org/sage.git/plain/build/pkgs/maxima/patches/infodir.patch?id=07d6c37d18811e2b377a9689790a7c5e24da16ba";
47+ sha256 = "09v64n60f7i6frzryrj0zd056lvdpms3ajky4f9p6kankhbiv21x";
48+ })
49+
50+ # fix https://sourceforge.net/p/maxima/bugs/2596/
51+ (fetchpatch {
52+ url = "https://git.sagemath.org/sage.git/plain/build/pkgs/maxima/patches/matrixexp.patch?id=07d6c37d18811e2b377a9689790a7c5e24da16ba";
53+ sha256 = "06961hn66rhjijfvyym21h39wk98sfxhp051da6gz0n9byhwc6zg";
54+ })
55+
56+ # undo https://sourceforge.net/p/maxima/code/ci/f5e9b0f7eb122c4e48ea9df144dd57221e5ea0ca, see see https://trac.sagemath.org/ticket/13364#comment:93
57+ (fetchpatch {
58+ url = "https://git.sagemath.org/sage.git/plain/build/pkgs/maxima/patches/undoing_true_false_printing_patch.patch?id=07d6c37d18811e2b377a9689790a7c5e24da16ba";
59+ sha256 = "0fvi3rcjv6743sqsbgdzazy9jb6r1p1yq63zyj9fx42wd1hgf7yx";
60+ })
61+
62+ # upstream bug https://sourceforge.net/p/maxima/bugs/2520/ (not fixed)
63+ # introduced in https://trac.sagemath.org/ticket/13364
64+ (fetchpatch {
65+ url = "https://git.sagemath.org/sage.git/plain/build/pkgs/maxima/patches/0001-taylor2-Avoid-blowing-the-stack-when-diff-expand-isn.patch?id=07d6c37d18811e2b377a9689790a7c5e24da16ba";
66+ sha256 = "0xa0b6cr458zp7lc7qi0flv5ar0r3ivsqhjl0c3clv86di2y522d";
67+ })
68+ ] ++ stdenv.lib.optionals ecl-fasl [
69+ # build fasl, needed for ECL support
70+ (fetchpatch {
71+ url = "https://git.sagemath.org/sage.git/plain/build/pkgs/maxima/patches/maxima.system.patch?id=07d6c37d18811e2b377a9689790a7c5e24da16ba";
72+ sha256 = "18zafig8vflhkr80jq2ivk46k92dkszqlyq8cfmj0b2vcfjwwbar";
73+ })
74+ # There are some transient test failures. I hope this disables all those tests.
75+ # If those test failures ever happen in the non-ecl version, that should be
76+ # reportetd upstream.
77+ ./known-ecl-failures.patch
78+ ];
79+
80+ # Failures in the regression test suite won't abort the build process. We run
81+ # the suite only so that potential errors show up in the build log. See also:
82+ # https://sourceforge.net/tracker/?func=detail&aid=3365831&group_id=4933&atid=104933.
83+ doCheck = true;
84+
85+ enableParallelBuilding = true;
86+
87+ meta = {
88+ description = "Computer algebra system";
89+ homepage = "http://maxima.sourceforge.net";
90+ license = stdenv.lib.licenses.gpl2;
91+
92+ longDescription = ''
93+ Maxima is a fairly complete computer algebra system written in
94+ lisp with an emphasis on symbolic computation. It is based on
95+ DOE-MACSYMA and licensed under the GPL. Its abilities include
96+ symbolic integration, 3D plotting, and an ODE solver.
97+ '';
98+
99+ platforms = stdenv.lib.platforms.unix;
100+ maintainers = [ stdenv.lib.maintainers.peti ];
101+ };
102+})
test/golden/importless/5.41.txtnew file+48
@@ -0,0 +1,48 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = γ;
5+ doCheck = Bool;
6+ enableParallelBuilding = Bool;
7+ meta =
8+ { description = String;
9+ homepage = String;
10+ license = δ;
11+ longDescription = String;
12+ maintainers = [ε];
13+ platforms = ζ;
14+ };
15+ name = String;
16+ patches = [String];
17+ postInstall = String;
18+ src = η;
19+ version = String;
20+ } ->
21+ θ,
22+ β.makeBinPath = ι -> κ,
23+ λ.filter = (Null -> Bool) -> [Null] -> ι,
24+ μ.filter = (Null -> Bool) -> [Null] -> γ,
25+ ν.licenses = ξ,
26+ ξ.gpl2 = δ,
27+ ο.maintainers = π,
28+ π.peti = ε,
29+ ρ.platforms = σ,
30+ σ.unix = ζ,
31+ τ.optionals = Bool -> [String] -> [String],
32+ υ.optionalString = Bool -> String -> String
33+) =>
34+{ ecl = Null;
35+ ecl-fasl = Bool;
36+ fetchpatch = {sha256 = String; url = String;} -> String;
37+ fetchurl = {sha256 = String; url = String;} -> η;
38+ gnuplot = Null;
39+ makeWrapper = Null;
40+ perl = Null;
41+ python = Null;
42+ rlwrap = Null;
43+ sbcl = Null;
44+ stdenv = α;
45+ texinfo = Null;
46+ tk = Null;
47+} ->
48+θ
test/golden/importless/5.6.nixnew file+34
@@ -0,0 +1,34 @@
1+{stdenv, fetchurl, autoreconfHook}:
2+
3+let
4+ version = "5.6";
5+in
6+
7+stdenv.mkDerivation {
8+ pname = "polyml";
9+ inherit version;
10+
11+ prePatch = stdenv.lib.optionalString stdenv.isDarwin ''
12+ substituteInPlace configure.ac --replace stdc++ c++
13+ '';
14+
15+ buildInputs = stdenv.lib.optional stdenv.isDarwin autoreconfHook;
16+
17+ src = fetchurl {
18+ url = "mirror://sourceforge/polyml/polyml.${version}.tar.gz";
19+ sha256 = "05d6l2a5m9jf32a8kahwg2p2ph4x9rjf1nsl83331q3gwn5bkmr0";
20+ };
21+
22+ meta = {
23+ description = "Standard ML compiler and interpreter";
24+ longDescription = ''
25+ Poly/ML is a full implementation of Standard ML.
26+ '';
27+ homepage = "https://www.polyml.org/";
28+ license = stdenv.lib.licenses.lgpl21;
29+ platforms = with stdenv.lib.platforms; linux;
30+ maintainers = [ #Add your name here!
31+ stdenv.lib.maintainers.maggesi
32+ ];
33+ };
34+}
test/golden/importless/5.6.txtnew file+33
@@ -0,0 +1,33 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ.
2+( α.isDarwin = β,
3+ α.lib = γ,
4+ α.mkDerivation =
5+ { buildInputs = δ;
6+ meta =
7+ { description = String;
8+ homepage = String;
9+ license = ε;
10+ longDescription = String;
11+ maintainers = [ζ];
12+ platforms = η;
13+ };
14+ pname = String;
15+ prePatch = θ;
16+ src = ι;
17+ version = String;
18+ } ->
19+ κ,
20+ γ.optional = β -> λ -> δ,
21+ μ.licenses = ν,
22+ ν.lgpl21 = ε,
23+ ξ.maintainers = ο,
24+ ο.maggesi = ζ,
25+ π.platforms = ρ,
26+ ρ.linux = η,
27+ σ.optionalString = τ -> String -> θ
28+) =>
29+{ autoreconfHook = λ;
30+ fetchurl = {sha256 = String; url = String;} -> ι;
31+ stdenv = α;
32+} ->
33+κ
test/golden/importless/5.6.x.nixnew file+61
@@ -0,0 +1,61 @@
1+{ stdenv, fetchurl, cmake, bison, ncurses, openssl, zlib, libaio, perl }:
2+
3+stdenv.mkDerivation rec {
4+ pname = "percona-server";
5+ version = "5.6.49-89.0";
6+
7+ src = fetchurl {
8+ url = "https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-${version}/source/tarball/percona-server-${version}.tar.gz";
9+ sha256 = "09qqk02iny7jvngyk6k2j0kk2sspc6gw8sm3i6nn97njbkihi697";
10+ };
11+
12+ buildInputs = [ cmake bison ncurses openssl zlib libaio perl ];
13+
14+ enableParallelBuilding = true;
15+
16+ cmakeFlags = [
17+ "-DFEATURE_SET=community"
18+ "-DBUILD_CONFIG=mysql_release"
19+ "-DCMAKE_BUILD_TYPE=RelWithDebInfo"
20+ "-DWITH_SSL=yes"
21+ "-DWITH_READLINE=no"
22+ "-DWITH_EMBEDDED_SERVER=no"
23+ "-DWITH_EDITLINE=bundled"
24+ "-DWITH_ZLIB=yes"
25+ "-DHAVE_IPV6=no"
26+ "-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
27+ "-DMYSQL_DATADIR=/var/lib/mysql"
28+ "-DINSTALL_SYSCONFDIR=etc/mysql"
29+ "-DINSTALL_INFODIR=share/mysql/docs"
30+ "-DINSTALL_MANDIR=share/man"
31+ "-DINSTALL_PLUGINDIR=lib/mysql/plugin"
32+ "-DINSTALL_SCRIPTDIR=bin"
33+ "-DINSTALL_INCLUDEDIR=include/mysql"
34+ "-DINSTALL_DOCREADMEDIR=share/mysql"
35+ "-DINSTALL_SUPPORTFILESDIR=share/mysql"
36+ "-DINSTALL_MYSQLSHAREDIR=share/mysql"
37+ "-DINSTALL_DOCDIR=share/mysql/docs"
38+ "-DINSTALL_SHAREDIR=share/mysql"
39+ ];
40+
41+ NIX_CFLAGS_COMPILE = [ "-Wno-error=address-of-packed-member" ];
42+ NIX_LDFLAGS = "-lgcc_s";
43+
44+ prePatch = ''
45+ sed -i -e "s|/usr/bin/libtool|libtool|" cmake/libutils.cmake
46+ '';
47+ postInstall = ''
48+ sed -i -e "s|basedir=\"\"|basedir=\"$out\"|" $out/bin/mysql_install_db
49+ rm -r $out/mysql-test $out/sql-bench $out/data "$out"/lib/*.a
50+ '';
51+
52+ passthru.mysqlVersion = "5.6";
53+
54+ meta = with stdenv.lib; {
55+ homepage = "https://www.percona.com";
56+ description = "a free, fully compatible, enhanced, open source drop-in replacement for MySQL that provides superior performance, scalability and instrumentation";
57+ platforms = platforms.linux;
58+ license = licenses.gpl2;
59+ maintainers = with maintainers; [ grahamc ];
60+ };
61+}
test/golden/importless/5.6.x.txtnew file+41
@@ -0,0 +1,41 @@
1+∀ α β γ δ ε ζ η θ ι κ λ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { NIX_CFLAGS_COMPILE = [String];
5+ NIX_LDFLAGS = String;
6+ buildInputs = [γ];
7+ cmakeFlags = [String];
8+ enableParallelBuilding = Bool;
9+ meta =
10+ { description = String;
11+ homepage = String;
12+ license = δ;
13+ maintainers = [ε];
14+ platforms = ζ;
15+ };
16+ passthru = {mysqlVersion = String;};
17+ pname = String;
18+ postInstall = String;
19+ prePatch = String;
20+ src = η;
21+ version = String;
22+ } ->
23+ θ,
24+ β.grahamc = ε,
25+ β.licenses = ι,
26+ β.maintainers = κ,
27+ β.platforms = λ,
28+ ι.gpl2 = δ,
29+ λ.linux = ζ
30+) =>
31+{ bison = γ;
32+ cmake = γ;
33+ fetchurl = {sha256 = String; url = String;} -> η;
34+ libaio = γ;
35+ ncurses = γ;
36+ openssl = γ;
37+ perl = γ;
38+ stdenv = α;
39+ zlib = γ;
40+} ->
41+θ
test/golden/importless/5.7.nixnew file+40
@@ -0,0 +1,40 @@
1+{ stdenv, fetchFromGitHub, autoreconfHook, gmp, libffi }:
2+
3+stdenv.mkDerivation rec {
4+ pname = "polyml";
5+ version = "5.7.1";
6+
7+ prePatch = stdenv.lib.optionalString stdenv.isDarwin ''
8+ substituteInPlace configure.ac --replace stdc++ c++
9+ '';
10+
11+ patches = [ ./5.7-new-libffi-FFI_SYSV.patch ];
12+
13+ buildInputs = [ libffi gmp ];
14+
15+ nativeBuildInputs = stdenv.lib.optional stdenv.isDarwin autoreconfHook;
16+
17+ configureFlags = [
18+ "--enable-shared"
19+ "--with-system-libffi"
20+ "--with-gmp"
21+ ];
22+
23+ src = fetchFromGitHub {
24+ owner = "polyml";
25+ repo = "polyml";
26+ rev = "v${version}";
27+ sha256 = "0j0wv3ijfrjkfngy7dswm4k1dchk3jak9chl5735dl8yrl8mq755";
28+ };
29+
30+ meta = with stdenv.lib; {
31+ description = "Standard ML compiler and interpreter";
32+ longDescription = ''
33+ Poly/ML is a full implementation of Standard ML.
34+ '';
35+ homepage = "https://www.polyml.org/";
36+ license = licenses.lgpl21;
37+ platforms = with platforms; (linux ++ darwin);
38+ maintainers = with maintainers; [ maggesi ];
39+ };
40+}
test/golden/importless/5.7.txtnew file+40
@@ -0,0 +1,40 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ.
2+( α.isDarwin = β,
3+ α.lib = γ,
4+ α.mkDerivation =
5+ { buildInputs = [δ];
6+ configureFlags = [String];
7+ meta =
8+ { description = String;
9+ homepage = String;
10+ license = ε;
11+ longDescription = String;
12+ maintainers = [ζ];
13+ platforms = [η];
14+ };
15+ nativeBuildInputs = θ;
16+ patches = [String];
17+ pname = String;
18+ prePatch = ι;
19+ src = κ;
20+ version = String;
21+ } ->
22+ λ,
23+ γ.optionalString = β -> String -> ι,
24+ μ.optional = ν -> ξ -> θ,
25+ ο.darwin = [η],
26+ ο.licenses = π,
27+ ο.linux = [η],
28+ ο.maggesi = ζ,
29+ ο.maintainers = ρ,
30+ ο.platforms = σ,
31+ π.lgpl21 = ε
32+) =>
33+{ autoreconfHook = ξ;
34+ fetchFromGitHub =
35+ {owner = String; repo = String; rev = String; sha256 = String;} -> κ;
36+ gmp = δ;
37+ libffi = δ;
38+ stdenv = α;
39+} ->
40+λ
test/golden/importless/5.7.x.nixnew file+85
@@ -0,0 +1,85 @@
1+{ stdenv, fetchurl, cmake, bison, pkgconfig
2+, boost, libedit, libevent, lz4, ncurses, openssl, protobuf, readline, zlib, perl
3+, cctools, CoreServices, developer_cmds }:
4+
5+# Note: zlib is not required; MySQL can use an internal zlib.
6+
7+let
8+self = stdenv.mkDerivation rec {
9+ pname = "mysql";
10+ version = "5.7.27";
11+
12+ src = fetchurl {
13+ url = "mirror://mysql/MySQL-5.7/${pname}-${version}.tar.gz";
14+ sha256 = "1fhv16zr46pxm1j8vb8x8mh3nwzglg01arz8gnazbmjqldr5idpq";
15+ };
16+
17+ preConfigure = stdenv.lib.optional stdenv.isDarwin ''
18+ ln -s /bin/ps $TMPDIR/ps
19+ export PATH=$PATH:$TMPDIR
20+ '';
21+
22+ nativeBuildInputs = [ cmake bison pkgconfig ];
23+
24+ buildInputs = [ boost libedit libevent lz4 ncurses openssl protobuf readline zlib ]
25+ ++ stdenv.lib.optionals stdenv.isDarwin [ perl cctools CoreServices developer_cmds ];
26+
27+ outputs = [ "out" "static" ];
28+
29+ cmakeFlags = [
30+ "-DCMAKE_SKIP_BUILD_RPATH=OFF" # To run libmysql/libmysql_api_test during build.
31+ "-DWITH_SSL=yes"
32+ "-DWITH_EMBEDDED_SERVER=yes"
33+ "-DWITH_UNIT_TESTS=no"
34+ "-DWITH_EDITLINE=system"
35+ "-DWITH_LIBEVENT=system"
36+ "-DWITH_LZ4=system"
37+ "-DWITH_PROTOBUF=system"
38+ "-DWITH_ZLIB=system"
39+ "-DWITH_ARCHIVE_STORAGE_ENGINE=yes"
40+ "-DWITH_BLACKHOLE_STORAGE_ENGINE=yes"
41+ "-DWITH_FEDERATED_STORAGE_ENGINE=yes"
42+ "-DHAVE_IPV6=yes"
43+ "-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
44+ "-DMYSQL_DATADIR=/var/lib/mysql"
45+ "-DINSTALL_INFODIR=share/mysql/docs"
46+ "-DINSTALL_MANDIR=share/man"
47+ "-DINSTALL_PLUGINDIR=lib/mysql/plugin"
48+ "-DINSTALL_SCRIPTDIR=bin"
49+ "-DINSTALL_INCLUDEDIR=include/mysql"
50+ "-DINSTALL_DOCREADMEDIR=share/mysql"
51+ "-DINSTALL_SUPPORTFILESDIR=share/mysql"
52+ "-DINSTALL_MYSQLSHAREDIR=share/mysql"
53+ "-DINSTALL_MYSQLTESTDIR="
54+ "-DINSTALL_DOCDIR=share/mysql/docs"
55+ "-DINSTALL_SHAREDIR=share/mysql"
56+ ];
57+
58+ CXXFLAGS = "-fpermissive -std=c++11";
59+ NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s";
60+
61+ prePatch = ''
62+ sed -i -e "s|/usr/bin/libtool|libtool|" cmake/merge_archives.cmake.in
63+ '';
64+ postInstall = ''
65+ moveToOutput "lib/*.a" $static
66+ ln -s libmysqlclient${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/libmysqlclient_r${stdenv.hostPlatform.extensions.sharedLibrary}
67+ '';
68+
69+ passthru = {
70+ client = self;
71+ connector-c = self;
72+ server = self;
73+ mysqlVersion = "5.7";
74+ };
75+
76+ meta = with stdenv.lib; {
77+ homepage = "https://www.mysql.com/";
78+ description = "The world's most popular open source database";
79+ platforms = platforms.unix;
80+ license = with licenses; [
81+ artistic1 bsd0 bsd2 bsd3 bsdOriginal
82+ gpl2 lgpl2 lgpl21 mit publicDomain licenses.zlib
83+ ];
84+ };
85+}; in self
test/golden/importless/5.7.x.txtnew file+65
@@ -0,0 +1,65 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ.
2+( α.isDarwin = β,
3+ α.isLinux = γ,
4+ α.lib = δ,
5+ α.mkDerivation =
6+ { CXXFLAGS = String;
7+ NIX_LDFLAGS = ε;
8+ buildInputs = [ζ];
9+ cmakeFlags = [String];
10+ meta =
11+ { description = String;
12+ homepage = String;
13+ license = [η];
14+ platforms = θ;
15+ };
16+ nativeBuildInputs = [ι];
17+ outputs = [String];
18+ passthru =
19+ {client = κ; connector-c = κ; mysqlVersion = String; server = κ;};
20+ pname = String;
21+ postInstall = String;
22+ preConfigure = λ;
23+ prePatch = String;
24+ src = μ;
25+ version = String;
26+ } ->
27+ κ,
28+ δ.optional = β -> String -> λ,
29+ ν.artistic1 = η,
30+ ν.bsd0 = η,
31+ ν.bsd2 = η,
32+ ν.bsd3 = η,
33+ ν.bsdOriginal = η,
34+ ν.gpl2 = η,
35+ ν.lgpl2 = η,
36+ ν.lgpl21 = η,
37+ ν.licenses = ξ,
38+ ν.mit = η,
39+ ν.platforms = ο,
40+ ν.publicDomain = η,
41+ π.zlib = η,
42+ ο.unix = θ,
43+ ρ.optionals = σ -> [τ] -> [ζ],
44+ υ.optionalString = γ -> String -> ε
45+) =>
46+{ CoreServices = τ;
47+ bison = ι;
48+ boost = ζ;
49+ cctools = τ;
50+ cmake = ι;
51+ developer_cmds = τ;
52+ fetchurl = {sha256 = String; url = String;} -> μ;
53+ libedit = ζ;
54+ libevent = ζ;
55+ lz4 = ζ;
56+ ncurses = ζ;
57+ openssl = ζ;
58+ perl = τ;
59+ pkgconfig = ι;
60+ protobuf = ζ;
61+ readline = ζ;
62+ stdenv = α;
63+ zlib = ζ;
64+} ->
65+κ
test/golden/importless/5.9.0.nixnew file+136
@@ -0,0 +1,136 @@
1+{ stdenv, fetchurl, fetchgit
2+, pkgconfig, makeWrapper, libtool, autoconf, automake, fetchpatch
3+, coreutils, libxml2, gnutls, perl, python2, attr
4+, iproute, iptables, readline, lvm2, utillinux, systemd, libpciaccess, gettext
5+, libtasn1, ebtables, libgcrypt, yajl, pmutils, libcap_ng, libapparmor
6+, dnsmasq, libnl, libpcap, libxslt, xhtml1, numad, numactl, perlPackages
7+, curl, libiconv, gmp, zfs, parted, bridge-utils, dmidecode, glib
8+, enableXen ? false, xen ? null
9+, enableIscsi ? false, openiscsi
10+, enableCeph ? false, ceph
11+}:
12+
13+with stdenv.lib;
14+
15+# if you update, also bump <nixpkgs/pkgs/development/python-modules/libvirt/default.nix> and SysVirt in <nixpkgs/pkgs/top-level/perl-packages.nix>
16+let
17+ buildFromTarball = stdenv.isDarwin;
18+in stdenv.mkDerivation rec {
19+ pname = "libvirt";
20+ version = "5.9.0";
21+
22+ src =
23+ if buildFromTarball then
24+ fetchurl {
25+ url = "http://libvirt.org/sources/${pname}-${version}.tar.xz";
26+ sha256 = "0fc9jxw3v6x5hc10bkd7bbcayn24hbld5adj2gh5s648v7hx55il";
27+ }
28+ else
29+ fetchgit {
30+ url = "git://libvirt.org/libvirt.git";
31+ rev = "v${version}";
32+ sha256 = "0smm77ag8bg24xkbhl4akqikjrsq2pd3wk31nj0hk1avqnl00gmk";
33+ fetchSubmodules = true;
34+ };
35+
36+ nativeBuildInputs = [ makeWrapper pkgconfig ];
37+ buildInputs = [
38+ libxml2 gnutls perl python2 readline gettext libtasn1 libgcrypt yajl
39+ libxslt xhtml1 perlPackages.XMLXPath curl libpcap glib
40+ ] ++ optionals (!buildFromTarball) [
41+ libtool autoconf automake
42+ ] ++ optionals stdenv.isLinux [
43+ libpciaccess lvm2 utillinux systemd libnl numad zfs
44+ libapparmor libcap_ng numactl attr parted
45+ ] ++ optionals (enableXen && stdenv.isLinux && stdenv.isx86_64) [
46+ xen
47+ ] ++ optionals enableIscsi [
48+ openiscsi
49+ ] ++ optionals enableCeph [
50+ ceph
51+ ] ++ optionals stdenv.isDarwin [
52+ libiconv gmp
53+ ];
54+
55+ preConfigure = ''
56+ ${ optionalString (!buildFromTarball) "./bootstrap --no-git --gnulib-srcdir=$(pwd)/.gnulib" }
57+ PATH=${stdenv.lib.makeBinPath ([ dnsmasq ] ++ optionals stdenv.isLinux [ iproute iptables ebtables lvm2 systemd numad ] ++ optionals enableIscsi [ openiscsi ])}:$PATH
58+ # the path to qemu-kvm will be stored in VM's .xml and .save files
59+ # do not use "''${qemu_kvm}/bin/qemu-kvm" to avoid bound VMs to particular qemu derivations
60+ substituteInPlace src/lxc/lxc_conf.c \
61+ --replace 'lxc_path,' '"/run/libvirt/nix-emulators/libvirt_lxc",'
62+ patchShebangs . # fixes /usr/bin/python references
63+ '';
64+
65+ configureFlags = [
66+ "--localstatedir=/var"
67+ "--sysconfdir=/var/lib"
68+ "--with-libpcap"
69+ "--with-qemu"
70+ "--with-vmware"
71+ "--with-vbox"
72+ "--with-test"
73+ "--with-esx"
74+ "--with-remote"
75+ ] ++ optionals stdenv.isLinux [
76+ "QEMU_BRIDGE_HELPER=/run/wrappers/bin/qemu-bridge-helper"
77+ "QEMU_PR_HELPER=/run/libvirt/nix-helpers/qemu-pr-helper"
78+ "EBTABLES_PATH=${ebtables}/bin/ebtables-legacy"
79+ "--with-attr"
80+ "--with-apparmor"
81+ "--with-secdriver-apparmor"
82+ "--with-numad"
83+ "--with-macvtap"
84+ "--with-virtualport"
85+ "--with-storage-disk"
86+ ] ++ optionals (stdenv.isLinux && zfs != null) [
87+ "--with-storage-zfs"
88+ ] ++ optionals enableIscsi [
89+ "--with-storage-iscsi"
90+ ] ++ optionals enableCeph [
91+ "--with-storage-rbd"
92+ ] ++ optionals stdenv.isDarwin [
93+ "--with-init-script=none"
94+ ];
95+
96+ installFlags = [
97+ "localstatedir=$(TMPDIR)/var"
98+ "sysconfdir=$(out)/var/lib"
99+ ];
100+
101+
102+ postInstall = let
103+ binPath = [ iptables iproute pmutils numad numactl bridge-utils dmidecode dnsmasq ebtables ] ++ optionals enableIscsi [ openiscsi ];
104+ in ''
105+ substituteInPlace $out/libexec/libvirt-guests.sh \
106+ --replace 'ON_BOOT=start' 'ON_BOOT=''${ON_BOOT:-start}' \
107+ --replace 'ON_SHUTDOWN=suspend' 'ON_SHUTDOWN=''${ON_SHUTDOWN:-suspend}' \
108+ --replace "$out/bin" '${gettext}/bin' \
109+ --replace 'lock/subsys' 'lock' \
110+ --replace 'gettext.sh' 'gettext.sh
111+ # Added in nixpkgs:
112+ gettext() { "${gettext}/bin/gettext" "$@"; }
113+ '
114+ '' + optionalString stdenv.isLinux ''
115+ substituteInPlace $out/lib/systemd/system/libvirtd.service --replace /bin/kill ${coreutils}/bin/kill
116+ rm $out/lib/systemd/system/{virtlockd,virtlogd}.*
117+ wrapProgram $out/sbin/libvirtd \
118+ --prefix PATH : /run/libvirt/nix-emulators:${makeBinPath binPath}
119+ '';
120+
121+ enableParallelBuilding = true;
122+
123+ NIX_CFLAGS_COMPILE = "-fno-stack-protector";
124+
125+ meta = {
126+ homepage = "http://libvirt.org/";
127+ repositories.git = "git://libvirt.org/libvirt.git";
128+ description = ''
129+ A toolkit to interact with the virtualization capabilities of recent
130+ versions of Linux (and other OSes)
131+ '';
132+ license = licenses.lgpl2Plus;
133+ platforms = platforms.unix;
134+ maintainers = with maintainers; [ fpletz globin ];
135+ };
136+}
test/golden/importless/5.nixnew file+25
@@ -0,0 +1,25 @@
1+{ stdenv, fetchurl, allegro }:
2+stdenv.mkDerivation rec {
3+ version = "5.6.4";
4+ pname = "liquidwar5";
5+ src = fetchurl {
6+ url = "https://download.savannah.gnu.org/releases/liquidwar/liquidwar-${version}.tar.gz";
7+ sha256 = "18wkbfzp07yckg05b5gjy67rw06z9lxp0hzg0zwj7rz8i12jxi9j";
8+ };
9+
10+ buildInputs = [ allegro ];
11+
12+ configureFlags = stdenv.lib.optional stdenv.isx86_64 "--disable-asm";
13+
14+ hardeningDisable = [ "format" ];
15+
16+ NIX_CFLAGS_COMPILE = [ "-lm" ];
17+
18+ meta = with stdenv.lib; {
19+ description = ''The classic version of a quick tactics game LiquidWar'';
20+ maintainers = [ maintainers.raskin ];
21+ license = licenses.gpl2Plus;
22+ platforms = platforms.linux;
23+ broken = true;
24+ };
25+}
test/golden/importless/5.txtnew file+30
@@ -0,0 +1,30 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ.
2+( α.isx86_64 = β,
3+ α.lib = γ,
4+ α.mkDerivation =
5+ { NIX_CFLAGS_COMPILE = [String];
6+ buildInputs = [δ];
7+ configureFlags = ε;
8+ hardeningDisable = [String];
9+ meta =
10+ { broken = Bool;
11+ description = String;
12+ license = ζ;
13+ maintainers = [η];
14+ platforms = θ;
15+ };
16+ pname = String;
17+ src = ι;
18+ version = String;
19+ } ->
20+ κ,
21+ γ.licenses = λ,
22+ γ.maintainers = μ,
23+ γ.platforms = ν,
24+ λ.gpl2Plus = ζ,
25+ μ.raskin = η,
26+ ν.linux = θ,
27+ ξ.optional = β -> String -> ε
28+) =>
29+{allegro = δ; fetchurl = {sha256 = String; url = String;} -> ι; stdenv = α;} ->
30+κ
test/golden/importless/5.x.nixnew file+29
@@ -0,0 +1,29 @@
1+{ stdenv, fetchFromGitHub, cmake, neon, libdiscid, libxml2, pkgconfig }:
2+
3+stdenv.mkDerivation rec {
4+ version = "5.1.0";
5+ pname = "libmusicbrainz";
6+
7+ nativeBuildInputs = [ pkgconfig ];
8+ buildInputs = [ cmake neon libdiscid libxml2 ];
9+
10+ src = fetchFromGitHub {
11+ owner = "metabrainz";
12+ repo = "libmusicbrainz";
13+ sha256 = "0ah9kaf3g3iv1cps2vs1hs33nfbjfx1xscpjgxr1cg28p4ri6jhq";
14+ rev = "release-${version}";
15+ };
16+
17+ dontUseCmakeBuildDir=true;
18+
19+ meta = with stdenv.lib; {
20+ homepage = "http://musicbrainz.org/doc/libmusicbrainz";
21+ description = "MusicBrainz Client Library (5.x version)";
22+ longDescription = ''
23+ The libmusicbrainz (also known as mb_client or MusicBrainz Client
24+ Library) is a development library geared towards developers who wish to
25+ add MusicBrainz lookup capabilities to their applications.'';
26+ platforms = platforms.all;
27+ license = licenses.lgpl21;
28+ };
29+}
test/golden/importless/5.x.txtnew file+33
@@ -0,0 +1,33 @@
1+∀ α β γ δ ε ζ η θ ι κ.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ dontUseCmakeBuildDir = Bool;
6+ meta =
7+ { description = String;
8+ homepage = String;
9+ license = δ;
10+ longDescription = String;
11+ platforms = ε;
12+ };
13+ nativeBuildInputs = [ζ];
14+ pname = String;
15+ src = η;
16+ version = String;
17+ } ->
18+ θ,
19+ β.licenses = ι,
20+ β.platforms = κ,
21+ ι.lgpl21 = δ,
22+ κ.all = ε
23+) =>
24+{ cmake = γ;
25+ fetchFromGitHub =
26+ {owner = String; repo = String; rev = String; sha256 = String;} -> η;
27+ libdiscid = γ;
28+ libxml2 = γ;
29+ neon = γ;
30+ pkgconfig = ζ;
31+ stdenv = α;
32+} ->
33+θ
test/golden/importless/5_x.nixnew file+199
@@ -0,0 +1,199 @@
1+{ stdenv, lib, fetchgit, fetchFromGitHub, gyp, readline, python, which, icu
2+, patchelf, coreutils, xcbuild
3+, doCheck ? false
4+, static ? false
5+}:
6+
7+assert readline != null;
8+
9+let
10+ arch = if stdenv.isx86_64 then "x64"
11+ else if stdenv.isi686 then "ia32"
12+ else if stdenv.isAarch64 then "arm64"
13+ else if stdenv.isAarch32 then "arm"
14+ else throw "Unknown architecture for v8";
15+ git_url = "https://chromium.googlesource.com";
16+ clangFlag = if stdenv.isDarwin then "1" else "0";
17+ sharedFlag = if static then "static_library" else "shared_library";
18+
19+ deps = {
20+ build = fetchgit {
21+ url = "${git_url}/chromium/src/build.git";
22+ rev = "2c67d4d74b6b3673228fab191918500a582ef3b0";
23+ sha256 = "0jc7hci5yh792pw0ahjfxrk5xzllnlrv9llmwlgcgn2x8x6bn34q";
24+ };
25+ "tools/gyp" = fetchgit {
26+ url = "${git_url}/external/gyp.git";
27+ rev = "e7079f0e0e14108ab0dba58728ff219637458563";
28+ sha256 = "0yd1ds13z0r9d2sb67f9i1gjn1zgzwyfv96qqqp6pn5pcfbialg6";
29+ };
30+ "third_party/icu" = fetchgit {
31+ url = "${git_url}/chromium/deps/icu.git";
32+ rev = "b5ecbb29a26532f72ef482569b223d5a51fd50bf";
33+ sha256 = "0ld47wdnk8grcba221z67l3pnphv9zwifk4y44f5b946w3iwmpns";
34+ };
35+ buildtools = fetchgit {
36+ url = "${git_url}/chromium/buildtools.git";
37+ rev = "60f7f9a8b421ebf9a46041dfa2ff11c0fe59c582";
38+ sha256 = "0i10bw7yhslklqwcx5krs3k05sicb73cpwd0mkaz96yxsvmkvjq0";
39+ };
40+ "base/trace_event/common" = fetchgit {
41+ url = "${git_url}/chromium/src/base/trace_event/common.git";
42+ rev = "315bf1e2d45be7d53346c31cfcc37424a32c30c8";
43+ sha256 = "1pp2ygvp20j6g4868hrmiw0j704kdvsi9d9wx2gbk7w79rc36695";
44+ };
45+ "platform/inspector_protocol" = fetchgit {
46+ url = "${git_url}/chromium/src/third_party/WebKit/Source/platform/inspector_protocol.git";
47+ rev = "f49542089820a34a9a6e33264e09b73779407512";
48+ sha256 = "1lwpass3p4rpp2kjmxxxpkqyv4lznxhf4i0yy7mmrd7jkpc7kn8k";
49+ };
50+ "tools/mb" = fetchgit {
51+ url = "${git_url}/chromium/src/tools/mb.git";
52+ rev = "0c4dc43c454f26936ddf3074ab8e9a41e3dc03a3";
53+ sha256 = "0f96qphbmwn1pprv0a6xf68p01s1jzx2sz6pmadqbrs1dgh1xwnk";
54+ };
55+ "tools/swarming_client" = fetchgit {
56+ url = "${git_url}/external/swarming.client.git";
57+ rev = "7f63a272f7d9785ce41b6d10bb3106c49a968e57";
58+ sha256 = "1pmb8bq4qifjf2dzz8c4jdwhlvwgrl9ycjaalcyh1sbh4lx3yvv2";
59+ };
60+ "testing/gtest" = fetchgit {
61+ url = "${git_url}/external/github.com/google/googletest.git";
62+ rev = "6f8a66431cb592dad629028a50b3dd418a408c87";
63+ sha256 = "0bdba2lr6pg15bla9600zg0r0vm4lnrx0wqz84p376wfdxra24vw";
64+ };
65+ "testing/gmock" = fetchgit {
66+ url = "${git_url}/external/googlemock.git";
67+ rev = "0421b6f358139f02e102c9c332ce19a33faf75be";
68+ sha256 = "1xiky4v98maxs8fg1avcd56y0alv3hw8qyrlpd899zgzbq2k10pp";
69+ };
70+ "test/benchmarks/data" = fetchgit {
71+ url = "${git_url}/v8/deps/third_party/benchmarks.git";
72+ rev = "05d7188267b4560491ff9155c5ee13e207ecd65f";
73+ sha256 = "0ad2ay14bn67d61ks4dmzadfnhkj9bw28r4yjdjjyzck7qbnzchl";
74+ };
75+ "test/mozilla/data" = fetchgit {
76+ url = "${git_url}/v8/deps/third_party/mozilla-tests.git";
77+ rev = "f6c578a10ea707b1a8ab0b88943fe5115ce2b9be";
78+ sha256 = "0rfdan76yfawqxbwwb35aa57b723j3z9fx5a2w16nls02yk2kqyn";
79+ };
80+ "test/simdjs/data" = fetchgit {
81+ url = "${git_url}/external/github.com/tc39/ecmascript_simd.git";
82+ rev = "baf493985cb9ea7cdbd0d68704860a8156de9556";
83+ sha256 = "178r0k40a58c1187gfzqz2i6as34l8cliy1g1x870wyy0qcvlq2q";
84+ };
85+ "test/test262/data" = fetchgit {
86+ url = "${git_url}/external/github.com/tc39/test262.git";
87+ rev = "88bc7fe7586f161201c5f14f55c9c489f82b1b67";
88+ sha256 = "0gc7fmaqrgwb6rl02jnrm3synpwzzg0dfqy3zm386r1qcisl93xs";
89+ };
90+ "test/test262/harness" = fetchgit {
91+ url = "${git_url}/external/github.com/test262-utils/test262-harness-py.git";
92+ rev = "cbd968f54f7a95c6556d53ba852292a4c49d11d8";
93+ sha256 = "094c3600a4wh1m3fvvlivn290kik1pzzvwabq77lk8bh4jkkv7ki";
94+ };
95+ "tools/clang" = fetchgit {
96+ url = "${git_url}/chromium/src/tools/clang.git";
97+ rev = "496622ab4aaa5be7e5a9b80617013cb02f45dc87";
98+ sha256 = "1gkhk2bzpxwzkirzcqfixxpprbr8mn6rk00krm25daarm3smydmf";
99+ };
100+ };
101+
102+in
103+
104+stdenv.mkDerivation rec {
105+ pname = "v8";
106+ version = "5.4.232";
107+
108+ inherit doCheck;
109+
110+ src = fetchFromGitHub {
111+ owner = "v8";
112+ repo = "v8";
113+ rev = version;
114+ sha256 = "1nqxbkz75m8xrjih0sj3f3iqvif4192vxdaxzy8r787rihjwg9nx";
115+ };
116+
117+ postUnpack = ''
118+ ${lib.concatStringsSep "\n" (
119+ lib.mapAttrsToList (n: v: ''
120+ mkdir -p $sourceRoot/${n}
121+ cp -r ${v}/* $sourceRoot/${n}
122+ '') deps)}
123+ '';
124+
125+ # Patch based off of:
126+ # https://github.com/cowboyd/libv8/tree/v5.1.281.67.0/patches
127+ patches = lib.optional (!doCheck) ./libv8-5.4.232.patch;
128+
129+ postPatch = ''
130+ sed -i 's,#!/usr/bin/env python,#!${python}/bin/python,' gypfiles/gyp_v8
131+ sed -i 's,/bin/echo,${coreutils}/bin/echo,' gypfiles/standalone.gypi
132+ sed -i '/CR_CLANG_REVISION/ d' gypfiles/standalone.gypi
133+ sed -i 's/-Wno-format-pedantic//g' gypfiles/standalone.gypi
134+ '';
135+
136+ configurePhase = ''
137+ PYTHONPATH="tools/generate_shim_headers:$PYTHONPATH" \
138+ PYTHONPATH="$(toPythonPath ${gyp}):$PYTHONPATH" \
139+ gypfiles/gyp_v8 \
140+ -f make \
141+ --generator-output="out" \
142+ -Dflock_index=0 \
143+ -Dclang=${clangFlag} \
144+ -Dv8_enable_i18n_support=1 \
145+ -Duse_system_icu=1 \
146+ -Dcomponent=${sharedFlag} \
147+ -Dconsole=readline \
148+ -Dv8_target_arch=${arch} \
149+ -Dv8_use_external_startup_data=0
150+ '';
151+
152+ nativeBuildInputs = [ which ];
153+ buildInputs = [ readline python icu ]
154+ ++ stdenv.lib.optional stdenv.isDarwin xcbuild
155+ ++ stdenv.lib.optional stdenv.isLinux patchelf;
156+
157+ NIX_CFLAGS_COMPILE = "-Wno-error=strict-overflow -Wno-error=unused-function -Wno-error=attributes"
158+ + stdenv.lib.optionalString stdenv.cc.isClang " -Wno-error=unused-lambda-capture";
159+
160+ buildFlags = [
161+ "LINK=c++"
162+ "-C out"
163+ "builddir=$(CURDIR)/Release"
164+ "BUILDTYPE=Release"
165+ ];
166+
167+ enableParallelBuilding = true;
168+
169+ dontUpdateAutotoolsGnuConfigScripts = if stdenv.isAarch64 then true else null;
170+
171+ # the `libv8_libplatform` target is _only_ built as a static library,
172+ # and is expected to be statically linked in when needed.
173+ # see the following link for further commentary:
174+ # https://github.com/cowboyd/therubyracer/issues/391
175+ installPhase = ''
176+ install -vD out/Release/d8 "$out/bin/d8"
177+ install -vD out/Release/mksnapshot "$out/bin/mksnapshot"
178+ ${if static then ""
179+ else if stdenv.isDarwin then ''
180+ install -vD out/Release/libv8.dylib "$out/lib/libv8.dylib"
181+ install_name_tool -change /usr/local/lib/libv8.dylib $out/lib/libv8.dylib -change /usr/lib/libgcc_s.1.dylib ${stdenv.cc.cc.lib}/lib/libgcc_s.1.dylib $out/bin/d8
182+ install_name_tool -id $out/lib/libv8.dylib -change /usr/lib/libgcc_s.1.dylib ${stdenv.cc.cc.lib}/lib/libgcc_s.1.dylib $out/lib/libv8.dylib
183+ '' else ''
184+ install -vD out/Release/lib.target/libv8.so "$out/lib/libv8.so"
185+ ''}
186+ mkdir -p "$out/include"
187+ cp -vr include/*.h "$out/include"
188+ cp -vr include/libplatform "$out/include"
189+ mkdir -p "$out/lib"
190+ cp -v out/Release/*.a "$out/lib"
191+ '';
192+
193+ meta = with lib; {
194+ description = "Google's open source JavaScript engine";
195+ maintainers = with maintainers; [ cstrahan proglodyte ];
196+ platforms = platforms.linux ++ platforms.darwin;
197+ license = licenses.bsd3;
198+ };
199+}
test/golden/importless/6.3.nixnew file+53
@@ -0,0 +1,53 @@
1+{ stdenv, buildPythonPackage, fetchFromGitHub
2+, betamax
3+, betamax-serializers
4+, betamax-matchers
5+, mock
6+, six
7+, pytestrunner
8+, prawcore
9+, pytest
10+, requests-toolbelt
11+, update_checker
12+, websocket_client
13+}:
14+
15+buildPythonPackage rec {
16+ pname = "praw";
17+ version = "6.3.1";
18+
19+ src = fetchFromGitHub {
20+ owner = "praw-dev";
21+ repo = "praw";
22+ rev = "v${version}";
23+ sha256 = "0by89aw7m803dvjcc33m9390msjm6v5v8g3k8ink9gfm421lw8ky";
24+ };
25+
26+ nativeBuildInputs = [
27+ pytestrunner
28+ ];
29+
30+ propagatedBuildInputs = [
31+ mock
32+ prawcore
33+ update_checker
34+ websocket_client
35+ ];
36+
37+ checkInputs = [
38+ betamax
39+ betamax-serializers
40+ betamax-matchers
41+ mock
42+ pytest
43+ requests-toolbelt
44+ six
45+ ];
46+
47+ meta = with stdenv.lib; {
48+ description = "Python Reddit API wrapper";
49+ homepage = "https://praw.readthedocs.org/";
50+ license = licenses.bsd2;
51+ maintainers = with maintainers; [ ];
52+ };
53+}
test/golden/importless/6.3.txtnew file+32
@@ -0,0 +1,32 @@
1+∀ β γ δ ε ζ η θ ι κ.
2+(β.lib = γ, γ.licenses = δ, γ.maintainers = ε, δ.bsd2 = ζ) => { betamax = η;
3+ betamax-matchers = η;
4+ betamax-serializers = η;
5+ buildPythonPackage =
6+ { checkInputs = [η];
7+ meta =
8+ { description = String;
9+ homepage = String;
10+ license = ζ;
11+ maintainers = ∀ α. [α];
12+ };
13+ nativeBuildInputs = [θ];
14+ pname = String;
15+ propagatedBuildInputs = [η];
16+ src = ι;
17+ version = String;
18+ } ->
19+ κ;
20+ fetchFromGitHub =
21+ {owner = String; repo = String; rev = String; sha256 = String;} -> ι;
22+ mock = η;
23+ prawcore = η;
24+ pytest = η;
25+ pytestrunner = θ;
26+ requests-toolbelt = η;
27+ six = η;
28+ stdenv = β;
29+ update_checker = η;
30+ websocket_client = η;
31+} ->
32+κ
test/golden/importless/6.30.163.46.nixnew file+29
@@ -0,0 +1,29 @@
1+{ stdenv, fetchurl, b43FirmwareCutter }:
2+
3+stdenv.mkDerivation rec {
4+ pname = "b43-firmware";
5+ version = "6.30.163.46";
6+
7+ src = fetchurl {
8+ url = "http://www.lwfinger.com/b43-firmware/broadcom-wl-${version}.tar.bz2";
9+ sha256 = "0baw6gcnrhxbb447msv34xg6rmlcj0gm3ahxwvdwfcvq4xmknz50";
10+ };
11+
12+ buildInputs = [ b43FirmwareCutter ];
13+
14+ phases = [ "unpackPhase" "installPhase" ];
15+
16+ sourceRoot = ".";
17+
18+ installPhase = ''
19+ mkdir $out
20+ b43-fwcutter -w $out *.wl_apsta.o
21+ '';
22+
23+ meta = with stdenv.lib; {
24+ description = "Firmware for cards supported by the b43 kernel module";
25+ homepage = "http://wireless.kernel.org/en/users/Drivers/b43";
26+ downloadPage = "http://www.lwfinger.com/b43-firmware";
27+ license = licenses.unfree;
28+ };
29+}
test/golden/importless/6.30.163.46.txtnew file+26
@@ -0,0 +1,26 @@
1+∀ α β γ δ ε ζ η.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { buildInputs = [γ];
5+ installPhase = String;
6+ meta =
7+ { description = String;
8+ downloadPage = String;
9+ homepage = String;
10+ license = δ;
11+ };
12+ phases = [String];
13+ pname = String;
14+ sourceRoot = String;
15+ src = ε;
16+ version = String;
17+ } ->
18+ ζ,
19+ β.licenses = η,
20+ η.unfree = δ
21+) =>
22+{ b43FirmwareCutter = γ;
23+ fetchurl = {sha256 = String; url = String;} -> ε;
24+ stdenv = α;
25+} ->
26+ζ
test/golden/importless/6.nixnew file+9
@@ -0,0 +1,9 @@
1+{ callPackage, Foundation, libobjc }:
2+
3+callPackage ./generic.nix ({
4+ inherit Foundation libobjc;
5+ version = "6.0.0.313";
6+ srcArchiveSuffix = "tar.xz";
7+ sha256 = "0l0cd6q5xh1vdm6zr78rkfqdsmrgzanjgpxvgig0pyd3glfyjim9";
8+ enableParallelBuilding = true;
9+})
test/golden/importless/6.txtnew file+15
@@ -0,0 +1,15 @@
1+∀ α β γ.
2+{ Foundation = α;
3+ callPackage =
4+ String ->
5+ { Foundation = α;
6+ enableParallelBuilding = Bool;
7+ libobjc = β;
8+ sha256 = String;
9+ srcArchiveSuffix = String;
10+ version = String;
11+ } ->
12+ γ;
13+ libobjc = β;
14+} ->
15+γ
test/golden/importless/6.x.nixnew file+45
@@ -0,0 +1,45 @@
1+{ stdenv, fetchurl, libxml2, openssl, readline, gawk }:
2+
3+stdenv.mkDerivation rec {
4+ name = "virtuoso-opensource-6.1.6";
5+
6+ src = fetchurl {
7+ url = "mirror://sourceforge/virtuoso/${name}.tar.gz";
8+ sha256 = "0dx0lp7cngdchi0772hp93zzn6sdap7z8s3vay3mzb9xgf0sdgy6";
9+ };
10+
11+ outputs = [ "out" "dev" "doc" ];
12+
13+ buildInputs = [ libxml2 openssl readline gawk ];
14+
15+ CPP = "${stdenv.cc}/bin/gcc -E";
16+
17+ configureFlags = [
18+ "--enable-shared" "--disable-all-vads" "--with-readline=${readline.dev}"
19+ "--disable-hslookup" "--disable-wbxml2" "--without-iodbc"
20+ "--enable-openssl=${openssl.dev}"
21+ ];
22+
23+ postInstall = ''
24+ echo Moving documentation
25+ mkdir -pv $out/share/doc
26+ mv -v $out/share/virtuoso/doc $out/share/doc/${name}
27+
28+ echo Removing jars and empty directories
29+ find $out -name "*.a" -delete -o -name "*.jar" -delete -o -type d -empty -delete
30+
31+ for f in $out/lib/*.la; do
32+ echo "Fixing $f"
33+ substituteInPlace $f \
34+ --replace "${readline.dev}" "${readline.out}/lib" \
35+ --replace "${openssl.dev}/lib" "${openssl.out}/lib"
36+ done
37+ '';
38+
39+ meta = with stdenv.lib; {
40+ description = "SQL/RDF database used by, e.g., KDE-nepomuk";
41+ homepage = "http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/";
42+ platforms = platforms.linux;
43+ license = licenses.gpl2;
44+ };
45+}
test/golden/importless/6.x.txtnew file+27
@@ -0,0 +1,27 @@
1+∀ α β γ δ ε ζ η θ ι.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { CPP = String;
5+ buildInputs = [γ];
6+ configureFlags = [String];
7+ meta =
8+ {description = String; homepage = String; license = δ; platforms = ε;};
9+ name = String;
10+ outputs = [String];
11+ postInstall = String;
12+ src = ζ;
13+ } ->
14+ η,
15+ β.licenses = θ,
16+ β.platforms = ι,
17+ θ.gpl2 = δ,
18+ ι.linux = ε
19+) =>
20+{ fetchurl = {sha256 = String; url = String;} -> ζ;
21+ gawk = γ;
22+ libxml2 = γ;
23+ openssl = γ;
24+ readline = γ;
25+ stdenv = α;
26+} ->
27+η
test/golden/importless/60.nixnew file+83
@@ -0,0 +1,83 @@
1+{ stdenv, fetchurl, fetchpatch, autoconf213, pkgconfig, perl, python2, zip, buildPackages
2+, which, readline, zlib, icu }:
3+
4+with stdenv.lib;
5+
6+let
7+ version = "60.9.0";
8+in stdenv.mkDerivation {
9+ pname = "spidermonkey";
10+ inherit version;
11+
12+ src = fetchurl {
13+ url = "mirror://mozilla/firefox/releases/${version}esr/source/firefox-${version}esr.source.tar.xz";
14+ sha256 = "0gy5x2rnnbkqmjd9sq93s3q5na9nkba68xwpizild7k6qn63qicz";
15+ };
16+
17+ outputs = [ "out" "dev" ];
18+ setOutputFlags = false; # Configure script only understands --includedir
19+
20+ buildInputs = [ readline zlib icu ];
21+ nativeBuildInputs = [ autoconf213 pkgconfig perl which python2 zip ];
22+
23+ patches = [
24+ # Fixed in 62.0
25+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1415202
26+ (fetchpatch {
27+ url = "https://src.fedoraproject.org/rpms/mozjs60/raw/a1b605c73f382db25977cb2d4d70a3ba2ff85b92/f/Always-use-the-equivalent-year-to-determine-the-time-zone.patch";
28+ sha256 = "12i225qbzlyfj2disms50zrr5jy8zgn2cc4rgsg58sfgf1bn7150";
29+ })
30+ ];
31+
32+ preConfigure = ''
33+ export CXXFLAGS="-fpermissive"
34+ export LIBXUL_DIST=$out
35+ export PYTHON="${buildPackages.python2.interpreter}"
36+
37+ # We can't build in js/src/, so create a build dir
38+ mkdir obj
39+ cd obj/
40+ configureScript=../js/src/configure
41+ '';
42+
43+ configureFlags = [
44+ "--with-system-zlib"
45+ "--with-system-icu"
46+ "--with-intl-api"
47+ "--enable-readline"
48+ "--enable-shared-js"
49+ "--enable-posix-nspr-emulation"
50+ "--disable-jemalloc"
51+ # Fedora and Arch disable optimize, but it doesn't seme to be necessary
52+ # It turns on -O3 which some gcc version had a problem with:
53+ # https://src.fedoraproject.org/rpms/mozjs38/c/761399aba092bcb1299bb4fccfd60f370ab4216e
54+ "--enable-optimize"
55+ "--enable-release"
56+ ] ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
57+ # Spidermonkey seems to use different host/build terminology for cross
58+ # compilation here.
59+ "--host=${stdenv.buildPlatform.config}"
60+ "--target=${stdenv.hostPlatform.config}"
61+ ];
62+
63+ configurePlatforms = [];
64+
65+ depsBuildBuild = [ buildPackages.stdenv.cc ];
66+
67+ # Remove unnecessary static lib
68+ preFixup = ''
69+ moveToOutput bin/js60-config "$dev"
70+ rm $out/lib/libjs_static.ajs
71+ ln -s $out/bin/js60 $out/bin/js
72+ '';
73+
74+ enableParallelBuilding = true;
75+
76+ meta = with stdenv.lib; {
77+ description = "Mozilla's JavaScript engine written in C/C++";
78+ homepage = "https://developer.mozilla.org/en/SpiderMonkey";
79+ license = licenses.gpl2; # TODO: MPL/GPL/LGPL tri-license.
80+ maintainers = [ maintainers.abbradar ];
81+ platforms = platforms.linux;
82+ };
83+}
test/golden/importless/60.txtnew file+53
@@ -0,0 +1,53 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ.
2+( β.buildPlatform = γ,
3+ β.hostPlatform = γ,
4+ β.lib = δ,
5+ β.mkDerivation =
6+ { buildInputs = [ε];
7+ configureFlags = [String];
8+ configurePlatforms = ∀ α. [α];
9+ depsBuildBuild = [ζ];
10+ enableParallelBuilding = Bool;
11+ meta =
12+ { description = String;
13+ homepage = String;
14+ license = η;
15+ maintainers = [θ];
16+ platforms = ι;
17+ };
18+ nativeBuildInputs = [κ];
19+ outputs = [String];
20+ patches = [λ];
21+ pname = String;
22+ preConfigure = String;
23+ preFixup = String;
24+ setOutputFlags = Bool;
25+ src = μ;
26+ version = String;
27+ } ->
28+ ν,
29+ ξ.stdenv = ο,
30+ δ.licenses = π,
31+ δ.maintainers = ρ,
32+ δ.optionals = Bool -> [String] -> [String],
33+ δ.platforms = σ,
34+ π.gpl2 = η,
35+ ρ.abbradar = θ,
36+ σ.linux = ι,
37+ ο.cc = ζ
38+) =>
39+{ autoconf213 = κ;
40+ buildPackages = ξ;
41+ fetchpatch = {sha256 = String; url = String;} -> λ;
42+ fetchurl = {sha256 = String; url = String;} -> μ;
43+ icu = ε;
44+ perl = κ;
45+ pkgconfig = κ;
46+ python2 = κ;
47+ readline = ε;
48+ stdenv = β;
49+ which = κ;
50+ zip = κ;
51+ zlib = ε;
52+} ->
53+ν
test/golden/importless/68.nixnew file+95
@@ -0,0 +1,95 @@
1+{ stdenv, fetchurl, fetchpatch, autoconf213, pkgconfig, perl, python2, python3, zip, buildPackages
2+, which, readline, zlib, icu, cargo, rustc, llvmPackages }:
3+
4+with stdenv.lib;
5+
6+let
7+ python3Env = buildPackages.python3.withPackages (p: [p.six]);
8+in stdenv.mkDerivation rec {
9+ pname = "spidermonkey";
10+ version = "68.10.0";
11+
12+ src = fetchurl {
13+ url = "mirror://mozilla/firefox/releases/${version}esr/source/firefox-${version}esr.source.tar.xz";
14+ sha256 = "0azdinwqjfv2q37gqpxmfvzsk86pvsi6cjaq1310zs26gric5j1f";
15+ };
16+
17+ outputs = [ "out" "dev" ];
18+ setOutputFlags = false; # Configure script only understands --includedir
19+
20+ nativeBuildInputs = [
21+ autoconf213
22+ pkgconfig
23+ perl
24+ which
25+ python2
26+ zip
27+ cargo
28+ rustc
29+ llvmPackages.llvm
30+ ];
31+
32+ buildInputs = [
33+ readline
34+ zlib
35+ icu
36+ ];
37+
38+ preConfigure = ''
39+ export CXXFLAGS="-fpermissive"
40+ export LIBXUL_DIST=$out
41+ export PYTHON3="${python3Env.interpreter}"
42+
43+ # We can't build in js/src/, so create a build dir
44+ mkdir obj
45+ cd obj/
46+ configureScript=../js/src/configure
47+ '';
48+
49+ configureFlags = [
50+ # Reccommended by gjs upstream
51+ "--disable-jemalloc"
52+ "--enable-unaligned-private-values"
53+ "--with-intl-api"
54+ "--enable-posix-nspr-emulation"
55+ "--with-system-zlib"
56+ "--with-system-icu"
57+
58+ "--with-libclang-path=${llvmPackages.libclang}/lib"
59+ "--with-clang-path=${llvmPackages.clang}/bin/clang"
60+
61+ "--enable-shared-js"
62+ "--enable-readline"
63+ # Fedora and Arch disable optimize, but it doesn't seme to be necessary
64+ # It turns on -O3 which some gcc version had a problem with:
65+ # https://src.fedoraproject.org/rpms/mozjs38/c/761399aba092bcb1299bb4fccfd60f370ab4216e
66+ "--enable-optimize"
67+ "--enable-release"
68+ ] ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
69+ # Spidermonkey seems to use different host/build terminology for cross
70+ # compilation here.
71+ "--host=${stdenv.buildPlatform.config}"
72+ "--target=${stdenv.hostPlatform.config}"
73+ ];
74+
75+ configurePlatforms = [];
76+
77+ depsBuildBuild = [ buildPackages.stdenv.cc ];
78+
79+ # Remove unnecessary static lib
80+ preFixup = ''
81+ moveToOutput bin/js60-config "$dev"
82+ rm $out/lib/libjs_static.ajs
83+ ln -s $out/bin/js60 $out/bin/js
84+ '';
85+
86+ enableParallelBuilding = true;
87+
88+ meta = with stdenv.lib; {
89+ description = "Mozilla's JavaScript engine written in C/C++";
90+ homepage = "https://developer.mozilla.org/en/SpiderMonkey";
91+ license = licenses.gpl2; # TODO: MPL/GPL/LGPL tri-license.
92+ maintainers = [ maintainers.abbradar ];
93+ platforms = platforms.linux;
94+ };
95+}
test/golden/importless/68.txtnew file+60
@@ -0,0 +1,60 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω.
2+( β.buildPlatform = γ,
3+ β.hostPlatform = γ,
4+ β.lib = δ,
5+ β.mkDerivation =
6+ { buildInputs = [ε];
7+ configureFlags = [String];
8+ configurePlatforms = ∀ α. [α];
9+ depsBuildBuild = [ζ];
10+ enableParallelBuilding = Bool;
11+ meta =
12+ { description = String;
13+ homepage = String;
14+ license = η;
15+ maintainers = [θ];
16+ platforms = ι;
17+ };
18+ nativeBuildInputs = [κ];
19+ outputs = [String];
20+ pname = String;
21+ preConfigure = String;
22+ preFixup = String;
23+ setOutputFlags = Bool;
24+ src = λ;
25+ version = String;
26+ } ->
27+ μ,
28+ ν.python3 = ξ,
29+ ν.stdenv = ο,
30+ π.llvm = κ,
31+ ρ.six = σ,
32+ δ.licenses = τ,
33+ δ.maintainers = υ,
34+ δ.optionals = Bool -> [String] -> [String],
35+ δ.platforms = φ,
36+ τ.gpl2 = η,
37+ υ.abbradar = θ,
38+ φ.linux = ι,
39+ ξ.withPackages = (ρ -> [σ]) -> χ,
40+ ο.cc = ζ
41+) =>
42+{ autoconf213 = κ;
43+ buildPackages = ν;
44+ cargo = κ;
45+ fetchpatch = ψ;
46+ fetchurl = {sha256 = String; url = String;} -> λ;
47+ icu = ε;
48+ llvmPackages = π;
49+ perl = κ;
50+ pkgconfig = κ;
51+ python2 = κ;
52+ python3 = ω;
53+ readline = ε;
54+ rustc = κ;
55+ stdenv = β;
56+ which = κ;
57+ zip = κ;
58+ zlib = ε;
59+} ->
60+μ
test/golden/importless/68_sources.nixnew file+615
@@ -0,0 +1,615 @@
1+{
2+ version = "68.12.0";
3+ sources = [
4+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ar/thunderbird-68.12.0.tar.bz2";
5+ locale = "ar";
6+ arch = "linux-x86_64";
7+ sha256 = "70cfb9e6a7a1f285f37a8f13c9a010237e6aabf815b77a12f54ee0deedd36400";
8+ }
9+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ast/thunderbird-68.12.0.tar.bz2";
10+ locale = "ast";
11+ arch = "linux-x86_64";
12+ sha256 = "5645657f20d37ffdb11f383f164f03c66ed2024244849b09bfa60075d5d07490";
13+ }
14+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/be/thunderbird-68.12.0.tar.bz2";
15+ locale = "be";
16+ arch = "linux-x86_64";
17+ sha256 = "d38cdcc2ba4534c23a1bb42b93f271623c497f48e1d255a23bf12a368ff339bd";
18+ }
19+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/bg/thunderbird-68.12.0.tar.bz2";
20+ locale = "bg";
21+ arch = "linux-x86_64";
22+ sha256 = "c8883242683dec57f9db502d96d2036ec46753f474a33c0f1ae31f97f2c3113c";
23+ }
24+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/br/thunderbird-68.12.0.tar.bz2";
25+ locale = "br";
26+ arch = "linux-x86_64";
27+ sha256 = "cfb669e2378f97689a14f23e2c55ef4987e2508695eb195be3af75ed1d648345";
28+ }
29+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ca/thunderbird-68.12.0.tar.bz2";
30+ locale = "ca";
31+ arch = "linux-x86_64";
32+ sha256 = "9ae4b43e0d5d9edd83291f0be7d53d07e5c84f1d0ad4348654136543b7b53a54";
33+ }
34+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/cak/thunderbird-68.12.0.tar.bz2";
35+ locale = "cak";
36+ arch = "linux-x86_64";
37+ sha256 = "d6d635a15b913679ed943c3501dd03140d099ff36b48c8731a47eacda1b5232b";
38+ }
39+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/cs/thunderbird-68.12.0.tar.bz2";
40+ locale = "cs";
41+ arch = "linux-x86_64";
42+ sha256 = "616fbf24e36d63ce3cbc957d69b8972d517524c613a22bedcf5b57534f9a9a41";
43+ }
44+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/cy/thunderbird-68.12.0.tar.bz2";
45+ locale = "cy";
46+ arch = "linux-x86_64";
47+ sha256 = "548c51228d2f3003bb94e1bee91cea0d2edb95bd0f86ee4259c8daef90a2dca8";
48+ }
49+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/da/thunderbird-68.12.0.tar.bz2";
50+ locale = "da";
51+ arch = "linux-x86_64";
52+ sha256 = "ad0e4b7a693d881b8875a5b8cc3e607a3883df759278129f0933522b9a6acd24";
53+ }
54+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/de/thunderbird-68.12.0.tar.bz2";
55+ locale = "de";
56+ arch = "linux-x86_64";
57+ sha256 = "bf9b70b345ffe5df03365d819c5abc3339ed3af4d8a716cdfe7099134864a9b4";
58+ }
59+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/dsb/thunderbird-68.12.0.tar.bz2";
60+ locale = "dsb";
61+ arch = "linux-x86_64";
62+ sha256 = "a2cd7ffb0e8b4c3d1715c18e636d0dcd5efa245200d6d0f14048fc4b399b8121";
63+ }
64+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/el/thunderbird-68.12.0.tar.bz2";
65+ locale = "el";
66+ arch = "linux-x86_64";
67+ sha256 = "07836ce122936848e26cd5a1522967760bee67654582076c53e4ec183cc4c40e";
68+ }
69+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/en-GB/thunderbird-68.12.0.tar.bz2";
70+ locale = "en-GB";
71+ arch = "linux-x86_64";
72+ sha256 = "c89fa35af79eca3cc26b492c602a3f8af0dbaf6ce4ee3af93d93f10daf4e9d6e";
73+ }
74+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/en-US/thunderbird-68.12.0.tar.bz2";
75+ locale = "en-US";
76+ arch = "linux-x86_64";
77+ sha256 = "6eeea0de838909f91da7270e42ae1513d2b801f412fc758f2f8c682d260a7c24";
78+ }
79+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/es-AR/thunderbird-68.12.0.tar.bz2";
80+ locale = "es-AR";
81+ arch = "linux-x86_64";
82+ sha256 = "e9d84032a91f7feb2db3d22a500c564f273c2b637f97aaab2edf3209b93dda1d";
83+ }
84+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/es-ES/thunderbird-68.12.0.tar.bz2";
85+ locale = "es-ES";
86+ arch = "linux-x86_64";
87+ sha256 = "a986e8a48b59354421193f2dd01e3c291fb6c98031af43531e723dc217a43d4a";
88+ }
89+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/et/thunderbird-68.12.0.tar.bz2";
90+ locale = "et";
91+ arch = "linux-x86_64";
92+ sha256 = "2f7508e83aba4fd64a817c7eb4b44d4ea9371956339a009ba541bf3a349693cf";
93+ }
94+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/eu/thunderbird-68.12.0.tar.bz2";
95+ locale = "eu";
96+ arch = "linux-x86_64";
97+ sha256 = "edbc5ff4ba45106233cdbf5255405c4ee52ba7e6811736958323a616881b943f";
98+ }
99+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/fi/thunderbird-68.12.0.tar.bz2";
100+ locale = "fi";
101+ arch = "linux-x86_64";
102+ sha256 = "f4ad740a724efdbfec54445304ca75e9a16e0881bc18789b8ea35632d8857d4b";
103+ }
104+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/fr/thunderbird-68.12.0.tar.bz2";
105+ locale = "fr";
106+ arch = "linux-x86_64";
107+ sha256 = "ebf60a227c9fe5237eff22fb81f3c8bc02a593de823d6f0ad9b67f07af129dea";
108+ }
109+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/fy-NL/thunderbird-68.12.0.tar.bz2";
110+ locale = "fy-NL";
111+ arch = "linux-x86_64";
112+ sha256 = "b12983077a62c5bf7353f50dd951348a457ce07f5beb2a579f199c4d77ed0906";
113+ }
114+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ga-IE/thunderbird-68.12.0.tar.bz2";
115+ locale = "ga-IE";
116+ arch = "linux-x86_64";
117+ sha256 = "aa7c3a4b54fd6fef0f120a6748c45a3f379268f31e087cb3df07d270bf060bad";
118+ }
119+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/gd/thunderbird-68.12.0.tar.bz2";
120+ locale = "gd";
121+ arch = "linux-x86_64";
122+ sha256 = "39fadb2bd4c01da0eb188cb9f52ccd726ec9f7eb5ced44e2a30ee0cfac2527bf";
123+ }
124+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/gl/thunderbird-68.12.0.tar.bz2";
125+ locale = "gl";
126+ arch = "linux-x86_64";
127+ sha256 = "b4ee1f89b0326b22fc7a5b980b857c2652d6881d096060a8bc083015b47762d8";
128+ }
129+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/he/thunderbird-68.12.0.tar.bz2";
130+ locale = "he";
131+ arch = "linux-x86_64";
132+ sha256 = "cefbc742672942e310dc9f4dbcefc8b66cf01d58ac64448ac8c0dc33fdace5ae";
133+ }
134+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/hr/thunderbird-68.12.0.tar.bz2";
135+ locale = "hr";
136+ arch = "linux-x86_64";
137+ sha256 = "9e132811cb6bd98faee86e298b78e845727bfded84c0cdab41608ed1565f1aee";
138+ }
139+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/hsb/thunderbird-68.12.0.tar.bz2";
140+ locale = "hsb";
141+ arch = "linux-x86_64";
142+ sha256 = "2a41d1e188fd5fed93a37a1bedc67cb745367447504a76836f79928194730d3b";
143+ }
144+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/hu/thunderbird-68.12.0.tar.bz2";
145+ locale = "hu";
146+ arch = "linux-x86_64";
147+ sha256 = "9196df7850b9cff69f52b5db69ec3b64cfa312bba5669380c137b95a8140cf39";
148+ }
149+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/hy-AM/thunderbird-68.12.0.tar.bz2";
150+ locale = "hy-AM";
151+ arch = "linux-x86_64";
152+ sha256 = "4a08137a9a714677ecf86a24f165047b809e22eff50d196b92c153e59f943c30";
153+ }
154+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/id/thunderbird-68.12.0.tar.bz2";
155+ locale = "id";
156+ arch = "linux-x86_64";
157+ sha256 = "39784aab0bc3253af47cdcd95824eccdecae4dac819bacf6a04daa7b5c86d6e3";
158+ }
159+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/is/thunderbird-68.12.0.tar.bz2";
160+ locale = "is";
161+ arch = "linux-x86_64";
162+ sha256 = "a041d1af23e9c64967e4d014b6a84ddc80ad24e852146e448f6b380cdd672e67";
163+ }
164+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/it/thunderbird-68.12.0.tar.bz2";
165+ locale = "it";
166+ arch = "linux-x86_64";
167+ sha256 = "b0e3161c801fbaee2f589b1bc61a4fba9968f5f363a62cf0f8af855d23e4782c";
168+ }
169+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ja/thunderbird-68.12.0.tar.bz2";
170+ locale = "ja";
171+ arch = "linux-x86_64";
172+ sha256 = "ad416d47930d81be9ac2f20b3699f4c74471c36e08b14f9d5c6ee1af97c7c9d4";
173+ }
174+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ka/thunderbird-68.12.0.tar.bz2";
175+ locale = "ka";
176+ arch = "linux-x86_64";
177+ sha256 = "3b30bc5f0971310d71e1909b4ed891481457ac8baf11c1e505c3400b2a7cfb63";
178+ }
179+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/kab/thunderbird-68.12.0.tar.bz2";
180+ locale = "kab";
181+ arch = "linux-x86_64";
182+ sha256 = "abdc58d5d5ef251e63c0c40a48460f90e299a4420cbe4e290d519fbed4c335b8";
183+ }
184+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/kk/thunderbird-68.12.0.tar.bz2";
185+ locale = "kk";
186+ arch = "linux-x86_64";
187+ sha256 = "08018b951de59b1a92717fc82bd98a0c324a019ee0ae14888f09c5351a586284";
188+ }
189+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ko/thunderbird-68.12.0.tar.bz2";
190+ locale = "ko";
191+ arch = "linux-x86_64";
192+ sha256 = "1178adc42b3a2ddac46dd50ad8436d1be50db409963e8fac3beb22a431f885fe";
193+ }
194+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/lt/thunderbird-68.12.0.tar.bz2";
195+ locale = "lt";
196+ arch = "linux-x86_64";
197+ sha256 = "18d88a8cbb24d2a78af0de282187a743e707136fdb61912e5f64bf75730e3a76";
198+ }
199+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ms/thunderbird-68.12.0.tar.bz2";
200+ locale = "ms";
201+ arch = "linux-x86_64";
202+ sha256 = "e1754cfbf20e286fd6304b8d75337e3794893c5ebd9b242cf624090e6fc6e9ee";
203+ }
204+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/nb-NO/thunderbird-68.12.0.tar.bz2";
205+ locale = "nb-NO";
206+ arch = "linux-x86_64";
207+ sha256 = "6379f6dca3d8bacb466044f0a7d11b32eb61166d3f14c37431f77843eb884c90";
208+ }
209+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/nl/thunderbird-68.12.0.tar.bz2";
210+ locale = "nl";
211+ arch = "linux-x86_64";
212+ sha256 = "66a56e218365bb260980848427609d390674e2ba3c70b9adc4121f73c861d9b8";
213+ }
214+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/nn-NO/thunderbird-68.12.0.tar.bz2";
215+ locale = "nn-NO";
216+ arch = "linux-x86_64";
217+ sha256 = "ccdb135d43f5542151fe2c99a8e13cebfbc032367abb0308213433b753dc8125";
218+ }
219+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/pl/thunderbird-68.12.0.tar.bz2";
220+ locale = "pl";
221+ arch = "linux-x86_64";
222+ sha256 = "5dc2151d1bb956c4b6fbd1b6185d9328f7091e60fdcd51bad5a9ebaa8fcbb7d7";
223+ }
224+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/pt-BR/thunderbird-68.12.0.tar.bz2";
225+ locale = "pt-BR";
226+ arch = "linux-x86_64";
227+ sha256 = "5ebf77d47bf45b058aaeca857060c908dbf7036bae2c2c5812ff145aed840203";
228+ }
229+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/pt-PT/thunderbird-68.12.0.tar.bz2";
230+ locale = "pt-PT";
231+ arch = "linux-x86_64";
232+ sha256 = "73baa68f79b4a15795fc426dfc9a8d573a05e4ab8a663d122cfd802f93941825";
233+ }
234+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/rm/thunderbird-68.12.0.tar.bz2";
235+ locale = "rm";
236+ arch = "linux-x86_64";
237+ sha256 = "29f8ba57d9000803bae795c2ff977347af9a1f0df123337eaab3bdcc20786734";
238+ }
239+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ro/thunderbird-68.12.0.tar.bz2";
240+ locale = "ro";
241+ arch = "linux-x86_64";
242+ sha256 = "b8233ad81c6620c26a02457b9235ce0be0c5d93b81f88d9ddc84bc12f869dbad";
243+ }
244+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/ru/thunderbird-68.12.0.tar.bz2";
245+ locale = "ru";
246+ arch = "linux-x86_64";
247+ sha256 = "f959f786dbbb7d06cb33eca24efd9e2763c5ca73fc4ba47e9b933b6298d7f026";
248+ }
249+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/si/thunderbird-68.12.0.tar.bz2";
250+ locale = "si";
251+ arch = "linux-x86_64";
252+ sha256 = "dcf59c0c1ea0acdcc894463b04c54339a72dcceb25fe5478608265eb3ead226a";
253+ }
254+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/sk/thunderbird-68.12.0.tar.bz2";
255+ locale = "sk";
256+ arch = "linux-x86_64";
257+ sha256 = "2a06329fd4a9dd6333e2d73a44fca7eaf593032e8ace33736a03dbfffb2920a0";
258+ }
259+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/sl/thunderbird-68.12.0.tar.bz2";
260+ locale = "sl";
261+ arch = "linux-x86_64";
262+ sha256 = "f7bd3e3a407dbab07836342ff29fc143fe3904e7f878ea719522ade3fc4f6b84";
263+ }
264+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/sq/thunderbird-68.12.0.tar.bz2";
265+ locale = "sq";
266+ arch = "linux-x86_64";
267+ sha256 = "0edc58751a6794494efab8b0a2ce852374a747ccb73b38455475f0099ea0f238";
268+ }
269+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/sr/thunderbird-68.12.0.tar.bz2";
270+ locale = "sr";
271+ arch = "linux-x86_64";
272+ sha256 = "91ac5cc0646c062b00b3b064af53ba03c7e034b75afa13dca7586eb80578d377";
273+ }
274+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/sv-SE/thunderbird-68.12.0.tar.bz2";
275+ locale = "sv-SE";
276+ arch = "linux-x86_64";
277+ sha256 = "5aa21e4b78f4294835197f784a651f17453d83fce98e7140e49c6da117464fd9";
278+ }
279+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/tr/thunderbird-68.12.0.tar.bz2";
280+ locale = "tr";
281+ arch = "linux-x86_64";
282+ sha256 = "3ab2639dd126e3ed9b031fc10f4396c7d98ffa7b7ffca6a9b3f2f47590e3b83c";
283+ }
284+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/uk/thunderbird-68.12.0.tar.bz2";
285+ locale = "uk";
286+ arch = "linux-x86_64";
287+ sha256 = "59be2ddc7c65405e0b3854c2a551dab73df9736842ee362b2a20dc9088242a96";
288+ }
289+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/uz/thunderbird-68.12.0.tar.bz2";
290+ locale = "uz";
291+ arch = "linux-x86_64";
292+ sha256 = "ae196683b283525511fbd2e3ad428339672f2f1339566a323e01f6f649d333c1";
293+ }
294+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/vi/thunderbird-68.12.0.tar.bz2";
295+ locale = "vi";
296+ arch = "linux-x86_64";
297+ sha256 = "9d66b8e4eefbb6b8c0d9893b056fc684310ae583921d626cb676cd8a7b4b39de";
298+ }
299+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/zh-CN/thunderbird-68.12.0.tar.bz2";
300+ locale = "zh-CN";
301+ arch = "linux-x86_64";
302+ sha256 = "2839f2f076a8a6e283a3ffdd6100986a11d19b9108fce074f8e7f127cb0f375e";
303+ }
304+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-x86_64/zh-TW/thunderbird-68.12.0.tar.bz2";
305+ locale = "zh-TW";
306+ arch = "linux-x86_64";
307+ sha256 = "02ef645a7de8abc1c5dd92eb685d64570cf1db971cfe7e248111d6a17b3ddcd9";
308+ }
309+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ar/thunderbird-68.12.0.tar.bz2";
310+ locale = "ar";
311+ arch = "linux-i686";
312+ sha256 = "5c4d899245a38626fa18d849bcf01d50125dee60d715d76224ca0bb4623f73be";
313+ }
314+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ast/thunderbird-68.12.0.tar.bz2";
315+ locale = "ast";
316+ arch = "linux-i686";
317+ sha256 = "f657bdc5b43b75e43578251abccf5c7b9e6d0848fd55c6105060daba33c36721";
318+ }
319+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/be/thunderbird-68.12.0.tar.bz2";
320+ locale = "be";
321+ arch = "linux-i686";
322+ sha256 = "669a2cbfe600727b9d9a8ed5046272a1f19b80b6af9a6a6977ce1b89f60fa36e";
323+ }
324+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/bg/thunderbird-68.12.0.tar.bz2";
325+ locale = "bg";
326+ arch = "linux-i686";
327+ sha256 = "e1b33857544c10c0191316f6e3d16b34957196b35a922c884315714fe851389b";
328+ }
329+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/br/thunderbird-68.12.0.tar.bz2";
330+ locale = "br";
331+ arch = "linux-i686";
332+ sha256 = "b9e4a530529449446fe5a302277878c4d2192ef7bb48206f8528024087f520ea";
333+ }
334+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ca/thunderbird-68.12.0.tar.bz2";
335+ locale = "ca";
336+ arch = "linux-i686";
337+ sha256 = "aa5e4ae20fa9e5dbb8c0ba275ba18d1ba94900094ba3186aac40ffb27396a96f";
338+ }
339+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/cak/thunderbird-68.12.0.tar.bz2";
340+ locale = "cak";
341+ arch = "linux-i686";
342+ sha256 = "a812c9150feec48e2ebfb1786f5e30ade33203160fa4102382435641caeaf3b8";
343+ }
344+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/cs/thunderbird-68.12.0.tar.bz2";
345+ locale = "cs";
346+ arch = "linux-i686";
347+ sha256 = "75813ad7dd0ae5c073964296dd687e5c1289178491adc98d40e853ed812bdca9";
348+ }
349+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/cy/thunderbird-68.12.0.tar.bz2";
350+ locale = "cy";
351+ arch = "linux-i686";
352+ sha256 = "b3894f05cf905aa96612860dcef0bdb4bb9564901ef84172e11856a9fa9e0ca4";
353+ }
354+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/da/thunderbird-68.12.0.tar.bz2";
355+ locale = "da";
356+ arch = "linux-i686";
357+ sha256 = "a4f21bd2017043872a962167f98db358b824ae1821fcf03e2df1bef7783e07c0";
358+ }
359+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/de/thunderbird-68.12.0.tar.bz2";
360+ locale = "de";
361+ arch = "linux-i686";
362+ sha256 = "3a079685f75d2ec0320ec9e366b4e037954d67fa3f9e3bda055b8cd7de8fbdd0";
363+ }
364+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/dsb/thunderbird-68.12.0.tar.bz2";
365+ locale = "dsb";
366+ arch = "linux-i686";
367+ sha256 = "295a0f56429b3638dd0dcbf8d97a6376636b67e22d493ce8dfaceeb579466d18";
368+ }
369+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/el/thunderbird-68.12.0.tar.bz2";
370+ locale = "el";
371+ arch = "linux-i686";
372+ sha256 = "86e4b98ede80cc07cc1aec043af82068a73b7c76820f70df8314e3b91c108d18";
373+ }
374+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/en-GB/thunderbird-68.12.0.tar.bz2";
375+ locale = "en-GB";
376+ arch = "linux-i686";
377+ sha256 = "2cb03a17f88e3826181911ec6a7455528d1e4c051b065252c964c6c0794175e4";
378+ }
379+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/en-US/thunderbird-68.12.0.tar.bz2";
380+ locale = "en-US";
381+ arch = "linux-i686";
382+ sha256 = "11fe953ede0d99656534ac676f118e939024744c5301d378acbeac6792e668e5";
383+ }
384+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/es-AR/thunderbird-68.12.0.tar.bz2";
385+ locale = "es-AR";
386+ arch = "linux-i686";
387+ sha256 = "596264396a25adb873320222697e7f1a58aaab484de9c0d2e85f99962b6d893d";
388+ }
389+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/es-ES/thunderbird-68.12.0.tar.bz2";
390+ locale = "es-ES";
391+ arch = "linux-i686";
392+ sha256 = "a9512af30e2b1613a6bd1ae6f4ce785f676b2cf70b80a37d85a5e1566bb2b35f";
393+ }
394+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/et/thunderbird-68.12.0.tar.bz2";
395+ locale = "et";
396+ arch = "linux-i686";
397+ sha256 = "b7dcb196881a23e979edb5ae247a7c07b1cf1250cb4c159ce523d1a26be188c2";
398+ }
399+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/eu/thunderbird-68.12.0.tar.bz2";
400+ locale = "eu";
401+ arch = "linux-i686";
402+ sha256 = "4066164b4c9242a9885bc2de802c4f5b6b594c928db36ac72c94faabaad86679";
403+ }
404+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/fi/thunderbird-68.12.0.tar.bz2";
405+ locale = "fi";
406+ arch = "linux-i686";
407+ sha256 = "a7c635cbbbc10725b28052ccc61603fb60b91e06bbf1f240561bdb8f941af55a";
408+ }
409+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/fr/thunderbird-68.12.0.tar.bz2";
410+ locale = "fr";
411+ arch = "linux-i686";
412+ sha256 = "7dba28adb1287e1aa9ae85840fc3aca42aaedd4b2c2aa6cc68d5f793549d19b7";
413+ }
414+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/fy-NL/thunderbird-68.12.0.tar.bz2";
415+ locale = "fy-NL";
416+ arch = "linux-i686";
417+ sha256 = "bd763e264eb684ec3b0b1f2c68ce295d1df86994d15f5c66c487e4742bfef86e";
418+ }
419+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ga-IE/thunderbird-68.12.0.tar.bz2";
420+ locale = "ga-IE";
421+ arch = "linux-i686";
422+ sha256 = "52f9b5694efbdd8ecc76aef58695423c6a4b547b5b0cfedca313386b7500685e";
423+ }
424+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/gd/thunderbird-68.12.0.tar.bz2";
425+ locale = "gd";
426+ arch = "linux-i686";
427+ sha256 = "6c9c1b0f11ad13e0780371d54fedb52d2463713db3bc52adb72c8ea9ff80eb8f";
428+ }
429+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/gl/thunderbird-68.12.0.tar.bz2";
430+ locale = "gl";
431+ arch = "linux-i686";
432+ sha256 = "608bf5c0d6148cc3014758829ba06135222b462242456ca0984e7dc12654c2cd";
433+ }
434+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/he/thunderbird-68.12.0.tar.bz2";
435+ locale = "he";
436+ arch = "linux-i686";
437+ sha256 = "f92d569a53f34bfdda4dac185834e5692526f13f20853d1943f165af33b54a37";
438+ }
439+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/hr/thunderbird-68.12.0.tar.bz2";
440+ locale = "hr";
441+ arch = "linux-i686";
442+ sha256 = "60d2f184219f8d17c2739ee3cc8463bed474142bd2caad74157b97db2306b27f";
443+ }
444+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/hsb/thunderbird-68.12.0.tar.bz2";
445+ locale = "hsb";
446+ arch = "linux-i686";
447+ sha256 = "40ffece26101b2f6a7789511b026d99234bd34ec78e566e7e25065ae3201d693";
448+ }
449+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/hu/thunderbird-68.12.0.tar.bz2";
450+ locale = "hu";
451+ arch = "linux-i686";
452+ sha256 = "e74da0bdb27fe3375dfbd1ab042892de3ded84f33a6f6d46e209fdcaa28183d0";
453+ }
454+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/hy-AM/thunderbird-68.12.0.tar.bz2";
455+ locale = "hy-AM";
456+ arch = "linux-i686";
457+ sha256 = "fd93972c11842b56453449e72617deb3177d020c8f25cf4d5fb687f4a3ddb5c0";
458+ }
459+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/id/thunderbird-68.12.0.tar.bz2";
460+ locale = "id";
461+ arch = "linux-i686";
462+ sha256 = "546825968ad86e4c5c6effefd0f924cc1d10489fff7968f17401e3f84c4d1ab0";
463+ }
464+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/is/thunderbird-68.12.0.tar.bz2";
465+ locale = "is";
466+ arch = "linux-i686";
467+ sha256 = "1f2e2228c685be2d65d6e0b92eef8ff3e58d7b772f846d0707a9b02e6d0ad306";
468+ }
469+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/it/thunderbird-68.12.0.tar.bz2";
470+ locale = "it";
471+ arch = "linux-i686";
472+ sha256 = "41b27c8195432e1412e3c4645b823b8dd1f673eabf07ddc72f3d792d3f7488da";
473+ }
474+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ja/thunderbird-68.12.0.tar.bz2";
475+ locale = "ja";
476+ arch = "linux-i686";
477+ sha256 = "68940d44d933bb7228d6f9a03406ca01903c54fdf57eb5a1e1033b12ef507df6";
478+ }
479+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ka/thunderbird-68.12.0.tar.bz2";
480+ locale = "ka";
481+ arch = "linux-i686";
482+ sha256 = "ce0aff0fd47b00803ea66278b3514dcf65ecb5547878f8081f7ec6c1f411ce10";
483+ }
484+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/kab/thunderbird-68.12.0.tar.bz2";
485+ locale = "kab";
486+ arch = "linux-i686";
487+ sha256 = "3936b56eaa1e05a96626f7d10c8fcc3ba9014b1385b21243c049b133b923ddef";
488+ }
489+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/kk/thunderbird-68.12.0.tar.bz2";
490+ locale = "kk";
491+ arch = "linux-i686";
492+ sha256 = "7fa0aa64d0f0dcc6f71d6a21647cc4fccef935b783deb5d19b88f5b96b4b4ec4";
493+ }
494+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ko/thunderbird-68.12.0.tar.bz2";
495+ locale = "ko";
496+ arch = "linux-i686";
497+ sha256 = "4bddd0ccb747bb12cdc6d88c2c9544354293000c586454bb5932f4d81afbf400";
498+ }
499+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/lt/thunderbird-68.12.0.tar.bz2";
500+ locale = "lt";
501+ arch = "linux-i686";
502+ sha256 = "f1a3514188c1b887afd2c662a1b6abf6fe37b558864be0cc79e87ed147188461";
503+ }
504+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ms/thunderbird-68.12.0.tar.bz2";
505+ locale = "ms";
506+ arch = "linux-i686";
507+ sha256 = "7ea045d6db78ec7d6ebf164c8e3d28c2540a573238de518e934646573aec71dc";
508+ }
509+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/nb-NO/thunderbird-68.12.0.tar.bz2";
510+ locale = "nb-NO";
511+ arch = "linux-i686";
512+ sha256 = "d2c0e2099ea60b9da95ebd9bd79a5d0a6a1ebc84b8b490511a68c81355f97761";
513+ }
514+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/nl/thunderbird-68.12.0.tar.bz2";
515+ locale = "nl";
516+ arch = "linux-i686";
517+ sha256 = "48741be79422d80140ec862d004fa75a407f67490f67a3e440c01e0defe1f85f";
518+ }
519+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/nn-NO/thunderbird-68.12.0.tar.bz2";
520+ locale = "nn-NO";
521+ arch = "linux-i686";
522+ sha256 = "b40f0d7112cadab322c8b71cacce5d6df87fb80f40cc55ca22c279016c3ea805";
523+ }
524+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/pl/thunderbird-68.12.0.tar.bz2";
525+ locale = "pl";
526+ arch = "linux-i686";
527+ sha256 = "e64b10526cb460f437427cc4a7ea90959cc693a75fd6a61b43e9d3fd76ded618";
528+ }
529+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/pt-BR/thunderbird-68.12.0.tar.bz2";
530+ locale = "pt-BR";
531+ arch = "linux-i686";
532+ sha256 = "bdb558f9430c06871954ec6c7d54267625184a0cba914a87ad199e8f32b03de2";
533+ }
534+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/pt-PT/thunderbird-68.12.0.tar.bz2";
535+ locale = "pt-PT";
536+ arch = "linux-i686";
537+ sha256 = "4631e8247446653e91f239fdb5ad3c8531f3d007dbdc83818178a4cdc525edf4";
538+ }
539+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/rm/thunderbird-68.12.0.tar.bz2";
540+ locale = "rm";
541+ arch = "linux-i686";
542+ sha256 = "13e6aca7139fd89e83e7ae9b71253731f0954b0a83cc3560ecc00500b9bc1df7";
543+ }
544+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ro/thunderbird-68.12.0.tar.bz2";
545+ locale = "ro";
546+ arch = "linux-i686";
547+ sha256 = "023a567c42dad9bdbd465c8b99f12cf5f667ef4691e16971e09496c4a7db0f12";
548+ }
549+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/ru/thunderbird-68.12.0.tar.bz2";
550+ locale = "ru";
551+ arch = "linux-i686";
552+ sha256 = "9ec35bbce5f026a4262a5d708b53a767f47ac8e90314513d36a587d1a49dbb6b";
553+ }
554+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/si/thunderbird-68.12.0.tar.bz2";
555+ locale = "si";
556+ arch = "linux-i686";
557+ sha256 = "c540b94a45deeddf1f7f5a8cca8de7e944ee8ad9f8595a308836c159901ec0b6";
558+ }
559+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/sk/thunderbird-68.12.0.tar.bz2";
560+ locale = "sk";
561+ arch = "linux-i686";
562+ sha256 = "5296241664023773d2c0c4fa55e74eb6470482389c834d1934c252f79e79ebff";
563+ }
564+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/sl/thunderbird-68.12.0.tar.bz2";
565+ locale = "sl";
566+ arch = "linux-i686";
567+ sha256 = "cd0376137d8018875873332fdfae3bc3c0d6b2a2b881dfa970d7d7999e8b312b";
568+ }
569+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/sq/thunderbird-68.12.0.tar.bz2";
570+ locale = "sq";
571+ arch = "linux-i686";
572+ sha256 = "6fbf47759ca8c4d7cf30ca3af8a3fd35a01b7738422d29448cfd9eed81eba49b";
573+ }
574+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/sr/thunderbird-68.12.0.tar.bz2";
575+ locale = "sr";
576+ arch = "linux-i686";
577+ sha256 = "636708320247c7c45622fd9179d5689da97472a9308f11810623129cf5a0e8d7";
578+ }
579+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/sv-SE/thunderbird-68.12.0.tar.bz2";
580+ locale = "sv-SE";
581+ arch = "linux-i686";
582+ sha256 = "9550c173b047e3ff774f4c3faf2c1f125b3abc34e6feb5801c108fda94e54e4e";
583+ }
584+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/tr/thunderbird-68.12.0.tar.bz2";
585+ locale = "tr";
586+ arch = "linux-i686";
587+ sha256 = "ffe82a300c7fa7a0e826d11613f5187c003b009efa29f4755f17af0f88d9e73b";
588+ }
589+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/uk/thunderbird-68.12.0.tar.bz2";
590+ locale = "uk";
591+ arch = "linux-i686";
592+ sha256 = "b018769149c0a4ff323b90b5d51465733629e7c527b39381ba9696cb077ad767";
593+ }
594+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/uz/thunderbird-68.12.0.tar.bz2";
595+ locale = "uz";
596+ arch = "linux-i686";
597+ sha256 = "b0b59ac4d08c9f385f4ed7980065ce99ef24874734390a83af6e8fbd18173d99";
598+ }
599+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/vi/thunderbird-68.12.0.tar.bz2";
600+ locale = "vi";
601+ arch = "linux-i686";
602+ sha256 = "901b40a99d84e7c7360fd5be6a14aa04ef6cc04fe1275cac26824b310bbd26e0";
603+ }
604+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/zh-CN/thunderbird-68.12.0.tar.bz2";
605+ locale = "zh-CN";
606+ arch = "linux-i686";
607+ sha256 = "509478710f7c4fb404eec9fed0b6d22f4c5d76fee09ed833dffcefdacc53d55c";
608+ }
609+ { url = "http://archive.mozilla.org/pub/thunderbird/releases/68.12.0/linux-i686/zh-TW/thunderbird-68.12.0.tar.bz2";
610+ locale = "zh-TW";
611+ arch = "linux-i686";
612+ sha256 = "a12dd777cc3eaf629cc7a6f4b8d4744cf63c3e778e559d9b3ce332414e509515";
613+ }
614+ ];
615+}
test/golden/importless/68_sources.txtnew file+3
@@ -0,0 +1,3 @@
1+{ sources = [{arch = String; locale = String; sha256 = String; url = String;}];
2+ version = String;
3+}
test/golden/importless/6_qt4.nixnew file+41
@@ -0,0 +1,41 @@
1+{ stdenv, fetchurl, qt4, qmake4Hook, AGL }:
2+
3+stdenv.mkDerivation rec {
4+ name = "qwt-6.1.5";
5+
6+ src = fetchurl {
7+ url = "mirror://sourceforge/qwt/${name}.tar.bz2";
8+ sha256 = "0hf0mpca248xlqn7xnzkfj8drf19gdyg5syzklvq8pibxiixwxj0";
9+ };
10+
11+ buildInputs = [
12+ qt4
13+ ] ++ stdenv.lib.optionals stdenv.isDarwin [ AGL ];
14+
15+ nativeBuildInputs = [ qmake4Hook ];
16+
17+ enableParallelBuilding = true;
18+
19+ postPatch = ''
20+ sed -e "s|QWT_INSTALL_PREFIX.*=.*|QWT_INSTALL_PREFIX = $out|g" -i qwtconfig.pri
21+ '';
22+
23+ # qwt.framework output includes a relative reference to itself, which breaks dependents
24+ preFixup =
25+ stdenv.lib.optionalString stdenv.isDarwin ''
26+ echo "Attempting to repair qwt"
27+ install_name_tool -id "$out/lib/qwt.framework/Versions/6/qwt" "$out/lib/qwt.framework/Versions/6/qwt"
28+ '';
29+
30+ qmakeFlags = [ "-after doc.path=$out/share/doc/${name}" ];
31+
32+ meta = with stdenv.lib; {
33+ description = "Qt widgets for technical applications";
34+ homepage = "http://qwt.sourceforge.net/";
35+ # LGPL 2.1 plus a few exceptions (more liberal)
36+ license = stdenv.lib.licenses.qwt;
37+ platforms = platforms.linux ++ platforms.darwin;
38+ maintainers = [ maintainers.bjornfor ];
39+ branch = "6";
40+ };
41+}
test/golden/importless/6_qt4.txtnew file+39
@@ -0,0 +1,39 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ.
2+( α.isDarwin = β,
3+ α.lib = γ,
4+ α.mkDerivation =
5+ { buildInputs = [δ];
6+ enableParallelBuilding = Bool;
7+ meta =
8+ { branch = String;
9+ description = String;
10+ homepage = String;
11+ license = ε;
12+ maintainers = [ζ];
13+ platforms = [η];
14+ };
15+ name = String;
16+ nativeBuildInputs = [θ];
17+ postPatch = String;
18+ preFixup = ι;
19+ qmakeFlags = [String];
20+ src = κ;
21+ } ->
22+ λ,
23+ γ.optionalString = β -> String -> ι,
24+ μ.maintainers = ν,
25+ μ.platforms = ξ,
26+ ο.licenses = π,
27+ π.qwt = ε,
28+ ν.bjornfor = ζ,
29+ ξ.linux = [η],
30+ ρ.darwin = [η],
31+ σ.optionals = τ -> [υ] -> [δ]
32+) =>
33+{ AGL = υ;
34+ fetchurl = {sha256 = String; url = String;} -> κ;
35+ qmake4Hook = θ;
36+ qt4 = δ;
37+ stdenv = α;
38+} ->
39+λ
test/golden/importless/7.0.nixnew file+88
@@ -0,0 +1,88 @@
1+{ lib, stdenv, fetchFromGitHub, pkgconfig, libtool
2+, bzip2, zlib, libX11, libXext, libXt, fontconfig, freetype, ghostscript, libjpeg, djvulibre
3+, lcms2, openexr, libpng, librsvg, libtiff, libxml2, openjpeg, libwebp, libheif
4+, ApplicationServices
5+}:
6+
7+let
8+ arch =
9+ if stdenv.hostPlatform.system == "i686-linux" then "i686"
10+ else if stdenv.hostPlatform.system == "x86_64-linux" || stdenv.hostPlatform.system == "x86_64-darwin" then "x86-64"
11+ else if stdenv.hostPlatform.system == "armv7l-linux" then "armv7l"
12+ else if stdenv.hostPlatform.system == "aarch64-linux" then "aarch64"
13+ else throw "ImageMagick is not supported on this platform.";
14+
15+ cfg = {
16+ version = "7.0.10-27";
17+ sha256 = "1fqwbg2ws6ix3bymx7ncb4k4f6bg8q44n9xnlvngjapflnrmhcph";
18+ patches = [];
19+ };
20+in
21+
22+stdenv.mkDerivation {
23+ pname = "imagemagick";
24+ inherit (cfg) version;
25+
26+ src = fetchFromGitHub {
27+ owner = "ImageMagick";
28+ repo = "ImageMagick";
29+ rev = cfg.version;
30+ inherit (cfg) sha256;
31+ };
32+
33+ patches = cfg.patches;
34+
35+ outputs = [ "out" "dev" "doc" ]; # bin/ isn't really big
36+ outputMan = "out"; # it's tiny
37+
38+ enableParallelBuilding = true;
39+
40+ configureFlags =
41+ [ "--with-frozenpaths" ]
42+ ++ [ "--with-gcc-arch=${arch}" ]
43+ ++ lib.optional (librsvg != null) "--with-rsvg"
44+ ++ lib.optionals (ghostscript != null)
45+ [ "--with-gs-font-dir=${ghostscript}/share/ghostscript/fonts"
46+ "--with-gslib"
47+ ]
48+ ++ lib.optionals stdenv.hostPlatform.isMinGW
49+ [ "--enable-static" "--disable-shared" ] # due to libxml2 being without DLLs ATM
50+ ;
51+
52+ nativeBuildInputs = [ pkgconfig libtool ];
53+
54+ buildInputs =
55+ [ zlib fontconfig freetype ghostscript
56+ libpng libtiff libxml2 libheif djvulibre
57+ ]
58+ ++ lib.optionals (!stdenv.hostPlatform.isMinGW)
59+ [ openexr librsvg openjpeg ]
60+ ++ lib.optional stdenv.isDarwin ApplicationServices;
61+
62+ propagatedBuildInputs =
63+ [ bzip2 freetype libjpeg lcms2 ]
64+ ++ lib.optionals (!stdenv.hostPlatform.isMinGW)
65+ [ libX11 libXext libXt libwebp ]
66+ ;
67+
68+ postInstall = ''
69+ (cd "$dev/include" && ln -s ImageMagick* ImageMagick)
70+ moveToOutput "bin/*-config" "$dev"
71+ moveToOutput "lib/ImageMagick-*/config-Q16HDRI" "$dev" # includes configure params
72+ for file in "$dev"/bin/*-config; do
73+ substituteInPlace "$file" --replace pkg-config \
74+ "PKG_CONFIG_PATH='$dev/lib/pkgconfig' '${pkgconfig}/bin/${pkgconfig.targetPrefix}pkg-config'"
75+ done
76+ '' + lib.optionalString (ghostscript != null) ''
77+ for la in $out/lib/*.la; do
78+ sed 's|-lgs|-L${lib.getLib ghostscript}/lib -lgs|' -i $la
79+ done
80+ '';
81+
82+ meta = with stdenv.lib; {
83+ homepage = "http://www.imagemagick.org/";
84+ description = "A software suite to create, edit, compose, or convert bitmap images";
85+ platforms = platforms.linux ++ platforms.darwin;
86+ license = licenses.asl20;
87+ };
88+}
test/golden/importless/7.3.nixnew file+29
@@ -0,0 +1,29 @@
1+{ stdenv, fetchurl, fetchpatch, cmake, ninja, tcl, tk,
2+ libGL, libGLU, libXext, libXmu, libXi, darwin }:
3+
4+stdenv.mkDerivation rec {
5+ pname = "opencascade-occt";
6+ version = "7.3.0p3";
7+ commit = "V${builtins.replaceStrings ["."] ["_"] version}";
8+
9+ src = fetchurl {
10+ name = "occt-${commit}.tar.gz";
11+ url = "https://git.dev.opencascade.org/gitweb/?p=occt.git;a=snapshot;h=${commit};sf=tgz";
12+ sha256 = "0k9c3ypcnjcilq1dhsf6xxbd52gyq4h5rchvp30k3c8ph4ris5pz";
13+ };
14+
15+ nativeBuildInputs = [ cmake ninja ];
16+ buildInputs = [ tcl tk libGL libGLU libXext libXmu libXi ]
17+ ++ stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Cocoa;
18+
19+ meta = with stdenv.lib; {
20+ description = "Open CASCADE Technology, libraries for 3D modeling and numerical simulation";
21+ homepage = "https://www.opencascade.org/";
22+ license = licenses.lgpl21; # essentially...
23+ # The special exception defined in the file OCCT_LGPL_EXCEPTION.txt
24+ # are basically about making the license a little less share-alike.
25+ maintainers = with maintainers; [ amiloradovsky ];
26+ platforms = platforms.all;
27+ };
28+
29+}
test/golden/importless/7.3.txtnew file+45
@@ -0,0 +1,45 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ.
2+( α.isDarwin = β,
3+ α.lib = γ,
4+ α.mkDerivation =
5+ { buildInputs = [δ];
6+ commit = String;
7+ meta =
8+ { description = String;
9+ homepage = String;
10+ license = ε;
11+ maintainers = [ζ];
12+ platforms = η;
13+ };
14+ nativeBuildInputs = [θ];
15+ pname = String;
16+ src = ι;
17+ version = String;
18+ } ->
19+ κ,
20+ λ.apple_sdk = μ,
21+ γ.amiloradovsky = ζ,
22+ γ.licenses = ν,
23+ γ.maintainers = ξ,
24+ γ.platforms = ο,
25+ ν.lgpl21 = ε,
26+ ο.all = η,
27+ π.optional = β -> ρ -> [δ],
28+ μ.frameworks = σ,
29+ σ.Cocoa = ρ
30+) =>
31+{ cmake = θ;
32+ darwin = λ;
33+ fetchpatch = τ;
34+ fetchurl = {name = String; sha256 = String; url = String;} -> ι;
35+ libGL = δ;
36+ libGLU = δ;
37+ libXext = δ;
38+ libXi = δ;
39+ libXmu = δ;
40+ ninja = θ;
41+ stdenv = α;
42+ tcl = δ;
43+ tk = δ;
44+} ->
45+κ
test/golden/importless/7.6.6.nixnew file+74
@@ -0,0 +1,74 @@
1+{ lib, stdenv, fetchurl, fetchpatch, pkgconfig, libatomic_ops
2+, enableLargeConfig ? false # doc: https://github.com/ivmai/bdwgc/blob/v7.6.6/doc/README.macros#L179
3+}:
4+
5+stdenv.mkDerivation rec {
6+ pname = "boehm-gc";
7+ version = "7.6.6";
8+
9+ src = fetchurl {
10+ urls = [
11+ "https://www.hboehm.info/gc/gc_source/gc-${version}.tar.gz"
12+ "https://github.com/ivmai/bdwgc/releases/download/v${version}/gc-${version}.tar.gz"
13+ ];
14+ sha256 = "1p1r015a7jbpvkkbgzv1y8nxrbbp6dg0mq3ksi6ji0qdz3wfss79";
15+ };
16+
17+ buildInputs = [ libatomic_ops ];
18+ nativeBuildInputs = [ pkgconfig ];
19+
20+ outputs = [ "out" "dev" "doc" ];
21+ separateDebugInfo = stdenv.isLinux;
22+
23+ preConfigure = stdenv.lib.optionalString (stdenv.hostPlatform.libc == "musl") ''
24+ export NIX_CFLAGS_COMPILE+=" -D_GNU_SOURCE -DUSE_MMAP -DHAVE_DL_ITERATE_PHDR"
25+ '';
26+
27+ patches = [ (fetchpatch {
28+ url = "https://gitweb.gentoo.org/proj/musl.git/plain/dev-libs/boehm-gc/files/boehm-gc-7.6.0-sys_select.patch";
29+ sha256 = "1gydwlklvci30f5dpp5ccw2p2qpph5y41r55wx9idamjlq66fbb3";
30+ }) ] ++
31+ # https://github.com/ivmai/bdwgc/pull/208
32+ lib.optional stdenv.hostPlatform.isRiscV ./riscv.patch;
33+
34+ configureFlags =
35+ [ "--enable-cplusplus" ]
36+ ++ lib.optional enableLargeConfig "--enable-large-config"
37+ ++ lib.optional (stdenv.hostPlatform.libc == "musl") "--disable-static";
38+
39+ doCheck = true; # not cross;
40+
41+ # Don't run the native `strip' when cross-compiling.
42+ dontStrip = stdenv.hostPlatform != stdenv.buildPlatform;
43+
44+ enableParallelBuilding = true;
45+
46+ meta = {
47+ description = "The Boehm-Demers-Weiser conservative garbage collector for C and C++";
48+
49+ longDescription = ''
50+ The Boehm-Demers-Weiser conservative garbage collector can be used as a
51+ garbage collecting replacement for C malloc or C++ new. It allows you
52+ to allocate memory basically as you normally would, without explicitly
53+ deallocating memory that is no longer useful. The collector
54+ automatically recycles memory when it determines that it can no longer
55+ be otherwise accessed.
56+
57+ The collector is also used by a number of programming language
58+ implementations that either use C as intermediate code, want to
59+ facilitate easier interoperation with C libraries, or just prefer the
60+ simple collector interface.
61+
62+ Alternatively, the garbage collector may be used as a leak detector for
63+ C or C++ programs, though that is not its primary goal.
64+ '';
65+
66+ homepage = "https://hboehm.info/gc/";
67+
68+ # non-copyleft, X11-style license
69+ license = "https://hboehm.info/gc/license.txt";
70+
71+ maintainers = [ ];
72+ platforms = stdenv.lib.platforms.all;
73+ };
74+}
test/golden/importless/7.6.6.txtnew file+46
@@ -0,0 +1,46 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ.
2+( β.optional = γ -> String -> [δ],
3+ ε.buildPlatform = ζ,
4+ ε.hostPlatform = η,
5+ ε.isLinux = θ,
6+ ε.lib = ι,
7+ ε.mkDerivation =
8+ { buildInputs = [κ];
9+ configureFlags = [String];
10+ doCheck = Bool;
11+ dontStrip = Bool;
12+ enableParallelBuilding = Bool;
13+ meta =
14+ { description = String;
15+ homepage = String;
16+ license = String;
17+ longDescription = String;
18+ maintainers = ∀ α. [α];
19+ platforms = λ;
20+ };
21+ nativeBuildInputs = [μ];
22+ outputs = [String];
23+ patches = [δ];
24+ pname = String;
25+ preConfigure = ν;
26+ separateDebugInfo = θ;
27+ src = ξ;
28+ version = String;
29+ } ->
30+ ο,
31+ ι.optionalString = Bool -> String -> ν,
32+ η.libc = String,
33+ π.isRiscV = γ,
34+ ρ.platforms = σ,
35+ σ.all = λ,
36+ τ.libc = String
37+) =>
38+{ enableLargeConfig = Bool;
39+ fetchpatch = {sha256 = String; url = String;} -> δ;
40+ fetchurl = {sha256 = String; urls = [String];} -> ξ;
41+ lib = β;
42+ libatomic_ops = κ;
43+ pkgconfig = μ;
44+ stdenv = ε;
45+} ->
46+ο
test/golden/importless/7.x.nixnew file+36
@@ -0,0 +1,36 @@
1+{ stdenv, fetchurl, libxml2, openssl, readline, gawk }:
2+
3+stdenv.mkDerivation rec {
4+ name = "virtuoso-opensource-7.2.4.2";
5+
6+ src = fetchurl {
7+ url = "mirror://sourceforge/virtuoso/${name}.tar.gz";
8+ sha256 = "12dqam1gc1v93l0bj0vlpvjqppki6y1hqrlznywxnw0rrz9pb002";
9+ };
10+
11+ buildInputs = [ libxml2 openssl readline gawk ];
12+
13+ CPP = "${stdenv.cc}/bin/gcc -E";
14+
15+ configureFlags = [
16+ "--enable-shared" "--disable-all-vads" "--with-readline=${readline.dev}"
17+ "--disable-hslookup" "--disable-wbxml2" "--without-iodbc"
18+ "--enable-openssl=${openssl.dev}"
19+ ];
20+
21+ postInstall=''
22+ echo Moving documentation
23+ mkdir -pv $out/share/doc
24+ mv -v $out/share/virtuoso/doc $out/share/doc/${name}
25+ echo Removing jars and empty directories
26+ find $out -name "*.a" -delete -o -name "*.jar" -delete -o -type d -empty -delete
27+ '';
28+
29+ meta = with stdenv.lib; {
30+ description = "SQL/RDF database used by, e.g., KDE-nepomuk";
31+ homepage = "http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/";
32+ #configure: The current version [...] can only be built on 64bit platforms
33+ platforms = [ "x86_64-linux" ];
34+ license = licenses.gpl2;
35+ };
36+}
test/golden/importless/7.x.txtnew file+28
@@ -0,0 +1,28 @@
1+∀ α β γ δ ε ζ η.
2+( α.lib = β,
3+ α.mkDerivation =
4+ { CPP = String;
5+ buildInputs = [γ];
6+ configureFlags = [String];
7+ meta =
8+ { description = String;
9+ homepage = String;
10+ license = δ;
11+ platforms = [String];
12+ };
13+ name = String;
14+ postInstall = String;
15+ src = ε;
16+ } ->
17+ ζ,
18+ β.licenses = η,
19+ η.gpl2 = δ
20+) =>
21+{ fetchurl = {sha256 = String; url = String;} -> ε;
22+ gawk = γ;
23+ libxml2 = γ;
24+ openssl = γ;
25+ readline = γ;
26+ stdenv = α;
27+} ->
28+ζ
test/golden/importless/78.nixnew file+118
@@ -0,0 +1,118 @@
1+{ stdenv
2+, fetchurl
3+, fetchpatch
4+, autoconf213
5+, pkgconfig
6+, perl
7+, python3
8+, zip
9+, buildPackages
10+, which
11+, readline
12+, zlib
13+, icu67
14+, cargo
15+, rustc
16+, rust-cbindgen
17+, yasm
18+, llvmPackages
19+, nspr
20+}:
21+
22+stdenv.mkDerivation rec {
23+ pname = "spidermonkey";
24+ version = "78.1.0";
25+
26+ src = fetchurl {
27+ url = "mirror://mozilla/firefox/releases/${version}esr/source/firefox-${version}esr.source.tar.xz";
28+ sha256 = "18k47dl9hbnpqw69csxjar5dhwa7r8k7j9kvcfgmwb1iv6ba601n";
29+ };
30+
31+ outputs = [ "out" "dev" ];
32+ setOutputFlags = false; # Configure script only understands --includedir
33+
34+ nativeBuildInputs = [
35+ autoconf213
36+ cargo
37+ llvmPackages.llvm # for llvm-objdump
38+ perl
39+ pkgconfig
40+ python3
41+ rust-cbindgen
42+ rustc
43+ which
44+ yasm # to buid icu? seems weird
45+ zip
46+ ];
47+
48+ buildInputs = [
49+ icu67
50+ nspr
51+ readline
52+ zlib
53+ ];
54+
55+ patches = [
56+ # https://mail.gnome.org/archives/distributor-list/2020-August/msg00000.html
57+ (fetchpatch {
58+ url = "https://github.com/ptomato/mozjs/commit/b2974f8a6558d2dc4517b49ee313a9900a853285.patch";
59+ sha256 = "1bl5mbx7gmad6fmpc427263i1ychi2linpg69kxlr2w91r5m6ji3";
60+ })
61+ (fetchpatch {
62+ url = "https://github.com/ptomato/mozjs/commit/e5a2eb99f653ae03c67e536df1d55d265a0a1605.patch";
63+ sha256 = "0xhy63nw2byibmjc41yh6dwpg282nylganrs5aprn9pbqbcpsvif";
64+ })
65+ ];
66+
67+ preConfigure = ''
68+ export CXXFLAGS="-fpermissive"
69+ export LIBXUL_DIST=$out
70+ export PYTHON="${buildPackages.python3.interpreter}"
71+
72+ # We can't build in js/src/, so create a build dir
73+ mkdir obj
74+ cd obj/
75+ configureScript=../js/src/configure
76+ '';
77+
78+ configureFlags = [
79+ "--with-system-zlib"
80+ "--with-system-nspr"
81+ "--with-system-icu"
82+ "--with-intl-api"
83+ "--enable-readline"
84+ "--enable-shared-js"
85+ "--disable-jemalloc"
86+ # Fedora and Arch disable optimize, but it doesn't seme to be necessary
87+ # It turns on -O3 which some gcc version had a problem with:
88+ # https://src.fedoraproject.org/rpms/mozjs38/c/761399aba092bcb1299bb4fccfd60f370ab4216e
89+ "--enable-optimize"
90+ "--enable-release"
91+ ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
92+ # Spidermonkey seems to use different host/build terminology for cross
93+ # compilation here.
94+ "--host=${stdenv.buildPlatform.config}"
95+ "--target=${stdenv.hostPlatform.config}"
96+ ];
97+
98+ configurePlatforms = [ ];
99+
100+ depsBuildBuild = [ buildPackages.stdenv.cc ];
101+
102+ # Remove unnecessary static lib
103+ preFixup = ''
104+ moveToOutput bin/js60-config "$dev"
105+ rm $out/lib/libjs_static.ajs
106+ ln -s $out/bin/js60 $out/bin/js
107+ '';
108+
109+ enableParallelBuilding = true;
110+
111+ meta = with stdenv.lib; {
112+ description = "Mozilla's JavaScript engine written in C/C++";
113+ homepage = "https://developer.mozilla.org/en/SpiderMonkey";
114+ license = licenses.gpl2; # TODO: MPL/GPL/LGPL tri-license.
115+ maintainers = [ maintainers.abbradar ];
116+ platforms = platforms.linux;
117+ };
118+}
test/golden/importless/78.txtnew file+60
@@ -0,0 +1,60 @@
1+∀ β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ.
2+( β.buildPlatform = γ,
3+ β.hostPlatform = γ,
4+ β.lib = δ,
5+ β.mkDerivation =
6+ { buildInputs = [ε];
7+ configureFlags = [String];
8+ configurePlatforms = ∀ α. [α];
9+ depsBuildBuild = [ζ];
10+ enableParallelBuilding = Bool;
11+ meta =
12+ { description = String;
13+ homepage = String;
14+ license = η;
15+ maintainers = [θ];
16+ platforms = ι;
17+ };
18+ nativeBuildInputs = [κ];
19+ outputs = [String];
20+ patches = [λ];
21+ pname = String;
22+ preConfigure = String;
23+ preFixup = String;
24+ setOutputFlags = Bool;
25+ src = μ;
26+ version = String;
27+ } ->
28+ ν,
29+ ξ.stdenv = ο,
30+ π.llvm = κ,
31+ δ.licenses = ρ,
32+ δ.maintainers = σ,
33+ δ.platforms = τ,
34+ ρ.gpl2 = η,
35+ σ.abbradar = θ,
36+ τ.linux = ι,
37+ υ.optionals = Bool -> [String] -> [String],
38+ ο.cc = ζ
39+) =>
40+{ autoconf213 = κ;
41+ buildPackages = ξ;
42+ cargo = κ;
43+ fetchpatch = {sha256 = String; url = String;} -> λ;
44+ fetchurl = {sha256 = String; url = String;} -> μ;
45+ icu67 = ε;
46+ llvmPackages = π;
47+ nspr = ε;
48+ perl = κ;
49+ pkgconfig = κ;
50+ python3 = κ;
51+ readline = ε;
52+ rust-cbindgen = κ;
53+ rustc = κ;
54+ stdenv = β;
55+ which = κ;
56+ yasm = κ;
57+ zip = κ;
58+ zlib = ε;
59+} ->
60+ν
test/golden/importless/8.0.x.nixnew file+73
@@ -0,0 +1,73 @@
1+{ lib, stdenv, fetchurl, bison, cmake, pkgconfig
2+, boost, icu, libedit, libevent, lz4, ncurses, openssl, protobuf, re2, readline, zlib
3+, numactl, perl, cctools, CoreServices, developer_cmds
4+}:
5+
6+let
7+self = stdenv.mkDerivation rec {
8+ pname = "mysql";
9+ version = "8.0.17";
10+
11+ src = fetchurl {
12+ url = "https://dev.mysql.com/get/Downloads/MySQL-${self.mysqlVersion}/${pname}-${version}.tar.gz";
13+ sha256 = "1mjrlxn8vigi69r0r674j2dibdnkaar01ji5965gsyx7k60z7qy6";
14+ };
15+
16+ patches = [
17+ ./abi-check.patch
18+ ./libutils.patch
19+ ];
20+
21+ nativeBuildInputs = [ bison cmake pkgconfig ];
22+
23+ buildInputs = [
24+ boost icu libedit libevent lz4 ncurses openssl protobuf re2 readline zlib
25+ ] ++ lib.optionals stdenv.isLinux [
26+ numactl
27+ ] ++ lib.optionals stdenv.isDarwin [
28+ cctools CoreServices developer_cmds
29+ ];
30+
31+ outputs = [ "out" "static" ];
32+
33+ cmakeFlags = [
34+ "-DCMAKE_SKIP_BUILD_RPATH=OFF" # To run libmysql/libmysql_api_test during build.
35+ "-DFORCE_UNSUPPORTED_COMPILER=1" # To configure on Darwin.
36+ "-DWITH_ROUTER=OFF" # It may be packaged separately.
37+ "-DWITH_SYSTEM_LIBS=ON"
38+ "-DWITH_UNIT_TESTS=OFF"
39+ "-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
40+ "-DMYSQL_DATADIR=/var/lib/mysql"
41+ "-DINSTALL_INFODIR=share/mysql/docs"
42+ "-DINSTALL_MANDIR=share/man"
43+ "-DINSTALL_PLUGINDIR=lib/mysql/plugin"
44+ "-DINSTALL_INCLUDEDIR=include/mysql"
45+ "-DINSTALL_DOCREADMEDIR=share/mysql"
46+ "-DINSTALL_SUPPORTFILESDIR=share/mysql"
47+ "-DINSTALL_MYSQLSHAREDIR=share/mysql"
48+ "-DINSTALL_MYSQLTESTDIR="
49+ "-DINSTALL_DOCDIR=share/mysql/docs"
50+ "-DINSTALL_SHAREDIR=share/mysql"
51+ ];
52+
53+ postInstall = ''
54+ moveToOutput "lib/*.a" $static
55+ so=${stdenv.hostPlatform.extensions.sharedLibrary}
56+ ln -s libmysqlclient$so $out/lib/libmysqlclient_r$so
57+ '';
58+
59+ passthru = {
60+ client = self;
61+ connector-c = self;
62+ server = self;
63+ mysqlVersion = "8.0";
64+ };
65+
66+ meta = with lib; {
67+ homepage = "https://www.mysql.com/";
68+ description = "The world's most popular open source database";
69+ license = licenses.gpl2;
70+ maintainers = with maintainers; [ orivej ];
71+ platforms = platforms.unix;
72+ };
73+}; in self
test/golden/importless/8.0.x.txtnew file+56
@@ -0,0 +1,56 @@
1+∀ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ.
2+( α.licenses = β,
3+ α.maintainers = γ,
4+ α.optionals = δ -> [ε] -> [ζ],
5+ α.orivej = η,
6+ α.platforms = θ,
7+ ι.isDarwin = κ,
8+ ι.isLinux = δ,
9+ ι.mkDerivation =
10+ { buildInputs = [ζ];
11+ cmakeFlags = [String];
12+ meta =
13+ { description = String;
14+ homepage = String;
15+ license = λ;
16+ maintainers = [η];
17+ platforms = μ;
18+ };
19+ nativeBuildInputs = [ν];
20+ outputs = [String];
21+ passthru =
22+ {client = ξ; connector-c = ξ; mysqlVersion = String; server = ξ;};
23+ patches = [String];
24+ pname = String;
25+ postInstall = String;
26+ src = ο;
27+ version = String;
28+ } ->
29+ ξ,
30+ β.gpl2 = λ,
31+ θ.unix = μ
32+) =>
33+{ CoreServices = π;
34+ bison = ν;
35+ boost = ζ;
36+ cctools = π;
37+ cmake = ν;
38+ developer_cmds = π;
39+ fetchurl = {sha256 = String; url = String;} -> ο;
40+ icu = ζ;
41+ lib = α;
42+ libedit = ζ;
43+ libevent = ζ;
44+ lz4 = ζ;
45+ ncurses = ζ;
46+ numactl = ε;
47+ openssl = ζ;
48+ perl = ρ;
49+ pkgconfig = ν;
50+ protobuf = ζ;
51+ re2 = ζ;
52+ readline = ζ;
53+ stdenv = ι;
54+ zlib = ζ;
55+} ->
56+ξ
test/golden/importless/8.10.1.nixnew file+258

This diff is too big to show here.

test/golden/importless/8.10.2-binary.nixnew file+222

This diff is too big to show here.

test/golden/importless/8.10.2.nixnew file+253

This diff is too big to show here.

test/golden/importless/8.5.nixnew file+10

This diff is too big to show here.

test/golden/importless/8.5.txtnew file+7

This diff is too big to show here.

test/golden/importless/8.6.5-binary.nixnew file+165

This diff is too big to show here.

test/golden/importless/8.6.5.nixnew file+267

This diff is too big to show here.

test/golden/importless/8.6.nixnew file+12

This diff is too big to show here.

test/golden/importless/8.6.txtnew file+11

This diff is too big to show here.

test/golden/importless/8.8.2.nixnew file+253

This diff is too big to show here.

test/golden/importless/8.8.3.nixnew file+258

This diff is too big to show here.

test/golden/importless/8.8.4.nixnew file+265

This diff is too big to show here.

test/golden/importless/8.nixnew file+65

This diff is too big to show here.

test/golden/importless/825_40_1.nixnew file+13

This diff is too big to show here.

test/golden/importless/825_40_1.txtnew file+6

This diff is too big to show here.

test/golden/importless/8_0.nixnew file+14

This diff is too big to show here.

test/golden/importless/8_0.txtnew file+11

This diff is too big to show here.

test/golden/importless/9.2.nixnew file+65

This diff is too big to show here.

test/golden/importless/9.2.txtnew file+43

This diff is too big to show here.

test/golden/importless/9.nixnew file+122

This diff is too big to show here.

test/golden/importless/9.x.nixnew file+95

This diff is too big to show here.

test/golden/importless/9.x.txtnew file+67

This diff is too big to show here.

test/golden/importless/Cargo.nixnew file+64

This diff is too big to show here.

test/golden/importless/Cargo.txtnew file+55

This diff is too big to show here.

test/golden/importless/HEAD.nixnew file+266

This diff is too big to show here.

test/golden/importless/LASzip2.nixnew file+21

This diff is too big to show here.

test/golden/importless/LASzip2.txtnew file+24

This diff is too big to show here.

test/golden/importless/Prelude.nixnew file+59

This diff is too big to show here.

test/golden/importless/Prelude.txtnew file+27

This diff is too big to show here.

test/golden/importless/R16B02-basho.nixnew file+65

This diff is too big to show here.

test/golden/importless/R16B02-basho.txtnew file+34

This diff is too big to show here.

test/golden/importless/R18.nixnew file+34

This diff is too big to show here.

test/golden/importless/R18.txtnew file+5

This diff is too big to show here.

test/golden/importless/R19.nixnew file+19

This diff is too big to show here.

test/golden/importless/R19.txtnew file+6

This diff is too big to show here.

test/golden/importless/R20.nixnew file+10

This diff is too big to show here.

test/golden/importless/R20.txtnew file+4

This diff is too big to show here.

test/golden/importless/R21.nixnew file+10

This diff is too big to show here.

test/golden/importless/R21.txtnew file+4

This diff is too big to show here.

test/golden/importless/SystemdJournal2Gelf.nixnew file+59

This diff is too big to show here.

test/golden/importless/_3bmd.nixnew file+30

This diff is too big to show here.

test/golden/importless/_3bmd.txtnew file+16

This diff is too big to show here.

test/golden/importless/abnf.nixnew file+27

This diff is too big to show here.

test/golden/importless/abnf.txtnew file+16

This diff is too big to show here.

test/golden/importless/account-service-util.nixnew file+44

This diff is too big to show here.

test/golden/importless/account-service-util.txtnew file+28

This diff is too big to show here.

test/golden/importless/accountsservice.nixnew file+58

This diff is too big to show here.

test/golden/importless/accountsservice.txtnew file+32

This diff is too big to show here.

test/golden/importless/acpid.nixnew file+156

This diff is too big to show here.

test/golden/importless/acpilight.nixnew file+24

This diff is too big to show here.

test/golden/importless/acpilight.txtnew file+14

This diff is too big to show here.

test/golden/importless/actkbd.nixnew file+133

This diff is too big to show here.

test/golden/importless/adb.nixnew file+30

This diff is too big to show here.

test/golden/importless/adb.txtnew file+30

This diff is too big to show here.

test/golden/importless/addons.nixnew file+964

This diff is too big to show here.

test/golden/importless/addons.txtnew file+478

This diff is too big to show here.

test/golden/importless/advanced.nixnew file+26

This diff is too big to show here.

test/golden/importless/advanced.txtnew file+38

This diff is too big to show here.

test/golden/importless/aerospike.nixnew file+156

This diff is too big to show here.

test/golden/importless/aether-util.nixnew file+15

This diff is too big to show here.

test/golden/importless/afterstep.nixnew file+25

This diff is too big to show here.

test/golden/importless/afterstep.txtnew file+24

This diff is too big to show here.

test/golden/importless/agda-packages.nixnew file+30

This diff is too big to show here.

test/golden/importless/age.nixnew file+65

This diff is too big to show here.

test/golden/importless/agent.nixnew file+29

This diff is too big to show here.

test/golden/importless/agent.txtnew file+33

This diff is too big to show here.

test/golden/importless/agetty.nixnew file+117

This diff is too big to show here.

test/golden/importless/aggregator.nixnew file+35

This diff is too big to show here.

test/golden/importless/aggregator.txtnew file+8

This diff is too big to show here.

test/golden/importless/airsonic.nixnew file+155

This diff is too big to show here.

test/golden/importless/ais.nixnew file+40

This diff is too big to show here.

test/golden/importless/ais.txtnew file+43

This diff is too big to show here.

test/golden/importless/akonadi-calendar.nixnew file+20

This diff is too big to show here.

test/golden/importless/akonadi-calendar.txtnew file+23

This diff is too big to show here.

test/golden/importless/akonadi-contacts.nixnew file+25

This diff is too big to show here.

test/golden/importless/akonadi-contacts.txtnew file+28

This diff is too big to show here.

test/golden/importless/akonadi-mime.nixnew file+16

This diff is too big to show here.

test/golden/importless/akonadi-mime.txtnew file+21

This diff is too big to show here.

test/golden/importless/akonadi-notes.nixnew file+18

This diff is too big to show here.

test/golden/importless/akonadi-notes.txtnew file+21

This diff is too big to show here.

test/golden/importless/akonadi-search.nixnew file+20

This diff is too big to show here.

test/golden/importless/akonadi-search.txtnew file+26

This diff is too big to show here.

test/golden/importless/akonadiconsole.nixnew file+21

This diff is too big to show here.

test/golden/importless/akonadiconsole.txtnew file+31

This diff is too big to show here.

test/golden/importless/akregator.nixnew file+30

This diff is too big to show here.

test/golden/importless/akregator.txtnew file+32

This diff is too big to show here.

test/golden/importless/alerta.nixnew file+115

This diff is too big to show here.

test/golden/importless/alertmanager.nixnew file+41

This diff is too big to show here.

test/golden/importless/alexandria.nixnew file+26

This diff is too big to show here.

test/golden/importless/alexandria.txtnew file+11

This diff is too big to show here.

test/golden/importless/aliases.nixnew file+143

This diff is too big to show here.

test/golden/importless/all.nixnew file+15

This diff is too big to show here.

test/golden/importless/alsamixer.app.nixnew file+27

This diff is too big to show here.

test/golden/importless/alsamixer.app.txtnew file+31

This diff is too big to show here.

test/golden/importless/alternatives-plugin.nixnew file+25

This diff is too big to show here.

test/golden/importless/alternatives-plugin.txtnew file+29

This diff is too big to show here.

test/golden/importless/amazon-init.nixnew file+60

This diff is too big to show here.

test/golden/importless/amazon-init.txtnew file+17

This diff is too big to show here.

test/golden/importless/amazon-options.nixnew file+21

This diff is too big to show here.

test/golden/importless/amazon-options.txtnew file+13

This diff is too big to show here.

test/golden/importless/amd-microcode.nixnew file+29

This diff is too big to show here.

test/golden/importless/amd-microcode.txtnew file+16

This diff is too big to show here.

test/golden/importless/amd.nixnew file+29

This diff is too big to show here.

test/golden/importless/amd.txtnew file+19

This diff is too big to show here.

test/golden/importless/amdgpu-pro.nixnew file+68

This diff is too big to show here.

test/golden/importless/amdgpu-pro.txtnew file+55

This diff is too big to show here.

test/golden/importless/amdgpu.nixnew file+9

This diff is too big to show here.

test/golden/importless/amdgpu.txtnew file+10

This diff is too big to show here.

test/golden/importless/amuled.nixnew file+77

This diff is too big to show here.

test/golden/importless/anaphora.nixnew file+27

This diff is too big to show here.

test/golden/importless/anaphora.txtnew file+12

This diff is too big to show here.

test/golden/importless/anbox.nixnew file+139

This diff is too big to show here.

test/golden/importless/androidndk-pkgs.nixnew file+113

This diff is too big to show here.

test/golden/importless/animal-sniffer.nixnew file+15

This diff is too big to show here.

test/golden/importless/ankisyncd.nixnew file+79

This diff is too big to show here.

test/golden/importless/ant-bloody.nixnew file+34

This diff is too big to show here.

test/golden/importless/ant-bloody.txtnew file+29

This diff is too big to show here.

test/golden/importless/ant-build.nixnew file+122

This diff is too big to show here.

test/golden/importless/ant-dracula.nixnew file+34

This diff is too big to show here.

test/golden/importless/ant-dracula.txtnew file+29

This diff is too big to show here.

test/golden/importless/ant-launcher.nixnew file+14

This diff is too big to show here.

test/golden/importless/ant-nebula.nixnew file+34

This diff is too big to show here.

test/golden/importless/ant-nebula.txtnew file+29

This diff is too big to show here.

test/golden/importless/ant.nixnew file+34

This diff is too big to show here.

test/golden/importless/ant.txtnew file+29

This diff is too big to show here.

test/golden/importless/apache-kafka.nixnew file+154

This diff is too big to show here.

test/golden/importless/apcupsd-exporter.nixnew file+26

This diff is too big to show here.

test/golden/importless/apcupsd-exporter.txtnew file+31

This diff is too big to show here.

test/golden/importless/apcupsd.nixnew file+38

This diff is too big to show here.

test/golden/importless/apcupsd.txtnew file+15

This diff is too big to show here.

test/golden/importless/apeclex.nixnew file+8

This diff is too big to show here.

test/golden/importless/apeclex.txtnew file+13

This diff is too big to show here.

test/golden/importless/apiextractor.nixnew file+25

This diff is too big to show here.

test/golden/importless/apiextractor.txtnew file+32

This diff is too big to show here.

test/golden/importless/apparmor.nixnew file+65

This diff is too big to show here.

test/golden/importless/appdaemon.nixnew file+70

This diff is too big to show here.

test/golden/importless/appdaemon.txtnew file+71

This diff is too big to show here.

test/golden/importless/appliance.nixnew file+11

This diff is too big to show here.

test/golden/importless/appliance.txtnew file+10

This diff is too big to show here.

test/golden/importless/appmenu-gtk-module.nixnew file+31

This diff is too big to show here.

test/golden/importless/appmenu-gtk-module.txtnew file+27

This diff is too big to show here.

test/golden/importless/appstream.nixnew file+25

This diff is too big to show here.

test/golden/importless/appstream.txtnew file+11

This diff is too big to show here.

test/golden/importless/arbtt.nixnew file+63

This diff is too big to show here.

test/golden/importless/architectures.nixnew file+77

This diff is too big to show here.

test/golden/importless/archive-version.nixnew file+11

This diff is too big to show here.

test/golden/importless/archive-version.txtnew file+8

This diff is too big to show here.

test/golden/importless/archiver.nixnew file+25

This diff is too big to show here.

test/golden/importless/aria2.nixnew file+131

This diff is too big to show here.

test/golden/importless/array-utils.nixnew file+25

This diff is too big to show here.

test/golden/importless/array-utils.txtnew file+11

This diff is too big to show here.

test/golden/importless/array.nixnew file+22

This diff is too big to show here.

test/golden/importless/array.txtnew file+23

This diff is too big to show here.

test/golden/importless/artifact-manager.nixnew file+47

This diff is too big to show here.

test/golden/importless/artifact.nixnew file+69

This diff is too big to show here.

test/golden/importless/asdf-finalizers.nixnew file+26

This diff is too big to show here.

test/golden/importless/asdf-finalizers.txtnew file+11

This diff is too big to show here.

test/golden/importless/asdf-package-system.nixnew file+25

This diff is too big to show here.

test/golden/importless/asdf-package-system.txtnew file+11

This diff is too big to show here.

test/golden/importless/asdf-system-connections.nixnew file+26

This diff is too big to show here.

test/golden/importless/asdf-system-connections.txtnew file+11

This diff is too big to show here.

test/golden/importless/asm-all.nixnew file+15

This diff is too big to show here.

test/golden/importless/aspell-with-dicts.nixnew file+36

This diff is too big to show here.

test/golden/importless/aspell-with-dicts.txtnew file+8

This diff is too big to show here.

test/golden/importless/assertions.nixnew file+34

This diff is too big to show here.

test/golden/importless/asserts.nixnew file+44

This diff is too big to show here.

test/golden/importless/assets.nixnew file+55

This diff is too big to show here.

test/golden/importless/assets.txtnew file+29

This diff is too big to show here.

test/golden/importless/asterisk.nixnew file+264

This diff is too big to show here.

test/golden/importless/async-rpc-kernel.nixnew file+18

This diff is too big to show here.

test/golden/importless/async-rpc-kernel.txtnew file+35

This diff is too big to show here.

test/golden/importless/async.nixnew file+22

This diff is too big to show here.

test/golden/importless/at-spi2-core.nixnew file+49

This diff is too big to show here.

test/golden/importless/atd.nixnew file+109

This diff is too big to show here.

test/golden/importless/atftpd.nixnew file+65

This diff is too big to show here.

test/golden/importless/ati.nixnew file+40

This diff is too big to show here.

test/golden/importless/ati.txtnew file+28

This diff is too big to show here.

test/golden/importless/atop.nixnew file+36

This diff is too big to show here.

test/golden/importless/atop.txtnew file+20

This diff is too big to show here.

test/golden/importless/attica.nixnew file+12

This diff is too big to show here.

test/golden/importless/attica.txtnew file+14

This diff is too big to show here.

test/golden/importless/attrsOf-conditional-check.nixnew file+7

This diff is too big to show here.

test/golden/importless/attrsOf-conditional-check.txtnew file+9

This diff is too big to show here.

test/golden/importless/attrsOf-lazy-check.nixnew file+7

This diff is too big to show here.

test/golden/importless/attrset-to-dir.nixnew file+20

This diff is too big to show here.

test/golden/importless/audit.nixnew file+123

This diff is too big to show here.

test/golden/importless/auditd.nixnew file+31

This diff is too big to show here.

test/golden/importless/auditd.txtnew file+32

This diff is too big to show here.

test/golden/importless/auth.nixnew file+29

This diff is too big to show here.

test/golden/importless/auth.txtnew file+33

This diff is too big to show here.

test/golden/importless/auto-upgrade.nixnew file+169

This diff is too big to show here.

test/golden/importless/auto.nixnew file+68

This diff is too big to show here.

test/golden/importless/autofig.nixnew file+10

This diff is too big to show here.

test/golden/importless/autofig.txtnew file+6

This diff is too big to show here.

test/golden/importless/autofs.nixnew file+99

This diff is too big to show here.

test/golden/importless/autojump.nixnew file+33

This diff is too big to show here.

test/golden/importless/automake-1.11.x.nixnew file+49

This diff is too big to show here.

test/golden/importless/automake-1.11.x.txtnew file+34

This diff is too big to show here.

test/golden/importless/automake-1.15.x.nixnew file+45

This diff is too big to show here.

test/golden/importless/automake-1.15.x.txtnew file+35

This diff is too big to show here.

test/golden/importless/automake-1.16.x.nixnew file+43

This diff is too big to show here.

test/golden/importless/automake-1.16.x.txtnew file+34

This diff is too big to show here.

test/golden/importless/automysqlbackup.nixnew file+118

This diff is too big to show here.

test/golden/importless/autorandr.nixnew file+52

This diff is too big to show here.

test/golden/importless/autorandr.txtnew file+42

This diff is too big to show here.

test/golden/importless/autossh.nixnew file+113

This diff is too big to show here.

test/golden/importless/autostart.nixnew file+26

This diff is too big to show here.

test/golden/importless/autostart.txtnew file+19

This diff is too big to show here.

test/golden/importless/avahi-daemon.nixnew file+285

This diff is too big to show here.

test/golden/importless/awesome.nixnew file+66

This diff is too big to show here.

test/golden/importless/aws-s3-exporter.nixnew file+26

This diff is too big to show here.

test/golden/importless/aws-s3-exporter.txtnew file+27

This diff is too big to show here.

test/golden/importless/aws-s3-exporter_deps.nixnew file+336

This diff is too big to show here.

test/golden/importless/aws-s3-exporter_deps.txtnew file+4

This diff is too big to show here.

test/golden/importless/azure-agent.nixnew file+198

This diff is too big to show here.

test/golden/importless/azure-agent.txtnew file+104

This diff is too big to show here.

test/golden/importless/azure-bootstrap-blobs.nixnew file+3

This diff is too big to show here.

test/golden/importless/azure-bootstrap-blobs.txtnew file+1

This diff is too big to show here.

test/golden/importless/azure-images.nixnew file+5

This diff is too big to show here.

test/golden/importless/azure-images.txtnew file+1

This diff is too big to show here.

test/golden/importless/b43.nixnew file+34

This diff is too big to show here.

test/golden/importless/b43.txtnew file+19

This diff is too big to show here.

test/golden/importless/babashka.nixnew file+84

This diff is too big to show here.

test/golden/importless/babel-streams.nixnew file+30

This diff is too big to show here.

test/golden/importless/babel-streams.txtnew file+17

This diff is too big to show here.

test/golden/importless/babel.nixnew file+27

This diff is too big to show here.

test/golden/importless/babel.txtnew file+15

This diff is too big to show here.

test/golden/importless/babeld.nixnew file+95

This diff is too big to show here.

test/golden/importless/backend-params-submodule.nixnew file+131

This diff is too big to show here.

test/golden/importless/backend.nixnew file+48

This diff is too big to show here.

test/golden/importless/backend.txtnew file+53

This diff is too big to show here.

test/golden/importless/bacula.nixnew file+556

This diff is too big to show here.

test/golden/importless/baloo-widgets.nixnew file+18

This diff is too big to show here.

test/golden/importless/baloo-widgets.txtnew file+21

This diff is too big to show here.

test/golden/importless/baloo.nixnew file+17

This diff is too big to show here.

test/golden/importless/baloo.txtnew file+26

This diff is too big to show here.

test/golden/importless/bamf.nixnew file+27

This diff is too big to show here.

test/golden/importless/bamf.txtnew file+20

This diff is too big to show here.

test/golden/importless/bandwhich.nixnew file+29

This diff is too big to show here.

test/golden/importless/bandwhich.txtnew file+26

This diff is too big to show here.

test/golden/importless/base.nixnew file+57

This diff is too big to show here.

test/golden/importless/base.txtnew file+41

This diff is too big to show here.

test/golden/importless/bash-4.4-patches.nixnew file+27

This diff is too big to show here.

test/golden/importless/bash-4.4-patches.txtnew file+1

This diff is too big to show here.

test/golden/importless/bash-5.0-patches.nixnew file+21

This diff is too big to show here.

test/golden/importless/bash-5.0-patches.txtnew file+1

This diff is too big to show here.

test/golden/importless/bash-my-aws.nixnew file+25

This diff is too big to show here.

test/golden/importless/bash-my-aws.txtnew file+17

This diff is too big to show here.

test/golden/importless/bash-tools-test.nixnew file+44

This diff is too big to show here.

test/golden/importless/bash-tools-test.txtnew file+9

This diff is too big to show here.

test/golden/importless/bazarr.nixnew file+76

This diff is too big to show here.

test/golden/importless/bcache.nixnew file+13

This diff is too big to show here.

test/golden/importless/bcache.txtnew file+6

This diff is too big to show here.

test/golden/importless/bcachefs.nixnew file+65

This diff is too big to show here.

test/golden/importless/bcachefs.txtnew file+26

This diff is too big to show here.

test/golden/importless/bcc-git.nixnew file+31

This diff is too big to show here.

test/golden/importless/bcc-git.txtnew file+27

This diff is too big to show here.

test/golden/importless/bcc.nixnew file+9

This diff is too big to show here.

test/golden/importless/bcc.txtnew file+20

This diff is too big to show here.

test/golden/importless/beam-packages.nixnew file+121

This diff is too big to show here.

test/golden/importless/bean-add.nixnew file+31

This diff is too big to show here.

test/golden/importless/bean-add.txtnew file+20

This diff is too big to show here.

test/golden/importless/beanstalkd.nixnew file+63

This diff is too big to show here.

test/golden/importless/beautifulsoup.nixnew file+20

This diff is too big to show here.

test/golden/importless/beautifulsoup.txtnew file+12

This diff is too big to show here.

test/golden/importless/bees.nixnew file+123

This diff is too big to show here.

test/golden/importless/bepasty.nixnew file+179

This diff is too big to show here.

test/golden/importless/ber-metaocaml.nixnew file+96

This diff is too big to show here.

test/golden/importless/ber-metaocaml.txtnew file+53

This diff is too big to show here.

test/golden/importless/berry.nixnew file+25

This diff is too big to show here.

test/golden/importless/berry.txtnew file+24

This diff is too big to show here.

test/golden/importless/beta.nixnew file+51

This diff is too big to show here.

test/golden/importless/beta.txtnew file+42

This diff is too big to show here.

test/golden/importless/beta_sources.nixnew file+965

This diff is too big to show here.

test/golden/importless/beta_sources.txtnew file+3

This diff is too big to show here.

test/golden/importless/bg.nixnew file+36

This diff is too big to show here.

test/golden/importless/bg.txtnew file+41

This diff is too big to show here.

test/golden/importless/bi.nixnew file+27

This diff is too big to show here.

test/golden/importless/bi.txtnew file+27

This diff is too big to show here.

test/golden/importless/biboumi.nixnew file+269

This diff is too big to show here.

test/golden/importless/bifunctors.nixnew file+21

This diff is too big to show here.

test/golden/importless/bifunctors.txtnew file+13

This diff is too big to show here.

test/golden/importless/bin.nixnew file+28

This diff is too big to show here.

test/golden/importless/bin.txtnew file+27

This diff is too big to show here.

test/golden/importless/bin_prot.nixnew file+17

This diff is too big to show here.

test/golden/importless/bin_prot.txtnew file+26

This diff is too big to show here.

test/golden/importless/binary-hashes.nixnew file+15

This diff is too big to show here.

test/golden/importless/binary-hashes.txtnew file+5

This diff is too big to show here.

test/golden/importless/binary-tarball.nixnew file+78

This diff is too big to show here.

test/golden/importless/binary-tarball.txtnew file+25

This diff is too big to show here.

test/golden/importless/binary.nixnew file+38

This diff is too big to show here.

test/golden/importless/binary.txtnew file+34

This diff is too big to show here.

test/golden/importless/bind-exporter.nixnew file+26

This diff is too big to show here.

test/golden/importless/bind.nixnew file+54

This diff is too big to show here.

test/golden/importless/bintools.nixnew file+29

This diff is too big to show here.

test/golden/importless/bintools.txtnew file+8

This diff is too big to show here.

test/golden/importless/bioc-annotation-packages.nixnew file+950

This diff is too big to show here.

test/golden/importless/bitcoin-abc.nixnew file+52

This diff is too big to show here.

test/golden/importless/bitcoin-classic.nixnew file+54

This diff is too big to show here.

test/golden/importless/bitcoin-gold.nixnew file+70

This diff is too big to show here.

test/golden/importless/bitcoin-knots.nixnew file+41

This diff is too big to show here.

test/golden/importless/bitcoin-knots.txtnew file+41

This diff is too big to show here.

test/golden/importless/bitcoin-unlimited.nixnew file+66

This diff is too big to show here.

test/golden/importless/bitcoin.nixnew file+94

This diff is too big to show here.

test/golden/importless/bitcoind.nixnew file+261

This diff is too big to show here.

test/golden/importless/bitlbee.nixnew file+193

This diff is too big to show here.

test/golden/importless/bitwig-studio1.nixnew file+98

This diff is too big to show here.

test/golden/importless/bitwig-studio1.txtnew file+71

This diff is too big to show here.

test/golden/importless/bitwig-studio2.nixnew file+16

This diff is too big to show here.

test/golden/importless/bitwig-studio2.txtnew file+12

This diff is too big to show here.

test/golden/importless/bitwig-studio3.nixnew file+23

This diff is too big to show here.

test/golden/importless/bitwig-studio3.txtnew file+21

This diff is too big to show here.

test/golden/importless/blackbird.nixnew file+25

This diff is too big to show here.

test/golden/importless/blackbird.txtnew file+11

This diff is too big to show here.

test/golden/importless/blackbox-exporter.nixnew file+29

This diff is too big to show here.

test/golden/importless/blackbox-exporter.txtnew file+37

This diff is too big to show here.

test/golden/importless/blackbox.nixnew file+70

This diff is too big to show here.

test/golden/importless/bladeRF.nixnew file+28

This diff is too big to show here.

test/golden/importless/bladeRF.txtnew file+19

This diff is too big to show here.

test/golden/importless/blivet.nixnew file+50

This diff is too big to show here.

test/golden/importless/blivet.txtnew file+39

This diff is too big to show here.

test/golden/importless/blockbook-frontend.nixnew file+275

This diff is too big to show here.

test/golden/importless/blocks-gaps.nixnew file+51

This diff is too big to show here.

test/golden/importless/blocks-gaps.txtnew file+42

This diff is too big to show here.

test/golden/importless/blocks.nixnew file+33

This diff is too big to show here.

test/golden/importless/blocks.txtnew file+30

This diff is too big to show here.

test/golden/importless/bloodspilot-client.nixnew file+25

This diff is too big to show here.

test/golden/importless/bloodspilot-client.txtnew file+36

This diff is too big to show here.

test/golden/importless/bloodspilot-server.nixnew file+27

This diff is too big to show here.

test/golden/importless/bloodspilot-server.txtnew file+25

This diff is too big to show here.

test/golden/importless/bloop.nixnew file+54

This diff is too big to show here.

test/golden/importless/bluedevil.nixnew file+14

This diff is too big to show here.

test/golden/importless/bluedevil.txtnew file+19

This diff is too big to show here.

test/golden/importless/blueman.nixnew file+25

This diff is too big to show here.

test/golden/importless/blueman.txtnew file+18

This diff is too big to show here.

test/golden/importless/bluetooth.nixnew file+99

This diff is too big to show here.

test/golden/importless/bluez-qt.nixnew file+19

This diff is too big to show here.

test/golden/importless/bluez-qt.txtnew file+16

This diff is too big to show here.

test/golden/importless/bolt.nixnew file+34

This diff is too big to show here.

test/golden/importless/bolt.txtnew file+22

This diff is too big to show here.

test/golden/importless/bomber.nixnew file+30

This diff is too big to show here.

test/golden/importless/bomber.txtnew file+29

This diff is too big to show here.

test/golden/importless/boot.nixnew file+91

This diff is too big to show here.

test/golden/importless/boot.txtnew file+27

This diff is too big to show here.

test/golden/importless/bootstrap.nixnew file+43

This diff is too big to show here.

test/golden/importless/bootstrap.txtnew file+35

This diff is too big to show here.

test/golden/importless/bordeaux-threads.nixnew file+30

This diff is too big to show here.

test/golden/importless/bordeaux-threads.txtnew file+16

This diff is too big to show here.

test/golden/importless/borgbackup.nixnew file+675

This diff is too big to show here.

test/golden/importless/bosun.nixnew file+166

This diff is too big to show here.

test/golden/importless/bounce.nixnew file+14

This diff is too big to show here.

test/golden/importless/bovo.nixnew file+28

This diff is too big to show here.

test/golden/importless/bovo.txtnew file+29

This diff is too big to show here.

test/golden/importless/bower-packages.nixnew file+42

This diff is too big to show here.

test/golden/importless/bower-packages.txtnew file+5

This diff is too big to show here.

test/golden/importless/breeze-grub.nixnew file+15

This diff is too big to show here.

test/golden/importless/breeze-grub.txtnew file+1

This diff is too big to show here.

test/golden/importless/breeze-gtk.nixnew file+14

This diff is too big to show here.

test/golden/importless/breeze-gtk.txtnew file+18

This diff is too big to show here.

test/golden/importless/breeze-icons.nixnew file+17

This diff is too big to show here.

test/golden/importless/breeze-icons.txtnew file+19

This diff is too big to show here.

test/golden/importless/breeze-qt5.nixnew file+20

This diff is too big to show here.

test/golden/importless/breeze-qt5.txtnew file+26

This diff is too big to show here.

test/golden/importless/brillo.nixnew file+22

This diff is too big to show here.

test/golden/importless/brillo.txtnew file+17

This diff is too big to show here.

test/golden/importless/brltty.nixnew file+50

This diff is too big to show here.

test/golden/importless/brltty.txtnew file+45

This diff is too big to show here.

test/golden/importless/broadcom-43xx.nixnew file+3

This diff is too big to show here.

test/golden/importless/broadcom-43xx.txtnew file+1

This diff is too big to show here.

test/golden/importless/brotli-crates.nixnew file+95

This diff is too big to show here.

test/golden/importless/browser.nixnew file+25

This diff is too big to show here.

test/golden/importless/browser.txtnew file+34

This diff is too big to show here.

test/golden/importless/browserpass.nixnew file+32

This diff is too big to show here.

test/golden/importless/browserpass.txtnew file+27

This diff is too big to show here.

test/golden/importless/brscan4.nixnew file+112

This diff is too big to show here.

test/golden/importless/bsh.nixnew file+14

This diff is too big to show here.

test/golden/importless/bson.nixnew file+13

This diff is too big to show here.

test/golden/importless/bson.txtnew file+21

This diff is too big to show here.

test/golden/importless/btc1.nixnew file+41

This diff is too big to show here.

test/golden/importless/btrfs.nixnew file+140

This diff is too big to show here.

test/golden/importless/buffer.nixnew file+79

This diff is too big to show here.

test/golden/importless/build-api.nixnew file+14

This diff is too big to show here.

test/golden/importless/build-app.nixnew file+48

This diff is too big to show here.

test/golden/importless/build-builtin-package.nixnew file+25

This diff is too big to show here.

test/golden/importless/build-crate.nixnew file+110

This diff is too big to show here.

test/golden/importless/build-dotnet.nixnew file+92

This diff is too big to show here.

test/golden/importless/build-eclipse.nixnew file+61

This diff is too big to show here.

test/golden/importless/build-erlang-mk.nixnew file+97

This diff is too big to show here.

test/golden/importless/build-hex.nixnew file+20

This diff is too big to show here.

test/golden/importless/build-idris-package.nixnew file+77

This diff is too big to show here.

test/golden/importless/build-mix.nixnew file+100

This diff is too big to show here.

test/golden/importless/build-pecl.nixnew file+36

This diff is too big to show here.

test/golden/importless/build-rebar3.nixnew file+94

This diff is too big to show here.

test/golden/importless/build-rebar3.txtnew file+61

This diff is too big to show here.

test/golden/importless/build-skaware-package.nixnew file+106

This diff is too big to show here.

test/golden/importless/build-skaware-package.txtnew file+46

This diff is too big to show here.

test/golden/importless/build-solution.nixnew file+85

This diff is too big to show here.

test/golden/importless/build-solution.txtnew file+25

This diff is too big to show here.

test/golden/importless/build-tools.nixnew file+21

This diff is too big to show here.

test/golden/importless/build-tools.txtnew file+27

This diff is too big to show here.

test/golden/importless/build-vim-plugin.nixnew file+60

This diff is too big to show here.

test/golden/importless/build.nixnew file+55

This diff is too big to show here.

test/golden/importless/build.txtnew file+51

This diff is too big to show here.

test/golden/importless/buildOcamlJane.nixnew file+27

This diff is too big to show here.

test/golden/importless/buildOcamlJane.txtnew file+27

This diff is too big to show here.

test/golden/importless/builder.nixnew file+49

This diff is too big to show here.

test/golden/importless/builder.txtnew file+24

This diff is too big to show here.

test/golden/importless/buildnode-xhtml.nixnew file+48

This diff is too big to show here.

test/golden/importless/buildnode-xhtml.txtnew file+33

This diff is too big to show here.

test/golden/importless/buildnode.nixnew file+49

This diff is too big to show here.

test/golden/importless/buildnode.txtnew file+35

This diff is too big to show here.

test/golden/importless/builds.nixnew file+61

This diff is too big to show here.

test/golden/importless/builds.txtnew file+43

This diff is too big to show here.

test/golden/importless/bumblebee.nixnew file+93

This diff is too big to show here.

test/golden/importless/bytes.nixnew file+21

This diff is too big to show here.

test/golden/importless/bytes.txtnew file+13

This diff is too big to show here.

test/golden/importless/cachefilesd.nixnew file+63

This diff is too big to show here.

test/golden/importless/cadvisor.nixnew file+140

This diff is too big to show here.

test/golden/importless/caffeine-plus.nixnew file+32

This diff is too big to show here.

test/golden/importless/caffeine-plus.txtnew file+34

This diff is too big to show here.

test/golden/importless/cage.nixnew file+98

This diff is too big to show here.

test/golden/importless/calendarsupport.nixnew file+20

This diff is too big to show here.

test/golden/importless/calendarsupport.txtnew file+27

This diff is too big to show here.

test/golden/importless/calibre-server.nixnew file+63

This diff is too big to show here.

test/golden/importless/calibre-server.txtnew file+42

This diff is too big to show here.

test/golden/importless/camlp4.nixnew file+27

This diff is too big to show here.

test/golden/importless/camlp4.txtnew file+25

This diff is too big to show here.

test/golden/importless/canto-daemon.nixnew file+37

This diff is too big to show here.

test/golden/importless/canto-daemon.txtnew file+28

This diff is too big to show here.

test/golden/importless/canvas.nixnew file+23

This diff is too big to show here.

test/golden/importless/canvas.txtnew file+14

This diff is too big to show here.

test/golden/importless/caps2esc.nixnew file+23

This diff is too big to show here.

test/golden/importless/caps2esc.txtnew file+29

This diff is too big to show here.

test/golden/importless/captive-browser.nixnew file+122

This diff is too big to show here.

test/golden/importless/carnix.nixnew file+259

This diff is too big to show here.

test/golden/importless/carnix.txtnew file+209

This diff is too big to show here.

test/golden/importless/case.kak.nixnew file+27

This diff is too big to show here.

test/golden/importless/case.kak.txtnew file+28

This diff is too big to show here.

test/golden/importless/cassandra.nixnew file+479

This diff is too big to show here.

test/golden/importless/categories.nixnew file+21

This diff is too big to show here.

test/golden/importless/categories.txtnew file+13

This diff is too big to show here.

test/golden/importless/caveman.nixnew file+87

This diff is too big to show here.

test/golden/importless/caveman.txtnew file+80

This diff is too big to show here.

test/golden/importless/ccache.nixnew file+83

This diff is too big to show here.

test/golden/importless/cde.nixnew file+72

This diff is too big to show here.

test/golden/importless/cde.txtnew file+69

This diff is too big to show here.

test/golden/importless/cdemu.nixnew file+59

This diff is too big to show here.

test/golden/importless/cdn-deps.nixnew file+7028

This diff is too big to show here.

test/golden/importless/cdn-deps.txtnew file+1759

This diff is too big to show here.

test/golden/importless/ceph.nixnew file+418

This diff is too big to show here.

test/golden/importless/cerberus.nixnew file+19

This diff is too big to show here.

test/golden/importless/certmgr.nixnew file+201

This diff is too big to show here.

test/golden/importless/cfdyndns.nixnew file+70

This diff is too big to show here.

test/golden/importless/cffi-grovel.nixnew file+30

This diff is too big to show here.

test/golden/importless/cffi-grovel.txtnew file+18

This diff is too big to show here.

test/golden/importless/cffi-toolchain.nixnew file+31

This diff is too big to show here.

test/golden/importless/cffi-toolchain.txtnew file+17

This diff is too big to show here.

test/golden/importless/cffi.nixnew file+34

This diff is too big to show here.

test/golden/importless/cffi.txtnew file+20

This diff is too big to show here.

test/golden/importless/cfssl.nixnew file+209

This diff is too big to show here.

test/golden/importless/cgit.nixnew file+91

This diff is too big to show here.

test/golden/importless/cgminer.nixnew file+140

This diff is too big to show here.

test/golden/importless/chacha.nixnew file+82

This diff is too big to show here.

test/golden/importless/chacha.txtnew file+42

This diff is too big to show here.

test/golden/importless/channel.nixnew file+49

This diff is too big to show here.

test/golden/importless/channel.txtnew file+10

This diff is too big to show here.

test/golden/importless/charybdis.nixnew file+107

This diff is too big to show here.

test/golden/importless/check-meta.nixnew file+261

This diff is too big to show here.

test/golden/importless/check-plugin.nixnew file+35

This diff is too big to show here.

test/golden/importless/check-plugin.txtnew file+36

This diff is too big to show here.

test/golden/importless/check_ssl_cert.nixnew file+36

This diff is too big to show here.

test/golden/importless/check_ssl_cert.txtnew file+29

This diff is too big to show here.

test/golden/importless/checkup.nixnew file+34

This diff is too big to show here.

test/golden/importless/checkup.txtnew file+33

This diff is too big to show here.

test/golden/importless/chicken.nixnew file+59

This diff is too big to show here.

test/golden/importless/chipz.nixnew file+25

This diff is too big to show here.

test/golden/importless/chipz.txtnew file+11

This diff is too big to show here.

test/golden/importless/chrome-gnome-shell.nixnew file+33

This diff is too big to show here.

test/golden/importless/chrome-gnome-shell.txtnew file+34

This diff is too big to show here.

test/golden/importless/chromium.nixnew file+104

This diff is too big to show here.

test/golden/importless/chrony.nixnew file+125

This diff is too big to show here.

test/golden/importless/chrootenv.nixnew file+52

This diff is too big to show here.

test/golden/importless/chrootenv.txtnew file+62

This diff is too big to show here.

test/golden/importless/chunga.nixnew file+25

This diff is too big to show here.

test/golden/importless/chunga.txtnew file+14

This diff is too big to show here.

test/golden/importless/cifs.nixnew file+25

This diff is too big to show here.

test/golden/importless/cinnamon.nixnew file+205

This diff is too big to show here.

test/golden/importless/circular-streams.nixnew file+36

This diff is too big to show here.

test/golden/importless/circular-streams.txtnew file+22

This diff is too big to show here.

test/golden/importless/cjdns.nixnew file+294

This diff is too big to show here.

test/golden/importless/cl-aa.nixnew file+25

This diff is too big to show here.

test/golden/importless/cl-aa.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-annot.nixnew file+25

This diff is too big to show here.

test/golden/importless/cl-annot.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-anonfun.nixnew file+24

This diff is too big to show here.

test/golden/importless/cl-anonfun.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-ansi-text.nixnew file+29

This diff is too big to show here.

test/golden/importless/cl-ansi-text.txtnew file+17

This diff is too big to show here.

test/golden/importless/cl-async-repl.nixnew file+43

This diff is too big to show here.

test/golden/importless/cl-async-repl.txtnew file+29

This diff is too big to show here.

test/golden/importless/cl-async-ssl.nixnew file+44

This diff is too big to show here.

test/golden/importless/cl-async-ssl.txtnew file+29

This diff is too big to show here.

test/golden/importless/cl-async.nixnew file+41

This diff is too big to show here.

test/golden/importless/cl-async.txtnew file+28

This diff is too big to show here.

test/golden/importless/cl-base64.nixnew file+28

This diff is too big to show here.

test/golden/importless/cl-base64.txtnew file+16

This diff is too big to show here.

test/golden/importless/cl-change-case.nixnew file+31

This diff is too big to show here.

test/golden/importless/cl-change-case.txtnew file+17

This diff is too big to show here.

test/golden/importless/cl-cli.nixnew file+25

This diff is too big to show here.

test/golden/importless/cl-cli.txtnew file+14

This diff is too big to show here.

test/golden/importless/cl-colors.nixnew file+29

This diff is too big to show here.

test/golden/importless/cl-colors.txtnew file+18

This diff is too big to show here.

test/golden/importless/cl-containers.nixnew file+33

This diff is too big to show here.

test/golden/importless/cl-containers.txtnew file+17

This diff is too big to show here.

test/golden/importless/cl-cookie.nixnew file+35

This diff is too big to show here.

test/golden/importless/cl-cookie.txtnew file+24

This diff is too big to show here.

test/golden/importless/cl-css.nixnew file+24

This diff is too big to show here.

test/golden/importless/cl-css.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-csv.nixnew file+37

This diff is too big to show here.

test/golden/importless/cl-csv.txtnew file+22

This diff is too big to show here.

test/golden/importless/cl-dbi.nixnew file+36

This diff is too big to show here.

test/golden/importless/cl-dbi.txtnew file+23

This diff is too big to show here.

test/golden/importless/cl-emb.nixnew file+25

This diff is too big to show here.

test/golden/importless/cl-emb.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-fad.nixnew file+30

This diff is too big to show here.

test/golden/importless/cl-fad.txtnew file+18

This diff is too big to show here.

test/golden/importless/cl-fuse-meta-fs.nixnew file+40

This diff is too big to show here.

test/golden/importless/cl-fuse-meta-fs.txtnew file+27

This diff is too big to show here.

test/golden/importless/cl-fuse.nixnew file+35

This diff is too big to show here.

test/golden/importless/cl-fuse.txtnew file+24

This diff is too big to show here.

test/golden/importless/cl-hooks.nixnew file+34

This diff is too big to show here.

test/golden/importless/cl-hooks.txtnew file+20

This diff is too big to show here.

test/golden/importless/cl-html-parse.nixnew file+25

This diff is too big to show here.

test/golden/importless/cl-html-parse.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-html5-parser.nixnew file+31

This diff is too big to show here.

test/golden/importless/cl-html5-parser.txtnew file+17

This diff is too big to show here.

test/golden/importless/cl-interpol.nixnew file+31

This diff is too big to show here.

test/golden/importless/cl-interpol.txtnew file+18

This diff is too big to show here.

test/golden/importless/cl-jpeg.nixnew file+25

This diff is too big to show here.

test/golden/importless/cl-jpeg.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-json.nixnew file+28

This diff is too big to show here.

test/golden/importless/cl-json.txtnew file+12

This diff is too big to show here.

test/golden/importless/cl-l10n-cldr.nixnew file+26

This diff is too big to show here.

test/golden/importless/cl-l10n-cldr.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-l10n.nixnew file+42

This diff is too big to show here.

test/golden/importless/cl-l10n.txtnew file+32

This diff is too big to show here.

test/golden/importless/cl-libuv.nixnew file+30

This diff is too big to show here.

test/golden/importless/cl-libuv.txtnew file+19

This diff is too big to show here.

test/golden/importless/cl-log.nixnew file+24

This diff is too big to show here.

test/golden/importless/cl-log.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-markdown.nixnew file+36

This diff is too big to show here.

test/golden/importless/cl-markdown.txtnew file+20

This diff is too big to show here.

test/golden/importless/cl-markup.nixnew file+25

This diff is too big to show here.

test/golden/importless/cl-markup.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-mysql.nixnew file+28

This diff is too big to show here.

test/golden/importless/cl-mysql.txtnew file+17

This diff is too big to show here.

test/golden/importless/cl-paths-ttf.nixnew file+27

This diff is too big to show here.

test/golden/importless/cl-paths-ttf.txtnew file+15

This diff is too big to show here.

test/golden/importless/cl-paths.nixnew file+25

This diff is too big to show here.

test/golden/importless/cl-paths.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-pdf.nixnew file+27

This diff is too big to show here.

test/golden/importless/cl-pdf.txtnew file+16

This diff is too big to show here.

test/golden/importless/cl-postgres.nixnew file+32

This diff is too big to show here.

test/golden/importless/cl-postgres.txtnew file+18

This diff is too big to show here.

test/golden/importless/cl-ppcre-template.nixnew file+38

This diff is too big to show here.

test/golden/importless/cl-ppcre-template.txtnew file+15

This diff is too big to show here.

test/golden/importless/cl-ppcre-unicode.nixnew file+33

This diff is too big to show here.

test/golden/importless/cl-ppcre-unicode.txtnew file+18

This diff is too big to show here.

test/golden/importless/cl-ppcre.nixnew file+27

This diff is too big to show here.

test/golden/importless/cl-ppcre.txtnew file+15

This diff is too big to show here.

test/golden/importless/cl-prevalence.nixnew file+27

This diff is too big to show here.

test/golden/importless/cl-prevalence.txtnew file+15

This diff is too big to show here.

test/golden/importless/cl-project.nixnew file+35

This diff is too big to show here.

test/golden/importless/cl-project.txtnew file+25

This diff is too big to show here.

test/golden/importless/cl-protobufs.nixnew file+30

This diff is too big to show here.

test/golden/importless/cl-protobufs.txtnew file+18

This diff is too big to show here.

test/golden/importless/cl-reexport.nixnew file+25

This diff is too big to show here.

test/golden/importless/cl-reexport.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-smtp.nixnew file+38

This diff is too big to show here.

test/golden/importless/cl-smtp.txtnew file+25

This diff is too big to show here.

test/golden/importless/cl-store.nixnew file+27

This diff is too big to show here.

test/golden/importless/cl-store.txtnew file+12

This diff is too big to show here.

test/golden/importless/cl-syntax-annot.nixnew file+33

This diff is too big to show here.

test/golden/importless/cl-syntax-annot.txtnew file+18

This diff is too big to show here.

test/golden/importless/cl-syntax-anonfun.nixnew file+32

This diff is too big to show here.

test/golden/importless/cl-syntax-anonfun.txtnew file+17

This diff is too big to show here.

test/golden/importless/cl-syntax-markup.nixnew file+32

This diff is too big to show here.

test/golden/importless/cl-syntax-markup.txtnew file+17

This diff is too big to show here.

test/golden/importless/cl-syntax.nixnew file+30

This diff is too big to show here.

test/golden/importless/cl-syntax.txtnew file+15

This diff is too big to show here.

test/golden/importless/cl-test-more.nixnew file+32

This diff is too big to show here.

test/golden/importless/cl-test-more.txtnew file+20

This diff is too big to show here.

test/golden/importless/cl-typesetting.nixnew file+28

This diff is too big to show here.

test/golden/importless/cl-typesetting.txtnew file+16

This diff is too big to show here.

test/golden/importless/cl-unicode.nixnew file+30

This diff is too big to show here.

test/golden/importless/cl-unicode.txtnew file+16

This diff is too big to show here.

test/golden/importless/cl-unification.nixnew file+29

This diff is too big to show here.

test/golden/importless/cl-unification.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-utilities.nixnew file+25

This diff is too big to show here.

test/golden/importless/cl-utilities.txtnew file+11

This diff is too big to show here.

test/golden/importless/cl-vectors.nixnew file+26

This diff is too big to show here.

test/golden/importless/cl-vectors.txtnew file+15

This diff is too big to show here.

test/golden/importless/cl-who.nixnew file+27

This diff is too big to show here.

test/golden/importless/cl-who.txtnew file+15

This diff is too big to show here.

test/golden/importless/cl-xmlspam.nixnew file+34

This diff is too big to show here.

test/golden/importless/cl-xmlspam.txtnew file+21

This diff is too big to show here.

test/golden/importless/cl_plus_ssl.nixnew file+34

This diff is too big to show here.

test/golden/importless/cl_plus_ssl.txtnew file+22

This diff is too big to show here.

test/golden/importless/clack-handler-hunchentoot.nixnew file+54

This diff is too big to show here.

test/golden/importless/clack-handler-hunchentoot.txtnew file+33

This diff is too big to show here.

test/golden/importless/clack-socket.nixnew file+33

This diff is too big to show here.

test/golden/importless/clack-socket.txtnew file+11

This diff is too big to show here.

test/golden/importless/clack-test.nixnew file+79

This diff is too big to show here.

test/golden/importless/clack-test.txtnew file+66

This diff is too big to show here.

test/golden/importless/clack-v1-compat.nixnew file+84

This diff is too big to show here.

test/golden/importless/clack-v1-compat.txtnew file+70

This diff is too big to show here.

test/golden/importless/clack.nixnew file+43

This diff is too big to show here.

test/golden/importless/clack.txtnew file+22

This diff is too big to show here.

test/golden/importless/clamsmtp.nixnew file+181

This diff is too big to show here.

test/golden/importless/clang.nixnew file+66

This diff is too big to show here.

test/golden/importless/classworlds.nixnew file+25

This diff is too big to show here.

test/golden/importless/clean-packaging.nixnew file+53

This diff is too big to show here.

test/golden/importless/clean-packaging.txtnew file+8

This diff is too big to show here.

test/golden/importless/clex.nixnew file+25

This diff is too big to show here.

test/golden/importless/clex.txtnew file+23

This diff is too big to show here.

test/golden/importless/clfswm.nixnew file+24

This diff is too big to show here.

test/golden/importless/clfswm.txtnew file+24

This diff is too big to show here.

test/golden/importless/cli.nixnew file+83

This diff is too big to show here.

test/golden/importless/clickhouse.nixnew file+68

This diff is too big to show here.

test/golden/importless/clickhouse.txtnew file+53

This diff is too big to show here.

test/golden/importless/clickshare.nixnew file+21

This diff is too big to show here.

test/golden/importless/clickshare.txtnew file+26

This diff is too big to show here.

test/golden/importless/client-ip-echo.nixnew file+16

This diff is too big to show here.

test/golden/importless/client-ip-echo.txtnew file+20

This diff is too big to show here.

test/golden/importless/client.nixnew file+131

This diff is too big to show here.

test/golden/importless/clientlib.nixnew file+24

This diff is too big to show here.

test/golden/importless/clientlib.txtnew file+33

This diff is too big to show here.

test/golden/importless/clight.nixnew file+115

This diff is too big to show here.

test/golden/importless/clightd.nixnew file+75

This diff is too big to show here.

test/golden/importless/clightd.txtnew file+54

This diff is too big to show here.

test/golden/importless/clightning.nixnew file+50

This diff is too big to show here.

test/golden/importless/clightning.txtnew file+49

This diff is too big to show here.

test/golden/importless/clingo.nixnew file+25

This diff is too big to show here.

test/golden/importless/clingo.txtnew file+27

This diff is too big to show here.

test/golden/importless/clipmenu.nixnew file+31

This diff is too big to show here.

test/golden/importless/clipmenu.txtnew file+35

This diff is too big to show here.

test/golden/importless/clippy.nixnew file+34

This diff is too big to show here.

test/golden/importless/clippy.txtnew file+44

This diff is too big to show here.

test/golden/importless/clooj.nixnew file+30

This diff is too big to show here.

test/golden/importless/clooj.txtnew file+21

This diff is too big to show here.

test/golden/importless/closer-mop.nixnew file+25

This diff is too big to show here.

test/golden/importless/closer-mop.txtnew file+11

This diff is too big to show here.

test/golden/importless/closure-common.nixnew file+29

This diff is too big to show here.

test/golden/importless/closure-common.txtnew file+17

This diff is too big to show here.

test/golden/importless/closure-html.nixnew file+33

This diff is too big to show here.

test/golden/importless/closure-html.txtnew file+19

This diff is too big to show here.

test/golden/importless/closure-info.nixnew file+36

This diff is too big to show here.

test/golden/importless/clprover.nixnew file+27

This diff is too big to show here.

test/golden/importless/clprover.txtnew file+25

This diff is too big to show here.

test/golden/importless/clsql-postgresql-socket.nixnew file+31

This diff is too big to show here.

test/golden/importless/clsql-postgresql-socket.txtnew file+16

This diff is too big to show here.

test/golden/importless/clsql-postgresql.nixnew file+31

This diff is too big to show here.

test/golden/importless/clsql-postgresql.txtnew file+16

This diff is too big to show here.

test/golden/importless/clsql-sqlite3.nixnew file+31

This diff is too big to show here.

test/golden/importless/clsql-sqlite3.txtnew file+16

This diff is too big to show here.

test/golden/importless/clsql-uffi.nixnew file+30

This diff is too big to show here.

test/golden/importless/clsql-uffi.txtnew file+15

This diff is too big to show here.

test/golden/importless/clsql.nixnew file+29

This diff is too big to show here.

test/golden/importless/clsql.txtnew file+11

This diff is too big to show here.

test/golden/importless/clss.nixnew file+28

This diff is too big to show here.

test/golden/importless/clss.txtnew file+17

This diff is too big to show here.

test/golden/importless/clx-truetype.nixnew file+39

This diff is too big to show here.

test/golden/importless/clx-truetype.txtnew file+25

This diff is too big to show here.

test/golden/importless/clx.nixnew file+28

This diff is too big to show here.

test/golden/importless/clx.txtnew file+12

This diff is too big to show here.

test/golden/importless/cmake-modules.nixnew file+32

This diff is too big to show here.

test/golden/importless/cmake-modules.txtnew file+23

This diff is too big to show here.

test/golden/importless/cmake.nixnew file+130

This diff is too big to show here.

test/golden/importless/cmt.nixnew file+59

This diff is too big to show here.

test/golden/importless/cntlm.nixnew file+121

This diff is too big to show here.

test/golden/importless/cockroachdb.nixnew file+217

This diff is too big to show here.

test/golden/importless/coda.nixnew file+24

This diff is too big to show here.

test/golden/importless/coda.txtnew file+24

This diff is too big to show here.

test/golden/importless/cohttp.nixnew file+26

This diff is too big to show here.

test/golden/importless/cohttp.txtnew file+31

This diff is too big to show here.

test/golden/importless/collectd-exporter.nixnew file+26

This diff is too big to show here.

test/golden/importless/collectd.nixnew file+77

This diff is too big to show here.

test/golden/importless/collections.nixnew file+77

This diff is too big to show here.

test/golden/importless/collections.txtnew file+69

This diff is too big to show here.

test/golden/importless/collectors.nixnew file+35

This diff is too big to show here.

test/golden/importless/collectors.txtnew file+19

This diff is too big to show here.

test/golden/importless/colord.nixnew file+41

This diff is too big to show here.

test/golden/importless/colord.txtnew file+23

This diff is too big to show here.

test/golden/importless/combinators.nixnew file+13

This diff is too big to show here.

test/golden/importless/combinators.txtnew file+22

This diff is too big to show here.

test/golden/importless/combine-packages.nixnew file+20

This diff is too big to show here.

test/golden/importless/command-line-arguments.nixnew file+26

This diff is too big to show here.

test/golden/importless/command-line-arguments.txtnew file+11

This diff is too big to show here.

test/golden/importless/command-not-found.nixnew file+95

This diff is too big to show here.

test/golden/importless/common-artifact-filters.nixnew file+36

This diff is too big to show here.

test/golden/importless/common-config.nixnew file+822

This diff is too big to show here.

test/golden/importless/common-overrides.nixnew file+8

This diff is too big to show here.

test/golden/importless/common-overrides.txtnew file+11

This diff is too big to show here.

test/golden/importless/common-path.nixnew file+15

This diff is too big to show here.

test/golden/importless/common-path.txtnew file+18

This diff is too big to show here.

test/golden/importless/common.nixnew file+48

This diff is too big to show here.

test/golden/importless/common.txtnew file+38

This diff is too big to show here.

test/golden/importless/commons-cli.nixnew file+25

This diff is too big to show here.

test/golden/importless/commons-io.nixnew file+14

This diff is too big to show here.

test/golden/importless/commons-lang.nixnew file+36

This diff is too big to show here.

test/golden/importless/commons-lang3.nixnew file+14

This diff is too big to show here.

test/golden/importless/commons-logging-api.nixnew file+14

This diff is too big to show here.

test/golden/importless/community-edition.nixnew file+167

This diff is too big to show here.

test/golden/importless/community-edition.txtnew file+44

This diff is too big to show here.

test/golden/importless/community.nixnew file+131

This diff is too big to show here.

test/golden/importless/community.txtnew file+88

This diff is too big to show here.

test/golden/importless/comonad.nixnew file+22

This diff is too big to show here.

test/golden/importless/comonad.txtnew file+23

This diff is too big to show here.

test/golden/importless/compiler-api.nixnew file+14

This diff is too big to show here.

test/golden/importless/compiler-javac.nixnew file+14

This diff is too big to show here.

test/golden/importless/compiler-manager.nixnew file+14

This diff is too big to show here.

test/golden/importless/compiler-rt.nixnew file+83

This diff is too big to show here.

test/golden/importless/compiler-rt.txtnew file+55

This diff is too big to show here.

test/golden/importless/compiler.nixnew file+28

This diff is too big to show here.

test/golden/importless/compiler.txtnew file+35

This diff is too big to show here.

test/golden/importless/component-annotations.nixnew file+14

This diff is too big to show here.

test/golden/importless/component-packages.nixnew file+952

This diff is too big to show here.

test/golden/importless/component-packages.txtnew file+1061

This diff is too big to show here.

test/golden/importless/compose-xcodewrapper.nixnew file+33

This diff is too big to show here.

test/golden/importless/compose-xcodewrapper.txtnew file+5

This diff is too big to show here.

test/golden/importless/composition.nixnew file+25

This diff is too big to show here.

test/golden/importless/composition.txtnew file+25

This diff is too big to show here.

test/golden/importless/compyte.nixnew file+21

This diff is too big to show here.

test/golden/importless/compyte.txtnew file+7

This diff is too big to show here.

test/golden/importless/condensed.nixnew file+24

This diff is too big to show here.

test/golden/importless/condensed.txtnew file+25

This diff is too big to show here.

test/golden/importless/conf.nixnew file+31

This diff is too big to show here.

test/golden/importless/conf.txtnew file+9

This diff is too big to show here.

test/golden/importless/confd.nixnew file+90

This diff is too big to show here.

test/golden/importless/config.nixnew file+46

This diff is too big to show here.

test/golden/importless/config.txtnew file+7

This diff is too big to show here.

test/golden/importless/configurable.nixnew file+191

This diff is too big to show here.

test/golden/importless/configuration-ghc-8.10.x.nixnew file+132

This diff is too big to show here.

test/golden/importless/configuration-ghc-8.2.x.nixnew file+97

This diff is too big to show here.

test/golden/importless/configuration-ghc-8.4.x.nixnew file+92

This diff is too big to show here.

test/golden/importless/configuration-ghc-8.4.x.txtnew file+86

This diff is too big to show here.

test/golden/importless/configuration-ghc-8.6.x.nixnew file+97

This diff is too big to show here.

test/golden/importless/configuration-ghc-8.6.x.txtnew file+117

This diff is too big to show here.

test/golden/importless/configuration-ghc-8.8.x.nixnew file+129

This diff is too big to show here.

test/golden/importless/configuration-ghc-head.nixnew file+81

This diff is too big to show here.

test/golden/importless/configuration-ghc-head.txtnew file+82

This diff is too big to show here.

test/golden/importless/configuration-nix.nixnew file+785

This diff is too big to show here.

test/golden/importless/configuration-tensorflow.nixnew file+38

This diff is too big to show here.

test/golden/importless/configuration-tensorflow.txtnew file+30

This diff is too big to show here.

test/golden/importless/configure-crate.nixnew file+202

This diff is too big to show here.

test/golden/importless/configured-ghcjs-src.nixnew file+51

This diff is too big to show here.

test/golden/importless/configured-ghcjs-src.txtnew file+17

This diff is too big to show here.

test/golden/importless/confluence.nixnew file+197

This diff is too big to show here.

test/golden/importless/connman.nixnew file+171

This diff is too big to show here.

test/golden/importless/console.nixnew file+27

This diff is too big to show here.

test/golden/importless/console.txtnew file+27

This diff is too big to show here.

test/golden/importless/constraint.nixnew file+22

This diff is too big to show here.

test/golden/importless/consul-exporter.nixnew file+23

This diff is too big to show here.

test/golden/importless/consul-exporter.txtnew file+28

This diff is too big to show here.

test/golden/importless/consul.nixnew file+254

This diff is too big to show here.

test/golden/importless/container-config.nixnew file+31

This diff is too big to show here.

test/golden/importless/container-config.txtnew file+21

This diff is too big to show here.

test/golden/importless/container-default.nixnew file+36

This diff is too big to show here.

test/golden/importless/containerd-shim.nixnew file+35

This diff is too big to show here.

test/golden/importless/containerd-shim.txtnew file+28

This diff is too big to show here.

test/golden/importless/containers.nixnew file+26

This diff is too big to show here.

test/golden/importless/containers.txtnew file+26

This diff is too big to show here.

test/golden/importless/contrib.nixnew file+95

This diff is too big to show here.

test/golden/importless/contrib.txtnew file+62

This diff is too big to show here.

test/golden/importless/control.nixnew file+60

This diff is too big to show here.

test/golden/importless/control.txtnew file+41

This diff is too big to show here.

test/golden/importless/convert.nixnew file+43

This diff is too big to show here.

test/golden/importless/convert.txtnew file+29

This diff is too big to show here.

test/golden/importless/convos.nixnew file+72

This diff is too big to show here.

test/golden/importless/coq-packages.nixnew file+137

This diff is too big to show here.

test/golden/importless/core.nixnew file+47

This diff is too big to show here.

test/golden/importless/core_bench.nixnew file+20

This diff is too big to show here.

test/golden/importless/core_bench.txtnew file+25

This diff is too big to show here.

test/golden/importless/coredns.nixnew file+50

This diff is too big to show here.

test/golden/importless/corerad.nixnew file+88

This diff is too big to show here.

test/golden/importless/cores.nixnew file+1101

This diff is too big to show here.

test/golden/importless/coturn.nixnew file+334

This diff is too big to show here.

test/golden/importless/couchdb.nixnew file+201

This diff is too big to show here.

test/golden/importless/couchpotato.nixnew file+42

This diff is too big to show here.

test/golden/importless/couchpotato.txtnew file+43

This diff is too big to show here.

test/golden/importless/cpp-test.nixnew file+51

This diff is too big to show here.

test/golden/importless/cpp-test.txtnew file+14

This diff is too big to show here.

test/golden/importless/cpu-freq.nixnew file+90

This diff is too big to show here.

test/golden/importless/cpuminer-cryptonight.nixnew file+66

This diff is too big to show here.

test/golden/importless/crashdump.nixnew file+75

This diff is too big to show here.

test/golden/importless/credentials.nixnew file+38

This diff is too big to show here.

test/golden/importless/criu.nixnew file+27

This diff is too big to show here.

test/golden/importless/criu.txtnew file+23

This diff is too big to show here.

test/golden/importless/cron.nixnew file+133

This diff is too big to show here.

test/golden/importless/crowd.nixnew file+164

This diff is too big to show here.

test/golden/importless/cryptpad.nixnew file+54

This diff is too big to show here.

test/golden/importless/cryptpad.txtnew file+43

This diff is too big to show here.

test/golden/importless/cryptsetup.nixnew file+38

This diff is too big to show here.

test/golden/importless/cryptsetup.txtnew file+38

This diff is too big to show here.

test/golden/importless/crystal2nix.nixnew file+22

This diff is too big to show here.

test/golden/importless/crystal2nix.txtnew file+18

This diff is too big to show here.

test/golden/importless/css-lite.nixnew file+24

This diff is too big to show here.

test/golden/importless/css-lite.txtnew file+11

This diff is too big to show here.

test/golden/importless/css-selectors-simple-tree.nixnew file+51

This diff is too big to show here.

test/golden/importless/css-selectors-simple-tree.txtnew file+37

This diff is too big to show here.

test/golden/importless/css-selectors-stp.nixnew file+51

This diff is too big to show here.

test/golden/importless/css-selectors-stp.txtnew file+38

This diff is too big to show here.

test/golden/importless/css-selectors.nixnew file+50

This diff is too big to show here.

test/golden/importless/css-selectors.txtnew file+37

This diff is too big to show here.

test/golden/importless/cstore_fdw.nixnew file+32

This diff is too big to show here.

test/golden/importless/cstore_fdw.txtnew file+32

This diff is too big to show here.

test/golden/importless/cstruct.nixnew file+17

This diff is too big to show here.

test/golden/importless/cstruct.txtnew file+22

This diff is too big to show here.

test/golden/importless/cube.nixnew file+22

This diff is too big to show here.

test/golden/importless/cube.txtnew file+23

This diff is too big to show here.

test/golden/importless/cups-exporter.nixnew file+38

This diff is too big to show here.

test/golden/importless/cups-exporter.txtnew file+37

This diff is too big to show here.

test/golden/importless/cups-pk-helper.nixnew file+30

This diff is too big to show here.

test/golden/importless/cups-pk-helper.txtnew file+35

This diff is too big to show here.

test/golden/importless/curaengine.nixnew file+27

This diff is too big to show here.

test/golden/importless/curaengine.txtnew file+36

This diff is too big to show here.

test/golden/importless/curry-base.nixnew file+16

This diff is too big to show here.

test/golden/importless/curry-base.txtnew file+26

This diff is too big to show here.

test/golden/importless/curry-frontend.nixnew file+26

This diff is too big to show here.

test/golden/importless/curry-frontend.txtnew file+35

This diff is too big to show here.

test/golden/importless/cursive.nixnew file+39

This diff is too big to show here.

test/golden/importless/cursive.txtnew file+47

This diff is too big to show here.

test/golden/importless/cutter.nixnew file+53

This diff is too big to show here.

test/golden/importless/cutter.txtnew file+37

This diff is too big to show here.

test/golden/importless/cwm.nixnew file+23

This diff is too big to show here.

test/golden/importless/cwm.txtnew file+24

This diff is too big to show here.

test/golden/importless/cxml-stp.nixnew file+37

This diff is too big to show here.

test/golden/importless/cxml-stp.txtnew file+27

This diff is too big to show here.

test/golden/importless/cxml.nixnew file+34

This diff is too big to show here.

test/golden/importless/cxml.txtnew file+20

This diff is too big to show here.

test/golden/importless/dante.nixnew file+62

This diff is too big to show here.

test/golden/importless/dante.txtnew file+48

This diff is too big to show here.

test/golden/importless/darkhttpd.nixnew file+77

This diff is too big to show here.

test/golden/importless/darwin-packages.nixnew file+95

This diff is too big to show here.

test/golden/importless/darwin.nixnew file+34

This diff is too big to show here.

test/golden/importless/darwin.txtnew file+32

This diff is too big to show here.

test/golden/importless/das_watchdog.nixnew file+34

This diff is too big to show here.

test/golden/importless/das_watchdog.txtnew file+31

This diff is too big to show here.

test/golden/importless/dash.nixnew file+47

This diff is too big to show here.

test/golden/importless/dash.txtnew file+43

This diff is too big to show here.

test/golden/importless/dashpay.nixnew file+44

This diff is too big to show here.

test/golden/importless/dashpay.txtnew file+48

This diff is too big to show here.

test/golden/importless/data-api.nixnew file+25

This diff is too big to show here.

test/golden/importless/data-api.txtnew file+24

This diff is too big to show here.

test/golden/importless/data.nixnew file+25

This diff is too big to show here.

test/golden/importless/data.txtnew file+27

This diff is too big to show here.

test/golden/importless/datadog-agent-deps.nixnew file+1353

This diff is too big to show here.

test/golden/importless/datadog-agent-deps.txtnew file+4

This diff is too big to show here.

test/golden/importless/datadog-agent.nixnew file+294

This diff is too big to show here.

test/golden/importless/datadog-process-agent-deps.nixnew file+669

This diff is too big to show here.

test/golden/importless/datadog-process-agent-deps.txtnew file+4

This diff is too big to show here.

test/golden/importless/datadog-process-agent.nixnew file+24

This diff is too big to show here.

test/golden/importless/datasets.nixnew file+119

This diff is too big to show here.

test/golden/importless/davfs2.nixnew file+75

This diff is too big to show here.

test/golden/importless/davmail.nixnew file+99

This diff is too big to show here.

test/golden/importless/db3.nixnew file+24

This diff is too big to show here.

test/golden/importless/db3.txtnew file+11

This diff is too big to show here.

test/golden/importless/dbd-mysql.nixnew file+39

This diff is too big to show here.

test/golden/importless/dbd-mysql.txtnew file+27

This diff is too big to show here.

test/golden/importless/dbd-postgres.nixnew file+41

This diff is too big to show here.

test/golden/importless/dbd-postgres.txtnew file+27

This diff is too big to show here.

test/golden/importless/dbd-sqlite3.nixnew file+43

This diff is too big to show here.

test/golden/importless/dbd-sqlite3.txtnew file+30

This diff is too big to show here.

test/golden/importless/dbi.nixnew file+36

This diff is too big to show here.

test/golden/importless/dbi.txtnew file+22

This diff is too big to show here.

test/golden/importless/dbus-sharp-1.0.nixnew file+25

This diff is too big to show here.

test/golden/importless/dbus-sharp-1.0.txtnew file+25

This diff is too big to show here.

test/golden/importless/dbus-sharp-glib-1.0.nixnew file+25

This diff is too big to show here.

test/golden/importless/dbus-sharp-glib-1.0.txtnew file+26

This diff is too big to show here.

test/golden/importless/dbus.nixnew file+116

This diff is too big to show here.

test/golden/importless/dconf.nixnew file+64

This diff is too big to show here.

test/golden/importless/dconf2nix.nixnew file+21

This diff is too big to show here.

test/golden/importless/dconf2nix.txtnew file+23

This diff is too big to show here.

test/golden/importless/dcrd.nixnew file+26

This diff is too big to show here.

test/golden/importless/dcrd.txtnew file+26

This diff is too big to show here.

test/golden/importless/dcrwallet.nixnew file+26

This diff is too big to show here.

test/golden/importless/dcrwallet.txtnew file+26

This diff is too big to show here.

test/golden/importless/dcw.nixnew file+32

This diff is too big to show here.

test/golden/importless/dcw.txtnew file+22

This diff is too big to show here.

test/golden/importless/dd-agent-defaults.nixnew file+8

This diff is too big to show here.

test/golden/importless/dd-agent-defaults.txtnew file+1

This diff is too big to show here.

test/golden/importless/debian-build.nixnew file+98

This diff is too big to show here.

test/golden/importless/debian-build.txtnew file+29

This diff is too big to show here.

test/golden/importless/debian-patches.nixnew file+34

This diff is too big to show here.

test/golden/importless/debian-patches.txtnew file+1

This diff is too big to show here.

test/golden/importless/debug-info.nixnew file+45

This diff is too big to show here.

test/golden/importless/debug-info.txtnew file+18

This diff is too big to show here.

test/golden/importless/debug.nixnew file+253

This diff is too big to show here.

test/golden/importless/declare-attrsOf.nixnew file+6

This diff is too big to show here.

test/golden/importless/declare-attrsOf.txtnew file+8

This diff is too big to show here.

test/golden/importless/declare-attrsOfSub-any-enable.nixnew file+29

This diff is too big to show here.

test/golden/importless/declare-coerced-value-unsound.nixnew file+10

This diff is too big to show here.

test/golden/importless/declare-coerced-value-unsound.txtnew file+11

This diff is too big to show here.

test/golden/importless/declare-coerced-value.nixnew file+10

This diff is too big to show here.

test/golden/importless/declare-either.nixnew file+5

This diff is too big to show here.

test/golden/importless/declare-either.txtnew file+9

This diff is too big to show here.

test/golden/importless/declare-enable-nested.nixnew file+14

This diff is too big to show here.

test/golden/importless/declare-enable-nested.txtnew file+8

This diff is too big to show here.

test/golden/importless/declare-enable.nixnew file+14

This diff is too big to show here.

test/golden/importless/declare-enable.txtnew file+8

This diff is too big to show here.

test/golden/importless/declare-int-between-value.nixnew file+9

This diff is too big to show here.

test/golden/importless/declare-int-between-value.txtnew file+8

This diff is too big to show here.

test/golden/importless/declare-int-positive-value-nested.nixnew file+9

This diff is too big to show here.

test/golden/importless/declare-int-positive-value-nested.txtnew file+8

This diff is too big to show here.

test/golden/importless/declare-int-positive-value.nixnew file+9

This diff is too big to show here.

test/golden/importless/declare-int-positive-value.txtnew file+8

This diff is too big to show here.

test/golden/importless/declare-int-unsigned-value.nixnew file+9

This diff is too big to show here.

test/golden/importless/declare-int-unsigned-value.txtnew file+8

This diff is too big to show here.

test/golden/importless/declare-lazyAttrsOf.nixnew file+6

This diff is too big to show here.

test/golden/importless/declare-lazyAttrsOf.txtnew file+9

This diff is too big to show here.

test/golden/importless/declare-oneOf.nixnew file+9

This diff is too big to show here.

test/golden/importless/declare-oneOf.txtnew file+11

This diff is too big to show here.

test/golden/importless/declare-submoduleWith-modules.nixnew file+30

This diff is too big to show here.

test/golden/importless/declare-submoduleWith-noshorthand.nixnew file+13

This diff is too big to show here.

test/golden/importless/declare-submoduleWith-path.nixnew file+12

This diff is too big to show here.

test/golden/importless/declare-submoduleWith-path.txtnew file+7

This diff is too big to show here.

test/golden/importless/declare-submoduleWith-shorthand.nixnew file+14

This diff is too big to show here.

test/golden/importless/declare-submoduleWith-special.nixnew file+17

This diff is too big to show here.

test/golden/importless/declare-submoduleWith-special.txtnew file+17

This diff is too big to show here.

test/golden/importless/declare.nixnew file+53

This diff is too big to show here.

test/golden/importless/default-crate-overrides.nixnew file+112

This diff is too big to show here.

test/golden/importless/default-crate-overrides.txtnew file+64

This diff is too big to show here.

test/golden/importless/default.nixnew file+507

This diff is too big to show here.

test/golden/importless/define-_module-args-custom.nixnew file+7

This diff is too big to show here.

test/golden/importless/define-_module-args-custom.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-bar-enable.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-bar-enable.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-bar.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-bar.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-foo-enable-force.nixnew file+5

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-foo-enable-force.txtnew file+3

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-foo-enable-if.nixnew file+5

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-foo-enable-if.txtnew file+3

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-foo-enable.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-foo-enable.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-foo-force-enable.nixnew file+7

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-foo-force-enable.txtnew file+3

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-foo-if-enable.nixnew file+7

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-foo-if-enable.txtnew file+7

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-foo.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-foo.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-force-foo-enable.nixnew file+7

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-force-foo-enable.txtnew file+3

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-if-foo-enable.nixnew file+7

This diff is too big to show here.

test/golden/importless/define-attrsOfSub-if-foo-enable.txtnew file+7

This diff is too big to show here.

test/golden/importless/define-enable-force.nixnew file+5

This diff is too big to show here.

test/golden/importless/define-enable-force.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-enable-with-custom-arg.nixnew file+7

This diff is too big to show here.

test/golden/importless/define-enable-with-custom-arg.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-enable.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-enable.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-force-attrsOfSub-foo-enable.nixnew file+5

This diff is too big to show here.

test/golden/importless/define-force-attrsOfSub-foo-enable.txtnew file+3

This diff is too big to show here.

test/golden/importless/define-force-enable.nixnew file+5

This diff is too big to show here.

test/golden/importless/define-force-enable.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-if-attrsOfSub-foo-enable.nixnew file+5

This diff is too big to show here.

test/golden/importless/define-if-attrsOfSub-foo-enable.txtnew file+7

This diff is too big to show here.

test/golden/importless/define-module-check.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-module-check.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-option-dependently-nested.nixnew file+16

This diff is too big to show here.

test/golden/importless/define-option-dependently-nested.txtnew file+10

This diff is too big to show here.

test/golden/importless/define-option-dependently.nixnew file+16

This diff is too big to show here.

test/golden/importless/define-option-dependently.txtnew file+8

This diff is too big to show here.

test/golden/importless/define-package.nixnew file+116

This diff is too big to show here.

test/golden/importless/define-submoduleWith-noshorthand.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-submoduleWith-noshorthand.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-submoduleWith-shorthand.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-submoduleWith-shorthand.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-value-int-negative.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-value-int-negative.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-value-int-positive.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-value-int-positive.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-value-int-zero.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-value-int-zero.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-value-list.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-value-list.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-value-string-arbitrary.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-value-string-arbitrary.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-value-string-bigint.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-value-string-bigint.txtnew file+1

This diff is too big to show here.

test/golden/importless/define-value-string.nixnew file+3

This diff is too big to show here.

test/golden/importless/define-value-string.txtnew file+1

This diff is too big to show here.

test/golden/importless/deluge.nixnew file+271

This diff is too big to show here.

test/golden/importless/demo.nixnew file+40

This diff is too big to show here.

test/golden/importless/dep-overrides.nixnew file+14

This diff is too big to show here.

test/golden/importless/dep-overrides.txtnew file+21

This diff is too big to show here.

test/golden/importless/dependency-tree.nixnew file+14

This diff is too big to show here.

test/golden/importless/deploy-androidpackage.nixnew file+46

This diff is too big to show here.

test/golden/importless/deprecated.nixnew file+278

This diff is too big to show here.

test/golden/importless/deps.nixnew file+12

This diff is too big to show here.

test/golden/importless/deps.txtnew file+4

This diff is too big to show here.

test/golden/importless/derive.nixnew file+26

This diff is too big to show here.

test/golden/importless/derive.txtnew file+26

This diff is too big to show here.

test/golden/importless/dero.nixnew file+27

This diff is too big to show here.

test/golden/importless/dero.txtnew file+38

This diff is too big to show here.

test/golden/importless/descncrunch.nixnew file+26

This diff is too big to show here.

test/golden/importless/descncrunch.txtnew file+26

This diff is too big to show here.

test/golden/importless/desktop_items.nixnew file+42

This diff is too big to show here.

test/golden/importless/desktop_items.txtnew file+15

This diff is too big to show here.

test/golden/importless/detected.nixnew file+12

This diff is too big to show here.

test/golden/importless/detected.txtnew file+5

This diff is too big to show here.

test/golden/importless/dev.nixnew file+23

This diff is too big to show here.

test/golden/importless/dev.txtnew file+16

This diff is too big to show here.

test/golden/importless/devedition_sources.nixnew file+965

This diff is too big to show here.

test/golden/importless/devedition_sources.txtnew file+3

This diff is too big to show here.

test/golden/importless/device-tree.nixnew file+67

This diff is too big to show here.

test/golden/importless/devmon.nixnew file+25

This diff is too big to show here.

test/golden/importless/devmon.txtnew file+31

This diff is too big to show here.

test/golden/importless/dexador.nixnew file+51

This diff is too big to show here.

test/golden/importless/dexador.txtnew file+43

This diff is too big to show here.

test/golden/importless/dfu-util.nixnew file+31

This diff is too big to show here.

test/golden/importless/dfu-util.txtnew file+29

This diff is too big to show here.

test/golden/importless/dhall-kubernetes.nixnew file+27

This diff is too big to show here.

test/golden/importless/dhall-kubernetes.txtnew file+20

This diff is too big to show here.

test/golden/importless/dhall-packages.nixnew file+48

This diff is too big to show here.

test/golden/importless/dhall-packages.txtnew file+16

This diff is too big to show here.

test/golden/importless/dhcpcd.nixnew file+225

This diff is too big to show here.

test/golden/importless/dict.nixnew file+29

This diff is too big to show here.

test/golden/importless/dict.txtnew file+26

This diff is too big to show here.

test/golden/importless/dictd-db-collector.nixnew file+80

This diff is too big to show here.

test/golden/importless/dictd-db.nixnew file+95

This diff is too big to show here.

test/golden/importless/dictd-db.txtnew file+41

This diff is too big to show here.

test/golden/importless/dictd-wiktionary.nixnew file+31

This diff is too big to show here.

test/golden/importless/dictd-wiktionary.txtnew file+28

This diff is too big to show here.

test/golden/importless/dictd-wordnet.nixnew file+36

This diff is too big to show here.

test/golden/importless/dictd-wordnet.txtnew file+21

This diff is too big to show here.

test/golden/importless/dictd.nixnew file+65

This diff is too big to show here.

test/golden/importless/dictionaries.nixnew file+944

This diff is too big to show here.

test/golden/importless/dicts.nixnew file+40

This diff is too big to show here.

test/golden/importless/digest.nixnew file+33

This diff is too big to show here.

test/golden/importless/digest.txtnew file+36

This diff is too big to show here.

test/golden/importless/digibyte.nixnew file+69

This diff is too big to show here.

test/golden/importless/digimend.nixnew file+38

This diff is too big to show here.

test/golden/importless/digimend.txtnew file+23

This diff is too big to show here.

test/golden/importless/digitalbitbox.nixnew file+30

This diff is too big to show here.

test/golden/importless/diod.nixnew file+159

This diff is too big to show here.

test/golden/importless/disable-bar.nixnew file+7

This diff is too big to show here.

test/golden/importless/disable-bar.txtnew file+1

This diff is too big to show here.

test/golden/importless/disable-declare-enable.nixnew file+5

This diff is too big to show here.

test/golden/importless/disable-declare-enable.txtnew file+1

This diff is too big to show here.

test/golden/importless/disable-define-enable.nixnew file+5

This diff is too big to show here.

test/golden/importless/disable-define-enable.txtnew file+1

This diff is too big to show here.

test/golden/importless/disable-enable-modules.nixnew file+5

This diff is too big to show here.

test/golden/importless/disable-enable-modules.txtnew file+1

This diff is too big to show here.

test/golden/importless/disable-foo.nixnew file+7

This diff is too big to show here.

test/golden/importless/disable-foo.txtnew file+1

This diff is too big to show here.

test/golden/importless/discover.nixnew file+20

This diff is too big to show here.

test/golden/importless/discover.txtnew file+30

This diff is too big to show here.

test/golden/importless/disnix.nixnew file+88

This diff is too big to show here.

test/golden/importless/dispatch.nixnew file+38

This diff is too big to show here.

test/golden/importless/dispatch.txtnew file+32

This diff is too big to show here.

test/golden/importless/displaylink.nixnew file+76

This diff is too big to show here.

test/golden/importless/displaylink.txtnew file+42

This diff is too big to show here.

test/golden/importless/dissect.nixnew file+25

This diff is too big to show here.

test/golden/importless/dissect.txtnew file+11

This diff is too big to show here.

test/golden/importless/dist-tests.nixnew file+17

This diff is too big to show here.

test/golden/importless/dist-tests.txtnew file+1

This diff is too big to show here.

test/golden/importless/distribution.nixnew file+23

This diff is too big to show here.

test/golden/importless/django-crispy-forms.nixnew file+36

This diff is too big to show here.

test/golden/importless/django-crispy-forms.txtnew file+29

This diff is too big to show here.

test/golden/importless/django-filter.nixnew file+26

This diff is too big to show here.

test/golden/importless/django-filter.txtnew file+33

This diff is too big to show here.

test/golden/importless/dkimproxy-out.nixnew file+120

This diff is too big to show here.

test/golden/importless/dleyna-renderer.nixnew file+28

This diff is too big to show here.

test/golden/importless/dleyna-renderer.txtnew file+19

This diff is too big to show here.

test/golden/importless/dleyna-server.nixnew file+28

This diff is too big to show here.

test/golden/importless/dleyna-server.txtnew file+19

This diff is too big to show here.

test/golden/importless/dmraid.nixnew file+26

This diff is too big to show here.

test/golden/importless/dmraid.txtnew file+21

This diff is too big to show here.

test/golden/importless/dmrconfig.nixnew file+38

This diff is too big to show here.

test/golden/importless/dns.nixnew file+334

This diff is too big to show here.

test/golden/importless/dnscache.nixnew file+108

This diff is too big to show here.

test/golden/importless/dnscrypt-proxy2.nixnew file+62

This diff is too big to show here.

test/golden/importless/dnscrypt-wrapper.nixnew file+284

This diff is too big to show here.

test/golden/importless/dnsdist.nixnew file+60

This diff is too big to show here.

test/golden/importless/dnsmasq-exporter.nixnew file+26

This diff is too big to show here.

test/golden/importless/dnsmasq-exporter.txtnew file+30

This diff is too big to show here.

test/golden/importless/dnsmasq.nixnew file+38

This diff is too big to show here.

test/golden/importless/do-agent.nixnew file+25

This diff is too big to show here.

test/golden/importless/do-agent.txtnew file+24

This diff is too big to show here.

test/golden/importless/do-urlencode.nixnew file+28

This diff is too big to show here.

test/golden/importless/do-urlencode.txtnew file+16

This diff is too big to show here.

test/golden/importless/doas.nixnew file+274

This diff is too big to show here.

test/golden/importless/docker-registry.nixnew file+157

This diff is too big to show here.

test/golden/importless/documentation-utils.nixnew file+27

This diff is too big to show here.

test/golden/importless/documentation-utils.txtnew file+14

This diff is too big to show here.

test/golden/importless/documize.nixnew file+149

This diff is too big to show here.

test/golden/importless/dogecoin.nixnew file+41

This diff is too big to show here.

test/golden/importless/dogecoin.txtnew file+49

This diff is too big to show here.

test/golden/importless/dolphin-plugins.nixnew file+18

This diff is too big to show here.

test/golden/importless/dolphin-plugins.txtnew file+19

This diff is too big to show here.

test/golden/importless/dolphin.nixnew file+31

This diff is too big to show here.

test/golden/importless/dolphin.txtnew file+46

This diff is too big to show here.

test/golden/importless/dom.nixnew file+27

This diff is too big to show here.

test/golden/importless/dom.txtnew file+27

This diff is too big to show here.

test/golden/importless/dotnet-packages.nixnew file+963

This diff is too big to show here.

test/golden/importless/dotty-bare.nixnew file+40

This diff is too big to show here.

test/golden/importless/dotty-bare.txtnew file+36

This diff is too big to show here.

test/golden/importless/dotty.nixnew file+22

This diff is too big to show here.

test/golden/importless/dotty.txtnew file+13

This diff is too big to show here.

test/golden/importless/doubles.nixnew file+81

This diff is too big to show here.

test/golden/importless/dovecot-exporter-deps.nixnew file+102

This diff is too big to show here.

test/golden/importless/dovecot-exporter-deps.txtnew file+4

This diff is too big to show here.

test/golden/importless/dovecot-exporter.nixnew file+26

This diff is too big to show here.

test/golden/importless/dovecot-exporter.txtnew file+29

This diff is too big to show here.

test/golden/importless/dovecot.nixnew file+73

This diff is too big to show here.

test/golden/importless/download.nixnew file+884

This diff is too big to show here.

test/golden/importless/download.txtnew file+7

This diff is too big to show here.

test/golden/importless/downloads.nixnew file+213

This diff is too big to show here.

test/golden/importless/doxia-sink-api.nixnew file+36

This diff is too big to show here.

test/golden/importless/dragon.nixnew file+25

This diff is too big to show here.

test/golden/importless/dragon.txtnew file+43

This diff is too big to show here.

test/golden/importless/drakma.nixnew file+39

This diff is too big to show here.

test/golden/importless/drakma.txtnew file+29

This diff is too big to show here.

test/golden/importless/drbd.nixnew file+65

This diff is too big to show here.

test/golden/importless/dspam.nixnew file+150

This diff is too big to show here.

test/golden/importless/dsseries.nixnew file+26

This diff is too big to show here.

test/golden/importless/dsseries.txtnew file+25

This diff is too big to show here.

test/golden/importless/dune.nixnew file+40

This diff is too big to show here.

test/golden/importless/duplicati.nixnew file+67

This diff is too big to show here.

test/golden/importless/duplicity.nixnew file+141

This diff is too big to show here.

test/golden/importless/dust.nixnew file+35

This diff is too big to show here.

test/golden/importless/dust.txtnew file+28

This diff is too big to show here.

test/golden/importless/dvtm.nixnew file+29

This diff is too big to show here.

test/golden/importless/dvtm.txtnew file+39

This diff is too big to show here.

test/golden/importless/dwm-status.nixnew file+73

This diff is too big to show here.

test/golden/importless/dwm.nixnew file+37

This diff is too big to show here.

test/golden/importless/dwm.txtnew file+24

This diff is too big to show here.

test/golden/importless/dynamic-classes.nixnew file+26

This diff is too big to show here.

test/golden/importless/dynamic-classes.txtnew file+14

This diff is too big to show here.

test/golden/importless/dynamic-workspaces.nixnew file+39

This diff is too big to show here.

test/golden/importless/dynamic-workspaces.txtnew file+35

This diff is too big to show here.

test/golden/importless/dynamic.nixnew file+26

This diff is too big to show here.

test/golden/importless/dynamic.txtnew file+34

This diff is too big to show here.

test/golden/importless/eagle.nixnew file+80

This diff is too big to show here.

test/golden/importless/eagle.txtnew file+57

This diff is too big to show here.

test/golden/importless/eagle7.nixnew file+97

This diff is too big to show here.

test/golden/importless/earlyoom.nixnew file+123

This diff is too big to show here.

test/golden/importless/easyfocus.nixnew file+32

This diff is too big to show here.

test/golden/importless/easyfocus.txtnew file+40

This diff is too big to show here.

test/golden/importless/ec2-amis.nixnew file+352

This diff is too big to show here.

test/golden/importless/ec2-amis.txtnew file+257

This diff is too big to show here.

test/golden/importless/ec2-metadata-fetcher.nixnew file+23

This diff is too big to show here.

test/golden/importless/ec2-metadata-fetcher.txtnew file+1

This diff is too big to show here.

test/golden/importless/ecryptfs.nixnew file+14

This diff is too big to show here.

test/golden/importless/ecryptfs.txtnew file+21

This diff is too big to show here.

test/golden/importless/ecs-agent.nixnew file+45

This diff is too big to show here.

test/golden/importless/edit.nixnew file+60

This diff is too big to show here.

test/golden/importless/edit.txtnew file+31

This diff is too big to show here.

test/golden/importless/editable.nixnew file+54

This diff is too big to show here.

test/golden/importless/editor.nixnew file+43

This diff is too big to show here.

test/golden/importless/editor.txtnew file+38

This diff is too big to show here.

test/golden/importless/editors.nixnew file+93

This diff is too big to show here.

test/golden/importless/editors.txtnew file+58

This diff is too big to show here.

test/golden/importless/efi.nixnew file+20

This diff is too big to show here.

test/golden/importless/egg2nix.nixnew file+29

This diff is too big to show here.

test/golden/importless/egg2nix.txtnew file+30

This diff is too big to show here.

test/golden/importless/eggs.nixnew file+91

This diff is too big to show here.

test/golden/importless/eggs.txtnew file+14

This diff is too big to show here.

test/golden/importless/ejabberd.nixnew file+157

This diff is too big to show here.

test/golden/importless/elasticsearch-curator.nixnew file+94

This diff is too big to show here.

test/golden/importless/elasticsearch.nixnew file+208

This diff is too big to show here.

test/golden/importless/electron.nixnew file+27

This diff is too big to show here.

test/golden/importless/electron.txtnew file+27

This diff is too big to show here.

test/golden/importless/electronplayer.nixnew file+33

This diff is too big to show here.

test/golden/importless/electronplayer.txtnew file+26

This diff is too big to show here.

test/golden/importless/element-desktop.nixnew file+81

This diff is too big to show here.

test/golden/importless/element-desktop.txtnew file+48

This diff is too big to show here.

test/golden/importless/element-web.nixnew file+40

This diff is too big to show here.

test/golden/importless/elisa.nixnew file+46

This diff is too big to show here.

test/golden/importless/elisa.txtnew file+27

This diff is too big to show here.

test/golden/importless/elm-format.nixnew file+40

This diff is too big to show here.

test/golden/importless/elm-format.txtnew file+46

This diff is too big to show here.

test/golden/importless/elm-instrument.nixnew file+34

This diff is too big to show here.

test/golden/importless/elm-instrument.txtnew file+48

This diff is too big to show here.

test/golden/importless/elm-json.nixnew file+29

This diff is too big to show here.

test/golden/importless/elm-json.txtnew file+34

This diff is too big to show here.

test/golden/importless/elm-srcs.nixnew file+72

This diff is too big to show here.

test/golden/importless/elm-srcs.txtnew file+15

This diff is too big to show here.

test/golden/importless/elm.nixnew file+31

This diff is too big to show here.

test/golden/importless/elm.txtnew file+51

This diff is too big to show here.

test/golden/importless/elmi-to-json.nixnew file+27

This diff is too big to show here.

test/golden/importless/elmi-to-json.txtnew file+34

This diff is too big to show here.

test/golden/importless/elpa-generated.nixnew file+4011

This diff is too big to show here.

test/golden/importless/emacs.nixnew file+103

This diff is too big to show here.

test/golden/importless/emergency-mode.nixnew file+37

This diff is too big to show here.

test/golden/importless/emergency-mode.txtnew file+14

This diff is too big to show here.

test/golden/importless/emscripten-packages.nixnew file+189

This diff is too big to show here.

test/golden/importless/emscripten-packages.txtnew file+49

This diff is too big to show here.

test/golden/importless/emulate-app.nixnew file+137

This diff is too big to show here.

test/golden/importless/emulate-app.txtnew file+30

This diff is too big to show here.

test/golden/importless/emulator.nixnew file+49

This diff is too big to show here.

test/golden/importless/emulator.txtnew file+47

This diff is too big to show here.

test/golden/importless/encrypted-devices.nixnew file+87

This diff is too big to show here.

test/golden/importless/enforcer.nixnew file+25

This diff is too big to show here.

test/golden/importless/engelsystem.nixnew file+186

This diff is too big to show here.

test/golden/importless/engine.nixnew file+25

This diff is too big to show here.

test/golden/importless/engine.txtnew file+37

This diff is too big to show here.

test/golden/importless/engines.nixnew file+41

This diff is too big to show here.

test/golden/importless/engines.txtnew file+20

This diff is too big to show here.

test/golden/importless/enso-os.nixnew file+140

This diff is too big to show here.

test/golden/importless/enterprise-edition.nixnew file+175

This diff is too big to show here.

test/golden/importless/enterprise-edition.txtnew file+55

This diff is too big to show here.

test/golden/importless/env-locations.nixnew file+49

This diff is too big to show here.

test/golden/importless/env-locations.txtnew file+19

This diff is too big to show here.

test/golden/importless/env.nixnew file+167

This diff is too big to show here.

test/golden/importless/environment.nixnew file+60

This diff is too big to show here.

test/golden/importless/environment.txtnew file+33

This diff is too big to show here.

test/golden/importless/eos.nixnew file+26

This diff is too big to show here.

test/golden/importless/eos.txtnew file+12

This diff is too big to show here.

test/golden/importless/epmd.nixnew file+56

This diff is too big to show here.

test/golden/importless/epmd.txtnew file+37

This diff is too big to show here.

test/golden/importless/ergo.nixnew file+141

This diff is too big to show here.

test/golden/importless/error-diagnostics.nixnew file+47

This diff is too big to show here.

test/golden/importless/espanso.nixnew file+25

This diff is too big to show here.

test/golden/importless/espanso.txtnew file+38

This diff is too big to show here.

test/golden/importless/esrap-peg.nixnew file+29

This diff is too big to show here.

test/golden/importless/esrap-peg.txtnew file+17

This diff is too big to show here.

test/golden/importless/esrap.nixnew file+29

This diff is too big to show here.

test/golden/importless/esrap.txtnew file+16

This diff is too big to show here.

test/golden/importless/esxi.nixnew file+38

This diff is too big to show here.

test/golden/importless/esxi.txtnew file+27

This diff is too big to show here.

test/golden/importless/etc.nixnew file+162

This diff is too big to show here.

test/golden/importless/etcd.nixnew file+195

This diff is too big to show here.

test/golden/importless/eternal-terminal.nixnew file+95

This diff is too big to show here.

test/golden/importless/eternal.nixnew file+32

This diff is too big to show here.

test/golden/importless/eternal.txtnew file+26

This diff is too big to show here.

test/golden/importless/ethabi.nixnew file+23

This diff is too big to show here.

test/golden/importless/ethabi.txtnew file+27

This diff is too big to show here.

test/golden/importless/ethminer.nixnew file+117

This diff is too big to show here.

test/golden/importless/eventviews.nixnew file+20

This diff is too big to show here.

test/golden/importless/eventviews.txtnew file+23

This diff is too big to show here.

test/golden/importless/evilwm.nixnew file+25

This diff is too big to show here.

test/golden/importless/evilwm.txtnew file+24

This diff is too big to show here.

test/golden/importless/evolution-data-server.nixnew file+45

This diff is too big to show here.

test/golden/importless/evolution-data-server.txtnew file+31

This diff is too big to show here.

test/golden/importless/examples.nixnew file+421

This diff is too big to show here.

test/golden/importless/exfat.nixnew file+11

This diff is too big to show here.

test/golden/importless/exfat.txtnew file+11

This diff is too big to show here.

test/golden/importless/exim.nixnew file+120

This diff is too big to show here.

test/golden/importless/ext.nixnew file+22

This diff is too big to show here.

test/golden/importless/ext.txtnew file+10

This diff is too big to show here.

test/golden/importless/extensions.nixnew file+111

This diff is too big to show here.

test/golden/importless/external-program.nixnew file+30

This diff is too big to show here.

test/golden/importless/external-program.txtnew file+16

This diff is too big to show here.

test/golden/importless/extlinux-conf-builder.nixnew file+8

This diff is too big to show here.

test/golden/importless/extlinux-conf-builder.txtnew file+9

This diff is too big to show here.

test/golden/importless/extpack.nixnew file+25

This diff is too big to show here.

test/golden/importless/extra-target-flags.nixnew file+33

This diff is too big to show here.

test/golden/importless/extra-target-flags.txtnew file+14

This diff is too big to show here.

test/golden/importless/extra.nixnew file+51

This diff is too big to show here.

test/golden/importless/extra.txtnew file+37

This diff is too big to show here.

test/golden/importless/extract-nuget.nixnew file+15

This diff is too big to show here.

test/golden/importless/extract-nuget.txtnew file+16

This diff is too big to show here.

test/golden/importless/extras.nixnew file+91

This diff is too big to show here.

test/golden/importless/extras.txtnew file+59

This diff is too big to show here.

test/golden/importless/exwm.nixnew file+54

This diff is too big to show here.

test/golden/importless/f2fs.nixnew file+25

This diff is too big to show here.

test/golden/importless/facetimehd.nixnew file+44

This diff is too big to show here.

test/golden/importless/facetimehd.txtnew file+30

This diff is too big to show here.

test/golden/importless/factorio.nixnew file+242

This diff is too big to show here.

test/golden/importless/fail2ban.nixnew file+306

This diff is too big to show here.

test/golden/importless/fake-shell.nixnew file+5

This diff is too big to show here.

test/golden/importless/fakeroute.nixnew file+65

This diff is too big to show here.

test/golden/importless/fancontrol.nixnew file+45

This diff is too big to show here.

test/golden/importless/fancontrol.txtnew file+34

This diff is too big to show here.

test/golden/importless/fare-quasiquote-extras.nixnew file+39

This diff is too big to show here.

test/golden/importless/fare-quasiquote-extras.txtnew file+21

This diff is too big to show here.

test/golden/importless/fare-quasiquote-optima.nixnew file+34

This diff is too big to show here.

test/golden/importless/fare-quasiquote-optima.txtnew file+18

This diff is too big to show here.

test/golden/importless/fare-quasiquote-readtable.nixnew file+33

This diff is too big to show here.

test/golden/importless/fare-quasiquote-readtable.txtnew file+16

This diff is too big to show here.

test/golden/importless/fare-quasiquote.nixnew file+29

This diff is too big to show here.

test/golden/importless/fare-quasiquote.txtnew file+11

This diff is too big to show here.

test/golden/importless/fare-utils.nixnew file+26

This diff is too big to show here.

test/golden/importless/fare-utils.txtnew file+11

This diff is too big to show here.

test/golden/importless/farrp.nixnew file+25

This diff is too big to show here.

test/golden/importless/farrp.txtnew file+25

This diff is too big to show here.

test/golden/importless/fast-http.nixnew file+35

This diff is too big to show here.

test/golden/importless/fast-http.txtnew file+22

This diff is too big to show here.

test/golden/importless/fast-io.nixnew file+33

This diff is too big to show here.

test/golden/importless/fast-io.txtnew file+21

This diff is too big to show here.

test/golden/importless/faust1.nixnew file+208

This diff is too big to show here.

test/golden/importless/faust1.txtnew file+76

This diff is too big to show here.

test/golden/importless/faust2.nixnew file+222

This diff is too big to show here.

test/golden/importless/faust2.txtnew file+102

This diff is too big to show here.

test/golden/importless/faust2alqt.nixnew file+15

This diff is too big to show here.

test/golden/importless/faust2alqt.txtnew file+4

This diff is too big to show here.

test/golden/importless/faust2alsa.nixnew file+29

This diff is too big to show here.

test/golden/importless/faust2alsa.txtnew file+15

This diff is too big to show here.

test/golden/importless/faust2csound.nixnew file+20

This diff is too big to show here.

test/golden/importless/faust2csound.txtnew file+5

This diff is too big to show here.

test/golden/importless/faust2firefox.nixnew file+14

This diff is too big to show here.

test/golden/importless/faust2firefox.txtnew file+5

This diff is too big to show here.

test/golden/importless/faust2jack.nixnew file+28

This diff is too big to show here.

test/golden/importless/faust2jack.txtnew file+13

This diff is too big to show here.

test/golden/importless/faust2jackrust.nixnew file+18

This diff is too big to show here.

test/golden/importless/faust2jackrust.txtnew file+14

This diff is too big to show here.

test/golden/importless/faust2jaqt.nixnew file+28

This diff is too big to show here.

test/golden/importless/faust2jaqt.txtnew file+13

This diff is too big to show here.

test/golden/importless/faust2ladspa.nixnew file+12

This diff is too big to show here.

test/golden/importless/faust2ladspa.txtnew file+4

This diff is too big to show here.

test/golden/importless/faust2lv2.nixnew file+15

This diff is too big to show here.

test/golden/importless/faust2lv2.txtnew file+4

This diff is too big to show here.

test/golden/importless/faustlive.nixnew file+44

This diff is too big to show here.

test/golden/importless/faustlive.txtnew file+46

This diff is too big to show here.

test/golden/importless/faxq-default.nixnew file+12

This diff is too big to show here.

test/golden/importless/faxq-default.txtnew file+7

This diff is too big to show here.

test/golden/importless/fcgiwrap.nixnew file+72

This diff is too big to show here.

test/golden/importless/fcitx-configtool.nixnew file+35

This diff is too big to show here.

test/golden/importless/fcitx-configtool.txtnew file+32

This diff is too big to show here.

test/golden/importless/fcitx-qt5.nixnew file+38

This diff is too big to show here.

test/golden/importless/fcitx-qt5.txtnew file+34

This diff is too big to show here.

test/golden/importless/fcitx.nixnew file+43

This diff is too big to show here.

test/golden/importless/fcitx.txtnew file+46

This diff is too big to show here.

test/golden/importless/fcron.nixnew file+167

This diff is too big to show here.

test/golden/importless/felix.nixnew file+102

This diff is too big to show here.

test/golden/importless/ferm.nixnew file+63

This diff is too big to show here.

test/golden/importless/fetch-hex.nixnew file+34

This diff is too big to show here.

test/golden/importless/fetch-hex.txtnew file+14

This diff is too big to show here.

test/golden/importless/fetch-rebar-deps.nixnew file+33

This diff is too big to show here.

test/golden/importless/fetch-rebar-deps.txtnew file+19

This diff is too big to show here.

test/golden/importless/fetchCargoTarball.nixnew file+81

This diff is too big to show here.

test/golden/importless/fetchNodeModules.nixnew file+26

This diff is too big to show here.

test/golden/importless/fetchNodeModules.txtnew file+15

This diff is too big to show here.

test/golden/importless/fetchPackages.nixnew file+130

This diff is too big to show here.

test/golden/importless/fetchPackages.txtnew file+1

This diff is too big to show here.

test/golden/importless/fetchcrate.nixnew file+38

This diff is too big to show here.

test/golden/importless/fetchers.nixnew file+13

This diff is too big to show here.

test/golden/importless/fetchers.txtnew file+1

This diff is too big to show here.

test/golden/importless/fetchpypi.nixnew file+28

This diff is too big to show here.

test/golden/importless/ffmpeg-codecs.nixnew file+32

This diff is too big to show here.

test/golden/importless/ffmpeg-codecs.txtnew file+25

This diff is too big to show here.

test/golden/importless/ffmpegthumbs.nixnew file+15

This diff is too big to show here.

test/golden/importless/ffmpegthumbs.txtnew file+20

This diff is too big to show here.

test/golden/importless/fhsenv.nixnew file+286

This diff is too big to show here.

test/golden/importless/fiasco.nixnew file+30

This diff is too big to show here.

test/golden/importless/fiasco.txtnew file+16

This diff is too big to show here.

test/golden/importless/fieldslib.nixnew file+19

This diff is too big to show here.

test/golden/importless/fieldslib.txtnew file+26

This diff is too big to show here.

test/golden/importless/filelight.nixnew file+18

This diff is too big to show here.

test/golden/importless/filelight.txtnew file+25

This diff is too big to show here.

test/golden/importless/filesystem.nixnew file+45

This diff is too big to show here.

test/golden/importless/filesystems.nixnew file+331

This diff is too big to show here.

test/golden/importless/filtering.nixnew file+14

This diff is too big to show here.

test/golden/importless/filters.nixnew file+71

This diff is too big to show here.

test/golden/importless/filters.txtnew file+49

This diff is too big to show here.

test/golden/importless/firebird.nixnew file+161

This diff is too big to show here.

test/golden/importless/firejail.nixnew file+54

This diff is too big to show here.

test/golden/importless/firejail.txtnew file+32

This diff is too big to show here.

test/golden/importless/fireqos.nixnew file+52

This diff is too big to show here.

test/golden/importless/fish.nixnew file+247

This diff is too big to show here.

test/golden/importless/fiveam.nixnew file+30

This diff is too big to show here.

test/golden/importless/fiveam.txtnew file+17

This diff is too big to show here.

test/golden/importless/fixed-points.nixnew file+104

This diff is too big to show here.

test/golden/importless/fixed-points.txtnew file+15

This diff is too big to show here.

test/golden/importless/flannel.nixnew file+191

This diff is too big to show here.

test/golden/importless/flashpolicyd.nixnew file+85

This diff is too big to show here.

test/golden/importless/flask-oldsessions.nixnew file+36

This diff is too big to show here.

test/golden/importless/flask-oldsessions.txtnew file+29

This diff is too big to show here.

test/golden/importless/flask-openid.nixnew file+28

This diff is too big to show here.

test/golden/importless/flatpak-builder.nixnew file+14

This diff is too big to show here.

test/golden/importless/flatpak-builder.txtnew file+17

This diff is too big to show here.

test/golden/importless/flatpak.nixnew file+66

This diff is too big to show here.

test/golden/importless/flatpak.txtnew file+48

This diff is too big to show here.

test/golden/importless/flexget.nixnew file+100

This diff is too big to show here.

test/golden/importless/flexi-streams.nixnew file+29

This diff is too big to show here.

test/golden/importless/flexi-streams.txtnew file+15

This diff is too big to show here.

test/golden/importless/fluentd.nixnew file+58

This diff is too big to show here.

test/golden/importless/flutter.nixnew file+129

This diff is too big to show here.

test/golden/importless/fluxbox.nixnew file+25

This diff is too big to show here.

test/golden/importless/fluxbox.txtnew file+24

This diff is too big to show here.

test/golden/importless/fmod.nixnew file+45

This diff is too big to show here.

test/golden/importless/fontdir.nixnew file+48

This diff is too big to show here.

test/golden/importless/fontdir.txtnew file+14

This diff is too big to show here.

test/golden/importless/fontforge-fonttools.nixnew file+1

This diff is too big to show here.

test/golden/importless/fontforge-fonttools.txtnew file+1

This diff is too big to show here.

test/golden/importless/fonts.nixnew file+19

This diff is too big to show here.

test/golden/importless/fonts.txtnew file+11

This diff is too big to show here.

test/golden/importless/form-fiddle.nixnew file+29

This diff is too big to show here.

test/golden/importless/form-fiddle.txtnew file+15

This diff is too big to show here.

test/golden/importless/formats.nixnew file+109

This diff is too big to show here.

test/golden/importless/foundationdb.nixnew file+429

This diff is too big to show here.

test/golden/importless/fox-1.6.nixnew file+43

This diff is too big to show here.

test/golden/importless/fox-1.6.txtnew file+46

This diff is too big to show here.

test/golden/importless/fprintd.nixnew file+54

This diff is too big to show here.

test/golden/importless/fprot.nixnew file+79

This diff is too big to show here.

test/golden/importless/frab.nixnew file+222

This diff is too big to show here.

test/golden/importless/fractalart.nixnew file+36

This diff is too big to show here.

test/golden/importless/frameworkintegration.nixnew file+17

This diff is too big to show here.

test/golden/importless/frameworkintegration.txtnew file+26

This diff is too big to show here.

test/golden/importless/frameworks.nixnew file+127

This diff is too big to show here.

test/golden/importless/frameworks.txtnew file+161

This diff is too big to show here.

test/golden/importless/free.nixnew file+24

This diff is too big to show here.

test/golden/importless/free.txtnew file+24

This diff is too big to show here.

test/golden/importless/freefall.nixnew file+64

This diff is too big to show here.

test/golden/importless/freeform-attrsOf.nixnew file+3

This diff is too big to show here.

test/golden/importless/freeform-attrsOf.txtnew file+8

This diff is too big to show here.

test/golden/importless/freeform-lazyAttrsOf.nixnew file+3

This diff is too big to show here.

test/golden/importless/freeform-lazyAttrsOf.txtnew file+8

This diff is too big to show here.

test/golden/importless/freeform-nested.nixnew file+7

This diff is too big to show here.

test/golden/importless/freeform-nested.txtnew file+7

This diff is too big to show here.

test/golden/importless/freeform-str-dep-unstr.nixnew file+8

This diff is too big to show here.

test/golden/importless/freeform-str-dep-unstr.txtnew file+11

This diff is too big to show here.

test/golden/importless/freeform-unstr-dep-str.nixnew file+8

This diff is too big to show here.

test/golden/importless/freeform-unstr-dep-str.txtnew file+11

This diff is too big to show here.

test/golden/importless/freenet.nixnew file+64

This diff is too big to show here.

test/golden/importless/freeoffice.nixnew file+27

This diff is too big to show here.

test/golden/importless/freeoffice.txtnew file+15

This diff is too big to show here.

test/golden/importless/freepops.nixnew file+89

This diff is too big to show here.

test/golden/importless/freeradius.nixnew file+84

This diff is too big to show here.

test/golden/importless/freeswitch.nixnew file+105

This diff is too big to show here.

test/golden/importless/freetds.nixnew file+61

This diff is too big to show here.

test/golden/importless/freetds.txtnew file+27

This diff is too big to show here.

test/golden/importless/freicoin.nixnew file+41

This diff is too big to show here.

test/golden/importless/freicoin.txtnew file+40

This diff is too big to show here.

test/golden/importless/fritzbox-exporter-deps.nixnew file+93

This diff is too big to show here.

test/golden/importless/fritzbox-exporter-deps.txtnew file+4

This diff is too big to show here.

test/golden/importless/fritzbox-exporter.nixnew file+28

This diff is too big to show here.

test/golden/importless/fritzbox.nixnew file+38

This diff is too big to show here.

test/golden/importless/frog.nixnew file+54

This diff is too big to show here.

test/golden/importless/frogdata.nixnew file+30

This diff is too big to show here.

test/golden/importless/from-env.nixnew file+4

This diff is too big to show here.

test/golden/importless/frontend-params-submodule.nixnew file+64

This diff is too big to show here.

test/golden/importless/frontend.nixnew file+23

This diff is too big to show here.

test/golden/importless/frontends.nixnew file+29

This diff is too big to show here.

test/golden/importless/frontends.txtnew file+36

This diff is too big to show here.

test/golden/importless/frostwire-bin.nixnew file+31

This diff is too big to show here.

test/golden/importless/frostwire-bin.txtnew file+28

This diff is too big to show here.

test/golden/importless/fs.nixnew file+23

This diff is too big to show here.

test/golden/importless/fs.txtnew file+23

This diff is too big to show here.

test/golden/importless/fset.nixnew file+31

This diff is too big to show here.

test/golden/importless/fset.txtnew file+15

This diff is too big to show here.

test/golden/importless/fsm.nixnew file+22

This diff is too big to show here.

test/golden/importless/fsm.txtnew file+23

This diff is too big to show here.

test/golden/importless/fstrim.nixnew file+46

This diff is too big to show here.

test/golden/importless/fstrim.txtnew file+30

This diff is too big to show here.

test/golden/importless/full.nixnew file+30

This diff is too big to show here.

test/golden/importless/full.txtnew file+31

This diff is too big to show here.

test/golden/importless/functions.nixnew file+93

This diff is too big to show here.

test/golden/importless/fuse.nixnew file+37

This diff is too big to show here.

test/golden/importless/fuseki-binary.nixnew file+41

This diff is too big to show here.

test/golden/importless/fuseki-binary.txtnew file+33

This diff is too big to show here.

test/golden/importless/fusion-inventory.nixnew file+63

This diff is too big to show here.

test/golden/importless/fvwm.nixnew file+41

This diff is too big to show here.

test/golden/importless/fvwm.txtnew file+32

This diff is too big to show here.

test/golden/importless/fwupd.nixnew file+129

This diff is too big to show here.

test/golden/importless/gale.nixnew file+181

This diff is too big to show here.

test/golden/importless/game.nixnew file+23

This diff is too big to show here.

test/golden/importless/game.txtnew file+29

This diff is too big to show here.

test/golden/importless/games.nixnew file+59

This diff is too big to show here.

test/golden/importless/gammu-smsd.nixnew file+253

This diff is too big to show here.

test/golden/importless/gaps.nixnew file+33

This diff is too big to show here.

test/golden/importless/gaps.txtnew file+34

This diff is too big to show here.

test/golden/importless/garbage-pools.nixnew file+25

This diff is too big to show here.

test/golden/importless/garbage-pools.txtnew file+11

This diff is too big to show here.

test/golden/importless/garmindev.nixnew file+25

This diff is too big to show here.

test/golden/importless/garmindev.txtnew file+29

This diff is too big to show here.

test/golden/importless/gateone.nixnew file+59

This diff is too big to show here.

test/golden/importless/gateone.txtnew file+62

This diff is too big to show here.

test/golden/importless/gawk-with-extensions.nixnew file+12

This diff is too big to show here.

test/golden/importless/gawk-with-extensions.txtnew file+7

This diff is too big to show here.

test/golden/importless/gawkextlib.nixnew file+149

This diff is too big to show here.

test/golden/importless/gc.nixnew file+33

This diff is too big to show here.

test/golden/importless/gc.txtnew file+37

This diff is too big to show here.

test/golden/importless/gcab.nixnew file+5

This diff is too big to show here.

test/golden/importless/gcab.txtnew file+2

This diff is too big to show here.

test/golden/importless/gcc-support.nixnew file+31

This diff is too big to show here.

test/golden/importless/gcc-support.txtnew file+22

This diff is too big to show here.

test/golden/importless/gce-images.nixnew file+9

This diff is too big to show here.

test/golden/importless/gce-images.txtnew file+8

This diff is too big to show here.

test/golden/importless/gdal-1_11.nixnew file+66

This diff is too big to show here.

test/golden/importless/gdal-1_11.txtnew file+49

This diff is too big to show here.

test/golden/importless/gdk-pixbuf.nixnew file+45

This diff is too big to show here.

test/golden/importless/gdk-pixbuf.txtnew file+25

This diff is too big to show here.

test/golden/importless/gdomap.nixnew file+29

This diff is too big to show here.

test/golden/importless/gdomap.txtnew file+27

This diff is too big to show here.

test/golden/importless/geary.nixnew file+24

This diff is too big to show here.

test/golden/importless/geary.txtnew file+31

This diff is too big to show here.

test/golden/importless/gemset-beta.nixnew file+374

This diff is too big to show here.

test/golden/importless/gemset-beta.txtnew file+229

This diff is too big to show here.

test/golden/importless/gemset.nixnew file+998

This diff is too big to show here.

test/golden/importless/gemset.txtnew file+537

This diff is too big to show here.

test/golden/importless/gemset_libvirt.nixnew file+159

This diff is too big to show here.

test/golden/importless/gemset_libvirt.txtnew file+98

This diff is too big to show here.

test/golden/importless/generated-packages.nixnew file+1590

This diff is too big to show here.

test/golden/importless/generated.nixnew file+7353

This diff is too big to show here.

test/golden/importless/generations-dir.nixnew file+65

This diff is too big to show here.

test/golden/importless/generations-dir.txtnew file+45

This diff is too big to show here.

test/golden/importless/generatorrunner.nixnew file+27

This diff is too big to show here.

test/golden/importless/generatorrunner.txtnew file+31

This diff is too big to show here.

test/golden/importless/generators.nixnew file+291

This diff is too big to show here.

test/golden/importless/generic-builder.nixnew file+54

This diff is too big to show here.

test/golden/importless/generic-builder.txtnew file+36

This diff is too big to show here.

test/golden/importless/generic-stack-builder.nixnew file+78

This diff is too big to show here.

test/golden/importless/generic-stack-builder.txtnew file+45

This diff is too big to show here.

test/golden/importless/generic-updater.nixnew file+108

This diff is too big to show here.

test/golden/importless/generic-v3.nixnew file+60

This diff is too big to show here.

test/golden/importless/generic-v3.txtnew file+73

This diff is too big to show here.

test/golden/importless/generic.nixnew file+93

This diff is too big to show here.

test/golden/importless/generic.txtnew file+42

This diff is too big to show here.

test/golden/importless/genphrase.nixnew file+32

This diff is too big to show here.

test/golden/importless/genphrase.txtnew file+31

This diff is too big to show here.

test/golden/importless/geoclue2.nixnew file+268

This diff is too big to show here.

test/golden/importless/geogebra6.nixnew file+46

This diff is too big to show here.

test/golden/importless/geogebra6.txtnew file+35

This diff is too big to show here.

test/golden/importless/geoip-updater.nixnew file+306

This diff is too big to show here.

test/golden/importless/gerbil-crypto.nixnew file+27

This diff is too big to show here.

test/golden/importless/gerbil-crypto.txtnew file+43

This diff is too big to show here.

test/golden/importless/gerbil-ethereum.nixnew file+28

This diff is too big to show here.

test/golden/importless/gerbil-ethereum.txtnew file+44

This diff is too big to show here.

test/golden/importless/gerbil-persist.nixnew file+27

This diff is too big to show here.

test/golden/importless/gerbil-persist.txtnew file+43

This diff is too big to show here.

test/golden/importless/gerbil-poo.nixnew file+27

This diff is too big to show here.

test/golden/importless/gerbil-poo.txtnew file+42

This diff is too big to show here.

test/golden/importless/gerbil-utils.nixnew file+25

This diff is too big to show here.

test/golden/importless/gerbil-utils.txtnew file+36

This diff is too big to show here.

test/golden/importless/gerrit.nixnew file+239

This diff is too big to show here.

test/golden/importless/ghcjs-base.nixnew file+29

This diff is too big to show here.

test/golden/importless/ghcjs-base.txtnew file+44

This diff is too big to show here.

test/golden/importless/ghostscript.nixnew file+33

This diff is too big to show here.

test/golden/importless/ghostscript.txtnew file+12

This diff is too big to show here.

test/golden/importless/git-daemon.nixnew file+130

This diff is too big to show here.

test/golden/importless/git.nixnew file+41

This diff is too big to show here.

test/golden/importless/gitea.nixnew file+609

This diff is too big to show here.

test/golden/importless/gitit.nixnew file+724

This diff is too big to show here.

test/golden/importless/gitlab-ci-pipelines-exporter.nixnew file+26

This diff is too big to show here.

test/golden/importless/gitlab-ci-pipelines-exporter.txtnew file+27

This diff is too big to show here.

test/golden/importless/gitlab-ci-pipelines-exporter_deps.nixnew file+390

This diff is too big to show here.

test/golden/importless/gitlab-ci-pipelines-exporter_deps.txtnew file+4

This diff is too big to show here.

test/golden/importless/gitolite.nixnew file+232

This diff is too big to show here.

test/golden/importless/gitweb.nixnew file+94

This diff is too big to show here.

test/golden/importless/gjs.nixnew file+6

This diff is too big to show here.

test/golden/importless/gjs.txtnew file+6

This diff is too big to show here.

test/golden/importless/glfw.nixnew file+34

This diff is too big to show here.

test/golden/importless/glfw.txtnew file+31

This diff is too big to show here.

test/golden/importless/glib-networking.nixnew file+37

This diff is too big to show here.

test/golden/importless/glib-networking.txtnew file+26

This diff is too big to show here.

test/golden/importless/glib-testing.nixnew file+5

This diff is too big to show here.

test/golden/importless/glib-testing.txtnew file+6

This diff is too big to show here.

test/golden/importless/global-vars.nixnew file+25

This diff is too big to show here.

test/golden/importless/global-vars.txtnew file+11

This diff is too big to show here.

test/golden/importless/glusterfs.nixnew file+211

This diff is too big to show here.

test/golden/importless/gmusic.nixnew file+29

This diff is too big to show here.

test/golden/importless/gmusic.txtnew file+27

This diff is too big to show here.

test/golden/importless/gnome-initial-setup.nixnew file+90

This diff is too big to show here.

test/golden/importless/gnome-initial-setup.txtnew file+41

This diff is too big to show here.

test/golden/importless/gnome-keyring.nixnew file+53

This diff is too big to show here.

test/golden/importless/gnome-keyring.txtnew file+37

This diff is too big to show here.

test/golden/importless/gnome-online-accounts.nixnew file+43

This diff is too big to show here.

test/golden/importless/gnome-online-accounts.txtnew file+27

This diff is too big to show here.

test/golden/importless/gnome-online-miners.nixnew file+43

This diff is too big to show here.

test/golden/importless/gnome-online-miners.txtnew file+29

This diff is too big to show here.

test/golden/importless/gnome-photos.nixnew file+35

This diff is too big to show here.

test/golden/importless/gnome-photos.txtnew file+31

This diff is too big to show here.

test/golden/importless/gnome-remote-desktop.nixnew file+24

This diff is too big to show here.

test/golden/importless/gnome-remote-desktop.txtnew file+24

This diff is too big to show here.

test/golden/importless/gnome-user-share.nixnew file+40

This diff is too big to show here.

test/golden/importless/gnome-user-share.txtnew file+24

This diff is too big to show here.

test/golden/importless/gnome3.nixnew file+464

This diff is too big to show here.

test/golden/importless/gnu.nixnew file+46

This diff is too big to show here.

test/golden/importless/gnu.txtnew file+33

This diff is too big to show here.

test/golden/importless/gnunet.nixnew file+166

This diff is too big to show here.

test/golden/importless/gnupg.nixnew file+151

This diff is too big to show here.

test/golden/importless/go-ethereum.nixnew file+46

This diff is too big to show here.

test/golden/importless/go-ethereum.txtnew file+37

This diff is too big to show here.

test/golden/importless/go-neb.nixnew file+53

This diff is too big to show here.

test/golden/importless/go-shadowsocks2.nixnew file+30

This diff is too big to show here.

test/golden/importless/go-shadowsocks2.txtnew file+34

This diff is too big to show here.

test/golden/importless/go.d.plugin.nixnew file+31

This diff is too big to show here.

test/golden/importless/go.d.plugin.txtnew file+27

This diff is too big to show here.

test/golden/importless/goa-plugin.nixnew file+31

This diff is too big to show here.

test/golden/importless/goa-plugin.txtnew file+31

This diff is too big to show here.

test/golden/importless/gogoclient.nixnew file+85

This diff is too big to show here.

test/golden/importless/gogs.nixnew file+279

This diff is too big to show here.

test/golden/importless/gollum.nixnew file+118

This diff is too big to show here.

test/golden/importless/google_oslogin.nixnew file+68

This diff is too big to show here.

test/golden/importless/google_oslogin.txtnew file+45

This diff is too big to show here.

test/golden/importless/gotify-server.nixnew file+49

This diff is too big to show here.

test/golden/importless/gp2c.nixnew file+27

This diff is too big to show here.

test/golden/importless/gp2c.txtnew file+28

This diff is too big to show here.

test/golden/importless/gphoto2.nixnew file+30

This diff is too big to show here.

test/golden/importless/gphoto2.txtnew file+27

This diff is too big to show here.

test/golden/importless/gphotofs.nixnew file+23

This diff is too big to show here.

test/golden/importless/gphotofs.txtnew file+34

This diff is too big to show here.

test/golden/importless/gpio-utils.nixnew file+25

This diff is too big to show here.

test/golden/importless/gpio-utils.txtnew file+24

This diff is too big to show here.

test/golden/importless/gpm.nixnew file+57

This diff is too big to show here.

test/golden/importless/gppcscconnectionplugin.nixnew file+21

This diff is too big to show here.

test/golden/importless/gppcscconnectionplugin.txtnew file+30

This diff is too big to show here.

test/golden/importless/gpsd.nixnew file+115

This diff is too big to show here.

test/golden/importless/grafana-reporter.nixnew file+66

This diff is too big to show here.

test/golden/importless/grafana.nixnew file+559

This diff is too big to show here.

test/golden/importless/granatier.nixnew file+23

This diff is too big to show here.

test/golden/importless/granatier.txtnew file+28

This diff is too big to show here.

test/golden/importless/graphene.nixnew file+5

This diff is too big to show here.

test/golden/importless/graphene.txtnew file+2

This diff is too big to show here.

test/golden/importless/graphical.nixnew file+20

This diff is too big to show here.

test/golden/importless/graphical.txtnew file+13

This diff is too big to show here.

test/golden/importless/graphite2.nixnew file+27

This diff is too big to show here.

test/golden/importless/graphite2.txtnew file+32

This diff is too big to show here.

test/golden/importless/graphql.nixnew file+23

This diff is too big to show here.

test/golden/importless/graphql.txtnew file+23

This diff is too big to show here.

test/golden/importless/graphviz-2.0.nixnew file+41

This diff is too big to show here.

test/golden/importless/graphviz-2.0.txtnew file+37

This diff is too big to show here.

test/golden/importless/graphviz.nixnew file+29

This diff is too big to show here.

test/golden/importless/graphviz.txtnew file+26

This diff is too big to show here.

test/golden/importless/graylog.nixnew file+170

This diff is too big to show here.

test/golden/importless/greenclip.nixnew file+31

This diff is too big to show here.

test/golden/importless/greenclip.txtnew file+36

This diff is too big to show here.

test/golden/importless/grocy.nixnew file+172

This diff is too big to show here.

test/golden/importless/grow-partition.nixnew file+3

This diff is too big to show here.

test/golden/importless/grub1.patches.nixnew file+34

This diff is too big to show here.

test/golden/importless/grub1.patches.txtnew file+1

This diff is too big to show here.

test/golden/importless/grub2-theme.nixnew file+5

This diff is too big to show here.

test/golden/importless/grub2-theme.txtnew file+1

This diff is too big to show here.

test/golden/importless/gshhg.nixnew file+31

This diff is too big to show here.

test/golden/importless/gshhg.txtnew file+22

This diff is too big to show here.

test/golden/importless/gsignond.nixnew file+45

This diff is too big to show here.

test/golden/importless/gsl-1_16.nixnew file+43

This diff is too big to show here.

test/golden/importless/gsl-1_16.txtnew file+30

This diff is too big to show here.

test/golden/importless/gsm.nixnew file+39

This diff is too big to show here.

test/golden/importless/gsm.txtnew file+43

This diff is too big to show here.

test/golden/importless/gsmakeDerivation.nixnew file+19

This diff is too big to show here.

test/golden/importless/gstreamer.nixnew file+65

This diff is too big to show here.

test/golden/importless/gstreamer.txtnew file+49

This diff is too big to show here.

test/golden/importless/gtk-greeter.nixnew file+72

This diff is too big to show here.

test/golden/importless/gtk-greeter.txtnew file+43

This diff is too big to show here.

test/golden/importless/gtk-icon-cache.nixnew file+86

This diff is too big to show here.

test/golden/importless/gtk-icon-cache.txtnew file+16

This diff is too big to show here.

test/golden/importless/gtk.nixnew file+173

This diff is too big to show here.

test/golden/importless/gtk2.nixnew file+55

This diff is too big to show here.

test/golden/importless/gtk2.txtnew file+41

This diff is too big to show here.

test/golden/importless/gtk3.nixnew file+121

This diff is too big to show here.

test/golden/importless/gtkspell3.nixnew file+8

This diff is too big to show here.

test/golden/importless/gtkspell3.txtnew file+21

This diff is too big to show here.

test/golden/importless/gui.nixnew file+49

This diff is too big to show here.

test/golden/importless/gui.txtnew file+54

This diff is too big to show here.

test/golden/importless/guice.nixnew file+14

This diff is too big to show here.

test/golden/importless/gvpe.nixnew file+124

This diff is too big to show here.

test/golden/importless/gwenview.nixnew file+21

This diff is too big to show here.

test/golden/importless/gwenview.txtnew file+35

This diff is too big to show here.

test/golden/importless/hail.nixnew file+61

This diff is too big to show here.

test/golden/importless/haka.nixnew file+156

This diff is too big to show here.

test/golden/importless/hamster.nixnew file+15

This diff is too big to show here.

test/golden/importless/hamster.txtnew file+23

This diff is too big to show here.

test/golden/importless/hamt.nixnew file+26

This diff is too big to show here.

test/golden/importless/hamt.txtnew file+26

This diff is too big to show here.

test/golden/importless/hans.nixnew file+145

This diff is too big to show here.

test/golden/importless/haproxy-exporter.nixnew file+24

This diff is too big to show here.

test/golden/importless/haproxy.nixnew file+112

This diff is too big to show here.

test/golden/importless/hardened.nixnew file+112

This diff is too big to show here.

test/golden/importless/haveged.nixnew file+67

This diff is too big to show here.

test/golden/importless/haxe-packages.nixnew file+119

This diff is too big to show here.

test/golden/importless/hbase.nixnew file+127

This diff is too big to show here.

test/golden/importless/hdaps.nixnew file+23

This diff is too big to show here.

test/golden/importless/hdaps.txtnew file+18

This diff is too big to show here.

test/golden/importless/headerbar-gtk3.nixnew file+30

This diff is too big to show here.

test/golden/importless/headerbar-gtk3.txtnew file+39

This diff is too big to show here.

test/golden/importless/headers.nixnew file+11

This diff is too big to show here.

test/golden/importless/headers.txtnew file+7

This diff is too big to show here.

test/golden/importless/headless.nixnew file+25

This diff is too big to show here.

test/golden/importless/headless.txtnew file+17

This diff is too big to show here.

test/golden/importless/headphones.nixnew file+87

This diff is too big to show here.

test/golden/importless/heapster.nixnew file+57

This diff is too big to show here.

test/golden/importless/heartbeat.nixnew file+74

This diff is too big to show here.

test/golden/importless/heimdal.nixnew file+68

This diff is too big to show here.

test/golden/importless/hello-world-container.nixnew file+19

This diff is too big to show here.

test/golden/importless/hello-world-container.txtnew file+29

This diff is too big to show here.

test/golden/importless/helper.nixnew file+34

This diff is too big to show here.

test/golden/importless/helper.txtnew file+31

This diff is too big to show here.

test/golden/importless/helpers.nixnew file+11

This diff is too big to show here.

test/golden/importless/helpers.txtnew file+1

This diff is too big to show here.

test/golden/importless/herbstluftwm.nixnew file+38

This diff is too big to show here.

test/golden/importless/herbstluftwm.txtnew file+34

This diff is too big to show here.

test/golden/importless/heyefi.nixnew file+82

This diff is too big to show here.

test/golden/importless/hezarfen.nixnew file+22

This diff is too big to show here.

test/golden/importless/hezarfen.txtnew file+23

This diff is too big to show here.

test/golden/importless/hfaxd-default.nixnew file+10

This diff is too big to show here.

test/golden/importless/hfaxd-default.txtnew file+1

This diff is too big to show here.

test/golden/importless/hg.nixnew file+39

This diff is too big to show here.

test/golden/importless/hg.txtnew file+33

This diff is too big to show here.

test/golden/importless/hidepid.nixnew file+27

This diff is too big to show here.

test/golden/importless/hidepid.txtnew file+31

This diff is too big to show here.

test/golden/importless/hidpi.nixnew file+16

This diff is too big to show here.

test/golden/importless/hls-ghcide.nixnew file+58

This diff is too big to show here.

test/golden/importless/hls-ghcide.txtnew file+84

This diff is too big to show here.

test/golden/importless/hologram-agent.nixnew file+58

This diff is too big to show here.

test/golden/importless/hologram-server.nixnew file+130

This diff is too big to show here.

test/golden/importless/hoogle.nixnew file+76

This diff is too big to show here.

test/golden/importless/hostapd.nixnew file+218

This diff is too big to show here.

test/golden/importless/hound.nixnew file+125

This diff is too big to show here.

test/golden/importless/hpsa.nixnew file+61

This diff is too big to show here.

test/golden/importless/hpsa.txtnew file+45

This diff is too big to show here.

test/golden/importless/hrtime.nixnew file+26

This diff is too big to show here.

test/golden/importless/hrtime.txtnew file+26

This diff is too big to show here.

test/golden/importless/html.nixnew file+31

This diff is too big to show here.

test/golden/importless/html.txtnew file+28

This diff is too big to show here.

test/golden/importless/htpdate.nixnew file+80

This diff is too big to show here.

test/golden/importless/http-body.nixnew file+49

This diff is too big to show here.

test/golden/importless/http-body.txtnew file+37

This diff is too big to show here.

test/golden/importless/http-getter.nixnew file+23

This diff is too big to show here.

test/golden/importless/http-getter.txtnew file+24

This diff is too big to show here.

test/golden/importless/http.nixnew file+25

This diff is too big to show here.

test/golden/importless/http.txtnew file+29

This diff is too big to show here.

test/golden/importless/http4idris.nixnew file+25

This diff is too big to show here.

test/golden/importless/http4idris.txtnew file+25

This diff is too big to show here.

test/golden/importless/hu_dot_dwim_dot_asdf.nixnew file+26

This diff is too big to show here.

test/golden/importless/hu_dot_dwim_dot_asdf.txtnew file+11

This diff is too big to show here.

test/golden/importless/hu_dot_dwim_dot_stefil.nixnew file+32

This diff is too big to show here.

test/golden/importless/hu_dot_dwim_dot_stefil.txtnew file+16

This diff is too big to show here.

test/golden/importless/hunchentoot.nixnew file+53

This diff is too big to show here.

test/golden/importless/hunchentoot.txtnew file+34

This diff is too big to show here.

test/golden/importless/hyperkit.nixnew file+23

This diff is too big to show here.

test/golden/importless/hyperkit.txtnew file+37

This diff is too big to show here.

test/golden/importless/hyperkitty.nixnew file+45

This diff is too big to show here.

test/golden/importless/hyperv-guest.nixnew file+64

This diff is too big to show here.

test/golden/importless/hyperv-guest.txtnew file+36

This diff is too big to show here.

test/golden/importless/i18n.nixnew file+91

This diff is too big to show here.

test/golden/importless/i2p.nixnew file+34

This diff is too big to show here.

test/golden/importless/i2p.txtnew file+46

This diff is too big to show here.

test/golden/importless/i3ipc-glib.nixnew file+34

This diff is too big to show here.

test/golden/importless/i3ipc-glib.txtnew file+38

This diff is too big to show here.

test/golden/importless/iaia.nixnew file+25

This diff is too big to show here.

test/golden/importless/iaia.txtnew file+25

This diff is too big to show here.

test/golden/importless/ibus-qt.nixnew file+26

This diff is too big to show here.

test/golden/importless/ibus-qt.txtnew file+35

This diff is too big to show here.

test/golden/importless/ibus.nixnew file+16

This diff is too big to show here.

test/golden/importless/ibus.txtnew file+24

This diff is too big to show here.

test/golden/importless/icecast.nixnew file+130

This diff is too big to show here.

test/golden/importless/icewm.nixnew file+27

This diff is too big to show here.

test/golden/importless/icewm.txtnew file+24

This diff is too big to show here.

test/golden/importless/icingaweb2.nixnew file+244

This diff is too big to show here.

test/golden/importless/icons.nixnew file+42

This diff is too big to show here.

test/golden/importless/icons.txtnew file+27

This diff is too big to show here.

test/golden/importless/ide.nixnew file+43

This diff is too big to show here.

test/golden/importless/ide.txtnew file+39

This diff is too big to show here.

test/golden/importless/idle.nixnew file+38

This diff is too big to show here.

test/golden/importless/idle.txtnew file+41

This diff is too big to show here.

test/golden/importless/idna.nixnew file+26

This diff is too big to show here.

test/golden/importless/idna.txtnew file+14

This diff is too big to show here.

test/golden/importless/idris-wrapper.nixnew file+14

This diff is too big to show here.

test/golden/importless/idris-wrapper.txtnew file+17

This diff is too big to show here.

test/golden/importless/idrishighlighter.nixnew file+27

This diff is too big to show here.

test/golden/importless/idrishighlighter.txtnew file+27

This diff is too big to show here.

test/golden/importless/idrisscript.nixnew file+22

This diff is too big to show here.

test/golden/importless/idrisscript.txtnew file+23

This diff is too big to show here.

test/golden/importless/ieee-floats.nixnew file+28

This diff is too big to show here.

test/golden/importless/ieee-floats.txtnew file+12

This diff is too big to show here.

test/golden/importless/iftop.nixnew file+18

This diff is too big to show here.

test/golden/importless/iftop.txtnew file+18

This diff is too big to show here.

test/golden/importless/ihaskell.nixnew file+63

This diff is too big to show here.

test/golden/importless/iio.nixnew file+35

This diff is too big to show here.

test/golden/importless/iio.txtnew file+22

This diff is too big to show here.

test/golden/importless/illum.nixnew file+35

This diff is too big to show here.

test/golden/importless/illum.txtnew file+25

This diff is too big to show here.

test/golden/importless/imapfilter.nixnew file+27

This diff is too big to show here.

test/golden/importless/imapfilter.txtnew file+31

This diff is too big to show here.

test/golden/importless/impl.nixnew file+14

This diff is too big to show here.

test/golden/importless/impure-deps.nixnew file+256

This diff is too big to show here.

test/golden/importless/impure-deps.txtnew file+51

This diff is too big to show here.

test/golden/importless/imwheel.nixnew file+69

This diff is too big to show here.

test/golden/importless/incidenceeditor.nixnew file+20

This diff is too big to show here.

test/golden/importless/incidenceeditor.txtnew file+25

This diff is too big to show here.

test/golden/importless/incron.nixnew file+98

This diff is too big to show here.

test/golden/importless/indents.nixnew file+11

This diff is too big to show here.

test/golden/importless/indents.txtnew file+19

This diff is too big to show here.

test/golden/importless/infinoted.nixnew file+160

This diff is too big to show here.

test/golden/importless/infix.nixnew file+23

This diff is too big to show here.

test/golden/importless/influxdb.nixnew file+197

This diff is too big to show here.

test/golden/importless/info.nixnew file+23

This diff is too big to show here.

test/golden/importless/info.txtnew file+17

This diff is too big to show here.

test/golden/importless/infobar.nixnew file+34

This diff is too big to show here.

test/golden/importless/infobar.txtnew file+35

This diff is too big to show here.

test/golden/importless/init-script.nixnew file+51

This diff is too big to show here.

test/golden/importless/init-script.txtnew file+21

This diff is too big to show here.

test/golden/importless/initrd-network.nixnew file+148

This diff is too big to show here.

test/golden/importless/initrd-openvpn.nixnew file+81

This diff is too big to show here.

test/golden/importless/inject-bean.nixnew file+14

This diff is too big to show here.

test/golden/importless/inject-plexus.nixnew file+14

This diff is too big to show here.

test/golden/importless/install-crate.nixnew file+51

This diff is too big to show here.

test/golden/importless/install-crate.txtnew file+1

This diff is too big to show here.

test/golden/importless/integrations-core.nixnew file+91

This diff is too big to show here.

test/golden/importless/integrations-core.txtnew file+29

This diff is too big to show here.

test/golden/importless/intel-2200bg.nixnew file+30

This diff is too big to show here.

test/golden/importless/intel-2200bg.txtnew file+13

This diff is too big to show here.

test/golden/importless/intel-microcode.nixnew file+29

This diff is too big to show here.

test/golden/importless/intel-microcode.txtnew file+18

This diff is too big to show here.

test/golden/importless/intel.nixnew file+33

This diff is too big to show here.

test/golden/importless/intel.txtnew file+31

This diff is too big to show here.

test/golden/importless/interactivity-api.nixnew file+14

This diff is too big to show here.

test/golden/importless/interception-tools.nixnew file+61

This diff is too big to show here.

test/golden/importless/interpolation.nixnew file+47

This diff is too big to show here.

test/golden/importless/introspect-environment.nixnew file+26

This diff is too big to show here.

test/golden/importless/introspect-environment.txtnew file+11

This diff is too big to show here.

test/golden/importless/io.nixnew file+14

This diff is too big to show here.

test/golden/importless/iolib.nixnew file+46

This diff is too big to show here.

test/golden/importless/iolib.txtnew file+27

This diff is too big to show here.

test/golden/importless/iolib_dot_asdf.nixnew file+28

This diff is too big to show here.

test/golden/importless/iolib_dot_asdf.txtnew file+11

This diff is too big to show here.

test/golden/importless/iolib_dot_base.nixnew file+35

This diff is too big to show here.

test/golden/importless/iolib_dot_base.txtnew file+18

This diff is too big to show here.

test/golden/importless/iolib_dot_common-lisp.nixnew file+32

This diff is too big to show here.

test/golden/importless/iolib_dot_common-lisp.txtnew file+16

This diff is too big to show here.

test/golden/importless/iolib_dot_conf.nixnew file+30

This diff is too big to show here.

test/golden/importless/iolib_dot_conf.txtnew file+15

This diff is too big to show here.

test/golden/importless/iolib_dot_grovel.nixnew file+39

This diff is too big to show here.

test/golden/importless/iolib_dot_grovel.txtnew file+23

This diff is too big to show here.

test/golden/importless/iotop.nixnew file+17

This diff is too big to show here.

test/golden/importless/iotop.txtnew file+16

This diff is too big to show here.

test/golden/importless/ipadic.nixnew file+18

This diff is too big to show here.

test/golden/importless/ipadic.txtnew file+15

This diff is too big to show here.

test/golden/importless/iperf3.nixnew file+97

This diff is too big to show here.

test/golden/importless/ipfs.nixnew file+307

This diff is too big to show here.

test/golden/importless/ipkgparser.nixnew file+26

This diff is too big to show here.

test/golden/importless/ipkgparser.txtnew file+17

This diff is too big to show here.

test/golden/importless/iprange.nixnew file+18

This diff is too big to show here.

test/golden/importless/iprange.txtnew file+20

This diff is too big to show here.

test/golden/importless/iproute2.nixnew file+32

This diff is too big to show here.

test/golden/importless/iproute2.txtnew file+38

This diff is too big to show here.

test/golden/importless/ipxe.nixnew file+64

This diff is too big to show here.

test/golden/importless/iris.nixnew file+29

This diff is too big to show here.

test/golden/importless/irkerd.nixnew file+67

This diff is too big to show here.

test/golden/importless/ironclad.nixnew file+31

This diff is too big to show here.

test/golden/importless/ironclad.txtnew file+18

This diff is too big to show here.

test/golden/importless/irqbalance.nixnew file+24

This diff is too big to show here.

test/golden/importless/irqbalance.txtnew file+18

This diff is too big to show here.

test/golden/importless/iso-image.nixnew file+716

This diff is too big to show here.

test/golden/importless/iterate.nixnew file+28

This diff is too big to show here.

test/golden/importless/iterate.txtnew file+12

This diff is too big to show here.

test/golden/importless/iucode-tool.nixnew file+25

This diff is too big to show here.

test/golden/importless/iucode-tool.txtnew file+28

This diff is too big to show here.

test/golden/importless/iwd.nixnew file+29

This diff is too big to show here.

test/golden/importless/iwd.txtnew file+29

This diff is too big to show here.

test/golden/importless/ixf.nixnew file+34

This diff is too big to show here.

test/golden/importless/ixf.txtnew file+23

This diff is too big to show here.

test/golden/importless/jack.nixnew file+291

This diff is too big to show here.

test/golden/importless/jack1.nixnew file+39

This diff is too big to show here.

test/golden/importless/jackett.nixnew file+82

This diff is too big to show here.

test/golden/importless/janePackage.nixnew file+19

This diff is too big to show here.

test/golden/importless/janePackage.txtnew file+21

This diff is too big to show here.

test/golden/importless/janePackage_0_12.nixnew file+19

This diff is too big to show here.

test/golden/importless/janePackage_0_12.txtnew file+20

This diff is too big to show here.

test/golden/importless/janePackage_0_13.nixnew file+19

This diff is too big to show here.

test/golden/importless/janePackage_0_13.txtnew file+20

This diff is too big to show here.

test/golden/importless/java-boot-classpath-detector.nixnew file+14

This diff is too big to show here.

test/golden/importless/java-packages.nixnew file+315

This diff is too big to show here.

test/golden/importless/java-test.nixnew file+58

This diff is too big to show here.

test/golden/importless/java-test.txtnew file+21

This diff is too big to show here.

test/golden/importless/java.nixnew file+58

This diff is too big to show here.

test/golden/importless/java.txtnew file+20

This diff is too big to show here.

test/golden/importless/jdk-darwin-base.nixnew file+53

This diff is too big to show here.

test/golden/importless/jdk-darwin-base.txtnew file+33

This diff is too big to show here.

test/golden/importless/jdk-linux-base.nixnew file+192

This diff is too big to show here.

test/golden/importless/jdk11-linux.nixnew file+54

This diff is too big to show here.

test/golden/importless/jdk11-linux.txtnew file+25

This diff is too big to show here.

test/golden/importless/jdk14-linux.nixnew file+54

This diff is too big to show here.

test/golden/importless/jdk14-linux.txtnew file+25

This diff is too big to show here.

test/golden/importless/jellyfin.nixnew file+70

This diff is too big to show here.

test/golden/importless/jfs.nixnew file+19

This diff is too big to show here.

test/golden/importless/jgrpp.nixnew file+13

This diff is too big to show here.

test/golden/importless/jgrpp.txtnew file+7

This diff is too big to show here.

test/golden/importless/jheiling-extras.nixnew file+25

This diff is too big to show here.

test/golden/importless/jheiling-extras.txtnew file+25

This diff is too big to show here.

test/golden/importless/jheiling-js.nixnew file+27

This diff is too big to show here.

test/golden/importless/jheiling-js.txtnew file+27

This diff is too big to show here.

test/golden/importless/jicofo.nixnew file+152

This diff is too big to show here.

test/golden/importless/jira.nixnew file+204

This diff is too big to show here.

test/golden/importless/jitsi-meet.nixnew file+334

This diff is too big to show here.

test/golden/importless/jitsi-videobridge.nixnew file+276

This diff is too big to show here.

test/golden/importless/jmx-httpserver.nixnew file+35

This diff is too big to show here.

test/golden/importless/jmx-httpserver.txtnew file+32

This diff is too big to show here.

test/golden/importless/job-builder.nixnew file+205

This diff is too big to show here.

test/golden/importless/jonathan.nixnew file+42

This diff is too big to show here.

test/golden/importless/jonathan.txtnew file+29

This diff is too big to show here.

test/golden/importless/journalbeat.nixnew file+107

This diff is too big to show here.

test/golden/importless/journaldriver.nixnew file+112

This diff is too big to show here.

test/golden/importless/journalwatch.nixnew file+264

This diff is too big to show here.

test/golden/importless/js-build-tools.nixnew file+29

This diff is too big to show here.

test/golden/importless/js-build-tools.txtnew file+27

This diff is too big to show here.

test/golden/importless/js.nixnew file+26

This diff is too big to show here.

test/golden/importless/js.txtnew file+26

This diff is too big to show here.

test/golden/importless/json-exporter.nixnew file+32

This diff is too big to show here.

test/golden/importless/json-exporter.txtnew file+31

This diff is too big to show here.

test/golden/importless/json-exporter_deps.nixnew file+111

This diff is too big to show here.

test/golden/importless/json-exporter_deps.txtnew file+4

This diff is too big to show here.

test/golden/importless/json.nixnew file+35

This diff is too big to show here.

test/golden/importless/json.txtnew file+15

This diff is too big to show here.

test/golden/importless/jsr305.nixnew file+15

This diff is too big to show here.

test/golden/importless/jwm-settings-manager.nixnew file+44

This diff is too big to show here.

test/golden/importless/jwm-settings-manager.txtnew file+42

This diff is too big to show here.

test/golden/importless/jwm.nixnew file+25

This diff is too big to show here.

test/golden/importless/jwm.txtnew file+24

This diff is too big to show here.

test/golden/importless/k3b.nixnew file+48

This diff is too big to show here.

test/golden/importless/k3b.txtnew file+59

This diff is too big to show here.

test/golden/importless/kactivities-stats.nixnew file+14

This diff is too big to show here.

test/golden/importless/kactivities-stats.txtnew file+18

This diff is too big to show here.

test/golden/importless/kactivities.nixnew file+15

This diff is too big to show here.

test/golden/importless/kactivities.txtnew file+20

This diff is too big to show here.

test/golden/importless/kactivitymanagerd.nixnew file+15

This diff is too big to show here.

test/golden/importless/kactivitymanagerd.txtnew file+16

This diff is too big to show here.

test/golden/importless/kaddressbook.nixnew file+22

This diff is too big to show here.

test/golden/importless/kaddressbook.txtnew file+35

This diff is too big to show here.

test/golden/importless/kak-ansi.nixnew file+32

This diff is too big to show here.

test/golden/importless/kak-ansi.txtnew file+28

This diff is too big to show here.

test/golden/importless/kak-auto-pairs.nixnew file+24

This diff is too big to show here.

test/golden/importless/kak-auto-pairs.txtnew file+28

This diff is too big to show here.

test/golden/importless/kak-buffers.nixnew file+24

This diff is too big to show here.

test/golden/importless/kak-buffers.txtnew file+28

This diff is too big to show here.

test/golden/importless/kak-fzf.nixnew file+38

This diff is too big to show here.

test/golden/importless/kak-fzf.txtnew file+33

This diff is too big to show here.

test/golden/importless/kak-plumb.nixnew file+31

This diff is too big to show here.

test/golden/importless/kak-plumb.txtnew file+29

This diff is too big to show here.

test/golden/importless/kak-powerline.nixnew file+29

This diff is too big to show here.

test/golden/importless/kak-powerline.txtnew file+30

This diff is too big to show here.

test/golden/importless/kak-prelude.nixnew file+25

This diff is too big to show here.

test/golden/importless/kak-prelude.txtnew file+28

This diff is too big to show here.

test/golden/importless/kak-vertical-selection.nixnew file+24

This diff is too big to show here.

test/golden/importless/kak-vertical-selection.txtnew file+28

This diff is too big to show here.

test/golden/importless/kalarm.nixnew file+37

This diff is too big to show here.

test/golden/importless/kalarm.txtnew file+53

This diff is too big to show here.

test/golden/importless/kalarmcal.nixnew file+19

This diff is too big to show here.

test/golden/importless/kalarmcal.txtnew file+22

This diff is too big to show here.

test/golden/importless/kalzium.nixnew file+26

This diff is too big to show here.

test/golden/importless/kalzium.txtnew file+34

This diff is too big to show here.

test/golden/importless/kapacitor.nixnew file+191

This diff is too big to show here.

test/golden/importless/kapidox.nixnew file+10

This diff is too big to show here.

test/golden/importless/kapidox.txtnew file+13

This diff is too big to show here.

test/golden/importless/kapman.nixnew file+21

This diff is too big to show here.

test/golden/importless/kapman.txtnew file+29

This diff is too big to show here.

test/golden/importless/kapptemplate.nixnew file+24

This diff is too big to show here.

test/golden/importless/kapptemplate.txtnew file+29

This diff is too big to show here.

test/golden/importless/karchive.nixnew file+17

This diff is too big to show here.

test/golden/importless/karchive.txtnew file+18

This diff is too big to show here.

test/golden/importless/kate.nixnew file+36

This diff is too big to show here.

test/golden/importless/kate.txtnew file+45

This diff is too big to show here.

test/golden/importless/katomic.nixnew file+22

This diff is too big to show here.

test/golden/importless/katomic.txtnew file+30

This diff is too big to show here.

test/golden/importless/kbdlight.nixnew file+16

This diff is too big to show here.

test/golden/importless/kbdlight.txtnew file+17

This diff is too big to show here.

test/golden/importless/kbfs.nixnew file+118

This diff is too big to show here.

test/golden/importless/kblackbox.nixnew file+21

This diff is too big to show here.

test/golden/importless/kblackbox.txtnew file+29

This diff is too big to show here.

test/golden/importless/kblocks.nixnew file+21

This diff is too big to show here.

test/golden/importless/kblocks.txtnew file+29

This diff is too big to show here.

test/golden/importless/kbookmarks.nixnew file+17

This diff is too big to show here.

test/golden/importless/kbookmarks.txtnew file+23

This diff is too big to show here.

test/golden/importless/kbounce.nixnew file+22

This diff is too big to show here.

test/golden/importless/kbounce.txtnew file+30

This diff is too big to show here.

test/golden/importless/kbreakout.nixnew file+22

This diff is too big to show here.

test/golden/importless/kbreakout.txtnew file+20

This diff is too big to show here.

test/golden/importless/kcachegrind.nixnew file+16

This diff is too big to show here.

test/golden/importless/kcachegrind.txtnew file+26

This diff is too big to show here.

test/golden/importless/kcalc.nixnew file+19

This diff is too big to show here.

test/golden/importless/kcalc.txtnew file+28

This diff is too big to show here.

test/golden/importless/kcalendarcore.nixnew file+16

This diff is too big to show here.

test/golden/importless/kcalendarcore.txtnew file+14

This diff is too big to show here.

test/golden/importless/kcalutils.nixnew file+20

This diff is too big to show here.

test/golden/importless/kcalutils.txtnew file+28

This diff is too big to show here.

test/golden/importless/kcharselect.nixnew file+19

This diff is too big to show here.

test/golden/importless/kcharselect.txtnew file+27

This diff is too big to show here.

test/golden/importless/kcodecs.nixnew file+13

This diff is too big to show here.

test/golden/importless/kcodecs.txtnew file+17

This diff is too big to show here.

test/golden/importless/kcolorchooser.nixnew file+15

This diff is too big to show here.

test/golden/importless/kcolorchooser.txtnew file+20

This diff is too big to show here.

test/golden/importless/kcompletion.nixnew file+14

This diff is too big to show here.

test/golden/importless/kcompletion.txtnew file+18

This diff is too big to show here.

test/golden/importless/kconfig.nixnew file+12

This diff is too big to show here.

test/golden/importless/kconfig.txtnew file+15

This diff is too big to show here.

test/golden/importless/kcontacts.nixnew file+15

This diff is too big to show here.

test/golden/importless/kcontacts.txtnew file+18

This diff is too big to show here.

test/golden/importless/kcoreaddons.nixnew file+16

This diff is too big to show here.

test/golden/importless/kcoreaddons.txtnew file+16

This diff is too big to show here.

test/golden/importless/kcrash.nixnew file+14

This diff is too big to show here.

test/golden/importless/kcrash.txtnew file+18

This diff is too big to show here.

test/golden/importless/kdav.nixnew file+15

This diff is too big to show here.

test/golden/importless/kdav.txtnew file+22

This diff is too big to show here.

test/golden/importless/kdbusaddons.nixnew file+16

This diff is too big to show here.

test/golden/importless/kdbusaddons.txtnew file+16

This diff is too big to show here.

test/golden/importless/kde-cli-tools.nixnew file+28

This diff is too big to show here.

test/golden/importless/kde-cli-tools.txtnew file+27

This diff is too big to show here.

test/golden/importless/kdebugsettings.nixnew file+20

This diff is too big to show here.

test/golden/importless/kdebugsettings.txtnew file+27

This diff is too big to show here.

test/golden/importless/kdeclarative.nixnew file+16

This diff is too big to show here.

test/golden/importless/kdeclarative.txtnew file+24

This diff is too big to show here.

test/golden/importless/kdeconnect-kde.nixnew file+72

This diff is too big to show here.

test/golden/importless/kdeconnect-kde.txtnew file+46

This diff is too big to show here.

test/golden/importless/kdecoration.nixnew file+12

This diff is too big to show here.

test/golden/importless/kdecoration.txtnew file+15

This diff is too big to show here.

test/golden/importless/kded.nixnew file+16

This diff is too big to show here.

test/golden/importless/kded.txtnew file+23

This diff is too big to show here.

test/golden/importless/kdegraphics-mobipocket.nixnew file+16

This diff is too big to show here.

test/golden/importless/kdegraphics-mobipocket.txtnew file+19

This diff is too big to show here.

test/golden/importless/kdegraphics-thumbnailers.nixnew file+14

This diff is too big to show here.

test/golden/importless/kdegraphics-thumbnailers.txtnew file+22

This diff is too big to show here.

test/golden/importless/kdenetwork-filesharing.nixnew file+15

This diff is too big to show here.

test/golden/importless/kdenetwork-filesharing.txtnew file+24

This diff is too big to show here.

test/golden/importless/kdenlive.nixnew file+104

This diff is too big to show here.

test/golden/importless/kdenlive.txtnew file+50

This diff is too big to show here.

test/golden/importless/kdeplasma-addons.nixnew file+18

This diff is too big to show here.

test/golden/importless/kdeplasma-addons.txtnew file+27

This diff is too big to show here.

test/golden/importless/kdesignerplugin.nixnew file+17

This diff is too big to show here.

test/golden/importless/kdesignerplugin.txtnew file+27

This diff is too big to show here.

test/golden/importless/kdev-php.nixnew file+22

This diff is too big to show here.

test/golden/importless/kdev-php.txtnew file+34

This diff is too big to show here.

test/golden/importless/kdev-python.nixnew file+26

This diff is too big to show here.

test/golden/importless/kdev-python.txtnew file+35

This diff is too big to show here.

test/golden/importless/kdevelop-pg-qt.nixnew file+31

This diff is too big to show here.

test/golden/importless/kdevelop-pg-qt.txtnew file+32

This diff is too big to show here.

test/golden/importless/kdevelop.nixnew file+73

This diff is too big to show here.

test/golden/importless/kdevelop.txtnew file+76

This diff is too big to show here.

test/golden/importless/kdewebkit.nixnew file+14

This diff is too big to show here.

test/golden/importless/kdewebkit.txtnew file+18

This diff is too big to show here.

test/golden/importless/kdf.nixnew file+15

This diff is too big to show here.

test/golden/importless/kdf.txtnew file+24

This diff is too big to show here.

test/golden/importless/kdialog.nixnew file+18

This diff is too big to show here.

test/golden/importless/kdialog.txtnew file+22

This diff is too big to show here.

test/golden/importless/kdiamond.nixnew file+23

This diff is too big to show here.

test/golden/importless/kdiamond.txtnew file+31

This diff is too big to show here.

test/golden/importless/kdnssd.nixnew file+17

This diff is too big to show here.

test/golden/importless/kdnssd.txtnew file+17

This diff is too big to show here.

test/golden/importless/keditbookmarks.nixnew file+17

This diff is too big to show here.

test/golden/importless/keditbookmarks.txtnew file+27

This diff is too big to show here.

test/golden/importless/kemoticons.nixnew file+13

This diff is too big to show here.

test/golden/importless/kemoticons.txtnew file+17

This diff is too big to show here.

test/golden/importless/kernel-options.nixnew file+60

This diff is too big to show here.

test/golden/importless/kernel.nixnew file+335

This diff is too big to show here.

test/golden/importless/kernel_config.nixnew file+137

This diff is too big to show here.

test/golden/importless/kexec.nixnew file+32

This diff is too big to show here.

test/golden/importless/kexec.txtnew file+31

This diff is too big to show here.

test/golden/importless/keybase.nixnew file+47

This diff is too big to show here.

test/golden/importless/keybase.txtnew file+37

This diff is too big to show here.

test/golden/importless/keylight-exporter.nixnew file+26

This diff is too big to show here.

test/golden/importless/keylight-exporter.txtnew file+30

This diff is too big to show here.

test/golden/importless/keylight.nixnew file+19

This diff is too big to show here.

test/golden/importless/keylight.txtnew file+8

This diff is too big to show here.

test/golden/importless/keymaps.nixnew file+36

This diff is too big to show here.

test/golden/importless/kfind.nixnew file+17

This diff is too big to show here.

test/golden/importless/kfind.txtnew file+24

This diff is too big to show here.

test/golden/importless/kfloppy.nixnew file+20

This diff is too big to show here.

test/golden/importless/kfloppy.txtnew file+28

This diff is too big to show here.

test/golden/importless/kgamma5.nixnew file+11

This diff is too big to show here.

test/golden/importless/kgamma5.txtnew file+12

This diff is too big to show here.

test/golden/importless/kgeography.nixnew file+15

This diff is too big to show here.

test/golden/importless/kgeography.txtnew file+19

This diff is too big to show here.

test/golden/importless/kget.nixnew file+22

This diff is too big to show here.

test/golden/importless/kget.txtnew file+32

This diff is too big to show here.

test/golden/importless/kglobalaccel.nixnew file+16

This diff is too big to show here.

test/golden/importless/kglobalaccel.txtnew file+20

This diff is too big to show here.

test/golden/importless/kgpg.nixnew file+24

This diff is too big to show here.

test/golden/importless/kgpg.txtnew file+39

This diff is too big to show here.

test/golden/importless/kguiaddons.nixnew file+17

This diff is too big to show here.

test/golden/importless/kguiaddons.txtnew file+16

This diff is too big to show here.

test/golden/importless/khelpcenter.nixnew file+15

This diff is too big to show here.

test/golden/importless/khelpcenter.txtnew file+18

This diff is too big to show here.

test/golden/importless/kholidays.nixnew file+16

This diff is too big to show here.

test/golden/importless/kholidays.txtnew file+24

This diff is too big to show here.

test/golden/importless/khotkeys.nixnew file+17

This diff is too big to show here.

test/golden/importless/khotkeys.txtnew file+24

This diff is too big to show here.

test/golden/importless/khtml.nixnew file+19

This diff is too big to show here.

test/golden/importless/khtml.txtnew file+33

This diff is too big to show here.

test/golden/importless/ki18n.nixnew file+16

This diff is too big to show here.

test/golden/importless/ki18n.txtnew file+18

This diff is too big to show here.

test/golden/importless/kibana.nixnew file+208

This diff is too big to show here.

test/golden/importless/kidentitymanagement.nixnew file+20

This diff is too big to show here.

test/golden/importless/kidentitymanagement.txtnew file+29

This diff is too big to show here.

test/golden/importless/kidletime.nixnew file+16

This diff is too big to show here.

test/golden/importless/kidletime.txtnew file+15

This diff is too big to show here.

test/golden/importless/kig.nixnew file+19

This diff is too big to show here.

test/golden/importless/kig.txtnew file+21

This diff is too big to show here.

test/golden/importless/kigo.nixnew file+22

This diff is too big to show here.

test/golden/importless/kigo.txtnew file+30

This diff is too big to show here.

test/golden/importless/killbots.nixnew file+21

This diff is too big to show here.

test/golden/importless/killbots.txtnew file+29

This diff is too big to show here.

test/golden/importless/kimageformats.nixnew file+16

This diff is too big to show here.

test/golden/importless/kimageformats.txtnew file+18

This diff is too big to show here.

test/golden/importless/kimap.nixnew file+17

This diff is too big to show here.

test/golden/importless/kimap.txtnew file+21

This diff is too big to show here.

test/golden/importless/kinfocenter.nixnew file+18

This diff is too big to show here.

test/golden/importless/kinfocenter.txtnew file+28

This diff is too big to show here.

test/golden/importless/kio-extras.nixnew file+23

This diff is too big to show here.

test/golden/importless/kio-extras.txtnew file+49

This diff is too big to show here.

test/golden/importless/kipi-plugins.nixnew file+23

This diff is too big to show here.

test/golden/importless/kipi-plugins.txtnew file+34

This diff is too big to show here.

test/golden/importless/kippo.nixnew file+117

This diff is too big to show here.

test/golden/importless/kirigami2.nixnew file+11

This diff is too big to show here.

test/golden/importless/kirigami2.txtnew file+15

This diff is too big to show here.

test/golden/importless/kitemmodels.nixnew file+16

This diff is too big to show here.

test/golden/importless/kitemmodels.txtnew file+14

This diff is too big to show here.

test/golden/importless/kitemviews.nixnew file+17

This diff is too big to show here.

test/golden/importless/kitemviews.txtnew file+16

This diff is too big to show here.

test/golden/importless/kitinerary.nixnew file+23

This diff is too big to show here.

test/golden/importless/kitinerary.txtnew file+27

This diff is too big to show here.

test/golden/importless/kjobwidgets.nixnew file+12

This diff is too big to show here.

test/golden/importless/kjobwidgets.txtnew file+16

This diff is too big to show here.

test/golden/importless/kjs.nixnew file+12

This diff is too big to show here.

test/golden/importless/kjs.txtnew file+15

This diff is too big to show here.

test/golden/importless/kjsembed.nixnew file+13

This diff is too big to show here.

test/golden/importless/kjsembed.txtnew file+18

This diff is too big to show here.

test/golden/importless/kldap.nixnew file+17

This diff is too big to show here.

test/golden/importless/kldap.txtnew file+21

This diff is too big to show here.

test/golden/importless/kleopatra.nixnew file+19

This diff is too big to show here.

test/golden/importless/kleopatra.txtnew file+26

This diff is too big to show here.

test/golden/importless/klettres.nixnew file+22

This diff is too big to show here.

test/golden/importless/klettres.txtnew file+30

This diff is too big to show here.

test/golden/importless/klines.nixnew file+21

This diff is too big to show here.

test/golden/importless/klines.txtnew file+29

This diff is too big to show here.

test/golden/importless/klogd.nixnew file+37

This diff is too big to show here.

test/golden/importless/klogd.txtnew file+33

This diff is too big to show here.

test/golden/importless/kmag.nixnew file+20

This diff is too big to show here.

test/golden/importless/kmag.txtnew file+28

This diff is too big to show here.

test/golden/importless/kmahjongg.nixnew file+19

This diff is too big to show here.

test/golden/importless/kmahjongg.txtnew file+22

This diff is too big to show here.

test/golden/importless/kmail-account-wizard.nixnew file+21

This diff is too big to show here.

test/golden/importless/kmail-account-wizard.txtnew file+33

This diff is too big to show here.

test/golden/importless/kmail.nixnew file+30

This diff is too big to show here.

test/golden/importless/kmail.txtnew file+56

This diff is too big to show here.

test/golden/importless/kmailtransport.nixnew file+19

This diff is too big to show here.

test/golden/importless/kmailtransport.txtnew file+28

This diff is too big to show here.

test/golden/importless/kmbox.nixnew file+16

This diff is too big to show here.

test/golden/importless/kmbox.txtnew file+23

This diff is too big to show here.

test/golden/importless/kmediaplayer.nixnew file+12

This diff is too big to show here.

test/golden/importless/kmediaplayer.txtnew file+14

This diff is too big to show here.

test/golden/importless/kmenuedit.nixnew file+14

This diff is too big to show here.

test/golden/importless/kmenuedit.txtnew file+15

This diff is too big to show here.

test/golden/importless/kmime.nixnew file+17

This diff is too big to show here.

test/golden/importless/kmime.txtnew file+22

This diff is too big to show here.

test/golden/importless/kmines.nixnew file+23

This diff is too big to show here.

test/golden/importless/kmines.txtnew file+31

This diff is too big to show here.

test/golden/importless/kmix.nixnew file+20

This diff is too big to show here.

test/golden/importless/kmix.txtnew file+29

This diff is too big to show here.

test/golden/importless/kmod.nixnew file+43

This diff is too big to show here.

test/golden/importless/kmod.txtnew file+39

This diff is too big to show here.

test/golden/importless/kmplot.nixnew file+15

This diff is too big to show here.

test/golden/importless/kmplot.txtnew file+25

This diff is too big to show here.

test/golden/importless/kmrcl.nixnew file+24

This diff is too big to show here.

test/golden/importless/kmrcl.txtnew file+11

This diff is too big to show here.

test/golden/importless/kmscon.nixnew file+100

This diff is too big to show here.

test/golden/importless/knavalbattle.nixnew file+22

This diff is too big to show here.

test/golden/importless/knavalbattle.txtnew file+30

This diff is too big to show here.

test/golden/importless/knetwalk.nixnew file+21

This diff is too big to show here.

test/golden/importless/knetwalk.txtnew file+29

This diff is too big to show here.

test/golden/importless/knewstuff.nixnew file+25

This diff is too big to show here.

test/golden/importless/knewstuff.txtnew file+32

This diff is too big to show here.

test/golden/importless/knights.nixnew file+23

This diff is too big to show here.

test/golden/importless/knights.txtnew file+31

This diff is too big to show here.

test/golden/importless/knot.nixnew file+117

This diff is too big to show here.

test/golden/importless/knotes.nixnew file+29

This diff is too big to show here.

test/golden/importless/knotes.txtnew file+40

This diff is too big to show here.

test/golden/importless/knotifications.nixnew file+16

This diff is too big to show here.

test/golden/importless/knotifications.txtnew file+20

This diff is too big to show here.

test/golden/importless/knotifyconfig.nixnew file+14

This diff is too big to show here.

test/golden/importless/knotifyconfig.txtnew file+20

This diff is too big to show here.

test/golden/importless/kodi-advanced-launchers.nixnew file+40

This diff is too big to show here.

test/golden/importless/kodi.nixnew file+31

This diff is too big to show here.

test/golden/importless/kodi.txtnew file+28

This diff is too big to show here.

test/golden/importless/kolf.nixnew file+16

This diff is too big to show here.

test/golden/importless/kolf.txtnew file+22

This diff is too big to show here.

test/golden/importless/kollision.nixnew file+21

This diff is too big to show here.

test/golden/importless/kollision.txtnew file+29

This diff is too big to show here.

test/golden/importless/kolourpaint.nixnew file+17

This diff is too big to show here.

test/golden/importless/kolourpaint.txtnew file+20

This diff is too big to show here.

test/golden/importless/kompare.nixnew file+15

This diff is too big to show here.

test/golden/importless/kompare.txtnew file+19

This diff is too big to show here.

test/golden/importless/konqueror.nixnew file+28

This diff is too big to show here.

test/golden/importless/konqueror.txtnew file+23

This diff is too big to show here.

test/golden/importless/konquest.nixnew file+18

This diff is too big to show here.

test/golden/importless/konquest.txtnew file+21

This diff is too big to show here.

test/golden/importless/konsole.nixnew file+24

This diff is too big to show here.

test/golden/importless/konsole.txtnew file+45

This diff is too big to show here.

test/golden/importless/kontact.nixnew file+23

This diff is too big to show here.

test/golden/importless/kontact.txtnew file+28

This diff is too big to show here.

test/golden/importless/kontactinterface.nixnew file+17

This diff is too big to show here.

test/golden/importless/kontactinterface.txtnew file+23

This diff is too big to show here.

test/golden/importless/korganizer.nixnew file+29

This diff is too big to show here.

test/golden/importless/korganizer.txtnew file+35

This diff is too big to show here.

test/golden/importless/kparts.nixnew file+17

This diff is too big to show here.

test/golden/importless/kparts.txtnew file+24

This diff is too big to show here.

test/golden/importless/kpat.nixnew file+25

This diff is too big to show here.

test/golden/importless/kpat.txtnew file+23

This diff is too big to show here.

test/golden/importless/kpeople.nixnew file+16

This diff is too big to show here.

test/golden/importless/kpeople.txtnew file+20

This diff is too big to show here.

test/golden/importless/kpimtextedit.nixnew file+23

This diff is too big to show here.

test/golden/importless/kpimtextedit.txtnew file+37

This diff is too big to show here.

test/golden/importless/kpkpass.nixnew file+16

This diff is too big to show here.

test/golden/importless/kpkpass.txtnew file+23

This diff is too big to show here.

test/golden/importless/kplotting.nixnew file+14

This diff is too big to show here.

test/golden/importless/kplotting.txtnew file+15

This diff is too big to show here.

test/golden/importless/kpty.nixnew file+9

This diff is too big to show here.

test/golden/importless/kpty.txtnew file+16

This diff is too big to show here.

test/golden/importless/kqtquickcharts.nixnew file+15

This diff is too big to show here.

test/golden/importless/kqtquickcharts.txtnew file+21

This diff is too big to show here.

test/golden/importless/kquickcharts.nixnew file+15

This diff is too big to show here.

test/golden/importless/kquickcharts.txtnew file+14

This diff is too big to show here.

test/golden/importless/krb5.nixnew file+97

This diff is too big to show here.

test/golden/importless/krdc.nixnew file+25

This diff is too big to show here.

test/golden/importless/krdc.txtnew file+36

This diff is too big to show here.

test/golden/importless/kreversi.nixnew file+19

This diff is too big to show here.

test/golden/importless/kreversi.txtnew file+27

This diff is too big to show here.

test/golden/importless/krfb.nixnew file+16

This diff is too big to show here.

test/golden/importless/krfb.txtnew file+26

This diff is too big to show here.

test/golden/importless/krohnkite.nixnew file+39

This diff is too big to show here.

test/golden/importless/krohnkite.txtnew file+35

This diff is too big to show here.

test/golden/importless/kross.nixnew file+14

This diff is too big to show here.

test/golden/importless/kross.txtnew file+25

This diff is too big to show here.

test/golden/importless/kruler.nixnew file+17

This diff is too big to show here.

test/golden/importless/kruler.txtnew file+22

This diff is too big to show here.

test/golden/importless/krunner.nixnew file+19

This diff is too big to show here.

test/golden/importless/krunner.txtnew file+25

This diff is too big to show here.

test/golden/importless/kscreen.nixnew file+17

This diff is too big to show here.

test/golden/importless/kscreen.txtnew file+21

This diff is too big to show here.

test/golden/importless/kscreenlocker.nixnew file+17

This diff is too big to show here.

test/golden/importless/kscreenlocker.txtnew file+25

This diff is too big to show here.

test/golden/importless/kshisen.nixnew file+22

This diff is too big to show here.

test/golden/importless/kshisen.txtnew file+30

This diff is too big to show here.

test/golden/importless/kspaceduel.nixnew file+22

This diff is too big to show here.

test/golden/importless/kspaceduel.txtnew file+20

This diff is too big to show here.

test/golden/importless/ksquares.nixnew file+22

This diff is too big to show here.

test/golden/importless/ksquares.txtnew file+30

This diff is too big to show here.

test/golden/importless/ksshaskpass.nixnew file+11

This diff is too big to show here.

test/golden/importless/ksshaskpass.txtnew file+12

This diff is too big to show here.

test/golden/importless/ksudoku.nixnew file+18

This diff is too big to show here.

test/golden/importless/ksudoku.txtnew file+21

This diff is too big to show here.

test/golden/importless/ksysguard.nixnew file+16

This diff is too big to show here.

test/golden/importless/ksysguard.txtnew file+18

This diff is too big to show here.

test/golden/importless/ksystemlog.nixnew file+17

This diff is too big to show here.

test/golden/importless/ksystemlog.txtnew file+22

This diff is too big to show here.

test/golden/importless/kteatime.nixnew file+23

This diff is too big to show here.

test/golden/importless/kteatime.txtnew file+31

This diff is too big to show here.

test/golden/importless/ktexteditor.nixnew file+19

This diff is too big to show here.

test/golden/importless/ktexteditor.txtnew file+28

This diff is too big to show here.

test/golden/importless/ktextwidgets.nixnew file+16

This diff is too big to show here.

test/golden/importless/ktextwidgets.txtnew file+23

This diff is too big to show here.

test/golden/importless/ktimer.nixnew file+20

This diff is too big to show here.

test/golden/importless/ktimer.txtnew file+28

This diff is too big to show here.

test/golden/importless/ktnef.nixnew file+18

This diff is too big to show here.

test/golden/importless/ktnef.txtnew file+24

This diff is too big to show here.

test/golden/importless/ktouch.nixnew file+28

This diff is too big to show here.

test/golden/importless/ktouch.txtnew file+42

This diff is too big to show here.

test/golden/importless/kturtle.nixnew file+21

This diff is too big to show here.

test/golden/importless/kturtle.txtnew file+29

This diff is too big to show here.

test/golden/importless/kunitconversion.nixnew file+9

This diff is too big to show here.

test/golden/importless/kunitconversion.txtnew file+15

This diff is too big to show here.

test/golden/importless/kvm-deps.nixnew file+21

This diff is too big to show here.

test/golden/importless/kvm-deps.txtnew file+4

This diff is too big to show here.

test/golden/importless/kvm.nixnew file+28

This diff is too big to show here.

test/golden/importless/kvm.txtnew file+33

This diff is too big to show here.

test/golden/importless/kvm2.nixnew file+27

This diff is too big to show here.

test/golden/importless/kvm2.txtnew file+39

This diff is too big to show here.

test/golden/importless/kvmgt.nixnew file+86

This diff is too big to show here.

test/golden/importless/kwallet-pam.nixnew file+21

This diff is too big to show here.

test/golden/importless/kwallet-pam.txtnew file+19

This diff is too big to show here.

test/golden/importless/kwallet.nixnew file+18

This diff is too big to show here.

test/golden/importless/kwallet.txtnew file+27

This diff is too big to show here.

test/golden/importless/kwalletmanager.nixnew file+26

This diff is too big to show here.

test/golden/importless/kwalletmanager.txtnew file+26

This diff is too big to show here.

test/golden/importless/kwave.nixnew file+37

This diff is too big to show here.

test/golden/importless/kwave.txtnew file+44

This diff is too big to show here.

test/golden/importless/kwayland-integration.nixnew file+11

This diff is too big to show here.

test/golden/importless/kwayland-integration.txtnew file+11

This diff is too big to show here.

test/golden/importless/kwayland.nixnew file+17

This diff is too big to show here.

test/golden/importless/kwayland.txtnew file+19

This diff is too big to show here.

test/golden/importless/kwidgetsaddons.nixnew file+17

This diff is too big to show here.

test/golden/importless/kwidgetsaddons.txtnew file+16

This diff is too big to show here.

test/golden/importless/kwrited.nixnew file+11

This diff is too big to show here.

test/golden/importless/kwrited.txtnew file+12

This diff is too big to show here.

test/golden/importless/kxmlgui.nixnew file+17

This diff is too big to show here.

test/golden/importless/kxmlgui.txtnew file+25

This diff is too big to show here.

test/golden/importless/kxmlrpcclient.nixnew file+10

This diff is too big to show here.

test/golden/importless/kxmlrpcclient.txtnew file+16

This diff is too big to show here.

test/golden/importless/l10ns.nixnew file+66

This diff is too big to show here.

test/golden/importless/label.nixnew file+72

This diff is too big to show here.

test/golden/importless/labs_consol_de.nixnew file+77

This diff is too big to show here.

test/golden/importless/labs_consol_de.txtnew file+38

This diff is too big to show here.

test/golden/importless/lack-component.nixnew file+34

This diff is too big to show here.

test/golden/importless/lack-component.txtnew file+11

This diff is too big to show here.

test/golden/importless/lack-middleware-backtrace.nixnew file+34

This diff is too big to show here.

test/golden/importless/lack-middleware-backtrace.txtnew file+11

This diff is too big to show here.

test/golden/importless/lack-util.nixnew file+38

This diff is too big to show here.

test/golden/importless/lack-util.txtnew file+17

This diff is too big to show here.

test/golden/importless/lack.nixnew file+41

This diff is too big to show here.

test/golden/importless/lack.txtnew file+19

This diff is too big to show here.

test/golden/importless/ladspah.nixnew file+26

This diff is too big to show here.

test/golden/importless/ladspah.txtnew file+25

This diff is too big to show here.

test/golden/importless/lambdabot.nixnew file+82

This diff is too big to show here.

test/golden/importless/languages.nixnew file+289

This diff is too big to show here.

test/golden/importless/lastfm.nixnew file+38

This diff is too big to show here.

test/golden/importless/lastfm.txtnew file+39

This diff is too big to show here.

test/golden/importless/latest.nixnew file+160

This diff is too big to show here.

test/golden/importless/layout-manager.nixnew file+39

This diff is too big to show here.

test/golden/importless/layout-manager.txtnew file+39

This diff is too big to show here.

test/golden/importless/lazarus.nixnew file+53

This diff is too big to show here.

test/golden/importless/lazarus.txtnew file+45

This diff is too big to show here.

test/golden/importless/lazy-pack.nixnew file+48

This diff is too big to show here.

test/golden/importless/lcd.nixnew file+172

This diff is too big to show here.

test/golden/importless/ldap3.nixnew file+17

This diff is too big to show here.

test/golden/importless/leaps.nixnew file+62

This diff is too big to show here.

test/golden/importless/ledger.nixnew file+14

This diff is too big to show here.

test/golden/importless/ledger.txtnew file+12

This diff is too big to show here.

test/golden/importless/leftwm.nixnew file+25

This diff is too big to show here.

test/golden/importless/leftwm.txtnew file+24

This diff is too big to show here.

test/golden/importless/legacy.nixnew file+43

This diff is too big to show here.

test/golden/importless/legacy.txtnew file+33

This diff is too big to show here.

test/golden/importless/lens.nixnew file+25

This diff is too big to show here.

test/golden/importless/lens.txtnew file+25

This diff is too big to show here.

test/golden/importless/less.nixnew file+131

This diff is too big to show here.

test/golden/importless/let-plus.nixnew file+29

This diff is too big to show here.

test/golden/importless/let-plus.txtnew file+17

This diff is too big to show here.

test/golden/importless/lev.nixnew file+28

This diff is too big to show here.

test/golden/importless/lev.txtnew file+17

This diff is too big to show here.

test/golden/importless/lfarm-client.nixnew file+41

This diff is too big to show here.

test/golden/importless/lfarm-client.txtnew file+22

This diff is too big to show here.

test/golden/importless/lfarm-common.nixnew file+41

This diff is too big to show here.

test/golden/importless/lfarm-common.txtnew file+20

This diff is too big to show here.

test/golden/importless/lfarm-server.nixnew file+40

This diff is too big to show here.

test/golden/importless/lfarm-server.txtnew file+21

This diff is too big to show here.

test/golden/importless/lfarm-ssl.nixnew file+42

This diff is too big to show here.

test/golden/importless/lfarm-ssl.txtnew file+26

This diff is too big to show here.

test/golden/importless/lgc.nixnew file+52

This diff is too big to show here.

test/golden/importless/lgc.txtnew file+29

This diff is too big to show here.

test/golden/importless/lib.nixnew file+33

This diff is too big to show here.

test/golden/importless/libarcus.nixnew file+33

This diff is too big to show here.

test/golden/importless/libarcus.txtnew file+37

This diff is too big to show here.

test/golden/importless/libbitcoin-client.nixnew file+38

This diff is too big to show here.

test/golden/importless/libbitcoin-client.txtnew file+36

This diff is too big to show here.

test/golden/importless/libbitcoin-explorer.nixnew file+39

This diff is too big to show here.

test/golden/importless/libbitcoin-explorer.txtnew file+37

This diff is too big to show here.

test/golden/importless/libbitcoin-network.nixnew file+38

This diff is too big to show here.

test/golden/importless/libbitcoin-network.txtnew file+36

This diff is too big to show here.

test/golden/importless/libbitcoin-protocol.nixnew file+39

This diff is too big to show here.

test/golden/importless/libbitcoin-protocol.txtnew file+38

This diff is too big to show here.

test/golden/importless/libbitcoin.nixnew file+39

This diff is too big to show here.

test/golden/importless/libbitcoin.txtnew file+35

This diff is too big to show here.

test/golden/importless/libc++abi.nixnew file+51

This diff is too big to show here.

test/golden/importless/libc++abi.txtnew file+43

This diff is too big to show here.

test/golden/importless/libcroco.nixnew file+33

This diff is too big to show here.

test/golden/importless/libcroco.txtnew file+32

This diff is too big to show here.

test/golden/importless/libdislocator.nixnew file+37

This diff is too big to show here.

test/golden/importless/libdislocator.txtnew file+27

This diff is too big to show here.

test/golden/importless/libdispatch.nixnew file+12

This diff is too big to show here.

test/golden/importless/libdispatch.txtnew file+12

This diff is too big to show here.

test/golden/importless/libfakeXinerama.nixnew file+33

This diff is too big to show here.

test/golden/importless/libfakeXinerama.txtnew file+31

This diff is too big to show here.

test/golden/importless/libfolia.nixnew file+34

This diff is too big to show here.

test/golden/importless/libgdata.nixnew file+11

This diff is too big to show here.

test/golden/importless/libgdata.txtnew file+11

This diff is too big to show here.

test/golden/importless/libgenerated.nixnew file+95

This diff is too big to show here.

test/golden/importless/libgravatar.nixnew file+18

This diff is too big to show here.

test/golden/importless/libgravatar.txtnew file+25

This diff is too big to show here.

test/golden/importless/libinput.nixnew file+252

This diff is too big to show here.

test/golden/importless/libjcat.nixnew file+5

This diff is too big to show here.

test/golden/importless/libjcat.txtnew file+2

This diff is too big to show here.

test/golden/importless/libkcddb.nixnew file+17

This diff is too big to show here.

test/golden/importless/libkcddb.txtnew file+27

This diff is too big to show here.

test/golden/importless/libkdcraw.nixnew file+13

This diff is too big to show here.

test/golden/importless/libkdcraw.txtnew file+23

This diff is too big to show here.

test/golden/importless/libkdegames.nixnew file+26

This diff is too big to show here.

test/golden/importless/libkdegames.txtnew file+26

This diff is too big to show here.

test/golden/importless/libkdepim.nixnew file+21

This diff is too big to show here.

test/golden/importless/libkdepim.txtnew file+29

This diff is too big to show here.

test/golden/importless/libkexiv2.nixnew file+13

This diff is too big to show here.

test/golden/importless/libkexiv2.txtnew file+23

This diff is too big to show here.

test/golden/importless/libkgapi.nixnew file+17

This diff is too big to show here.

test/golden/importless/libkgapi.txtnew file+27

This diff is too big to show here.

test/golden/importless/libkipi.nixnew file+12

This diff is too big to show here.

test/golden/importless/libkipi.txtnew file+24

This diff is too big to show here.

test/golden/importless/libkleo.nixnew file+21

This diff is too big to show here.

test/golden/importless/libkleo.txtnew file+27

This diff is too big to show here.

test/golden/importless/libkmahjongg.nixnew file+18

This diff is too big to show here.

test/golden/importless/libkmahjongg.txtnew file+26

This diff is too big to show here.

test/golden/importless/libkomparediff2.nixnew file+7

This diff is too big to show here.

test/golden/importless/libkomparediff2.txtnew file+10

This diff is too big to show here.

test/golden/importless/libksane.nixnew file+16

This diff is too big to show here.

test/golden/importless/libksane.txtnew file+23

This diff is too big to show here.

test/golden/importless/libksieve.nixnew file+23

This diff is too big to show here.

test/golden/importless/libksieve.txtnew file+30

This diff is too big to show here.

test/golden/importless/libmaa.nixnew file+22

This diff is too big to show here.

test/golden/importless/libmaa.txtnew file+16

This diff is too big to show here.

test/golden/importless/libnvc.nixnew file+55

This diff is too big to show here.

test/golden/importless/libnvc.txtnew file+29

This diff is too big to show here.

test/golden/importless/libopenshot-audio.nixnew file+35

This diff is too big to show here.

test/golden/importless/libopenshot-audio.txtnew file+41

This diff is too big to show here.

test/golden/importless/libopenshot.nixnew file+51

This diff is too big to show here.

test/golden/importless/libopenshot.txtnew file+48

This diff is too big to show here.

test/golden/importless/liboping.nixnew file+22

This diff is too big to show here.

test/golden/importless/liboping.txtnew file+16

This diff is too big to show here.

test/golden/importless/libraries.nixnew file+72

This diff is too big to show here.

test/golden/importless/library.nixnew file+22

This diff is too big to show here.

test/golden/importless/library.txtnew file+33

This diff is too big to show here.

test/golden/importless/libreswan.nixnew file+129

This diff is too big to show here.

test/golden/importless/libsavitar.nixnew file+33

This diff is too big to show here.

test/golden/importless/libsavitar.txtnew file+35

This diff is too big to show here.

test/golden/importless/libsigrok4dsl.nixnew file+28

This diff is too big to show here.

test/golden/importless/libsigrok4dsl.txtnew file+41

This diff is too big to show here.

test/golden/importless/libsigrokdecode4dsl.nixnew file+27

This diff is too big to show here.

test/golden/importless/libsigrokdecode4dsl.txtnew file+36

This diff is too big to show here.

test/golden/importless/libtokencap.nixnew file+32

This diff is too big to show here.

test/golden/importless/libtokencap.txtnew file+27

This diff is too big to show here.

test/golden/importless/libtool2.nixnew file+45

This diff is too big to show here.

test/golden/importless/libtool2.txtnew file+35

This diff is too big to show here.

test/golden/importless/libungif.nixnew file+17

This diff is too big to show here.

test/golden/importless/libungif.txtnew file+15

This diff is too big to show here.

test/golden/importless/libunwind.nixnew file+25

This diff is too big to show here.

test/golden/importless/libunwind.txtnew file+22

This diff is too big to show here.

test/golden/importless/libusb1.nixnew file+38

This diff is too big to show here.

test/golden/importless/libusb1.txtnew file+36

This diff is too big to show here.

test/golden/importless/libxkbcommon_7.nixnew file+32

This diff is too big to show here.

test/golden/importless/libxkbcommon_7.txtnew file+38

This diff is too big to show here.

test/golden/importless/libxmlb.nixnew file+5

This diff is too big to show here.

test/golden/importless/libxmlb.txtnew file+2

This diff is too big to show here.

test/golden/importless/libxpdf.nixnew file+53

This diff is too big to show here.

test/golden/importless/libxpdf.txtnew file+16

This diff is too big to show here.

test/golden/importless/licenses.nixnew file+808

This diff is too big to show here.

test/golden/importless/licenses.txtnew file+190

This diff is too big to show here.

test/golden/importless/lidarr.nixnew file+89

This diff is too big to show here.

test/golden/importless/lift.nixnew file+25

This diff is too big to show here.

test/golden/importless/lift.txtnew file+11

This diff is too big to show here.

test/golden/importless/light.nixnew file+27

This diff is too big to show here.

test/golden/importless/light.txtnew file+19

This diff is too big to show here.

test/golden/importless/lightyear.nixnew file+25

This diff is too big to show here.

test/golden/importless/lightyear.txtnew file+26

This diff is too big to show here.

test/golden/importless/limesdr.nixnew file+40

This diff is too big to show here.

test/golden/importless/limesdr.txtnew file+40

This diff is too big to show here.

test/golden/importless/linux-4.14.nixnew file+18

This diff is too big to show here.

test/golden/importless/linux-4.14.txtnew file+23

This diff is too big to show here.

test/golden/importless/linux-4.19.nixnew file+18

This diff is too big to show here.

test/golden/importless/linux-4.19.txtnew file+23

This diff is too big to show here.

test/golden/importless/linux-4.4.nixnew file+11

This diff is too big to show here.

test/golden/importless/linux-4.4.txtnew file+10

This diff is too big to show here.

test/golden/importless/linux-4.9.nixnew file+11

This diff is too big to show here.

test/golden/importless/linux-4.9.txtnew file+10

This diff is too big to show here.

test/golden/importless/linux-5.4.nixnew file+18

This diff is too big to show here.

test/golden/importless/linux-5.4.txtnew file+23

This diff is too big to show here.

test/golden/importless/linux-5.8.nixnew file+18

This diff is too big to show here.

test/golden/importless/linux-5.8.txtnew file+23

This diff is too big to show here.

test/golden/importless/linux-5.9.nixnew file+18

This diff is too big to show here.

test/golden/importless/linux-5.9.txtnew file+23

This diff is too big to show here.

test/golden/importless/linux-hardkernel-4.14.nixnew file+33

This diff is too big to show here.

test/golden/importless/linux-hardkernel-4.14.txtnew file+22

This diff is too big to show here.

test/golden/importless/linux-libre.nixnew file+42

This diff is too big to show here.

test/golden/importless/linux-rpi.nixnew file+70

This diff is too big to show here.

test/golden/importless/linux-rt-5.4.nixnew file+41

This diff is too big to show here.

test/golden/importless/linux-rt-5.6.nixnew file+41

This diff is too big to show here.

test/golden/importless/linux-testing-bcachefs.nixnew file+22

This diff is too big to show here.

test/golden/importless/linux-testing-bcachefs.txtnew file+27

This diff is too big to show here.

test/golden/importless/linux-testing.nixnew file+20

This diff is too big to show here.

test/golden/importless/linux-zen.nixnew file+24

This diff is too big to show here.

test/golden/importless/linux-zen.txtnew file+19

This diff is too big to show here.

test/golden/importless/linux.nixnew file+21

This diff is too big to show here.

test/golden/importless/linux.txtnew file+15

This diff is too big to show here.

test/golden/importless/linuxbrowser.nixnew file+49

This diff is too big to show here.

test/golden/importless/linuxbrowser.txtnew file+35

This diff is too big to show here.

test/golden/importless/liquidsoap.nixnew file+69

This diff is too big to show here.

test/golden/importless/lirc.nixnew file+100

This diff is too big to show here.

test/golden/importless/lisp-namespace.nixnew file+27

This diff is too big to show here.

test/golden/importless/lisp-namespace.txtnew file+11

This diff is too big to show here.

test/golden/importless/lisp-packages.nixnew file+81

This diff is too big to show here.

test/golden/importless/lisp-unit2.nixnew file+38

This diff is too big to show here.

test/golden/importless/lisp-unit2.txtnew file+22

This diff is too big to show here.

test/golden/importless/list-of.nixnew file+26

This diff is too big to show here.

test/golden/importless/list-of.txtnew file+14

This diff is too big to show here.

test/golden/importless/lists.nixnew file+675

This diff is too big to show here.

test/golden/importless/litecoin.nixnew file+55

This diff is too big to show here.

test/golden/importless/litecoin.txtnew file+55

This diff is too big to show here.

test/golden/importless/lld.nixnew file+33

This diff is too big to show here.

test/golden/importless/lld.txtnew file+32

This diff is too big to show here.

test/golden/importless/lldb.nixnew file+67

This diff is too big to show here.

test/golden/importless/lldb.txtnew file+54

This diff is too big to show here.

test/golden/importless/lldpd.nixnew file+39

This diff is too big to show here.

test/golden/importless/lldpd.txtnew file+43

This diff is too big to show here.

test/golden/importless/llvm.nixnew file+52

This diff is too big to show here.

test/golden/importless/llvm.txtnew file+48

This diff is too big to show here.

test/golden/importless/lnd-exporter.nixnew file+26

This diff is too big to show here.

test/golden/importless/lnd-exporter.txtnew file+28

This diff is too big to show here.

test/golden/importless/lnd.nixnew file+46

This diff is too big to show here.

test/golden/importless/local-time.nixnew file+32

This diff is too big to show here.

test/golden/importless/local-time.txtnew file+18

This diff is too big to show here.

test/golden/importless/local.nixnew file+30

This diff is too big to show here.

test/golden/importless/locale.nixnew file+94

This diff is too big to show here.

test/golden/importless/locales.nixnew file+68

This diff is too big to show here.

test/golden/importless/locales.txtnew file+20

This diff is too big to show here.

test/golden/importless/localtime.nixnew file+48

This diff is too big to show here.

test/golden/importless/localtime.txtnew file+34

This diff is too big to show here.

test/golden/importless/location-options.nixnew file+94

This diff is too big to show here.

test/golden/importless/lock-color.nixnew file+62

This diff is too big to show here.

test/golden/importless/lock-color.txtnew file+47

This diff is too big to show here.

test/golden/importless/lock-effects.nixnew file+39

This diff is too big to show here.

test/golden/importless/lock-effects.txtnew file+44

This diff is too big to show here.

test/golden/importless/lock-fancy-rapid.nixnew file+32

This diff is too big to show here.

test/golden/importless/lock-fancy-rapid.txtnew file+34

This diff is too big to show here.

test/golden/importless/lock-fancy.nixnew file+47

This diff is too big to show here.

test/golden/importless/lock-fancy.txtnew file+40

This diff is too big to show here.

test/golden/importless/lock-kernel-modules.nixnew file+48

This diff is too big to show here.

test/golden/importless/lock-kernel-modules.txtnew file+44

This diff is too big to show here.

test/golden/importless/lock.nixnew file+37

This diff is too big to show here.

test/golden/importless/lock.txtnew file+45

This diff is too big to show here.

test/golden/importless/log.nixnew file+59

This diff is too big to show here.

test/golden/importless/log.txtnew file+3

This diff is too big to show here.

test/golden/importless/log4cl.nixnew file+30

This diff is too big to show here.

test/golden/importless/log4cl.txtnew file+17

This diff is too big to show here.

test/golden/importless/logcheck.nixnew file+238

This diff is too big to show here.

test/golden/importless/logic.nixnew file+28

This diff is too big to show here.

test/golden/importless/logic.txtnew file+26

This diff is too big to show here.

test/golden/importless/logkeys.nixnew file+30

This diff is too big to show here.

test/golden/importless/logkeys.txtnew file+30

This diff is too big to show here.

test/golden/importless/logmein-hamachi.nixnew file+50

This diff is too big to show here.

test/golden/importless/logmein-hamachi.txtnew file+28

This diff is too big to show here.

test/golden/importless/loki.nixnew file+112

This diff is too big to show here.

test/golden/importless/longview.nixnew file+160

This diff is too big to show here.

test/golden/importless/lorri.nixnew file+56

This diff is too big to show here.

test/golden/importless/lparallel.nixnew file+27

This diff is too big to show here.

test/golden/importless/lparallel.txtnew file+15

This diff is too big to show here.

test/golden/importless/lquery.nixnew file+31

This diff is too big to show here.

test/golden/importless/lquery.txtnew file+19

This diff is too big to show here.

test/golden/importless/lshd.nixnew file+183

This diff is too big to show here.

test/golden/importless/ltc.nixnew file+61

This diff is too big to show here.

test/golden/importless/ltc.txtnew file+44

This diff is too big to show here.

test/golden/importless/lts.nixnew file+82

This diff is too big to show here.

test/golden/importless/lua-packages.nixnew file+164

This diff is too big to show here.

test/golden/importless/luarocks-nix.nixnew file+14

This diff is too big to show here.

test/golden/importless/luarocks-nix.txtnew file+9

This diff is too big to show here.

test/golden/importless/lumina.nixnew file+42

This diff is too big to show here.

test/golden/importless/lumina.txtnew file+28

This diff is too big to show here.

test/golden/importless/lvm.nixnew file+70

This diff is too big to show here.

test/golden/importless/lvm2.nixnew file+76

This diff is too big to show here.

test/golden/importless/lvm2.txtnew file+28

This diff is too big to show here.

test/golden/importless/lwm.nixnew file+25

This diff is too big to show here.

test/golden/importless/lwm.txtnew file+24

This diff is too big to show here.

test/golden/importless/lwt-unix.nixnew file+19

This diff is too big to show here.

test/golden/importless/lwt-unix.txtnew file+26

This diff is too big to show here.

test/golden/importless/lwt.nixnew file+16

This diff is too big to show here.

test/golden/importless/lxc.nixnew file+82

This diff is too big to show here.

test/golden/importless/lxcfs.nixnew file+45

This diff is too big to show here.

test/golden/importless/lxcfs.txtnew file+40

This diff is too big to show here.

test/golden/importless/lxd.nixnew file+150

This diff is too big to show here.

test/golden/importless/lxmenu-data.nixnew file+20

This diff is too big to show here.

test/golden/importless/lxmenu-data.txtnew file+18

This diff is too big to show here.

test/golden/importless/lxqt.nixnew file+67

This diff is too big to show here.

test/golden/importless/lyricbar.nixnew file+26

This diff is too big to show here.

test/golden/importless/lyricbar.txtnew file+34

This diff is too big to show here.

test/golden/importless/m2install.nixnew file+21

This diff is too big to show here.

test/golden/importless/m2install.txtnew file+20

This diff is too big to show here.

test/golden/importless/m32edit.nixnew file+9

This diff is too big to show here.

test/golden/importless/m32edit.txtnew file+12

This diff is too big to show here.

test/golden/importless/mac.nixnew file+69

This diff is too big to show here.

test/golden/importless/mac.txtnew file+46

This diff is too big to show here.

test/golden/importless/machine.nixnew file+26

This diff is too big to show here.

test/golden/importless/machine.txtnew file+24

This diff is too big to show here.

test/golden/importless/macport.nixnew file+120

This diff is too big to show here.

test/golden/importless/macport.txtnew file+63

This diff is too big to show here.

test/golden/importless/macvim.nixnew file+173

This diff is too big to show here.

test/golden/importless/macvim.txtnew file+52

This diff is too big to show here.

test/golden/importless/magic-wormhole-mailbox-server.nixnew file+28

This diff is too big to show here.

test/golden/importless/magic-wormhole-mailbox-server.txtnew file+36

This diff is too big to show here.

test/golden/importless/magnetico.nixnew file+218

This diff is too big to show here.

test/golden/importless/mail-exporter.nixnew file+34

This diff is too big to show here.

test/golden/importless/mail-exporter.txtnew file+37

This diff is too big to show here.

test/golden/importless/mail-exporter_deps.nixnew file+92

This diff is too big to show here.

test/golden/importless/mail-exporter_deps.txtnew file+4

This diff is too big to show here.

test/golden/importless/mail.nixnew file+158

This diff is too big to show here.

test/golden/importless/mailcatcher.nixnew file+68

This diff is too big to show here.

test/golden/importless/mailhog.nixnew file+44

This diff is too big to show here.

test/golden/importless/mailhog.txtnew file+33

This diff is too big to show here.

test/golden/importless/mailpile.nixnew file+72

This diff is too big to show here.

test/golden/importless/mailpile.txtnew file+57

This diff is too big to show here.

test/golden/importless/mainline.nixnew file+6

This diff is too big to show here.

test/golden/importless/mainline.txtnew file+4

This diff is too big to show here.

test/golden/importless/maintainer-list.nixnew file+9593

This diff is too big to show here.

test/golden/importless/maintainer-list.txtnew file+3003

This diff is too big to show here.

test/golden/importless/maintainers.nixnew file+76

This diff is too big to show here.

test/golden/importless/make-bootstrap.nixnew file+31

This diff is too big to show here.

test/golden/importless/make-bootstrap.txtnew file+3

This diff is too big to show here.

test/golden/importless/make-channel.nixnew file+31

This diff is too big to show here.

test/golden/importless/make-channel.txtnew file+15

This diff is too big to show here.

test/golden/importless/make-dbus-conf.nixnew file+42

This diff is too big to show here.

test/golden/importless/make-dbus-conf.txtnew file+18

This diff is too big to show here.

test/golden/importless/make-disk-image.nixnew file+296

This diff is too big to show here.

test/golden/importless/make-ext4-fs.nixnew file+88

This diff is too big to show here.

test/golden/importless/make-ext4-fs.txtnew file+23

This diff is too big to show here.

test/golden/importless/make-fonts-cache.nixnew file+33

This diff is too big to show here.

test/golden/importless/make-fonts-cache.txtnew file+15

This diff is too big to show here.

test/golden/importless/make-fonts-conf.nixnew file+15

This diff is too big to show here.

test/golden/importless/make-fonts-conf.txtnew file+11

This diff is too big to show here.

test/golden/importless/make-initrd.nixnew file+52

This diff is too big to show here.

test/golden/importless/make-iso9660-image.nixnew file+65

This diff is too big to show here.

test/golden/importless/make-peer.nixnew file+23

This diff is too big to show here.

test/golden/importless/make-peer.txtnew file+52

This diff is too big to show here.

test/golden/importless/make-snap.nixnew file+84

This diff is too big to show here.

test/golden/importless/make-squashfs.nixnew file+28

This diff is too big to show here.

test/golden/importless/make-squashfs.txtnew file+11

This diff is too big to show here.

test/golden/importless/make-system-tarball.nixnew file+56

This diff is too big to show here.

test/golden/importless/makeDotElm.nixnew file+35

This diff is too big to show here.

test/golden/importless/makeDotElm.txtnew file+20

This diff is too big to show here.

test/golden/importless/malcontent.nixnew file+40

This diff is too big to show here.

test/golden/importless/malcontent.txtnew file+21

This diff is too big to show here.

test/golden/importless/malloc.nixnew file+91

This diff is too big to show here.

test/golden/importless/malloc.txtnew file+37

This diff is too big to show here.

test/golden/importless/mame.nixnew file+67

This diff is too big to show here.

test/golden/importless/man.nixnew file+37

This diff is too big to show here.

test/golden/importless/man.txtnew file+31

This diff is too big to show here.

test/golden/importless/manifestparser.nixnew file+26

This diff is too big to show here.

test/golden/importless/manual-packages.nixnew file+177

This diff is too big to show here.

test/golden/importless/map-set.nixnew file+24

This diff is too big to show here.