diff options
Diffstat (limited to 'users')
-rw-r--r-- | users/Profpatsch/nixpkgs-rewriter/MetaStdenvLib.hs | 80 | ||||
-rw-r--r-- | users/Profpatsch/nixpkgs-rewriter/default.nix | 148 |
2 files changed, 0 insertions, 228 deletions
diff --git a/users/Profpatsch/nixpkgs-rewriter/MetaStdenvLib.hs b/users/Profpatsch/nixpkgs-rewriter/MetaStdenvLib.hs deleted file mode 100644 index 3ed96a7b6eac..000000000000 --- a/users/Profpatsch/nixpkgs-rewriter/MetaStdenvLib.hs +++ /dev/null @@ -1,80 +0,0 @@ -{-# LANGUAGE PartialTypeSignatures #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE NamedFieldPuns #-} -import Nix.Parser -import Nix.Expr.Types -import Nix.Expr.Types.Annotated -import System.Environment (getArgs) -import System.Exit (die) -import Data.Fix (Fix(..)) -import qualified Data.Text as Text -import qualified Data.ByteString.Lazy.Char8 as BL -import qualified Data.Aeson as A -import qualified Data.Aeson.Encoding as A -import Data.Function ((&)) -import qualified System.IO as IO -import qualified Text.Megaparsec.Pos as MP - -main = do - (nixFile:_) <- getArgs - (parseNixFileLoc nixFile :: IO _) >>= \case - Failure err -> do - ePutStrLn $ show err - die "oh no" - Success expr -> do - case snd $ match expr of - NoArguments -> do - ePutStrLn $ "NoArguments in " <> nixFile - printPairs mempty - YesLib vars -> do - ePutStrLn $ "lib in " <> show vars <> " in " <> nixFile - printPairs mempty - NoLib vars srcSpan -> do - ePutStrLn $ nixFile <> " needs lib added" - printPairs - $ "fileName" A..= nixFile - <> "fromLine" A..= (srcSpan & spanBegin & sourceLine) - <> "fromColumn" A..= (srcSpan & spanBegin & sourceColumn) - <> "toLine" A..= (srcSpan & spanEnd & sourceLine) - <> "toColumn" A..= (srcSpan & spanEnd & sourceColumn) - -printPairs pairs = BL.putStrLn $ A.encodingToLazyByteString $ A.pairs pairs - -ePutStrLn = IO.hPutStrLn IO.stderr - -data Descend = YesDesc | NoDesc - deriving Show -data Matched = NoArguments | NoLib [VarName] SrcSpan | YesLib [VarName] - deriving Show - -match :: Fix (Compose (Ann SrcSpan) NExprF) -> (Descend, Matched) -match = \case - (AnnE outerSpan (NAbs (ParamSet params _ _) (AnnE innerSpan _))) -> (NoDesc, - let vars = map fst params in - case (any (== "lib") vars) of - True -> YesLib vars - False -> - -- The span of the arglist is from the beginning of the match - -- to the beginning of the inner expression - let varSpan = SrcSpan - { spanBegin = outerSpan & spanBegin - -- -1 to prevent the spans from overlapping - , spanEnd = sourcePosMinus1 (innerSpan & spanBegin) } - in NoLib vars varSpan) - _ -> (NoDesc, NoArguments) - --- | Remove one from a source positon. --- --- That means if the current position is at the very beginning of a line, --- jump to the previous line. -sourcePosMinus1 :: SourcePos -> SourcePos -sourcePosMinus1 src@(SourcePos { sourceLine, sourceColumn }) = - let - col = MP.mkPos $ max (MP.unPos sourceColumn - 1) 1 - line = MP.mkPos $ case MP.unPos sourceColumn of - 1 -> max (MP.unPos sourceLine - 1) 1 - _ -> MP.unPos sourceLine - in src - { sourceLine = line - , sourceColumn = col } diff --git a/users/Profpatsch/nixpkgs-rewriter/default.nix b/users/Profpatsch/nixpkgs-rewriter/default.nix deleted file mode 100644 index 0740a870aa4a..000000000000 --- a/users/Profpatsch/nixpkgs-rewriter/default.nix +++ /dev/null @@ -1,148 +0,0 @@ -{ 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, let’s 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 don’t want in tvl for now - # uncomment manually if you want to use it. - # meta-stdenv-lib - # replace-stdenv-lib - ; -} |