leestijd : 8 minutes

Waarom VS Code installeren in`/opt`of via`apt`als je het kunt zetten in jouw home en jouw IDE transformeren tot een speelterrein zonder ooit te typen`sudo`Hier is het verhaal van een lokale installatie, gevolgd door een hardnekkige strijd om de lettertypen in het menu en de bestandsverkenner te vergroten.

Overzicht van het parcours

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

actor Développeur as dev
actor "opencode\n+ LLM" as agent

package "Home Gebruiker (~)" #LightGreen {
    package "~/apps/" {
        component "VS Code\n(tarball)" as vscode #SkyBlue
        component "vscode-update.sh" as script #LightYellow
    }
    package "~/.config/Code/" {
        component "settings.json" as settings #Lavender
    }
    package "~/.vscode-custom-css/" {
        component "custom.css\n(zoom: 1.25)" as customcss #Lavender
    }
}

cloud "code.visualstudio.com" as download

dev --> vscode : Télécharge & installe
dev --> script : Lance mise à jour
script --> download : wget dernière version
script --> vscode : Remplace + re-patch CSS
agent --> settings : Écrit config
agent --> customcss : Écrit zoom CSS
agent --> vscode : Patch workbench CSS

note right of vscode
Installatie in de home
= volledige controle zonder sudo
end note
@enduml

De waarom: VS Code in de Home

Het probleem met de systeeminstallatie

VS Code geïnstalleerd via`apt`, dnf`of in/opt`Vergrendelt de toepassingsbestanden achter root-rechten. Elke wijziging van de native CSS, van`product.json`of de installatiemap vereist`sudo`.

Echter, wanneer men gebruiktopencode(tool CLI om een LLM op zijn code te besturen), de agent heeft de mogelijkheid nodig om :

  • Schrijven in de configuratiebestanden (~/.config/Code/User/settings.json) — dat is al thuis

  • Wijzig de assets van de IDE (CSS van de workbench,product.json) voor de geavanceerde aanpassingen — dat, is geblokkeerd zonder sudo

De oplossing: een lokale installatie

We downloaden de officiële tarball-archief en pakken het direct uit in`~/apps/`:

mkdir -p ~/apps
cd ~/apps
wget "https://code.visualstudio.com/sha/download?build=stable&os=linux-x64" -O vscode.tar.gz
tar -xzf vscode.tar.gz
rm vscode.tar.gz

De binaire bevindt zich dan in`~/apps/VSCode-linux-x64/bin/code`. Geen`sudo`is niet nodig om een bestand te lezen, te bewerken of te vervangen onder`~/apps/VSCode-linux-x64/`.

Concrete voordelen

@startuml
skinparam backgroundColor #FEFEFE

rectangle "Installatie Systeem\n(/opt, apt, dnf)" #LightCoral {
    card "VS Code eigendom van root" {
        [CSS du workbench : sudo requis]
        [product.json : sudo requis]
        [Dossier d'install : non modifiable]
    }
}

rectangle "Installatie Thuis\n(~/apps)" #LightGreen {
    card "VS Code eigendom van de gebruiker" {
        [CSS du workbench : libre]
        [product.json : libre]
        [Dossier d'install : libre]
        [Script update maison]
    }
}

"Installatie Systeem\n(/opt, apt, dnf)" -right-> "Installatie Thuis\n(~/apps)" : **Non, merci**\nJe prends le home

note bottom of "Installatie Thuis\n(~/apps)"
De agent opencode+LLM kan
de bestanden van IDE bewerken
zonder enige verhoging van privileges
end note
@enduml
voordeel detail

Geen sudo

Alle bestanden van de IDE zijn eigendom van de gebruiker

Directe wijziging van CSS

We kunnen patchen`workbench.desktop.main.css`zonder verhoging van privileges

Zelfgemaakt update-script

Een eenvoudig shellscript downloadt, vervangt en repatcht automatisch

Isolatie

De systeeminstallatie is niet vervuild ; rollback = de map verwijderen

Aanpassen van het lettertype van het hoofdmenu

De bevinding

Het standaardlettertype van het hoofdmenu (File, Edit, View…​) en van de vervolgkeuzelijsten is te klein. VS Code biedt geen parameter om het te wijzigen.

