dotfiles/common/users/homeModules/vscode/overlays.nix

63 lines
2.6 KiB
Nix
Raw Normal View History

2024-11-22 00:08:00 -05:00
{ nixpkgs, pkgs, ... }:
{
nixpkgs.overlays = [
(final: prev: {
vscode-insider = (
(prev.vscode.override {
isInsiders = true;
}).overrideAttrs
(
_: old:
let
sourceExecutableName = "code-insiders";
executableName = "code-insiders";
in
{
pname = "code-insiders";
installPhase = ''
runHook preInstall
mkdir -p "$out/lib/vscode" "$out/bin"
cp -r ./* "$out/lib/vscode"
mv "$out/lib/vscode/bin/code" "$out/lib/vscode/bin/${sourceExecutableName}" # ME
mv "$out/lib/vscode/code" "$out/lib/vscode/${sourceExecutableName}" # ME
ln -s "$out/lib/vscode/bin/${sourceExecutableName}" "$out/bin/${executableName}"
mkdir -p "$out/share/applications"
ln -s "$desktopItem/share/applications/${executableName}.desktop" "$out/share/applications/${executableName}.desktop"
ln -s "$urlHandlerDesktopItem/share/applications/${executableName}-url-handler.desktop" "$out/share/applications/${executableName}-url-handler.desktop"
# These are named vscode.png, vscode-insiders.png, etc to match the name in upstream *.deb packages.
mkdir -p "$out/share/pixmaps"
cp "$out/lib/vscode/resources/app/resources/linux/code.png" "$out/share/pixmaps/vs${executableName}.png"
# Override the previously determined VSCODE_PATH with the one we know to be correct
sed -i "/ELECTRON=/iVSCODE_PATH='$out/lib/vscode'" "$out/bin/${executableName}"
grep -q "VSCODE_PATH='$out/lib/vscode'" "$out/bin/${executableName}" # check if sed succeeded
# Remove native encryption code, as it derives the key from the executable path which does not work for us.
# The credentials should be stored in a secure keychain already, so the benefit of this is questionable
# in the first place.
rm -rf $out/lib/vscode/resources/app/node_modules/vscode-encrypt
# HOOK
runHook postInstall
'';
postFixup = ''
patchelf \
--add-needed ${pkgs.libglvnd}/lib/libGLESv2.so.2 \
--add-needed ${pkgs.libglvnd}/lib/libGL.so.1 \
--add-needed ${pkgs.libglvnd}/lib/libEGL.so.1 \
$out/lib/vscode/${sourceExecutableName}
'';
meta = old.meta // {
mainProgram = "code-insiders";
};
}
)
);
})
];
}