From c51ecb7691b659d9651679153bc1e4edfc5fb20e Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Fri, 7 Jan 2022 14:47:38 +0100 Subject: pkgs/profpatsch: add nix-run-bin Takes an additional argument and looks that argument up in the respective nix build result directory bin dir. Also add some documentation. --- machines/profpatsch/shiki.nix | 4 ++++ pkgs/profpatsch/default.nix | 1 + pkgs/profpatsch/nix-tools.nix | 28 ++++++++++++++++++++++++++-- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/machines/profpatsch/shiki.nix b/machines/profpatsch/shiki.nix index 3b145f63..4e77385a 100644 --- a/machines/profpatsch/shiki.nix +++ b/machines/profpatsch/shiki.nix @@ -290,6 +290,10 @@ in { exe = pkgs.vuizvui.profpatsch.nix-run; name = "nix-run"; }) + (pkgs.vuizvui.profpatsch.binify { + exe = pkgs.vuizvui.profpatsch.nix-run-bin; + name = "nix-run-bin"; + }) (pkgs.vuizvui.profpatsch.binify { exe = pkgs.vuizvui.profpatsch.nix-eval; name = "nix-eval"; diff --git a/pkgs/profpatsch/default.nix b/pkgs/profpatsch/default.nix index 4488c3a8..c7516927 100644 --- a/pkgs/profpatsch/default.nix +++ b/pkgs/profpatsch/default.nix @@ -259,6 +259,7 @@ in rec { inherit (import ./nix-tools.nix { inherit pkgs getBins writeExecline runblock; }) nix-run + nix-run-bin nix-eval ; diff --git a/pkgs/profpatsch/nix-tools.nix b/pkgs/profpatsch/nix-tools.nix index 557e6680..e0b20318 100644 --- a/pkgs/profpatsch/nix-tools.nix +++ b/pkgs/profpatsch/nix-tools.nix @@ -1,13 +1,36 @@ -{ pkgs, writeExecline, runblock, getBins }: +{ pkgs, writeExecline, getBins, runblock }: let bins = getBins pkgs.nix [ "nix-build" "nix-instantiate" ]; + # Usage (execline syntax): + # nix-run { -A foo } args... + # + # Takes an execline block of `nix-build` arguments, which should produce an executable store path. + # Then runs the store path with `prog...`. nix-run = writeExecline "nix-run" { argMode = "env"; } [ "backtick" "-iE" "storepath" [ runblock "1" bins.nix-build ] - runblock "-r" "2" "exec" "$storepath" + runblock "-r" "2" "$storepath" + ]; + + # Usage (execline syntax): + # nix-run-bin { -A foo } args... + # + # Takes an execline block of `nix-build` arguments, which should produce a store path with a bin/ directory in it. + # Then runs the `/bin/` executable in the store path with the given arguments. + nix-run-bin = writeExecline "nix-run-bin" { argMode = "env"; } [ + "backtick" "-i" "storepath" [ + runblock "1" bins.nix-build + ] + runblock "-r" "2" + # workaround, runblock does not set # and $0 and so forth in its blocks (yet) + (writeExecline "nix-run-bin-rest-block" { readNArgs = 1; } [ + "importas" "-ui" "storepath" "storepath" + "if" [ "echo" "\${storepath}/bin/\${1}" ] + "\${storepath}/bin/\${1}" "$@" + ]) ]; nix-eval = writeExecline "nix-eval" {} [ @@ -21,6 +44,7 @@ let in { inherit nix-run + nix-run-bin nix-eval ; } -- cgit 1.4.1