# overlays/vscode-modernized/default.nix { ... }: final: prev: let modernized = prev.fetchFromGitHub { owner = "Sukarth"; repo = "VS-Code-Modernized"; # Pin this once working. rev = "main"; hash = "sha256-QSmdmCoF2L42ZUxYpJXq6REOdNObK9DBI6c0GEQ32rQ="; }; injectModernized = vscodePkg: vscodePkg.overrideAttrs (old: { postInstall = (old.postInstall or "") + '' ( set -euo pipefail candidates=( "$out/lib/vscode/resources/app/out/vs/code/electron-sandbox/workbench/workbench.html" "$out/lib/vscode/resources/app/out/vs/code/electron-sandbox/workbench/workbench.esm.html" "$out/lib/vscode/resources/app/out/vs/code/electron-browser/workbench/workbench.html" "$out/lib/vscode/resources/app/out/vs/code/electron-browser/workbench/workbench.esm.html" ) workbench="" for candidate in "''${candidates[@]}"; do if [ -f "$candidate" ]; then workbench="$candidate" break fi done if [ -z "$workbench" ]; then echo "VS Code Modernized: could not find workbench.html" >&2 find "$out/lib/vscode/resources/app/out/vs" -name 'workbench*.html' -print >&2 || true exit 1 fi # Build one self-contained CSS file. cat > /tmp/vscode-modernized-inline.css <<'EOF' /* VS Code Modernized dynamic settings */ :root { --vscode-modernized-spacing: 0.35rem; --vscode-modernized-border-radius: 0.5rem; --vscode-modernized-tab-spacing: 0.2rem; } EOF cat "${modernized}/styles/styles.css" >> /tmp/vscode-modernized-inline.css # Smoke-test styles. Remove later if you want. cat >> /tmp/vscode-modernized-inline.css <<'EOF' /* Modernized dims inactive icons to 20%; let the theme control contrast instead. */ .monaco-workbench .part.activitybar .monaco-action-bar .action-item.icon:not(.disabled) { opacity: 1; } /* Nix smoke test: these should be very visible */ .monaco-workbench .part.sidebar, .monaco-workbench .part.auxiliarybar, .monaco-workbench .part.panel, .monaco-workbench .editor-group-container, .monaco-workbench .tabs-container, .monaco-workbench .tab, .monaco-workbench .monaco-list-row, .monaco-workbench .quick-input-widget { border-radius: var(--vscode-modernized-border-radius) !important; overflow: hidden !important; } .monaco-workbench .part.sidebar, .monaco-workbench .part.panel, .monaco-workbench .editor-group-container { margin: var(--vscode-modernized-spacing) !important; } EOF css="$(sed \ -e 's/&/\&/g' \ -e 's//\>/g' \ /tmp/vscode-modernized-inline.css)" inject=" " substituteInPlace "$workbench" \ --replace-fail '' "$inject " ) ''; }); in { vscode-modernized = injectModernized prev.vscode; }