# FWS — configuration Hyprland par défaut.
# Le clavier (__KB_LAYOUT__ / __KB_VARIANT__) est injecté à l'installation,
# depuis le choix fait dans Anaconda. Édite ce fichier librement.
#
# Raccourcis : transposition de la config i3/sway FWS (mêmes touches).
# Couleurs : nuances de bleu (palette Catppuccin Mocha).
#
# Les raccourcis sont déclarés avec « bindd » (bind + description) : la
# description alimente l'écran « Raccourcis clavier » (bouton ⌨ de la barre
# ou SUPER+K → fws-keys, qui lit les binds RÉELS via hyprctl). Ajoute
# tes propres bindd : ils apparaîtront automatiquement dans la liste.
# ⚠ Pas de virgule dans les descriptions (séparateur de champs Hyprland).

monitor = , preferred, auto, 1

input {
    kb_layout = __KB_LAYOUT__
    kb_variant = __KB_VARIANT__
    follow_mouse = 1
    numlock_by_default = true
    touchpad {
        natural_scroll = true
        tap-to-click = true
    }
}

general {
    gaps_in = 4
    gaps_out = 8
    border_size = 2
    # Nuances de bleu : bleu → sapphire en dégradé sur la fenêtre active.
    col.active_border = rgb(89b4fa) rgb(74c7ec) 45deg
    col.inactive_border = rgb(313244)
    layout = dwindle
}

decoration {
    rounding = 8
    # Flou et ombres COUPÉS : rendu logiciel (llvmpipe) en VM — cf. le
    # wrapper fws-hyprland écrit par l'installateur. Sur un vrai GPU tu
    # peux les réactiver (enabled = true).
    blur {
        enabled = false
    }
    shadow {
        enabled = false
    }
}

animations {
    enabled = true
    bezier = fws, 0.22, 1.0, 0.36, 1.0
    animation = windows, 1, 3, fws
    animation = workspaces, 1, 3, fws
    animation = fade, 1, 2, default
}

misc {
    disable_hyprland_logo = true
    disable_splash_rendering = true      # pas de « Thanks xxx! » en bas d'écran
    force_default_wallpaper = 0
    background_color = 0x1a1a2e          # bleu nuit FWS (aucun fond requis)
}

# Démarrage de session : barre d'état, notifications, réseau dans le tray,
# agent d'authentification GUI (indispensable pour les apps qui demandent
# les droits admin : gestionnaire de disques, blueman…).
exec-once = waybar
exec-once = mako
exec-once = nm-applet
# Applet Bluetooth : seulement si un adaptateur existe (en VM il n'y en a
# pas → blueman afficherait une erreur « Connection to BlueZ failed »).
exec-once = sh -c '[ -n "$(ls -A /sys/class/bluetooth 2>/dev/null)" ] && exec blueman-applet'
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
# Fenêtre de bienvenue (1er démarrage seulement — se retire ensuite).
exec-once = fws-hello --autostart

$mod = SUPER

# --- Applications ---------------------------------------------------------
bindd = $mod, Return, Ouvrir un terminal (kitty), exec, kitty
bindd = $mod SHIFT, Return, Terminal flottant, exec, kitty --class floating-term
bindd = $mod, R, Menu des applications, exec, wofi --show drun
bindd = $mod, E, Gestionnaire de fichiers, exec, dolphin
bindd = $mod, B, Ouvrir Firefox, exec, firefox
bindd = $mod, K, Afficher les raccourcis clavier, exec, fws-keys
bindd = $mod, X, Menu d'alimentation (arrêt/redémarrage…), exec, fws-powermenu

# --- Fenêtres ---------------------------------------------------------------
bindd = $mod, Q, Fermer la fenêtre, killactive,
bindd = $mod, V, Fenêtre flottante ou ancrée, togglefloating,
bindd = $mod, F, Plein écran, fullscreen,
bindd = $mod, J, Basculer la découpe horizontale/verticale, layoutmsg, togglesplit
bindd = $mod, L, Verrouiller l'écran, exec, hyprlock
bindd = $mod SHIFT, E, Quitter la session (retour à SDDM), exit,
bindd = $mod SHIFT, C, Recharger la configuration Hyprland, exec, hyprctl reload

# --- Focus (flèches) ---------------------------------------------------------
bindd = $mod, left, Focus à gauche, movefocus, l
bindd = $mod, right, Focus à droite, movefocus, r
bindd = $mod, up, Focus en haut, movefocus, u
bindd = $mod, down, Focus en bas, movefocus, d

# --- Déplacer la fenêtre (Maj + flèches) ---------------------------------------
bindd = $mod SHIFT, left, Déplacer la fenêtre à gauche, movewindow, l
bindd = $mod SHIFT, right, Déplacer la fenêtre à droite, movewindow, r
bindd = $mod SHIFT, up, Déplacer la fenêtre en haut, movewindow, u
bindd = $mod SHIFT, down, Déplacer la fenêtre en bas, movewindow, d

# --- Redimensionner (Ctrl + flèches, maintien possible) ------------------------
binde = $mod CTRL, left, resizeactive, -30 0
binde = $mod CTRL, right, resizeactive, 30 0
binde = $mod CTRL, up, resizeactive, 0 -30
binde = $mod CTRL, down, resizeactive, 0 30

# --- Espaces de travail 1-10 (0 = espace 10, comme i3) --------------------------
bindd = $mod, 1, Aller à l'espace 1, workspace, 1
bindd = $mod, 2, Aller à l'espace 2, workspace, 2
bindd = $mod, 3, Aller à l'espace 3, workspace, 3
bindd = $mod, 4, Aller à l'espace 4, workspace, 4
bindd = $mod, 5, Aller à l'espace 5, workspace, 5
bindd = $mod, 6, Aller à l'espace 6, workspace, 6
bindd = $mod, 7, Aller à l'espace 7, workspace, 7
bindd = $mod, 8, Aller à l'espace 8, workspace, 8
bindd = $mod, 9, Aller à l'espace 9, workspace, 9
bindd = $mod, 0, Aller à l'espace 10, workspace, 10
bindd = $mod SHIFT, 1, Envoyer la fenêtre vers l'espace 1, movetoworkspace, 1
bindd = $mod SHIFT, 2, Envoyer la fenêtre vers l'espace 2, movetoworkspace, 2
bindd = $mod SHIFT, 3, Envoyer la fenêtre vers l'espace 3, movetoworkspace, 3
bindd = $mod SHIFT, 4, Envoyer la fenêtre vers l'espace 4, movetoworkspace, 4
bindd = $mod SHIFT, 5, Envoyer la fenêtre vers l'espace 5, movetoworkspace, 5
bindd = $mod SHIFT, 6, Envoyer la fenêtre vers l'espace 6, movetoworkspace, 6
bindd = $mod SHIFT, 7, Envoyer la fenêtre vers l'espace 7, movetoworkspace, 7
bindd = $mod SHIFT, 8, Envoyer la fenêtre vers l'espace 8, movetoworkspace, 8
bindd = $mod SHIFT, 9, Envoyer la fenêtre vers l'espace 9, movetoworkspace, 9
bindd = $mod SHIFT, 0, Envoyer la fenêtre vers l'espace 10, movetoworkspace, 10

# --- Multi-écrans (comme i3 : Super+Ctrl+1/2 = écran gauche/droit) -------------
bindd = $mod CTRL, 1, Envoyer la fenêtre vers l'écran de gauche, movewindow, mon:l
bindd = $mod CTRL, 2, Envoyer la fenêtre vers l'écran de droite, movewindow, mon:r

# --- Molette = changer d'espace de travail --------------------------------------
bindd = $mod, mouse_up, Espace de travail précédent, workspace, e-1
bindd = $mod, mouse_down, Espace de travail suivant, workspace, e+1

# --- Scratchpad (espace spécial) -------------------------------------------------
bindd = $mod, S, Afficher le scratchpad, togglespecialworkspace, magic
bindd = $mod SHIFT, S, Envoyer la fenêtre au scratchpad, movetoworkspace, special:magic

# --- Captures d'écran (grim/slurp → presse-papier ou ~/Images) -------------------
bindd = , Print, Capture plein écran vers le presse-papier, exec, grim - | wl-copy
bindd = $mod, Print, Capture d'une zone vers le presse-papier, exec, grim -g "$(slurp)" - | wl-copy
bindd = $mod SHIFT, Print, Capture d'une zone vers ~/Images, exec, sh -c 'mkdir -p ~/Images && grim -g "$(slurp)" ~/Images/capture_$(date +%Y-%m-%d_%H-%M-%S).png'

# --- Multimédia (touches XF86 : volume via PipeWire, lecture via playerctl) ------
bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPrev, exec, playerctl previous

# --- Luminosité de l'écran (portables : touches Fn) ------------------------------
bindel = , XF86MonBrightnessUp, exec, brightnessctl set +5%
bindel = , XF86MonBrightnessDown, exec, brightnessctl set 5%-

# --- Souris : déplacer / redimensionner les fenêtres -----------------------------
bindm = $mod, mouse:272, movewindow
bindm = $mod, mouse:273, resizewindow

# --- Règles de fenêtres (comme i3) ------------------------------------------------
# Syntaxe Hyprland ≥ 0.55 : champs « <règle> <valeur> » + cibles « match:… »
# (validé contre le binaire avec --verify-config).
windowrule = float on, match:class ^(floating-term)$
windowrule = size 900 550, match:class ^(floating-term)$
windowrule = float on, match:class ^([Pp]avucontrol|org.pulseaudio.pavucontrol)$
windowrule = float on, match:class ^(.?[Bb]lueman-manager.*)$
windowrule = float on, match:class ^([Ff]ws-hello)$
windowrule = float on, match:class ^([Ff]ws-about)$
windowrule = float on, match:title ^(Picture-in-Picture)$
