diff --git a/Makefile.am b/Makefile.am
index aa412bda2bacf5d2ff436f6ab1245bac2d1a05b1..ae694eb0e70f48a18eb08b6b70d5dade09d8a641 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -87,6 +87,7 @@ MODULES =					\
   guix/build/gremlin.scm			\
   guix/build/emacs-utils.scm			\
   guix/build/graft.scm				\
+  guix/search-paths.scm				\
   guix/packages.scm				\
   guix/import/utils.scm				\
   guix/import/gnu.scm				\
diff --git a/guix/build-system/cmake.scm b/guix/build-system/cmake.scm
index 1bc1879be52723d57b6f8fe1f6e7f560487010e7..25ac262d5d7f3ae5d6a5a9f9121b81c337ac1b58 100644
--- a/guix/build-system/cmake.scm
+++ b/guix/build-system/cmake.scm
@@ -21,6 +21,7 @@ (define-module (guix build-system cmake)
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix derivations)
+  #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
   #:use-module (guix packages)
diff --git a/guix/build-system/glib-or-gtk.scm b/guix/build-system/glib-or-gtk.scm
index 954c716893f322b4abb661f9b51c32e13aebf1f1..a1f0a9b8a4b3fa609afaca3319b8c08d97dcecc8 100644
--- a/guix/build-system/glib-or-gtk.scm
+++ b/guix/build-system/glib-or-gtk.scm
@@ -22,6 +22,7 @@ (define-module (guix build-system glib-or-gtk)
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix derivations)
+  #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
   #:use-module (guix packages)
diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index 252022493154707ed8070263972a45039b21419b..da664e542214e30408c9c99b0419e38a4baf1d85 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -20,6 +20,7 @@ (define-module (guix build-system gnu)
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix derivations)
+  #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix packages)
   #:use-module (srfi srfi-1)
diff --git a/guix/build-system/haskell.scm b/guix/build-system/haskell.scm
index 0fbf0b8e759fa7328a9b332792f0e44d844547ef..1cb734631c6da7a2c74d38a4ad0dd875f6a91981 100644
--- a/guix/build-system/haskell.scm
+++ b/guix/build-system/haskell.scm
@@ -21,6 +21,7 @@ (define-module (guix build-system haskell)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix derivations)
+  #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
   #:use-module (ice-9 match)
diff --git a/guix/build-system/perl.scm b/guix/build-system/perl.scm
index 78331536766048471bae7ef86a7a26808c623b49..06af1dd20e7e6e261bd90407ade8b8091ec15998 100644
--- a/guix/build-system/perl.scm
+++ b/guix/build-system/perl.scm
@@ -20,6 +20,7 @@ (define-module (guix build-system perl)
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix derivations)
+  #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
   #:use-module (guix packages)
diff --git a/guix/build-system/python.scm b/guix/build-system/python.scm
index d498cf618bff95b9233abfd58527ff65d62f987f..e9fffcc62f73b941401b01e3a53dd15d58d06bfa 100644
--- a/guix/build-system/python.scm
+++ b/guix/build-system/python.scm
@@ -23,6 +23,7 @@ (define-module (guix build-system python)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix derivations)
+  #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
   #:use-module (ice-9 match)
diff --git a/guix/build-system/ruby.scm b/guix/build-system/ruby.scm
index 83bc93d90169459d94b6a1695cfefd569e76dc92..e4fda30cf394321ebd24489ff7a8913ba058e10c 100644
--- a/guix/build-system/ruby.scm
+++ b/guix/build-system/ruby.scm
@@ -22,6 +22,7 @@ (define-module (guix build-system ruby)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix derivations)
+  #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
   #:use-module (ice-9 match)
diff --git a/guix/build-system/waf.scm b/guix/build-system/waf.scm
index c67f649fa7bee2400ba4a67916262c752fa839a0..044d2a0829963424c0a7ccb3fb27ae15386d5d96 100644
--- a/guix/build-system/waf.scm
+++ b/guix/build-system/waf.scm
@@ -21,6 +21,7 @@ (define-module (guix build-system waf)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix derivations)
+  #:use-module (guix search-paths)
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
   #:use-module ((guix build-system python)
diff --git a/guix/packages.scm b/guix/packages.scm
index d7fced83843144d6e9ed03f0eddb17743b03391f..c955b351554ac3bca0671cc78ca7664870fff4f8 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -26,6 +26,7 @@ (define-module (guix packages)
   #:use-module (guix base32)
   #:use-module (guix derivations)
   #:use-module (guix build-system)
+  #:use-module (guix search-paths)
   #:use-module (guix gexp)
   #:use-module (ice-9 match)
   #:use-module (ice-9 vlist)
@@ -36,7 +37,8 @@ (define-module (guix packages)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
   #:re-export (%current-system
-               %current-target-system)
+               %current-target-system
+               search-path-specification)         ;for convenience
   #:export (origin
             origin?
             origin-uri
