VS Code di Home : instalasi lokal dan penyesuaian font tanpa sudo
Diterbitkan 17 April 2026
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 :
-
Ctrl+Shift+P→ mengetikAktifkan CSS dan JS kustom -
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 |
|---|---|---|
|
|
Teks lebih besar tetapi baris yang tumpang tindih |
|
|
Tidak ada efek (mengganti JS) |
|
|
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 :
-
Unduh versi terbaru yang stabil
-
Periksa apakah versi berbeda dari versi saat ini
-
Simpan instalasi saat ini (berlabel waktu) di`~/apps/vscode-backup/`
-
Ganti folder instalasi
-
Terapkan kembalipatch CSS menu utama
-
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? |
|---|---|---|
|
Instalasi IDE |
Tidak (diganti) |
|
CSS dari workbench (menu, dropdown) |
Tidak (dipatch ulang oleh skrip) |
|
Checksums integritas |
Tidak (dibersihkan kembali oleh skrip) |
|
Skrip pembaruan otomatis |
Ya |
|
Pengaturan pengguna (fontSize, custom CSS) |
Ya |
|
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]