diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-10-10 13:28:20 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-10-10 13:28:20 +0200 |
commit | 5c1f8cbc70cd5e6867ef6a2a06d27a40daa07010 (patch) | |
tree | a6c0f605be6de3f372ae69905b331f9f75452da7 /nixos/modules/services/x11/desktop-managers | |
parent | 6070bc016bd2fd945b04347e25cfd3738622d2ac (diff) | |
download | nixlib-5c1f8cbc70cd5e6867ef6a2a06d27a40daa07010.tar nixlib-5c1f8cbc70cd5e6867ef6a2a06d27a40daa07010.tar.gz nixlib-5c1f8cbc70cd5e6867ef6a2a06d27a40daa07010.tar.bz2 nixlib-5c1f8cbc70cd5e6867ef6a2a06d27a40daa07010.tar.lz nixlib-5c1f8cbc70cd5e6867ef6a2a06d27a40daa07010.tar.xz nixlib-5c1f8cbc70cd5e6867ef6a2a06d27a40daa07010.tar.zst nixlib-5c1f8cbc70cd5e6867ef6a2a06d27a40daa07010.zip |
Move all of NixOS to nixos/ in preparation of the repository merge
Diffstat (limited to 'nixos/modules/services/x11/desktop-managers')
7 files changed, 449 insertions, 0 deletions
diff --git a/nixos/modules/services/x11/desktop-managers/default.nix b/nixos/modules/services/x11/desktop-managers/default.nix new file mode 100644 index 000000000000..0fea74d5ba73 --- /dev/null +++ b/nixos/modules/services/x11/desktop-managers/default.nix @@ -0,0 +1,75 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + xcfg = config.services.xserver; + cfg = xcfg.desktopManager; + + # Whether desktop manager `d' is capable of setting a background. + # If it isn't, the `feh' program is used as a fallback. + needBGCond = d: ! (d ? bgSupport && d.bgSupport); + +in + +{ + # Note: the order in which desktop manager modules are imported here + # determines the default: later modules (if enabled) are preferred. + # E.g., if KDE is enabled, it supersedes xterm. + imports = [ ./none.nix ./xterm.nix ./xfce.nix ./gnome.nix ./kde4.nix ./e17.nix ]; + + options = { + + services.xserver.desktopManager = { + + session = mkOption { + default = []; + example = singleton + { name = "kde"; + bgSupport = true; + start = "..."; + }; + description = " + Internal option used to add some common line to desktop manager + scripts before forwarding the value to the + <varname>displayManager</varname>. + "; + apply = list: { + list = map (d: d // { + manage = "desktop"; + start = d.start + + optionalString (needBGCond d) '' + if test -e $HOME/.background-image; then + ${pkgs.feh}/bin/feh --bg-scale $HOME/.background-image + fi + ''; + }) list; + needBGPackages = [] != filter needBGCond list; + }; + }; + + default = mkOption { + default = ""; + example = "none"; + description = "Default desktop manager loaded if none have been chosen."; + merge = mergeOneOption; + apply = defaultDM: + if defaultDM == "" && cfg.session.list != [] then + (head cfg.session.list).name + else if any (w: w.name == defaultDM) cfg.session.list then + defaultDM + else + throw "Default desktop manager ($(defaultDM)) not found."; + }; + + }; + + }; + + config = { + services.xserver.displayManager.session = cfg.session.list; + environment.x11Packages = + mkIf cfg.session.needBGPackages [ pkgs.feh ]; + }; +} diff --git a/nixos/modules/services/x11/desktop-managers/e17.nix b/nixos/modules/services/x11/desktop-managers/e17.nix new file mode 100644 index 000000000000..3d91617c62aa --- /dev/null +++ b/nixos/modules/services/x11/desktop-managers/e17.nix @@ -0,0 +1,30 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + xcfg = config.services.xserver; + cfg = xcfg.desktopManager.e17; + +in + +{ + options = { + + services.xserver.desktopManager.e17.enable = mkOption { + default = false; + example = true; + description = "Enable support for the E17 desktop environment."; + }; + + }; + + + config = mkIf (xcfg.enable && cfg.enable) { + + services.dbus.packages = [ pkgs.e17.ethumb ]; + + }; + +} diff --git a/nixos/modules/services/x11/desktop-managers/gnome.nix b/nixos/modules/services/x11/desktop-managers/gnome.nix new file mode 100644 index 000000000000..b0212446ad36 --- /dev/null +++ b/nixos/modules/services/x11/desktop-managers/gnome.nix @@ -0,0 +1,42 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + cfg = config.services.xserver.desktopManager.gnome; + gnome = pkgs.gnome; + +in + +{ + + options = { + + services.xserver.desktopManager.gnome.enable = mkOption { + default = false; + example = true; + description = "Enable a gnome terminal as a desktop manager."; + }; + + }; + + config = mkIf cfg.enable { + + services.xserver.desktopManager.session = singleton + { name = "gnome"; + start = '' + ${gnome.gnometerminal}/bin/gnome-terminal -ls & + waitPID=$! + ''; + }; + + environment.systemPackages = + [ gnome.gnometerminal + gnome.GConf + gnome.gconfeditor + ]; + + }; + +} diff --git a/nixos/modules/services/x11/desktop-managers/kde4.nix b/nixos/modules/services/x11/desktop-managers/kde4.nix new file mode 100644 index 000000000000..c76acfbcd4e2 --- /dev/null +++ b/nixos/modules/services/x11/desktop-managers/kde4.nix @@ -0,0 +1,169 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + xcfg = config.services.xserver; + cfg = xcfg.desktopManager.kde4; + xorg = pkgs.xorg; + + # Disable Nepomuk and Strigi by default. As of KDE 4.7, they don't + # really work very well (e.g. searching files often fails to find + # files), segfault sometimes and consume significant resources. + # They can be re-enabled in the KDE System Settings under "Desktop + # Search". + nepomukConfig = pkgs.writeTextFile + { name = "nepomuk-config"; + destination = "/share/config/nepomukserverrc"; + text = + '' + [Basic Settings] + Start Nepomuk=false + + [Service-nepomukstrigiservice] + autostart=false + ''; + }; + + phononBackends = { + gstreamer = [ + pkgs.phonon_backend_gstreamer + pkgs.gst_all.gstPluginsBase + pkgs.gst_all.gstPluginsGood + pkgs.gst_all.gstPluginsUgly + pkgs.gst_all.gstPluginsBad + pkgs.gst_all.gstFfmpeg # for mp3 playback + pkgs.gst_all.gstreamer # needed? + ]; + + vlc = [pkgs.phonon_backend_vlc]; + }; + + phononBackendPackages = flip concatMap cfg.phononBackends + (name: attrByPath [name] (throw "unknown phonon backend `${name}'") phononBackends); + + wantsUdisks2 = pkgs.kde4.kdelibs.wantsUdisks2 or false; +in + +{ + options = { + + services.xserver.desktopManager.kde4 = { + enable = mkOption { + default = false; + example = true; + description = "Enable the KDE 4 desktop environment."; + }; + + phononBackends = mkOption { + type = types.listOf types.string; + default = ["gstreamer"]; + example = ["gstreamer" "vlc"]; + description = "Which phonon multimedia backend kde should use"; + }; + }; + + environment.kdePackages = mkOption { + default = []; + example = "[ pkgs.kde4.kdesdk ]"; + type = types.listOf types.package; + description = "This option is obsolete. Please use <option>environment.systemPackages</option> instead."; + }; + + }; + + + config = mkIf (xcfg.enable && cfg.enable) { + + # If KDE 4 is enabled, make it the default desktop manager (unless + # overridden by the user's configuration). + # !!! doesn't work yet ("Multiple definitions. Only one is allowed + # for this option.") + # services.xserver.desktopManager.default = mkOverrideTemplate 900 "kde4"; + + services.xserver.desktopManager.session = singleton + { name = "kde4"; + bgSupport = true; + start = + '' + # The KDE icon cache is supposed to update itself + # automatically, but it uses the timestamp on the icon + # theme directory as a trigger. Since in Nix the + # timestamp is always the same, this doesn't work. So as + # a workaround, nuke the icon cache on login. This isn't + # perfect, since it may require logging out after + # installing new applications to update the cache. + # See http://lists-archives.org/kde-devel/26175-what-when-will-icon-cache-refresh.html + rm -fv $HOME/.kde/cache-*/icon-cache.kcache + + # Qt writes a weird ‘libraryPath’ line to + # ~/.config/Trolltech.conf that causes the KDE plugin + # paths of previous KDE invocations to be searched. + # Obviously using mismatching KDE libraries is potentially + # disastrous, so here we nuke references to the Nix store + # in Trolltech.conf. A better solution would be to stop + # Qt from doing this wackiness in the first place. + if [ -e $HOME/.config/Trolltech.conf ]; then + sed -e '/nix\\store\|nix\/store/ d' -i $HOME/.config/Trolltech.conf + fi + + # Start KDE. + exec ${pkgs.kde4.kdebase_workspace}/bin/startkde + ''; + }; + + security.setuidOwners = singleton + { program = "kcheckpass"; + source = "${pkgs.kde4.kdebase_workspace}/lib/kde4/libexec/kcheckpass"; + owner = "root"; + group = "root"; + setuid = true; + }; + + environment.systemPackages = + [ pkgs.kde4.kdelibs + + pkgs.kde4.kde_baseapps # Splitted kdebase + pkgs.kde4.kde_workspace + pkgs.kde4.kde_runtime + pkgs.kde4.konsole + pkgs.kde4.kate + + pkgs.kde4.kde_wallpapers # contains kdm's default background + pkgs.kde4.oxygen_icons + pkgs.virtuoso # to enable Nepomuk to find Virtuoso + + # Starts KDE's Polkit authentication agent. + pkgs.kde4.polkit_kde_agent + + # Miscellaneous runtime dependencies. + pkgs.kde4.qt4 # needed for qdbus + pkgs.shared_mime_info + xorg.xmessage # so that startkde can show error messages + xorg.xset # used by startkde, non-essential + xorg.xauth # used by kdesu + pkgs.shared_desktop_ontologies # used by nepomuk + pkgs.strigi # used by nepomuk + pkgs.mysql # used by akonadi + ] + ++ [ nepomukConfig ] ++ phononBackendPackages + ++ config.environment.kdePackages; + + environment.pathsToLink = [ "/share" ]; + + environment.etc = singleton + { source = "${pkgs.xkeyboard_config}/etc/X11/xkb"; + target = "X11/xkb"; + }; + + # Enable helpful DBus services. + services.udisks.enable = ! wantsUdisks2; + services.udisks2.enable = wantsUdisks2; + services.upower.enable = config.powerManagement.enable; + + security.pam.services = [ { name = "kde"; allowNullPassword = true; startSession = true; } ]; + + }; + +} diff --git a/nixos/modules/services/x11/desktop-managers/none.nix b/nixos/modules/services/x11/desktop-managers/none.nix new file mode 100644 index 000000000000..af7a376ae029 --- /dev/null +++ b/nixos/modules/services/x11/desktop-managers/none.nix @@ -0,0 +1,7 @@ +{ + services.xserver.desktopManager.session = + [ { name = "none"; + start = ""; + } + ]; +} diff --git a/nixos/modules/services/x11/desktop-managers/xfce.nix b/nixos/modules/services/x11/desktop-managers/xfce.nix new file mode 100644 index 000000000000..f5d544ad0462 --- /dev/null +++ b/nixos/modules/services/x11/desktop-managers/xfce.nix @@ -0,0 +1,90 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + xcfg = config.services.xserver; + cfg = xcfg.desktopManager.xfce; + +in + +{ + options = { + + services.xserver.desktopManager.xfce.enable = mkOption { + default = false; + example = true; + description = "Enable the Xfce desktop environment."; + }; + + }; + + + config = mkIf (xcfg.enable && cfg.enable) { + + services.xserver.desktopManager.session = singleton + { name = "xfce"; + bgSupport = true; + start = + '' + # Set GTK_PATH so that GTK+ can find the theme engines. + export GTK_PATH=${config.system.path}/lib/gtk-2.0 + + # Set GTK_DATA_PREFIX so that GTK+ can find the Xfce themes. + export GTK_DATA_PREFIX=${config.system.path} + + # Necessary to get xfce4-mixer to find GST's ALSA plugin. + # Ugly. + export GST_PLUGIN_PATH=${config.system.path}/lib + + exec ${pkgs.stdenv.shell} ${pkgs.xfce.xinitrc} + ''; + }; + + environment.systemPackages = + [ pkgs.gtk # To get GTK+'s themes. + pkgs.hicolor_icon_theme + pkgs.tango-icon-theme + pkgs.shared_mime_info + pkgs.which # Needed by the xfce's xinitrc script. + pkgs.xfce.exo + pkgs.xfce.gtk_xfce_engine + pkgs.xfce.libxfcegui4 # For the icons. + pkgs.xfce.mousepad + pkgs.xfce.ristretto + pkgs.xfce.terminal + pkgs.xfce.thunar + pkgs.xfce.xfce4icontheme + pkgs.xfce.xfce4panel + pkgs.xfce.xfce4session + pkgs.xfce.xfce4settings + pkgs.xfce.xfce4mixer + pkgs.xfce.xfceutils + pkgs.xfce.xfconf + pkgs.xfce.xfdesktop + pkgs.xfce.xfwm4 + # This supplies some "abstract" icons such as + # "utilities-terminal" and "accessories-text-editor". + pkgs.gnome.gnomeicontheme + pkgs.desktop_file_utils + pkgs.xfce.libxfce4ui + pkgs.xfce.garcon + pkgs.xfce.thunar_volman + pkgs.xfce.gvfs + pkgs.xfce.xfce4_appfinder + ] + ++ optional config.powerManagement.enable pkgs.xfce.xfce4_power_manager; + + environment.pathsToLink = + [ "/share/xfce4" "/share/themes" "/share/mime" "/share/desktop-directories" "/share/gtksourceview-2.0" ]; + + environment.variables.GIO_EXTRA_MODULES = "${pkgs.xfce.gvfs}/lib/gio/modules"; + + # Enable helpful DBus services. + services.udisks2.enable = true; + services.upower.enable = config.powerManagement.enable; + + }; + +} diff --git a/nixos/modules/services/x11/desktop-managers/xterm.nix b/nixos/modules/services/x11/desktop-managers/xterm.nix new file mode 100644 index 000000000000..edc61c103ea9 --- /dev/null +++ b/nixos/modules/services/x11/desktop-managers/xterm.nix @@ -0,0 +1,36 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + cfg = config.services.xserver.desktopManager.xterm; + +in + +{ + options = { + + services.xserver.desktopManager.xterm.enable = mkOption { + default = true; + example = false; + description = "Enable a xterm terminal as a desktop manager."; + }; + + }; + + config = mkIf cfg.enable { + + services.xserver.desktopManager.session = singleton + { name = "xterm"; + start = '' + ${pkgs.xterm}/bin/xterm -ls & + waitPID=$! + ''; + }; + + environment.systemPackages = [ pkgs.xterm ]; + + }; + +} |