<libosinfo version="0.0.1">
  <!-- JEOS PROFILE -->
  <install-script id='http://fedoraproject.org/scripts/fedora/jeos'>
    <profile>jeos</profile>
    <expected-filename>fedora.ks</expected-filename>
    <config>
      <param name="admin-password" policy="optional"/>
      <param name="l10n-keyboard" policy="optional" value-map="http://libosinfo.fedorahosted.org/x11-keyboard"/>
      <param name="l10n-language" policy="optional"/>
      <param name="l10n-timezone" policy="optional"/>
      <param name="target-disk" policy="optional"/>
      <param name="script-disk" policy="required"/>
    </config>
    <template>
      <xsl:stylesheet
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0">

        <xsl:output method="text"/>

        <xsl:template name="target-disk">
          <xsl:choose>
            <xsl:when test="config/target-disk != ''">
              <xsl:value-of select="config/target-disk"/>
            </xsl:when>
            <xsl:when test="os/version &gt; 9">
              <!-- virtio -->
              <xsl:text>/dev/vda</xsl:text>
            </xsl:when>
            <xsl:when test="os/version &gt; 6">
              <!-- libata IDE -->
              <xsl:text>/dev/sda</xsl:text>
            </xsl:when>
            <xsl:otherwise>
              <!-- IDE -->
              <xsl:text>/dev/hda</xsl:text>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:template>

        <xsl:template name="script-disk">
          <xsl:variable name="script-disk">
            <xsl:value-of select="config/script-disk"/>
          </xsl:variable>
          <xsl:value-of select="substring-after($script-disk, '/dev/')"/>
        </xsl:template>

	<xsl:template name="rootfs">
	  <xsl:choose>
	    <xsl:when test="os/version &gt; 10">
	      <xsl:text>ext4</xsl:text>
	    </xsl:when>
	    <xsl:otherwise>
	      <xsl:text>ext3</xsl:text>
	    </xsl:otherwise>
	  </xsl:choose>
	</xsl:template>

	<xsl:template name="bootfs">
	  <xsl:choose>
	    <xsl:when test="os/version &gt; 11">
	      <xsl:text>ext4</xsl:text>
	    </xsl:when>
	    <xsl:otherwise>
	      <xsl:text>ext3</xsl:text>
	    </xsl:otherwise>
	  </xsl:choose>
	</xsl:template>

	<xsl:template name="keyboard">
	  <xsl:choose>
	    <xsl:when test="os/version &gt; 17">
              <xsl:value-of select="config/l10n-keyboard"/>
	    </xsl:when>
	    <xsl:otherwise>
              <!-- FIXME: F17 and older required keyboard layout to be a console
                   layout so we'll need a different datamap for those but
                   currently we only support one datamap per config param per
                   script. -->
	      <xsl:text>us</xsl:text>
	    </xsl:otherwise>
	  </xsl:choose>
	</xsl:template>

        <xsl:template match="/command-line">
            <xsl:text>ks=hd:</xsl:text>
            <xsl:call-template name="script-disk"/>
            <xsl:text>:/</xsl:text>
            <xsl:value-of select="script/expected-filename"/>
        </xsl:template>

        <xsl:template match="/install-script-config">
# Install script for <xsl:value-of select="os/short-id"/> profile <xsl:value-of select="script/profile"/>
install
cdrom
text
keyboard '<xsl:call-template name="keyboard"/>'
lang <xsl:value-of select="config/l10n-language"/>
<xsl:if test="os/version &lt; 7">
langsupport --default <xsl:value-of select="config/l10n-language"/> <xsl:value-of select="config/l10n-language"/>
mouse generic3ps/2 --device psaux
</xsl:if>
skipx
network --device eth0 --bootproto dhcp
rootpw <xsl:value-of select="config/admin-password"/>
firewall --disabled
authconfig --enableshadow --enablemd5
<xsl:if test="os/version &gt; 1">
selinux --enforcing
</xsl:if>
timezone --utc <xsl:value-of select="config/l10n-timezone"/>
bootloader --location=mbr
zerombr <xsl:if test="os/version &lt; 14">yes</xsl:if>

