# 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]; }