diff --git a/.gimp.metadata b/.gimp.metadata
new file mode 100644
index 0000000..1e57f28
--- /dev/null
+++ b/.gimp.metadata
@@ -0,0 +1 @@
+79324eeafe2b63fe7f2b1637e57b683695af8f05 SOURCES/gimp-2.99.8.tar.bz2
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a4c3253
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/gimp-2.99.8.tar.bz2
diff --git a/SOURCES/gimp-2.10.0-cm-system-monitor-profile-by-default.patch b/SOURCES/gimp-2.10.0-cm-system-monitor-profile-by-default.patch
new file mode 100644
index 0000000..35493af
--- /dev/null
+++ b/SOURCES/gimp-2.10.0-cm-system-monitor-profile-by-default.patch
@@ -0,0 +1,25 @@
+diff -up gimp-2.10.14/etc/gimprc.in.cm-system-monitor-profile-by-default gimp-2.10.14/etc/gimprc.in
+--- gimp-2.10.14/etc/gimprc.in.cm-system-monitor-profile-by-default 2019-10-26 21:46:48.000000000 +0200
++++ gimp-2.10.14/etc/gimprc.in 2019-11-04 13:17:23.322750636 +0100
+@@ -317,9 +317,9 @@
+
+ # Defines the color management behavior. This is a parameter list.
+ #
+-# (color-management
++(color-management
+ # (mode display)
+-# (display-profile-from-gdk no)
++ (display-profile-from-gdk no)
+ # (display-rendering-intent relative-colorimetric)
+ # (display-use-black-point-compensation yes)
+ # (display-optimize yes)
+@@ -328,7 +328,8 @@
+ # (simulation-optimize yes)
+ # (simulation-gamut-check no)
+ # (out-of-gamut-color (color-rgb 1 0 1))
+-# (display-module "CdisplayLcms"))
++# (display-module "CdisplayLcms")
++)
+
+ # Keep a permanent record of all opened and saved files in the Recent
+ # Documents list. Possible values are yes and no.
diff --git a/SOURCES/gimp-2.10.12-default-font.patch b/SOURCES/gimp-2.10.12-default-font.patch
new file mode 100644
index 0000000..301e4a6
--- /dev/null
+++ b/SOURCES/gimp-2.10.12-default-font.patch
@@ -0,0 +1,12 @@
+diff -urNp a/etc/gimprc.in b/etc/gimprc.in
+--- a/etc/gimprc.in 2019-08-20 13:03:43.195089141 +0200
++++ b/etc/gimprc.in 2019-08-20 13:04:09.109353485 +0200
+@@ -153,7 +153,7 @@
+ # Where to look for fonts in addition to the system-wide installed fonts.
+ # This is a colon-separated list of folders to search.
+ #
+-# (font-path "${gimp_dir}/fonts:${gimp_data_dir}/fonts")
++(font-path "${gimp_dir}/fonts")
+
+ # Specify a default brush. The brush is searched for in the specified brush
+ # path. This is a string value.
diff --git a/SOURCES/gimp-2.10.18-no-phone-home-default.patch b/SOURCES/gimp-2.10.18-no-phone-home-default.patch
new file mode 100644
index 0000000..2054b4a
--- /dev/null
+++ b/SOURCES/gimp-2.10.18-no-phone-home-default.patch
@@ -0,0 +1,12 @@
+diff -up gimp-2.10.18/etc/gimprc.in.no-phone-home-default gimp-2.10.18/etc/gimprc.in
+--- gimp-2.10.18/etc/gimprc.in.no-phone-home-default 2020-02-23 21:15:47.217777581 +0100
++++ gimp-2.10.18/etc/gimprc.in 2020-02-23 21:22:42.416162110 +0100
+@@ -393,7 +393,7 @@
+ # Check for availability of GIMP updates through background internet queries.
+ # Possible values are yes and no.
+ #
+-# (check-updates yes)
++(check-updates no)
+
+ # Timestamp of the last update check. (null)
+ #
diff --git a/SOURCES/gimp-2.10.24-external-help-browser.patch b/SOURCES/gimp-2.10.24-external-help-browser.patch
new file mode 100644
index 0000000..09f4118
--- /dev/null
+++ b/SOURCES/gimp-2.10.24-external-help-browser.patch
@@ -0,0 +1,12 @@
+diff -up gimp-2.10.24/etc/gimprc.in.external-help-browser gimp-2.10.24/etc/gimprc.in
+--- gimp-2.10.24/etc/gimprc.in.external-help-browser 2021-04-03 00:02:39.312656132 +0200
++++ gimp-2.10.24/etc/gimprc.in 2021-04-03 00:03:27.360453285 +0200
+@@ -836,7 +836,7 @@
+ # Sets the browser used by the help system. Possible values are gimp and
+ # web-browser.
+ #
+-# (help-browser web-browser)
++(help-browser web-browser)
+
+ # When enabled, a search of actions will also return inactive actions.
+ # Possible values are yes and no.
diff --git a/SOURCES/gimp-remove-lua.patch b/SOURCES/gimp-remove-lua.patch
new file mode 100644
index 0000000..9e8d712
--- /dev/null
+++ b/SOURCES/gimp-remove-lua.patch
@@ -0,0 +1,371 @@
+diff -urNp a/extensions/goat-exercises/goat-exercise-lua.lua b/extensions/goat-exercises/goat-exercise-lua.lua
+--- a/extensions/goat-exercises/goat-exercise-lua.lua 2022-03-09 09:39:44.007314944 +0100
++++ b/extensions/goat-exercises/goat-exercise-lua.lua 1970-01-01 01:00:00.000000000 +0100
+@@ -1,184 +0,0 @@
+-#!/usr/bin/env luajit
+-
+--- GIMP - The GNU Image Manipulation Program
+--- Copyright (C) 1995 Spencer Kimball and Peter Mattis
+---
+--- goat-exercise-lua.lua
+--- Copyright (C) Jehan
+---
+--- This program is free software: you can redistribute it and/or modify
+--- it under the terms of the GNU General Public License as published by
+--- the Free Software Foundation; either version 3 of the License, or
+--- (at your option) any later version.
+---
+--- This program is distributed in the hope that it will be useful,
+--- but WITHOUT ANY WARRANTY; without even the implied warranty of
+--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+--- GNU General Public License for more details.
+---
+--- You should have received a copy of the GNU General Public License
+--- along with this program. If not, see .
+-
+-local lgi = require 'lgi'
+-
+-local GLib = lgi.GLib
+-local GObject = lgi.GObject
+-local Gio = lgi.Gio
+-local Gegl = lgi.Gegl
+-local Gimp = lgi.Gimp
+-local GimpUi = lgi.GimpUi
+-local Gtk = lgi.Gtk
+-local Gdk = lgi.Gdk
+-
+-local Goat = lgi.package 'Goat'
+-local Goat = lgi.Goat
+-
+-function run(procedure, run_mode, image, drawables, args, run_data)
+- -- procedure:new_return_values() crashes LGI so we construct the
+- -- GimpValueArray manually.
+- local retval = Gimp.ValueArray(1)
+-
+- if table.getn(drawables) ~= 1 then
+- local calling_err = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.CALLING_ERROR)
+- local msg = "Procedure '%s' only works with one drawable."
+-
+- msg = string.format(msg, procedure:get_name())
+-
+- retval:append(calling_err)
+- retval:append(GObject.Value(GObject.Type.STRING, msg))
+- return retval
+- end
+-
+- local drawable = drawables[1]
+-
+- -- Not sure why run_mode has become a string instead of testing
+- -- against Gimp.RunMode.INTERACTIVE.
+- if run_mode == "INTERACTIVE" then
+- GimpUi.init("goat-exercise-lua");
+- local dialog = GimpUi.Dialog {
+- title = "Exercise a goat (Lua)",
+- role = "goat-exercise-Lua",
+- use_header_bar = 1
+- }
+- dialog:add_button("_Cancel", Gtk.ResponseType.CANCEL);
+- dialog:add_button("_Source", Gtk.ResponseType.APPLY);
+- dialog:add_button("_OK", Gtk.ResponseType.OK);
+-
+- local geometry = Gdk.Geometry()
+- geometry.min_aspect = 0.5;
+- geometry.max_aspect = 1.0;
+- dialog:set_geometry_hints (nil, geometry, Gdk.WindowHints.ASPECT);
+-
+- local box = Gtk.Box {
+- orientation = Gtk.Orientation.VERTICAL,
+- spacing = 2
+- }
+- dialog:get_content_area():add(box)
+- box:show()
+-
+- local lang = "Lua"
+- local head_text = "This plug-in is an exercise in '%s' to demo plug-in creation.\n" ..
+- "Check out the last version of the source code online by clicking the \"Source\" button."
+-
+- local label = Gtk.Label { label = string.format(head_text, lang) }
+- box:pack_start(label, false, false, 1)
+- label:show()
+-
+- local contents = GLib.file_get_contents(arg[0])
+- if (contents) then
+- local scrolled = Gtk.ScrolledWindow()
+- scrolled:set_vexpand (true)
+- box:pack_start(scrolled, true, true, 1)
+- scrolled:show()
+-
+- local view = Gtk.TextView()
+- view:set_wrap_mode(Gtk.WrapMode.WORD)
+- view:set_editable(false)
+- local buffer = view:get_buffer()
+- buffer:set_text(contents, -1)
+- scrolled:add(view)
+- view:show()
+- end
+-
+- while (true) do
+- local response = dialog:run()
+- local url = 'https://gitlab.gnome.org/GNOME/gimp/blob/master/extensions/goat-exercises/goat-exercise-lua.lua'
+-
+- if response == Gtk.ResponseType.OK then
+- dialog:destroy()
+- break
+- elseif (response == Gtk.ResponseType.APPLY) then
+- Gio.app_info_launch_default_for_uri(url, nil);
+- else -- CANCEL, CLOSE, DELETE_EVENT
+- dialog:destroy()
+- local cancel = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.CANCEL)
+- retval:append(cancel)
+- return retval
+- end
+- end
+- end
+-
+- local x, y, width, height = drawable:mask_intersect()
+- if width ~= nill and height ~= nil and width > 0 and height > 0 then
+- Gegl.init(nil)
+-
+- local buffer = drawable:get_buffer()
+- local shadow_buffer = drawable:get_shadow_buffer()
+-
+- local graph = Gegl.Node()
+- local input = graph:create_child("gegl:buffer-source")
+- input:set_property("buffer", GObject.Value(Gegl.Buffer, buffer))
+- local invert = graph:create_child("gegl:invert")
+- local output = graph:create_child("gegl:write-buffer")
+- output:set_property("buffer", GObject.Value(Gegl.Buffer, shadow_buffer))
+- input:link(invert)
+- invert:link(output)
+- output:process()
+-
+- shadow_buffer:flush()
+-
+- drawable:merge_shadow(true)
+- drawable:update(x, y, width, height)
+- Gimp.displays_flush()
+- end
+-
+- local success = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.SUCCESS)
+- retval:append(success)
+- return retval
+-end
+-
+-Goat:class('Exercise', Gimp.PlugIn)
+-
+-function Goat.Exercise:do_query_procedures()
+- return { 'plug-in-goat-exercise-lua' }
+-end
+-
+-function Goat.Exercise:do_create_procedure(name)
+- local procedure = Gimp.ImageProcedure.new(self, name,
+- Gimp.PDBProcType.PLUGIN,
+- run, nil)
+-
+- procedure:set_image_types("*");
+- procedure:set_sensitivity_mask(Gimp.ProcedureSensitivityMask.DRAWABLE);
+-
+- procedure:set_menu_label("Exercise a Lua goat");
+- procedure:set_icon_name(GimpUi.ICON_GEGL);
+- procedure:add_menu_path('/Filters/Development/Goat exercises/');
+-
+- procedure:set_documentation("Exercise a goat in the Lua language",
+- "Takes a goat for a walk in Lua",
+- name);
+- procedure:set_attribution("Jehan", "Jehan", "2019");
+-
+- return procedure
+-end
+-
+--- 'arg' is a Lua table. When automatically converted to an array, the
+--- value 0 is deleted (because Lua arrays start at 1!), which breaks
+--- Gimp.main() call. So let's create our own array starting at 1.
+-argv = {}
+-for k, v in pairs(arg) do
+- argv[k+1] = v
+-end
+-
+-Gimp.main(GObject.Type.name(Goat.Exercise), argv)
+diff -urNp a/extensions/goat-exercises/Makefile.am b/extensions/goat-exercises/Makefile.am
+--- a/extensions/goat-exercises/Makefile.am 2022-03-09 09:39:44.007314944 +0100
++++ b/extensions/goat-exercises/Makefile.am 2022-03-09 10:27:14.623108639 +0100
+@@ -72,10 +72,10 @@ endif
+
+ # Lua (lua-jit + LGI) version.
+
+-if BUILD_LUA
+-goat_exercise_luadir = $(goat_exercise_c_libexecdir)
+-goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
+-endif
++#if BUILD_LUA
++#goat_exercise_luadir = $(goat_exercise_c_libexecdir)
++#goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
++#endif
+
+ # Python 3 (pygobject) version.
+
+@@ -135,7 +135,6 @@ org.gimp.extension.goat-exercises.metain
+
+ EXTRA_DIST = \
+ goat-exercise-gjs.js \
+- goat-exercise-lua.lua \
+ goat-exercise-py3.py \
+ $(appstream_in_files)
+
+diff -urNp a/extensions/goat-exercises/Makefile.in b/extensions/goat-exercises/Makefile.in
+--- a/extensions/goat-exercises/Makefile.in 2022-03-09 09:39:44.006314936 +0100
++++ b/extensions/goat-exercises/Makefile.in 2022-03-09 10:28:59.224986448 +0100
+@@ -118,7 +118,6 @@ CONFIG_CLEAN_VPATH_FILES =
+ am__installdirs = "$(DESTDIR)$(goat_exercise_c_libexecdir)" \
+ "$(DESTDIR)$(goat_exercise_vala_libexecdir)" \
+ "$(DESTDIR)$(goat_exercise_gjsdir)" \
+- "$(DESTDIR)$(goat_exercise_luadir)" \
+ "$(DESTDIR)$(goat_exercise_py3dir)" "$(DESTDIR)$(appdatadir)" \
+ "$(DESTDIR)$(goat_exercise_c_libexecdir)" \
+ "$(DESTDIR)$(goat_exercise_vala_libexecdir)"
+@@ -183,7 +182,7 @@ am__uninstall_files_from_dir = { \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+-SCRIPTS = $(goat_exercise_gjs_SCRIPTS) $(goat_exercise_lua_SCRIPTS) \
++SCRIPTS = $(goat_exercise_gjs_SCRIPTS) \
+ $(goat_exercise_py3_SCRIPTS)
+ AM_V_P = $(am__v_P_@AM_V@)
+ am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+@@ -753,8 +752,8 @@ goat_exercise_c_LDADD = \
+ @BUILD_JAVASCRIPT_TRUE@goat_exercise_gjs_SCRIPTS = goat-exercise-gjs.js
+
+ # Lua (lua-jit + LGI) version.
+-@BUILD_LUA_TRUE@goat_exercise_luadir = $(goat_exercise_c_libexecdir)
+-@BUILD_LUA_TRUE@goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
++#@BUILD_LUA_TRUE@goat_exercise_luadir = $(goat_exercise_c_libexecdir)
++#@BUILD_LUA_TRUE@goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
+
+ # Python 3 (pygobject) version.
+ @BUILD_PYTHON_TRUE@goat_exercise_py3dir = $(goat_exercise_c_libexecdir)
+@@ -795,7 +794,6 @@ appdatadir = $(goat_exercise_c_libexecdi
+ appdata_DATA = $(appstream_files)
+ EXTRA_DIST = \
+ goat-exercise-gjs.js \
+- goat-exercise-lua.lua \
+ goat-exercise-py3.py \
+ $(appstream_in_files)
+
+@@ -977,41 +975,41 @@ uninstall-goat_exercise_gjsSCRIPTS:
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ dir='$(DESTDIR)$(goat_exercise_gjsdir)'; $(am__uninstall_files_from_dir)
+-install-goat_exercise_luaSCRIPTS: $(goat_exercise_lua_SCRIPTS)
+- @$(NORMAL_INSTALL)
+- @list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || list=; \
+- if test -n "$$list"; then \
+- echo " $(MKDIR_P) '$(DESTDIR)$(goat_exercise_luadir)'"; \
+- $(MKDIR_P) "$(DESTDIR)$(goat_exercise_luadir)" || exit 1; \
+- fi; \
+- for p in $$list; do \
+- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+- if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+- done | \
+- sed -e 'p;s,.*/,,;n' \
+- -e 'h;s|.*|.|' \
+- -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+- if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+- if (++n[d] == $(am__install_max)) { \
+- print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+- else { print "f", d "/" $$4, $$1 } } \
+- END { for (d in files) print "f", d, files[d] }' | \
+- while read type dir files; do \
+- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+- test -z "$$files" || { \
+- echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(goat_exercise_luadir)$$dir'"; \
+- $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(goat_exercise_luadir)$$dir" || exit $$?; \
+- } \
+- ; done
+-
+-uninstall-goat_exercise_luaSCRIPTS:
+- @$(NORMAL_UNINSTALL)
+- @list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || exit 0; \
+- files=`for p in $$list; do echo "$$p"; done | \
+- sed -e 's,.*/,,;$(transform)'`; \
+- dir='$(DESTDIR)$(goat_exercise_luadir)'; $(am__uninstall_files_from_dir)
++#install-goat_exercise_luaSCRIPTS: $(goat_exercise_lua_SCRIPTS)
++# @$(NORMAL_INSTALL)
++# @list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || list=; \
++# if test -n "$$list"; then \
++# echo " $(MKDIR_P) '$(DESTDIR)$(goat_exercise_luadir)'"; \
++# $(MKDIR_P) "$(DESTDIR)$(goat_exercise_luadir)" || exit 1; \
++# fi; \
++# for p in $$list; do \
++# if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
++# if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
++# done | \
++# sed -e 'p;s,.*/,,;n' \
++# -e 'h;s|.*|.|' \
++# -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
++# $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
++# { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
++# if ($$2 == $$4) { files[d] = files[d] " " $$1; \
++# if (++n[d] == $(am__install_max)) { \
++# print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
++# else { print "f", d "/" $$4, $$1 } } \
++# END { for (d in files) print "f", d, files[d] }' | \
++# while read type dir files; do \
++# if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
++# test -z "$$files" || { \
++# echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(goat_exercise_luadir)$$dir'"; \
++# $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(goat_exercise_luadir)$$dir" || exit $$?; \
++# } \
++# ; done
++
++#uninstall-goat_exercise_luaSCRIPTS:
++# @$(NORMAL_UNINSTALL)
++# @list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || exit 0; \
++# files=`for p in $$list; do echo "$$p"; done | \
++# sed -e 's,.*/,,;$(transform)'`; \
++# dir='$(DESTDIR)$(goat_exercise_luadir)'; $(am__uninstall_files_from_dir)
+ install-goat_exercise_py3SCRIPTS: $(goat_exercise_py3_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ @list='$(goat_exercise_py3_SCRIPTS)'; test -n "$(goat_exercise_py3dir)" || list=; \
+@@ -1266,7 +1264,7 @@ check-am: all-am
+ check: check-am
+ all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(DATA)
+ installdirs:
+- for dir in "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)" "$(DESTDIR)$(goat_exercise_gjsdir)" "$(DESTDIR)$(goat_exercise_luadir)" "$(DESTDIR)$(goat_exercise_py3dir)" "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)"; do \
++ for dir in "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)" "$(DESTDIR)$(goat_exercise_gjsdir)" "$(DESTDIR)$(goat_exercise_py3dir)" "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+ install: install-am
+@@ -1330,7 +1328,6 @@ info: info-am
+ info-am:
+
+ install-data-am: install-appdataDATA install-goat_exercise_gjsSCRIPTS \
+- install-goat_exercise_luaSCRIPTS \
+ install-goat_exercise_py3SCRIPTS
+
+ install-dvi: install-dvi-am
+@@ -1385,7 +1382,6 @@ uninstall-am: uninstall-appdataDATA \
+ uninstall-goat_exercise_c_libexecDATA \
+ uninstall-goat_exercise_c_libexecPROGRAMS \
+ uninstall-goat_exercise_gjsSCRIPTS \
+- uninstall-goat_exercise_luaSCRIPTS \
+ uninstall-goat_exercise_py3SCRIPTS \
+ uninstall-goat_exercise_vala_libexecDATA \
+ uninstall-goat_exercise_vala_libexecPROGRAMS
+@@ -1403,7 +1399,6 @@ uninstall-am: uninstall-appdataDATA \
+ install-goat_exercise_c_libexecDATA \
+ install-goat_exercise_c_libexecPROGRAMS \
+ install-goat_exercise_gjsSCRIPTS \
+- install-goat_exercise_luaSCRIPTS \
+ install-goat_exercise_py3SCRIPTS \
+ install-goat_exercise_vala_libexecDATA \
+ install-goat_exercise_vala_libexecPROGRAMS install-html \
+@@ -1416,7 +1411,6 @@ uninstall-am: uninstall-appdataDATA \
+ uninstall-appdataDATA uninstall-goat_exercise_c_libexecDATA \
+ uninstall-goat_exercise_c_libexecPROGRAMS \
+ uninstall-goat_exercise_gjsSCRIPTS \
+- uninstall-goat_exercise_luaSCRIPTS \
+ uninstall-goat_exercise_py3SCRIPTS \
+ uninstall-goat_exercise_vala_libexecDATA \
+ uninstall-goat_exercise_vala_libexecPROGRAMS
diff --git a/SPECS/gimp.spec b/SPECS/gimp.spec
new file mode 100644
index 0000000..ab314cd
--- /dev/null
+++ b/SPECS/gimp.spec
@@ -0,0 +1,2640 @@
+# Set this to 0 in stable, 1 in (SONAME-wise) unstable releases
+%global unstable 0
+
+#### options:
+# Use the following --with/--without