- Shell 98.7%
- Makefile 1.3%
- .forgejo/workflows/ci.yml : shellcheck ; Wine et AffinityPluginLoader restaurés depuis le cache Forgejo (clé = hachage de leur définition, recompilés sinon) ; sur un tag v*, AppImage + .sha256 publiés dans la release, notes tirées du tag annoté. - apl/build.sh : build direct (Ubuntu 24.04, root) reprenant le Dockerfile de l'amont ; build-in-container.sh l'exécute dans ubuntu:24.04. - packaging/build-tools.sh : TOOLS_DIRECT=1 pour extraire cabextract sans conteneur (job de CI). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .forgejo/workflows | ||
| apl | ||
| docs | ||
| packaging | ||
| src | ||
| wine | ||
| .gitignore | ||
| .shellcheckrc | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
Laffinity
Lance Affinity by Canva (v3) sur Linux depuis une seule AppImage, sans rien installer sur la distro. Affinity est installé dans un préfixe Wine dont tu choisis l'emplacement.
Projet non affilié à Canva. Affinity est une marque de Canva. Rien de Microsoft ni de Canva n'est redistribué : tout est téléchargé depuis les sources officielles sur la machine de l'utilisateur.
Ce qui fonctionne
- Installation complète guidée au premier lancement : choix du dossier, puis une seule fenêtre de progression (pourcentages réels pour le téléchargement et le déploiement d'Affinity, bouton Annuler ; l'installation reprend où elle s'était arrêtée).
- Échelle de l'interface détectée automatiquement d'après le bureau, réappliquée à chaque lancement.
- Interface réactive, glisser-déposer, ouverture de fichiers depuis le gestionnaire de fichiers.
- Connexion au compte Canva (en collant l'URL de retour, voir plus bas).
- Entrée de menu avec la vraie icône d'Affinity, associations
.af,.afdesign,.afphoto,.afpub,.aftemplate. - Mise à jour d'Affinity depuis l'installeur officiel.
Testé sur Aurora (Fedora Kinoite 44), KDE Plasma sous Wayland, GPU Intel Arc (Mesa).
Prérequis
Indispensable
- Linux x86_64, glibc 2.35 ou plus (Ubuntu 22.04, Debian 12, Fedora 36 et plus récents).
- FUSE 3 (
fusermount3) ; à défaut :./Laffinity-*.AppImage --appimage-extract-and-run. - Un pilote GPU avec Vulkan (Mesa pour AMD/Intel, pilote propriétaire NVIDIA).
- Les bibliothèques 64 bits d'un bureau standard (non embarquées) : X11/XWayland,
libxkbcommon,freetype,fontconfig,gnutls(HTTPS, connexion Canva),libvulkan,libGL/libEGL,dbus. Aucune bibliothèque 32 bits. - Outils de base :
bash,curl,tar,xz, GNUgrep(avec-P),awk,sed,find,pgrep,timeout. - Environ 1 Go à télécharger et 5 Go de disque, sur un système de fichiers Linux (pas FAT/exFAT/NTFS).
Optionnel
kdialogouzenitypour les fenêtres de dialogue (sinon : terminal).xproppour terminer Affinity quand il reste bloqué après fermeture (sinon :laffinity kill).xdg-desktop-portalpour les sélecteurs de fichiers natifs.
Utilisation
chmod +x Laffinity-*.AppImage
./Laffinity-*.AppImage # 1er lancement : choix du dossier puis installation (15–30 min)
./Laffinity-*.AppImage help # toutes les commandes
| Commande | Effet |
|---|---|
run [fichiers…] |
Lance Affinity (commande par défaut) ; installe au premier lancement |
setup --prefix DIR |
Prépare un préfixe à un endroit précis, sans boîte de dialogue |
install [--force] |
Met à jour (ou réinstalle) Affinity depuis l'installeur officiel |
install --interactive |
Repli : installeur officiel avec son interface |
prefix [DIR] |
Affiche ou change le préfixe utilisé |
dpi [auto|VALEUR] |
Échelle de l'interface : auto (défaut) ou 96 = 100 %, 144 = 150 %, 192 = 200 % ; sans argument : état |
desktop [--remove] |
Ajoute ou retire l'entrée de menu et les associations de fichiers |
winecfg, regedit, winetricks …, wine … |
Outils Wine sur le préfixe |
kill |
Termine tous les processus Wine du préfixe |
status |
Résumé de l'installation |
| Quoi | Où |
|---|---|
| Configuration | ~/.config/laffinity/config.env |
| Téléchargements et journaux | ~/.cache/laffinity/ |
| État d'installation | <préfixe>/.laffinity/state.env |
| Icônes du menu | ~/.local/share/icons/laffinity/ |
Options de config.env :
PREFIX=…: chemin du préfixe ;DPI=auto(défaut) ouDPI=144: échelle de l'interface. Enauto, le DPI vient deGDK_SCALE/QT_SCALE_FACTOR, sinon deXft.dpi(ce que KDE et GNOME annoncent aux applications XWayland), sinon de GNOME ;D3D12=vkd3d-proton: vkd3d-proton au lieu du D3D12 de Wine (fige l'interface sur Intel Arc / Mesa) ;D3D9=dxvk: d3d9 de DXVK au lieu de celui de Wine.
Variables : LAFFINITY_PREFIX, LAFF_UI=kdialog|zenity|tty, WINEDEBUG.
Connexion Canva
La boîte de connexion ouvre le navigateur. Une fois connecté, copier l'URL de la page de
redirection et la coller dans le champ ajouté par WineFix : le lien affinity:// ne fonctionne pas sous Wine.
Fonctionnement
| Composant | Rôle | Source |
|---|---|---|
Wine 11.12 patché (wine/) |
Compilé dans un conteneur Ubuntu 22.04, WoW64 pur. Patches d'ElementalWarrior (dxcore, OpenCL), d2d1, sélecteurs XDG Portal, ancrage des panneaux | ryzendew/Affinity-Wine-Builder, affinity-infinity — voir wine/patches/SOURCE.md |
AffinityPluginLoader + WineFix (apl/) |
Compilé à un commit figé de la branche dev : connexion Canva, ouverture de fichiers en argument, sauvegarde des préférences… |
noahc3/AffinityPluginLoader (MIT / GPLv2) |
| winetricks + cabextract | Installent .NET 4.8, VC++ 2022 et les polices depuis les installeurs Microsoft | winetricks 20260125, cabextract d'Ubuntu 22.04 |
Wrapper Bash (src/) |
Préfixe, installation, lancement, menu, chien de garde de fermeture | ce dépôt |
| vkd3d-proton 3.0.1, DXVK 3.1.1 | Embarqués, désactivés par défaut | — |
Affinity est installé sans son interface : le MSI est extrait de l'amorceur officiel et déployé
avec msiexec /a (un msiexec /i échoue sous Wine sur ce paquet).
Construire
Prérequis : podman (ou docker), curl, git, make.
make wine # Wine patché (30–60 min la première fois) -> wine/out/
make apl # AffinityPluginLoader + WineFix -> apl/out/
make appimage # winetricks, cabextract, AppImage -> packaging/out/
make lint # shellcheck (installé localement)
CI/CD (Forgejo Actions)
.forgejo/workflows/ci.yml, sur un runner étiqueté docker :
- push sur
main: shellcheck, puis Wine et AffinityPluginLoader restaurés depuis le cache Forgejo (recompilés seulement siwine/ouapl/changent ; Wine : 10 min à 1 h) ; - tag
v*: idem, puis l'AppImageLaffinity-<tag>-x86_64.AppImageet son.sha256sont publiés dans la release du tag, avec le message du tag annoté comme notes.
git tag -a v0.3.0 -m "Notes de version…" && git push origin main --follow-tags
Développement sans AppImage :
mkdir -p /tmp/laff-wine && tar -C /tmp/laff-wine --strip-components=1 -xf wine/out/wine-*.tar.xz
LAFF_WINE_ROOT=/tmp/laff-wine LAFF_TOOLS_DIR=packaging/out/tools LAFF_APL_DIR=apl/out src/laffinity status
src/ wrapper : laffinity (point d'entrée) et lib/*.sh
wine/ build de Wine : build.env (versions figées), patches/, build.sh, build-in-container.sh
apl/ build d'AffinityPluginLoader + WineFix (commit figé, Ubuntu 24.04)
.forgejo/ workflow de CI/CD
packaging/ AppRun, outils embarqués, assemblage de l'AppImage
docs/ notes de diagnostic
Limites connues
- Aide et panneaux web (WebView2) : ne s'ouvrent pas sous Wine.
- Panneaux flottants : peuvent encore poser problème ;
WINE_X11_WM_MOVE=1rétablit le déplacement de fenêtre d'origine. - Fermeture : Affinity reste parfois en mémoire après la fermeture de sa dernière fenêtre.
Laffinity termine alors sa session Wine au bout d'environ 20 s, une fois tout enregistré.
Cause identifiée (verrou de
libnetwork.dllà la sortie) : voirdocs/blocage-fermeture.md.
Dépannage
- Journaux :
~/.cache/laffinity/logs/(prefix-*.log,msiexec.log,affinity.log). - Fenêtre figée : vérifier qu'aucun
D3D12=vkd3d-protonn'est actif dansconfig.env. - Interface trop petite ou trop grande :
laffinity dpiaffiche le DPI détecté ;laffinity dpi 144le force,laffinity dpi autorevient à la détection. - Repartir de zéro : supprimer le dossier du préfixe et
~/.config/laffinity/config.env(le cache~/.cache/laffinity/accélère la réinstallation).
Licence
GPL-2.0 (voir LICENSE). Les composants embarqués gardent leur licence ; elles sont
regroupées dans licenses/ à l'intérieur de l'AppImage.