1# This module defines a NixOS installation CD that contains X11 and
2# KDE 4.
3
4{ config, lib, pkgs, ... }:
5
6with lib;
7
8{
9 imports = [ ./installation-cd-base.nix ../../profiles/graphical.nix ];
10
11 # Provide wicd for easy wireless configuration.
12 #networking.wicd.enable = true;
13
14 environment.systemPackages =
15 [ # Include gparted for partitioning disks.
16 pkgs.gparted
17
18 # Include some editors.
19 pkgs.vim
20 pkgs.bvi # binary editor
21 pkgs.joe
22 ];
23
24 # Provide networkmanager for easy wireless configuration.
25 networking.networkmanager.enable = true;
26 networking.wireless.enable = mkForce false;
27
28 # KDE complains if power management is disabled (to be precise, if
29 # there is no power management backend such as upower).
30 powerManagement.enable = true;
31
32 # Don't start the X server by default.
33 services.xserver.autorun = mkForce false;
34
35 # Auto-login as root.
36 services.xserver.displayManager.kdm.extraConfig =
37 ''
38 [X-*-Core]
39 AllowRootLogin=true
40 AutoLoginEnable=true
41 AutoLoginUser=root
42 AutoLoginPass=""
43 '';
44
45 # Custom kde-workspace adding some icons on the desktop
46
47 system.activationScripts.installerDesktop = let
48 openManual = pkgs.writeScript "nixos-manual.sh" ''
49 #!${pkgs.stdenv.shell}
50 cd ${config.system.build.manual.manual}/share/doc/nixos/
51 konqueror ./index.html
52 '';
53
54 desktopFile = pkgs.writeText "nixos-manual.desktop" ''
55 [Desktop Entry]
56 Version=1.0
57 Type=Application
58 Name=NixOS Manual
59 Exec=${openManual}
60 Icon=konqueror
61 '';
62
63 in ''
64 mkdir -p /root/Desktop
65 ln -sfT ${desktopFile} /root/Desktop/nixos-manual.desktop
66 ln -sfT ${pkgs.kde4.konsole}/share/applications/kde4/konsole.desktop /root/Desktop/konsole.desktop
67 ln -sfT ${pkgs.gparted}/share/applications/gparted.desktop /root/Desktop/gparted.desktop
68 '';
69
70 services.xserver.desktopManager.kde4.kdeWorkspacePackage = let
71 pkg = pkgs.kde4.kde_workspace;
72
73 plasmaInit = pkgs.writeText "00-defaultLayout.js" ''
74 loadTemplate("org.kde.plasma-desktop.defaultPanel")
75
76 for (var i = 0; i < screenCount; ++i) {
77 var desktop = new Activity
78 desktop.name = i18n("Desktop")
79 desktop.screen = i
80 desktop.wallpaperPlugin = 'image'
81 desktop.wallpaperMode = 'SingleImage'
82
83 var folderview = desktop.addWidget("folderview");
84 folderview.writeConfig("url", "desktop:/");
85
86 //Create more panels for other screens
87 if (i > 0){
88 var panel = new Panel
89 panel.screen = i
90 panel.location = 'bottom'
91 panel.height = screenGeometry(i).height > 1024 ? 35 : 27
92 var tasks = panel.addWidget("tasks")
93 tasks.writeConfig("showOnlyCurrentScreen", true);
94 }
95 }
96 '';
97
98 in
99 pkgs.stdenv.mkDerivation {
100 inherit (pkg) name meta;
101
102 buildCommand = ''
103 mkdir -p $out
104 cp -prf ${pkg}/* $out/
105 chmod a+w $out/share/apps/plasma-desktop/init
106 cp -f ${plasmaInit} $out/share/apps/plasma-desktop/init/00-defaultLayout.js
107 '';
108 };
109
110}