66 lines
1.8 KiB
Nix
66 lines
1.8 KiB
Nix
![]() |
{
|
||
|
lib,
|
||
|
newScope,
|
||
|
makeDesktopItem,
|
||
|
writeShellScriptBin,
|
||
|
}:
|
||
|
|
||
|
lib.makeScope newScope (self: {
|
||
|
# Scope-level configuration for adapters
|
||
|
useSessionUnits = true; # use --user units, instead of system units
|
||
|
vmUnitPrefix = "uvm@";
|
||
|
vmSshPrefix = if self.useSessionUnits then "uuvm/" else "uvm/";
|
||
|
vmUser = "user";
|
||
|
waylandProxyUnit = "wayland-proxy.service"; # could be sommelier
|
||
|
oomScoreAdjust = -200;
|
||
|
|
||
|
# Helper scripts
|
||
|
mkRunInVM = vmName: lib.getExe (self.mkRunInVMPkg vmName);
|
||
|
mkRunInVMPkg =
|
||
|
vmName:
|
||
|
writeShellScriptBin "run-in-${vmName}" ''
|
||
|
localArgs=(
|
||
|
${lib.optionalString self.useSessionUnits "--user"}
|
||
|
--property=Requires=${self.vmUnitPrefix}${vmName}.service
|
||
|
--property=After=${self.vmUnitPrefix}${vmName}.service
|
||
|
--property=SyslogIdentifier="$1 (${vmName})"
|
||
|
)
|
||
|
remoteArgs=(
|
||
|
systemd-run
|
||
|
--user
|
||
|
--property=StandardError="journal+console"
|
||
|
--property=StandardOutput="journal+console"
|
||
|
--property=OOMScoreAdjust=${toString self.oomScoreAdjust}
|
||
|
${lib.optionalString (self.waylandProxyUnit != null) ''
|
||
|
--property=Requires=${self.waylandProxyUnit}
|
||
|
--property=After=${self.waylandProxyUnit}
|
||
|
''}
|
||
|
)
|
||
|
systemd-run \
|
||
|
"''${localArgs[@]}" \
|
||
|
ssh ${self.vmUser}@${self.vmSshPrefix}${vmName} \
|
||
|
"''${remoteArgs[@]}" $@
|
||
|
'';
|
||
|
|
||
|
# Actual .desktop item adapters
|
||
|
toVM =
|
||
|
vmName: attrs:
|
||
|
attrs
|
||
|
// {
|
||
|
exec = "${self.mkRunInVM vmName} ${attrs.exec}";
|
||
|
};
|
||
|
toBrowser =
|
||
|
attrs:
|
||
|
attrs
|
||
|
// {
|
||
|
categories = attrs.categories or [ ] ++ [
|
||
|
"WebBrowser"
|
||
|
"Network"
|
||
|
];
|
||
|
mimeTypes = attrs.mimeTypes or [ ] ++ [
|
||
|
"x-scheme-handler/http"
|
||
|
"x-scheme-handler/https"
|
||
|
];
|
||
|
};
|
||
|
})
|