diff --git a/etc/bashrc.sh b/etc/bashrc.sh
index 20b78b21c63..43175f198f0 100644
--- a/etc/bashrc.sh
+++ b/etc/bashrc.sh
@@ -15,9 +15,7 @@ export LANG=@defaultLocale@
export EDITOR=nano
export INFOPATH=/var/run/current-system/sw/info:/var/run/current-system/sw/share/info
export LOCATE_PATH=/var/cache/locatedb
-export KDEDIRS=/var/run/current-system/sw
-export XDG_CONFIG_DIRS=/var/run/current-system/sw/etc/xdg
-export XDG_DATA_DIRS=/var/run/current-system/sw/share
+@shellInit@
# Set up secure multi-user builds: non-root users build through the
# Nix daemon.
@@ -43,11 +41,11 @@ for i in $NIX_PROFILES; do # !!! reverse
export PKG_CONFIG_PATH="$i/lib/pkgconfig:$PKG_CONFIG_PATH"
# Automake's `aclocal' bails out if it finds non-existent directories
- # in its path. !!! We should fix aclocal instead.
- if [ -d "$i/share/aclocal" ]
- then
- export ACLOCAL_PATH="$i/share/aclocal:$ACLOCAL_PATH"
+ # in its path. !!! This has been fixed in the stdenv branch.
+ if [ -d "$i/share/aclocal" ]; then
+ export ACLOCAL_PATH="$i/share/aclocal:$ACLOCAL_PATH"
fi
+
export PERL5LIB="$i/lib/site_perl:$PERL5LIB"
# GStreamer.
diff --git a/etc/default.nix b/etc/default.nix
index 3b81559af66..fedc3c34856 100644
--- a/etc/default.nix
+++ b/etc/default.nix
@@ -19,12 +19,23 @@ let
List of files that have to be linked in /etc.
";
};
+
+ # !!! This should be moved outside of /etc/default.nix.
+ shellInit = mkOption {
+ default = "";
+ example = ''export PATH=/godi/bin/:$PATH'';
+ description = "
+ Script used to initialized user shell environments.
+ ";
+ merge = pkgs.lib.mergeStringOption;
+ };
};
};
in
###### implementation
let
+ shellInit = config.environment.shellInit;
nixEnvVars = config.nix.envVars;
modulesTree = config.system.modulesTree;
nssModulesPath = config.system.nssModules.path;
@@ -114,7 +125,7 @@ let
inherit (pkgs) glibc;
timeZone = config.time.timeZone;
defaultLocale = config.i18n.defaultLocale;
- inherit nixEnvVars;
+ inherit nixEnvVars shellInit;
};
target = "bashrc";
}
diff --git a/system/nixos-environment.nix b/system/nixos-environment.nix
index a2e0ae46cdf..bc28532689e 100644
--- a/system/nixos-environment.nix
+++ b/system/nixos-environment.nix
@@ -43,7 +43,7 @@ in
pathsToLink = mkOption {
- default = ["/bin" "/sbin" "/lib" "/share" "/man" "/info" "/etc"];
+ default = ["/bin" "/sbin" "/lib" "/share/man" "/share/info" "/man" "/info"];
example = ["/"];
description = "
Lists directories to be symlinked in `/var/run/current-system/sw'.
diff --git a/system/options.nix b/system/options.nix
index 8f3dcea23ae..1954e679b45 100644
--- a/system/options.nix
+++ b/system/options.nix
@@ -162,6 +162,7 @@ in
";
};
+ # !!! The mount option should not stay in /system/option.nix
mount = mkOption {
internal = true;
default = pkgs.utillinuxng.override {
@@ -171,6 +172,7 @@ in
paths = [
pkgs.ntfs3g
pkgs.mount_cifs
+ pkgs.nfsUtils
];
pathsToLink = "/sbin";
} + "/sbin";
@@ -442,6 +444,7 @@ in
(import ../upstart-jobs/zabbix-agent.nix)
(import ../upstart-jobs/zabbix-server.nix)
(import ../upstart-jobs/disnix.nix)
+ (import ../upstart-jobs/consolekit.nix)
(import ../upstart-jobs/cron.nix)
(import ../upstart-jobs/fcron.nix)
(import ../upstart-jobs/cron/locate.nix)
diff --git a/system/system-options.nix b/system/system-options.nix
index fdbd57a79f0..b1688cdda80 100644
--- a/system/system-options.nix
+++ b/system/system-options.nix
@@ -64,16 +64,6 @@ let
inherit (config.environment) pathsToLink;
ignoreCollisions = true;
-
- # TODO: move this to upstart-jobs/xserver/desktopManager/kde4.nix
- postBuild =
- if config.services.xserver.desktopManager.kde4.enable then
- # Rebuild the MIME database. Otherwise KDE won't be able to
- # find many MIME types.
- ''
- ${pkgs.shared_mime_info}/bin/update-mime-database $out/share/mime
- ''
- else "";
};
};
diff --git a/system/system.nix b/system/system.nix
index bed8516b57f..9dd45a938d4 100644
--- a/system/system.nix
+++ b/system/system.nix
@@ -224,7 +224,11 @@ rec {
pkgs.diffutils
pkgs.upstart # for initctl
];
- # !!! wtf does this do???
+ # This attribute is responsible for creating boot entries for
+ # child configuration. They are only (directly) accessible
+ # when the parent configuration is boot default. For example,
+ # you can provide an easy way to boot the same configuration
+ # as you use, but with another kernel
children = map (x: ((import ./system.nix)
{ inherit platform;
configuration = x//{boot=((x.boot)//{grubDevice = "";});};}).system)
diff --git a/upstart-jobs/consolekit.nix b/upstart-jobs/consolekit.nix
new file mode 100644
index 00000000000..ab847b45005
--- /dev/null
+++ b/upstart-jobs/consolekit.nix
@@ -0,0 +1,59 @@
+{pkgs, config, ...}:
+
+###### interface
+let
+ inherit (pkgs.lib) mkOption;
+
+ options = {
+ services = {
+
+ consolekit = {
+ enable = mkOption {
+ default = false;
+ description = "
+ Whether to start the ConsoleKit daemon.
+ ";
+ };
+ };
+
+ };
+ };
+in
+
+###### implementation
+let
+ cfg = config.services.consolekit;
+ inherit (pkgs.lib) mkIf;
+ inherit (pkgs) ConsoleKit;
+
+ job = {
+ name = "consolekit";
+
+ job = ''
+ description "Console Kit Service"
+
+ start on dbus
+ stop on shutdown
+
+ respawn ${ConsoleKit}/sbin/console-kit-daemon
+ '';
+ };
+
+in
+
+mkIf cfg.enable {
+ require = [
+ (import ../upstart-jobs/default.nix) # config.services.extraJobs
+ (import ../upstart-jobs/dbus.nix) # services.dbus.*
+ options
+ ];
+
+ services = {
+ extraJobs = [job];
+
+ dbus = {
+ enable = true;
+ services = [ConsoleKit];
+ };
+ };
+}
diff --git a/upstart-jobs/cron.nix b/upstart-jobs/cron.nix
index 404fdd45b55..4eea169adb3 100644
--- a/upstart-jobs/cron.nix
+++ b/upstart-jobs/cron.nix
@@ -24,6 +24,10 @@ let
crontab. See the manual page for crontab for the expected
format. If you want to get the results mailed you must setuid
sendmail. See
+
+ If neither /var/cron/cron.deny nor /var/cron/cron.allow exist only root
+ will is allowed to have its own crontab file. The /var/cron/cron.deny file
+ is created automatically for you. So every user can use a crontab.
'';
};
@@ -86,6 +90,16 @@ in
# Needed to interpret times in the local timezone.
env TZ=${config.time.timeZone}
+ start script
+ mkdir -m 710 -p /var/cron
+
+ # By default, allow all users to create a crontab. This
+ # is denoted by the existence of an empty cron.deny file.
+ if ! test -e /var/cron/cron.allow -o -e /var/cron/cron.deny; then
+ touch /var/cron/cron.deny
+ fi
+ end script
+
respawn ${pkgs.cron}/sbin/cron -n
'';
}];
diff --git a/upstart-jobs/dbus.nix b/upstart-jobs/dbus.nix
index f98922a5b6e..db8603547ff 100644
--- a/upstart-jobs/dbus.nix
+++ b/upstart-jobs/dbus.nix
@@ -44,8 +44,7 @@ let
name = "dbus-conf";
buildCommand = "
ensureDir $out
- substitute ${dbus}/etc/dbus-1/system.conf $out/system.conf \\
- --replace '' ''
+ ln -s ${dbus}/etc/dbus-1/system.conf $out/system.conf
ensureDir $out/system.d
for i in ${toString services}; do
@@ -77,14 +76,18 @@ let
mkdir -m 0755 -p /var/lib/dbus
${dbus.tools}/bin/dbus-uuidgen --ensure
-
+
+ rm -f ${homeDir}/pid
+ ${dbus}/bin/dbus-daemon --config-file=${configFile}/system.conf
end script
- respawn
+ respawn sleep 1000000
- script
- rm -f ${homeDir}/pid
- exec ${dbus}/bin/dbus-daemon --config-file=${configFile}/system.conf
+ stop script
+ pid=$(cat ${homeDir}/pid)
+ if test -n "$pid"; then
+ kill -9 $pid
+ fi
end script
'';
};
diff --git a/upstart-jobs/disnix.nix b/upstart-jobs/disnix.nix
index 52699c31daf..624ad8a0fc7 100644
--- a/upstart-jobs/disnix.nix
+++ b/upstart-jobs/disnix.nix
@@ -41,11 +41,6 @@ let
start on dbus
stop on shutdown
- start script
- # !!! quick hack: wait until dbus has started
- sleep 3
- end script
-
respawn ${pkgs.bash}/bin/sh -c 'export PATH=/var/run/current-system/sw/bin:$PATH; export HOME=/root; export DISNIX_ACTIVATE_HOOK=${cfg.activateHook}; export DISNIX_DEACTIVATE_HOOK=${cfg.deactivateHook}; ${pkgs.disnix}/bin/disnix-service'
'';
};
diff --git a/upstart-jobs/hal.nix b/upstart-jobs/hal.nix
index e510120a04d..ebd1cb3a197 100644
--- a/upstart-jobs/hal.nix
+++ b/upstart-jobs/hal.nix
@@ -51,9 +51,6 @@ let
start script
- # !!! quick hack: wait until dbus has started
- sleep 3
-
mkdir -m 0755 -p /var/cache/hald
end script
diff --git a/upstart-jobs/nix.nix b/upstart-jobs/nix.nix
index ff25c5691ec..f24be8e16fa 100644
--- a/upstart-jobs/nix.nix
+++ b/upstart-jobs/nix.nix
@@ -98,6 +98,7 @@ let
};
# Environment variables for running Nix.
+ # !!! Fix description.
envVars = mkOption {
internal = true;
default = "";
diff --git a/upstart-jobs/xserver/default.nix b/upstart-jobs/xserver/default.nix
index dfd0e4795aa..98fe14d19f0 100644
--- a/upstart-jobs/xserver/default.nix
+++ b/upstart-jobs/xserver/default.nix
@@ -290,14 +290,14 @@ let
knownVideoDrivers = {
nvidia = { modulesFirst = [ kernelPackages.nvidia_x11 ]; }; #make sure it first loads the nvidia libs
- vesa = { modules = [xorg.xf86videovesa]; };
- vga = { modules = [xorg.xf86videovga]; };
- sis = { modules = [xorg.xf86videosis]; };
- i810 = { modules = [xorg.xf86videoi810]; };
- intel = { modules = [xorg.xf86videointel]; };
- nv = { modules = [xorg.xf86videonv]; };
- ati = { modules = [xorg.xf86videoati]; };
- via = { modules = [xorg.xf86videovia]; };
+ vesa = { modules = [xorg.xf86videovesa]; };
+ vga = { modules = [xorg.xf86videovga]; };
+ sis = { modules = [xorg.xf86videosis]; };
+ i810 = { modules = [xorg.xf86videoi810]; };
+ intel = { modules = [xorg.xf86videointel]; };
+ nv = { modules = [xorg.xf86videonv]; };
+ ati = { modules = [xorg.xf86videoati]; };
+ via = { modules = [xorg.xf86videovia]; };
cirrus = { modules = [xorg.xf86videocirrus]; };
};
diff --git a/upstart-jobs/xserver/desktopManager/kde.nix b/upstart-jobs/xserver/desktopManager/kde.nix
index 9a241d77985..725e51862fa 100644
--- a/upstart-jobs/xserver/desktopManager/kde.nix
+++ b/upstart-jobs/xserver/desktopManager/kde.nix
@@ -19,7 +19,12 @@ let
in
mkIf cfg.enable {
- require = options;
+ require = [
+ options
+
+ # environment.kdePackages
+ (import ./kdeEnvironment.nix)
+ ];
services = {
xserver = {
@@ -29,9 +34,6 @@ mkIf cfg.enable {
name = "kde";
start = ''
# Start KDE.
- export KDEDIRS=$HOME/.nix-profile:/nix/var/nix/profiles/default:${pkgs.kdebase}:${pkgs.kdelibs}
- export XDG_CONFIG_DIRS=${pkgs.kdebase}/etc/xdg:${pkgs.kdelibs}/etc/xdg
- export XDG_DATA_DIRS=${pkgs.kdebase}/share
exec ${pkgs.kdebase}/bin/startkde
'';
}];
@@ -47,9 +49,12 @@ mkIf cfg.enable {
};
environment = {
- extraPackages = [
+ kdePackages = [
pkgs.kdelibs
pkgs.kdebase
+ ];
+
+ extraPackages = [
xorg.xset # used by startkde, non-essential
];
diff --git a/upstart-jobs/xserver/desktopManager/kde4.nix b/upstart-jobs/xserver/desktopManager/kde4.nix
index d39356f05de..7deb4e056ac 100644
--- a/upstart-jobs/xserver/desktopManager/kde4.nix
+++ b/upstart-jobs/xserver/desktopManager/kde4.nix
@@ -19,7 +19,12 @@ let
in
mkIf cfg.enable {
- require = options;
+ require = [
+ options
+
+ # environment.kdePackages
+ (import ./kdeEnvironment.nix)
+ ];
services = {
xserver = {
@@ -44,15 +49,17 @@ mkIf cfg.enable {
};
environment = {
- extraPackages = [
- xorg.xmessage # so that startkde can show error messages
- pkgs.qt4 # needed for qdbus
+ kdePackages = [
pkgs.kde42.kdelibs
pkgs.kde42.kdebase
pkgs.kde42.kdebase_runtime
pkgs.kde42.kdebase_workspace
- pkgs.kde42.kdegames
pkgs.shared_mime_info
+ ];
+
+ extraPackages = [
+ xorg.xmessage # so that startkde can show error messages
+ pkgs.qt4 # needed for qdbus
xorg.xset # used by startkde, non-essential
];
diff --git a/upstart-jobs/xserver/desktopManager/kdeEnvironment.nix b/upstart-jobs/xserver/desktopManager/kdeEnvironment.nix
new file mode 100644
index 00000000000..52628168161
--- /dev/null
+++ b/upstart-jobs/xserver/desktopManager/kdeEnvironment.nix
@@ -0,0 +1,51 @@
+{pkgs, config, ...}:
+
+let
+ inherit (pkgs.lib) mkOption mkIf;
+ kdePackages = config.environment.kdePackages;
+
+ options = {
+
+ kde = {
+
+ extraPackages = mkOption {
+ default = [];
+ merge = builtins.trace "!!! kde.extraPackages is obsolete, you should use environment.kdePackages." pkgs.lib.mergeDefaultOption;
+ description = ''
+ ** Obsolete **
+ Additional KDE packages to be used when you use KDE as a desktop
+ manager. By default, you only get the KDE base packages.
+ '';
+ };
+
+ };
+
+ environment = {
+
+ kdePackages = mkOption {
+ default = [];
+ example = [ pkgs.kde42.kdegames ];
+ description = ''
+ Additional KDE packages to be used when you use KDE as a desktop
+ manager. By default, you only get the KDE base packages.
+ '';
+ apply = pkgs: pkgs ++ config.kde.extraPackages
+ };
+
+ };
+ };
+in
+
+mkIf (kdePackages != []) {
+ require = options;
+
+ environment = {
+ extraPackages = kdePackages;
+
+ shellInit = ''
+ export KDEDIRS="${pkgs.lib.concatStringsSep ":" kdePackages}"
+ export XDG_CONFIG_DIRS="${pkgs.lib.makeSearchPath "etc/xdg" kdePackages}"
+ export XDG_DATA_DIRS="${pkgs.lib.makeSearchPath "share" kdePackages}"
+ '';
+ };
+}