nix-info: init
This commit is contained in:
parent
534060e608
commit
d9d2c4a4a9
37
pkgs/tools/nix/info/default.nix
Normal file
37
pkgs/tools/nix/info/default.nix
Normal file
|
@ -0,0 +1,37 @@
|
|||
{ stdenv, lib, coreutils, findutils, gnugrep, darwin, shellcheck }:
|
||||
stdenv.mkDerivation {
|
||||
name = "nix-info";
|
||||
src = ./info.sh;
|
||||
|
||||
buildInputs = [
|
||||
shellcheck
|
||||
];
|
||||
|
||||
path = lib.makeBinPath ([
|
||||
coreutils findutils gnugrep
|
||||
] ++ (if stdenv.isDarwin then [ darwin.DarwinTools ] else []));
|
||||
is_darwin = if stdenv.isDarwin then "yes" else "no";
|
||||
|
||||
sandboxtest = ./sandbox.nix;
|
||||
relaxedsandboxtest = ./relaxedsandbox.nix;
|
||||
multiusertest = ./multiuser.nix;
|
||||
|
||||
unpackCmd = ''
|
||||
mkdir nix-info
|
||||
cp $src ./nix-info/nix-info
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
substituteAllInPlace ./nix-info
|
||||
'';
|
||||
|
||||
doCheck = true;
|
||||
checkPhase = ''
|
||||
shellcheck ./nix-info
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cp ./nix-info $out/bin/nix-info
|
||||
'';
|
||||
}
|
169
pkgs/tools/nix/info/info.sh
Executable file
169
pkgs/tools/nix/info/info.sh
Executable file
|
@ -0,0 +1,169 @@
|
|||
#!/bin/bash
|
||||
|
||||
PATH="@path@:$PATH"
|
||||
IS_DARWIN="@is_darwin@"
|
||||
|
||||
set -eu
|
||||
set -o pipefail
|
||||
|
||||
DEBUG=0
|
||||
MARKDOWN=0
|
||||
HOST_OS=0
|
||||
SANDBOX=0
|
||||
while true; do
|
||||
case "${1:-}" in
|
||||
"")
|
||||
break
|
||||
;;
|
||||
-d | --debug)
|
||||
set -x
|
||||
DEBUG=1
|
||||
shift
|
||||
;;
|
||||
-m | --markdown)
|
||||
MARKDOWN=1
|
||||
HOST_OS=1
|
||||
SANDBOX=1
|
||||
shift
|
||||
;;
|
||||
--host-os)
|
||||
HOST_OS=1
|
||||
shift
|
||||
;;
|
||||
--sandbox)
|
||||
SANDBOX=1
|
||||
shift
|
||||
;;
|
||||
|
||||
* )
|
||||
cat <<EOF
|
||||
nix-info - get high level info to help with debugging
|
||||
|
||||
Options:
|
||||
|
||||
-m, --markdown formatting for a GitHub issue
|
||||
implies: --host-os, --sandbox
|
||||
|
||||
--sandbox include sandbox configuration
|
||||
--host-os include host OS details
|
||||
|
||||
-h, --help show this message
|
||||
-d, --debug debug mode
|
||||
|
||||
EOF
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
done
|
||||
|
||||
debuglog() {
|
||||
if [ $DEBUG -eq 1 ]; then
|
||||
cat >&2
|
||||
else
|
||||
cat > /dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
nixev() {
|
||||
nix-instantiate --eval --strict -E "$1"
|
||||
}
|
||||
|
||||
desc_system() {
|
||||
nixev '(import <nixpkgs> {}).system'
|
||||
}
|
||||
|
||||
desc_host_os() {
|
||||
printf "%s" "$(uname -sr)"
|
||||
|
||||
if [ "$IS_DARWIN" = "yes" ]; then
|
||||
printf ", macOS %s" "$(sw_vers -productVersion)"
|
||||
fi
|
||||
|
||||
if [ -f /etc/os-release ]; then
|
||||
(
|
||||
# shellcheck disable=SC1091
|
||||
. /etc/os-release
|
||||
printf ", %s, %s" "${NAME:-$(uname -v)}" "${VERSION:-noversion}"
|
||||
)
|
||||
fi
|
||||
}
|
||||
|
||||
desc_multi_user() {
|
||||
if nix-build --no-out-link @multiusertest@ 2>&1 | debuglog; then
|
||||
printf "yes"
|
||||
else
|
||||
printf "no"
|
||||
fi
|
||||
}
|
||||
|
||||
desc_nixpkgs_path() {
|
||||
nixev '<nixpkgs>'
|
||||
}
|
||||
|
||||
channel_facts() {
|
||||
find /nix/var/nix/profiles/per-user \
|
||||
-mindepth 2 \
|
||||
-maxdepth 2 \
|
||||
-name channels \
|
||||
-print0 \
|
||||
|\
|
||||
while IFS= read -r -d '' userchannelset; do
|
||||
manifest="$userchannelset/manifest.nix"
|
||||
|
||||
if [ -e "$manifest" ]; then
|
||||
userchannels=$(nixev \
|
||||
"builtins.concatStringsSep \", \"
|
||||
(map (ch: ch.name)
|
||||
(import \"$manifest\"))")
|
||||
|
||||
fact "channels($(echo "$manifest" | cut -d/ -f7))" \
|
||||
"$userchannels"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
desc_sandbox() {
|
||||
if nix-build --no-out-link @sandboxtest@ 2>&1 | debuglog; then
|
||||
printf "no"
|
||||
elif nix-build --no-out-link @relaxedsandboxtest@ 2>&1 | debuglog; then
|
||||
printf "relaxed"
|
||||
else
|
||||
printf "yes"
|
||||
fi
|
||||
}
|
||||
|
||||
fact() {
|
||||
name="${1:-0}"
|
||||
value="${2:-0}"
|
||||
last="${3:-1}"
|
||||
if [ $MARKDOWN -eq 0 ]; then
|
||||
printf "%s: %s" "$name" "$value"
|
||||
if [ "$last" -eq 1 ]; then
|
||||
printf ", "
|
||||
fi
|
||||
else
|
||||
printf " - %s: \`%s\`\n" "$name" "$value"
|
||||
fi
|
||||
|
||||
if [ "$last" -eq 0 ]; then
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
last_fact() {
|
||||
fact "$1" "$2" 0
|
||||
}
|
||||
|
||||
fact "system" "$(desc_system)"
|
||||
if [ $HOST_OS -eq 1 ]; then
|
||||
fact "host os" "$(desc_host_os)"
|
||||
fi
|
||||
fact "multi-user?" "$(desc_multi_user)"
|
||||
if [ $SANDBOX -eq 1 ]; then
|
||||
fact "sandbox" "$(desc_sandbox)"
|
||||
fi
|
||||
|
||||
fact "version" "$(nix-env --version)"
|
||||
channel_facts
|
||||
last_fact "nixpkgs" "$(desc_nixpkgs_path)"
|
12
pkgs/tools/nix/info/multiuser.nix
Normal file
12
pkgs/tools/nix/info/multiuser.nix
Normal file
|
@ -0,0 +1,12 @@
|
|||
let
|
||||
pkgs = import <nixpkgs> {};
|
||||
in pkgs.runCommand "diagnostics-multiuser"
|
||||
{ }
|
||||
''
|
||||
set -x
|
||||
# no cache: ${toString builtins.currentTime}
|
||||
# For reproducibility, nix always uses nixbld group:
|
||||
# https://github.com/NixOS/nix/blob/1dd29d7aebae706f3e90a18bbfae727f2ed03c70/src/libstore/build.cc#L1896-L1908
|
||||
test "$(groups)" == "nixbld"
|
||||
touch $out
|
||||
''
|
12
pkgs/tools/nix/info/relaxedsandbox.nix
Normal file
12
pkgs/tools/nix/info/relaxedsandbox.nix
Normal file
|
@ -0,0 +1,12 @@
|
|||
let
|
||||
pkgs = import <nixpkgs> {};
|
||||
in pkgs.runCommand "diagnostics-sandbox"
|
||||
{
|
||||
__noChroot = true;
|
||||
}
|
||||
''
|
||||
set -x
|
||||
# no cache: ${toString builtins.currentTime}
|
||||
test -d "$(dirname "$out")/../var/nix"
|
||||
touch $out
|
||||
''
|
10
pkgs/tools/nix/info/sandbox.nix
Normal file
10
pkgs/tools/nix/info/sandbox.nix
Normal file
|
@ -0,0 +1,10 @@
|
|||
let
|
||||
pkgs = import <nixpkgs> {};
|
||||
in pkgs.runCommand "diagnostics-sandbox"
|
||||
{ }
|
||||
''
|
||||
set -x
|
||||
# no cache: ${toString builtins.currentTime}
|
||||
test -d "$(dirname "$out")/../var/nix"
|
||||
touch $out
|
||||
''
|
|
@ -19123,6 +19123,8 @@ with pkgs;
|
|||
|
||||
nix-bundle = callPackage ../tools/package-management/nix-bundle { nix = nixUnstable; };
|
||||
|
||||
nix-info = callPackage ../tools/nix/info { };
|
||||
|
||||
nix-index = callPackage ../tools/package-management/nix-index { };
|
||||
|
||||
inherit (callPackages ../tools/package-management/nix-prefetch-scripts { })
|
||||
|
|
Loading…
Reference in a new issue