@@ -52,12 +54,6 @@ (define-module (guix packages)
             origin-imported-modules
             base32
 
-            <search-path-specification>
-            search-path-specification
-            search-path-specification?
-            search-path-specification->sexp
-            sexp->search-path-specification
-
             package
             package?
             package-name
@@ -189,40 +185,6 @@ (define-syntax base32
       ((_ str)
        #'(nix-base32-string->bytevector str)))))
 
-;; The specification of a search path.
-(define-record-type* <search-path-specification>
-  search-path-specification make-search-path-specification
-  search-path-specification?
-  (variable     search-path-specification-variable) ;string
-  (files        search-path-specification-files)    ;list of strings
-  (separator    search-path-specification-separator ;string
-                (default ":"))
-  (file-type    search-path-specification-file-type ;symbol
-                (default 'directory))
-  (file-pattern search-path-specification-file-pattern ;#f | string
-                (default #f)))
-
-(define (search-path-specification->sexp spec)
-  "Return an sexp representing SPEC, a <search-path-specification>.  The sexp
-corresponds to the arguments expected by `set-path-environment-variable'."
-  ;; Note that this sexp format is used both by build systems and in
-  ;; (guix profiles), so think twice before you change it.
-  (match spec
-    (($ <search-path-specification> variable files separator type pattern)
-     `(,variable ,files ,separator ,type ,pattern))))
-
-(define (sexp->search-path-specification sexp)
-  "Convert SEXP, which is as returned by 'search-path-specification->sexp', to
-a <search-path-specification> object."
-  (match sexp
-    ((variable files separator type pattern)
-     (search-path-specification
-      (variable variable)
-      (files files)
-      (separator separator)
-      (file-type type)
-      (file-pattern pattern)))))
-
 (define %supported-systems
   ;; This is the list of system types that are supported.  By default, we
   ;; expect all packages to build successfully here.
diff --git a/guix/profiles.scm b/guix/profiles.scm
index 2e515d5490b4e30ae9e748cd5e102935eb8996ca..fd2afc05a3ff9be70caf9b992d4d4121b95f0a89 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -22,8 +22,9 @@
 (define-module (guix profiles)
   #:use-module (guix utils)
   #:use-module (guix records)
-  #:use-module (guix derivations)
   #:use-module (guix packages)
+  #:use-module (guix derivations)
+  #:use-module (guix search-paths)
   #:use-module (guix gexp)
   #:use-module (guix monads)
   #:use-module (guix store)
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 003f6958ef4d10f8de8ba39e05844e29fe25dd67..44cacdca8b918e8d9017c80966c5e521c2821fdf 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -25,6 +25,7 @@ (define-module (guix scripts package)
   #:use-module (guix derivations)
   #:use-module (guix packages)
   #:use-module (guix profiles)
+  #:use-module (guix search-paths)
   #:use-module (guix monads)
   #:use-module (guix utils)
   #:use-module (guix config)
diff --git a/guix/search-paths.scm b/guix/search-paths.scm
new file mode 100644
index 0000000000000000000000000000000000000000..147bfcae8c3ac419008586381bdef2f5c1977c4d
--- /dev/null
+++ b/guix/search-paths.scm
@@ -0,0 +1,77 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix 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.
+;;;
+;;; GNU Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix search-paths)
+  #:use-module (guix records)
+  #:use-module (ice-9 match)
+  #:export (<search-path-specification>
+            search-path-specification
+            search-path-specification?
+            search-path-specification-variable
+            search-path-specification-files
+            search-path-specification-separator
+            search-path-specification-file-type
+            search-path-specification-file-pattern
+
+            search-path-specification->sexp
+            sexp->search-path-specification))
+
+;;; Commentary:
+;;;
+;;; This module defines "search path specifications", which allow packages to
+;;; declare environment variables that they use to define search paths.  For
+;;; instance, GCC has the 'CPATH' variable, Guile has the 'GUILE_LOAD_PATH'
+;;; variable, etc.
+;;;
+;;; Code:
+
+;; The specification of a search path.
+(define-record-type* <search-path-specification>
+  search-path-specification make-search-path-specification
+  search-path-specification?
+  (variable     search-path-specification-variable) ;string
+  (files        search-path-specification-files)    ;list of strings
+  (separator    search-path-specification-separator ;string
+                (default ":"))
+  (file-type    search-path-specification-file-type ;symbol
+                (default 'directory))
+  (file-pattern search-path-specification-file-pattern ;#f | string
+                (default #f)))
+
+(define (search-path-specification->sexp spec)
+  "Return an sexp representing SPEC, a <search-path-specification>.  The sexp
+corresponds to the arguments expected by `set-path-environment-variable'."
+  ;; Note that this sexp format is used both by build systems and in
+  ;; (guix profiles), so think twice before you change it.
+  (match spec
+    (($ <search-path-specification> variable files separator type pattern)
+     `(,variable ,files ,separator ,type ,pattern))))
+
+(define (sexp->search-path-specification sexp)
+  "Convert SEXP, which is as returned by 'search-path-specification->sexp', to
+a <search-path-specification> object."
+  (match sexp
+    ((variable files separator type pattern)
+     (search-path-specification
+      (variable variable)
+      (files files)
+      (separator separator)
+      (file-type type)
+      (file-pattern pattern)))))
+
+;;; search-paths.scm ends here