vscod{e,ium}: Add fhs passthru
This commit is contained in:
parent
73a0b6c826
commit
9bd292c929
@ -1,7 +1,8 @@
|
|||||||
{ stdenv, lib, makeDesktopItem
|
{ stdenv, lib, makeDesktopItem
|
||||||
, unzip, libsecret, libXScrnSaver, libxshmfence, wrapGAppsHook
|
, unzip, libsecret, libXScrnSaver, libxshmfence, wrapGAppsHook
|
||||||
, gtk2, atomEnv, at-spi2-atk, autoPatchelfHook
|
, gtk2, atomEnv, at-spi2-atk, autoPatchelfHook
|
||||||
, systemd, fontconfig, libdbusmenu
|
, systemd, fontconfig, libdbusmenu, buildFHSUserEnvBubblewrap
|
||||||
|
, writeShellScriptBin
|
||||||
|
|
||||||
# Populate passthru.tests
|
# Populate passthru.tests
|
||||||
, tests
|
, tests
|
||||||
@ -13,13 +14,14 @@
|
|||||||
|
|
||||||
let
|
let
|
||||||
inherit (stdenv.hostPlatform) system;
|
inherit (stdenv.hostPlatform) system;
|
||||||
in
|
unwrapped = stdenv.mkDerivation {
|
||||||
stdenv.mkDerivation {
|
|
||||||
|
|
||||||
inherit pname version src sourceRoot;
|
inherit pname version src sourceRoot;
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
inherit executableName tests;
|
inherit executableName tests;
|
||||||
|
fhs = fhs {};
|
||||||
|
fhsWithPackages = f: fhs { additionalPkgs = f; };
|
||||||
};
|
};
|
||||||
|
|
||||||
desktopItem = makeDesktopItem {
|
desktopItem = makeDesktopItem {
|
||||||
@ -97,4 +99,59 @@ in
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
inherit meta;
|
inherit meta;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
# Vscode and variants allow for users to download and use extensions
|
||||||
|
# which often include the usage of pre-built binaries.
|
||||||
|
# This has been an on-going painpoint for many users, as
|
||||||
|
# a full extension update cycle has to be done through nixpkgs
|
||||||
|
# in order to create or update extensions.
|
||||||
|
# See: #83288 #91179 #73810 #41189
|
||||||
|
#
|
||||||
|
# buildFHSUserEnv allows for users to use the existing vscode
|
||||||
|
# extension tooling without significant pain.
|
||||||
|
fhs = { additionalPkgs ? pkgs: [] }: buildFHSUserEnvBubblewrap {
|
||||||
|
# also determines the name of the wrapped command
|
||||||
|
name = executableName;
|
||||||
|
|
||||||
|
# additional libraries which are commonly needed for extensions
|
||||||
|
targetPkgs = pkgs: (with pkgs; [
|
||||||
|
# ld-linux-x86-64-linux.so.2 and others
|
||||||
|
glibc
|
||||||
|
|
||||||
|
# dotnet
|
||||||
|
curl
|
||||||
|
icu
|
||||||
|
libunwind
|
||||||
|
libuuid
|
||||||
|
openssl
|
||||||
|
zlib
|
||||||
|
|
||||||
|
# mono
|
||||||
|
krb5
|
||||||
|
]) ++ additionalPkgs pkgs;
|
||||||
|
|
||||||
|
# restore desktop item icons
|
||||||
|
extraInstallCommands = ''
|
||||||
|
mkdir -p $out/share/applications
|
||||||
|
for item in ${unwrapped}/share/applications/*.desktop; do
|
||||||
|
ln -s $item $out/share/applications/
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
runScript = "${unwrapped}/bin/${executableName}";
|
||||||
|
|
||||||
|
# vscode likes to kill the parent so that the
|
||||||
|
# gui application isn't attached to the terminal session
|
||||||
|
dieWithParent = false;
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit executableName;
|
||||||
|
inherit (unwrapped) pname version; # for home-manager module
|
||||||
|
};
|
||||||
|
|
||||||
|
inherit meta;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
unwrapped
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user