clearpart --all --drives=<xsl:call-template name="target-disk"/>

<xsl:if test="os/version &gt; 15">
part biosboot --fstype=biosboot --size=1
</xsl:if>
part /boot --fstype <xsl:call-template name="bootfs"/> --size=200 --ondisk=<xsl:call-template name="target-disk"/>
part pv.2 --size=1 --grow --ondisk=<xsl:call-template name="target-disk"/>
volgroup VolGroup00 --pesize=32768 pv.2
logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=768 --grow --maxsize=1536
logvol / --fstype <xsl:call-template name="rootfs"/> --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
reboot

%packages
<xsl:choose>
  <xsl:when test="os/version &lt; 18">
@base
  </xsl:when>
  <xsl:otherwise>
@standard
  </xsl:otherwise>
</xsl:choose>
@core
<xsl:if test="os/version &gt; 6">
@hardware-support
</xsl:if>

%end
	</xsl:template>
      </xsl:stylesheet>
    </template>
  </install-script>

  <!-- DESKTOP PROFILE -->
  <install-script id='http://fedoraproject.org/scripts/fedora/desktop'>
    <profile>desktop</profile>
    <expected-filename>fedora.ks</expected-filename>
    <config>
        <param name="l10n-keyboard" policy="optional" value-map="http://libosinfo.fedorahosted.org/x11-keyboard"/>
        <param name="l10n-language" policy="optional"/>
        <param name="l10n-timezone" policy="optional"/>
        <param name="hostname" policy="optional"/>
        <param name="user-login" policy="required"/>
        <param name="user-password" policy="required"/>
        <param name="admin-password" policy="required"/>
        <param name="avatar-location" policy="optional"/>
        <param name="avatar-disk" policy="optional"/>
        <param name="target-disk" policy="optional"/>
        <param name="script-disk" policy="required"/>
    </config>
    <avatar-format>
      <mime-type>image/png</mime-type>
    </avatar-format>
    <template>
      <xsl:stylesheet
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0">

        <xsl:output method="text"/>

        <xsl:template name="target-disk">
          <xsl:choose>
            <xsl:when test="config/target-disk != ''">
              <xsl:value-of select="config/target-disk"/>
            </xsl:when>
            <xsl:when test="os/version &gt; 9">
              <!-- virtio -->
              <xsl:text>/dev/vda</xsl:text>
            </xsl:when>
            <xsl:when test="os/version &gt; 6">
              <!-- libata IDE -->
              <xsl:text>/dev/sda</xsl:text>
            </xsl:when>
            <xsl:otherwise>
              <!-- IDE -->
              <xsl:text>/dev/hda</xsl:text>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:template>

        <xsl:template name="script-disk">
          <xsl:variable name="script-disk">
            <xsl:value-of select="config/script-disk"/>
          </xsl:variable>
          <xsl:value-of select="substring-after($script-disk, '/dev/')"/>
        </xsl:template>

	<xsl:template name="rootfs">
	  <xsl:choose>
	    <xsl:when test="os/version &gt; 10">
	      <xsl:text>ext4</xsl:text>
	    </xsl:when>
	    <xsl:otherwise>
	      <xsl:text>ext3</xsl:text>
	    </xsl:otherwise>
	  </xsl:choose>
	</xsl:template>

	<xsl:template name="bootfs">
	  <xsl:choose>
	    <xsl:when test="os/version &gt; 11">
	      <xsl:text>ext4</xsl:text>
	    </xsl:when>
	    <xsl:otherwise>
	      <xsl:text>ext3</xsl:text>
	    </xsl:otherwise>
	  </xsl:choose>
	</xsl:template>

	<xsl:template name="keyboard">
	  <xsl:choose>
	    <xsl:when test="os/version &gt; 17">
              <xsl:value-of select="config/l10n-keyboard"/>
	    </xsl:when>
	    <xsl:otherwise>
              <!-- FIXME: F17 and older required keyboard layout to be a console
                   layout so we'll need a different datamap for those but
                   currently we only support one datamap per config param per
                   script. -->
	      <xsl:text>us</xsl:text>
	    </xsl:otherwise>
	  </xsl:choose>
	</xsl:template>

        <xsl:template match="/command-line">
            <xsl:text>ks=hd:</xsl:text>
            <xsl:call-template name="script-disk"/>
            <xsl:text>:/</xsl:text>
            <xsl:value-of select="script/expected-filename"/>
        </xsl:template>

        <xsl:template match="/install-script-config">
