diff --git a/flake.nix b/flake.nix index c4ab4d8..a811b4c 100644 --- a/flake.nix +++ b/flake.nix @@ -3,9 +3,9 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; - # Source du code GIMP + # Source du code GIMP gimp-source = { - url = "github:GNOME/gimp/master"; + url = "git+https://gitlab.gnome.org/GNOME/gimp.git"; flake = false; }; }; @@ -13,7 +13,7 @@ flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; - + buildGimp3 = { version ? "3.0.0", enabledFeatures ? [], @@ -21,8 +21,15 @@ }: pkgs.stdenv.mkDerivation rec { pname = "gimp"; inherit version; - src = gimp-source; + # FIXED: Use fetchgit to properly fetch submodules + src = pkgs.fetchgit { + url = "https://gitlab.gnome.org/GNOME/gimp.git"; + rev = "master"; + fetchSubmodules = true; + sha256 = pkgs.lib.fakeSha256; + }; + # FIXED: Added missing critical dependencies nativeBuildInputs = with pkgs; [ pkg-config @@ -42,9 +49,10 @@ libtool git # Sometimes needed during build ]; - + buildInputs = with pkgs; [ glib + glib-networking # FIXED: Moved to more prominent position gtk3 gdk-pixbuf pango @@ -73,7 +81,6 @@ libxml2 json-glib libgudev - glib-networking # iso-codes # Not available in nixpkgs under this name aalib openexr @@ -86,89 +93,129 @@ freetype fontconfig pixman - at-spi2-atk at-spi2-core atk + # FIXED: Additional dependencies that might be needed + libsoup_3 # Required for glib-networking functionality + gsettings-desktop-schemas # For GSettings schemas + hicolor-icon-theme # For proper icon handling + # FIXED: Python dependencies for PyGObject + python3Packages.pygobject3 + python3Packages.pycairo ] ++ pkgs.lib.optionals (pkgs.stdenv.isLinux) [ libunwind ]; - - # More conservative meson configuration + + # FIXED: Better meson configuration with explicit glib-networking support mesonFlags = [ "-Dbuild-id=Nix" - # "-Dgtk-doc=false" - # "-Dg-ir-doc=false" # Disable introspection docs "-Dcheck-update=no" # Disable update checks + # FIXED: Ensure glib-networking is properly detected + "-Dglib-networking=enabled" # Explicitly disable problematic features that might cause build issues "-Dalsa=disabled" - "-Dgudev=disabled" -# "-Dwebkitgtk=disabled" + "-Dgudev=disabled" ] ++ pkgs.lib.optionals (enabledFeatures != []) (map (feature: "-D${feature}=enabled") enabledFeatures) ++ pkgs.lib.optionals (disabledFeatures != []) (map (feature: "-D${feature}=disabled") disabledFeatures); - - # Better build configuration + + # FIXED: Better build configuration with proper environment setup configurePhase = '' runHook preConfigure + + # FIXED: Set up environment for glib-networking detection + export PKG_CONFIG_PATH="${pkgs.glib-networking}/lib/pkgconfig:${pkgs.glib}/lib/pkgconfig:$PKG_CONFIG_PATH" + export GIO_MODULE_DIR="${pkgs.glib-networking}/lib/gio/modules" + # FIXED: Set up Python environment for PyGObject + export PYTHONPATH="${pkgs.python3Packages.pygobject3}/${pkgs.python3.sitePackages}:${pkgs.python3Packages.pycairo}/${pkgs.python3.sitePackages}:$PYTHONPATH" + + # Ensure pkg-config can find all dependencies + export PKG_CONFIG_PATH="${pkgs.lib.concatStringsSep ":" (map (p: "${p}/lib/pkgconfig") buildInputs)}:$PKG_CONFIG_PATH" + # Ensure we have a clean build directory meson setup build . $mesonFlags - + runHook postConfigure ''; - + buildPhase = '' runHook preBuild - + + # FIXED: Set environment variables for build + export GIO_MODULE_DIR="${pkgs.glib-networking}/lib/gio/modules" + export GSETTINGS_SCHEMA_DIR="${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}/glib-2.0/schemas" + # Build with limited parallelism to avoid memory issues ninja -C build -j$NIX_BUILD_CORES - + runHook postBuild ''; - + installPhase = '' runHook preInstall - + ninja -C build install - + runHook postInstall ''; - + 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 - + # FIXED: Ensure desktop file is properly installed mkdir -p $out/share/applications if [ -f build/desktop/org.gimp.GIMP.desktop ]; then cp build/desktop/org.gimp.GIMP.desktop $out/share/applications/ fi + + # FIXED: Set up GIO modules path for runtime + mkdir -p $out/lib/gio/modules + if [ -d "${pkgs.glib-networking}/lib/gio/modules" ]; then + ln -sf "${pkgs.glib-networking}/lib/gio/modules"/* $out/lib/gio/modules/ + fi ''; - - # Add environment variables that might be needed + + # FIXED: Add environment variables that might be needed preBuild = '' export HOME=$(mktemp -d) export XDG_CACHE_HOME=$HOME/.cache export XDG_CONFIG_HOME=$HOME/.config export XDG_DATA_HOME=$HOME/.local/share + + # FIXED: Ensure glib-networking is available + export GIO_MODULE_DIR="${pkgs.glib-networking}/lib/gio/modules" + export GSETTINGS_SCHEMA_DIR="${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}/glib-2.0/schemas" + + # FIXED: Python environment for PyGObject + export PYTHONPATH="${pkgs.python3Packages.pygobject3}/${pkgs.python3.sitePackages}:${pkgs.python3Packages.pycairo}/${pkgs.python3.sitePackages}:$PYTHONPATH" ''; - + + # FIXED: Add preFixup to handle GSettings and GIO modules + preFixup = '' + gappsWrapperArgs+=( + --prefix GIO_MODULE_DIR : "${pkgs.glib-networking}/lib/gio/modules" + --prefix GSETTINGS_SCHEMA_DIR : "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}/glib-2.0/schemas" + ) + ''; + 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 = [ ]; # Removed invalid maintainer reference - broken = false; # Mark as not broken + maintainers = [ ]; + broken = false; }; }; - + # Construction de base de GIMP 3 gimp3-base = buildGimp3 {}; - + mkGimp3WithPlugins = { plugins ? [], enabledFeatures ? [], @@ -176,13 +223,14 @@ }: pkgs.symlinkJoin { name = "gimp3-with-plugins"; paths = [ (buildGimp3 { inherit enabledFeatures disabledFeatures; }) ] ++ plugins; - + postBuild = '' 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)} + export GIO_MODULE_DIR="${pkgs.glib-networking}/lib/gio/modules" exec ${gimp3-base}/bin/gimp "\$@" EOF chmod +x $out/bin/gimp @@ -194,51 +242,44 @@ # Ultra-minimal version for testing gimp3-test = buildGimp3 { disabledFeatures = [ - #"python" - "javascript" - #"lua" - #"webkitgtk" + "javascript" "alsa" "gudev" - #"check-update" - #"gtk-doc" - #"g-ir-doc" ]; }; - + gimp3 = gimp3-base; - + # Simplified version with fewer potential build issues gimp3-minimal = buildGimp3 { disabledFeatures = [ "python" - "javascript" + "javascript" "lua" "webkitgtk" "alsa" "gudev" ]; }; - + gimp3-full = buildGimp3 { enabledFeatures = [ "webp" "openexr" ]; - # Don't enable scripting languages by default as they can cause build issues }; - - default = gimp3-test; # Start with the most minimal version + + default = gimp3-test; }; - + lib = { inherit buildGimp3 mkGimp3WithPlugins; }; - + apps = rec { - gimp3 = flake-utils.lib.mkApp { - drv = self.packages.${system}.gimp3; - exePath = "/bin/gimp"; + gimp3 = flake-utils.lib.mkApp { + drv = self.packages.${system}.gimp3; + exePath = "/bin/gimp"; }; default = gimp3; };