No description
  • JavaScript 65.4%
  • Nix 34.6%
Find a file
Supertaranta bbf5c99b40 feat(downloads): notification de fin + noms de fichiers uniques
Le téléchargement silencieux (aucun dialogue, aucun retour) passait pour
cassé alors que les fichiers arrivaient bien dans ~/Téléchargements.
Désormais : notification à la fin (clic = révèle le fichier dans le
dossier), notification aussi en cas d'échec, et suffixe « (1) » si un
fichier du même nom existe déjà au lieu de l'écraser en silence.

Co-Authored-By: Supertaranta <larry@floating-coconuts.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 11:42:10 -04:00
app feat(downloads): notification de fin + noms de fichiers uniques 2026-07-03 11:42:10 -04:00
flake.lock Whatzefuck! — client WhatsApp Web pour NixOS/COSMIC 2026-06-23 20:22:10 -04:00
flake.nix feat(downloads): notification de fin + noms de fichiers uniques 2026-07-03 11:42:10 -04:00
LICENSE Ajoute le texte LICENSE AGPL-3.0 (verbatim GNU) 2026-06-23 20:46:12 -04:00
README.md Update README.md 2026-06-24 18:00:59 +02:00

Whatzefuck!

Client WhatsApp pour NixOS / COSMIC, bientôt disponible sur COSNIX, un distro Linux Qui intègre NixOS et Cosmic avec la philosophie de QuebeOS. WhatsApp Web en fenêtre dédiée, empaqueté comme un client natif via un wrapper Electron minimal (~190 lignes, zéro dépendance npm) : le vrai client Meta tourne dans Chromium, le wrapper n'ajoute que l'intégration desktop.

Pensé spécifiquement pour NixOS (build reproductible hors-ligne via pkgs.electron, installable en flake / nix profile) et le bureau COSMIC (System76) : entrée de launcher « Whatzefuck! » avec icône dédiée, gestion du tray et de la résolution d'icône propre à COSMIC (voir section COSMIC plus bas). Le package et le binaire s'appellent whatzefuck.

Pourquoi pas Rust/wry ? Sur Linux, wry = WebKitGTK = pas de WebRTC (appels morts) et codecs vidéo fragiles. Le moteur décide de tout : liens, vidéo, VoIP, YouTube, fichiers = Chromium obligatoire. Pourquoi pas ZapZap ? PyQt6/Flatpak, cassé sur Nix. Ici tout passe par nixpkgs (pkgs.electron), build hors-ligne, reproductible.

Ce que ça fait

  • Session persistante (profil isolé persist:whatsapp)
  • Liens externes → ton navigateur par défaut (xdg-open)
  • Tray + clic pour afficher/masquer ; fermer = minimiser, pas quitter
  • Badge de non-lus (parse le titre (3) WhatsApp)
  • Micro/caméra autorisés → appels voix/vidéo dès que Meta active le rollout sur ton compte (en cours depuis fév. 2026 — si tu ne vois pas les boutons d'appel dans une conversation, c'est leur rollout, pas le wrapper)
  • Partage d'écran via le portail système (Wayland OK)
  • Correcteur FR/EN avec suggestions au clic droit
  • Téléchargements directs dans ~/Téléchargements
  • UA Chrome pur (pas de token Electron → pas de page "navigateur non supporté")
  • Instance unique ; --hidden pour démarrer minimisé

Installation

Essai rapide

nix run .              # depuis le dossier du projet
nix profile install .  # installe le binaire `whatzefuck` + l'entrée launcher

Dans ta config NixOS (flake)

# flake.nix de ta config
inputs.whatzefuck.url = "path:/chemin/vers/whatzefuck"; # ou github:.../...

# puis dans tes packages :
environment.systemPackages = [ inputs.whatzefuck.packages.${pkgs.system}.default ];
# ou home-manager :
home.packages = [ inputs.whatzefuck.packages.${pkgs.system}.default ];

Module clé en main (cache d'icône automatique) — recommandé

Pour qu'un installateur lambda n'ait rien à faire à la main (le cache d'icône est régénéré tout seul → l'icône apparaît dans le launcher) :

# NixOS déclaratif
imports = [ inputs.whatzefuck.nixosModules.default ];
programs.whatzefuck.enable = true;        # régénère le cache au rebuild

# ou home-manager
imports = [ inputs.whatzefuck.homeManagerModules.default ];
programs.whatzefuck.enable = true;        # régénère le cache à chaque switch

Autostart minimisé (home-manager)

xdg.configFile."autostart/whatzefuck.desktop".text = ''
  [Desktop Entry]
  Type=Application
  Name=Whatzefuck!
  Exec=whatzefuck --hidden
  X-GNOME-Autostart-enabled=true
'';

COSMIC

Sur le bureau COSMIC, le dossier d'icônes d'un profil nix profile n'a ni index.theme ni cache, donc le launcher ne résout pas toujours Icon=whatzefuck. Si l'icône n'apparaît pas après l'install :

# 1. icône en tailles standard dans le chemin cherché en premier
for s in 48 64 128 256; do
  mkdir -p ~/.local/share/icons/hicolor/${s}x${s}/apps
  magick app/icon.png -background none -resize ${s}x${s} \
    ~/.local/share/icons/hicolor/${s}x${s}/apps/whatzefuck.png
done
# 2. régénère le cache (gtk-update-icon-cache vient de gtk3)
gtk-update-icon-cache -f ~/.local/share/icons/hicolor

Au besoin, une entrée ~/.local/share/applications/whatzefuck.desktop avec Icon= en chemin absolu force la résolution même sans cache. Une déconnexion/reconnexion COSMIC rafraîchit le launcher.

Limites connues

  • Le badge app.setBadgeCount dépend du DE (fonctionne avec les launchers compatibles Unity ; sinon le compte reste visible dans le tooltip du tray).
  • Le tray nécessite libappindicator côté DE (GNOME : extension AppIndicator).
  • C'est WhatsApp Web : téléphone pas nécessaire en permanence (multi-device), mais le compte reste lié à ton numéro chez Meta.

Hygiène

Ce wrapper crée un nouvel appareil lié dans WhatsApp.

Licence

AGPL-3.0-or-later — Floating Coconuts. "WhatsApp" est une marque de Meta ; ce projet n'est ni affilié ni approuvé par Meta. L'icône est une image personnelle ("Whatzefuck!"), pas le logo WhatsApp.