# Install script for <xsl:value-of select="os/short-id"/> profile <xsl:value-of select="script/profile"/>
install
cdrom
keyboard '<xsl:call-template name="keyboard"/>'
lang <xsl:value-of select="config/l10n-language"/>
network --onboot yes --device eth0 --bootproto dhcp --noipv6 --hostname=<xsl:value-of select="config/hostname"/>
rootpw dummyPa55w0rd # Actual password set (or unset) in %post below
firewall --disabled
authconfig --enableshadow --enablemd5
timezone --utc <xsl:value-of select="config/l10n-timezone"/>
bootloader --location=mbr
zerombr

clearpart --all --drives=<xsl:call-template name="target-disk"/>

firstboot --disable

part biosboot --fstype=biosboot --size=1
part /boot --fstype <xsl:call-template name="bootfs"/> --recommended --ondisk=<xsl:call-template name="target-disk"/>
part pv.2 --size=1 --grow --ondisk=<xsl:call-template name="target-disk"/>
volgroup VolGroup00 --pesize=32768 pv.2
logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=768 --grow --maxsize=1536
logvol / --fstype <xsl:call-template name="rootfs"/> --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
reboot

%packages
<xsl:choose>
  <xsl:when test="os/version &lt; 18">
@base
@graphical-internet
@sound-and-video
  </xsl:when>
  <xsl:otherwise>
@standard
@epiphany
@firefox
@multimedia
  </xsl:otherwise>
</xsl:choose>
@core
@hardware-support
@base-x
@gnome-desktop

# QXL driver and SPICE vdagent
xorg-x11-drv-qxl
spice-vdagent

%end

%post --erroronfail

useradd -G wheel <xsl:value-of select="config/user-login"/> # Add user
if test -z <xsl:value-of select="config/user-password"/>; then
    passwd -d <xsl:value-of select="config/user-login"/> # Make user account passwordless
else
    echo <xsl:value-of select="config/user-password"/> |passwd --stdin <xsl:value-of select="config/user-login"/>
fi

if test -z <xsl:value-of select="config/admin-password"/>; then
    passwd -d root # Make root account passwordless
else
    echo <xsl:value-of select="config/admin-password"/> |passwd --stdin root
fi

# Set user avatar
if test -n <xsl:value-of select="config/avatar-location"/>; then
mkdir /mnt/unattended-media
mount <xsl:value-of select='config/avatar-disk'/> /mnt/unattended-media
cp /mnt/unattended-media<xsl:value-of select="config/avatar-location"/> /var/lib/AccountsService/icons/<xsl:value-of select="config/user-login"/>
umount /mnt/unattended-media
fi

echo "
[User]
Language=
XSession=
Icon=/var/lib/AccountsService/icons/<xsl:value-of select="config/user-login"/>
" >> /var/lib/AccountsService/users/<xsl:value-of select="config/user-login"/>

# Enable autologin
echo "[daemon]
AutomaticLoginEnable=true
AutomaticLogin=<xsl:value-of select="config/user-login"/>

[security]

[xdmcp]

[greeter]

[chooser]

[debug]
" > /etc/gdm/custom.conf

%end
	</xsl:template>
      </xsl:stylesheet>
    </template>
  </install-script>

</libosinfo>
