Fix hyprland, monitor management and waybar after lua switch
This commit is contained in:
9
scripts/utilities/download-youtube-flac.sh
Executable file
9
scripts/utilities/download-youtube-flac.sh
Executable 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"
|
||||
9
scripts/utilities/download-youtube-mp4.sh
Executable file
9
scripts/utilities/download-youtube-mp4.sh
Executable 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"
|
||||
129
scripts/utilities/download-youtube-xjadeo.sh
Executable file
129
scripts/utilities/download-youtube-xjadeo.sh
Executable 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 "$@"
|
||||
14
scripts/utilities/extract-lrc.sh
Executable file
14
scripts/utilities/extract-lrc.sh
Executable 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
147
scripts/utilities/format.sh
Executable 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 >2 To 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"
|
||||
87
scripts/utilities/network-hotspot.sh
Executable file
87
scripts/utilities/network-hotspot.sh
Executable 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
|
||||
2
scripts/utilities/network-switch-local.sh
Executable file
2
scripts/utilities/network-switch-local.sh
Executable file
@@ -0,0 +1,2 @@
|
||||
sudo nmcli connection up "Switch-Local"
|
||||
sudo systemctl start dnsmasq
|
||||
4
scripts/utilities/to-opus.sh
Executable file
4
scripts/utilities/to-opus.sh
Executable 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
2
scripts/utilities/webcam.sh
Executable file
@@ -0,0 +1,2 @@
|
||||
#/bin/bash!
|
||||
ffplay -fflags nobuffer -flags low_delay -framedrop /dev/video2
|
||||
Reference in New Issue
Block a user