Add Vscode module

This commit is contained in:
Joscha 2026-01-21 16:00:44 +01:00
parent 97fdbbcdf5
commit fffb532607
2 changed files with 63 additions and 0 deletions

View file

@ -2,10 +2,12 @@ from .echo import Echo
from .files import Files
from .fish import Fish
from .pacman import Pacman
from .vscode import Vscode
__all__: list[str] = [
"Echo",
"Files",
"Fish",
"Pacman",
"Vscode",
]

61
pasch/modules/vscode.py Normal file
View file

@ -0,0 +1,61 @@
from rich.markup import escape
from pasch.file.json import JsonFile
from pasch.modules.files import Files
from pasch.modules.pacman import Pacman
from pasch.orchestrator import Module, Orchestrator
from pasch.util import run_capture, run_execute
class Vscode(Module):
def __init__(
self,
orchestrator: Orchestrator,
files: Files,
pacman: Pacman,
) -> None:
super().__init__(orchestrator)
self._files = files
self._pacman = pacman
self.microsoft = False
self.disable_telemetry = True
self.extensions: set[str] = set()
self.settings = JsonFile()
def install(self, *extensions: str) -> None:
self.extensions.update(extensions)
def configure(self) -> None:
self.settings.tag()
if self.disable_telemetry:
self.settings.set("telemetry.editStats.enabled", False)
self.settings.set("telemetry.feedback.enabled", False)
self.settings.set("telemetry.telemetryLevel", "off")
self.settings.set("update.mode", "none")
if self.microsoft:
self._pacman.install("visual-studio-code-bin")
self._files.add(".config/Code/User/settings.json", self.settings)
else:
self._pacman.install("code")
self._files.add(".config/Code - OSS/User/settings.json", self.settings)
def execute(self) -> None:
installed = set(run_capture("code", "--list-extensions").splitlines())
to_install = self.extensions - installed
to_uninstall = installed - self.extensions
for package in sorted(to_install):
self.c.print(f"[bold green]+[/] {escape(package)}")
for package in sorted(to_uninstall):
self.c.print(f"[bold red]-[/] {escape(package)}")
for extension in sorted(to_install):
run_execute("code", "--install-extension", extension)
for extension in sorted(to_uninstall):
run_execute("code", "--uninstall-extension", extension)