mirror of
https://github.com/Ahwxorg/nixos-config.git
synced 2025-12-04 06:50:14 +01:00
73 lines
2 KiB
Bash
73 lines
2 KiB
Bash
#! /usr/bin/env nix-shell
|
|
#! nix-shell -i bash -p
|
|
# shellcheck shell=bash
|
|
|
|
set -euo pipefail
|
|
|
|
PKG_NAME="$1"
|
|
FLAKE="$2"
|
|
FLAKE_PATH="${FLAKE}#${PKG_NAME}"
|
|
|
|
removeQuotes() {
|
|
local flag="$*"
|
|
flag="${flag%\"}"
|
|
echo "${flag#\"}"
|
|
}
|
|
|
|
newlinesToCommaSeperated() {
|
|
echo "$@" | sed ':a;N;$!ba;s/\n/, /g'
|
|
}
|
|
|
|
evalAttr() {
|
|
local attr data
|
|
attr="$1"
|
|
data="$(nix eval "$FLAKE_PATH"."$attr" 2>/dev/null)"
|
|
[[ $data != "null" && $data != "false" && -n $data ]] && removeQuotes "$data"
|
|
}
|
|
|
|
evalJsonAttr() {
|
|
local attr jqArgs data
|
|
attr="$1"
|
|
jqArgs="$2"
|
|
data="$(nix eval --json "$FLAKE_PATH"."$attr" 2>/dev/null | jq -r "$jqArgs")"
|
|
[[ $data != "null" && -n $data ]] && echo "$data"
|
|
}
|
|
|
|
evalNixpkgsLib() {
|
|
local function data
|
|
function="$1"
|
|
# Impure is needed to import the flake reference
|
|
data="$(nix eval --raw --impure --expr "let pkgs = (builtins.getFlake \"flake:$FLAKE\"); in pkgs.lib.$function pkgs.$PKG_NAME" 2>/dev/null)"
|
|
[[ $data != "null" && -n $data ]] && echo "$data"
|
|
}
|
|
|
|
maybeEcho() {
|
|
local -r prefix="$1"
|
|
local flag="$2"
|
|
local -r commaSeperated="${3:-false}"
|
|
[[ $commaSeperated == "true" ]] && flag="$(newlinesToCommaSeperated "$flag")"
|
|
test -n "$flag" && echo "$prefix $flag"
|
|
}
|
|
|
|
test -n "$(evalAttr "meta.broken")" && echo "broken: true"
|
|
test -n "$(evalAttr "meta.insecure")" && echo "insecure: true"
|
|
|
|
version="$(evalAttr "version")"
|
|
# Derive the version from "name" using 'lib.getVersion' if it's not set
|
|
test -z "$version" && version="$(evalNixpkgsLib "getVersion")"
|
|
maybeEcho "version:" "$version"
|
|
|
|
homepage="$(evalAttr "meta.homepage")"
|
|
maybeEcho "homepage:" "$homepage"
|
|
|
|
description="$(evalAttr "meta.description")"
|
|
maybeEcho "description:" "$description"
|
|
|
|
license="$(evalJsonAttr "meta.license" 'if type=="array" then .[].fullName else .fullName end')"
|
|
maybeEcho "license:" "$license" true
|
|
|
|
maintainers="$(evalJsonAttr "meta.maintainers" '.[].github')"
|
|
maybeEcho "maintainers:" "$maintainers" true
|
|
|
|
platforms="$(evalJsonAttr "meta.platforms" 'if type=="array" then .[] else . end')"
|
|
maybeEcho "platforms:" "$platforms" true
|