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