Files
2026-09-18 12:24:49 +02:00

106 lines
3.0 KiB
Nix

# 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/&/\&amp;/g' \
-e 's/</\&lt;/g' \
-e 's/>/\&gt;/g' \
/tmp/vscode-modernized-inline.css)"
inject="
<!-- VS Code Modernized - Nix injected -->
<style id=\"vscode-modernized-nix\">
$css
</style>
<!-- /VS Code Modernized - Nix injected -->
"
substituteInPlace "$workbench" \
--replace-fail '</html>' "$inject
</html>"
)
'';
});
in
{
vscode-modernized = injectModernized prev.vscode;
}