{ description = "Nix Flake for GIMP 3 built from source"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; # Source du code GIMP gimp-source = { url = "github:GNOME/gimp/gimp-3.0"; flake = false; }; }; outputs = { self, nixpkgs, flake-utils, gimp-source }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; # Fonction pour construire GIMP 3 à partir du code source buildGimp3 = { version ? "3.0.0", enabledFeatures ? [], disabledFeatures ? [] }: pkgs.stdenv.mkDerivation { pname = "gimp"; inherit version; src = gimp-source; # Dépendances de construction nativeBuildInputs = with pkgs; [ pkg-config meson ninja python3 gettext perl intltool appstream-glib desktop-file-utils gobject-introspection wrapGAppsHook ]; # Dépendances d'exécution buildInputs = with pkgs; [ glib gtk3 gdk-pixbuf pango cairo harfbuzz babl gegl libmypaint mypaint-brushes1 gexiv2 libwebp libpng libjpeg libtiff libheif libexif lcms2 poppler poppler_data ghostscript librsvg libmng libjxl libwmf libxslt libxml2 json-glib libgudev iso-codes aalib openexr dbus-glib xorg.libXmu xorg.libXpm zlib bzip2 ] ++ pkgs.lib.optionals (pkgs.stdenv.isLinux) [ libunwind ]; # Configuration meson mesonFlags = [ "-Dbuild-id=Nix" "-Dgtk-doc=false" ] ++ pkgs.lib.optionals (enabledFeatures != []) (map (feature: "-D${feature}=enabled") enabledFeatures) ++ pkgs.lib.optionals (disabledFeatures != []) (map (feature: "-D${feature}=disabled") disabledFeatures); # Post-installation : configuration des plugins postInstall = '' # Création des répertoires pour les plugins mkdir -p $out/lib/gimp/3.0/plug-ins mkdir -p $out/lib/gimp/3.0/scripts ''; meta = with pkgs.lib; { description = "GNU Image Manipulation Program (GIMP) version 3.0"; homepage = "https://www.gimp.org/"; license = licenses.gpl3Plus; platforms = platforms.unix; maintainers = [ maintainers.your-github-username ]; }; }; # Construction de base de GIMP 3 gimp3-base = buildGimp3 {}; # Fonction pour créer un GIMP 3 avec des plugins personnalisés mkGimp3WithPlugins = { plugins ? [], enabledFeatures ? [], disabledFeatures ? [] }: pkgs.symlinkJoin { name = "gimp3-with-plugins"; paths = [ (buildGimp3 { inherit enabledFeatures disabledFeatures; }) ] ++ plugins; # Script pour ajouter les plugins au chemin de recherche de GIMP postBuild = '' # Création d'un wrapper qui configure les chemins des plugins mkdir -p $out/bin cat > $out/bin/gimp << EOF #!/bin/sh export GIMP3_PLUGINDIR=\$HOME/.config/GIMP/3.0/plug-ins:${pkgs.lib.concatStringsSep ":" (map (p: "${p}/lib/gimp/3.0/plug-ins") plugins)} export GIMP3_SCRIPTDIR=\$HOME/.config/GIMP/3.0/scripts:${pkgs.lib.concatStringsSep ":" (map (p: "${p}/lib/gimp/3.0/scripts") plugins)} exec ${gimp3-base}/bin/gimp "\$@" EOF chmod +x $out/bin/gimp ''; }; in { packages = rec { # Le package GIMP 3 de base gimp3 = gimp3-base; # Une version avec des fonctionnalités activées/désactivées gimp3-full = buildGimp3 { enabledFeatures = [ "python" "javascript" "lua" "webp" "openexr" ]; }; default = gimp3; }; # Fonction que d'autres flakes peuvent utiliser lib = { inherit buildGimp3 mkGimp3WithPlugins; }; # Applications exécutables apps = rec { gimp3 = flake-utils.lib.mkApp { drv = self.packages.${system}.gimp3; exePath = "/bin/gimp"; }; default = gimp3; }; }); }