complete-computing-environment/waydroid.org

2.7 KiB

Waydroid on NixOS is pretty simple

{ pkgs, ... }:

{
  imports = [ ./waydroid-passthroughbrowser.nix ];

  virtualisation = {
    waydroid.enable = true;
    lxd.enable = true;
  };
  environment.systemPackages = [ pkgs.wl-clipboard ];
}

Then in an shell:

sudo waydroid init -s GAPPS
sudo systemctl start waydroid-container
waydroid session start

Download latest F-droid from https://f-droid.org/ and install it

waydroid app install ~/Downloads/F-Droid.apk
waydroid prop set persist.waydroid.multi_windows false

Waydroid Passthrough Browser

passthroughbrowser is a simple solution to opening links from Android apps in the system browser by setting up a small HTTP server. I'll use it in waydroid configurations in a custom derivation:

# https://git.kj7rrv.com/kj7rrv/passthroughbrowser.git
{ lib, stdenv,
  makeDesktopItem,
  fetchFromGitea,
  buildPythonPackage,
  flask,
  ... }:

let
  
  desktopItem = makeDesktopItem {
    name = "passthroughbrowser";
    desktopName = "Waydroid Passthrough Browser";
    categories = ["Utility"];
    exec = "passthrough_browser";
  };
in buildPythonPackage {
  name = "passthroughbrowser";
  version = "0.0.1";
  format = "simple";

  src = fetchFromGitea {
    domain = "git.kj7rrv.com";
    owner = "kj7rrv";
    repo = "passthroughbrowser";
    rev = "11ab0f695b6dae4ebee06fa75d6e2796713add98";
    sha256 = "sha256-JSbGsWL3kEYw4uUIUgXi7XuXYFQ0Nxkz+fZbvxfpn1o=";
  };

  propagatedBuildInputs = [
    flask
  ];

  installPhase = ''
    mkdir -p $out/bin $out/share/passthroughbrowser
    cp $src/server.py $out/bin/passthrough_browser
    cp $src/PassThroughBrowser.apk $out/share/passthroughbrowser
    cp --recursive "${desktopItem}/share" "$out/"

    substituteInPlace $out/bin/passthrough_browser \
      --replace "app.run(host='192.168.250.1', port=8888)"  \
                "import os; app.run(host=os.environ.get('PASSTHROUGH_HOST', '192.168.240.1'), port=8888)" 
  '';
}
{ pkgs, ... }:

{
  home-manager.users.rrix = {
    home.packages = [
      pkgs.passthroughbrowser
    ];
    home.sessionVariables = {
      PASSTHROUGH_HOST = "192.168.240.1";
    };
  };
}