diff --git a/README.md b/README.md
deleted file mode 100644
index e69de29..0000000
diff --git a/applications/android-wifi/android-wifi.desktop b/applications/android-wifi/android-wifi.desktop
new file mode 100644
index 0000000..3319233
--- /dev/null
+++ b/applications/android-wifi/android-wifi.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Name=Android WiFi
+Comment=Mirror and control Android devices over Wi-Fi
+Exec=/home/valere/.local/bin/android-wifi.sh
+Icon=/home/valere/.local/share/icons/android-wifi.svg
+Terminal=false
+Type=Application
+Categories=Utility;
+StartupNotify=true
diff --git a/applications/android-wifi/android-wifi.sh b/applications/android-wifi/android-wifi.sh
new file mode 100644
index 0000000..d04e1df
--- /dev/null
+++ b/applications/android-wifi/android-wifi.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+LOG=/tmp/android-wifi.log
+echo "===== $(date) =====" >> "$LOG"
+
+# Vérifier adb
+if ! command -v adb >/dev/null 2>&1; then
+ echo "adb non trouvé dans le PATH" >> "$LOG"
+ exit 1
+fi
+
+# Vérifier scrcpy
+if ! command -v scrcpy >/dev/null 2>&1; then
+ echo "scrcpy non trouvé dans le PATH" >> "$LOG"
+ exit 1
+fi
+
+# Chercher device TCP existant
+TCP_DEVICE=$(adb devices | awk '$1 ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:5555$/ {print $1}')
+
+if [ -n "$TCP_DEVICE" ]; then
+ # Device Wi-Fi déjà actif
+ echo "Device TCP déjà actif: $TCP_DEVICE" >> "$LOG"
+ IP="$TCP_DEVICE"
+else
+ # Récupérer un device USB
+ USB_ID=$(adb devices | awk 'NR>1 && $2=="device" && $1 !~ /:/ {print $1; exit}')
+ if [ -z "$USB_ID" ]; then
+ echo "Aucun device USB détecté" >> "$LOG"
+ exit 1
+ fi
+ echo "Device USB détecté: $USB_ID" >> "$LOG"
+
+ # Récupérer IP via USB
+ IP=$(adb -s "$USB_ID" shell ip addr show wlan0 2>>"$LOG" | grep 'inet ' | awk '{print $2}' | cut -d/ -f1)
+ if [ -z "$IP" ]; then
+ echo "Impossible de récupérer l'IP du téléphone (wlan0 introuvable)" >> "$LOG"
+ exit 1
+ fi
+ echo "IP détectée: $IP" >> "$LOG"
+
+ # Passer en mode TCP
+ echo "[+] Passage en mode TCP 5555" >> "$LOG"
+ adb -s "$USB_ID" tcpip 5555 >> "$LOG" 2>&1
+
+ # Connexion Wi-Fi
+ echo "[+] Connexion à $IP:5555" >> "$LOG"
+ adb connect "$IP:5555" >> "$LOG" 2>&1
+
+ # Déconnecter USB pour éviter conflit multiple devices
+ echo "[+] Déconnexion du device USB $USB_ID" >> "$LOG"
+ adb disconnect "$USB_ID" >> "$LOG" 2>&1
+fi
+
+# Attendre que le device TCP soit prêt
+echo "[+] Attente du device TCP $IP" >> "$LOG"
+while ! adb devices | grep -q "$IP.*device"; do
+ sleep 1
+done
+echo "[+] Device TCP prêt" >> "$LOG"
+
+# Lancer scrcpy
+echo "[+] Lancement de scrcpy sur $IP" >> "$LOG"
+scrcpy -s "$IP" >> "$LOG" 2>&1
+
+echo "[✓] Fin du script" >> "$LOG"
diff --git a/applications/android-wifi/android-wifi.svg b/applications/android-wifi/android-wifi.svg
new file mode 100644
index 0000000..0ab92c2
--- /dev/null
+++ b/applications/android-wifi/android-wifi.svg
@@ -0,0 +1,16 @@
+
diff --git a/gamecube-pad/gamecube-pad.sh b/gamecube-pad/gamecube-pad.sh
new file mode 100644
index 0000000..337e717
--- /dev/null
+++ b/gamecube-pad/gamecube-pad.sh
@@ -0,0 +1,154 @@
+#!/bin/bash
+set -e
+
+SERVICE_NAME="gamecube-pad.service"
+SERVICE_PATH="/etc/systemd/system/$SERVICE_NAME"
+PYTHON_SCRIPT="/home/$USER/.local/bin/gamecube-pad.py"
+
+install_service() {
+ echo "[+] Installation des dépendances..."
+ sudo apt update
+ sudo apt install -y python3-evdev python3-uinput xdotool wmctrl
+
+ echo "[+] Création du script Python watcher..."
+ cat > "$PYTHON_SCRIPT" <<'EOF'
+#!/usr/bin/env python3
+import evdev
+import uinput
+import subprocess
+import time
+
+DEVICE_NAMES = ["8BitDo NGC Modkit"]
+AXIS_MAP = {
+ "ABS_X": ("KEY_LEFT", "KEY_RIGHT"),
+ "ABS_Y": ("KEY_UP", "KEY_DOWN")
+}
+BUTTON_MAP = {
+ "304": "KEY_ENTER",
+ "305": "KEY_ESC",
+ "311": "KEY_LEFTALT",
+ "308": "KEY_TAB",
+ "310": "KEY_LEFTCTRL",
+ "307": "KEY_LEFTSHIFT",
+ "314": "KEY_T"
+}
+THRESHOLD = 100
+DOLPHIN_NAME = "Dolphin"
+
+events = [
+ uinput.KEY_UP, uinput.KEY_DOWN, uinput.KEY_LEFT, uinput.KEY_RIGHT,
+ uinput.KEY_ENTER, uinput.KEY_ESC, uinput.KEY_LEFTALT, uinput.KEY_TAB,
+ uinput.KEY_LEFTCTRL, uinput.KEY_LEFTSHIFT, uinput.KEY_T
+]
+keyboard = uinput.Device(events)
+
+def find_device():
+ devices = []
+ for path in evdev.list_devices():
+ try:
+ dev = evdev.InputDevice(path)
+ devices.append((path, dev.name))
+ except Exception:
+ continue
+ for path, name in devices:
+ if any(dn in name for dn in DEVICE_NAMES):
+ return path
+ return None
+
+def handle_device(dev_path):
+ dev = evdev.InputDevice(dev_path)
+ abs_center = {axis: dev.absinfo(axis).value for axis in (evdev.ecodes.ABS_X, evdev.ecodes.ABS_Y)}
+ try:
+ for event in dev.read_loop():
+ if event.type == evdev.ecodes.EV_KEY:
+ key_code = str(event.code)
+ if key_code in BUTTON_MAP:
+ keyboard.emit(getattr(uinput, BUTTON_MAP[key_code]), event.value)
+ if event.type == evdev.ecodes.EV_ABS:
+ axis = evdev.ecodes.ABS[event.code]
+ val = event.value
+ neg_key, pos_key = AXIS_MAP.get(axis, (None, None))
+ if neg_key and pos_key:
+ keyboard.emit(getattr(uinput, neg_key), int(val < abs_center[event.code]-THRESHOLD))
+ keyboard.emit(getattr(uinput, pos_key), int(val > abs_center[event.code]+THRESHOLD))
+ except OSError:
+ dev.close()
+ raise
+
+def main():
+ connected = False
+ while True:
+ dev_path = find_device()
+ if dev_path and not connected:
+ print(f"[+] Manette connectée: {dev_path}")
+ connected = True
+ try:
+ subprocess.Popen(["flatpak", "run", "org.DolphinEmu.dolphin-emu"]) # ou juste ["ma_commande"] si pas d'arguments
+ except Exception as e:
+ print(f"[!] Impossible de lancer la commande: {e}")
+ try:
+ handle_device(dev_path)
+ except OSError:
+ print("[-] Manette déconnectée")
+ connected = False
+ try:
+ subprocess.Popen(["flatpak", "kill", "org.DolphinEmu.dolphin-emu"]) # ou juste ["ma_commande"] si pas d'arguments
+ except Exception as e:
+ print(f"[!] Impossible de lancer la commande: {e}")
+ elif not dev_path and connected:
+ print("[-] Manette déconnectée")
+ connected = False
+ time.sleep(1)
+
+if __name__=="__main__":
+ main()
+EOF
+
+ chmod +x "$PYTHON_SCRIPT"
+
+ echo "[+] Création du service systemd..."
+ sudo tee "$SERVICE_PATH" > /dev/null < "$PYTHON_SCRIPT" <<'EOF'
+#!/usr/bin/env python3
+import evdev
+import uinput
+import subprocess
+import time
+import os
+
+DEVICE_NAMES = ["8BitDo NGC Modkit"]
+BUTTON_MAP = {
+ "304": "KEY_ENTER",
+ "305": "KEY_ESC",
+ "311": "KEY_LEFTALT",
+ "307": "KEY_RIGHT",
+ "308": "KEY_LEFT",
+}
+
+events = [
+ uinput.KEY_LEFT, uinput.KEY_RIGHT,
+ uinput.KEY_ENTER, uinput.KEY_ESC, uinput.KEY_LEFTALT
+]
+keyboard = uinput.Device(events)
+
+def find_device():
+ for path in evdev.list_devices():
+ try:
+ dev = evdev.InputDevice(path)
+ if any(dn in dev.name for dn in DEVICE_NAMES):
+ return path
+ except Exception:
+ continue
+ return None
+
+def is_dolphin_running():
+ try:
+ output = subprocess.check_output(
+ ["flatpak", "ps", "--columns=name"]
+ ).decode()
+ return "org.DolphinEmu.dolphin-emu" in output
+ except Exception:
+ return False
+
+def handle_device(dev_path):
+ dev = evdev.InputDevice(dev_path)
+ try:
+ for event in dev.read_loop():
+ if event.type == evdev.ecodes.EV_KEY:
+ key_code = str(event.code)
+ if key_code in BUTTON_MAP:
+ keyboard.emit(getattr(uinput, BUTTON_MAP[key_code]), event.value)
+ except OSError:
+ dev.close()
+ raise
+
+def main():
+ connected = False
+ time.sleep(5) # délai pour que uinput et le serveur graphique soient prêts
+ while True:
+ dev_path = find_device()
+ if dev_path and not connected:
+ print(f"[+] Manette connectée: {dev_path}")
+ connected = True
+ if not is_dolphin_running():
+ try:
+ subprocess.Popen(["flatpak", "run", "org.DolphinEmu.dolphin-emu"])
+ except Exception as e:
+ print(f"[!] Impossible de lancer Dolphin: {e}")
+ try:
+ handle_device(dev_path)
+ except OSError:
+ print("[-] Manette déconnectée")
+ connected = False
+ try:
+ subprocess.Popen(["flatpak", "kill", "org.DolphinEmu.dolphin-emu"])
+ except Exception as e:
+ print(f"[!] Impossible de tuer Dolphin: {e}")
+ elif not dev_path and connected:
+ print("[-] Manette déconnectée")
+ connected = False
+ time.sleep(1)
+
+if __name__ == "__main__":
+ main()
+EOF
+
+ chmod +x "$PYTHON_SCRIPT"
+
+ echo "[+] Création du service systemd utilisateur..."
+ mkdir -p "$SERVICE_DIR"
+ cat > "$SERVICE_FILE" <