waktu membaca : 8 minutes

Mengapa menginstal VS Code di`/opt`atau via`apt`ketika kita dapat meletakkannya di rumah dan mengubah IDE kita menjadi taman bermain tanpa pernah mengetik`sudo`?Berikut adalah cerita tentang pemasangan lokal diikuti dengan pertempuran sengit untuk memperbesar font menu dan penjelajah file.

tok

[]

Gambaran Umum Jalur

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

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

package "Beranda Pengguna (~)" #LightGreen {
    package "~/apps/" {
        component "VS Code
(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
(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
  Installation dans le home
  = contrôle total sans sudo
end note
@enduml

Mengapa : VS Code di Home

Masalah dengan instalasi sistem

VS Code terpasang melalui`apt`, dnf`atau di/opt`Mengunci file aplikasi di balik hak root. Setiap modifikasi pada CSS asli, dari`product.json`atau folder instalasi membutuhkan`sudo`.

Namun, ketika menggunakanopencode(tool CLI untuk mengendalikan sebuah LLM pada kode-nya), agen tersebut perlu bisa :

  • Menulis dalam file konfigurasi (~/.config/Code/User/settings.json) — ini, itu sudah berada di rumah

  • Ubah aset IDE (CSS workbench,product.json) untuk kustomisasi tingkat lanjut — ini diblokir tanpa sudo

Solusi: instalasi lokal

Kami mengunduh arsip tarball resmi dan mengekstraknya langsung ke`~/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

Biner kemudian berada di`~/apps/VSCode-linux-x64/bin/code`. Tidak ada`sudo` tidak diperlukan untuk membaca, mengedit, atau mengganti apa pun file di bawah`~/apps/VSCode-linux-x64/`.

keuntungan konkret

@startuml
skinparam backgroundColor #FEFEFE

rectangle "Instalasi Sistem
(/opt, apt, dnf)" #LightCoral {
    card "VS Code kepemilikan root" {
        [CSS du workbench : sudo requis]
        [product.json : sudo requis]
        [Dossier d'install : non modifiable]
    }
}

rectangle "Instalasi Rumah\n(~/apps)" #LightGreen {
    card "VS Code properti pengguna" {
        [CSS du workbench : libre]
        [product.json : libre]
        [Dossier d'install : libre]
        [Script update maison]
    }
}

"Instalasi Sistem
(/opt, apt, dnf)" -right-> "Instalasi Rumah\n(~/apps)" : **Non, merci**\nJe prends le home

note bottom of "Instalasi Rumah\n(~/apps)"
  L'agent opencode+LLM peut
  modifier les fichiers de l'IDE
  sans aucune élévation de privilèges
end note
@enduml
Kelebihan detail

Tidak ada sudo

Semua file IDE milik pengguna

Modifikasi langsung CSS

Kita bisa patch`workbench.desktop.main.css`tanpa peningkatan hak istimewa

Skrip pembaruan rumah

Skrip shell sederhana mengunduh, mengganti, dan melakukan patch ulang secara otomatis

Isolasi

Installasi sistem tidak tercemar ; rollback = hapus folder

Sesuaikan font menu utama

Temukan

Font default menu utama (File, Edit, View…​) dan dropdown terlalu kecil. VS Code tidak menawarkan pengaturan apa pun untuk mengubahnya.

Tekniknya: patch CSS langsung

Menambahkan CSS ke akhir file`workbench.desktop.main.css`:

@startuml
skinparam backgroundColor #FEFEFE
autonumber

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

== Patch CSS ==
dev -> css : Ajouter règles font-size\n(.menubar-menu-title, etc.)
dev -> vscode : Redémarrer VS Code
vscode -> vscode : Charge le CSS patché
vscode --> dev : Menus et dropdowns en 23px/22px ✓

== Suppression warning ==
vscode --> dev : ⚠️ "Instalasi Anda rusak"
dev -> product : Supprimer clé "checksums"\n(python3 -c ...)
dev -> vscode : Redémarrer VS Code
vscode --> dev : Plus de warning ✓

note over css, product
  Deux fichiers dans ~/apps/
  = modifiables sans 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

Hapus peringatan integritas

VS Code mendeteksi perubahan pada file-nya dan menampilkan banner "Your installation is corrupt". Untuk menghindarinya, kita menghapus checksum dari`product.json`</think> </think>

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)

Setelah reboot, tidak ada lagi peringatan dan menu akhirnya dapat dibaca.

Menyesuaikan font panel Explorer — pertarungan

Percobaan 1 : sebuah parameter yang tidak ada

Mencoba terlebih dahulu parameter bawaan`workbench.tree.fontSize`dalam`settings.json` :

{
    "workbench.tree.fontSize": 20
}

Hasil :tidak ada efek. Parameter ini tidak ada di VS Code. Bukti bahwa parameter yang tidak dikenali diabaikan diam-diam.

Percobaan 2 : ekstensi Custom CSS and JS Loader

Menginstal ekstensi`be5invis.vscode-custom-css`:

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

Kami membuat file CSS di`~/.vscode-custom-css/custom.css`avec des sélecteurs ciblant les éléments de l’explorateur :

.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;
}

Dan kami mereferensikan file ini di pengaturan :

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

Hasil :perubahan tidak berlaku.

Jebakan: Anda harus mengaktifkan ekstensi setiap kali

Dokumentasi ekstensi tidak banyak memberikan informasi tentang poin penting ini : setelah setiap modifikasi CSS custom, harusperlumenjalankan perintah dari palet :

  1. Ctrl+Shift+P→ mengetikAktifkan CSS dan JS kustom

  2. VS Code meminta restart → terima

Tanpa langkah ini, CSS tidak pernah di‑injeksi ke IDE.

Percobaan 3 : garis-garis saling tumpang tindih

Meski dengan`font-size: 22px` et line-height: 36px, huruf dengan jambangan (g, p, f, b) meluap ke baris sebelah. Kita mencoba menambahkan`height` et min-height:

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

Hasil :tidak ada perubahan. VS Code menghitung tinggi baris dalam JavaScript dan meng-override nilai CSS.

Solusi: zoom pada kontainer induk

@startuml
skinparam backgroundColor #FEFEFE

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

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

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

rectangle "Solusi
zoom pada kontainer induk" #LightGreen {
    card ".monaco-list-rows { zoom: 1.25 }" as t4 {
        [Texte + espacement\nproportionnels]
        [Layout JS respecté]
        [✓ Résultat conforme]
    }
}

t1 -down-> t2 : Pas de paramètre ?\nOn essaie le CSS
t2 -down-> t3 : Lignes superposées ?\nOn force la hauteur
t3 -down-> t4 : Override JS ?\nOn utilise zoom

@enduml

Alih-alih melawan layout JavaScript, kita menggunakan properti`zoom`pada kontainer baris :

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

`zoom`memperbesar secara seragam rendering kontainer — teks dan spasi — tanpa merusak layout yang dihitung oleh mesin JavaScript VS Code. Faktor 1,25 sesuai dengan perkiraan transisi dari 13px menjadi 16px.

Hasil :nama file akhirnya dapat dibaca, baris dengan spasi yang tepat.

Ringkasan selector dan apa yang berfungsi

pendekatan CSS Hasil

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

font-size: 22px !important

Teks lebih besar tetapi baris yang tumpang tindih

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

line-height: 36px; height: 36px

Tidak ada efek (mengganti JS)

zoom`pada.monaco-list-rows`

zoom: 1.25

Berhasil — teks + spasi proporsional

Skrip pembaruan otomatis

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor "Pengembang
atau cron" as dev
participant "vscode-update.sh" as script
participant "vscode tarball\n(code.visualstudio.com)" as remote
participant "~/apps/
VSCode-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 : Lire version courante
script -> remote : wget dernière version
script -> script : Comparer versions

alt Version identique
    script --> dev : "Sudah terkini!"
else Nouvelle version
    script -> backup : Sauvegarder installation courante\n(horodatée)
    script -> local : rm -rf ancienne installation
    script -> local : mv nouvelle installation
    script -> css : Ajouter patch CSS\n(menubar 23px, dropdown 22px)
    script -> product : Supprimer checksums\n(python3)
    script --> dev : "Pembaruan selesai\n1.xx.yy → 1.zz.ww"
end note
@enduml

Masalah

Ketika VS Code memperbarui, ia mengganti folder instalasi danHapus semua patch CSS. Harus mengaplikasikan ulang perubahan secara manual setiap kali.

Skrip `vscode-update.sh

Kita menciptakan`~/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 ==="

Skrip :

  1. Unduh versi terbaru yang stabil

  2. Periksa apakah versi berbeda dari versi saat ini

  3. Simpan instalasi saat ini (berlabel waktu) di`~/apps/vscode-backup/`

  4. Ganti folder instalasi

  5. Terapkan kembalipatch CSS menu utama

  6. Hapus checksums de `product.json`untuk menghindari peringatan integritas

Catatan: Kustomisasi panel Explorer melalui ekstensi Custom CSS dan file`~/.vscode-custom-css/custom.css`mereka bertahan terhadap pembaruan karena mereka berada di luar folder instalasi

Berkas yang terlibat — gambaran umum

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

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

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

rectangle "Kustomisasi Persisten
(~/.vscode-custom-css/)" #SkyBlue {
    component "custom.css
(zoom: 1.25)" as customcss #SkyBlue
}

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

script ..> css : Re-patch après MAJ
script ..> product : Supprime checksums\naprès MAJ
settings --> customcss : Référence via\nvscode_custom_css.imports
extensions ..> css : Custom CSS Loader\ninjecte custom.css

note bottom of css
  **Ne survit pas** aux mises à jour
  Re-patché par le script
end note

note bottom of customcss
  **Survit** aux mises à jour
  Vit hors du dossier d'installation
end note

note bottom of settings
  **Survit** aux mises à jour
  Vit dans ~/.config/
end note
@enduml
Jalan peran Tetap bertahan setelah update?

~/apps/VSCode-linux-x64/

Instalasi IDE

Tidak (diganti)

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

CSS dari workbench (menu, dropdown)

Tidak (dipatch ulang oleh skrip)

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

Checksums integritas

Tidak (dibersihkan kembali oleh skrip)

~/apps/vscode-update.sh

Skrip pembaruan otomatis

Ya

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

Pengaturan pengguna (fontSize, custom CSS)

Ya

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

CSS khusus untuk Explorer (zoom)

Ya

Pelajaran yang dipelajari

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

rectangle "**Instalasi lokal**\n di rumah" as install #LightGreen {
    card "Tidak ada sudo\n untuk mengubah CSS/config" as i1
    card "opencode+LLM dapat
 mengubah semuanya" as i2
    card "Rollback = memulihkan
 cadangan berlabel waktu" as i3
}

rectangle "**Kustomisasi CSS**
zoom vs ukuran font" as css #LightYellow {
    card "zoom > font-size\nfor component list" as c1
    card "Override tata letak JS
tinggi/line-height" as c2
    card "Extension Custom CSS
memerlukan aktivasi
manual (Ctrl+Shift+P)" as c3
}

rectangle "**Otomatisasi**
skrip pembaruan" as auto #LightCoral {
    card "Re-patch CSS setelah\n setiap pembaruan" as a1
    card "Menghapus checksums\n product.json" as a2
    card "Backup berstempel waktu
 sebelum penggantian" as a3
}

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

note top of install
  Contrôle total sans élévation
  de privilèges
end note

note top of auto
  Sans script, chaque MAJ
  efface les patches CSS
end note
@enduml

Penginstalan di home membebaskan semua

Sebuah instalasi lokal di`~/apps`memberi kontrol penuh atas VS Code :

  • Tidak`sudo`untuk mengubah CSS atau konfigurasi

  • Agent opencode+LLM dapat menulis ke file konfigurasi dan aset IDE

  • Rollback sederhana: memulihkan cadangan berstempel waktu

zoom` > font-size untuk komponen daftar

VS Code mengontrol tinggi baris melalui JavaScript. Ubah`font-size`Tidak dapat menyentuh tinggi yang dialokasikan oleh mesin layout menghasilkan teks yang meluap. Properti`zoom`pada kontainer induk memperbesar semuanya secara proporsional dan mengatasi masalah ini

Ekstensi Custom CSS memerlukan aktivasi eksplisit

Ini bukan parameter "set and forget". Setiap modifikasi pada file CSS custom memerlukan menjalankan ulang "Enable Custom CSS and JS" dari palet perintah (Ctrl+Shift+P).

Skrip pembaruan diperlukan

Tanpa skrip, setiap pembaruan VS Code menghapus patch CSS dari workbench. Skrip`vscode-update.sh`mengotomatisasi pengunduhan, penggantian, re-patch, dan pembersihan checksum.

Referensi cepat

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

  • Pemuatan CSS dan JS Kustom Ekstensi :`be5invis.vscode-custom-css`

  • Masalah VS Code yang meminta pengaturan asli untuk font Explorer :https://github.com/microsoft/vscode/issues/149[github.com/microsoft/vscode#149]

Artikel terkait