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 .files import Files
from .fish import Fish from .fish import Fish
from .pacman import Pacman from .pacman import Pacman
from .vscode import Vscode
__all__: list[str] = [ __all__: list[str] = [
"Echo", "Echo",
"Files", "Files",
"Fish", "Fish",
"Pacman", "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)