diff --git a/.local/bin/codium-extensions b/.local/bin/codium-extensions new file mode 100755 index 0000000..c79ce53 --- /dev/null +++ b/.local/bin/codium-extensions @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 + +import argparse +import pathlib +import subprocess +import typing + + +def main() -> None: + parser = argparse.ArgumentParser(description="Small Tauon remote control CLI") + parser.add_argument( + "action", + choices=["install", "list", "list-saved", "save"], + help="Which action should be performed.", + ) + parser.add_argument( + "-f", + "--file", + help="Use a different file than $HOME/.config/codium-extensions.txt.", + default=pathlib.Path.home().joinpath(".config/codium-extensions.txt"), + ) + args = parser.parse_args() + + if args.action == "install": + print("Installing saved extensions") + for extension in get_saved_extensions(args.file): + subprocess.run(["codium", "--install-extension", extension]) + elif args.action == "list": + print("Listing installed extensions") + print("\n".join(get_installed_extensions())) + elif args.action == "list-saved": + with open(args.file, "r") as file: + print("Listing saved extensions") + print(file.read()) + elif args.action == "save": + with open(args.file, "w") as file: + extensions = get_installed_extensions() + file.writelines("\n".join(extensions)) + print(f"Wrote {len(extensions)} extensions to {args.file}") + + +def get_installed_extensions() -> typing.List[str]: + extensions = subprocess.run( + [ + "codium", + "--list-extensions", + ], + capture_output=True, + check=True, + encoding="utf8", + ) + return extensions.stdout.splitlines() + + +def get_saved_extensions(path: str) -> typing.List[str]: + with open(path, "r") as file: + return file.read().splitlines() + + +if __name__ == "__main__": + main()