diff --git a/nixos/modules/config/debug-info.nix b/nixos/modules/config/debug-info.nix
new file mode 100644
index 00000000000..a096a9809ce
--- /dev/null
+++ b/nixos/modules/config/debug-info.nix
@@ -0,0 +1,46 @@
+{ config, lib, ... }:
+
+with lib;
+
+{
+
+ options = {
+
+ environment.enableDebugInfo = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Some NixOS packages provide debug symbols. However, these are
+ not included in the system closure by default to save disk
+ space. Enabling this option causes the debug symbols to appear
+ in /run/current-system/sw/lib/debug/.build-id,
+ where tools such as gdb can find them.
+ If you need debug symbols for a package that doesn't
+ provide them by default, you can enable them as follows:
+
+
+ nixpkgs.config.packageOverrides = pkgs: {
+ hello = overrideDerivation pkgs.hello (attrs: {
+ outputs = attrs.outputs or ["out"] ++ ["debug"];
+ buildInputs = attrs.buildInputs ++ [<nixpkgs/pkgs/build-support/setup-hooks/separate-debug-info.sh>];
+ });
+ };
+
+ '';
+ };
+
+ };
+
+
+ config = {
+
+ # FIXME: currently disabled because /lib is already in
+ # environment.pathsToLink, and we can't have both.
+ #environment.pathsToLink = [ "/lib/debug/.build-id" ];
+
+ environment.outputsToLink =
+ optional config.environment.enableDebugInfo "debug";
+
+ };
+
+}
diff --git a/nixos/modules/config/system-path.nix b/nixos/modules/config/system-path.nix
index f9257f578bf..e14e4cf1314 100644
--- a/nixos/modules/config/system-path.nix
+++ b/nixos/modules/config/system-path.nix
@@ -103,8 +103,7 @@ in
[ "/bin"
"/etc/xdg"
"/info"
- "/lib" # FIXME: remove
- #"/lib/debug/.build-id" # enables GDB to find separated debug info
+ "/lib" # FIXME: remove and update debug-info.nix
"/sbin"
"/share/applications"
"/share/desktop-directories"
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 3a5fb41dc79..77575867f87 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -1,7 +1,8 @@
[
+ ./config/debug-info.nix
./config/fonts/corefonts.nix
- ./config/fonts/fontconfig.nix
./config/fonts/fontconfig-ultimate.nix
+ ./config/fonts/fontconfig.nix
./config/fonts/fontdir.nix
./config/fonts/fonts.nix
./config/fonts/ghostscript.nix
@@ -22,9 +23,9 @@
./config/system-environment.nix
./config/system-path.nix
./config/timezone.nix
- ./config/vpnc.nix
./config/unix-odbc-drivers.nix
./config/users-groups.nix
+ ./config/vpnc.nix
./config/zram.nix
./hardware/all-firmware.nix
./hardware/cpu/amd-microcode.nix
diff --git a/pkgs/tools/package-management/nix/default.nix b/pkgs/tools/package-management/nix/default.nix
index e74daade3b8..e76e2e811f5 100644
--- a/pkgs/tools/package-management/nix/default.nix
+++ b/pkgs/tools/package-management/nix/default.nix
@@ -43,6 +43,8 @@ let
doInstallCheck = false;
+ separateDebugInfo = stdenv.isLinux;
+
crossAttrs = {
postUnpack =
'' export CPATH="${bzip2.crossDrv}/include"