diff --git a/hosts/common/system/configs/android/default.nix b/hosts/common/system/configs/android/default.nix deleted file mode 100644 index 91f4245..0000000 --- a/hosts/common/system/configs/android/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ ... }: -{ - programs.adb.enable = true; - services.gvfs.enable = true; -} diff --git a/hosts/common/user/configs/console/android/default.nix b/hosts/common/user/configs/console/android/default.nix index 2d4d62f..2b5b944 100644 --- a/hosts/common/user/configs/console/android/default.nix +++ b/hosts/common/user/configs/console/android/default.nix @@ -1,7 +1,26 @@ { username ? throw "username argument is required", }: -{ ... }: +{ config, pkgs, ... }: +let + userConfig = config.users.users.${username}; + hmConfig = config.home-manager.users.${username}; + android-tools = pkgs.android-tools.overrideAttrs (oldAttrs: { + patches = oldAttrs.patches or [ ] ++ [ ./env-var-user-home.patch ]; + }); +in { + services.udev.packages = with pkgs; [ android-udev-rules ]; + environment.systemPackages = [ android-tools ]; + services.gvfs.enable = true; + users.users.${username}.extraGroups = [ "adbusers" ]; + + home-manager.users.${username}.home = { + sessionVariables.ANDROID_USER_HOME = "${hmConfig.xdg.dataHome}/android"; + persistence."/persist${userConfig.home}".files = [ + "${hmConfig.xdg.dataHome}/android/adbkey" + "${hmConfig.xdg.dataHome}/android/adbkey.pub" + ]; + }; } diff --git a/hosts/common/user/configs/console/android/env-var-user-home.patch b/hosts/common/user/configs/console/android/env-var-user-home.patch new file mode 100644 index 0000000..c716cd6 --- /dev/null +++ b/hosts/common/user/configs/console/android/env-var-user-home.patch @@ -0,0 +1,21 @@ +--- a/vendor/adb/adb_utils.cpp ++++ b/vendor/adb/adb_utils.cpp +@@ -308,8 +308,16 @@ + } + + std::string adb_get_android_dir_path() { +- std::string user_dir = adb_get_homedir_path(); +- std::string android_dir = user_dir + OS_PATH_SEPARATOR + ".android"; ++ const char* android_user_home = getenv("ANDROID_USER_HOME"); ++ std::string android_dir; ++ ++ if (android_user_home) { ++ android_dir = std::string(android_user_home); ++ } else { ++ std::string user_dir = adb_get_homedir_path(); ++ android_dir = user_dir + OS_PATH_SEPARATOR + ".android"; ++ } ++ + struct stat buf; + if (stat(android_dir.c_str(), &buf) == -1) { + if (adb_mkdir(android_dir, 0750) == -1) { diff --git a/hosts/eirene/default.nix b/hosts/eirene/default.nix index 0fb0193..f18de8b 100644 --- a/hosts/eirene/default.nix +++ b/hosts/eirene/default.nix @@ -1,6 +1,5 @@ { imports = [ - ../common/system/configs/android ../common/system/configs/bluetooth ../common/system/configs/boot ../common/system/configs/brightnessctl