This commit is contained in:
Arthur Wambst 2025-05-30 16:05:36 +02:00
commit 50cc79e001

171
flake.nix Normal file
View File

@ -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;
};
});
}