diff --git a/etc/default.nix b/etc/default.nix index 3fe44a2665f7..c03b7819a76d 100644 --- a/etc/default.nix +++ b/etc/default.nix @@ -212,7 +212,6 @@ let ) [ "login" - "slim" "su" "other" "passwd" @@ -223,7 +222,6 @@ let "useradd" "chsh" "xlock" - "kde" "cups" "common" "common-console" # shared stuff for interactive local sessions diff --git a/system/options.nix b/system/options.nix index 1d2a85f17cd5..ba3366ec5b07 100644 --- a/system/options.nix +++ b/system/options.nix @@ -372,8 +372,6 @@ in in [ kernel ] ++ pkgs.lib.optional ((config.networking.enableIntel3945ABGFirmware || config.networking.enableIntel4965AGNFirmware) && !kernel.features ? iwlwifi) kernelPackages.iwlwifi - # !!! this should be declared by the xserver Upstart job. - ++ pkgs.lib.optional (config.services.xserver.enable && config.services.xserver.videoDriver == "nvidia") kernelPackages.nvidiaDrivers ++ pkgs.lib.optional config.hardware.enableGo7007 kernelPackages.wis_go7007 ++ config.boot.extraModulePackages # should only keep this one, other have to be set by the option owners. @@ -1184,314 +1182,6 @@ in }; - xserver = { - - enable = mkOption { - default = false; - description = " - Whether to enable the X server. - "; - }; - - autorun = mkOption { - default = true; - description = " - Switch to false to create upstart-job and configuration, - but not run it automatically - "; - }; - - exportConfiguration = mkOption { - default = false; - description = " - Create /etc/X11/xorg.conf and a file with environment - variables - "; - }; - - tcpEnable = mkOption { - default = false; - description = " - Whether to enable TCP socket for the X server. - "; - }; - - resolutions = mkOption { - default = [{x = 1024; y = 768;} {x = 800; y = 600;} {x = 640; y = 480;}]; - description = " - The screen resolutions for the X server. The first element is the default resolution. - "; - }; - - videoDriver = mkOption { - default = "vesa"; - example = "i810"; - description = " - The name of the video driver for your graphics card. - "; - }; - - driSupport = mkOption { - default = false; - description = " - Whether to enable accelerated OpenGL rendering through the - Direct Rendering Interface (DRI). - "; - }; - - sessionType = mkOption { - default = "gnome"; - example = "xterm"; - description = " - The kind of session to start after login. Current possibilies - are kde (which starts KDE), - gnome (which starts - gnome-terminal) and xterm - (which starts xterm). - "; - }; - - windowManager = mkOption { - default = ""; - description = " - This option selects the window manager. Available values are - twm (extremely primitive), - metacity, xmonad - and compiz. If - left empty, the determines the - window manager, e.g., Metacity for Gnome, and - kwm for KDE. - "; - }; - - renderingFlag = mkOption { - default = ""; - example = "--indirect-rendering"; - description = " - Possibly pass --indierct-rendering to Compiz. - "; - }; - - sessionStarter = mkOption { - example = "${pkgs.xterm}/bin/xterm -ls"; - description = " - The command executed after login and after the window manager - has been started. Used if - is empty. - "; - }; - - startSSHAgent = mkOption { - default = true; - description = " - Whether to start the SSH agent when you log in. The SSH agent - remembers private keys for you so that you don't have to type in - passphrases every time you make an SSH connection. Use - ssh-add to add a key to the agent. - "; - }; - - slim = { - - theme = mkOption { - default = null; - example = pkgs.fetchurl { - url = http://download.berlios.de/slim/slim-wave.tar.gz; - sha256 = "0ndr419i5myzcylvxb89m9grl2xyq6fbnyc3lkd711mzlmnnfxdy"; - }; - description = " - The theme for the SLiM login manager. If not specified, SLiM's - default theme is used. See for a - collection of themes. - "; - }; - - defaultUser = mkOption { - default = ""; - example = "login"; - description = " - The default user to load. If you put a username here you - get it automatically loaded into the username field, and - the focus is placed on the password. - "; - }; - - hideCursor = mkOption { - default = false; - example = true; - description = " - Hide the mouse cursor on the login screen. - "; - }; - }; - - isClone = mkOption { - default = true; - example = false; - description = " - Whether to enable the X server clone mode for dual-head. - "; - }; - - synaptics = { - enable = mkOption { - default = false; - example = true; - description = " - Whether to replace mouse with touchpad. - "; - }; - dev = mkOption { - default = "/dev/input/event0"; - description = " - Event device for Synaptics touchpad. - "; - }; - minSpeed = mkOption { - default = "0.06"; - description = "Cursor speed factor for precision finger motion"; - }; - maxSpeed = mkOption { - default = "0.12"; - description = "Cursor speed factor for highest-speed finger motion"; - }; - }; - - layout = mkOption { - default = "us"; - description = " - Keyboard layout. - "; - }; - - xkbModel = mkOption { - default = "pc104"; - example = "presario"; - description = " - Keyboard model. - "; - }; - - xkbOptions = mkOption { - default = ""; - example = "grp:caps_toggle, grp_led:scroll"; - description = " - X keyboard options; layout switching goes here. - "; - }; - - useInternalAGPGART = mkOption { - default = ""; - example = "no"; - description = " - Just the wrapper for an xorg.conf option. - "; - }; - - extraDeviceConfig = mkOption { - default = ""; - example = "VideoRAM 131072"; - description = " - Just anything to add into Device section. - "; - }; - - extraMonitorSettings = mkOption { - default = ""; - example = "HorizSync 28-49"; - description = " - Just anything to add into Monitor section. - "; - }; - - extraDisplaySettings = mkOption { - default = ""; - example = "Virtual 2048 2048"; - description = " - Just anything to add into Display subsection (located in Screen section). - "; - }; - - extraModules = mkOption { - default = ""; - example = " - SubSection \"extmod\" - EndSubsection - "; - description = " - Just anything to add into Modules section. - "; - }; - - serverLayoutOptions = mkOption { - default = ""; - example = " - Option \"AIGLX\" \"true\" - "; - description = " - Just anything to add into Monitor section. - "; - }; - - defaultDepth = mkOption { - default = 24; - example = 8; - description = " - Default colour depth. - "; - }; - - useXFS = mkOption { - default = false; - example = "unix/:7100"; - description = " - Way to access the X Font Server to use. - "; - }; - - tty = mkOption { - default = 7; - example = 9; - description = " - Virtual console for the X server. - "; - }; - - display = mkOption { - default = 0; - example = 1; - description = " - Display number for the X server. - "; - }; - - packageFun = mkOption { - default = pkgs.xorg; - merge = obsolete "option" backwardPkgsFunMerge; - description = "Obsolete: use 'package' instead."; - }; - - package = mkOption { - default = config.services.xserver.packageFun; # pkgs.xorg; - description = " - Alternative X.org package to use. For - example, you can replace individual drivers. - "; - }; - - virtualScreen = mkOption { - default = null; - example = { - x=2048; - y=2048; - }; - description = " - Virtual screen size for Xrandr - "; - }; - }; - ejabberd = { enable = mkOption { default = false; @@ -2844,6 +2534,7 @@ in (import ../upstart-jobs/hal.nix) (import ../upstart-jobs/gpm.nix) (import ../upstart-jobs/nagios/default.nix) + (import ../upstart-jobs/xserver.nix) (import ../upstart-jobs/zabbix-agent.nix) (import ../upstart-jobs/zabbix-server.nix) (import ../upstart-jobs/disnix.nix) diff --git a/system/system.nix b/system/system.nix index f0b1fe849f09..6816f582edf0 100644 --- a/system/system.nix +++ b/system/system.nix @@ -198,7 +198,6 @@ rec { setuidPrograms = config.security.setuidPrograms ++ config.security.extraSetuidPrograms ++ - pkgs.lib.optional (config.services.xserver.sessionType == "kde") "kcheckpass" ++ map ( x : x.program ) config.security.setuidOwners; bash = pkgs.bashInteractive; diff --git a/upstart-jobs/default.nix b/upstart-jobs/default.nix index f2f0c90a6024..f0862aaddec9 100644 --- a/upstart-jobs/default.nix +++ b/upstart-jobs/default.nix @@ -275,13 +275,6 @@ let inherit (pkgs) makePortmap; }) - # X server. - ++ optional config.services.xserver.enable - (import ../upstart-jobs/xserver.nix { - inherit config pkgs kernelPackages; - fontDirectories = import ../system/fonts.nix {inherit pkgs config;}; - }) - # Apache httpd. ++ optional (config.services.httpd.enable && !config.services.httpd.experimental) (import ../upstart-jobs/httpd.nix { @@ -495,4 +488,4 @@ in { name = if job ? jobName then job.jobName else job.name; value = job; } ) jobs); }; -} \ No newline at end of file +} diff --git a/upstart-jobs/xserver.nix b/upstart-jobs/xserver.nix index 157effcb530e..dd8d6bed4793 100644 --- a/upstart-jobs/xserver.nix +++ b/upstart-jobs/xserver.nix @@ -1,12 +1,325 @@ -{ config, pkgs, kernelPackages +{config, pkgs, ...}: +# TODO: this file need some make-up (Nicolas Pierron) -, # List of font directories. - fontDirectories -}: +let + kernelPackages = config.boot.kernelPackages; + # List of font directories. + fontDirectories = import ../system/fonts.nix {inherit pkgs config;}; + + inherit (pkgs.lib) mkOption; + + options = { + services = { + + xserver = { + + enable = mkOption { + default = false; + description = " + Whether to enable the X server. + "; + }; + + autorun = mkOption { + default = true; + description = " + Switch to false to create upstart-job and configuration, + but not run it automatically + "; + }; + + exportConfiguration = mkOption { + default = false; + description = " + Create /etc/X11/xorg.conf and a file with environment + variables + "; + }; + + tcpEnable = mkOption { + default = false; + description = " + Whether to enable TCP socket for the X server. + "; + }; + + resolutions = mkOption { + default = [{x = 1024; y = 768;} {x = 800; y = 600;} {x = 640; y = 480;}]; + description = " + The screen resolutions for the X server. The first element is the default resolution. + "; + }; + + videoDriver = mkOption { + default = "vesa"; + example = "i810"; + description = " + The name of the video driver for your graphics card. + "; + }; + + driSupport = mkOption { + default = false; + description = " + Whether to enable accelerated OpenGL rendering through the + Direct Rendering Interface (DRI). + "; + }; + + sessionType = mkOption { + default = "gnome"; + example = "xterm"; + description = " + The kind of session to start after login. Current possibilies + are kde (which starts KDE), + gnome (which starts + gnome-terminal) and xterm + (which starts xterm). + "; + }; + + windowManager = mkOption { + default = ""; + description = " + This option selects the window manager. Available values are + twm (extremely primitive), + metacity, xmonad + and compiz. If + left empty, the determines the + window manager, e.g., Metacity for Gnome, and + kwm for KDE. + "; + }; + + renderingFlag = mkOption { + default = ""; + example = "--indirect-rendering"; + description = " + Possibly pass --indierct-rendering to Compiz. + "; + }; + + sessionStarter = mkOption { + example = "${pkgs.xterm}/bin/xterm -ls"; + description = " + The command executed after login and after the window manager + has been started. Used if + is empty. + "; + }; + + startSSHAgent = mkOption { + default = true; + description = " + Whether to start the SSH agent when you log in. The SSH agent + remembers private keys for you so that you don't have to type in + passphrases every time you make an SSH connection. Use + ssh-add to add a key to the agent. + "; + }; + + slim = { + + theme = mkOption { + default = null; + example = pkgs.fetchurl { + url = http://download.berlios.de/slim/slim-wave.tar.gz; + sha256 = "0ndr419i5myzcylvxb89m9grl2xyq6fbnyc3lkd711mzlmnnfxdy"; + }; + description = " + The theme for the SLiM login manager. If not specified, SLiM's + default theme is used. See for a + collection of themes. + "; + }; + + defaultUser = mkOption { + default = ""; + example = "login"; + description = " + The default user to load. If you put a username here you + get it automatically loaded into the username field, and + the focus is placed on the password. + "; + }; + + hideCursor = mkOption { + default = false; + example = true; + description = " + Hide the mouse cursor on the login screen. + "; + }; + }; + + isClone = mkOption { + default = true; + example = false; + description = " + Whether to enable the X server clone mode for dual-head. + "; + }; + + synaptics = { + enable = mkOption { + default = false; + example = true; + description = " + Whether to replace mouse with touchpad. + "; + }; + dev = mkOption { + default = "/dev/input/event0"; + description = " + Event device for Synaptics touchpad. + "; + }; + minSpeed = mkOption { + default = "0.06"; + description = "Cursor speed factor for precision finger motion"; + }; + maxSpeed = mkOption { + default = "0.12"; + description = "Cursor speed factor for highest-speed finger motion"; + }; + }; + + layout = mkOption { + default = "us"; + description = " + Keyboard layout. + "; + }; + + xkbModel = mkOption { + default = "pc104"; + example = "presario"; + description = " + Keyboard model. + "; + }; + + xkbOptions = mkOption { + default = ""; + example = "grp:caps_toggle, grp_led:scroll"; + description = " + X keyboard options; layout switching goes here. + "; + }; + + useInternalAGPGART = mkOption { + default = ""; + example = "no"; + description = " + Just the wrapper for an xorg.conf option. + "; + }; + + extraDeviceConfig = mkOption { + default = ""; + example = "VideoRAM 131072"; + description = " + Just anything to add into Device section. + "; + }; + + extraMonitorSettings = mkOption { + default = ""; + example = "HorizSync 28-49"; + description = " + Just anything to add into Monitor section. + "; + }; + + extraDisplaySettings = mkOption { + default = ""; + example = "Virtual 2048 2048"; + description = " + Just anything to add into Display subsection (located in Screen section). + "; + }; + + extraModules = mkOption { + default = ""; + example = " + SubSection \"extmod\" + EndSubsection + "; + description = " + Just anything to add into Modules section. + "; + }; + + serverLayoutOptions = mkOption { + default = ""; + example = " + Option \"AIGLX\" \"true\" + "; + description = " + Just anything to add into Monitor section. + "; + }; + + defaultDepth = mkOption { + default = 24; + example = 8; + description = " + Default colour depth. + "; + }; + + useXFS = mkOption { + default = false; + example = "unix/:7100"; + description = " + Way to access the X Font Server to use. + "; + }; + + tty = mkOption { + default = 7; + example = 9; + description = " + Virtual console for the X server. + "; + }; + + display = mkOption { + default = 0; + example = 1; + description = " + Display number for the X server. + "; + }; + + package = mkOption { + default = pkgs.xorg; + description = " + Alternative X.org package to use. For + example, you can replace individual drivers. + "; + }; + + virtualScreen = mkOption { + default = null; + example = { + x=2048; + y=2048; + }; + description = " + Virtual screen size for Xrandr + "; + }; + }; + + }; + }; +in let - inherit (pkgs.lib) optional isInList getAttr; + inherit (pkgs.lib) optional isInList getAttr mkIf; # Abbreviations. cfg = config.services.xserver; xorg = cfg.package; @@ -234,7 +547,7 @@ let env LD_LIBRARY_PATH=${xorg.libX11}/lib:${xorg.libXext}/lib:/usr/lib/ # !!! Hack: load the schemas for Metacity. GCONF_CONFIG_SOURCE=xml::~/.gconf ${gnome.GConf}/bin/gconftool-2 \ - --makefile-install-rule ${gnome.metacity}/etc/gconf/schemas/*.schemas + --makefile-install-rule ${gnome.metacity}/etc/gconf/schemas/*.schemas # */ ${gnome.metacity}/bin/metacity & '' @@ -245,7 +558,7 @@ let else if windowManager == "compiz" then '' # !!! Hack: load the schemas for Compiz. GCONF_CONFIG_SOURCE=xml::~/.gconf ${gnome.GConf}/bin/gconftool-2 \ - --makefile-install-rule ${pkgs.compiz}/etc/gconf/schemas/*.schemas + --makefile-install-rule ${pkgs.compiz}/etc/gconf/schemas/*.schemas # */ # !!! Hack: turn on most Compiz modules. ${gnome.GConf}/bin/gconftool-2 -t list --list-type=string \ @@ -295,12 +608,12 @@ let # terminal of the kind indicated by sessionCmd. # !!! yes, this means that you 'log out' by killing the X server. while ${sessionCmd}; do - sleep 1 + sleep 1 done ''} - ''; # */ + ''; xserverArgs = [ @@ -343,10 +656,9 @@ let nvidiaDrivers = (config.boot.kernelPackages pkgs).nvidiaDrivers; -in + oldJob = rec { + # Warning the indentation is wrong since here in order to don't produce noise in diffs. - -rec { name = "xserver"; @@ -433,4 +745,54 @@ rec { exec ${pkgs.slim}/bin/slim ''; +}; + +in + +mkIf cfg.enable { + require = [ + options + + # services.extraJobs + (import ../upstart-jobs/default.nix) + + # environment.etc + (import ../etc/default.nix) + + # boot.extraModulePackages + # security.extraSetuidPrograms + # environment.extraPackages + ]; + + boot = { + extraModulePackages = mkIf (cfg.videoDriver == "nvidia") [ + kernelPackages.nvidiaDrivers + ]; + }; + + security = { + extraSetuidPrograms = mkIf (cfg.sessionType == "kde") [ + "kcheckpass" + ]; + }; + + environment = { + etc = [ + { source = ../etc/pam.d/kde; + target = "pam.d/kde"; + } + { source = ../etc/pam.d/slim; + target = "pam.d/slim"; + } + ] ++ oldJob.extraEtc; + + extraPackages = + oldJob.extraPath; + }; + + services = { + extraJobs = [{ + inherit (oldJob) name job; + }]; + }; }