\documentclass{beamer}

\usepackage{fancyvrb}           % for \Verb

\title[GNU Guix]{A Brief Introduction to GNU Guix}

\author{David Thompson\\\texttt{davet@gnu.org}}
\date{\small{Codefest 2014\\Cambridge, MA}}

\begin{document}

\maketitle

\begin{frame}[plain]
  \begin{itemize}
  \item Introduction
  \item What is GNU Guix?
  \item Packages
  \item Operating Systems
  \item Demo
  \end{itemize}
\end{frame}

\begin{frame}{Who am I?}
  \begin{itemize}
  \item My name is David Thompson
  \item I am the Web Developer at the Free Software Foundation
  \item I am a contributor to GNU Guix and GNU Guile
  \end{itemize}
\end{frame}

\begin{frame}{What is Guix?}
  \begin{itemize}
  \item A purely functional package manager for the GNU
    system, and a distribution thereof
  \item Dependable, hackable, and liberating
  \item Based on Nix
  \item Written in Guile Scheme
  \end{itemize}
\end{frame}

\begin{frame}{What is Guix?}
  \begin{centering}
    \Huge{\textbf{Dependable}}
  \end{centering}

  \vspace{1cm}

  In addition to standard package management features, Guix supports
  transactional upgrades and roll-backs, unprivileged package
  management, per-user profiles, and garbage collection.
\end{frame}

\begin{frame}{What is Guix?}
  \begin{centering}
    \Huge{\textbf{Hackable}}
  \end{centering}

  \vspace{1cm}

  It provides Guile Scheme APIs, including high-level embedded
  domain-specific languages (EDSLs), to describe how packages are
  built and composed.
\end{frame}

\begin{frame}{What is Guix?}
  \begin{centering}
    \Huge{\textbf{Liberating}}
  \end{centering}

  \vspace{1cm}

  A user-land free software distribution for GNU/Linux comes as part
  of Guix.
\end{frame}

\begin{frame}{Packages}
  \begin{itemize}
  \item The package build and installation process is seen as a
    function, in the mathematical sense
  \item That function takes inputs, such as build scripts, a compiler,
    and libraries, and returns an installed package
  \item As a pure function, its result depends solely on its inputs
  \item Build processes are run in isolated environments, where only
    their explicit inputs are visible
  \end{itemize}
\end{frame}

\begin{frame}[fragile]{Packages}
  \scriptsize{\begin{semiverbatim}
(define hello
  (package
   (name "hello")
   (version "2.8")
   (source (origin
            (method url-fetch)
            (uri (string-append
                  "mirror://gnu/\textrm{...}/hello-" version
                  ".tar.gz"))
            (sha256 (base32 "0wqd\textrm{...}dz6"))))
   (build-system gnu-build-system)
   (synopsis "Hello, GNU world: An example GNU package")
   (description "Produce a friendly greeting.")
   (home-page "http://www.gnu.org/software/hello/")
   (license gpl3+)))
  \end{semiverbatim}}
\end{frame}

\begin{frame}[fragile]{Operating Systems}
  \scriptsize{\begin{semiverbatim}
(operating-system
 (host-name "codefest-2014")
 (timezone "America/New_York")
 (locale "en_US.UTF-8")
 (bootloader (grub-configuration (device "/dev/sda")))
 (file-systems
  (list (file-system (mount-point "/") (device "dummy") (type "dummy"))
        %binary-format-file-system))
 (users (list (user-account
               (name "dave")
               (group "users")
               (supplementary-groups '("wheel"))  ; allow use of sudo
               (password "P@ssw0rd")
               (comment "Guix is pretty neat")
               (home-directory "/home/dave"))))
 (issue "Hello, Codefest 2014!")
 (services (cons* (slim-service #:auto-login? #t #:default-user "dave")
                  (static-networking-service "eth0" "10.0.2.10"
                                             #:gateway "10.0.2.2")
                  (avahi-service)
                  (dbus-service (list avahi))
                  %base-services))
 (packages (cons* emacs xterm avahi %base-packages)))
  \end{semiverbatim}}
\end{frame}

\begin{frame}{Demo}
  \begin{itemize}
  \item Build VM image
  \item Install packages
  \item Rollback
  \end{itemize}
\end{frame}

\begin{frame}{Thanks!}
  \begin{itemize}
  \item Guix 0.7 to be released in the coming weeks with bootable USB
    disk image
  \item We need your help to package useful sofware!
  \item Join us in \texttt{\#guix} on freenode or
    the \texttt{guile-devel@gnu.org} mailing list
  \item Source code and documenation available at
    \texttt{https://gnu.org/s/guix}
  \end{itemize}
\end{frame}

\begin{frame}{Copyright}
  \tiny{
    Copyright \copyright{} 2010, 2012, 2013, 2014 Ludovic Courtès \texttt{ludo@gnu.org}

    Copyright \copyright{} 2014 David Thompson \texttt{davet@gnu.org}\\[2.0mm]
    This work is licensed under the \alert{Creative Commons
    Attribution-Share Alike 3.0} License.  To view a copy of this
    license, visit
    \url{http://creativecommons.org/licenses/by-sa/3.0/} or send a
    letter to Creative Commons, 171 Second Street, Suite 300, San
    Francisco, California, 94105, USA.
    \\[2.0mm]
    At your option, you may instead copy, distribute and/or modify
    this document under the terms of the \alert{GNU Free Documentation
      License, Version 1.3 or any later version} published by the Free
    Software Foundation; with no Invariant Sections, no Front-Cover
    Texts, and no Back-Cover Texts.  A copy of the license is
    available at \url{http://www.gnu.org/licenses/gfdl.html}.
    \\[2.0mm]
    % Give a link to the 'Transparent Copy', as per Section 3 of the GFDL.
    The source of this document is available from
    \url{http://git.sv.gnu.org/cgit/guix/maintenance.git}.
  }
\end{frame}

\end{document}

% Local Variables:
% coding: utf-8
% comment-start: "%"
% comment-end: ""
% ispell-local-dictionary: "american"
% compile-command: "rubber --pdf guix-codefest-2014.tex"
% End:
