Fix hyprland, monitor management and waybar after lua switch

This commit is contained in:
2026-08-29 00:55:17 +02:00
parent 9db0b4dac0
commit be4de88d1a
45 changed files with 593 additions and 388 deletions

View File

@@ -0,0 +1,9 @@
#!/bin/bash
# Usage: ./download-youtube 'URL'
if [ -z "$1" ]; then
echo "Erreur : donne une URL YouTube en argument."
exit 1
fi
yt-dlp -x --audio-format flac --embed-thumbnail --add-metadata "$1"

View File

@@ -0,0 +1,9 @@
#!/bin/bash
# Usage: ./download-youtube 'URL'
if [ -z "$1" ]; then
echo "Erreur : donne une URL YouTube en argument."
exit 1
fi
yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]" -o "%(title)s.%(ext)s" "$1"

View File

@@ -0,0 +1,129 @@
#!/bin/bash
# Script de téléchargement et conversion pour xjadeo
# Dépendances : yt-dlp, ffmpeg
set -euo pipefail
# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Fonction d'affichage
info() { echo -e "${BLUE}[INFO]${NC} $1"; }
success() { echo -e "${GREEN}[OK]${NC} $1"; }
error() { echo -e "${RED}[ERREUR]${NC} $1" >&2; }
warn() { echo -e "${YELLOW}[ATTENTION]${NC} $1"; }
# Vérification des dépendances
check_deps() {
local missing=()
if ! command -v yt-dlp &> /dev/null; then
missing+=("yt-dlp")
fi
if ! command -v ffmpeg &> /dev/null; then
missing+=("ffmpeg")
fi
if [ ${#missing[@]} -ne 0 ]; then
error "Dépendances manquantes : ${missing[*]}"
error "Installe-les avec : sudo pacman -S yt-dlp ffmpeg (Arch) ou sudo apt install yt-dlp ffmpeg (Debian/Ubuntu)"
exit 1
fi
}
# Demande de l'URL
get_url() {
if [ $# -eq 1 ]; then
URL="$1"
info "URL fournie en argument : $URL"
else
read -rp "URL YouTube : " URL
fi
if [[ -z "$URL" ]]; then
error "Aucune URL saisie."
exit 1
fi
}
# Demande du nom de fichier
get_filename() {
# Essaie d'extraire un titre temporaire avec yt-dlp --get-title
local suggested=""
if command -v yt-dlp &> /dev/null; then
suggested=$(yt-dlp --get-title "$URL" 2>/dev/null | sed 's/[^a-zA-Z0-9._-]/_/g' | head -c 80)
fi
if [ -z "$suggested" ]; then
suggested="video"
fi
read -rp "Nom du fichier (sans extension) [$suggested] : " input_name
FILENAME="${input_name:-$suggested}"
}
# Téléchargement
download_video() {
info "Téléchargement de la vidéo depuis $URL..."
# Télécharge la meilleure qualité vidéo+audio et fusionne en MKV
yt-dlp -f "bestvideo+bestaudio" --merge-output-format mkv -o "${FILENAME}.%(ext)s" "$URL"
# Recherche le fichier produit (peut être .mkv ou .webm)
SOURCE_FILE=$(find . -maxdepth 1 -name "${FILENAME}.*" -type f | head -1)
if [ -z "$SOURCE_FILE" ]; then
error "Fichier téléchargé introuvable."
exit 1
fi
success "Téléchargement terminé : $SOURCE_FILE"
}
# Proposer la conversion
ask_conversion() {
echo ""
read -rp "Souhaites-tu convertir cette vidéo au format MJPEG/AVI pour xjadeo ? (o/N) " convert_choice
case "$convert_choice" in
o|O|oui|Oui|y|Y|yes|Yes) CONVERT="yes" ;;
*) CONVERT="no" ;;
esac
}
# Conversion
convert_video() {
local output_file="${FILENAME}_xjadeo.avi"
info "Conversion en cours vers $output_file..."
# Qualité vidéo : on demande un paramètre
read -rp "Qualité vidéo MJPEG (q:v de 2 à 31, 2=meilleure) [2] : " qv
qv="${qv:-2}"
if ! [[ "$qv" =~ ^[0-9]+$ ]] || [ "$qv" -lt 2 ] || [ "$qv" -gt 31 ]; then
warn "Valeur invalide, utilisation de 2"
qv=2
fi
ffmpeg -i "$SOURCE_FILE" -c:v mjpeg -q:v "$qv" -c:a pcm_s16le -fflags +genpts "$output_file"
if [ $? -eq 0 ]; then
success "Conversion terminée : $output_file"
read -rp "Supprimer le fichier source ($SOURCE_FILE) ? (o/N) " del_choice
case "$del_choice" in
o|O|oui|Oui|y|Y|yes|Yes) rm -v "$SOURCE_FILE" ;;
*) info "Fichier source conservé." ;;
esac
else
error "La conversion a échoué."
fi
}
# Fonction principale
main() {
check_deps
get_url "$@"
get_filename
download_video
ask_conversion
if [ "$CONVERT" = "yes" ]; then
convert_video
else
info "Aucune conversion demandée. Le fichier source est $SOURCE_FILE"
fi
info "Terminé."
}
# Exécution
main "$@"

View File

@@ -0,0 +1,14 @@
#!/bin/bash
for file in "$@"; do
# Vérifie si c'est un fichier opus
if [[ "$file" == *.opus ]]; then
# Extrait et formate les paroles
lyrics=$(exiftool -b -Syncedlyrics "$file" | sed 's/\[/\n\[/g' | sed '/^$/d')
# Crée le fichier .lrc uniquement si le tag n'est pas vide
if [ -n "$lyrics" ]; then
echo "$lyrics" > "${file%.*}.lrc"
fi
fi
done

147
scripts/utilities/format.sh Executable file
View File

@@ -0,0 +1,147 @@
#!/usr/bin/env bash
#
# usb-format.sh — formate proprement une clé USB / carte SD
# Usage: usb-format.sh /dev/sdX [fat32|exfat|ext4] [LABEL]
set -euo pipefail
DEVICE="${1:-}"
FSTYPE="${2:-fat32}"
LABEL="${3:-}"
if [[ -z "$DEVICE" ]]; then
echo "Usage: $0 /dev/sdX [fat32|exfat|ext4] [LABEL]"
echo
echo "Périphériques disponibles :"
lsblk -d -o NAME,SIZE,MODEL,TRAN
exit 1
fi
# Normaliser le chemin (accepte "sdb" ou "/dev/sdb")
[[ "$DEVICE" != /dev/* ]] && DEVICE="/dev/$DEVICE"
# --- Garde-fous ---
if [[ ! -b "$DEVICE" ]]; then
echo "Erreur : $DEVICE n'est pas un périphérique bloc valide."
exit 1
fi
if [[ "$DEVICE" == "/dev/nvme0n1" || "$DEVICE" =~ ^/dev/nvme0n1p[0-9]+$ ]]; then
echo "Erreur : $DEVICE correspond au disque interne (nvme0n1). Abandon."
exit 1
fi
ROOT_SRC=$(findmnt -n -o SOURCE / || true)
if [[ -n "$ROOT_SRC" && "$ROOT_SRC" == "$DEVICE"* ]]; then
echo "Erreur : $DEVICE semble contenir la partition racine. Abandon."
exit 1
fi
TRAN=$(lsblk -d -no TRAN "$DEVICE" 2>/dev/null || echo "?")
if [[ "$TRAN" != "usb" ]]; then
echo "Attention : $DEVICE n'est pas détecté comme périphérique USB (TRAN=$TRAN)."
fi
case "$FSTYPE" in
fat32|exfat|ext4) ;;
*)
echo "Erreur : type de système de fichiers non supporté : $FSTYPE"
echo "Choix possibles : fat32, exfat, ext4"
exit 1
;;
esac
if [[ -z "$LABEL" ]]; then
read -rp "Nom de la partition (label) : " LABEL
LABEL="${LABEL:-USB}"
fi
if [[ "$FSTYPE" == "fat32" && ${#LABEL} -gt 11 ]]; then
echo "Attention : FAT32 limite le label à 11 caractères, il sera tronqué."
fi
# --- Nouvelle demande : type de table de partition ---
echo
echo "Choisissez le type de table de partition :"
echo " [1] msdos (MBR) recommandé pour la compatibilité avec les vieux appareils (imprimantes, consoles)"
echo " [2] gpt pour les disques >2To ou l'UEFI moderne"
read -rp "Votre choix (1 ou 2, défaut=1) : " PT_CHOICE
PT_CHOICE="${PT_CHOICE:-1}"
case "$PT_CHOICE" in
1|msdos|mbr) PART_TABLE="msdos" ;;
2|gpt) PART_TABLE="gpt" ;;
*)
echo "Choix invalide, utilisation de msdos par défaut."
PART_TABLE="msdos"
;;
esac
echo "-> Table de partition choisie : $PART_TABLE"
echo "==================================================="
echo " Périphérique : $DEVICE"
echo " Transport : $TRAN"
echo " Système de fichiers: $FSTYPE"
echo " Label : $LABEL"
echo " Table de partition : $PART_TABLE"
echo "==================================================="
lsblk -f "$DEVICE"
echo
echo "TOUTES LES DONNÉES SUR $DEVICE VONT ÊTRE EFFACÉES."
read -rp "Tape le nom du périphérique ($DEVICE) pour confirmer : " CONFIRM
if [[ "$CONFIRM" != "$DEVICE" ]]; then
echo "Confirmation invalide. Abandon."
exit 1
fi
# --- Nettoyage et préparation ---
echo "--> Démontage des partitions existantes..."
for part in "${DEVICE}"?*; do
[[ -b "$part" ]] && sudo umount "$part" 2>/dev/null || true
done
echo "--> Suppression des signatures existantes..."
sudo wipefs -a "$DEVICE"
# --- CORRECTION : forcer le rechargement du périphérique avant parted ---
echo "--> Relecture de la table par le noyau..."
sudo partprobe "$DEVICE" 2>/dev/null || true
sudo udevadm settle
sleep 1
echo "--> Création d'une nouvelle table de partitions ($PART_TABLE)..."
sudo parted -s "$DEVICE" mklabel "$PART_TABLE"
# --- Création de la partition ---
echo "--> Création de la partition..."
sudo parted -s "$DEVICE" mkpart primary 1MiB 100%
sudo partprobe "$DEVICE"
sudo udevadm settle
sleep 1
# Déterminer le nom de la première partition
PART="${DEVICE}1"
[[ "$DEVICE" =~ nvme|mmcblk ]] && PART="${DEVICE}p1"
# Attendre que la partition soit créée
sleep 1
if [[ ! -b "$PART" ]]; then
echo "Erreur : la partition $PART n'a pas été créée."
exit 1
fi
echo "--> Formatage en $FSTYPE..."
case "$FSTYPE" in
fat32)
sudo mkfs.vfat -F32 -n "${LABEL^^}" "$PART"
;;
exfat)
sudo mkfs.exfat -n "$LABEL" "$PART"
;;
ext4)
sudo mkfs.ext4 -L "$LABEL" "$PART"
;;
esac
echo "--> Terminé."
lsblk -f "$DEVICE"

View File

@@ -0,0 +1,87 @@
#!/bin/bash
#
# Réinitialise le hotspot "2Limited" sur la carte WiFi disponible.
# Utilisation : sudo ./reset_hotspot.sh
#
set -e # stop en cas d'erreur
# --- Configuration ---
SSID="2Limited"
PASS="calais62"
CHANNEL=6
CONN_NAME="2Limited"
# --- Détection de l'interface WiFi ---
detect_wifi() {
# Liste des interfaces WiFi gérées par NetworkManager (hors loopback, ethernet, etc.)
local iface=$(nmcli -t -f TYPE,DEVICE device | grep -E '^wifi:' | head -1 | cut -d: -f2)
if [ -z "$iface" ]; then
echo "❌ Aucune interface WiFi détectée."
exit 1
fi
echo "$iface"
}
# --- Nettoyage de l'ancienne connexion ---
clean_connection() {
if nmcli con show "$CONN_NAME" &>/dev/null; then
echo "🔁 Suppression de l'ancienne connexion '$CONN_NAME'..."
sudo nmcli con delete "$CONN_NAME" >/dev/null 2>&1 || true
fi
}
# --- Création du hotspot ---
create_hotspot() {
local iface="$1"
echo "📡 Création du hotspot sur $iface..."
sudo nmcli con add type wifi ifname "$iface" mode ap con-name "$CONN_NAME" ssid "$SSID" >/dev/null
sudo nmcli con mod "$CONN_NAME" 802-11-wireless.mode ap
sudo nmcli con mod "$CONN_NAME" 802-11-wireless.band bg
sudo nmcli con mod "$CONN_NAME" 802-11-wireless.channel "$CHANNEL"
sudo nmcli con mod "$CONN_NAME" wifi-sec.key-mgmt wpa-psk
sudo nmcli con mod "$CONN_NAME" wifi-sec.psk "$PASS"
sudo nmcli con mod "$CONN_NAME" 802-11-wireless.powersave 2
sudo nmcli con mod "$CONN_NAME" ipv4.method shared
sudo nmcli con mod "$CONN_NAME" connection.autoconnect yes
}
# --- Démarrage du hotspot ---
start_hotspot() {
echo "▶️ Démarrage du hotspot..."
sudo nmcli con up "$CONN_NAME" >/dev/null
if [ $? -eq 0 ]; then
echo "✅ Hotspot '$SSID' actif."
# Afficher l'IP de la passerelle (le PC)
local gateway=$(ip -4 addr show "$(nmcli -t -f DEVICE device status | grep -E '^wlan' | cut -d: -f1)" | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -1)
echo "🌐 IP du PC (passerelle) : $gateway"
echo "🔑 Mot de passe : $PASS"
echo "📶 Canal : $CHANNEL"
else
echo "❌ Échec du démarrage du hotspot."
exit 1
fi
}
# --- Exécution ---
main() {
echo "🔄 Réinitialisation du hotspot '$SSID'..."
WIFI_IFACE=$(detect_wifi)
echo "🔌 Interface détectée : $WIFI_IFACE"
clean_connection
create_hotspot "$WIFI_IFACE"
start_hotspot
echo ""
echo "✨ Prêt ! L'ESP peut maintenant se connecter à '$SSID'."
}
# Vérification des droits
if [ "$EUID" -ne 0 ]; then
echo "⚠️ Ce script nécessite les droits root. Relance avec sudo."
exit 1
fi
main

View File

@@ -0,0 +1,2 @@
sudo nmcli connection up "Switch-Local"
sudo systemctl start dnsmasq

4
scripts/utilities/to-opus.sh Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/bash
for f in "$@"; do
ffmpeg -i "$f" -c:a libopus -b:a 160k "${f%.*}.opus"
done

2
scripts/utilities/webcam.sh Executable file
View File

@@ -0,0 +1,2 @@
#/bin/bash!
ffplay -fflags nobuffer -flags low_delay -framedrop /dev/video2