depot/third_party/tvl/users/Profpatsch/nixpkgs-rewriter/default.nix
Default email a291c8690a Project import generated by Copybara.
GitOrigin-RevId: e6e19f3d81a982a62e1bba08f0b4f7fdc21b4ea0
2022-05-19 16:39:52 +02:00

148 lines
3.2 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ depot, pkgs, ... }:
let
inherit (depot.nix)
writeExecline
;
inherit (depot.users.Profpatsch.lib)
debugExec
;
bins = depot.nix.getBins pkgs.coreutils [ "head" "shuf" ]
// depot.nix.getBins pkgs.jq [ "jq" ]
// depot.nix.getBins pkgs.findutils [ "xargs" ]
// depot.nix.getBins pkgs.gnused [ "sed" ]
;
export-json-object = pkgs.writers.writePython3 "export-json-object" { } ''
import json
import sys
import os
d = json.load(sys.stdin)
if d == {}:
sys.exit(0)
for k, v in d.items():
os.environ[k] = str(v)
os.execvp(sys.argv[1], sys.argv[1:])
'';
meta-stdenv-lib = pkgs.writers.writeHaskell "meta-stdenv-lib"
{
libraries = [
pkgs.haskellPackages.hnix
pkgs.haskellPackages.aeson
];
} ./MetaStdenvLib.hs;
replace-between-lines = writeExecline "replace-between-lines" { readNArgs = 1; } [
"importas"
"-ui"
"file"
"fileName"
"importas"
"-ui"
"from"
"fromLine"
"importas"
"-ui"
"to"
"toLine"
"if"
[ depot.tools.eprintf "%s-%s\n" "$from" "$to" ]
(debugExec "adding lib")
bins.sed
"-e"
"\${from},\${to} \${1}"
"-i"
"$file"
];
add-lib-if-necessary = writeExecline "add-lib-if-necessary" { readNArgs = 1; } [
"pipeline"
[ meta-stdenv-lib "$1" ]
export-json-object
# first replace any stdenv.lib mentions in the arg header
# if this is not done, the replace below kills these.
# Since we want it anyway ultimately, lets do it here.
"if"
[ replace-between-lines "s/stdenv\.lib/lib/" ]
# then add the lib argument
# (has to be before stdenv, otherwise default arguments might be in the way)
replace-between-lines
"s/stdenv/lib, stdenv/"
];
metaString = ''meta = with stdenv.lib; {'';
replace-stdenv-lib = pkgs.writers.writeBash "replace-stdenv-lib" ''
set -euo pipefail
sourceDir="$1"
for file in $(
${pkgs.ripgrep}/bin/rg \
--files-with-matches \
--fixed-strings \
-e '${metaString}' \
"$sourceDir"
)
do
echo "replacing stdenv.lib meta in $file" >&2
${bins.sed} -e '/${metaString}/ s/stdenv.lib/lib/' \
-i "$file"
${add-lib-if-necessary} "$file"
done
'';
instantiate-nixpkgs-randomly = writeExecline "instantiate-nixpkgs-randomly" { readNArgs = 1; } [
"export"
"NIXPKGS_ALLOW_BROKEN"
"1"
"export"
"NIXPKGS_ALLOW_UNFREE"
"1"
"export"
"NIXPKGS_ALLOW_INSECURE"
"1"
"export"
"NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM"
"1"
"pipeline"
[
"nix"
"eval"
"--raw"
''(
let pkgs = import ''${1} {};
in builtins.toJSON (builtins.attrNames pkgs)
)''
]
"pipeline"
[ bins.jq "-r" ".[]" ]
"pipeline"
[ bins.shuf ]
"pipeline"
[ bins.head "-n" "1000" ]
bins.xargs
"-I"
"{}"
"-n1"
"if"
[ depot.tools.eprintf "instantiating %s\n" "{}" ]
"nix-instantiate"
"$1"
"-A"
"{}"
];
in
depot.nix.readTree.drvTargets {
inherit
instantiate-nixpkgs-randomly
# requires hnix, which we dont want in tvl for now
# uncomment manually if you want to use it.
# meta-stdenv-lib
# replace-stdenv-lib
;
}