diff --git a/system/options.nix b/system/options.nix
index f08f31867e4d..36b72157d150 100644
--- a/system/options.nix
+++ b/system/options.nix
@@ -380,69 +380,6 @@ in
";
};
- services = {
-
-
- ttyBackgrounds = {
-
- enable = mkOption {
- default = true;
- description = "
- Whether to enable graphical backgrounds for the virtual consoles.
- ";
- };
-
- defaultTheme = mkOption {
- default = pkgs.fetchurl {
- #url = http://www.bootsplash.de/files/themes/Theme-BabyTux.tar.bz2;
- url = http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/Theme-BabyTux.tar.bz2;
- md5 = "a6d89d1c1cff3b6a08e2f526f2eab4e0";
- };
- description = "
- The default theme for the virtual consoles. Themes can be found
- at .
- ";
- };
-
- defaultSpecificThemes = mkOption {
- default = [
- /*
- { tty = 6;
- theme = pkgs.fetchurl { # Yeah!
- url = http://www.bootsplash.de/files/themes/Theme-Pativo.tar.bz2;
- md5 = "9e13beaaadf88d43a5293e7ab757d569";
- };
- }
- */
- { tty = 10;
- theme = pkgs.fetchurl {
- #url = http://www.bootsplash.de/files/themes/Theme-GNU.tar.bz2;
- url = http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/Theme-GNU.tar.bz2;
- md5 = "61969309d23c631e57b0a311102ef034";
- };
- }
- ];
- description = "
- This option sets specific themes for virtual consoles. If you
- just want to set themes for additional consoles, use
- .
- ";
- };
-
- specificThemes = mkOption {
- default = [
- ];
- description = "
- This option allows you to set specific themes for virtual
- consoles.
- ";
- };
-
- };
-
-
- };
-
nesting = {
children = mkOption {
default = [];
@@ -547,6 +484,7 @@ in
(import ../upstart-jobs/dovecot.nix)
(import ../upstart-jobs/bind.nix)
(import ../upstart-jobs/mingetty.nix) # The terminals on ttyX.
+ (import ../upstart-jobs/tty-backgrounds.nix)
# nix
(import ../upstart-jobs/nix.nix) # nix options and daemon
diff --git a/upstart-jobs/default.nix b/upstart-jobs/default.nix
index 740b6785245e..1a3cf76740bb 100644
--- a/upstart-jobs/default.nix
+++ b/upstart-jobs/default.nix
@@ -140,37 +140,6 @@ let
["reboot" "halt" "system-halt" "power-off"]
)
- # Transparent TTY backgrounds.
- ++ optional (config.services.ttyBackgrounds.enable && kernelPackages.splashutils != null)
- (import ../upstart-jobs/tty-backgrounds.nix {
- inherit (pkgs) stdenv;
- inherit (kernelPackages) splashutils;
-
- backgrounds =
-
- let
-
- specificThemes =
- config.services.ttyBackgrounds.defaultSpecificThemes
- ++ config.services.ttyBackgrounds.specificThemes;
-
- overridenTTYs = map (x: x.tty) specificThemes;
-
- # Use the default theme for all the mingetty ttys and for the
- # syslog tty, except those for which a specific theme is
- # specified.
- defaultTTYs =
- pkgs.lib.filter (x: !(pkgs.lib.elem x overridenTTYs)) requiredTTYs;
-
- in
- (map (ttyNumber: {
- tty = ttyNumber;
- theme = config.services.ttyBackgrounds.defaultTheme;
- }) defaultTTYs)
- ++ specificThemes;
-
- })
-
# User-defined events.
++ (map makeJob (config.services.extraJobs));
diff --git a/upstart-jobs/tty-backgrounds.nix b/upstart-jobs/tty-backgrounds.nix
index 604085308709..825874aaeed4 100644
--- a/upstart-jobs/tty-backgrounds.nix
+++ b/upstart-jobs/tty-backgrounds.nix
@@ -1,11 +1,100 @@
-{stdenv, splashutils, backgrounds}:
+{pkgs, config, ...}:
-rec {
- name = "tty-backgrounds";
+###### interface
+let
+ inherit (pkgs.lib) mkOption mkIf;
- unpackTheme = theme: import ../helpers/unpack-theme.nix {
- inherit stdenv theme;
+ options = {
+ services = {
+ ttyBackgrounds = {
+
+ enable = mkOption {
+ default = true;
+ description = "
+ Whether to enable graphical backgrounds for the virtual consoles.
+ ";
+ };
+
+ defaultTheme = mkOption {
+ default = pkgs.fetchurl {
+ #url = http://www.bootsplash.de/files/themes/Theme-BabyTux.tar.bz2;
+ url = http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/Theme-BabyTux.tar.bz2;
+ md5 = "a6d89d1c1cff3b6a08e2f526f2eab4e0";
+ };
+ description = "
+ The default theme for the virtual consoles. Themes can be found
+ at .
+ ";
+ };
+
+ defaultSpecificThemes = mkOption {
+ default = [
+ /*
+ { tty = 6;
+ theme = pkgs.fetchurl { # Yeah!
+ url = http://www.bootsplash.de/files/themes/Theme-Pativo.tar.bz2;
+ md5 = "9e13beaaadf88d43a5293e7ab757d569";
+ };
+ }
+ */
+ { tty = 10;
+ theme = pkgs.fetchurl {
+ #url = http://www.bootsplash.de/files/themes/Theme-GNU.tar.bz2;
+ url = http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/Theme-GNU.tar.bz2;
+ md5 = "61969309d23c631e57b0a311102ef034";
+ };
+ }
+ ];
+ description = "
+ This option sets specific themes for virtual consoles. If you
+ just want to set themes for additional consoles, use
+ .
+ ";
+ };
+
+ specificThemes = mkOption {
+ default = [
+ ];
+ description = "
+ This option allows you to set specific themes for virtual
+ consoles.
+ ";
+ };
+ };
+ };
};
+in
+
+###### implementation
+
+let
+ inherit (pkgs) stdenv;
+ kernelPackages = config.boot.kernelPackages;
+ splashutils = kernelPackages.splashutils;
+ requiredTTYs = config.requiredTTYs;
+ backgrounds =
+
+ let
+
+ specificThemes =
+ config.services.ttyBackgrounds.defaultSpecificThemes
+ ++ config.services.ttyBackgrounds.specificThemes;
+
+ overridenTTYs = map (x: x.tty) specificThemes;
+
+ # Use the default theme for all the mingetty ttys and for the
+ # syslog tty, except those for which a specific theme is
+ # specified.
+ defaultTTYs =
+ pkgs.lib.filter (x: !(pkgs.lib.elem x overridenTTYs)) requiredTTYs;
+
+ in
+ (map (ttyNumber: {
+ tty = ttyNumber;
+ theme = config.services.ttyBackgrounds.defaultTheme;
+ }) defaultTTYs)
+ ++ specificThemes;
+
themesUnpacked = stdenv.mkDerivation {
name = "splash-themes";
@@ -15,46 +104,71 @@ rec {
themes = map (x: if x ? theme then (unpackTheme x.theme) else "default") backgrounds;
};
- extraEtc = [
- { source = themesUnpacked;
- target = "splash";
- }
+ unpackTheme = theme: import ../helpers/unpack-theme.nix {
+ inherit stdenv theme;
+ };
+
+
+
+in
+
+# FIXME see xfs
+# assert splashutils != null;
+
+mkIf (config.services.ttyBackgrounds.enable && kernelPackages.splashutils != null) {
+ require = [
+ options
];
- job = ''
- start on udev
- start script
+ environment = {
+ etc = [
+ { source = themesUnpacked;
+ target = "splash";
+ }
+ ];
+ };
- # Critical: tell the kernel where to find splash_helper. It calls
- # this program every time we switch between consoles.
- helperProcFile=${splashutils.helperProcFile}
- if test -e /proc/sys/fbcondecor; then helperProcFile=/proc/sys/fbcondecor; fi
- echo ${splashutils}/${splashutils.helperName} > $helperProcFile
- # For each console...
- for tty in ${toString (map (x: x.tty) backgrounds)}; do
- # Make sure that the console exists.
- echo -n "" > /dev/tty$tty
+ services = {
+ extraJobs = [ rec {
+ name = "tty-backgrounds";
- # Set the theme as determined by tty-backgrounds-combine.sh
- # above.
- theme=$(readlink ${themesUnpacked}/$tty)
- ${splashutils}/${splashutils.controlName} --tty $tty -c setcfg -t $theme || true
- ${splashutils}/${splashutils.controlName} --tty $tty -c setpic -t $theme || true
- ${splashutils}/${splashutils.controlName} --tty $tty -c on || true
- done
+ job = ''
+ start on udev
- end script
+ start script
- respawn sleep 10000 # !!! Hack
+ # Critical: tell the kernel where to find splash_helper. It calls
+ # this program every time we switch between consoles.
+ helperProcFile=${splashutils.helperProcFile}
+ if test -e /proc/sys/fbcondecor; then helperProcFile=/proc/sys/fbcondecor; fi
+ echo ${splashutils}/${splashutils.helperName} > $helperProcFile
- stop script
- # Disable the theme on each console.
- for tty in ${toString (map (x: x.tty) backgrounds)}; do
- ${splashutils}/${splashutils.controlName} --tty $tty -c off || true
- done
- end script
- '';
-
+ # For each console...
+ for tty in ${toString (map (x: x.tty) backgrounds)}; do
+ # Make sure that the console exists.
+ echo -n "" > /dev/tty$tty
+
+ # Set the theme as determined by tty-backgrounds-combine.sh
+ # above.
+ theme=$(readlink ${themesUnpacked}/$tty)
+ ${splashutils}/${splashutils.controlName} --tty $tty -c setcfg -t $theme || true
+ ${splashutils}/${splashutils.controlName} --tty $tty -c setpic -t $theme || true
+ ${splashutils}/${splashutils.controlName} --tty $tty -c on || true
+ done
+
+ end script
+
+ respawn sleep 10000 # !!! Hack
+
+ stop script
+ # Disable the theme on each console.
+ for tty in ${toString (map (x: x.tty) backgrounds)}; do
+ ${splashutils}/${splashutils.controlName} --tty $tty -c off || true
+ done
+ end script
+ '';
+ }];
+ };
}