summary refs log tree commit diff
path: root/pkgs/desktops/gnustep
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2016-08-16 20:51:27 +0000
committerMatthew Bauer <mjbauer95@gmail.com>2016-08-16 21:53:45 +0000
commit2e5edbfd99c4eb01cdb08e6735879701dbdc2fc7 (patch)
tree14d2fcc8293f1992b98293e3283c4deab0e5b731 /pkgs/desktops/gnustep
parent63bd635f80a033581f4bfa5554b861cb90268792 (diff)
downloadnixpkgs-2e5edbfd99c4eb01cdb08e6735879701dbdc2fc7.tar
nixpkgs-2e5edbfd99c4eb01cdb08e6735879701dbdc2fc7.tar.gz
nixpkgs-2e5edbfd99c4eb01cdb08e6735879701dbdc2fc7.tar.bz2
nixpkgs-2e5edbfd99c4eb01cdb08e6735879701dbdc2fc7.tar.lz
nixpkgs-2e5edbfd99c4eb01cdb08e6735879701dbdc2fc7.tar.xz
nixpkgs-2e5edbfd99c4eb01cdb08e6735879701dbdc2fc7.tar.zst
nixpkgs-2e5edbfd99c4eb01cdb08e6735879701dbdc2fc7.zip
gnustep: move to pkgs/desktops/gnustep
Diffstat (limited to 'pkgs/desktops/gnustep')
-rw-r--r--pkgs/desktops/gnustep/back/default.nix22
-rw-r--r--pkgs/desktops/gnustep/back/fixup-tools.patch14
-rw-r--r--pkgs/desktops/gnustep/base/default.nix38
-rw-r--r--pkgs/desktops/gnustep/base/fixup-base-makefile-installdir.patch29
-rw-r--r--pkgs/desktops/gnustep/base/fixup-paths.patch373
-rw-r--r--pkgs/desktops/gnustep/default.nix21
-rw-r--r--pkgs/desktops/gnustep/gorm/default.nix17
-rw-r--r--pkgs/desktops/gnustep/gorm/fix-gs-makefiles.patch27
-rw-r--r--pkgs/desktops/gnustep/gui/default.nix16
-rw-r--r--pkgs/desktops/gnustep/gui/fixup-all.patch56
-rw-r--r--pkgs/desktops/gnustep/gui/fixup-gui-makefile-installdir.patch28
-rw-r--r--pkgs/desktops/gnustep/gui/fixup-gui-textconverters-preamble.patch11
-rw-r--r--pkgs/desktops/gnustep/gui/fixup-gui-tools-preamble.patch14
-rw-r--r--pkgs/desktops/gnustep/gworkspace/default.nix23
-rw-r--r--pkgs/desktops/gnustep/libobjc2/default.nix28
-rw-r--r--pkgs/desktops/gnustep/make/GNUstep.conf126
-rw-r--r--pkgs/desktops/gnustep/make/builder.sh122
-rw-r--r--pkgs/desktops/gnustep/make/default.nix25
-rw-r--r--pkgs/desktops/gnustep/make/fixup-paths.patch197
-rw-r--r--pkgs/desktops/gnustep/make/gs-makefiles-additional.patch145
-rw-r--r--pkgs/desktops/gnustep/make/gsmakeDerivation.nix19
-rw-r--r--pkgs/desktops/gnustep/make/setup-hook.sh77
-rw-r--r--pkgs/desktops/gnustep/make/wrapper.sh4
-rw-r--r--pkgs/desktops/gnustep/projectcenter/default.nix23
-rw-r--r--pkgs/desktops/gnustep/projectcenter/fixup-preamble.patch14
-rw-r--r--pkgs/desktops/gnustep/systempreferences/default.nix17
26 files changed, 1486 insertions, 0 deletions
diff --git a/pkgs/desktops/gnustep/back/default.nix b/pkgs/desktops/gnustep/back/default.nix
new file mode 100644
index 00000000000..8e11a286284
--- /dev/null
+++ b/pkgs/desktops/gnustep/back/default.nix
@@ -0,0 +1,22 @@
+{ gsmakeDerivation
+, cairo
+, fetchurl
+, base, gui
+, x11
+, freetype
+, pkgconfig
+}:
+let
+  version = "0.25.0";
+in
+gsmakeDerivation {
+  name = "gnustep-back-${version}";
+  src = fetchurl {
+    url = "ftp://ftp.gnustep.org/pub/gnustep/core/gnustep-back-${version}.tar.gz";
+    sha256 = "14gs1b32ahnihd7mwpjrws2b8hl11rl1wl24a7651d3z2l7f6xj2";
+  };
+  buildInputs = [ cairo base gui freetype pkgconfig x11 ];
+  meta = {
+    description = "A generic backend for GNUstep";
+  };
+}
diff --git a/pkgs/desktops/gnustep/back/fixup-tools.patch b/pkgs/desktops/gnustep/back/fixup-tools.patch
new file mode 100644
index 00000000000..a47de5478e3
--- /dev/null
+++ b/pkgs/desktops/gnustep/back/fixup-tools.patch
@@ -0,0 +1,14 @@
+diff -c gnustep-back-0.24.0/Tools/GNUmakefile.preamble gnustep-back-0.24.0.patched/Tools/GNUmakefile.preamble
+--- gnustep-back-0.24.0/Tools/GNUmakefile.preamble	2013-07-04 22:44:28.000000000 +0600
++++ gnustep-back-0.24.0.patched/Tools/GNUmakefile.preamble	2014-12-01 16:40:37.000000000 +0600
+@@ -52,6 +52,9 @@
+ # Additional libraries when linking applications
+ #ADDITIONAL_GUI_LIBS +=
+ 
++# Additional libraries when linking tools
++gpbs_TOOL_LIBS += -lgnustep-gui -lgnustep-base $(SYSTEM_LIBS)
++
+ #
+ # Flags dealing with installing and uninstalling
+ #
+
diff --git a/pkgs/desktops/gnustep/base/default.nix b/pkgs/desktops/gnustep/base/default.nix
new file mode 100644
index 00000000000..4d9f763acc4
--- /dev/null
+++ b/pkgs/desktops/gnustep/base/default.nix
@@ -0,0 +1,38 @@
+{ aspell, audiofile
+, gsmakeDerivation
+, cups
+, fetchurl
+, gmp, gnutls
+, libffi
+, libjpeg, libtiff, libpng, giflib, libungif
+, libxml2, libxslt, libiconv
+, libobjc, libgcrypt
+, icu
+, pkgconfig, portaudio
+}:
+let
+  version = "1.24.9";
+in
+gsmakeDerivation {
+  name = "gnustep-base-${version}";
+  src = fetchurl {
+    url = "ftp://ftp.gnustep.org/pub/gnustep/core/gnustep-base-${version}.tar.gz";
+    sha256 = "1vvjlbqmlwr82b4pf8c62rxjgz475bmg0x2yd0bbkia6yvwhk585";
+  };
+  nativeBuildInputs = [ pkgconfig ];
+  propagatedBuildInputs = [
+    aspell audiofile
+    cups
+    gmp gnutls
+    libffi
+    libjpeg libtiff libpng giflib libungif
+    libxml2 libxslt libiconv
+    libobjc libgcrypt
+    icu
+    portaudio
+  ];
+  patches = [ ./fixup-paths.patch ];
+  meta = {
+    description = "An implementation of AppKit and Foundation libraries of OPENSTEP and Cocoa";
+  };
+}
diff --git a/pkgs/desktops/gnustep/base/fixup-base-makefile-installdir.patch b/pkgs/desktops/gnustep/base/fixup-base-makefile-installdir.patch
new file mode 100644
index 00000000000..482c72a5190
--- /dev/null
+++ b/pkgs/desktops/gnustep/base/fixup-base-makefile-installdir.patch
@@ -0,0 +1,29 @@
+--- gnustep-base-1.24.7/Makefile.postamble	2011-07-15 19:53:45.000000000 +0600
++++ gnustep-base-1.24.7.patched/Makefile.postamble	2014-11-29 22:25:07.000000000 +0600
+@@ -38,13 +38,13 @@
+ # Things to do after compiling
+ # after-all::
+ 
+-$(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional:
+-	$(ECHO_CREATING)$(MKDIRS) $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional$(END_ECHO)
++$(DESTDIR_GNUSTEP_MAKEFILES)/Additional:
++	$(ECHO_CREATING)$(MKDIRS) $(DESTDIR_GNUSTEP_MAKEFILES)/Additional$(END_ECHO)
+ 
+ # Things to do before installing
+-before-install:: $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional
++before-install:: $(DESTDIR_GNUSTEP_MAKEFILES)/Additional
+ 	$(ECHO_NOTHING)$(INSTALL_DATA) base.make \
+-	    $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional/base.make$(END_ECHO)
++	    $(DESTDIR_GNUSTEP_MAKEFILES)/Additional/base.make$(END_ECHO)
+ 
+ # Things to do after installing
+ # after-install::
+@@ -54,7 +54,7 @@
+ 
+ # Things to do after uninstalling
+ after-uninstall::
+-	$(ECHO_NOTHING)rm -f $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional/base.make$(END_ECHO)
++	$(ECHO_NOTHING)rm -f $(DESTDIR_GNUSTEP_MAKEFILES)/Additional/base.make$(END_ECHO)
+ 
+ # Things to do before cleaning
+ # before-clean::
diff --git a/pkgs/desktops/gnustep/base/fixup-paths.patch b/pkgs/desktops/gnustep/base/fixup-paths.patch
new file mode 100644
index 00000000000..fa28412dbf6
--- /dev/null
+++ b/pkgs/desktops/gnustep/base/fixup-paths.patch
@@ -0,0 +1,373 @@
+diff -r -u gnustep-base-1.24.7/Makefile.postamble gnustep-base-1.24.7.patched/Makefile.postamble
+--- gnustep-base-1.24.7/Makefile.postamble	2011-07-15 19:53:45.000000000 +0600
++++ gnustep-base-1.24.7.patched/Makefile.postamble	2014-11-29 22:25:07.000000000 +0600
+@@ -38,13 +38,13 @@
+ # Things to do after compiling
+ # after-all::
+ 
+-$(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional:
+-	$(ECHO_CREATING)$(MKDIRS) $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional$(END_ECHO)
++$(DESTDIR_GNUSTEP_MAKEFILES)/Additional:
++	$(ECHO_CREATING)$(MKDIRS) $(DESTDIR_GNUSTEP_MAKEFILES)/Additional$(END_ECHO)
+ 
+ # Things to do before installing
+-before-install:: $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional
++before-install:: $(DESTDIR_GNUSTEP_MAKEFILES)/Additional
+ 	$(ECHO_NOTHING)$(INSTALL_DATA) base.make \
+-	    $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional/base.make$(END_ECHO)
++	    $(DESTDIR_GNUSTEP_MAKEFILES)/Additional/base.make$(END_ECHO)
+ 
+ # Things to do after installing
+ # after-install::
+@@ -54,7 +54,7 @@
+ 
+ # Things to do after uninstalling
+ after-uninstall::
+-	$(ECHO_NOTHING)rm -f $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional/base.make$(END_ECHO)
++	$(ECHO_NOTHING)rm -f $(DESTDIR_GNUSTEP_MAKEFILES)/Additional/base.make$(END_ECHO)
+ 
+ # Things to do before cleaning
+ # before-clean::
+diff -r -u gnustep-base-1.24.7/Source/NSPathUtilities.m gnustep-base-1.24.7.patched/Source/NSPathUtilities.m
+--- gnustep-base-1.24.7/Source/NSPathUtilities.m	2014-01-14 13:21:10.000000000 +0600
++++ gnustep-base-1.24.7.patched/Source/NSPathUtilities.m	2015-01-25 13:59:37.000000000 +0600
+@@ -153,16 +153,27 @@
+ static NSString *gnustepLocalUsersDir = nil;
+ 
+ static NSString *gnustepSystemApps = nil;
++static NSArray *gnustepSystemAppsNix = nil;
+ static NSString *gnustepSystemAdminApps = nil;
++static NSArray *gnustepSystemAdminAppsNix = nil;
+ static NSString *gnustepSystemWebApps = nil;
++static NSArray *gnustepSystemWebAppsNix = nil;
+ static NSString *gnustepSystemTools = nil;
++static NSArray *gnustepSystemToolsNix = nil;
+ static NSString *gnustepSystemAdminTools = nil;
++static NSArray *gnustepSystemAdminToolsNix = nil;
+ static NSString *gnustepSystemLibrary = nil;
++static NSArray *gnustepSystemLibraryNix = nil;
+ static NSString *gnustepSystemLibraries = nil;
++static NSArray *gnustepSystemLibrariesNix = nil;
+ static NSString *gnustepSystemHeaders = nil;
++static NSArray *gnustepSystemHeadersNix = nil;
+ static NSString *gnustepSystemDocumentation = nil;
++static NSArray *gnustepSystemDocumentationNix = nil;
+ static NSString *gnustepSystemDocumentationInfo = nil;
++static NSArray *gnustepSystemDocumentationInfoNix = nil;
+ static NSString *gnustepSystemDocumentationMan = nil;
++static NSArray *gnustepSystemDocumentationManNix = nil;
+ 
+ static NSString *gnustepNetworkApps = nil;
+ static NSString *gnustepNetworkAdminApps = nil;
+@@ -258,6 +269,18 @@
+     }\
+ })
+ 
++/* Like ASSIGN_PATH, but permits multiple components in a path
++ */
++#define ASSIGN_PATH_NIX(var, dictionary, key) ({\
++  id val = getPathConfigNix(dictionary, key);\
++  if (val != nil)\
++    {\
++      RELEASE(var);\
++      var = RETAIN(val);\
++      [dictionary removeObjectForKey: key];\
++    }\
++})
++
+ /* Like ASSIGN_PATH(), but permits the result to be a relative path as that
+  * is what we normally use (the path is within the user's home directory).
+  */
+@@ -368,7 +391,7 @@
+ /* Get a full path string */
+ static inline NSString *
+ getPath(NSString *path)
+-{
++{  
+   if ([path hasPrefix: @"./"] == YES)
+     {
+       path = [gnustepConfigPath stringByAppendingPathComponent:
+@@ -383,6 +406,33 @@
+   return path;
+ }
+ 
++static inline NSArray *
++getPathConfigNix(NSDictionary *dict, NSString *key)
++{
++  NSArray *res = nil;
++  NSMutableArray *paths = nil;
++  NSString *path;
++#if defined(__MINGW_)
++  NSString *sep = @";";
++#else
++  NSString *sep = @":";
++#endif
++
++  path = [dict objectForKey: key];
++  if (path != nil)
++    {
++      if ([path rangeOfString:sep].location != NSNotFound)
++	{
++	  res = [path componentsSeparatedByString:sep];
++	}
++      else
++	{
++	  res = [[NSArray alloc] initWithObjects:path, nil];
++	}
++    }
++  return res;
++}
++
+ /* Get a full path string from a dictionary */
+ static inline NSString *
+ getPathConfig(NSDictionary *dict, NSString *key)
+@@ -468,6 +518,29 @@
+   ASSIGN_PATH(gnustepSystemDocumentationInfo, c,
+     @"GNUSTEP_SYSTEM_DOC_INFO");
+ 
++  ASSIGN_PATH_NIX(gnustepSystemAppsNix, c,
++    @"NIX_GNUSTEP_SYSTEM_APPS");
++  ASSIGN_PATH_NIX(gnustepSystemAdminAppsNix, c,
++    @"NIX_GNUSTEP_SYSTEM_ADMIN_APPS");
++  ASSIGN_PATH_NIX(gnustepSystemWebAppsNix, c,
++    @"NIX_GNUSTEP_SYSTEM_WEB_APPS");
++  ASSIGN_PATH_NIX(gnustepSystemToolsNix, c,
++    @"NIX_GNUSTEP_SYSTEM_TOOLS");
++  ASSIGN_PATH_NIX(gnustepSystemAdminToolsNix, c,
++    @"NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS");
++  ASSIGN_PATH_NIX(gnustepSystemLibraryNix, c,
++    @"NIX_GNUSTEP_SYSTEM_LIBRARY");
++  ASSIGN_PATH_NIX(gnustepSystemLibrariesNix, c,
++    @"NIX_GNUSTEP_SYSTEM_LIBRARIES");
++  ASSIGN_PATH_NIX(gnustepSystemHeadersNix, c,
++    @"NIX_GNUSTEP_SYSTEM_HEADERS");
++  ASSIGN_PATH_NIX(gnustepSystemDocumentationNix, c,
++    @"NIX_GNUSTEP_SYSTEM_DOC");
++  ASSIGN_PATH_NIX(gnustepSystemDocumentationManNix, c,
++    @"NIX_GNUSTEP_SYSTEM_DOC_MAN");
++  ASSIGN_PATH_NIX(gnustepSystemDocumentationInfoNix, c,
++    @"NIX_GNUSTEP_SYSTEM_DOC_INFO");
++
+   ASSIGN_PATH(gnustepNetworkApps, c,
+     @"GNUSTEP_NETWORK_APPS");
+   ASSIGN_PATH(gnustepNetworkAdminApps, c,
+@@ -1235,6 +1308,18 @@
+   DESTROY(gnustepSystemDocumentationMan);
+   DESTROY(gnustepSystemDocumentationInfo);
+ 
++  DESTROY(gnustepSystemAppsNix);
++  DESTROY(gnustepSystemAdminAppsNix);
++  DESTROY(gnustepSystemWebAppsNix);
++  DESTROY(gnustepSystemToolsNix);
++  DESTROY(gnustepSystemAdminToolsNix);
++  DESTROY(gnustepSystemLibraryNix);
++  DESTROY(gnustepSystemLibrariesNix);
++  DESTROY(gnustepSystemHeadersNix);
++  DESTROY(gnustepSystemDocumentationNix);
++  DESTROY(gnustepSystemDocumentationManNix);
++  DESTROY(gnustepSystemDocumentationInfoNix);
++
+   DESTROY(gnustepNetworkApps);
+   DESTROY(gnustepNetworkAdminApps);
+   DESTROY(gnustepNetworkWebApps);
+@@ -2183,6 +2268,27 @@
+   if ([add_dir length] > 0 && [paths containsObject: add_dir] == NO) \
+     [paths addObject: add_dir]; \
+ }
++#define ADD_PATH_NIX(mask, base_dirs, add_dir) \
++if ((domainMask & mask) && (base_dirs != nil)) \
++{ \
++  NSEnumerator *e = [base_dirs objectEnumerator]; \
++  NSString *dir = nil; \
++  while (dir = [e nextObject]) { \
++    path = [dir stringByAppendingPathComponent: add_dir]; \
++    if ([path length] > 0 && [paths containsObject: path] == NO) \
++      [paths addObject: path]; \
++  } \
++}
++#define ADD_PLATFORM_PATH_NIX(mask, add_dirs) \
++if ((domainMask & mask) && (add_dirs != nil)) \
++{ \
++  NSEnumerator *e = [add_dirs objectEnumerator]; \
++  NSString *dir = nil; \
++  while (dir = [e nextObject]) { \
++    if ([dir length] > 0 && [paths containsObject: dir] == NO) \
++      [paths addObject:dir]; \
++  } \
++}
+ 
+   switch (directoryKey)
+     {
+@@ -2191,11 +2297,13 @@
+ 	  ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserApps);
+ 	  ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalApps);
+ 	  ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkApps);
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAppsNix);
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemApps);
+ 
+ 	  ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserAdminApps);
+ 	  ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalAdminApps);
+ 	  ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkAdminApps);
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminAppsNix);
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemAdminApps);
+ 	}
+ 	break;
+@@ -2205,6 +2313,7 @@
+ 	  ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserApps);
+ 	  ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalApps);
+ 	  ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkApps);
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAppsNix);
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemApps);
+ 	}
+ 	break;
+@@ -2214,6 +2323,7 @@
+ 	  ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserApps);
+ 	  ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalApps);
+ 	  ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkApps);
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAppsNix);
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemApps);
+ 
+ 	  /* I imagine if ever wanted a separate Demo directory, the
+@@ -2231,6 +2341,7 @@
+ 
+       case NSCoreServicesDirectory:
+ 	{
++	  ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix, @"CoreServices");
+ 	  ADD_PATH(NSSystemDomainMask, gnustepSystemLibrary, @"CoreServices");
+ 	}
+ 	break;
+@@ -2248,6 +2359,7 @@
+ 	  ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserApps);
+ 	  ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalApps);
+ 	  ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkApps);
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAppsNix);
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemApps);
+ 	}
+ 	break;
+@@ -2257,6 +2369,7 @@
+ 	  ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserAdminApps);
+ 	  ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalAdminApps);
+ 	  ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkAdminApps);
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminAppsNix);
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemAdminApps);
+ 	}
+ 	break;
+@@ -2266,6 +2379,7 @@
+ 	  ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserLibrary);
+ 	  ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalLibrary);
+ 	  ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkLibrary);
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix);
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemLibrary);
+ 	}
+ 	break;
+@@ -2281,6 +2395,7 @@
+ 	  ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserLibrary);
+ 	  ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalLibrary);
+ 	  ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkLibrary);
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix);
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemLibrary);
+ 	}
+ 	break;
+@@ -2418,6 +2533,7 @@
+ 	  ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserDocumentation);
+ 	  ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalDocumentation);
+ 	  ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkDocumentation);
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemDocumentationNix);
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemDocumentation);
+ 	}
+ 	break;
+@@ -2449,6 +2565,7 @@
+ 	  ADD_PATH(NSUserDomainMask, gnustepUserLibrary, @"Caches");
+ 	  ADD_PATH(NSLocalDomainMask, gnustepLocalLibrary, @"Caches");
+ 	  ADD_PATH(NSNetworkDomainMask, gnustepNetworkLibrary, @"Caches");
++	  ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix, @"Caches");
+ 	  ADD_PATH(NSSystemDomainMask, gnustepSystemLibrary, @"Caches");
+ 	}
+ 	break;
+@@ -2460,6 +2577,8 @@
+ 	    @"ApplicationSupport");
+ 	  ADD_PATH(NSNetworkDomainMask, gnustepNetworkLibrary,
+ 	    @"ApplicationSupport");
++	  ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix,
++            @"ApplicationSupport");
+ 	  ADD_PATH(NSSystemDomainMask, gnustepSystemLibrary,
+ 	    @"ApplicationSupport");
+ 	}
+@@ -2471,6 +2590,7 @@
+ 	  ADD_PATH(NSUserDomainMask, gnustepUserLibrary, @"Frameworks");
+ 	  ADD_PATH(NSLocalDomainMask, gnustepLocalLibrary, @"Frameworks");
+ 	  ADD_PATH(NSNetworkDomainMask, gnustepNetworkLibrary, @"Frameworks");
++	  ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix, @"Frameworks");
+ 	  ADD_PATH(NSSystemDomainMask, gnustepSystemLibrary, @"Frameworks");
+ 	}
+ 	break;
+@@ -2480,6 +2600,7 @@
+ 	  ADD_PATH(NSUserDomainMask, gnustepUserLibrary, @"Fonts");
+ 	  ADD_PATH(NSLocalDomainMask, gnustepLocalLibrary, @"Fonts");
+ 	  ADD_PATH(NSNetworkDomainMask, gnustepNetworkLibrary, @"Fonts");
++	  ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibraryNix, @"Fonts");
+ 	  ADD_PATH(NSSystemDomainMask, gnustepSystemLibrary, @"Fonts");
+ 	}
+ 	break;
+@@ -2518,6 +2639,12 @@
+ 	  if (part)
+ 	    ADD_PATH(NSNetworkDomainMask, gnustepNetworkLibraries, part);
+ 
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemLibrariesNix);
++	  if (full)
++	    ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibrariesNix, full);
++	  if (part)
++	    ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemLibrariesNix, part);	  
++
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemLibraries);
+ 	  if (full)
+ 	    ADD_PATH(NSSystemDomainMask, gnustepSystemLibraries, full);
+@@ -2560,6 +2687,12 @@
+ 	  if (part)
+ 	    ADD_PATH(NSNetworkDomainMask, gnustepNetworkTools, part);
+ 
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemToolsNix);
++	  if (full)
++	    ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemToolsNix, full);
++	  if (part)
++	    ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemToolsNix, part);
++
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemTools);
+ 	  if (full)
+ 	    ADD_PATH(NSSystemDomainMask, gnustepSystemTools, full);
+@@ -2602,6 +2735,18 @@
+ 	  if (part)
+ 	    ADD_PATH(NSNetworkDomainMask, gnustepNetworkAdminTools, part);
+ 
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminToolsNix);
++	  if (full)
++	    ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminToolsNix, full);
++	  if (part)
++	    ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminToolsNix, part);
++
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminToolsNix);
++	  if (full)
++	    ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminToolsNix, full);
++	  if (part)
++	    ADD_PATH_NIX(NSSystemDomainMask, gnustepSystemAdminToolsNix, part);
++	  
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemAdminTools);
+ 	  if (full)
+ 	    ADD_PATH(NSSystemDomainMask, gnustepSystemAdminTools, full);
+@@ -2615,6 +2760,7 @@
+ 	  ADD_PLATFORM_PATH(NSUserDomainMask, gnustepUserWebApps);
+ 	  ADD_PLATFORM_PATH(NSLocalDomainMask, gnustepLocalWebApps);
+ 	  ADD_PLATFORM_PATH(NSNetworkDomainMask, gnustepNetworkWebApps);
++	  ADD_PLATFORM_PATH_NIX(NSSystemDomainMask, gnustepSystemWebAppsNix);
+ 	  ADD_PLATFORM_PATH(NSSystemDomainMask, gnustepSystemWebApps);
+ 	}
+ 	break;
+@@ -2622,6 +2768,8 @@
+ 
+ #undef ADD_PATH
+ #undef ADD_PLATFORM_PATH
++#undef ADD_PATH_NIX
++#undef ADD_PLATFORM_PATH_NIX
+ 
+   count = [paths count];
+   for (i = 0; i < count; i++)
diff --git a/pkgs/desktops/gnustep/default.nix b/pkgs/desktops/gnustep/default.nix
new file mode 100644
index 00000000000..ac324bc89a8
--- /dev/null
+++ b/pkgs/desktops/gnustep/default.nix
@@ -0,0 +1,21 @@
+{ pkgs, newScope }:
+
+let
+  callPackage = newScope self;
+
+  self = rec {
+    stdenv = pkgs.clangStdenv;
+
+    gsmakeDerivation = callPackage ./make/gsmakeDerivation.nix {};
+    gorm = callPackage ./gorm {};
+    projectcenter = callPackage ./projectcenter {};
+    system_preferences = callPackage ./systempreferences {};
+    libobjc = callPackage ./libobjc2 {};
+    make = callPackage ./make {};
+    back = callPackage ./back {};
+    base = callPackage ./base { giflib = pkgs.giflib_4_1; };
+    gui = callPackage ./gui {};
+    gworkspace = callPackage ./gworkspace {};
+  };
+
+in self
diff --git a/pkgs/desktops/gnustep/gorm/default.nix b/pkgs/desktops/gnustep/gorm/default.nix
new file mode 100644
index 00000000000..5075ec5500c
--- /dev/null
+++ b/pkgs/desktops/gnustep/gorm/default.nix
@@ -0,0 +1,17 @@
+{ fetchurl, base, back, gsmakeDerivation, gui }:
+let
+  version = "1.2.22";
+in
+gsmakeDerivation {
+  name = "gorm-${version}";
+  
+  src = fetchurl {
+    url = "ftp://ftp.gnustep.org/pub/gnustep/dev-apps/gorm-${version}.tar.gz";
+    sha256 = "1mq5n65xd9bc4kppx19iijsgpz4crvhg7bfwbi9k78j159vclnmi";
+  };
+  buildInputs = [ base back gui ];
+
+  meta = {
+    description = "Graphical Object Relationship Modeller is an easy-to-use interface designer for GNUstep";
+  };
+}
diff --git a/pkgs/desktops/gnustep/gorm/fix-gs-makefiles.patch b/pkgs/desktops/gnustep/gorm/fix-gs-makefiles.patch
new file mode 100644
index 00000000000..c4b3d1e1d81
--- /dev/null
+++ b/pkgs/desktops/gnustep/gorm/fix-gs-makefiles.patch
@@ -0,0 +1,27 @@
+diff -ru gorm-1.2.20/GNUmakefile gorm-1.2.20.patched/GNUmakefile
+--- gorm-1.2.20/GNUmakefile	2010-05-30 12:55:26.000000000 +0600
++++ gorm-1.2.20.patched/GNUmakefile	2014-12-10 22:21:18.000000000 +0600
+@@ -24,6 +24,23 @@
+ #   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ #
+ 
++ifeq ($(GNUSTEP_MAKEFILES),)
++ GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null)
++  ifeq ($(GNUSTEP_MAKEFILES),)
++    $(warning )
++    $(warning Unable to obtain GNUSTEP_MAKEFILES setting from gnustep-config!)
++    $(warning Perhaps gnustep-make is not properly installed,)
++    $(warning so gnustep-config is not in your PATH.)
++    $(warning )
++    $(warning Your PATH is currently $(PATH))
++    $(warning )
++  endif
++endif
++
++ifeq ($(GNUSTEP_MAKEFILES),)
++  $(error You need to set GNUSTEP_MAKEFILES before compiling!)
++endif
++
+ PACKAGE_NAME = gorm
+ export PACKAGE_NAME
+ include $(GNUSTEP_MAKEFILES)/common.make
diff --git a/pkgs/desktops/gnustep/gui/default.nix b/pkgs/desktops/gnustep/gui/default.nix
new file mode 100644
index 00000000000..a28fef8f3d9
--- /dev/null
+++ b/pkgs/desktops/gnustep/gui/default.nix
@@ -0,0 +1,16 @@
+{ gsmakeDerivation, fetchurl, base }:
+let
+  version = "0.25.0";
+in
+gsmakeDerivation {
+  name = "gnustep-gui-${version}";
+  src = fetchurl {
+    url = "ftp://ftp.gnustep.org/pub/gnustep/core/gnustep-gui-${version}.tar.gz";
+    sha256 = "10jf3xir59qzbhhl0bvs9wdw40fsmvv6mdv5akdkia1rnck60xf5";
+  };
+  buildInputs = [ base ];
+  patches = [ ./fixup-all.patch ];
+  meta = {
+    description = "A GUI class library of GNUstep";
+  };
+}
diff --git a/pkgs/desktops/gnustep/gui/fixup-all.patch b/pkgs/desktops/gnustep/gui/fixup-all.patch
new file mode 100644
index 00000000000..4b412db409a
--- /dev/null
+++ b/pkgs/desktops/gnustep/gui/fixup-all.patch
@@ -0,0 +1,56 @@
+diff -r -u gnustep-gui-0.24.0/GNUmakefile.postamble gnustep-gui-0.24.0.patched/GNUmakefile.postamble
+--- gnustep-gui-0.24.0/GNUmakefile.postamble	2010-05-17 22:38:59.000000000 +0600
++++ gnustep-gui-0.24.0.patched/GNUmakefile.postamble	2014-12-01 13:44:05.000000000 +0600
+@@ -40,20 +40,20 @@
+ # The following rule is important mainly for packaging, because in that case 
+ # you install into a fake system tree, and the directory is not there.
+ #
+-$(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional:
+-	$(MKDIRS) $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional
++$(DESTDIR_GNUSTEP_MAKEFILES)/Additional:
++	$(MKDIRS) $(DESTDIR_GNUSTEP_MAKEFILES)/Additional
+ 
+ # Things to do before installing
+-before-install:: $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional
++before-install:: $(DESTDIR_GNUSTEP_MAKEFILES)/Additional
+ 	$(INSTALL_DATA) gui.make \
+-	   $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional/gui.make
++	   $(DESTDIR_GNUSTEP_MAKEFILES)/Additional/gui.make
+ 
+ # Things to do after installing
+ # after-install::
+ 
+ # Things to do before uninstalling
+  before-uninstall::
+-	rm -f $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional/gui.make
++	rm -f $(DESTDIR_GNUSTEP_MAKEFILES)/Additional/gui.make
+ 
+ # Things to do after uninstalling
+ # after-uninstall::
+diff -r -u gnustep-gui-0.24.0/TextConverters/RTF/GNUmakefile.preamble gnustep-gui-0.24.0.patched/TextConverters/RTF/GNUmakefile.preamble
+--- gnustep-gui-0.24.0/TextConverters/RTF/GNUmakefile.preamble	2008-06-10 10:01:49.000000000 +0600
++++ gnustep-gui-0.24.0.patched/TextConverters/RTF/GNUmakefile.preamble	2014-12-01 13:02:11.000000000 +0600
+@@ -49,7 +49,7 @@
+ ADDITIONAL_INCLUDE_DIRS +=-I../../Headers/Additions -I../../Headers
+ 
+ # Additional LDFLAGS to pass to the linker
+-#ADDITIONAL_LDFLAGS += 
++ADDITIONAL_LDFLAGS += -lgnustep-gui
+ 
+ # Additional library directories the linker should search
+ ADDITIONAL_LIB_DIRS += -L../../Source/$(GNUSTEP_OBJ_DIR)
+diff -r -u gnustep-gui-0.24.0/Tools/GNUmakefile.preamble gnustep-gui-0.24.0.patched/Tools/GNUmakefile.preamble
+--- gnustep-gui-0.24.0/Tools/GNUmakefile.preamble	2006-02-22 12:43:48.000000000 +0600
++++ gnustep-gui-0.24.0.patched/Tools/GNUmakefile.preamble	2014-12-01 12:52:41.000000000 +0600
+@@ -32,9 +32,11 @@
+ ADDITIONAL_LIB_DIRS += -L../Source/$(GNUSTEP_OBJ_DIR) -L../Model/$(GNUSTEP_OBJ_DIR)
+ 
+ # Additional libraries when linking tools
++make_services_TOOL_LIBS += -lgnustep-base
+ gpbs_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS)
+ set_show_service_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS)
+ gopen_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS)
++gclose_TOOL_LIBS += -lgnustep-base
+ gcloseall_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS)
+ GSspell_TOOL_LIBS += $(ADDITIONAL_DEPENDS)
+ 
diff --git a/pkgs/desktops/gnustep/gui/fixup-gui-makefile-installdir.patch b/pkgs/desktops/gnustep/gui/fixup-gui-makefile-installdir.patch
new file mode 100644
index 00000000000..30c6f56c032
--- /dev/null
+++ b/pkgs/desktops/gnustep/gui/fixup-gui-makefile-installdir.patch
@@ -0,0 +1,28 @@
+--- gnustep-gui-0.24.0/GNUmakefile.postamble	2010-05-17 22:38:59.000000000 +0600
++++ gnustep-gui-0.24.0.patched/GNUmakefile.postamble	2014-12-01 13:44:05.000000000 +0600
+@@ -40,20 +40,20 @@
+ # The following rule is important mainly for packaging, because in that case 
+ # you install into a fake system tree, and the directory is not there.
+ #
+-$(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional:
+-	$(MKDIRS) $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional
++$(DESTDIR_GNUSTEP_MAKEFILES)/Additional:
++	$(MKDIRS) $(DESTDIR_GNUSTEP_MAKEFILES)/Additional
+ 
+ # Things to do before installing
+-before-install:: $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional
++before-install:: $(DESTDIR_GNUSTEP_MAKEFILES)/Additional
+ 	$(INSTALL_DATA) gui.make \
+-	   $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional/gui.make
++	   $(DESTDIR_GNUSTEP_MAKEFILES)/Additional/gui.make
+ 
+ # Things to do after installing
+ # after-install::
+ 
+ # Things to do before uninstalling
+  before-uninstall::
+-	rm -f $(DESTDIR)$(GNUSTEP_MAKEFILES)/Additional/gui.make
++	rm -f $(DESTDIR_GNUSTEP_MAKEFILES)/Additional/gui.make
+ 
+ # Things to do after uninstalling
+ # after-uninstall::
diff --git a/pkgs/desktops/gnustep/gui/fixup-gui-textconverters-preamble.patch b/pkgs/desktops/gnustep/gui/fixup-gui-textconverters-preamble.patch
new file mode 100644
index 00000000000..23ec2db0fbd
--- /dev/null
+++ b/pkgs/desktops/gnustep/gui/fixup-gui-textconverters-preamble.patch
@@ -0,0 +1,11 @@
+--- gnustep-gui-0.24.0/TextConverters/RTF/GNUmakefile.preamble	2008-06-10 10:01:49.000000000 +0600
++++ gnustep-gui-0.24.0.patched/TextConverters/RTF/GNUmakefile.preamble	2014-12-01 13:02:11.000000000 +0600
+@@ -49,7 +49,7 @@
+ ADDITIONAL_INCLUDE_DIRS +=-I../../Headers/Additions -I../../Headers
+ 
+ # Additional LDFLAGS to pass to the linker
+-#ADDITIONAL_LDFLAGS += 
++ADDITIONAL_LDFLAGS += -lgnustep-gui
+ 
+ # Additional library directories the linker should search
+ ADDITIONAL_LIB_DIRS += -L../../Source/$(GNUSTEP_OBJ_DIR)
diff --git a/pkgs/desktops/gnustep/gui/fixup-gui-tools-preamble.patch b/pkgs/desktops/gnustep/gui/fixup-gui-tools-preamble.patch
new file mode 100644
index 00000000000..e57ddec75ad
--- /dev/null
+++ b/pkgs/desktops/gnustep/gui/fixup-gui-tools-preamble.patch
@@ -0,0 +1,14 @@
+--- gnustep-gui-0.24.0/Tools/GNUmakefile.preamble	2006-02-22 12:43:48.000000000 +0600
++++ gnustep-gui-0.24.0.patched/Tools/GNUmakefile.preamble	2014-12-01 12:52:41.000000000 +0600
+@@ -32,9 +32,11 @@
+ ADDITIONAL_LIB_DIRS += -L../Source/$(GNUSTEP_OBJ_DIR) -L../Model/$(GNUSTEP_OBJ_DIR)
+ 
+ # Additional libraries when linking tools
++make_services_TOOL_LIBS += -lgnustep-base
+ gpbs_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS)
+ set_show_service_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS)
+ gopen_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS)
++gclose_TOOL_LIBS += -lgnustep-base
+ gcloseall_TOOL_LIBS += -lgnustep-gui $(SYSTEM_LIBS)
+ GSspell_TOOL_LIBS += $(ADDITIONAL_DEPENDS)
+ 
diff --git a/pkgs/desktops/gnustep/gworkspace/default.nix b/pkgs/desktops/gnustep/gworkspace/default.nix
new file mode 100644
index 00000000000..67fffd10a0f
--- /dev/null
+++ b/pkgs/desktops/gnustep/gworkspace/default.nix
@@ -0,0 +1,23 @@
+{ back, base, gui, gsmakeDerivation
+, fetchurl
+, sqlite
+, system_preferences
+}:
+let
+  version = "0.9.3";
+in
+gsmakeDerivation {
+  name = "gworkspace-${version}";
+  src = fetchurl {
+    url = "ftp://ftp.gnustep.org/pub/gnustep/usr-apps/gworkspace-${version}.tar.gz";
+    sha256 = "0jchqwb0dj522j98jqlqlib44jppax39zx2zqyzdwiz4qjl470r3";
+  };
+  # additional dependencies:
+  # - PDFKit framework from http://gap.nongnu.org/
+  # - TODO: to --enable-gwmetadata, need libDBKit as well as sqlite!
+  buildInputs = [ back base gui system_preferences ];
+  configureFlags = [ "--with-inotify" ];
+  meta = {
+    description = "A workspace manager for GNUstep";
+  };
+}
diff --git a/pkgs/desktops/gnustep/libobjc2/default.nix b/pkgs/desktops/gnustep/libobjc2/default.nix
new file mode 100644
index 00000000000..a3e718187c7
--- /dev/null
+++ b/pkgs/desktops/gnustep/libobjc2/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub, cmake }:
+
+let
+  version = "1.8.1";
+in
+
+stdenv.mkDerivation rec {
+  name = "libobjc2-${version}";
+
+  src = fetchFromGitHub {
+    owner = "gnustep";
+    repo = "libobjc2";
+    rev = "v${version}";
+    sha256 = "12v9pjg97h56mb114cqd22q1pdwhmxrgdw5hal74ddlrhiq1nzvi";
+  };
+
+  buildInputs = [ cmake ];
+
+  cmakeFlags = [ "-DCMAKE_INSTALL_LIBDIR=lib" ];
+
+  meta = with lib; {
+    description = "Objective-C runtime for use with GNUstep";
+    homepage = http://gnustep.org/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ ashalkhakov matthewbauer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/desktops/gnustep/make/GNUstep.conf b/pkgs/desktops/gnustep/make/GNUstep.conf
new file mode 100644
index 00000000000..f4e0e3b8162
--- /dev/null
+++ b/pkgs/desktops/gnustep/make/GNUstep.conf
@@ -0,0 +1,126 @@
+# These GNUSTEP_*_ROOT variables are obsolete, and will be removed.
+#GNUSTEP_SYSTEM_ROOT=/nix/store/ky64z3j9l18wjcssb9pxnc792ihh3bvw-gnustep-make-2.6.6/System
+#GNUSTEP_LOCAL_ROOT=/nix/store/ky64z3j9l18wjcssb9pxnc792ihh3bvw-gnustep-make-2.6.6/Local
+#GNUSTEP_NETWORK_ROOT=/nix/store/ky64z3j9l18wjcssb9pxnc792ihh3bvw-gnustep-make-2.6.6/Network
+
+# The name of the user config file.  This file can override
+# some settings in this file.  Usually used by users that want
+# to install things into their GNUstep user domain and/or have
+# many such domains.
+GNUSTEP_USER_CONFIG_FILE=.GNUstep.conf
+
+# The name of the user directory, if any.  This is obsolete,
+# and will be removed.
+GNUSTEP_USER_DIR=GNUstep
+
+# The name of the user directory where defaults (eg, preferences) are
+# stored.  If it does not start with a '/', it will be considered
+# relative to the user home directory.
+GNUSTEP_USER_DEFAULTS_DIR=GNUstep/Defaults
+
+
+# This is where the gnustep-make Makefiles are installed.
+# Traditionally, this is /usr/GNUstep/System/Library/Makefiles
+GNUSTEP_MAKEFILES=@gnustepMakefiles@
+
+# This is where the user home directories are.  Only used to provide
+# NSUserDirectory in gnustep-base.  Never used anywhere else.
+GNUSTEP_SYSTEM_USERS_DIR=/home
+GNUSTEP_NETWORK_USERS_DIR=/home
+GNUSTEP_LOCAL_USERS_DIR=/home
+
+
+# This is where System GUI Applications get installed.
+# Traditionally it is /usr/GNUstep/System/Applications.
+GNUSTEP_SYSTEM_APPS=@systemApps@
+
+# This is where System GUI Applications that only the
+# Administrator can use get installed.
+# Traditionally it is /usr/GNUstep/System/Applications/Admin.
+GNUSTEP_SYSTEM_ADMIN_APPS=@systemAdminApps@
+
+# This is where System Web Applications (GSWeb, SOPE) get
+# installed.
+# Traditionally it is /usr/GNUstep/System/Library/WebApplications.
+GNUSTEP_SYSTEM_WEB_APPS=@systemWebApps@
+
+# This is where System Command-Line Tools get installed.
+# Traditionally it is /usr/GNUstep/System/Tools.
+GNUSTEP_SYSTEM_TOOLS=@systemTools@
+
+# This is where System Command-Line Tools that only the
+# Administrator can use get installed.  Important: this
+# should not be in the PATH of normal users.
+# Traditionally it is /usr/GNUstep/System/Tools/Admin.
+GNUSTEP_SYSTEM_ADMIN_TOOLS=@systemAdminTools@
+
+# This is where System resources get installed.  This directory will
+# contain a lot of executable code since *step traditionally likes to
+# bundle executables and resources together.
+# Traditionally it is /usr/GNUstep/System/Library.
+GNUSTEP_SYSTEM_LIBRARY=@systemLibrary@
+
+# This is where System headers get installed.  They are the
+# library .h headers.
+# Traditionally it is /usr/GNUstep/System/Library/Headers.
+GNUSTEP_SYSTEM_HEADERS=@systemHeaders@
+
+# This is where System libraries get installed.  By libraries we mean
+# the shared/static object files that you can link into programs.
+# Traditionally it is /usr/GNUstep/System/Library/Libraries.
+GNUSTEP_SYSTEM_LIBRARIES=@systemLibraries@
+
+# This is where System documentation get installed.  This is known
+# not to contain any executable, so we keep it separate.
+# Traditionally it is /usr/GNUstep/System/Library/Documentation.
+GNUSTEP_SYSTEM_DOC=@systemDoc@
+
+# This is where System man pages get installed.
+# Traditionally it is /usr/GNUstep/System/Library/Documentation/man.
+GNUSTEP_SYSTEM_DOC_MAN=@systemDocMan@
+
+# This is where System info pages get installed.
+# Traditionally it is /usr/GNUstep/System/Library/Documentation/info.
+GNUSTEP_SYSTEM_DOC_INFO=@systemDocInfo@
+
+
+GNUSTEP_NETWORK_APPS=@systemApps@
+GNUSTEP_NETWORK_ADMIN_APPS=@systemAdminApps@
+GNUSTEP_NETWORK_WEB_APPS=@systemWebApps@
+GNUSTEP_NETWORK_TOOLS=@systemTools@
+GNUSTEP_NETWORK_ADMIN_TOOLS=@systemAdminTools@
+GNUSTEP_NETWORK_LIBRARY=@systemLibrary@
+GNUSTEP_NETWORK_HEADERS=@systemHeaders@
+GNUSTEP_NETWORK_LIBRARIES=@systemLibraries@
+GNUSTEP_NETWORK_DOC=@systemDoc@
+GNUSTEP_NETWORK_DOC_MAN=@systemDocMan@
+GNUSTEP_NETWORK_DOC_INFO=@systemDocInfo@
+
+GNUSTEP_LOCAL_APPS=@systemApps@
+GNUSTEP_LOCAL_ADMIN_APPS=@systemAdminApps@
+GNUSTEP_LOCAL_WEB_APPS=@systemWebApps@
+GNUSTEP_LOCAL_TOOLS=@systemTools@
+GNUSTEP_LOCAL_ADMIN_TOOLS=@systemAdminTools@
+GNUSTEP_LOCAL_LIBRARY=@systemLibrary@
+GNUSTEP_LOCAL_HEADERS=@systemHeaders@
+GNUSTEP_LOCAL_LIBRARIES=@systemLibraries@
+GNUSTEP_LOCAL_DOC=@systemDoc@
+GNUSTEP_LOCAL_DOC_MAN=@systemDocMan@
+GNUSTEP_LOCAL_DOC_INFO=@systemDocInfo@
+
+# Important: settings in the User should normally be relative paths,
+# and will be interpreted as relative to the user's directory.  This
+# allows each user to have their own domain to install things.  You
+# can set them to be absolute, mostly if you want to disable them
+# by setting them equal to the ones in the Network domain.
+GNUSTEP_USER_DIR_APPS=GNUstep/Applications
+GNUSTEP_USER_DIR_ADMIN_APPS=GNUstep/Applications/Admin
+GNUSTEP_USER_DIR_WEB_APPS=GNUstep/WebApplications
+GNUSTEP_USER_DIR_TOOLS=GNUstep/Tools
+GNUSTEP_USER_DIR_ADMIN_TOOLS=GNUstep/Tools/Admin
+GNUSTEP_USER_DIR_LIBRARY=GNUstep/Library
+GNUSTEP_USER_DIR_HEADERS=GNUstep/Library/Headers
+GNUSTEP_USER_DIR_LIBRARIES=GNUstep/Library/Libraries
+GNUSTEP_USER_DIR_DOC=GNUstep/Library/Documentation
+GNUSTEP_USER_DIR_DOC_MAN=GNUstep/Library/Documentation/man
+GNUSTEP_USER_DIR_DOC_INFO=GNUstep/Library/Documentation/info
diff --git a/pkgs/desktops/gnustep/make/builder.sh b/pkgs/desktops/gnustep/make/builder.sh
new file mode 100644
index 00000000000..1655a75eeba
--- /dev/null
+++ b/pkgs/desktops/gnustep/make/builder.sh
@@ -0,0 +1,122 @@
+source $stdenv/setup
+
+preConfigure() {
+    . $GNUSTEP_MAKEFILES/GNUstep.sh
+}
+
+wrapGSMake() {
+    local program="$1"
+    local config="$2"
+    local wrapped="$(dirname $program)/.$(basename $program)-wrapped"
+
+    mv "$program" "$wrapped"
+
+    cat > "$program"<<EOF
+#! $SHELL -e
+
+export GNUSTEP_CONFIG_FILE="$config"
+
+exec "$wrapped" "\$@" "\${extraFlagsArray[@]}"
+EOF
+    chmod +x "$program"
+}
+
+postInstall() {
+    local conf="$out/share/.GNUstep.conf"
+
+    mkdir -p "$out/share"
+    touch $conf
+
+    # add the current package to the paths
+    local tmp="$out/lib/GNUstep/Applications"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_APPS" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_APPS "$tmp"
+    fi
+    tmp="$out/lib/GNUstep/Applications"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_ADMIN_APPS" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_ADMIN_APPS "$tmp"
+    fi
+    tmp="$out/lib/GNUstep/WebApplications"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_WEB_APPS" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_WEB_APPS "$tmp"
+    fi
+    tmp="$out/bin"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_TOOLS" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_TOOLS "$tmp"
+    fi
+    tmp="$out/sbin"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS "$tmp"
+    fi
+    tmp="$out/lib/GNUstep"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_LIBRARY" in *"${tmp}"*) false;; *) true;; esac; then
+    	addToSearchPath NIX_GNUSTEP_SYSTEM_LIBRARY "$tmp"
+    fi
+    tmp="$out/include"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_HEADERS" in *"${tmp}"*) false;; *) true;; esac; then
+    	if [ -z "$NIX_GNUSTEP_SYSTEM_HEADERS" ]; then
+    	    export NIX_GNUSTEP_SYSTEM_HEADERS="$tmp"
+    	else
+    	    export NIX_GNUSTEP_SYSTEM_HEADERS+=" $tmp"
+    	fi
+    fi
+    tmp="$out/lib"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_LIBRARIES" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_LIBRARIES "$tmp"
+    fi
+    tmp="$out/share/GNUstep/Documentation"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_DOC" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_DOC "$tmp"
+    fi
+    tmp="$out/share/man"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_DOC_MAN" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_DOC_MAN "$tmp"
+    fi
+    tmp="$out/share/info"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_DOC_INFO" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_DOC_INFO "$tmp"
+    fi
+    
+    # write the config file
+    echo GNUSTEP_MAKEFILES=$GNUSTEP_MAKEFILES >> $conf
+    if [ -n "$NIX_GNUSTEP_SYSTEM_APPS" ]; then
+	echo NIX_GNUSTEP_SYSTEM_APPS="$NIX_GNUSTEP_SYSTEM_APPS"
+    fi
+    if [ -n "$NIX_GNUSTEP_SYSTEM_ADMIN_APPS" ]; then
+	echo NIX_GNUSTEP_SYSTEM_ADMIN_APPS="$NIX_GNUSTEP_SYSTEM_ADMIN_APPS" >> $conf
+    fi
+    if [ -n "$NIX_GNUSTEP_SYSTEM_WEB_APPS" ]; then
+	echo NIX_GNUSTEP_SYSTEM_WEB_APPS="$NIX_GNUSTEP_SYSTEM_WEB_APPS" >> $conf
+    fi
+    if [ -n "$NIX_GNUSTEP_SYSTEM_TOOLS" ]; then
+	echo NIX_GNUSTEP_SYSTEM_TOOLS="$NIX_GNUSTEP_SYSTEM_TOOLS" >> $conf
+    fi
+    if [ -n "$NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS" ]; then
+	echo NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS="$NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS" >> $conf
+    fi
+    if [ -n "$NIX_GNUSTEP_SYSTEM_LIBRARY" ]; then
+	echo NIX_GNUSTEP_SYSTEM_LIBRARY="$NIX_GNUSTEP_SYSTEM_LIBRARY" >> $conf
+    fi
+    if [ -n "$NIX_GNUSTEP_SYSTEM_HEADERS" ]; then
+	echo NIX_GNUSTEP_SYSTEM_HEADERS="$NIX_GNUSTEP_SYSTEM_HEADERS" >> $conf
+    fi
+    if [ -n "$NIX_GNUSTEP_SYSTEM_LIBRARIES" ]; then
+	echo NIX_GNUSTEP_SYSTEM_LIBRARIES="$NIX_GNUSTEP_SYSTEM_LIBRARIES" >> $conf
+    fi
+    if [ -n "$NIX_GNUSTEP_SYSTEM_DOC" ]; then
+	echo NIX_GNUSTEP_SYSTEM_DOC="$NIX_GNUSTEP_SYSTEM_DOC" >> $conf
+    fi
+    if [ -n "$NIX_GNUSTEP_SYSTEM_DOC_MAN" ]; then
+	echo NIX_GNUSTEP_SYSTEM_DOC_MAN="$NIX_GNUSTEP_SYSTEM_DOC_MAN" >> $conf
+    fi
+    if [ -n "$NIX_GNUSTEP_SYSTEM_DOC_INFO" ]; then
+	echo NIX_GNUSTEP_SYSTEM_DOC_INFO="$NIX_GNUSTEP_SYSTEM_DOC_INFO" >> $conf
+    fi
+    
+    for i in $out/bin/*; do
+	echo "wrapping $(basename $i)"
+	wrapGSMake "$i" "$out/share/.GNUstep.conf"
+    done
+}
+
+genericBuild
diff --git a/pkgs/desktops/gnustep/make/default.nix b/pkgs/desktops/gnustep/make/default.nix
new file mode 100644
index 00000000000..43530096b53
--- /dev/null
+++ b/pkgs/desktops/gnustep/make/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, clang, which, libobjc }:
+let
+  version = "2.6.8";
+in
+stdenv.mkDerivation rec {
+  name = "gnustep-make-${version}";
+  src = fetchurl {
+    url = "ftp://ftp.gnustep.org/pub/gnustep/core/gnustep-make-${version}.tar.gz";
+    sha256 = "0r00439f7vrggdwv60n8p626gnyymhq968i5x9ad2i4v6g8x4gk0";
+  };
+  configureFlags = "--with-installation-domain=SYSTEM";
+  buildInputs = [ clang which libobjc ];
+  patches = [ ./fixup-paths.patch ];
+  setupHook = ./setup-hook.sh;
+  meta = {
+    description = "A build manager for GNUstep";
+
+    homepage = http://gnustep.org/;
+
+    license = stdenv.lib.licenses.lgpl2Plus;
+
+    maintainers = with stdenv.lib.maintainers; [ ashalkhakov matthewbauer ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/pkgs/desktops/gnustep/make/fixup-paths.patch b/pkgs/desktops/gnustep/make/fixup-paths.patch
new file mode 100644
index 00000000000..b5eb093ad96
--- /dev/null
+++ b/pkgs/desktops/gnustep/make/fixup-paths.patch
@@ -0,0 +1,197 @@
+diff -r -u gnustep-make-2.6.6/common.make gnustep-make-2.6.6.patched/common.make
+--- gnustep-make-2.6.6/common.make	2013-03-04 17:21:55.000000000 +0600
++++ gnustep-make-2.6.6.patched/common.make	2015-01-18 14:36:25.000000000 +0600
+@@ -135,7 +135,9 @@
+ endif
+ # Then include makefiles with flags/config options installed by the 
+ # libraries themselves
+--include $(GNUSTEP_MAKEFILES)/Additional/*.make
++ifneq ($(NIX_GNUSTEP_MAKEFILES_ADDITIONAL),)
++include $(NIX_GNUSTEP_MAKEFILES_ADDITIONAL)
++endif
+ 
+ #
+ # Determine target specific settings
+diff -r -u gnustep-make-2.6.6/GNUmakefile.in gnustep-make-2.6.6.patched/GNUmakefile.in
+--- gnustep-make-2.6.6/GNUmakefile.in	2013-09-20 12:13:15.000000000 +0600
++++ gnustep-make-2.6.6.patched/GNUmakefile.in	2014-12-07 20:35:27.000000000 +0600
+@@ -173,7 +173,6 @@
+ 		"$(makedir)/$(GNUSTEP_TARGET_CPU)" \
+ 		"$(makedir)/$(GNUSTEP_TARGET_DIR)" \
+ 		"$(makedir)/$(GNUSTEP_TARGET_LDIR)" \
+-		"$(makedir)/Additional" \
+ 		"$(makedir)/Auxiliary" \
+ 		"$(makedir)/Master" \
+ 		"$(makedir)/Instance" \
+@@ -314,7 +313,6 @@
+ 	-rmdir "$(makedir)/Instance"
+ 	-rmdir "$(makedir)/Master"
+ 	-rmdir "$(makedir)/Auxiliary"
+-	-rmdir "$(makedir)/Additional"
+ 	-rmdir "$(makedir)/$(GNUSTEP_TARGET_LDIR)"
+ 	-rmdir "$(makedir)/$(GNUSTEP_TARGET_DIR)"
+ 	-rmdir "$(makedir)/$(GNUSTEP_TARGET_CPU)"
+diff -r -u gnustep-make-2.6.6/gnustep-config.in gnustep-make-2.6.6.patched/gnustep-config.in
+--- gnustep-make-2.6.6/gnustep-config.in	2013-07-02 16:06:24.000000000 +0600
++++ gnustep-make-2.6.6.patched/gnustep-config.in	2014-12-09 21:29:49.000000000 +0600
+@@ -66,6 +66,7 @@
+     echo "    --variable=OBJCXX"
+     echo "    --variable=GNUMAKE"
+     echo "    --variable=GNUSTEP_MAKEFILES"
++    echo "    --variable=NIX_GNUSTEP_MAKEFILES_ADDITIONAL"
+     echo "    --variable=GNUSTEP_USER_DEFAULTS_DIR"
+     echo "    --variable=GNUSTEP_HOST"
+     echo "    --variable=GNUSTEP_HOST_CPU"
+@@ -153,6 +154,8 @@
+ 
+ export GNUSTEP_MAKEFILES
+ 
++export NIX_GNUSTEP_MAKEFILES_ADDITIONAL
++
+ #
+ # If all they want to know if GNUSTEP_MAKEFILES or anything that
+ # we can compute only using GNUSTEP_MAKEFILES, we can print it out
+@@ -168,6 +171,8 @@
+               exit 0;;
+   --variable=GNUSTEP_MAKEFILES) echo "$GNUSTEP_MAKEFILES"
+               exit 0;;
++  --variable=NIX_GNUSTEP_MAKEFILES_ADDITIONAL) echo "$NIX_GNUSTEP_MAKEFILES_ADDITIONAL"
++              exit 0;;
+   --variable=GNUMAKE) echo "@GNUMAKE@"
+               exit 0;;
+   --debug-flags) @GNUMAKE@ -s -f "$GNUSTEP_MAKEFILES/empty.make" print-gnustep-make-objc-flags quiet=yes debug=yes 2>/dev/null
+Only in gnustep-make-2.6.6.patched: gnustep-config.in~
+diff -r -u gnustep-make-2.6.6/GNUstep.csh.in gnustep-make-2.6.6.patched/GNUstep.csh.in
+--- gnustep-make-2.6.6/GNUstep.csh.in	2011-05-03 13:40:10.000000000 +0600
++++ gnustep-make-2.6.6.patched/GNUstep.csh.in	2014-12-09 20:14:05.000000000 +0600
+@@ -130,6 +130,10 @@
+   setenv GNUSTEP_MAKEFILES "@GNUSTEP_MAKEFILES@"
+ endif
+ 
++if ( ! ${?NIX_GNUSTEP_MAKEFILES_ADDITIONAL} ) then
++  setenv NIX_GNUSTEP_MAKEFILES_ADDITIONAL "@NIX_GNUSTEP_MAKEFILES_ADDITIONAL@"
++endif
++
+ if ( "${GNUSTEP_MAKE_STRICT_V2_MODE}" == "yes" ) then
+   unsetenv GNUSTEP_USER_DIR
+   unsetenv GNUSTEP_USER_ROOT
+Only in gnustep-make-2.6.6.patched: GNUstep.csh.in~
+diff -r -u gnustep-make-2.6.6/GNUstep.sh.in gnustep-make-2.6.6.patched/GNUstep.sh.in
+--- gnustep-make-2.6.6/GNUstep.sh.in	2012-02-21 20:21:38.000000000 +0600
++++ gnustep-make-2.6.6.patched/GNUstep.sh.in	2015-01-18 14:48:09.000000000 +0600
+@@ -173,7 +173,6 @@
+ fi
+ export GNUSTEP_MAKEFILES
+ 
+-
+ if [ "$GNUSTEP_MAKE_STRICT_V2_MODE" = "yes" ]; then
+   # Make sure this is never set in gnustep-make v2 strict mode; it
+   # might have been set in the config file.
+@@ -300,7 +299,7 @@
+ # for each duplicate.  When there are many duplicates it's faster to
+ # use print_unique_pathlist.sh first to remove them and skip the
+ # echos+greps later.
+-GNUSTEP_TOOLS_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_TOOLS" "$GNUSTEP_LOCAL_TOOLS" "$GNUSTEP_NETWORK_TOOLS" "$GNUSTEP_SYSTEM_TOOLS" $fixup_paths`
++GNUSTEP_TOOLS_PATHLIST=$NIX_GNUSTEP_SYSTEM_TOOLS
+ 
+ # Now, we check the paths in GNUSTEP_*_ADMIN_TOOLS.  These paths
+ # should only be used by Administrators -- normal users don't have
+@@ -313,7 +312,7 @@
+ 
+ # So we examine GNUSTEP_*_ADMIN_TOOLS; if we find any path in that
+ # list that exists and that we can write to, we add it to our PATH.
+-for dir in "$GNUSTEP_SYSTEM_ADMIN_TOOLS" "$GNUSTEP_NETWORK_ADMIN_TOOLS" "$GNUSTEP_LOCAL_ADMIN_TOOLS" "$GNUSTEP_USER_ADMIN_TOOLS"; do
++for dir in $(echo "$NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS" | tr ":" "\n"); do
+   if [ -d "$dir"  -a  -w "$dir" ]; then
+     # Only add the new dir if it's not already in GNUSTEP_TOOLS_PATHLIST
+     if (echo ":${GNUSTEP_TOOLS_PATHLIST}:" \
+@@ -356,7 +355,7 @@
+ export PATH
+ 
+ # Determine the library paths
+-GNUSTEP_LIBRARIES_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_LIBRARIES" "$GNUSTEP_LOCAL_LIBRARIES" "$GNUSTEP_NETWORK_LIBRARIES" "$GNUSTEP_SYSTEM_LIBRARIES" $fixup_paths`
++GNUSTEP_LIBRARIES_PATHLIST=$NIX_GNUSTEP_SYSTEM_LIBRARIES
+ 
+ old_IFS="$IFS"
+ IFS=:
+@@ -486,7 +485,7 @@
+ #
+ # Setup Java CLASSPATH and Guile GUILE_LOAD_PATH
+ #
+-GNUSTEP_LIBRARY_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_LIBRARY" "$GNUSTEP_LOCAL_LIBRARY" "$GNUSTEP_NETWORK_LIBRARY" "$GNUSTEP_SYSTEM_LIBRARY" $fixup_paths`
++GNUSTEP_LIBRARY_PATHLIST=$NIX_GNUSTEP_SYSTEM_LIBRARY
+ 
+ old_IFS="$IFS"
+ IFS=:
+@@ -526,7 +525,7 @@
+ # xxx/Library/Documentation/info, are found by the info browsing
+ # programs.  To get this effect, we add those paths to INFOPATH.
+ #
+-GNUSTEP_INFO_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_DOC_INFO" "$GNUSTEP_LOCAL_DOC_INFO" "$GNUSTEP_NETWORK_DOC_INFO" "$GNUSTEP_SYSTEM_DOC_INFO" $fixup_paths`
++GNUSTEP_INFO_PATHLIST=$NIX_GNUSTEP_SYSTEM_DOC_INFO
+ old_IFS="$IFS"
+ IFS=:
+ for dir in $GNUSTEP_INFO_PATHLIST; do
+@@ -559,6 +558,7 @@
+ 
+   unset GNUSTEP_KEEP_CONFIG_FILE GNUSTEP_KEEP_USER_CONFIG_FILE
+ 
++  
+   export GNUSTEP_CONFIG_FILE GNUSTEP_USER_CONFIG_FILE
+ 
+   export GNUSTEP_USER_DEFAULTS_DIR
+diff -r -u gnustep-make-2.6.6/GNUstep-strict-v2.conf.in gnustep-make-2.6.6.patched/GNUstep-strict-v2.conf.in
+--- gnustep-make-2.6.6/GNUstep-strict-v2.conf.in	2008-01-15 20:35:36.000000000 +0600
++++ gnustep-make-2.6.6.patched/GNUstep-strict-v2.conf.in	2014-12-07 22:04:56.000000000 +0600
+@@ -47,7 +47,6 @@
+ # Traditionally, this is /usr/GNUstep/System/Library/Makefiles
+ GNUSTEP_MAKEFILES=@GNUSTEP_MAKEFILES@
+ 
+-
+ # This is where the user home directories are.  Only used to provide
+ # NSUserDirectory in gnustep-base.  Never used anywhere else.
+ GNUSTEP_SYSTEM_USERS_DIR=@GNUSTEP_SYSTEM_USERS_DIR@
+diff -r -u gnustep-make-2.6.6/library-combo.make gnustep-make-2.6.6.patched/library-combo.make
+--- gnustep-make-2.6.6/library-combo.make	2012-02-21 19:53:02.000000000 +0600
++++ gnustep-make-2.6.6.patched/library-combo.make	2014-12-09 20:15:05.000000000 +0600
+@@ -142,7 +142,7 @@
+ #
+ # Third-party foundations not using make package
+ # Our own foundation will install a base.make file into 
+-# $GNUSTEP_MAKEFILES/Additional/ to set the needed flags
++# $NIX_GNUSTEP_MAKEFILES_ADDITIONAL to set the needed flags
+ #
+ ifeq ($(FOUNDATION_LIB), nx)
+   # -framework Foundation is used both to find headers, and to link
+@@ -166,7 +166,7 @@
+ 
+ #
+ # FIXME - Ask Helge to move this inside his libFoundation, and have 
+-# it installed as a $(GNUSTEP_MAKEFILES)/Additional/libFoundation.make
++# it installed as a $(NIX_GNUSTEP_MAKEFILES_ADDITIONAL)/libFoundation.make
+ #
+ ifeq ($(FOUNDATION_LIB),fd)
+   -include $(GNUSTEP_MAKEFILES)/libFoundation.make
+@@ -193,7 +193,7 @@
+ GUI_LIBS = 
+ #
+ # Third-party GUI libraries - our own sets its flags into 
+-# $(GNUSTEP_MAKEFILES)/Additional/gui.make
++# $(NIX_GNUSTEP_MAKEFILES_ADDITIONAL)/gui.make
+ #
+ ifeq ($(GUI_LIB), nx)
+   GUI_DEFINE = -DNeXT_GUI_LIBRARY=1
+diff -r -u gnustep-make-2.6.6/rules.make gnustep-make-2.6.6.patched/rules.make
+--- gnustep-make-2.6.6/rules.make	2013-07-04 16:05:44.000000000 +0600
++++ gnustep-make-2.6.6.patched/rules.make	2014-12-09 21:31:04.000000000 +0600
+@@ -667,7 +667,9 @@
+ 	exit 1$(END_ECHO)
+ endif
+ 
+-$(GNUSTEP_MAKEFILES)/Additional/*.make: ;
++ifneq ($(NIX_GNUSTEP_MAKEFILES_ADDITIONAL),)
++$(NIX_GNUSTEP_MAKEFILES_ADDITIONAL): ;
++endif
+ 
+ $(GNUSTEP_MAKEFILES)/Master/*.make: ;
+ 
diff --git a/pkgs/desktops/gnustep/make/gs-makefiles-additional.patch b/pkgs/desktops/gnustep/make/gs-makefiles-additional.patch
new file mode 100644
index 00000000000..98e22f37ee7
--- /dev/null
+++ b/pkgs/desktops/gnustep/make/gs-makefiles-additional.patch
@@ -0,0 +1,145 @@
+diff -ru gnustep-make-2.6.6/common.make gnustep-make-2.6.6.patched/common.make
+--- gnustep-make-2.6.6/common.make	2013-03-04 17:21:55.000000000 +0600
++++ gnustep-make-2.6.6.patched/common.make	2014-12-09 21:29:10.000000000 +0600
+@@ -135,7 +135,9 @@
+ endif
+ # Then include makefiles with flags/config options installed by the 
+ # libraries themselves
+--include $(GNUSTEP_MAKEFILES)/Additional/*.make
++ifneq ($(NIX_GNUSTEP_MAKEFILES_ADDITIONAL),)
++-include $(NIX_GNUSTEP_MAKEFILES_ADDITIONAL)
++endif
+ 
+ #
+ # Determine target specific settings
+diff -ru gnustep-make-2.6.6/GNUmakefile.in gnustep-make-2.6.6.patched/GNUmakefile.in
+--- gnustep-make-2.6.6/GNUmakefile.in	2013-09-20 12:13:15.000000000 +0600
++++ gnustep-make-2.6.6.patched/GNUmakefile.in	2014-12-07 20:35:27.000000000 +0600
+@@ -173,7 +173,6 @@
+ 		"$(makedir)/$(GNUSTEP_TARGET_CPU)" \
+ 		"$(makedir)/$(GNUSTEP_TARGET_DIR)" \
+ 		"$(makedir)/$(GNUSTEP_TARGET_LDIR)" \
+-		"$(makedir)/Additional" \
+ 		"$(makedir)/Auxiliary" \
+ 		"$(makedir)/Master" \
+ 		"$(makedir)/Instance" \
+@@ -314,7 +313,6 @@
+ 	-rmdir "$(makedir)/Instance"
+ 	-rmdir "$(makedir)/Master"
+ 	-rmdir "$(makedir)/Auxiliary"
+-	-rmdir "$(makedir)/Additional"
+ 	-rmdir "$(makedir)/$(GNUSTEP_TARGET_LDIR)"
+ 	-rmdir "$(makedir)/$(GNUSTEP_TARGET_DIR)"
+ 	-rmdir "$(makedir)/$(GNUSTEP_TARGET_CPU)"
+diff -ru gnustep-make-2.6.6/gnustep-config.in gnustep-make-2.6.6.patched/gnustep-config.in
+--- gnustep-make-2.6.6/gnustep-config.in	2013-07-02 16:06:24.000000000 +0600
++++ gnustep-make-2.6.6.patched/gnustep-config.in	2014-12-09 21:29:49.000000000 +0600
+@@ -66,6 +66,7 @@
+     echo "    --variable=OBJCXX"
+     echo "    --variable=GNUMAKE"
+     echo "    --variable=GNUSTEP_MAKEFILES"
++    echo "    --variable=NIX_GNUSTEP_MAKEFILES_ADDITIONAL"
+     echo "    --variable=GNUSTEP_USER_DEFAULTS_DIR"
+     echo "    --variable=GNUSTEP_HOST"
+     echo "    --variable=GNUSTEP_HOST_CPU"
+@@ -153,6 +154,8 @@
+ 
+ export GNUSTEP_MAKEFILES
+ 
++export NIX_GNUSTEP_MAKEFILES_ADDITIONAL
++
+ #
+ # If all they want to know if GNUSTEP_MAKEFILES or anything that
+ # we can compute only using GNUSTEP_MAKEFILES, we can print it out
+@@ -168,6 +171,8 @@
+               exit 0;;
+   --variable=GNUSTEP_MAKEFILES) echo "$GNUSTEP_MAKEFILES"
+               exit 0;;
++  --variable=NIX_GNUSTEP_MAKEFILES_ADDITIONAL) echo "$NIX_GNUSTEP_MAKEFILES_ADDITIONAL"
++              exit 0;;
+   --variable=GNUMAKE) echo "@GNUMAKE@"
+               exit 0;;
+   --debug-flags) @GNUMAKE@ -s -f "$GNUSTEP_MAKEFILES/empty.make" print-gnustep-make-objc-flags quiet=yes debug=yes 2>/dev/null
+diff -ru gnustep-make-2.6.6/GNUstep.csh.in gnustep-make-2.6.6.patched/GNUstep.csh.in
+--- gnustep-make-2.6.6/GNUstep.csh.in	2011-05-03 13:40:10.000000000 +0600
++++ gnustep-make-2.6.6.patched/GNUstep.csh.in	2014-12-09 20:14:05.000000000 +0600
+@@ -130,6 +130,10 @@
+   setenv GNUSTEP_MAKEFILES "@GNUSTEP_MAKEFILES@"
+ endif
+ 
++if ( ! ${?NIX_GNUSTEP_MAKEFILES_ADDITIONAL} ) then
++  setenv NIX_GNUSTEP_MAKEFILES_ADDITIONAL "@NIX_GNUSTEP_MAKEFILES_ADDITIONAL@"
++endif
++
+ if ( "${GNUSTEP_MAKE_STRICT_V2_MODE}" == "yes" ) then
+   unsetenv GNUSTEP_USER_DIR
+   unsetenv GNUSTEP_USER_ROOT
+diff -ru gnustep-make-2.6.6/GNUstep.sh.in gnustep-make-2.6.6.patched/GNUstep.sh.in
+--- gnustep-make-2.6.6/GNUstep.sh.in	2012-02-21 20:21:38.000000000 +0600
++++ gnustep-make-2.6.6.patched/GNUstep.sh.in	2014-12-09 20:14:19.000000000 +0600
+@@ -173,6 +173,10 @@
+ fi
+ export GNUSTEP_MAKEFILES
+ 
++if [ -z "$NIX_GNUSTEP_MAKEFILES_ADDITIONAL" ]; then
++  NIX_GNUSTEP_MAKEFILES_ADDITIONAL=@NIX_GNUSTEP_MAKEFILES_ADDITIONAL@
++fi
++export NIX_GNUSTEP_MAKEFILES_ADDITIONAL
+ 
+ if [ "$GNUSTEP_MAKE_STRICT_V2_MODE" = "yes" ]; then
+   # Make sure this is never set in gnustep-make v2 strict mode; it
+diff -ru gnustep-make-2.6.6/GNUstep-strict-v2.conf.in gnustep-make-2.6.6.patched/GNUstep-strict-v2.conf.in
+--- gnustep-make-2.6.6/GNUstep-strict-v2.conf.in	2008-01-15 20:35:36.000000000 +0600
++++ gnustep-make-2.6.6.patched/GNUstep-strict-v2.conf.in	2014-12-07 22:04:56.000000000 +0600
+@@ -47,7 +47,6 @@
+ # Traditionally, this is /usr/GNUstep/System/Library/Makefiles
+ GNUSTEP_MAKEFILES=@GNUSTEP_MAKEFILES@
+ 
+-
+ # This is where the user home directories are.  Only used to provide
+ # NSUserDirectory in gnustep-base.  Never used anywhere else.
+ GNUSTEP_SYSTEM_USERS_DIR=@GNUSTEP_SYSTEM_USERS_DIR@
+diff -ru gnustep-make-2.6.6/library-combo.make gnustep-make-2.6.6.patched/library-combo.make
+--- gnustep-make-2.6.6/library-combo.make	2012-02-21 19:53:02.000000000 +0600
++++ gnustep-make-2.6.6.patched/library-combo.make	2014-12-09 20:15:05.000000000 +0600
+@@ -142,7 +142,7 @@
+ #
+ # Third-party foundations not using make package
+ # Our own foundation will install a base.make file into 
+-# $GNUSTEP_MAKEFILES/Additional/ to set the needed flags
++# $NIX_GNUSTEP_MAKEFILES_ADDITIONAL to set the needed flags
+ #
+ ifeq ($(FOUNDATION_LIB), nx)
+   # -framework Foundation is used both to find headers, and to link
+@@ -166,7 +166,7 @@
+ 
+ #
+ # FIXME - Ask Helge to move this inside his libFoundation, and have 
+-# it installed as a $(GNUSTEP_MAKEFILES)/Additional/libFoundation.make
++# it installed as a $(NIX_GNUSTEP_MAKEFILES_ADDITIONAL)/libFoundation.make
+ #
+ ifeq ($(FOUNDATION_LIB),fd)
+   -include $(GNUSTEP_MAKEFILES)/libFoundation.make
+@@ -193,7 +193,7 @@
+ GUI_LIBS = 
+ #
+ # Third-party GUI libraries - our own sets its flags into 
+-# $(GNUSTEP_MAKEFILES)/Additional/gui.make
++# $(NIX_GNUSTEP_MAKEFILES_ADDITIONAL)/gui.make
+ #
+ ifeq ($(GUI_LIB), nx)
+   GUI_DEFINE = -DNeXT_GUI_LIBRARY=1
+diff -ru gnustep-make-2.6.6/rules.make gnustep-make-2.6.6.patched/rules.make
+--- gnustep-make-2.6.6/rules.make	2013-07-04 16:05:44.000000000 +0600
++++ gnustep-make-2.6.6.patched/rules.make	2014-12-09 21:31:04.000000000 +0600
+@@ -667,7 +667,9 @@
+ 	exit 1$(END_ECHO)
+ endif
+ 
+-$(GNUSTEP_MAKEFILES)/Additional/*.make: ;
++ifneq ($(NIX_GNUSTEP_MAKEFILES_ADDITIONAL),)
++$(NIX_GNUSTEP_MAKEFILES_ADDITIONAL): ;
++endif
+ 
+ $(GNUSTEP_MAKEFILES)/Master/*.make: ;
+ 
diff --git a/pkgs/desktops/gnustep/make/gsmakeDerivation.nix b/pkgs/desktops/gnustep/make/gsmakeDerivation.nix
new file mode 100644
index 00000000000..00b96cd2fac
--- /dev/null
+++ b/pkgs/desktops/gnustep/make/gsmakeDerivation.nix
@@ -0,0 +1,19 @@
+{ stdenv, lib, make, makeWrapper, which }:
+{ buildInputs ? [], ...} @ args:
+stdenv.mkDerivation (args // {
+  buildInputs = [ makeWrapper make which ] ++ buildInputs;
+
+  builder = ./builder.sh;
+  setupHook = ./setup-hook.sh;
+
+  GNUSTEP_MAKEFILES = "${make}/share/GNUstep/Makefiles";
+
+  meta = {
+    homepage = http://gnustep.org/;
+
+    license = stdenv.lib.licenses.lgpl2Plus;
+
+    maintainers = with stdenv.lib.maintainers; [ ashalkhakov matthewbauer ];
+    platforms = stdenv.lib.platforms.linux;
+  } // (if builtins.hasAttr "meta" args then args.meta else {});
+})
diff --git a/pkgs/desktops/gnustep/make/setup-hook.sh b/pkgs/desktops/gnustep/make/setup-hook.sh
new file mode 100644
index 00000000000..71618ef960f
--- /dev/null
+++ b/pkgs/desktops/gnustep/make/setup-hook.sh
@@ -0,0 +1,77 @@
+# this path is used by some packages to install additional makefiles
+export DESTDIR_GNUSTEP_MAKEFILES=$out/share/GNUstep/Makefiles
+
+installFlagsArray=( \
+  "GNUSTEP_INSTALLATION_DOMAIN=SYSTEM" \
+  "GNUSTEP_SYSTEM_APPS=$out/lib/GNUstep/Applications" \
+  "GNUSTEP_SYSTEM_ADMIN_APPS=$out/lib/GNUstep/Applications" \
+  "GNUSTEP_SYSTEM_WEB_APPS=$out/lib/GNUstep/WebApplications" \
+  "GNUSTEP_SYSTEM_TOOLS=$out/bin" \
+  "GNUSTEP_SYSTEM_ADMIN_TOOLS=$out/sbin" \
+  "GNUSTEP_SYSTEM_LIBRARY=$out/lib/GNUstep" \
+  "GNUSTEP_SYSTEM_HEADERS=$out/include" \
+  "GNUSTEP_SYSTEM_LIBRARIES=$out/lib" \
+  "GNUSTEP_SYSTEM_DOC=$out/share/GNUstep/Documentation" \
+  "GNUSTEP_SYSTEM_DOC_MAN=$out/share/man" \
+  "GNUSTEP_SYSTEM_DOC_INFO=$out/share/info" \
+)
+
+addEnvVars() {
+    local filename
+
+    for filename in $1/share/GNUstep/Makefiles/Additional/*.make ; do
+	if case "$NIX_GNUSTEP_MAKEFILES_ADDITIONAL" in *"{$filename}"*) false;; *) true;; esac; then
+	    export NIX_GNUSTEP_MAKEFILES_ADDITIONAL+=" $filename"
+	fi
+    done
+
+    local tmp="$1/lib/GNUstep/Applications"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_APPS" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_APPS "$tmp"
+    fi
+    tmp="$1/lib/GNUstep/Applications"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_ADMIN_APPS" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_ADMIN_APPS "$tmp"
+    fi
+    tmp="$1/lib/GNUstep/WebApplications"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_WEB_APPS" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_WEB_APPS "$tmp"
+    fi
+    tmp="$1/bin"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_TOOLS" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_TOOLS "$tmp"
+    fi
+    tmp="$1/sbin"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS "$tmp"
+    fi
+    tmp="$1/lib/GNUstep"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_LIBRARY" in *"${tmp}"*) false;; *) true;; esac; then
+    	addToSearchPath NIX_GNUSTEP_SYSTEM_LIBRARY "$tmp"
+    fi
+    tmp="$1/include"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_HEADERS" in *"${tmp}"*) false;; *) true;; esac; then
+    	if [ -z "$NIX_GNUSTEP_SYSTEM_HEADERS" ]; then
+    	    export NIX_GNUSTEP_SYSTEM_HEADERS="$tmp"
+    	else
+    	    export NIX_GNUSTEP_SYSTEM_HEADERS+=" $tmp"
+    	fi
+    fi
+    tmp="$1/lib"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_LIBRARIES" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_LIBRARIES "$tmp"
+    fi
+    tmp="$1/share/GNUstep/Documentation"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_DOC" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_DOC "$tmp"
+    fi
+    tmp="$1/share/man"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_DOC_MAN" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_DOC_MAN "$tmp"
+    fi
+    tmp="$1/share/info"
+    if [ -d "$tmp" ] && case "$NIX_GNUSTEP_SYSTEM_DOC_INFO" in *"${tmp}"*) false;; *) true;; esac; then
+	addToSearchPath NIX_GNUSTEP_SYSTEM_DOC_INFO "$tmp"
+    fi
+}
+envHooks=(${envHooks[@]} addEnvVars)
diff --git a/pkgs/desktops/gnustep/make/wrapper.sh b/pkgs/desktops/gnustep/make/wrapper.sh
new file mode 100644
index 00000000000..1bc2e130d88
--- /dev/null
+++ b/pkgs/desktops/gnustep/make/wrapper.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+. $GNUSTEP_MAKEFILES/GNUstep.sh
+$1
diff --git a/pkgs/desktops/gnustep/projectcenter/default.nix b/pkgs/desktops/gnustep/projectcenter/default.nix
new file mode 100644
index 00000000000..abfdac1e7af
--- /dev/null
+++ b/pkgs/desktops/gnustep/projectcenter/default.nix
@@ -0,0 +1,23 @@
+{ fetchurl
+, base, back, gsmakeDerivation, gui, gorm
+, gnumake, gdb
+}:
+let
+  version = "0.6.2";
+in
+gsmakeDerivation {
+  name = "projectcenter-${version}";
+  src = fetchurl {
+    url = "ftp://ftp.gnustep.org/pub/gnustep/dev-apps/ProjectCenter-${version}.tar.gz";
+    sha256 = "0wwlbpqf541apw192jb633d634zkpjhcrrkd1j80y9hihphll465";
+  };
+
+  # NOTE: need a patch for ProjectCenter to help it locate some necessary tools:
+  # 1. Framework/PCProjectLauncher.m, locate gdb (say among NIX_GNUSTEP_SYSTEM_TOOLS)
+  # 2. Framework/PCProjectBuilder.m, locate gmake (similar)
+  propagatedBuildInputs = [ base back gui gnumake gdb gorm ];
+  
+  meta = {
+    description = "GNUstep's integrated development environment";
+  };
+}
diff --git a/pkgs/desktops/gnustep/projectcenter/fixup-preamble.patch b/pkgs/desktops/gnustep/projectcenter/fixup-preamble.patch
new file mode 100644
index 00000000000..3fe19a6a58b
--- /dev/null
+++ b/pkgs/desktops/gnustep/projectcenter/fixup-preamble.patch
@@ -0,0 +1,14 @@
+diff -c ProjectCenter-0.6.2/GNUmakefile.preamble ProjectCenter-0.6.2.patched/GNUmakefile.preamble
+--- ProjectCenter-0.6.2/GNUmakefile.preamble	2010-08-08 03:56:04.000000000 +0600
++++ artyom/ProjectCenter-0.6.2.patched/GNUmakefile.preamble	2014-12-01 20:08:31.000000000 +0600
+@@ -39,7 +39,7 @@
+ ADDITIONAL_INCLUDE_DIRS += -I./ -I./Headers
+ 
+ # Additional LDFLAGS to pass to the linker
+-ADDITIONAL_LDFLAGS += 
++ADDITIONAL_LDFLAGS += -lgnustep-base -lgnustep-gui
+ 
+ # Additional library directories the linker should search
+ ADDITIONAL_LIB_DIRS += -L./Framework/ProjectCenter.framework/$(GNUSTEP_TARGET_LDIR)
+
+Diff finished.  Mon Dec  1 20:08:50 2014
diff --git a/pkgs/desktops/gnustep/systempreferences/default.nix b/pkgs/desktops/gnustep/systempreferences/default.nix
new file mode 100644
index 00000000000..2bc4f688184
--- /dev/null
+++ b/pkgs/desktops/gnustep/systempreferences/default.nix
@@ -0,0 +1,17 @@
+{ back, base, gui, gsmakeDerivation, fetchurl }:
+let
+  version = "1.1.0";
+in
+gsmakeDerivation {
+  name = "system_preferences-${version}";
+  src = fetchurl {
+    url = "ftp://ftp.gnustep.org/pub/gnustep/usr-apps/SystemPreferences-${version}.tar.gz";
+    sha256 = "1q68bs8rlq0dxkar01qs5wfyas4iivddnama371jd7ll6cxzmpy7";
+  };
+#  GNUSTEP_MAKEFILES = "${gnustep_make}/share/GNUstep/Makefiles";
+  buildInputs = [ back base gui ];
+#  propagatedBuildInputs = [ gnustep_back gnustep_base gnustep_gui ];
+  meta = {
+    description = "The settings manager for the GNUstep environment and its applications";
+  };
+}