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}" + ''; + }; +}