De techniek: directe CSS-patch

We voegen CSS toe aan het einde van het bestand`workbench.desktop.main.css` :

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor Développeur as dev
participant "workbench.desktop\n.main.css" as css
participant "product.json" as product
participant "VS Code" as vscode

== Patch CSS ==
dev -> css : Voeg regels font-size\n(.menubar-menu-title, etc.)
dev -> vscode : VS Code opnieuw opstarten
vscode -> vscode : Laad het gepatchte CSS
vscode --> dev : Menus en dropdowns op 23px/22px ✓

== Suppression warning ==
vscode --> dev : ⚠️ "Uw installatie is beschadigd"
dev -> product : Supprimer clé "controlsom"\n(python3 -c ...)
dev -> vscode : VS Code opnieuw opstarten
vscode --> dev : Geen waarschuwingen meer ✓

note over css, product
Twee bestanden in ~/apps/
= bewerkbaar zonder sudo
end note
@enduml
CSS_FILE="$HOME/apps/VSCode-linux-x64/resources/app/out/vs/workbench/workbench.desktop.main.css"

cat >> "$CSS_FILE" << 'EOF'
.menubar-menu-title{font-size:23px!important}
.menubar>.menubar-menu-button{font-size:23px!important}
.monaco-menu-option{font-size:22px!important;line-height:34px!important}
.monaco-menu .action-label:not(.codicon){font-size:22px!important}
.menubar-menu-items-holder .monaco-menu .action-item .action-label{font-size:22px!important}
EOF

Verwijder de integriteitswaarschuwing

VS Code detecteert de wijzigingen in zijn bestanden en toont een banner "Your installation is corrupt". Om dit te voorkomen, verwijderen we de checksums van`product.json`:

import json
product_json = "$HOME/apps/VSCode-linux-x64/resources/app/product.json"
with open(product_json, 'r') as f:
    data = json.load(f)
data.pop('checksums', None)
with open(product_json, 'w') as f:
    json.dump(data, f, indent=2)

Na het opnieuw opstarten zijn er geen waarschuwingen meer en zijn de menu’s eindelijk leesbaar.

Het lettertype van het Explorer-venster aanpassen — de strijd

Tentative 1 : een parameter die niet bestaat

We proberen eerst de native parameter`workbench.tree.fontSize`in`settings.json`:

{
    "workbench.tree.fontSize": 20
}

Resultaat :geen effect. Deze instelling bestaat niet in VS Code. Het bewijs dat niet-herkende instellingen stilzwijgend worden genegeerd.

Tentative 2: de extensie Custom CSS and JS Loader

We installeren de extensie`be5invis.vscode-custom-css`:

~/apps/VSCode-linux-x64/bin/code --install-extension be5invis.vscode-custom-css

We maken een CSS-bestand in`~/.vscode-custom-css/custom.css`met selectors gericht op de elementen van de verkenner :

.monaco-tree-rows .monaco-tree-row,
.sidebar .monaco-list-row,
.explorer-viewlet .monaco-list-row,
.monaco-list-row .monaco-icon-label {
    font-size: 22px !important;
    line-height: 36px !important;
}

En we verwijzen naar dit bestand in de instellingen:

{
    "vscode_custom_css.imports": [
        "file:///home/user/.vscode-custom-css/custom.css"
    ]
}

Resultaat :De wijzigingen worden niet toegepast.

De valkuil: je moet de extensie elke keer activeren

De documentatie van de extensie is discreet over dit cruciale punt: na elke wijziging van de custom CSS, moetabsoluutvoer de opdracht uit vanuit het palet :

  1. Ctrl+Shift+P→ typenAangepaste CSS en JS inschakelen

  2. VS Code vraagt een herstart → accepteren

Zonder deze stap wordt de CSS nooit in de IDE geïnjecteerd.

Poging 3: de lijnen overlappen

Zelfs met`font-size: 22px` et line-height: 36px, de letters met een staaf (g, p, f, b) steken uit op de naastgelegen lijnen. We proberen toe te voegen`height` et min-height :

.monaco-list-row {
    height: 36px !important;
    min-height: 36px !important;
}

