nixpkgs/upstart-jobs/xserver.nix

76 lines
1.4 KiB
Nix
Raw Normal View History

{ stdenv, writeText
, lib
, xorgserver
, xinit
, # Initial client/window manager.
twm, xterm
, xf86inputkeyboard
, xf86inputmouse
, xf86videovesa
, # Virtual console for the X server.
tty ? 7
, # X display number.
display ? 0
, # List of font directories.
fontDirectories
}:
let
config = stdenv.mkDerivation {
name = "xserver.conf";
src = ./xserver.conf;
inherit fontDirectories;
buildCommand = "
buildCommand= # urgh, don't substitute this
export fontPaths=
for i in $fontDirectories; do
if test \"\${i:0:\${#NIX_STORE}}\" == \"$NIX_STORE\"; then
for j in $(find $i -name fonts.dir); do
fontPaths=\"\${fontPaths}FontPath \\\"$(dirname $j)\\\"\\n\"
done
fi
done
substituteAll $src $out
";
};
clientScript = writeText "xclient" "
${twm}/bin/twm &
${xterm}/bin/xterm -ls
";
in
rec {
name = "xserver";
job = "
#start on network-interfaces
start script
end script
# !!! -ac is a bad idea.
exec ${xinit}/bin/xinit ${stdenv.bash}/bin/sh ${clientScript} -- ${xorgserver}/bin/X \\
-ac -nolisten tcp -terminate \\
-logfile /var/log/X.${toString display}.log \\
-modulepath ${xorgserver}/lib/xorg/modules,${xf86inputkeyboard}/lib/xorg/modules/input,${xf86inputmouse}/lib/xorg/modules/input,${xf86videovesa}/lib/xorg/modules/drivers \\
-config ${config} \\
:${toString display} vt${toString tty}
";
}