#!/usr/bin/env xonsh import os import json from pathlib import Path def rpm_ostree_packages(output_dir): out = $(rpm-ostree status --json) json_out = json.loads(out) deployments = json_out["deployments"] booted_deployment = deployments[0] if not booted_deployment["booted"]: for depl in deployments: if depl["booted"]: booted_deployment = depl break removals = booted_deployment["requested-base-removals"] additions = booted_deployment["requested-packages"] file = output_dir / "rpm-ostree.json" with file.open("w") as f: dict = {"Removed": removals, "Added": additions} json.dump(dict, f, indent=4) def npm_packages(output_dir): out = $(npm list --json -g) json_out = json.loads(out) deps = json_out["dependencies"].keys() file = output_dir / "npm.txt" with file.open("w") as f: for dep in deps: f.write(dep + "\n") def pipx_packages(output_dir): out = $(pipx list --json) json_out = json.loads(out) venvs = json_out["venvs"] packages = [] injections = [] for ind, venv_key in enumerate(venvs.keys()): metadata = venvs[venv_key]["metadata"] packages.append(metadata["main_package"]["package_or_url"]) injections.append(list(metadata["injected_packages"].keys())) file = output_dir / "pipx.json" with file.open("w") as f: dict = {p: i for p, i in zip(packages, injections)} json.dump(dict, f, indent = 4) output_dir = Path(f"{$HOME}/bk/installed_packages_info") output_dir.mkdir(parents=True, exist_ok=True) rpm_ostree_packages(output_dir) flatpak list --app --columns=name,application,origin >@(output_dir)/flatpak.csv cargo install --list | rg '(.+) .+:.*' -r '$1' >@(output_dir)/cargo.txt pipx_packages(output_dir) npm_packages(output_dir)