From 50cc79e001e91dd0500660c465882fbab11f1ec6 Mon Sep 17 00:00:00 2001 From: Arthur Wambst Date: Fri, 30 May 2025 16:05:36 +0200 Subject: [PATCH] init --- flake.nix | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 flake.nix diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..1e447ee --- /dev/null +++ b/flake.nix @@ -0,0 +1,171 @@ +{ + 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; + }; + }); +}