packages: Add a sandboxed discord package
This commit is contained in:
parent
ed430bcf54
commit
2114a4fc94
@ -54,7 +54,7 @@ in
|
||||
};
|
||||
|
||||
# We don't tolerate non-free software, except for Steam and Linux firmware
|
||||
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "firmwareLinuxNonfree" "steam" "steam-original" "steam-runtime"];
|
||||
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "firmwareLinuxNonfree" "steam" "steam-original" "steam-runtime" "discord" ];
|
||||
|
||||
services = {
|
||||
connman = {
|
||||
|
@ -91,6 +91,7 @@
|
||||
evdev-proxy # Custom package
|
||||
vfio-isolate # Custom Package
|
||||
steam
|
||||
discord-wrapper
|
||||
];
|
||||
|
||||
sessionVariables = {
|
||||
|
@ -0,0 +1,41 @@
|
||||
{
|
||||
lib, stdenv, pkgs
|
||||
, extraStartupArgs ? ""
|
||||
}:
|
||||
|
||||
pkgs.discord.overrideAttrs (old: let
|
||||
asar = pkgs.nodePackages.asar;
|
||||
gtk3 = pkgs.gtk3;
|
||||
binaryName = "Discord";
|
||||
system-electron = "$out/opt/${binaryName}/system-electron.sh";
|
||||
in {
|
||||
nativeBuildInputs = with pkgs; old.nativeBuildInputs ++ [ electron asar ];
|
||||
buildPhase = ''
|
||||
${asar}/bin/asar e resources/app.asar resources/app
|
||||
rm resources/app.asar
|
||||
sed -i "s|process.resourcesPath|'$out/opt/${binaryName}/resources'|" resources/app/app_bootstrap/buildInfo.js
|
||||
sed -i "s|exeDir,|'$out/usr/share/pixmaps',|" resources/app/app_bootstrap/autoStart/linux.js
|
||||
${asar}/bin/asar p resources/app resources/app.asar --unpack-dir '**'
|
||||
rm -rf resources/app
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out/{bin,opt/${binaryName},share/pixmaps}
|
||||
mv * $out/opt/${binaryName}
|
||||
echo "#!/bin/sh" > ${system-electron}
|
||||
echo "exec ${pkgs.electron}/bin/electron $out/opt/${binaryName}/resources/app.asar ${extraStartupArgs}" >> ${system-electron}
|
||||
chmod +x ${system-electron}
|
||||
chmod +x $out/opt/${binaryName}/${binaryName}
|
||||
patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker} \
|
||||
$out/opt/${binaryName}/${binaryName}
|
||||
wrapProgram ${system-electron} \
|
||||
"''${gappsWrapperArgs[@]}" \
|
||||
--prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
|
||||
--prefix LD_LIBRARY_PATH : ${old.libPath}:$out/opt/${binaryName}
|
||||
ln -s ${system-electron} $out/bin/${binaryName}
|
||||
# Without || true the install would fail on case-insensitive filesystems
|
||||
ln -s ${system-electron} $out/bin/${lib.strings.toLower binaryName} || true
|
||||
ln -s $out/opt/${binaryName}/discord.png $out/share/pixmaps/${old.pname}.png
|
||||
ln -s "${old.desktopItem}/share/applications" $out/share/
|
||||
'';
|
||||
desktopItem = null;
|
||||
})
|
@ -0,0 +1,11 @@
|
||||
{ stdenv, lib, makeDesktopItem, discord }:
|
||||
|
||||
makeDesktopItem {
|
||||
name = "Discord";
|
||||
exec = "${discord}/bin/Discord";
|
||||
icon = "discord";
|
||||
comment = "All-in-one voice and text chat for gamers that's free, secure, and works on both your desktop and phone.";
|
||||
genericName = "Internet Messenger";
|
||||
desktopName = "Discord";
|
||||
categories = "Network;InstantMessaging;";
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
{ writeScript, runtimeShell, buildFHSUserEnvBubblewrap, discord }:
|
||||
|
||||
buildFHSUserEnvBubblewrap {
|
||||
name = "discord";
|
||||
runScript = ''
|
||||
#!${runtimeShell}
|
||||
exec ${discord}/bin/Discord $@
|
||||
'';
|
||||
|
||||
specifyHomeDirs = true;
|
||||
mountInHome = ".config/discord";
|
||||
additionalBlacklist = [ "/mnt" ];
|
||||
chdirTo = "/home/$USER";
|
||||
}
|
@ -3,6 +3,16 @@
|
||||
let
|
||||
pySmartDL = pkgs.callPackage ./development/python/pySmartDL {};
|
||||
cfscrape = pkgs.callPackage ./development/python/cfscrape {};
|
||||
buildFHSUserEnvBubblewrap = pkgs.callPackage ./build-support/build-fhs-userenv-bubblewrap {};
|
||||
discord-system-electron = pkgs.callPackage ./applications/networking/instant-messengers/discord {
|
||||
# Wayland
|
||||
# NOTE: electron under Wayland has no window titlebars
|
||||
#extraStartupArgs = "--enable-features=UseOzonePlatform --ozone-platform=wayland";
|
||||
};
|
||||
discord-system-electron-wrapped = pkgs.callPackage ./applications/networking/instant-messengers/discord/wrapped.nix {
|
||||
buildFHSUserEnvBubblewrap = buildFHSUserEnvBubblewrap;
|
||||
discord = discord-system-electron;
|
||||
};
|
||||
in {
|
||||
gamemode = pkgs.callPackage ./tools/games/gamemode { };
|
||||
key-mapper = pkgs.callPackage ./tools/games/key-mapper {};
|
||||
@ -24,4 +34,9 @@ in {
|
||||
pySmartDL = pySmartDL;
|
||||
cfscrape = cfscrape;
|
||||
};
|
||||
discord-system-electron = discord-system-electron;
|
||||
discord-system-electron-wrapped = discord-system-electron-wrapped;
|
||||
discord-wrapper = pkgs.callPackage ./applications/networking/instant-messengers/discord/desktop.nix {
|
||||
discord = discord-system-electron-wrapped;
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user