{ config, lib, ... }: with lib; let cfg = config.custom.settings.waydroid; in { options.custom.settings.waydroid.enable = mkOption {default = false;}; config = mkIf cfg.enable { # https://wiki.nixos.org/wiki/WayDroid # https://wiki.archlinux.org/title/Waydroid #!! Configuration is imperative #* Optionally update image #?? sudo waydroid upgrade # Install image #?? sudo waydroid init # Helper script # https://github.com/casualsnek/waydroid_script #?? git clone https://github.com/casualsnek/waydroid_script.git #?? cd waydroid_script #?? python -m venv .venv #?? source .venv/bin/activate.fish #?? pip install -r requirements.txt #?? sudo python main.py install microg #?? sudo python main.py install libndk #?? sudo python main.py hack hidestatusbar # Start session #?? waydroid session start & # Enable windowed applications #?? waydroid prop set persist.waydroid.multi_windows true # Set window size #?? waydroid prop set persist.waydroid.width WIDTH #?? waydroid prop set persist.waydroid.height HEIGHT #?? sudo waydroid shell #?? wm size reset # Waydroid must run on the same GPU as the compositor # https://wiki.archlinux.org/title/Waydroid#Graphical_Corruption_on_multi-gpu_systems # https://github.com/Quackdoc/waydroid-scripts/blob/main/waydroid-choose-gpu.sh #!! Rerun after each waydroid_script invocation #?? sudo sed -i 's|/dev/dri/card0|/dev/dri/card1|' /var/lib/waydroid/lxc/waydroid/config_nodes #?? sudo sed -i 's|/dev/dri/renderD128|/dev/dri/renderD129|' /var/lib/waydroid/lxc/waydroid/config_nodes # Some games like Arknights do not use the proper storage mechanism and need insecure permissions # https://github.com/casualsnek/waydroid_script?tab=readme-ov-file#granting-full-permission-for-apps-data-hack #?? sudo waydroid shell #?? chmod 777 -R /sdcard/Android #?? chmod 777 -R /data/media/0/Android #?? chmod 777 -R /sdcard/Android/data #?? chmod 777 -R /data/media/0/Android/obb #?? chmod 777 -R /mnt/*/*/*/*/Android/data #?? chmod 777 -R /mnt/*/*/*/*/Android/obb # Disable unnecessary desktop files #?? sed -i 's|(\[Desktop Entry\])|$1\nNoDisplay=true|' ~/.local/share/applications/waydroid.*.desktop virtualisation.waydroid.enable = true; }; }