|
|
|
@ -1,7 +1,8 @@ |
|
|
|
|
{ stdenv, lib, makeDesktopItem |
|
|
|
|
, unzip, libsecret, libXScrnSaver, libxshmfence, wrapGAppsHook |
|
|
|
|
, gtk2, atomEnv, at-spi2-atk, autoPatchelfHook |
|
|
|
|
, systemd, fontconfig, libdbusmenu |
|
|
|
|
, systemd, fontconfig, libdbusmenu, buildFHSUserEnvBubblewrap |
|
|
|
|
, writeShellScriptBin |
|
|
|
|
|
|
|
|
|
# Populate passthru.tests |
|
|
|
|
, tests |
|
|
|
@ -13,13 +14,14 @@ |
|
|
|
|
|
|
|
|
|
let |
|
|
|
|
inherit (stdenv.hostPlatform) system; |
|
|
|
|
in |
|
|
|
|
stdenv.mkDerivation { |
|
|
|
|
unwrapped = stdenv.mkDerivation { |
|
|
|
|
|
|
|
|
|
inherit pname version src sourceRoot; |
|
|
|
|
|
|
|
|
|
passthru = { |
|
|
|
|
inherit executableName tests; |
|
|
|
|
fhs = fhs {}; |
|
|
|
|
fhsWithPackages = f: fhs { additionalPkgs = f; }; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
desktopItem = makeDesktopItem { |
|
|
|
@ -97,4 +99,59 @@ in |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|