nixpkgs-suyu/nixos/modules/virtualisation/waydroid.nix
Mihai-Drosi Câju 800af4240b nixos/waydroid: Replace requirement for ASHMEM with MEMFD_CREATE
* fixes #250302
* ASHMEM was removed in Linux 5.18 and waydroid can use MEMFD instead.
  MEMFD is enabled by default in 4.18 and later kernels while we
  already require this version for namespace support.
2023-12-24 16:04:20 +02:00

69 lines
1.9 KiB
Nix

{ config, lib, pkgs, ... }:
let
cfg = config.virtualisation.waydroid;
kCfg = config.lib.kernelConfig;
kernelPackages = config.boot.kernelPackages;
waydroidGbinderConf = pkgs.writeText "waydroid.conf" ''
[Protocol]
/dev/binder = aidl2
/dev/vndbinder = aidl2
/dev/hwbinder = hidl
[ServiceManager]
/dev/binder = aidl2
/dev/vndbinder = aidl2
/dev/hwbinder = hidl
'';
in
{
options.virtualisation.waydroid = {
enable = lib.mkEnableOption (lib.mdDoc "Waydroid");
};
config = lib.mkIf cfg.enable {
assertions = lib.singleton {
assertion = lib.versionAtLeast (lib.getVersion config.boot.kernelPackages.kernel) "4.18";
message = "Waydroid needs user namespace support to work properly";
};
system.requiredKernelConfig = [
(kCfg.isEnabled "ANDROID_BINDER_IPC")
(kCfg.isEnabled "ANDROID_BINDERFS")
(kCfg.isEnabled "MEMFD_CREATE")
];
/* NOTE: we always enable this flag even if CONFIG_PSI_DEFAULT_DISABLED is not on
as reading the kernel config is not always possible and on kernels where it's
already on it will be no-op
*/
boot.kernelParams = [ "psi=1" ];
environment.etc."gbinder.d/waydroid.conf".source = waydroidGbinderConf;
environment.systemPackages = with pkgs; [ waydroid ];
networking.firewall.trustedInterfaces = [ "waydroid0" ];
virtualisation.lxc.enable = true;
systemd.services.waydroid-container = {
description = "Waydroid Container";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${pkgs.waydroid}/bin/waydroid -w container start";
ExecStop = "${pkgs.waydroid}/bin/waydroid container stop";
ExecStopPost = "${pkgs.waydroid}/bin/waydroid session stop";
};
};
systemd.tmpfiles.rules = [
"d /var/lib/misc 0755 root root -" # for dnsmasq.leases
];
};
}