1
0
Fork 0
mirror of https://codeberg.org/Mo8it/dotfiles.git synced 2024-10-17 20:52:40 +00:00
dotfiles/.scripts/fetch_installed_packages.py

132 lines
3.4 KiB
Python
Raw Normal View History

2022-09-24 19:45:26 +00:00
#!/usr/bin/env python3
2022-08-14 00:56:14 +00:00
import json
2022-05-14 00:15:58 +00:00
import re
2022-05-04 20:45:52 +00:00
import subprocess
from os import environ
from pathlib import Path
2022-05-04 20:45:52 +00:00
def run(command, **kwargs):
return subprocess.run(command, shell=True, check=True, **kwargs)
def cap_run(command, **kwargs):
return run(
command, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True, **kwargs
2022-05-14 00:15:58 +00:00
).stdout.strip()
def rpm_ostree_packages(output_dir):
2022-05-04 20:45:52 +00:00
out = cap_run("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"]
2022-07-01 21:33:45 +00:00
file = output_dir / "rpm-ostree.sh"
with file.open("w") as f:
2022-07-01 21:33:45 +00:00
f.write("rpm-ostree override remove")
for removal in removals:
f.write(" " + removal)
f.write("\nrpm-ostree install")
for addition in additions:
f.write(" " + addition)
def flatpak_packages(output_dir):
out = cap_run("flatpak list --app --columns=application")
apps = out.split()
file = output_dir / "flatpak.sh"
with file.open("w") as f:
f.write("flatpak install")
for app in apps:
f.write(" " + app)
2022-05-04 20:45:52 +00:00
2022-05-14 00:15:58 +00:00
def cargo_packages(output_dir):
2022-06-14 16:09:47 +00:00
out = cap_run("cargo install --list")
2022-05-14 00:15:58 +00:00
pattern = r"(.+) .+:.*"
crates = re.findall(pattern, out)
2022-07-01 21:33:45 +00:00
file = output_dir / "cargo.sh"
2022-05-14 00:15:58 +00:00
with file.open("w") as f:
2022-07-01 21:33:45 +00:00
f.write("cargo install")
2022-05-14 00:15:58 +00:00
for crate in crates:
2022-07-01 21:33:45 +00:00
f.write(" " + crate)
2022-05-14 00:15:58 +00:00
2022-06-30 02:26:32 +00:00
def npm_packages(output_dir):
out = cap_run("npm list --json --location=global")
json_out = json.loads(out)
deps = json_out["dependencies"].keys()
2022-07-01 21:33:45 +00:00
deps = [dep for dep in deps if dep != "npm"]
2022-06-30 02:26:32 +00:00
2022-07-01 21:33:45 +00:00
file = output_dir / "npm.sh"
2022-06-30 02:26:32 +00:00
with file.open("w") as f:
2022-07-01 21:33:45 +00:00
f.write("npm config set prefix '~/.npm-global'\n")
f.write("npm install --location=global npm\n")
f.write("~/.npm-global/bin/npm install --location=global")
2022-06-30 02:26:32 +00:00
for dep in deps:
2022-07-01 21:33:45 +00:00
f.write(" " + dep)
2022-06-30 02:26:32 +00:00
def pipx_packages(output_dir):
2022-05-04 20:45:52 +00:00
out = cap_run("pipx list --json")
json_out = json.loads(out)
venvs = json_out["venvs"]
packages = []
2022-07-01 21:33:45 +00:00
injections = {}
for ind, venv_key in enumerate(venvs.keys()):
metadata = venvs[venv_key]["metadata"]
2022-07-01 21:33:45 +00:00
package = metadata["main_package"]["package_or_url"]
packages.append(package)
package_injections = metadata["injected_packages"].keys()
if len(package_injections) > 0:
injections[package] = package_injections
2022-07-01 21:33:45 +00:00
file = output_dir / "pipx.sh"
with file.open("w") as f:
2022-07-01 21:33:45 +00:00
for package in packages:
f.write(f"pipx install {package}\n")
f.write("\n")
for package in injections.keys():
for injection in injections[package]:
f.write(f"pipx inject {package} {injection}\n")
2022-05-04 20:45:52 +00:00
2022-05-14 00:15:58 +00:00
def main():
output_dir = Path(f"{environ['HOME']}/bk/installed_packages_info")
output_dir.mkdir(parents=True, exist_ok=True)
rpm_ostree_packages(output_dir)
2022-07-01 21:33:45 +00:00
flatpak_packages(output_dir)
2022-05-14 00:15:58 +00:00
pipx_packages(output_dir)
cargo_packages(output_dir)
2022-11-08 17:25:32 +00:00
# npm_packages(output_dir)
2022-06-30 02:26:32 +00:00
2022-05-14 00:15:58 +00:00
if __name__ == "__main__":
main()