Resultaat :geen wijziging. VS Code berekent de regelhoogtes in JavaScript en overschrijft de CSS-waarden.

De oplossing: zoom op de oudercontainer

@startuml
skinparam backgroundColor #FEFEFE

rectangle "Poging 1\nParameter bestaat niet" #LightCoral {
    card "workbench.tree.fontSize" as t1 {
        [VS Code ignore le paramètre]
    }
}

rectangle "Poging 2\nCustom CSS + font-size" #LightYellow {
    card ".monaco-list-row { font-size: 22px }" as t2 {
        [Texte plus grand\nmais lignes superposées]
    }
}

rectangle "Poging 3\nfont-size + line-height + height" #LightYellow {
    card "height: 36px !important" as t3 {
        [VS Code override\npar JavaScript]
        [Aucun effet]
    }
}

rectangle "Oplossing\nzoom op bovenliggende container" #LightGreen {
    card ".monaco-list-rows { zoom: 1.25 }" as t4 {
        [Texte + espacement\nproportionnels]
        [Layout JS respecté]
        [✓ Résultat conforme]
    }
}

t1 -down-> t2 : Geen parameter ?\nWe proberen het CSS
t2 -down-> t3 : Overlappende lijnen ?\nMen dwingt de hoogte
t3 -down-> t4 : Override JS ?\nWe gebruiken zoom

@enduml

In plaats van te vechten tegen de JavaScript-layout, wordt de eigenschap gebruikt.`zoom`op de container van de lijnen :

.explorer-viewlet .monaco-list-rows,
.sidebar .monaco-list-rows {
    zoom: 1.25;
}

`zoom`vergroot uniform de rendering van de container — tekst EN spatie — zonder het door JavaScript van VS Code berekende layout te verbreken. De factor 1.25 komt ongeveer overeen met een overgang van 13px naar 16px.

Resultaat :de bestandsnamen zijn eindelijk leesbaar, de regels zijn correct gespatieerd.

Samenvatting van selectors en wat werkt

Benadering CSS Resultaat

font-size`op.monaco-list-row`

font-size: 22px !important

Grotere tekst maar overlappende lijnen

line-height+height`op.monaco-list-row`

line-height: 36px; height: 36px

Geen effect (override JS)

zoom`op.monaco-list-rows`

zoom: 1.25

Geslaagd — tekst + proportionele spatiëring

Het script voor automatische updates

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor "Ontwikkelaar\nof cron" as dev
participant "vscode-update.sh" as script
participant "vscode tarball\n(code.visualstudio.com)" as remote
participant "~/apps/\nVSCode-linux-x64/" as local
participant "~/apps/\nvscode-backup/" as backup
participant "workbench\n.desktop.main.css" as css
participant "product.json" as product

dev -> script : ./vscode-update.sh
script -> local : Lees de huidige versie
script -> remote : wget laatste versie
script -> script : Vergelijk versies

alt Version identique
    script --> dev : "Alles is up-to-date!"
else Nouvelle version
    script -> backup : Back-up huidige installatie\n(gedateerd)
    script -> local : rm -rf oude installatie
    script -> local : mv nieuwe installatie
    script -> css : Voeg patch CSS\n (menubalk 23px, dropdown 22px)
    script -> product : Verwijder checksums\n(python3)
    script --> dev : "Update voltooid\n1.xx.yy → 1.zz.ww"
end note
@enduml

Het probleem

Wanneer VS Code wordt bijgewerkt, vervangt het de installatiemap enWis alle CSS-patches. U moet de wijzigingen elke keer handmatig opnieuw toepassen.

