#!/bin/sh # deps -- enumerate all installed software on this system # outputs one line per dep: NAMEVERSIONSOURCE # used by cve script for local matching # pacman (system packages + AUR) pacman -Q 2>/dev/null | while IFS=' ' read -r name ver; do printf '%s\t%s\tpacman\n' "$name" "$ver" done # python (pip) pip list --format=freeze 2>/dev/null | while IFS='=' read -r name _ ver; do [ -n "$name" ] && printf '%s\t%s\tpip\n' "$name" "$ver" done # python (pipx) pipx list --short 2>/dev/null | while read -r name ver _; do [ -n "$name" ] && printf '%s\t%s\tpipx\n' "$name" "$ver" done # node (npm global) npm list -g --depth=0 --parseable --long 2>/dev/null | tail -n +2 | while IFS= read -r line; do pkg=$(basename "$line" | sed 's/@[^@]*$//') ver=$(basename "$line" | grep -o '@[^@]*$' | tr -d '@') [ -n "$pkg" ] && printf '%s\t%s\tnpm\n' "$pkg" "$ver" done # rust (cargo) cargo install --list 2>/dev/null | grep -E '^[a-zA-Z]' | while read -r name ver _; do ver=$(echo "$ver" | tr -d 'v:') [ -n "$name" ] && printf '%s\t%s\tcargo\n' "$name" "$ver" done # flatpak flatpak list --columns=application,version 2>/dev/null | tail -n +1 | while IFS=$'\t' read -r app ver; do [ -n "$app" ] && printf '%s\t%s\tflatpak\n' "$app" "$ver" done # kernel printf 'linux\t%s\tkernel\n' "$(uname -r)" # running services (no version, but useful for matching product names) systemctl list-units --type=service --state=running --no-legend 2>/dev/null | awk '{print $1}' | sed 's/\.service$//' | while read -r svc; do printf '%s\t-\tservice\n' "$svc" done # docker containers if command -v docker >/dev/null 2>&1; then docker ps --format '{{.Image}}' 2>/dev/null | while read -r img; do name=$(echo "$img" | sed 's/:.*//; s|.*/||') ver=$(echo "$img" | grep -o ':.*' | tr -d ':') [ -z "$ver" ] && ver="latest" printf '%s\t%s\tdocker\n' "$name" "$ver" done fi