feat: add androidtv on linux proof of concept
All checks were successful
Discord / discord commits (push) Has been skipped
All checks were successful
Discord / discord commits (push) Has been skipped
This commit is contained in:
parent
3b892c0416
commit
43d76d6261
1 changed files with 102 additions and 0 deletions
102
devices/homie/modules/androidtv/default.nix
Normal file
102
devices/homie/modules/androidtv/default.nix
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
# Unfortunately I had some hardware issues but this does work
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (lib) mkForce getExe;
|
||||||
|
|
||||||
|
connectControllers = getExe (pkgs.writeShellApplication {
|
||||||
|
name = "connectControllers";
|
||||||
|
runtimeInputs = with pkgs; [gnugrep usbutils];
|
||||||
|
text = ''
|
||||||
|
set +o errexit
|
||||||
|
|
||||||
|
for dev in /sys/bus/usb/devices/*; do
|
||||||
|
vendor="$(cat "$dev/idVendor" 2>/dev/null)"
|
||||||
|
prod="$(cat "$dev/idProduct" 2>/dev/null)"
|
||||||
|
|
||||||
|
if [[ "$vendor" != "" && "$prod" != "" ]]; then
|
||||||
|
if [[ "$(lsusb -d "$vendor:$prod" | grep "Microsoft Corp. Xbox Controller")" != "" ]]; then
|
||||||
|
echo 0 > "$dev/authorized"
|
||||||
|
echo 1 > "$dev/authorized"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
hyprConf = pkgs.writeText "greetd-hypr-config" ''
|
||||||
|
cursor {
|
||||||
|
inactive_timeout = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
misc {
|
||||||
|
disable_hyprland_logo = true
|
||||||
|
disable_splash_rendering = true
|
||||||
|
}
|
||||||
|
|
||||||
|
decoration {
|
||||||
|
blur {
|
||||||
|
enabled = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
animations {
|
||||||
|
enabled = false
|
||||||
|
first_launch_animation = false
|
||||||
|
}
|
||||||
|
|
||||||
|
bind = SUPER, Q, exec, kitty
|
||||||
|
|
||||||
|
windowrule = fullscreen, ^(.*)$
|
||||||
|
exec-once = waydroid show-full-ui
|
||||||
|
exec-once = sleep 10; sudo ${connectControllers}
|
||||||
|
'';
|
||||||
|
|
||||||
|
user = "matt";
|
||||||
|
command = "Hyprland --config ${hyprConf}";
|
||||||
|
|
||||||
|
session = {inherit command user;};
|
||||||
|
in {
|
||||||
|
# Make it so we don't need root to connect controllers
|
||||||
|
security.sudo.extraRules = [
|
||||||
|
{
|
||||||
|
users = [user];
|
||||||
|
groups = [user];
|
||||||
|
commands = [
|
||||||
|
{
|
||||||
|
command = connectControllers;
|
||||||
|
options = ["SETENV" "NOPASSWD"];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
# TODO: make the following declarative and also make the image declarative
|
||||||
|
# Add this to /var/lib/waydroid/waydroid.cfg for controller support
|
||||||
|
# persist.waydroid.udev = true
|
||||||
|
# persist.waydroid.uevent = true
|
||||||
|
virtualisation.waydroid.enable = true;
|
||||||
|
|
||||||
|
users.users."greeter" = {
|
||||||
|
home = "/var/lib/greeter";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.hyprland.enable = true;
|
||||||
|
|
||||||
|
services = {
|
||||||
|
greetd = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
default_session = session;
|
||||||
|
initial_session = session;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pipewire.enable = mkForce false;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = [pkgs.kitty];
|
||||||
|
}
|
Loading…
Reference in a new issue