Het script `vscode-update.sh

We maken`~/apps/vscode-update.sh`:

#!/bin/bash
set -e

VSCODE_DIR="$HOME/apps/VSCode-linux-x64"
BACKUP_DIR="$HOME/apps/vscode-backup"
TEMP_DIR="/tmp/vscode-update"

MENUBAR_FONT_SIZE="23px"
DROPDOWN_FONT_SIZE="22px"

echo "=== VS Code Local Updater ==="

CURRENT_VERSION=$("$VSCODE_DIR/bin/code" --version 2>/dev/null | head -1)
echo "Current version: $CURRENT_VERSION"

echo "Downloading latest VS Code..."
mkdir -p "$TEMP_DIR"
wget -q "https://code.visualstudio.com/sha/download?build=stable&os=linux-x64" \
    -O "$TEMP_DIR/vscode.tar.gz"

echo "Extracting..."
mkdir -p "$TEMP_DIR/extracted"
tar -xzf "$TEMP_DIR/vscode.tar.gz" -C "$TEMP_DIR/extracted"

NEW_VERSION=$("$TEMP_DIR/extracted/VSCode-linux-x64/bin/code" \
    --version 2>/dev/null | head -1)
echo "New version: $NEW_VERSION"

if [ "$CURRENT_VERSION" = "$NEW_VERSION" ]; then
    echo "Already up to date!"
    rm -rf "$TEMP_DIR"
    exit 0
fi

echo "Backing up current installation..."
mkdir -p "$BACKUP_DIR"
cp -r "$VSCODE_DIR" "$BACKUP_DIR/VSCode-linux-x64-$(date +%Y%m%d-%H%M%S)"

echo "Updating..."
rm -rf "$VSCODE_DIR"
mv "$TEMP_DIR/extracted/VSCode-linux-x64" "$VSCODE_DIR"
rm -rf "$TEMP_DIR"

CSS_FILE="$VSCODE_DIR/resources/app/out/vs/workbench/workbench.desktop.main.css"
echo "Re-applying custom CSS patch \
    (menubar=${MENUBAR_FONT_SIZE}, dropdown=${DROPDOWN_FONT_SIZE})..."
cat >> "$CSS_FILE" << CSSEOF
.menubar-menu-title{font-size:${MENUBAR_FONT_SIZE}!important}\
.menubar>.menubar-menu-button{font-size:${MENUBAR_FONT_SIZE}!important}\
.monaco-menu-option{font-size:${DROPDOWN_FONT_SIZE}!important;\
line-height:34px!important}\
.monaco-menu .action-label:not(.codicon)\
{font-size:${DROPDOWN_FONT_SIZE}!important}\
.menubar-menu-items-holder .monaco-menu .action-item .action-label\
{font-size:${DROPDOWN_FONT_SIZE}!important}
CSSEOF

PRODUCT_JSON="$VSCODE_DIR/resources/app/product.json"
if [ -f "$PRODUCT_JSON" ]; then
    echo "Removing checksums to prevent integrity warning..."
    python3 -c "
import json
with open('$PRODUCT_JSON','r') as f: data=json.load(f)
data.pop('checksums', None)
with open('$PRODUCT_JSON','w') as f: json.dump(data,f,indent=2)
print('Done.')
"
fi

echo "=== Update complete: $CURRENT_VERSION -> $NEW_VERSION ==="

Het script :

  1. Download de nieuwste stabiele versie

  2. Controleer of de versie verschilt van de huidige

  3. Bewaar de huidige installatie (getimestamp) in`~/apps/vscode-backup/`

  4. Vervang de installatiemap

  5. Opnieuw aanbrengende CSS-patch van het hoofdmenu

  6. Verwijder de checksums de `product.json`om de integriteitswaarschuwing te voorkomen

Aanpassingen van het Verkenner via de Custom CSS-extensie en het bestand`~/.vscode-custom-css/custom.css`Ze overleven updates omdat ze buiten de installatiemap leven.

Betrokken bestanden — overzicht

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

rectangle "Installatie VS Code\n(~/apps/VSCode-linux-x64/)" #LightCoral {
    component "workbench.desktop\n.main.css" as css #LightCoral
    component "product.json" as product #LightCoral
    component "binair\nbin/code" as binary #LightCoral
}

rectangle "Gebruikersconfiguratie\n(~/.config/Code/)" #LightGreen {
    component "settings.json" as settings #LightGreen
    component "extensies/" as extensions #LightGreen
}

rectangle "Persistente aanpassing\n(~/.vscode-custom-css/)" #SkyBlue {
    component "custom.css\n(zoom: 1.25)" as customcss #SkyBlue
}

rectangle "Automatisering\n(~/apps/)" #LightYellow {
    component "vscode-update.sh" as script #LightYellow
    component "vscode-backup/" as backup #LightYellow
}

script ..> css : Opnieuw patchen na MAJ
script ..> product : Verwijder checksums\nna MAJ
settings --> customcss : Verwijzing via\nvscode_custom_css.imports
extensions ..> css : Custom CSS Loader\ninjecteert custom.css

note bottom of css
Leeft niet
Opnieuw gepatcht door het script
end note

note bottom of customcss
Overleeft`aux mises à jour`
Buiten de installatiemap
end note

note bottom of settings
  **Survit** aux mises à jour
  Vit dans ~/.config/
end note
@enduml
Pad Rol Blijft het werken na updates ?

~/apps/VSCode-linux-x64/

Installation van de IDE

Nee (vervangen)

~/apps/VSCode-linux-x64/resources/app/out/vs/workbench/workbench.desktop.main.css

CSS van de workbench (menu, vervolgkeuzelijsten)

Nee (hersteld door het script)

~/apps/VSCode-linux-x64/resources/app/product.json

Integriteitschecksummen

Nee (opnieuw schoongemaakt door het script)

~/apps/vscode-update.sh

Script voor automatische update

Ja

~/.config/Code/User/settings.json

Gebruikersinstellingen (fontSize, aangepaste CSS)

Ja

~/.vscode-custom-css/custom.css

Aangepaste CSS voor de Explorer (zoom)

Ja

Geleerde lessen

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
skinparam ArrowColor #444444

rectangle "**Lokale installatie**\n in de home" as install #LightGreen {
    card "Geen sudo\n om CSS/config te wijzigen" as i1
    card "opencode+LLM kan\n alles wijzigen" as i2
    card "Rollback = herstellen\n van de getimestampte backup" as i3
}

rectangle "**CSS-aanpassing**\n zoom vs font-size" as css #LightYellow {
    card "zoom > font-size\n voor lijstcomponenten" as c1
    card "Layout JS override\n height/line-height" as c2
    card "Custom CSS-extensie\n vereist handmatige\n activering (Ctrl+Shift+P)" as c3
}

rectangle "**Automatisering**\n update-script" as auto #LightCoral {
    card "CSS opnieuw patchen na\n elke update" as a1
    card "Checksums verwijderen\n product.json" as a2
    card "Getimestampte backup\n voor vervanging" as a3
}

install -right-> css : ensuite
css -right-> auto : enfin

note top of install
Volledige controle zonder privilege-escalatie
end note

note top of auto
Zonder script wist elke update
de CSS-patches
end note
@enduml

Installeren in de home geeft alles vrij

Een lokale installatie in`~/apps`geeft volledige controle over VS Code:

  • Geen`sudo`om de CSS of de configuratie aan te passen

  • De opencode+LLM-agent kan schrijven naar de configuratiebestanden en de assets van de IDE

  • Triviale rollback: terugzetten de getijdgestempelde backup

zoom` > font-size voor de lijstcomponenten

VS Code controleert de regelhoogte via JavaScript. Wijzigen`font-size`Niet kunnen aanpassen aan de door de layout-engine toegewezen hoogte levert teksten die overlopen. De eigenschap`zoom`Op de oudercontainer vergroot alles evenredig en omzeilt dit probleem.

De Custom CSS-extensie vereist een expliciete activering.

Dit is geen "set and forget"-parameter. Elke wijziging aan het aangepaste CSS-bestand vereist het opnieuw uitvoeren van "Enable Custom CSS and JS" vanaf de opdrachtpalet (Ctrl+Shift+P).

Een script voor update is onmisbaar

Zonder script verwijdert elke update van VS Code de CSS-patches van het workbench. Het script`vscode-update.sh`automatiseert het downloaden, vervangen, herpatchen en opruimen van checksums

Snelle referenties

  • VS Code downloaden: https://code.visualstudio.com/Download

  • Extensie Custom CSS and JS Loader :`be5invis.vscode-custom-css`

  • VS Code vragend een ingebouwde instelling voor het Explorer-lettertype:https://github.com/microsoft/vscode/issues/149[github.com/microsoft/vscode#149]

Gerelateerde artikelen