website: Incorporate sirgazil's major update.

Copied by Ludovic from https://bitbucket.org/sirgazil/guixsd-website
hg changeset 209:ce9d62df07f2.
This commit is contained in:
sirgazil 2017-07-29 15:18:59 +02:00 committed by Ludovic Courtès
parent ae2d0209cc
commit 3d9cc33400
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
236 changed files with 56347 additions and 12248 deletions

View File

@ -0,0 +1,51 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps aux lists)
#:use-module (apps aux numbers)
#:use-module (srfi srfi-1)
#:export (list-group
list-slice
rest
separate))
(define (list-group los limit)
(map (lambda (index)
(list-slice los index (+ index limit)))
;; TODO: Use a skip-count procedure instead of iota.
(iota (ceiling (/ (length los) limit)) 0 limit)))
(define* (list-slice los index-a #:optional (index-b #false))
(let ((start index-a)
(end (if (or (not index-b) (> index-b (length los)))
(- (length los) 1)
(- index-b 1))))
(map (lambda (index)
(list-ref los index))
(range index-a end))))
(define (rest los)
(cond ((<= (length los) 1) (list))
(else (list-tail los 1))))
(define (separate los separator)
"Return a list with the elements of LOS separated by SEPARATOR.
LOS (list)
A list of s-expressions.
SEPARATOR (s-expression)
Any s-expression that will be added between the elements of the
given list.
RETURN VALUE (list)
A list of s-expressions."
(cond ((or (null? los) (= (length los) 1)) los)
(else
(cons (first los)
(cons separator (separate (rest los) separator))))))

View File

@ -0,0 +1,33 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps aux numbers)
#:use-module (srfi srfi-1)
#:export (minus-one
plus-one
range))
(define (minus-one n)
"Return N-1."
(- n 1))
(define (plus-one n)
"Return N+1."
(+ n 1))
(define (range a b)
"Return the list of integers in the range [A, B].
A (integer)
B (integer)
RETURN VALUE (list of integers)
For example, for the range [-2, 3], return
(list -2 -1 0 1 2 3)."
(cond ((zero? (- a b)) (cons a (list)))
(else (cons a (range (plus-one a) b)))))

View File

@ -0,0 +1,14 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps aux strings)
#:export (string-summarize))
(define (string-summarize string n)
"Return an extract of N words from the given STRING."
(let ((words (string-split string #\space)))
(if (<= (length words) n)
string
(string-join (list-head words n) " "))))

42
website/apps/aux/sxml.scm Normal file
View File

@ -0,0 +1,42 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
;;; Initially written by sirgazil who waives all copyright interest on
;;; this file.
;;;
;;; This file is part of GuixSD website.
;;;
;;; GuixSD website is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU Affero General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GuixSD website is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU Affero General Public License for more details.
;;;
;;; You should have received a copy of the GNU Affero General Public License
;;; along with GuixSD website. If not, see <http://www.gnu.org/licenses/>.
(define-module (apps aux sxml)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:export (sxml->string*))
(define (sxml->string* tree)
"Flatten tree by dismissing tags and attributes, and return the resulting
string."
(define (sxml->strings tree)
(match tree
(((? symbol?) ('@ _ ...) body ...)
(append-map sxml->strings body))
(((? symbol?) body ...)
(append-map sxml->strings body))
((? string?)
(list tree))
((lst ...)
(sxml->strings `(div ,@lst)))))
(string-concatenate (sxml->strings tree)))

View File

@ -0,0 +1,34 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps aux system)
#:export (path-join))
;;;
;;; Procedures.
;;;
(define (path-join . parts)
"Return a system path composed of the given PARTS.
PARTS (strings)
A succession of strings representing parts of a file system path.
To indicate an absolute path, use an empty string as the first
part. For example:
(path-join '' 'docs' 'manual')
=> '/docs/manual'
To end the path with a slash, use an empty string as the last
part. For example:
(path-join '' 'docs' 'manual' '')
=> '/docs/manual/'
RETURN VALUE (string)
A string representing a file system path."
(cond ((equal? parts '("")) "/") ; Root directory
(else (string-join parts file-name-separator-string))))

78
website/apps/aux/web.scm Normal file
View File

@ -0,0 +1,78 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Copyright © 2015 David Thompson <davet@gnu.org>
;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
;;;
;;; This file is part of GuixSD website.
;;;
;;; GuixSD website is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU General Public License as
;;; published by the Free Software Foundation; either version 3 of the
;;; License, or (at your option) any later version.
;;;
;;; GuixSD website is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;;; General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GuixSD website. If not, see <http://www.gnu.org/licenses/>.
(define-module (apps aux web)
#:use-module (srfi srfi-1)
#:export (slugify
url-path-join))
;;;
;;; Variables.
;;;
(define char-set:slug
(char-set-union char-set:letter+digit (char-set #\-)))
;;;
;;; Procedures.
;;;
(define (slugify text)
"Return TEXT as a slug.
Reserved characters for Internationalized Resource Identifiers
(IRIs) and common reserved characters for file names are removed
using the SLUG_FORBIDDEN constant as reference.
TEXT (string)
Some text. For example: Biology, Human anatomy.
RETURN VALUE (string)
A slug-like string. For example: biology, human-anatomy."
(string-join
(map (lambda (s) (string-filter char-set:slug s))
(string-split (string-downcase text) char-set:whitespace))
"-"))
(define (url-path-join . parts)
"Return a URL path composed of the given PARTS.
PARTS (strings)
A succession of strings that represent parts of a URL path.
To indicate an absolute path, use an empty string as the first
part. For example:
(url-path-join '' 'docs' 'manual')
=> '/docs/manual'
To end the path with a slash, use an empty string as the last
part. For example:
(url-path-join '' 'docs' 'manual' '')
=> '/docs/manual/'
RETURN VALUE (string)
A string representing a URL path."
(cond ((equal? parts '("")) "/") ; Root directory
(else (string-join parts "/"))))

View File

@ -0,0 +1,135 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waives all
;;; copyright interest on this file.
(define-module (apps base builder)
#:use-module (apps aux system)
#:use-module (apps base data)
#:use-module (apps base templates about)
#:use-module (apps base templates contact)
#:use-module (apps base templates irc)
#:use-module (apps base templates contribute)
#:use-module (apps base templates donate)
#:use-module (apps base templates graphics)
#:use-module (apps base templates help)
#:use-module (apps base templates home)
#:use-module (apps base templates menu)
#:use-module (apps base templates screenshot)
#:use-module (apps base templates security)
#:use-module (apps base types)
#:use-module (apps blog utils)
#:use-module (haunt html)
#:use-module (haunt page)
#:use-module (haunt post)
#:use-module (haunt utils)
#:export (builder))
;;;
;;; Application builder.
;;;
(define (builder site posts)
"Return the list of web resources that compose the app.
This procedure is a Haunt builder procedure.
SITE (<site>)
A site object that defines all the properties of the website. See
Haunt <site> objects for more information.
POSTS (list of <post>)
A list of post objects that represent articles from the blog. See
Haunt <post> objects for more information.
RETURN (list of <page>)
A list of page objects that represent the web resources of the
application. See Haunt <page> objects for more information."
(flatten
(list (menu-builder)
(home-builder site posts)
(screenshots-builder)
(help-builder)
(donate-builder)
(about-builder)
(contact-builder)
(irc-builder)
(contribute-builder)
(security-builder)
(graphics-builder))))
;;;
;;; Helper builders.
;;;
(define (about-builder)
"Return a Haunt page representing the About page of the website."
(make-page "about/index.html" (about-t) sxml->html))
(define (contact-builder)
"Return a Haunt page representing the Contact page of the website."
(let ((context (list (cons "contact-media" contact-media))))
(make-page "contact/index.html" (contact-t context) sxml->html)))
(define (irc-builder)
"Return a Haunt page with an embedded Kiwi IRC widget."
(make-page "contact/irc/index.html" (irc-t) sxml->html))
(define (contribute-builder)
"Return a Haunt page representing the Contribute page of the website."
(make-page "contribute/index.html" (contribute-t) sxml->html))
(define (donate-builder)
"Return a Haunt page representing the Donate page of the website."
(make-page "donate/index.html" (donate-t) sxml->html))
(define (graphics-builder)
"Return a Haunt page representing the Graphics page of the website."
(make-page "graphics/index.html" (graphics-t) sxml->html))
(define (help-builder)
"Return a Haunt page representing the Help page of the website."
(make-page "help/index.html" (help-t) sxml->html))
(define (home-builder site posts)
"Return a Haunt page representing the Home page of the website."
(let ((context
(list
(cons "screenshots" screenshots)
(cons "posts" (posts/latest posts 3))
(cons "contact-media" (list-head contact-media 3)))))
(make-page "index.html" (home-t context) sxml->html)))
(define (menu-builder)
"Return a Haunt page representing the website menu."
(make-page "menu/index.html" (menu-t) sxml->html))
(define (screenshots-builder)
"Return a list of Haunt page representing screenshot pages."
(map
(lambda (shot)
(let ((context
(list (cons "screenshot" shot)
(cons "screenshots" screenshots))))
(make-page (path-join "screenshots"
(screenshot-slug shot)
"index.html")
(screenshot-t context)
sxml->html)))
screenshots))
(define (security-builder)
"Return a Haunt page representing the Security page of the website."
(make-page "security/index.html" (security-t) sxml->html))

184
website/apps/base/data.scm Normal file
View File

@ -0,0 +1,184 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base data)
#:use-module (apps base types)
#:use-module (apps base utils)
#:export (contact-media
screenshots))
;;;
;;; Data.
;;;
(define contact-media
(list
;; The first three will be featured in the home page.
(contact
#:name "IRC Channel"
#:description
'(p
"Join the #guix channel on the Freenode IRC network to chat
with the community about GuixSD or GNU Guix or to get help in
real-time.")
#:url (guix-url "contact/irc/")
#:log "https://gnunet.org/bot/log/guix/")
(contact
#:name "Help Mailing List"
#:description
'(p
"Subscribe to the Help mailing list to get support from the
GuixSD and GNU Guix community via email. "
(a (@ (href "https://lists.gnu.org/archive/html/guix-devel/2015-12/msg00584.html"))
"Until December 2015")
", the Guix-devel mailing list filled that role.")
#:url "https://lists.gnu.org/mailman/listinfo/help-guix"
#:log "https://lists.gnu.org/archive/html/help-guix")
(contact
#:name "Bug Reporting"
#:description
'(p
"If you found a bug in GuixSD or Guix, check whether the bug is
already in the "
(a (@ (href "https://debbugs.gnu.org/cgi/pkgreport.cgi?package=guix;max-bugs=100"))
"bug database")
". If it is not, please report it.")
#:url "mailto:bug-guix@gnu.org"
#:log "http://debbugs.gnu.org/cgi/pkgreport.cgi?pkg=guix")
(contact
#:name "Development Mailing List"
#:description
'(p
"Discussion about the development of GNU Guix and the Guix
System Distribution (GuixSD). "
(a (@ (href "http://lists.gnu.org/archive/html/bug-guix/2013-07/msg00039.html"))
" Until July 2013")
", the bug-Guix mailing list filled that role. ")
#:url "https://lists.gnu.org/mailman/listinfo/guix-devel"
#:log "https://lists.gnu.org/archive/html/guix-devel")
(contact
#:name "Patches Mailing List"
#:description
'(p
"Submission of patches. Every message sent to this mailing list
leads to a new entry in our "
(a (@ (href "//bugs.gnu.org/guix-patches"))
"patch tracking tool")
". See "
(a (@ (href "//debbugs.gnu.org/Advanced.html")) "this page")
" for more information on how to use it. "
(a (@ (href "//lists.gnu.org/archive/html/guix-devel/2017-02/msg00627.html"))
"Until February 2017")
", the guix-devel mailing list filled that role.")
#:url "https://lists.gnu.org/mailman/listinfo/guix-patches"
#:log "https://lists.gnu.org/archive/html/guix-patches")
(contact
#:name "Commits Mailing List"
#:description
`(p
"Notifications of commits made to the "
(a (@ (href ,(guix-url "contribute/"))) "Git repositories")
".")
#:url "https://lists.gnu.org/mailman/listinfo/guix-commits"
#:log "https://lists.gnu.org/archive/html/guix-commits")
(contact
#:name "Security Mailing List"
#:description
`(p
"This is a private mailing list that anyone can post to to "
(a (@ (href ,(guix-url "security/"))) "report security issues")
" in Guix itself or in "
"the " (a (@ (href ,(guix-url "packages/"))) "packages")
" it provides. Posting here allows Guix developers to address
the problem before it is widely publicized.")
#:url "https://lists.gnu.org/mailman/listinfo/guix-security"
#:log "")
(contact
#:name "Sysadmin Mailing List"
#:description
'(p
"Private mailing list for the "
(a (@ (href "https://hydra.gnu.org/")) "build farm")
" system administration.")
#:url "https://lists.gnu.org/mailman/listinfo/guix-sysadmin"
#:log "")
;; Non-Guix lists.
(contact
#:name "GNU System Discuss Mailing List"
#:description
'(p "Discussion about the development of the broader GNU system.")
#:url "https://lists.gnu.org/mailman/listinfo/gnu-system-discuss"
#:log "http://lists.gnu.org/archive/html/gnu-system-discuss/")
(contact
#:name "GNU/Linux Libre Mailing List"
#:description
'(p "Workgroup for fully free GNU/Linux distributions.")
#:url "https://lists.nongnu.org/mailman/listinfo/gnu-linux-libre"
#:log "http://lists.nongnu.org/archive/html/gnu-linux-libre/")
(contact
#:name "GNU Info Mailing List"
#:description
'(p "GNU software announcements.")
#:url "https://lists.gnu.org/mailman/listinfo/info-gnu"
#:log "http://lists.gnu.org/archive/html/info-gnu/")))
(define screenshots
(list
(screenshot
#:title "GNOME 3 Desktop"
#:slug "gnome-3-desktop"
#:image (guix-url "static/media/img/gnome3.jpg")
#:preview (guix-url "static/media/img/gnome3-mini.jpg")
#:caption "Control your computer with the GNOME Desktop Environment")
(screenshot
#:title "GNU IceCat"
#:slug "gnu-icecat"
#:image (guix-url "static/media/img/gnu-icecat.jpg")
#:preview (guix-url "static/media/img/gnu-icecat-mini.jpg")
#:caption "Browse the Web with GNU IceCat")
(screenshot
#:title "GNOME Maps"
#:slug "gnome-maps"
#:image (guix-url "static/media/img/gnome-maps.jpg")
#:preview (guix-url "static/media/img/gnome-maps-mini.jpg")
#:caption "Explore the Earth with GNOME Maps")
(screenshot
#:title "Inkscape"
#:slug "inkscape"
#:image (guix-url "static/media/img/inkscape.jpg")
#:preview (guix-url "static/media/img/inkscape-mini.jpg")
#:caption "Draw freely with Inkscape, a professional vector graphics editor")
(screenshot
#:title "GNOME Video"
#:slug "gnome-video"
#:image (guix-url "static/media/img/gnome-video.jpg")
#:preview (guix-url "static/media/img/gnome-video-mini.jpg")
#:caption "Watch movies with GNOME Video")
(screenshot
#:title "GNU Emacs"
#:slug "gnu-emacs"
#:image (guix-url "static/media/img/gnu-emac.jpg")
#:preview (guix-url "static/media/img/gnu-emacs-mini.jpg")
#:caption "Hack the universe with GNU Emacs, an extensible, and customizable text editor")))

View File

@ -0,0 +1,109 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base templates about)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:export (about-t))
(define (about-t)
"Return the About page in SHTML."
(theme
#:title '("About")
#:description
"GuixSD is an advanced distribution of the GNU operating system.
GuixSD is technology that respects the freedom of computer users.
You are free to run the system for any purpose, study how it
works, improve it, and share it with the whole world."
#:keywords
(list "GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager")
#:active-menu-item "About"
#:css (list
(guix-url "static/base/css/page.css"))
#:crumbs (list (crumb "About" "./"))
#:content
`(main
(section
(@ (class "page centered-block limit-width"))
(h2 "About the Project")
(p
"The " (em "Guix System Distribution (GuixSD)") " and the "
(em "GNU Guix") " package manager are "
(a (@ (href ,(gnu-url "philosophy/free-sw.html")))
"free software")
" projects developed by volunteers around the world under the
umbrella of the " (a (@ (href ,(gnu-url))) "GNU Project") ". "
"This is the official web site for both projects.")
(p
"GuixSD is a distribution of the "
(a (@ (href ,(gnu-url))) "GNU operating system")
" centered on the GNU Guix package manager. It uses the "
(a (@ (href ,(gnu-url "software/linux-libre"))) "Linux-libre")
" kernel, and support for "
(a (@ (href ,(gnu-url "software/hurd"))) "the Hurd")
" is being worked on. As a GNU distribution, it is committed
to respecting and enhancing "
(a (@ (href ,(gnu-url "philosophy/free-sw.html")))
"the freedom of its users")
". As such, it adheres to the "
(a (@ (href ,(gnu-url "distros/free-system-distribution-guidelines.html")))
"GNU Free System Distribution Guidelines") ".")
(p
"GNU Guix provides "
(a (@ (href ,(manual-url "Features.html")))
"state-of-the-art package management features")
" such as transactional upgrades and roll-backs, reproducible
build environments, unprivileged package management, and
per-user profiles. It uses low-level mechanisms from the "
(a (@ (href "https://nixos.org/nix/")) "Nix")
" package manager, but packages are "
(a (@ (href ,(manual-url "Defining-Packages.html"))) "defined")
" as native "
(a (@ (href ,(gnu-url "software/guile"))) "Guile")
" modules, using extensions to the "
(a (@ (href "http://schemers.org")) "Scheme")
" language—which makes it nicely hackable.")
(p
"GuixSD takes that a step further by supporting stateless,
reproducible "
(a (@ (href ,(manual-url "Using-the-Configuration-System.html")))
"operating system configurations")
". This time the whole system is hackable in Scheme, from the "
(a (@ (href ,(manual-url "Initial-RAM-Disk.html")))
"initial RAM disk")
" to the "
(a (@ (href ,(gnu-url "software/shepherd")))
"initialization system")
", and to the "
(a (@ (href ,(manual-url "Defining-Services.html")))
"system services")
".")
(h3 (@ (id "mantainer")) "Maintainer")
(p
"Guix is currently maintained by Ludovic Courtès and Ricardo
Wurmus. Please use the "
(a (@ (href ,(guix-url "contact/"))) "mailing lists")
" for contact. ")
(h3 (@ (id "license")) "Licensing")
(p
"Guix is free software; you can redistribute it and/or modify
it under the terms of the "
(a (@ (rel "license") (href ,(gnu-url "licenses/gpl.html")))
"GNU General Public License")
" as published by the Free Software Foundation; either
version\xa03 of the License, or (at your option) any later
version. ")))))

View File

@ -0,0 +1,354 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
;;; This module defines HTML parts like header, breadcrumbs, footer,
;;; buttons, etc., which are used website-wide.
(define-module (apps base templates components)
#:use-module (apps aux lists)
#:use-module (apps aux strings)
#:use-module (apps aux sxml)
#:use-module (apps aux web)
#:use-module (apps base types)
#:use-module (apps base utils)
#:use-module (srfi srfi-1)
#:export (breadcrumbs
button-big
button-little
contact-preview
contact->shtml
horizontal-separator
link-more
link-subtle
link-yellow
navbar
page-indicator
page-selector
screenshot->shtml))
;;;
;;; Components.
;;;
(define (breadcrumbs crumbs)
"Return an SHTML nav element representing the breadcrumbs.
CRUMBS (list)
A non-empty list of <crumb> objects as defined in
(apps base types)."
`(nav
(@ (class "breadcrumbs"))
(h2 (@ (class "a11y-offset")) "Your location:")
(a (@ (class "crumb") (href ,(guix-url))) "Home") (span " → ")
,@(separate (crumbs->shtml crumbs) '(span " → "))))
(define (crumbs->shtml crumbs)
"Return the list of CRUMBS as list of SHTML a elements.
CRUMBS (list)
A non-empty list of <crumb> objects as defined in
(apps base types)."
(cond ((= (length crumbs) 1)
(cons
`(a
(@ (class "crumb crumb-active")
(href ,(crumb-url (first crumbs))))
,(crumb-label (first crumbs)))
'()))
(else
(cons
`(a
(@ (class "crumb")
(href ,(crumb-url (first crumbs))))
,(crumb-label (first crumbs)))
(crumbs->shtml (rest crumbs))))))
(define* (button-big #:key (label "Button") (url "#") (light #false))
"Return an SHTML a element that looks like a big button.
LABEL (string)
The text for the button. For example: 'Download!'.
URL (string)
A URL to use for the href attribute of the a element. If not
specified, the value defaults to #.
LIGHT (boolean)
True if the button is going to be used on a dark background; false
otherwise (this is the default)."
`(a
(@ (class ,(string-append "button-big" (if light " button-light" "")))
(href ,url))
,label))
(define* (button-little #:key (label "Button") (url "#") (active #false))
"Return an SHTML a element that looks like a little button.
LABEL (string)
The text for the button. For example: 'Next'.
URL (string)
A URL to use for the href attribute of the a element. If not
specified, the value defaults to #.
ACTIVE (boolean)
True if the button should be highlighted as active (on)."
`(a
(@ (class ,(string-append "button-little"
(if active " button-little-active" "")))
(href ,url))
,label))
(define (contact-preview contact)
"Return an SHTML preview of the given contact object.
CONTACT (<contact>)
A contact object as defined in (apps base types)."
`(a
(@ (class "item-preview")
(href ,(contact-url contact)))
(h3 ,(contact-name contact))
(p
,(string-summarize
(sxml->string* (contact-description contact)) 30)
"…")))
(define (contact->shtml contact)
"Return an SHTML representation of the given contact object.
CONTACT (<contact>)
A contact object as defined in (apps base types)."
`(div
(@ (class "contact-medium"))
(a (@ (href ,(contact-url contact))) (b ,(contact-name contact)))
,(if (string=? (contact-log contact) "")
""
`(small
" (" (a (@ (href ,(contact-log contact))) "archive") ") "))
,(contact-description contact)))
(define* (horizontal-separator #:key (light #false))
"Return an SHTML img element that works as a separator.
LIGHT (boolean)
True if the separator is going to be used on a dark background;
false otherwise (this is the default)."
`(img
(@ (class "h-separator")
,(if light
`(src ,(guix-url "static/base/img/h-separator.png"))
`(src ,(guix-url "static/base/img/h-separator-dark.png")))
(alt ""))))
(define* (link-more #:key (label "More") (url "#") (light #false))
"Return an SHTML a element that looks like a 'more ' link.
LABEL (string)
The text for the link. For example: 'Read the manual'.
URL (string)
A URL to use for the href attribute of the a element. If not
specified, the value defaults to #.
LIGHT (boolean)
True if the link is going to be used on a dark background; false
otherwise (this is the default)."
`(a
(@ (class ,(string-append "link-more" (if light " link-more-light" "")))
(href ,url))
,label))
(define* (link-subtle #:key (label "link") (url "#"))
"Return an SHTML a element that does not stand too much on white backgrounds.
LABEL (string)
The text for the link. For example: 'Additional notes'.
URL (string)
The URL of the link. If not specified, the value defaults to #."
`(a (@ (class "link-subtle") (href ,url)) ,label))
(define* (link-yellow #:key (label "link") (url "#"))
"Return a yellow SHTML a element to use on dark backgrounds.
LABEL (string)
The text for the link. For example: 'read the manual'.
URL (string)
The URL of the link. If not specified, the value defaults to #."
`(a (@ (class "link-yellow") (href ,url)) ,label))
(define* (menu-dropdown #:key (label "Item") (active-item "") (url "#") (items '()))
"Return an SHTML li element representing a dropdown for the navbar.
LABEL (string)
The text for the dropdown. For example: 'About'.
ACTIVE-ITEM (string)
A string representing the label of the current active item in the
navigation bar. If the values of LABEL and ACTIVE-ITEM are the
same, the dropdown is highlighted.
URL (string)
The URL of the web resource referenced by the dropdown. Any
value used for an HTML a element is valid. If not specified, the
value defaults to #.
ITEMS (list of menu items)
A list of menu items as returned by the menu-item procedure in this
same module. If not provided, the value defaults to an empty list."
`(li
(@ (class "dropdown"))
(a
(@ (class
,(if (string=? (string-downcase label) (string-downcase active-item))
"menu-item menu-item-active dropdown-btn"
"menu-item dropdown-btn"))
(href ,url))
,label)
(div
(@ (class "submenu"))
(div (@ (class "submenu-triangle")) " ")
(ul ,@items))))
(define* (menu-item #:key (label "Item") (active-item "") (url "#"))
"Return an SHTML li element representing an item for the navbar.
LABEL (string)
The text for the item. For example: 'About'.
ACTIVE-ITEM (string)
A string representing the label of the current active item in the
navigation bar. If the values of LABEL and ACTIVE-ITEM are the
same, the menu item is highlighted.
URL (string)
The URL of the web resource referenced by the menu item. Any
value used for an HTML a element is valid. If not specified, the
value defaults to #."
`(li
(a
(@ (class
,(if (string=? (string-downcase label) (string-downcase active-item))
"menu-item menu-item-active"
"menu-item"))
(href ,url))
,label)))
(define* (navbar #:key (active-item "About"))
"Return an SHTML header element with the given ACTIVE ITEM highlighted."
`(header
(@ (class "navbar"))
;; Branding.
(h1
(a
(@ (class "branding") (href ,(guix-url)))
(span (@ (class "a11y-offset")) "GuixSD")))
;; Menu.
(nav (@ (class "menu"))
(h2 (@ (class "a11y-offset")) "Website menu:")
(ul
,(menu-item #:label "Overview" #:active-item active-item #:url (guix-url))
,(menu-item #:label "Download" #:active-item active-item #:url (guix-url "download/"))
,(menu-item #:label "Packages" #:active-item active-item #:url (guix-url "packages/"))
,(menu-item #:label "Blog" #:active-item active-item #:url (guix-url "blog/"))
,(menu-item #:label "Help" #:active-item active-item #:url (guix-url "help/"))
,(menu-item #:label "Donate" #:active-item active-item #:url (guix-url "donate/"))
,(menu-dropdown #:label "About" #:active-item active-item #:url (guix-url "about/")
#:items
(list
(menu-item #:label "Contact" #:active-item active-item #:url (guix-url "contact/"))
(menu-item #:label "Contribute" #:active-item active-item #:url (guix-url "contribute/"))
(menu-item #:label "Security" #:active-item active-item #:url (guix-url "security/"))
(menu-item #:label "Graphics" #:active-item active-item #:url (guix-url "graphics/"))))))
;; Menu button.
(a
(@ (class "menu-btn")
(href ,(guix-url "menu/"))) "")))
(define (page-indicator page-number total-pages)
"Return an SHTML span element in the form 'page X of Y' if there is
more than one page. Otherwise, return an empty string.
PAGE-NUMBER (number)
The number of the page that the user is seeing.
TOTAL-PAGES (number)
The total number of pages that should be displayed."
(if (> total-pages 1)
`(span
(@ (class "page-number-indicator"))
" (Page " ,(number->string page-number)
" of " ,(number->string total-pages) ")")
""))
(define (page-selector pages active-page base-url)
"Return an SHTML nav element representing a page selection widget.
PAGES (number)
The total number of pages that should be displayed.
ACTIVE-PAGE (number)
The number of the page that should be displayed as active.
BASE-URL (string)
Absolute URL path to prepend to page numbers. For example:
'/en/blog'. This would result in URLs like: '/en/blog/page/N',
where N is the number of the page."
`(nav
(@ (class "page-selector"))
(h3
(@ (class "a11y-offset"))
,(string-append "Page " (number->string active-page) " of "
(number->string pages) ". Go to another page: "))
,(if (> pages 1)
(map
(lambda (page-number)
(list
(button-little
#:label page-number
#:url (url-path-join base-url "page"
(number->string page-number) "")
#:active (= page-number active-page))
" ")) ; NOTE: Force space for readability in non-CSS browsers.
(iota pages 1))
"")))
(define (screenshot->shtml shot)
"Return an SHTML representation of the given screenshot object.
SHOT (<screenshot>)
A screenshot object as defined in (apps base types)."
`(div
(@ (class "screenshot-preview"))
(a
(@ (href ,(guix-url (url-path-join "screenshots"
(screenshot-slug shot) ""))))
(img
(@ (class "responsive-image")
(src ,(screenshot-preview shot))
(alt "")))
(span (@ (class "screenshot-inset-shadow")) ""))
(p ,(screenshot-caption shot) (span (@ (class "hidden")) "."))))

View File

@ -0,0 +1,36 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base templates contact)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:export (contact-t))
(define (contact-t context)
"Return the Contact page in SHTML with the data in CONTEXT."
(theme
#:title '("Contact")
#:description
"A list of channels to communicate with GuixSD and GNU Guix users
and developers about anything you want."
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"Community" "Mailing lists" "IRC channels" "Bug reports" "Help")
#:active-menu-item "About"
#:css (list
(guix-url "static/base/css/page.css"))
#:crumbs (list (crumb "Contact" "./"))
#:content
`(main
(section
(@ (class "page centered-block limit-width"))
(h2 "Contact")
,@(map
contact->shtml
(context-datum context "contact-media"))))))

View File

@ -0,0 +1,241 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base templates contribute)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:export (contribute-t))
(define (contribute-t)
"Return the Contribute page in SHTML."
(theme
#:title '("Contribute")
#:description
"Check all the ways you can contribute to make GuixSD and GNU Guix
better, and join the world-wide community of volunteers."
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"Volunteer" "Development" "Translation" "I18N" "L10N"
"Artwork")
#:active-menu-item "About"
#:css (list
(guix-url "static/base/css/page.css")
(guix-url "static/base/css/item-preview.css"))
#:crumbs (list (crumb "Contribute" "./"))
#:content
`(main
(section
(@ (class "page centered-block limit-width"))
(h2 "Contribute")
(p
"The Guix System Distribution is a large project developed
mostly by volunteers from all around the world. You are welcome
to join us in the "
(a (@ (href "http://lists.gnu.org/mailman/listinfo/guix-devel"))
"development mailing list")
" or in the "
(a (@ (href "http://webchat.freenode.net/?channels=%23guix"))
"#guix channel")
" in IRC Freenode. Tell us how would you like to help, and we
will do our best to guide you. ")
(div
(@ (class "centered-text"))
(div
(@ (class "summary-box"))
(h3 (@ (id "pms")) "Project Management")
(p
"We use "
(a (@ (href "https://savannah.gnu.org/")) "Savannah")
" as the central point for development, maintenance and
distribution of the Guix System Distribution and GNU Guix.")
(p
"The source files for all the components of the project,
including software, web site, documentation, and artwork, are
available in "
(a (@ (href "https://savannah.gnu.org/git/?group=guix"))
"Git repositories")
" at Savannah. ")
(p
,(link-more
#:label "Access Savannah"
#:url "https://savannah.gnu.org/projects/guix")))
(div
(@ (class "summary-box"))
(h3 (@ (id "art")) "Art")
(p
"We are always looking for artists to help us design and
improve user interfaces, and create multimedia material for
documentation, presentations, and promotional items. ")
(p
"The artwork used in the different components of the project
is available in the "
(a (@ (href "//git.savannah.gnu.org/cgit/guix/guix-artwork.git"))
"guix-artwork")
" repository. ")
(p
,(link-more
#:label "Contribute"
#:url "http://lists.gnu.org/mailman/listinfo/guix-devel")))
(div
(@ (class "summary-box"))
(h3 (@ (id "documentation")) "Documentation")
(p
"You can read the "
(a (@ (href ,(guix-url "help/"))) "project documentation")
" already available in the system and in the website, and
help us identify any errors or omissions. Creating new
manuals, tutorials, and blog entries will also help users and
developers discover what we do. ")
(p
"Helping improve the documentation of the "
(a (@ (href ,(guix-url "packages/"))) "packaged software")
" is another way to contribute. ")
(p
,(link-more
#:label "Start writing"
#:url "http://lists.gnu.org/mailman/listinfo/guix-devel")))
(div
(@ (class "summary-box"))
(h3 (@ (id "packages")) "Packages")
(p
"Hundreds of software, documentation, and assets need to be
packaged to make it easier for users to install their
favorite tools with the Guix package manager, and be
productive using the system. ")
(p
"Information on how to add packages to the distribution can
be found "
(a (@ (href ,(manual-url "Packaging-Guidelines.html")))
"in the manual")
". ")
(p
"Check out the "
(a (@ (href ,(guix-url "packages/")))
"package database")
" for a list of available packages, and the "
(a (@ (href "//bugs.gnu.org/guix-patches"))
"patch-tracking database")
" for a list of pending submissions.")
(p
,(link-more
#:label "Send a new package"
#:url "//lists.gnu.org/mailman/listinfo/guix-patches")))
(div
(@ (class "summary-box"))
(h3 (@ (id "programming")) "Programming")
(p
"Source code is in the "
(a (@ (href "//git.savannah.gnu.org/cgit/guix.git/"))
"main Git repository")
". "
"We use "
(a (@ (href ,(gnu-url "software/guile"))) "GNU Guile")
" as the main programming and extension language for the
components of the system. ")
(p
"You will find it useful to browse the "
(a (@ (href ,(gnu-url "software/guile/manual")))
"Guile manual")
" or other "
(a (@ (href "http://www.schemers.org/Documents/#intro-texts"))
"introductory material about Scheme")
". Also, make sure to read the "
(a (@ (href ,(manual-url "Contributing.html")))
"Contributing")
" section of the manual for more details on the development
setup, as well as the coding and cooperation conventions used
in the project. ")
(p
,(link-more
#:label "Send a patch"
#:url "//lists.gnu.org/mailman/listinfo/guix-patches")))
(div
(@ (class "summary-box"))
(h3 (@ (id "sysadmin")) "System Administration")
(p
"Our system infrastructure makes it possible for all the
contributors to communicate and collaborate in the project,
and users to be able to download and install packages. Help
us keep the system up and running smoothly. ")
(p
"You can also "
(a (@ (href ,(guix-url "donate/")))
"donate hardware or hosting")
" for our "
(a (@ (href "http://hydra.gnu.org")) "build farm") ". ")
(p
,(link-more
#:label "Contribute"
#:url "http://lists.gnu.org/mailman/listinfo/guix-devel")))
(div
(@ (class "summary-box"))
(h3 (@ (id "testing")) "Test and Bug Reports")
(p
"Install the software and send feedback to the community
about your experience. Help the project reporting bugs.")
(p
"Before reporting a bug, please check whether the bug is
already "
(a (@ (href "https://debbugs.gnu.org/guix"))
"in the bug database")
". See "
(a (@ (href "https://debbugs.gnu.org/Developer.html"))
"the developer information page")
" for more information on how to manipulate bug reports. ")
(p
,(link-more
#:label "Report a bug"
#:url "https://lists.gnu.org/mailman/listinfo/bug-guix")))
(div
(@ (class "summary-box"))
(h3 (@ (id "translation")) "Translation")
(p
"You can help translate the "
(a (@ (href "http://translationproject.org/domain/guix.html"))
"software")
" and the "
(a (@ (href "http://translationproject.org/domain/guix-packages.html"))
"package descriptions")
" to your language. See the "
(a (@ (href "https://translationproject.org/html/translators.html"))
"Translation Project")
" for information on how you can help.")
(p
(a (@ (href ,(guix-url "packages"))) "Software packages")
" provided by the system may have their own translation
tools. Visit their websites and help translate. ")
(p
,(link-more
#:label "Start translating"
#:url "https://translationproject.org/"))))
(h3 (@ (id "resources")) "Other resources for contributors")
(p
"Documents, supporting material of previous talks, and
auxiliary information useful to hackers and maintainers is
available at "
(a (@ (href "//git.savannah.gnu.org/cgit/guix/maintenance.git"))
"git://git.sv.gnu.org/guix/maintenance.git")
".")))))

View File

@ -0,0 +1,188 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base templates donate)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:export (donate-t))
(define (donate-t)
"Return the Donate page in SHTML."
(theme
#:title '("Donate")
#:description
"We are looking for donations of hardware and optionally hosting
for machines (they should be usable with exclusively free
software)."
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"Donations")
#:active-menu-item "Donate"
#:css (list
(guix-url "static/base/css/page.css"))
#:crumbs (list (crumb "Donate" "./"))
#:content
`(main
(section
(@ (class "page centered-block limit-width"))
(h2 "Donate")
(p
"The "
(a (@ (href "http://hydra.gnu.org/jobset/gnu/master"))
"build farm")
" of the Guix System Distribution runs on donated hardware and"
" hosting. As the distribution grows (see the "
(a (@ (href ,(guix-url "packages/"))) "package list")
"), so do the computing and storage needs.")
(p
"We have "
(a (@ (href "https://savannah.gnu.org/forum/forum.php?forum_id=8423"))
"started a fundraising campaign")
" to strengthen our build farm, with "
(a (@ (href "https://www.fsf.org/blogs/community/fsf-announces-support-for-gnu-guix"))
"support from the Free Software Foundation (FSF)")
". Please consider helping out by making a donation on this
FSF-hosted page:")
(p
(@ (class "centered-text"))
,(button-big
#:label "♥ DONATE!"
#:url "https://my.fsf.org/civicrm/contribute/transact?reset=1&id=50"))
(h3
(@ (id "hardware-and-hosting"))
"Hardware and Hosting")
(p
"We are also looking for donations of hardware and optionally
hosting for the following kinds of machines (they should be
usable with exclusively free software): ")
(ul
(li "x86_64 machines, with on the order of 1\xa0TiB of storage
and 4\xa0GiB of RAM;")
(li "armv7 machines (such as the Novena) to more quickly test
and provide binaries for the armhf-linux port;")
(li "mips64el machines to strengthen this port."))
(p
"Please get in touch with us through the "
(a (@ (href ,(guix-url "contact/"))) "usual channels")
" or using the " (b "guix-hardware@gnu.org") " private alias to
discuss any opportunities. ")
(h3
(@ (id "hardware-donors"))
"Thanks to the donors!")
(p
"The table below summarizes hardware and hosting donations that
make the " (a (@ (href "http://hydra.gnu.org")) "build farm")
" for the Guix System Distribution a reality.")
(div
(@ (class "table-box"))
(table
(thead
(tr (th "machine")
(th "system")
(th "donors")))
(tbody
(tr
(td "hydra.gnu.org")
(td "build farm front-end")
(td
(ul
(li
(a (@ (href "https://www.fsf.org/"))
"Free Software Foundation")))))
(tr
(td "bayfront.guixsd.org")
(td "new build farm front-end (WIP)")
(td
(ul
(li
(a (@ (href ,(guix-url "news/growing-our-build-farm.html")))
"Igalia")))))
(tr
(td "hydra.gnunet.org")
(td "x86_64-linux, i686-linux")
(td (ul (li (a (@ (href "https://gnunet.org/fsnsg"))
"Free Secure Network Systems Group")
" at the "
(a (@ (href "https://www.tum.de/"))
"Technische Universität München")))))
(tr
(td "chapters.gnu.org")
(td "x86_64-linux, i686-linux")
(td
(ul
(li (a (@ (href "https://es.gnu.org"))
"GNU\xa0España") " (hardware)")
(li (a (@ (href "https://fsffrance.org/index.en.html"))
"FSF\xa0France")
" (hosting)"))))
(tr
(td "librenote")
(td "mips64el-linux")
(td (ul (li "Daniel Clark (hardware)")
(li "Mark H Weaver (hosting)"))))
(tr
(td "hydra-slave0")
(td "mips64el-linux")
(td
(ul
(li (a (@ (href "https://www.fsf.org/"))
"Free Software Foundation")))))
(tr
(td "guix.sjd.se")
(td "x86_64-linux, i686-linux")
(td
(ul
(li (a (@ (href "http://josefsson.org"))
"Simon Josefsson")))))
(tr
(td "hydra-slave1")
(td "armhf-linux")
(td
(ul
(li "Steve Sprang (hardware)")
;; XXX: Eventually move to the FSF?
(li "Mark H Weaver (hosting)"))))
(tr
(td "hydra-slave2")
(td "armhf-linux")
(td
(ul
(li (a (@ (href "http://harmoninstruments.com/"))
"Harmon Instruments")
" (hardware)")
;; XXX: Eventually move to the FSF?
(li "Mark H Weaver (hosting)"))))
(tr
(td "hydra-slave3")
(td "armhf-linux")
(td
(ul
(li (a (@ (href "http://www.kosagi.com/w/index.php?title=Novena_Main_Page"))
"Kosagi (Sutajio Ko-Usagi Pte Ltd)")
" (hardware)")
(li "Mark H Weaver (hosting)"))))
(tr
(td "redhill")
(td "armhf-linux")
(td
(ul
(li (a (@ (href "http://www.kosagi.com/w/index.php?title=Novena_Main_Page"))
"Kosagi (Sutajio Ko-Usagi Pte Ltd)")
" (hardware)")
(li "Andreas Enge (hosting)")))))))))))

View File

@ -0,0 +1,68 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base templates graphics)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:export (graphics-t))
(define (graphics-t)
"Return the Graphics page in SHTML."
(theme
#:title '("Graphics")
#:description
"Information about images used for the graphical identity of GuixSD
and GNU Guix."
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"Branding" "Logo")
#:active-menu-item "About"
#:css (list
(guix-url "static/base/css/page.css"))
#:crumbs (list (crumb "Graphics" "./"))
#:content
`(main
(section
(@ (class "page centered-block limit-width"))
(h2 "Graphics")
(p
"For questions regarding the graphics listed in this page,
please contact "
(a (@ (href "https://lists.gnu.org/mailman/listinfo/help-guix"))
("help-guix@gnu.org"))
".")
(p
(@ (class "centered-text"))
(img (@ (src ,(guix-url "static/base/img/Guix.png"))
(alt "GNU Guix logotype")))
(img (@ (src ,(guix-url "static/base/img/GuixSD.png"))
(alt "Guix System Distribution logotype"))))
(p
"The GNU Guix and the Guix System Distribution (GuixSD)
logotypes were designed by Luis Felipe López Acevedo
(a.k.a. sirgazil). They are available under the following
terms:")
(blockquote
(p "Copyright © 2015 Luis Felipe López Acevedo")
(p
"Permission is granted to copy, distribute and/or modify this
work under the terms of the "
(a (@ (href "http://creativecommons.org/licenses/by-sa/4.0/"))
"Creative Commons Attribution-ShareAlike 4.0 International License")
"."))
(p
"The source files for these logotypes, their variants, and
other artwork used in the different components of the GNU Guix
project are available in the "
(a (@ (href "//git.savannah.gnu.org/cgit/guix/guix-artwork.git"))
"guix-artwork")
" repository, including the previous GNU Guix logotype designed
by Nikita Karetnikov in 2013 and "
(a (@ (href "https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25205"))
"superseded")
" by the golden GNU in 2016.")))))

View File

@ -0,0 +1,122 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base templates help)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:export (help-t))
(define (help-t)
"Return the Help page in SHTML."
(theme
#:title '("Help")
#:description
"A list of resources about how to use GuixSD and GNU Guix, plus
information about getting help from the community of users and
developers."
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"Help resources")
#:active-menu-item "Help"
#:css (list
(guix-url "static/base/css/page.css")
(guix-url "static/base/css/item-preview.css"))
#:crumbs (list (crumb "Help" "./"))
#:content
`(main
(section
(@ (class "page"))
(h2 "Help")
(div
(@ (class "centered-text"))
(div
(@ (class "summary-box"))
(img
(@ (src ,(guix-url "static/base/img/guixsd-manual-icon.png"))
(alt "")))
(h3 "GuixSD Manual")
(p
"The documentation about the Guix System Distribution is
available online as part of the GNU Guix package manager
manual.")
(p
,(link-more
#:label "Read GuixSD manual"
#:url (manual-url "GNU-Distribution.html"))))
(div
(@ (class "summary-box"))
(img
(@ (src ,(guix-url "static/base/img/guix-manual-icon.png"))
(alt "")))
(h3 "GNU Guix Manual")
(p
"Documentation for the GNU Guix package manager is available
online. You may also find more information about Guix by running "
(code "info guix") ".")
(p
,(link-more
#:label "Read Guix manual"
#:url (guix-url "manual/"))))
(div
(@ (class "summary-box"))
(img (@ (src ,(guix-url "static/base/img/library-icon.png"))
(alt "")))
(h3 "GNU Manuals")
(p
"GuixSD is a distribution of the "
(a (@ (href ,(gnu-url))) "GNU operating system")
". Most GNU software is documented and the documentation is
available online in various formats. ")
(p
,(link-more
#:label "Browse GNU manual"
#:url (guix-url "manual/"))))
(div
(@ (class "summary-box"))
(img (@ (src ,(guix-url "static/base/img/chat-icon.png"))
(alt "")))
(h3 "IRC Chat")
(p
"For real-time support from the community, you can connect
to the " (code "#guix") " channel on irc.freenode.net. There
you can get help about anything related to both the Guix
System Distribution and GNU Guix.")
(p
"The " (code "#guix") " channel is logged. Previous
conversations can be browsed online. See the "
(a (@ (href "https://gnunet.org/bot/log/guix/"))
"channel logs")
". ")
(p
,(link-more
#:label "Connect"
#:url (guix-url "contact/irc/"))))
(div
(@ (class "summary-box"))
(img (@ (src ,(guix-url "static/base/img/email-icon.png"))
(alt "")))
(h3 "Mailing lists")
(p
"Email support from the community is also available through
several mailing list. The messages sent to the lists are
public and archived online.")
(p
,(link-more
#:label "See all lists"
#:url (guix-url "contact/")))))))))

View File

@ -0,0 +1,235 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base templates home)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:use-module (apps blog templates components)
#:export (home-t))
(define (home-t context)
"Return the Home page in SHTML using the data in CONTEXT."
(theme
#:title '("GNU's advanced distro and transactional package manager")
#:description
"GuixSD is an advanced distribution of the GNU operating system.
GuixSD is technology that respects the freedom of computer users.
You are free to run the system for any purpose, study how it works,
improve it, and share it with the whole world."
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"GNU Guile" "Guile Scheme" "Transactional upgrades"
"Functional package management" "Reproducibility")
#:active-menu-item "Overview"
#:css (list
(guix-url "static/base/css/item-preview.css")
(guix-url "static/base/css/index.css"))
#:content
`(main
;; Featured content.
(section
(@ (class "featured-content"))
(h2 (@ (class "a11y-offset")) "Summary")
(ul
(li
(b "Liberating.")
" The Guix System Distribution (GuixSD) is an advanced
distribution of the "
,(link-yellow
#:label "GNU operating system"
#:url (gnu-url "gnu/about-gnu.html"))
" developed by the "
,(link-yellow
#:label "GNU Project"
#:url (gnu-url))
"—which respects the "
,(link-yellow
#:label "freedom of computer users"
#:url (gnu-url "distros/free-system-distribution-guidelines.html"))
". ")
(li
(b "Dependable.")
" It comes with the "
,(link-yellow
#:label "GNU Guix package manager"
#:url (manual-url "Package-Management.html"))
", which in addition to standard package management features,
supports transactional upgrades and roll-backs, unprivileged
package management, per-user profiles, "
,(link-yellow
#:label "and more"
#:url (manual-url "Features.html"))
".")
(li
(b "Hackable.")
" It provides "
,(link-yellow
#:label "Guile Scheme"
#:url (gnu-url "software/guile/"))
" APIs, including high-level embedded domain-specific
languages (EDSLs) to "
,(link-yellow
#:label "define packages"
#:url (manual-url "Defining-Packages.html"))
" and "
,(link-yellow
#:label "whole-system configurations"
#:url (manual-url "System-Configuration.html"))
"."))
(div
(@ (class "action-box centered-text"))
,(button-big
#:label (string-append "TEST v" (latest-guix-version))
#:url (guix-url "download/")
#:light #true)
" " ; A space for readability in non-CSS browsers.
,(button-big
#:label "CONTRIBUTE"
#:url (guix-url "contribute/")
#:light #true)))
;; Discover GuixSD.
(section
(@ (class "discovery-box"))
(h2 "Discover GuixSD")
(p
(@ (class "limit-width centered-block"))
"GuixSD comes with thousands of packages which include
applications, system tools, documentation, fonts, and other
digital goods readily available for installing with the "
,(link-yellow #:label "GNU Guix" #:url "#guix-in-other-distros")
" package manager.")
(div
(@ (class "screenshots-box"))
,@(map screenshot->shtml (context-datum context "screenshots")))
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "ALL PACKAGES"
#:url (guix-url "packages/")
#:light #true))
,(horizontal-separator #:light #true)
;; GuixSD in different fields.
(h3 "GuixSD and GNU Guix in your field")
(p
(@ (class "limit-width centered-block"))
"Read some stories about how people are using GuixSD and GNU
Guix in their daily lives.")
(div
(@ (class "fields-box"))
,(button-big
#:label "HOME COMPUTING"
#:url (guix-url "blog/tags/home-computing/")
#:light #true)
" " ; A space for readability in non-CSS browsers (same below).
,(button-big
#:label "SOFTWARE DEVELOPMENT"
#:url (guix-url "blog/tags/software-development/")
#:light #true)
" "
,(button-big
#:label "RESEARCH"
#:url (guix-url "blog/tags/research/")
#:light #true)
" "
,(button-big
#:label "BIOINFORMATICS"
#:url (guix-url "blog/tags/bioinformatics/")
#:light #true)
" "
,(button-big
#:label "HIGH PERFORMANCE COMPUTING"
#:url (guix-url "blog/tags/high-performance-computing/")
#:light #true)
" "
,(button-big
#:label "ALL FIELDS..."
#:url (guix-url "blog/tags/case-studies/")
#:light #true))
,(horizontal-separator #:light #true)
;; Using Guix in other distros.
(h3
(@ (id "guix-in-other-distros"))
"GNU Guix in other GNU/Linux distros")
(div
(@ (class "info-box"))
(video
(@ (class "video-preview")
(src "https://audio-video.gnu.org/video/misc/2016-07__GNU_Guix_Demo_2.webm")
(poster ,(guix-url "static/media/img/guix-demo.png"))
(controls "controls"))
(p
"Video: "
,(link-yellow
#:label "Demo of Guix in another GNU/Linux distribution"
#:url "https://audio-video.gnu.org/video/misc/2016-07__GNU_Guix_Demo_2.webm")
" (1 minute, 30 seconds).")))
(div
(@ (class "info-box justify-left"))
(p
"If you don't use the "
,(link-yellow
#:label "Guix System Distribution"
#:url (guix-url))
" for a particular reason, you still can use the "
,(link-yellow
#:label "GNU Guix"
#:url (guix-url))
" package manager on top of any GNU/Linux distribution. This
way, you can benefit from all its conveniences.")
(p
"GNU Guix won't interfere with the package manager that comes
with your distribution. They can leave together."))
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "TRY IT OUT!"
#:url (guix-url "download/")
#:light #true)))
;; Latest Blog posts.
(section
(@ (class "centered-text"))
(h2 "Blog")
,@(map post-preview (context-datum context "posts"))
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "ALL POSTS"
#:url (guix-url "blog/"))))
;; Contact info.
(section
(@ (class "contact-box centered-text"))
(h2 "Contact")
,@(map contact-preview (context-datum context "contact-media"))
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "ALL CONTACT MEDIA"
#:url (guix-url "contact/")))))))

View File

@ -0,0 +1,53 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base templates irc)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:export (irc-t))
(define (irc-t)
"Return the Kiwi IRC widget page in SHTML."
(theme
#:title '("IRC" "Contact")
#:description
"Installers and source files for the Guix System distribution
(GuixSD), and the GNU Guix package manager. GNU Guix can be
installed on different GNU/Linux distributions."
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"IRC" "chat")
#:active-menu-item "About"
#:css (list
(guix-url "static/base/css/page.css")
(guix-url "static/base/css/irc.css"))
#:crumbs (list (crumb "Contact" (guix-url "contact/"))
(crumb "IRC" "./"))
#:content
`(main
(section
(@ (class "page"))
(h2 "IRC")
(p
(@ (class "centered-block limit-width"))
"Join the " (code "#guix") " channel on the "
(a (@ (href "https://en.wikipedia.org/wiki/Freenode"))
"Freenode IRC network")
" to chat with the GuixSD and GNU Guix community or to get help
in real-time. You can use the chat widget below, or just use
the "
(a (@ (href "https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients"))
"IRC client")
" of your preference. Note that the conversations that happen
on the " (code "#guix") " channel are logged ("
(a (@ (href "https://gnunet.org/bot/log/guix")) "browse the log")
").")
(iframe
(@ (class "chat-widget centered-block")
(src "https://kiwiirc.com/client/irc.freenode.net/?nick=PotentialUser-?#guix")))))))

View File

@ -0,0 +1,22 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base templates menu)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base utils)
#:export (menu-t))
(define (menu-t)
"Return the Menu page in SHTML."
(theme
#:title '("Menu")
#:description "Website menu."
#:keywords '("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"GNU Guile" "Guile Scheme" "Transactional upgrades"
"Functional package management" "Reproducibility")
#:active-menu-item "Menu"
#:css (list (guix-url "static/base/css/menu.css"))))

View File

@ -0,0 +1,42 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base templates screenshot)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:export (screenshot-t))
(define (screenshot-t context)
"Return an SHTML page for the screenshot in the CONTEXT."
(let ((shot (context-datum context "screenshot"))
(shots (context-datum context "screenshots")))
(theme
#:title (list (screenshot-title shot) "Screenshots")
#:description (screenshot-caption shot)
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"GNU Guile" "Guile Scheme" "Transactional upgrades"
"Functional package management" "Reproducibility")
#:active-menu-item "Overview"
#:css (list (guix-url "static/base/css/index.css"))
#:content
`(main
(section
(@ (class "light-text centered-text noise-bg"))
(h2
(@ (class "a11y-offset"))
,(screenshot-title shot))
(img
(@ (class "responsive-image")
(src ,(screenshot-image shot))
(alt ,(screenshot-caption shot))))
(div
(@ (class "screenshots-box top-shadow-bg"))
,@(map screenshot->shtml shots)))))))

View File

@ -0,0 +1,60 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base templates security)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:export (security-t))
(define (security-t)
"Return the Security page in SHTML."
(theme
#:title '("Security")
#:description
"Important information about geting security updates for your
GuixSD or GNU Guix installation, and instructions on how to report
security issues."
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"Security updates")
#:active-menu-item "About"
#:css (list
(guix-url "static/base/css/page.css"))
#:crumbs (list (crumb "Security" "./"))
#:content
`(main
(section
(@ (class "page centered-block limit-width"))
(h2 "Security")
(h3 "How to report security issues")
(p
"To report sensitive security issues in Guix itself or the
packages it provides, you can write to the private mailing list "
(a (@ (href "https://lists.gnu.org/mailman/listinfo/guix-security"))
("guix-security@gnu.org")) ". This list is monitored by a
small team of Guix developers.")
(h3 "Release signatures")
(p
"Releases of Guix and GuixSD are signed using the OpenPGP "
"key with the fingerprint "
"3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5. "
"Users should "
(a (@ (href ,(manual-url "Binary-Installation.html"))) "verify")
" their downloads before extracting or running them.")
(h3 "Security updates")
(p
"When security vulnerabilities are found in Guix or the "
"packages provided by Guix, we will provide "
(a (@ (href ,(manual-url "Security-Updates.html"))) "security updates")
" quickly and with minimal disruption for users.")
(p
"Guix uses a \"rolling release\" model. All security "
"bug-fixes are pushed directly to the master branch. There"
" is no \"stable\" branch that only receives security fixes.")))))

View File

@ -0,0 +1,122 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base templates theme)
#:use-module (apps base templates components)
#:use-module (apps base utils)
#:export (theme))
(define* (theme #:key
(lang-tag "en")
(title '())
(description "")
(keywords '())
(active-menu-item "About")
(css '())
(scripts '())
(crumbs '())
(content '(div "")))
"Return an SHTML document using the website's theme.
LANG-TAG (string)
IETF language tag. This is used to specify the language of the
document. For example: en, en-CA. If not provided, the value
defaults to English (en).
TITLE (list)
A list of strings to form the value of the title element of the
document. The elements of the list are joined together with em
dashes as separators between them. For example, a list with two
strings like 'Hello', and 'Blog' will result in a title like
'Hello Blog GuixSD'.
DESCRIPTION (string)
The description of the document. This is the value used for the
description meta element.
KEYWORDS (list)
A list of keyword strings that will be used as the value for
the keywords meta element of the document.
ACTIVE-MENU-ITEM (string)
The label of the menu item in the navigation bar that should be
highlighted to indicate the current section of the website that
is being browsed. If not provided, the value defaults to 'About'.
CSS (list)
A list of strings that represent absolute URL paths to additional
style sheets. For example: '/static/app/css/style.css'. If not
provided, the value defaults to an empty list.
SCRIPTS (list)
A list of strings that represent absolute URL paths to additional
script files. For example: '/static/app/js/builds.js'. If not
provided, the value defaults to an empty list.
CRUMBS (list)
A list of <crumb> objects as defined in (apps base types). This
objects are used to form the breadcrumbs of the website.
CONTENT (SHTML)
A main element with the content of the page. For example:
'(main (h2 'Hello World!') (p 'Once upon a time...'))."
`((doctype "html")
(html
(@ (lang "en"))
(head
,(if (null? title)
`(title "GuixSD")
`(title ,(string-join (append title '("GuixSD")) " — ")))
(meta (@ (charset "UTF-8")))
(meta (@ (name "keywords") (content ,(string-join keywords ", "))))
(meta (@ (name "description") (content ,description)))
(meta (@ (name "viewport") (content "width=device-width, initial-scale=1.0")))
;; Menu prefetch.
(link (@ (rel "prefetch") (href ,(guix-url "menu/index.html"))))
;; Base CSS.
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/elements.css"))))
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/common.css"))))
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/messages.css"))))
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/navbar.css"))))
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/breadcrumbs.css"))))
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/buttons.css"))))
(link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/footer.css"))))
;; Additional CSS.
,@(map (lambda (style-sheet)
`(link (@ (rel "stylesheet") (href ,style-sheet))))
css)
;; Feeds.
(link (@ (type "application/atom+xml") (rel "alternate")
(title "GuixSD — Activity Feed")
(href ,(guix-url "feeds/blog.atom"))))
(link (@ (rel "icon") (type "image/png")
(href ,(guix-url "static/base/img/favicon.png"))))
;; Additional scripts.
,@(map (lambda (script)
`(script (@ (src ,script)) ""))
scripts))
(body
,(navbar #:active-item active-menu-item)
,(if (null? crumbs) "" (breadcrumbs crumbs))
,content
(footer
"Made with " (span (@ (class "metta")) "♥")
" by humans and powered by "
(a (@ (class "link-yellow") (href ,(gnu-url "software/guile/")))
"GNU Guile") ". "
(a
(@ (class "link-yellow")
(href "//git.savannah.gnu.org/cgit/guix/guix-artwork.git/tree/website"))
"Source code")
" under the "
(a
(@ (class "link-yellow")
(href ,(gnu-url "licenses/agpl-3.0.html")))
"GNU AGPL") ".")))))

177
website/apps/base/types.scm Normal file
View File

@ -0,0 +1,177 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps base types)
#:use-module (srfi srfi-9)
#:export (contact
contact?
contact-description
contact-log
contact-name
contact-url
context-datum
crumb
crumb?
crumb-label
crumb-url
screenshot
screenshot?
screenshot-caption
screenshot-image
screenshot-preview
screenshot-slug
screenshot-title))
;;;
;;; Data types.
;;;
;;; Contact (record type)
;;; ---------------------
;;;
;;; A contact object represents a contact medium such as a mailing
;;; list, IRC channel, email address, etc.
;;;
;;; Objects of this type can be created with the "contact"
;;; procedure as well (see Helper procedures below).
;;;
;;; Fields:
;;;
;;; name (string)
;;; The name of the contact medium. For example:
;;; "Development mailing list".
;;;
;;; description (SXML)
;;; A short description. For example:
;;; '(p "Discussion about the development of the GuixSD.").
;;;
;;; url (string)
;;; A URL to the main page of the contact medium.
;;;
;;; log (string)
;;; A URL to the archive or log of previous public communications
;;; help on the contact medium (empty string if there is no log).
;;;
(define-record-type <contact>
(make-contact name description url log)
contact?
(name contact-name)
(description contact-description)
(url contact-url)
(log contact-log))
;;; Helper procedures.
(define* (contact #:key (name "") (description "") (url "") (log ""))
"Return a <contact> object with the given attributes."
(make-contact name description url log))
;;; Context (association list)
;;; --------------------------
;;;
;;; A context object is a collection of data to be rendered in the
;;; template of a web resource.
;;;
;;; A context can have any number of custom keys depending on the
;;; requirements of a given template.
;;;
;;; The following is an example of a context object to be used with an
;;; SHTML template:
;;;
(define some-context
(list
(cons "LANGUAGE" "es")
(cons "CHARSET" "UTF-8")
(cons "AUTHOR" "Jane Roe")
(cons "FRIENDS" (list "John Doe" "Nyoro N." "Jack the Lad"))))
;;; Helper procedures.
(define (context-datum context key)
"Return the value of KEY in the given CONTEXT.
CONTEXT (Context)
See more information about the Context type in (apps base types).
KEY (atom)
Any atomic value allowed for association list keys."
(assoc-ref context key))
;;; Crumb (record type)
;;; -------------------
;;;
;;; A crumb object represents one of the parts of a breadcrumbs
;;; component of a website.
;;;
;;; Objects of this type can be created with the "crumb" procedure as
;;; well (see Helper procedures below).
;;;
;;; Fields:
;;;
;;; label (string)
;;; A human readable name for the crumb. For example: "Blog".
;;;
;;; url (string)
;;; The URL to the web resource related to the crumb.
;;;
(define-record-type <crumb>
(make-crumb label url)
crumb?
(label crumb-label)
(url crumb-url))
;;; Helper procedures.
(define (crumb label url)
"Return a <crumb> object with the given attributes."
(make-crumb label url))
;;; Screenshot (record type)
;;; ------------------------
;;;
;;; A screenshot object represents an image of a software view seen
;;; on a screen.
;;;
;;; Objects of this type can be created with the "screenshot"
;;; procedure (see Helper procedures below).
;;;
;;; Fields:
;;;
;;; title (string)
;;; A title for the screenshot.
;;;
;;; slug (string)
;;; Slug-like URL name for the screenshot. For example:
;;; gnome-3-desktop.
;;;
;;; image (string)
;;; A URL to the full size image of the screenshot.
;;;
;;; preview (string)
;;; A URL to a small size image of the screenshot.
;;;
;;; caption (string)
;;; A short text describing the screenshot.
;;;
(define-record-type <screenshot>
(make-screenshot title slug image preview caption)
screenshot?
(title screenshot-title)
(slug screenshot-slug)
(image screenshot-image)
(preview screenshot-preview)
(caption screenshot-caption))
;;; Helper procedures.
(define* (screenshot #:key title slug image preview caption)
"Return a <screenshot> object with the given attributes."
(make-screenshot title slug image preview caption))

199
website/apps/base/utils.scm Normal file
View File

@ -0,0 +1,199 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
;;; Copyright © 2013 Alex Sassmannshausen <alex.sassmannshausen@gmail.com>
;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
;;; Initially written by sirgazil who waives all copyright interest on this
;;; file.
;;;
;;; This file is part of GuixSD website.
;;;
;;; GuixSD website is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU Affero General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GuixSD website is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU Affero General Public License for more details.
;;;
;;; You should have received a copy of the GNU Affero General Public License
;;; along with GuixSD website. If not, see <http://www.gnu.org/licenses/>.
(define-module (apps base utils)
#:use-module (apps aux lists)
#:use-module (apps aux system)
#:use-module (apps base types)
#:use-module (haunt page)
#:use-module (ice-9 i18n)
#:use-module (srfi srfi-1)
#:export (gnu-url
guix-git-tree-url
guix-url
latest-guix-version
manual-url
number*
paginate))
;;;
;;; Guix variables.
;;;
(define guix-root-url-path
(make-parameter "/software/guix/")) ; Path to GNU Guix site in gnu.org
(define latest-guix-version
(make-parameter "0.13.0"))
;;;
;;; URL linking.
;;;
(define* (gnu-url #:optional (path ""))
"Append PATH to GNU.org URL.
PATH (string)
An optional relative URL path to a resource. For example:
'software/guile/'.
RETURN VALUE (string)
A URL. For example: https://gnu.org/software/guile/."
(string-append "https://gnu.org/" path))
(define* (guix-git-tree-url #:optional (subpath ""))
"Append SUBPATH to the URL of the GNU Guix git repository tree.
SUBPATH (string)
An optional relative URL path to a node, line or code, etc., in the
tree. For example: 'gnu/packages/games.scm';
'gnu/packages/games.scm#n4111'.
RETURN VALUE (string)
A URL path. For example:
https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/games.scm#n4111."
(string-append "https://git.savannah.gnu.org/cgit/guix.git/tree/" subpath))
(define* (guix-url #:optional (subpath ""))
"Append SUBPATH to GNU Guix root URL path (see guix-root-url-path).
SUBPATH (string)
An optional relative URL path to a resource in the GNU Guix path.
For example: 'packages/icecat-XYZ/'.
RETURN VALUE (string)
A URL path. For example: /software/guix/packages/icecat-XYZ/."
;; If we are trying out the website locally, use "/" as the root.
;; Otherwise use guix-root-url-path for deployment to gnu.org.
(if (getenv "GUIX_WEB_SITE_LOCAL")
(string-append "/" subpath)
(string-append (guix-root-url-path) subpath)))
(define* (manual-url #:optional (subpath ""))
"Append SUBPATH to the GNU Guix manual URL path.
SUBPATH (string)
An optional relative URL path to a section of the manual.
For example: 'System-installation.html'.
RETURN VALUE (string)
A URL path. For example:
/software/guix/manual/html_node/System-installation.html."
(string-append (guix-url "manual/html_node/") subpath))
;;;
;;; Helper procedures.
;;;
(define (number* number)
"Return NUMBER correctly formatting according to English conventions."
(number->locale-string number 0
(or (false-if-exception
(make-locale LC_ALL "en_US.utf8"))
(make-locale LC_ALL "en_US.UTF-8"))))
(define* (paginate #:key dataset (limit 30) base-path template (context '()) writer)
"Distribute the objects of the DATASET in pages.
DATASET (list)
A list with any kind of object.
LIMIT (integer)
The maximum number of objects that should appear in a page.
The limit is optional. If not provided, it defaults to 30.
BASE-PATH (string)
A system path relative to the website directory where all the
pages will be written to. For example: 'blog' or 'blog/tags'.
In the latter example, pages would be written to files in a path
like 'blog/tags/page/PAGE_NUMBER/index.html'.
TEMPLATE (procedure)
A procedure that accepts a context and returns an SXML tree.
CONTEXT (context)
A context object as defined in (apps base types). The context
holds additional data to insert into the TEMPLATE.
The context is optional, and will always be extended to include
the following data that can be used in the TEMPLATE:
items (list)
The list of items to insert into the page.
total-pages (integer)
The number of pages generated to distribute all items.
page-number (integer)
The number of the page.
WRITER
A procedure that writes the page into a given format. See Haunt's
'sxml->html' writer in the (haunt html) module, for example.
RETURN VALUE (list)
A list of <page> objects as defined in (haunt page) module."
(let* ((grouped-data (list-group dataset limit))
(total-pages (cons "total-pages" (length grouped-data))))
;; Read the following like (cons Page ListOfPages):
(cons
;; Page
;; This is the cover of the pages. For example, the resource
;; located in a path such as /blog/, which is identical to the
;; resource available in /blog/page/1/.
(let* ((page-number (cons "page-number" 1))
(path (path-join base-path "index.html"))
(items
(cons "items" (first grouped-data)))
(new-context
(append context
(list items page-number total-pages))))
(make-page path (template new-context) writer))
;; ListOfPages
;; This is a list of pages that are the actual ordered pages
;; located in paths such as /blog/page/NUMBER/.
(map
(lambda (index)
(let* ((page-number (cons "page-number" (+ index 1)))
(path (path-join base-path
"page"
(number->string (+ index 1))
"index.html"))
(items (cons "items" (list-ref grouped-data index)))
(new-context
(append context (list items page-number total-pages))))
(make-page path (template new-context) writer)))
(iota (length grouped-data))))))

View File

@ -0,0 +1,145 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waives all
;;; copyright interest on this file.
(define-module (apps blog builder)
#:use-module (apps aux system)
#:use-module (apps aux web)
#:use-module (apps base utils)
#:use-module (apps blog templates feed)
#:use-module (apps blog templates post-list)
#:use-module (apps blog templates post)
#:use-module (apps blog templates tag)
#:use-module (apps blog utils)
#:use-module (haunt html)
#:use-module (haunt page)
#:use-module (haunt post)
#:use-module (haunt site)
#:use-module (haunt utils)
#:use-module (sxml simple)
#:export (builder))
;;;
;;; Application builder.
;;;
(define (builder site posts)
"Return the list of web resources that compose the app.
This procedure is a Haunt builder procedure.
SITE (<site>)
A site object that defines all the properties of the website. See
Haunt <site> objects for more information.
POSTS (list of <post>)
A list of post objects that represent articles from the blog. See
Haunt <post> objects for more information.
RETURN (list of <page>)
A list of page objects that represent the web resources of the
application. See Haunt <page> objects for more information."
(flatten
(list
(blog-feed-builder site posts)
(post-list-builder posts)
(posts-builder posts)
(tag-feed-builder site posts)
(tags-builder posts))))
;;;
;;; Helper builders.
;;;
(define (blog-feed-builder site posts)
"Return a Haunt page representing the atom feed of the blog."
(let* ((domain (site-domain site))
(context
(list
(cons "domain" domain)
(cons "title" "GuixSD — Blog")
(cons "id" (url-path-join domain "feeds" "blog.atom"))
(cons "alternate" (url-path-join domain "blog" ""))
(cons "posts" (posts/reverse-chronological posts)))))
(make-page (path-join "feeds" "blog.atom")
(atom-feed-t context)
sxml->xml)))
(define (post-list-builder posts)
"Return a list of Haunt pages representing paginated POSTS."
(let ((context
(list
(cons "tags" (post-groups->tag-list
(posts/group-by-tag posts))))))
(paginate #:dataset (posts/reverse-chronological posts)
#:base-path "blog"
#:template post-list-t
#:context context
#:writer sxml->html)))
(define (posts-builder posts)
"Return a list of Haunt pages representing blog posts."
(map
(lambda (post)
(let ((context (list (cons "post" post))))
(make-page (path-join (post-url-path post) "index.html")
(post-t context)
sxml->html)))
posts))
(define (tag-feed-builder site posts)
"Return a Haunt page representing the atom feed of a blog topic."
(let ((post-groups (posts/group-by-tag posts)))
(map
(lambda (tagged-posts)
(let* ((domain (site-domain site))
(tag-name (car tagged-posts))
(tag-slug (slugify tag-name))
(file-name (string-append tag-slug ".atom"))
(context
(list
(cons "domain" domain)
(cons "title"
(string-append "GuixSD — Blog — " tag-name))
(cons "id" (url-path-join domain
"feeds"
"blog"
file-name))
(cons "alternate" (url-path-join domain
"blog"
"tags"
tag-slug
""))
(cons "posts"
(posts/reverse-chronological (cdr tagged-posts))))))
(make-page (path-join "feeds" "blog" file-name)
(atom-feed-t context)
sxml->xml)))
post-groups)))
(define (tags-builder posts)
"Return a list of lists of Haunt pages representing POSTS grouped by
tag.
Each list of pages corresponds to the paginated blog posts of one
tag."
(let ((post-groups (posts/group-by-tag posts)))
(map
(lambda (tagged-posts)
(let ((context
(list
(cons "tag" (car tagged-posts))
(cons "tags" (post-groups->tag-list post-groups)))))
(paginate #:dataset (cdr tagged-posts)
#:base-path (tag-system-path (car tagged-posts))
#:template tag-t
#:context context
#:writer sxml->html)))
post-groups)))

View File

@ -0,0 +1,76 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps blog templates components)
#:use-module (apps aux strings)
#:use-module (apps aux sxml)
#:use-module (apps aux web)
#:use-module (apps base utils)
#:use-module (apps blog utils)
#:use-module (haunt post)
#:use-module (srfi srfi-19)
#:export (post-preview
sidebar))
;;;
;;; Components.
;;;
(define (post-preview post)
"Return an SHTML representation of the given post object.
POST (<post>)
A post object (see Haunt's manual for more information)."
`(a
(@ (class "item-preview")
(href ,(guix-url (url-path-join (post-url-path post) ""))))
(h3 ,(post-ref post 'title))
(p
(@ (class "item-date"))
,(date->string (post-date post) "~B ~e, ~Y"))
(p
(@ (class "item-summary"))
,(string-summarize (sxml->string* (post-sxml post)) 30)
"…")))
(define* (sidebar tags #:optional (current-tag #false))
"Return an SHTML section element representing the sidebar of the blog.
TAGS (association list)
An association list of tags mapped to blog posts as returned by
Haunt's 'posts/group-by-tag' procedure in (haunt post) module."
`(section
(@ (class "side-bar"))
(h3 (@ (class "a11y-offset")) "Blog menu: ")
(h4
(@ (class "bar-title bar-title-top"))
,(if current-tag
"Get topic updates"
"Get blog updates"))
(ul
(@ (class "bar-list"))
(li (@ (class "bar-item"))
(a (@ (class "bar-link feed-link")
,(if current-tag
`(href ,(guix-url
(url-path-join "feeds" "blog"
(string-append
(slugify current-tag)
".atom"))))
`(href ,(guix-url (url-path-join "feeds" "blog.atom")))))
" Atom feed")))
(h4 (@ (class "bar-title")) "Posts by topic")
(ul
(@ (class "bar-list"))
,@(map
(lambda (tag)
`(li (@ (class "bar-item"))
(a (@ (class "bar-link")
(href ,(guix-url (url-path-join (tag-url-path tag) ""))))
,tag)))
(sort tags tag-first?)))))

View File

@ -0,0 +1,54 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps blog templates feed)
#:use-module (apps aux strings)
#:use-module (apps aux sxml)
#:use-module (apps aux web)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:use-module (apps blog utils)
#:use-module (haunt post)
#:use-module (srfi srfi-19)
#:export (atom-feed-t))
(define (atom-feed-t context)
"Return an SXML representation of a Blog's topic atom feed."
(let ((domain (context-datum context "domain"))
(title (context-datum context "title"))
(id (context-datum context "id"))
(alternate (context-datum context "alternate"))
(posts (context-datum context "posts")))
`(feed
;; Feed info.
(@ (xmlns "http://www.w3.org/2005/Atom"))
(id ,id)
(title ,title)
(author (name "GuixSD") (uri ,domain))
(icon ,(guix-url "static/base/img/favicon.png"))
(updated ,(date->string (current-date) "~4"))
(link (@ (rel "alternate") (href ,alternate)))
;; Feed entries.
,@(map
(lambda (post)
`(entry
(id ,(url-path-join domain (post-url-path post) ""))
(title ,(post-ref post 'title))
(author (name ,(post-ref post 'author)))
(published ,(date->string (post-date post) "~4"))
(updated ,(date->string (post-date post) "~4"))
;(rights (@ (type "text")) ,(post-copyright post))
(link (@ (rel "alternate")
(href ,(url-path-join domain
(post-url-path post)
""))))
,@(map
(lambda (tag)
`(category (@ (term ,tag))))
(post-ref post 'tags))
(summary ,(string-summarize (sxml->string* (post-sxml post)) 100) "…")))
posts))))

View File

@ -0,0 +1,57 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps blog templates post-list)
#:use-module (apps aux web)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:use-module ((apps blog templates components) #:prefix blog:)
#:export (post-list-t))
(define (post-list-t context)
"Return a list of blog posts in SHTML with the data in CONTEXT."
(let ((page-number
(number->string (context-datum context "page-number")))
(total-pages
(number->string (context-datum context "total-pages"))))
(theme
#:title (list (string-append "Page " page-number) "Blog")
#:description
"Blog posts about GuixSD and the GNU Guix package manager."
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"GNU Guile" "Guile Scheme" "Transactional upgrades"
"Functional package management" "Reproducibility")
#:active-menu-item "Blog"
#:css
(list (guix-url "static/base/css/page.css")
(guix-url "static/base/css/item-preview.css")
(guix-url "static/base/css/sidebar.css"))
#:crumbs
(list (crumb "Blog" (guix-url "blog/"))
(crumb (string-append "Page " page-number)
(guix-url (url-path-join "blog"
"page"
page-number
""))))
#:content
`(main
(section
(@ (class "page centered-text"))
(h2 "Blog"
,(page-indicator (string->number page-number)
(string->number total-pages)))
(div
(@ (class "sheet"))
,@(map blog:post-preview (context-datum context "items"))
,(page-selector (string->number total-pages)
(string->number page-number)
(guix-url "blog")))
,(blog:sidebar (context-datum context "tags")))))))

View File

@ -0,0 +1,60 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps blog templates post)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:use-module (apps blog utils)
#:use-module ((apps blog templates components) #:prefix blog:)
#:use-module (haunt post)
#:use-module (srfi srfi-19)
#:export (post-t))
(define (post-t context)
"Return a page in SHTML for the post in the given CONTEXT."
(let* ((post (context-datum context "post"))
(tags (post-ref post 'tags)))
(theme
#:title (list (post-ref post 'title)
(date->string (post-date post) "~Y")
"Blog")
#:description
"Blog posts about GuixSD and the GNU Guix package manager."
#:keywords tags
#:active-menu-item "Blog"
#:css
(list (guix-url "static/base/css/page.css")
(guix-url "static/base/css/code.css")
(guix-url "static/blog/css/post.css"))
#:crumbs
(list (crumb "Blog" (guix-url "blog/"))
(crumb (post-ref post 'title)
(guix-url (post-url-path post))))
#:content
`(main
(article
(@ (class "page centered-block limit-width"))
(h2 ,(post-ref post 'title))
(p
(@ (class "post-metadata centered-text"))
,(post-ref post 'author) " — "
,(date->string (post-date post) "~B ~d, ~Y"))
,(syntax-highlight (post-sxml post))
(div
(@ (class "tag-list"))
(p "Related topics:")
,@(map
(lambda (tag)
(list
(button-little
#:label tag
#:url (guix-url (tag-url-path tag)))
" ")) ; NOTE: Force space for readability in non-CSS browsers.
(sort tags tag-first?))))))))

View File

@ -0,0 +1,62 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps blog templates tag)
#:use-module (apps aux web)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:use-module ((apps blog templates components) #:prefix blog:)
#:use-module (apps blog utils)
#:export (tag-t))
(define (tag-t context)
"Return a list of blog posts in SHTML with the data in CONTEXT."
(let ((tag (context-datum context "tag"))
(page-number
(number->string (context-datum context "page-number")))
(total-pages
(number->string (context-datum context "total-pages"))))
(theme
#:title (list (string-append "Page " page-number) tag "Blog")
#:description
(string-append "Blog posts about "
tag
"on GuixSD and the GNU Guix package manager.")
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"GNU Guile" "Guile Scheme" "Transactional upgrades"
"Functional package management" "Reproducibility")
#:active-menu-item "Blog"
#:css
(list (guix-url "static/base/css/page.css")
(guix-url "static/base/css/item-preview.css")
(guix-url "static/base/css/sidebar.css"))
#:crumbs
(list (crumb "Blog" (guix-url "blog/"))
(crumb tag (guix-url (tag-url-path tag)))
(crumb (string-append "Page " page-number)
(guix-url (url-path-join (tag-url-path tag)
"page"
page-number
""))))
#:content
`(main
(section
(@ (class "page centered-text"))
(h2 "Blog — " ,tag
,(page-indicator (string->number page-number)
(string->number total-pages)))
(div
(@ (class "sheet"))
,@(map blog:post-preview (context-datum context "items"))
,(page-selector (string->number total-pages)
(string->number page-number)
(guix-url "blog")))
,(blog:sidebar (context-datum context "tags") tag))))))

View File

@ -16,23 +16,88 @@
;;; You should have received a copy of the GNU Affero General Public License
;;; along with GuixSD website. If not, see <http://www.gnu.org/licenses/>.
(define-module (www news)
#:use-module (www utils)
#:use-module (www shared)
#:use-module (haunt site)
(define-module (apps blog utils)
#:use-module (apps aux lists)
#:use-module (apps aux web)
#:use-module (haunt post)
#:use-module (haunt builder blog)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-19)
#:use-module (syntax-highlight)
#:use-module (syntax-highlight scheme)
#:use-module (syntax-highlight lexers)
#:use-module (ice-9 match)
#:use-module (srfi srfi-19)
#:export (post-url
%news-haunt-theme))
#:export (post-groups->tag-list
post-url-path
posts/latest
syntax-highlight
tag-first?
tag-system-path
tag-url-path))
(define (post-url post site)
"Return the URL of POST, a Haunt blog post, for SITE."
(base-url (string-append "news/" (site-post-slug site post) ".html")))
(define (post-groups->tag-list groups)
"Return a list of Haunt tags from the list of grouped posts.
GROUPS (association list)
An association list of tags mapped to posts, as returned by the
posts/group-by-tag procedure from (haunt post) module."
(cond ((null? groups) '())
(else
(cons (car (first groups))
(post-groups->tag-list (rest groups))))))
(define (post-url-path post)
"Return a URL path for the POST in the form blog/YYYY/POST-SLUG.
POST (<post>)
A post object as defined in (haunt post) module."
(url-path-join "blog"
(date->string (post-date post) "~Y")
(post-slug post)))
(define (posts/latest posts n)
"Return the latest N posts from the given list of posts."
(let ((latest-posts (posts/reverse-chronological posts)))
(cond
((null? posts) '())
((<= (length posts) n) latest-posts)
(else (list-head latest-posts n)))))
(define (tag-first? tag-a tag-b)
"Return true if TAG-A goes first than TAG-B alphabetically.
This predicate is used for sorting tags.
TAG-A, TAG-B (string)
A tag as used by Haunt posts. For example: 'User interface'."
(string<? (string-downcase tag-a) (string-downcase tag-b)))
(define (tag-system-path tag)
"Return a system path for the TAG in the form blog/tags/TAG-SLUG.
The path is relative to the website directory.
TAG (string)
A tag as used by Haunt posts. For example: 'Scheme API'."
(string-append "blog/tags/" (slugify tag)))
(define (tag-url-path tag)
"Return a URL path for the TAG in the form blog/tags/TAG-SLUG.
TAG (string)
A tag as used by Haunt posts. For example: 'Scheme API'."
(url-path-join "blog" "tags" (slugify tag)))
;;;
;;; Syntax highlighting.
;;;
(define %default-special-prefixes
'("define" "syntax"))
@ -61,50 +126,3 @@
`(,tag ,@(map syntax-highlight body)))
((? string? str)
str)))
(define* (post->sxml post #:key post-uri)
"Return the SXML for POST."
`(div (h2 (@ (class "title"))
,(if post-uri
`(a (@ (href ,post-uri))
,(post-ref post 'title))
(post-ref post 'title)))
(div (@ (class "post-about"))
,(post-ref post 'author)
" — " ,(date->string (post-date post) "~B ~e, ~Y"))
(div (@ (class "post-body"))
,(syntax-highlight (post-sxml post)))))
(define (news-page-sxml site title posts prefix)
"Return the SXML for the news page of SITE, containing POSTS."
`((div (@ (class "news-header"))
(h1 "Recent News "
(a (@ (href ,(base-url "news/feed.xml")))
(img (@ (alt "Atom feed")
(src ,(image-url "feed.png")))))))
(div (@ (class "post-list"))
,@(map (lambda (post)
(post->sxml post #:post-uri (post-url post site)))
posts))))
(define (base-layout body)
`((doctype "html")
(html (@ (lang "en"))
,(html-page-header "News" #:css "news.css")
(body
,(html-page-description)
,(html-page-links)
(div (@ (id "content-box"))
(article ,body))
,(html-page-footer)))))
(define %news-haunt-theme
;; Theme for the rendering of the news pages.
(theme #:name "GuixSD"
#:layout (lambda (site title body)
(base-layout body))
#:post-template post->sxml
#:collection-template news-page-sxml))

View File

@ -0,0 +1,46 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waives all
;;; copyright interest on this file.
(define-module (apps download builder)
#:use-module (apps download templates download)
#:use-module (apps download data)
#:use-module (haunt html)
#:use-module (haunt page)
#:export (builder))
;;;
;;; Application builder.
;;;
(define (builder site posts)
"Return the list of web resources that compose the app.
This procedure is a Haunt builder procedure.
SITE (<site>)
A site object that defines all the properties of the website. See
Haunt <site> objects for more information.
POSTS (list of <post>)
A list of post objects that represent articles from the blog. See
Haunt <post> objects for more information.
RETURN (list of <page>)
A list of page objects that represent the web resources of the
application. See Haunt <page> objects for more information."
(list (download-builder)))
;;;
;;; Helper builders.
;;;
(define (download-builder)
"Return a Haunt page representing the Download page of the website."
(let ((context
(list
(cons "downloads" system-downloads))))
(make-page "download/index.html" (download-t context) sxml->html)))

View File

@ -0,0 +1,72 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps download data)
#:use-module (apps base utils)
#:use-module (apps download types)
#:export (system-downloads))
;;;
;;; Data.
;;;
(define system-downloads
(list
(download
#:title (string-append "GuixSD " (latest-guix-version))
#:description
`(div
(div
(@ (class "message-box msg-info"))
(span (@ (class "msg-label")) "Note ")
"The Guix System Distribution (GuixSD) is beta software, "
"which means it is "
(a
(@ (href ,(manual-url "Limitations.html")))
"not production-ready")
". But you can "
(a (@ (href ,(guix-url "contribute"))) "help") "!")
(p "USB installer of the Guix System Distribution."))
#:image (guix-url "static/base/img/GuixSD-package.png")
#:base-url (string-append "https://alpha.gnu.org/gnu/guix/guixsd-usb-install-"
(latest-guix-version) ".")
#:variants (list (variant "x86_64" "x86_64-linux.xz")
(variant "i686" "i686-linux.xz"))
#:manual (manual-url "System-Installation.html"))
(download
#:title (string-append "GuixSD " (latest-guix-version) " QEMU Image")
#:description
`(div
(p "QCOW2 virtual machine (VM) image."))
#:image (guix-url "static/base/img/QEMU-package.png")
#:base-url (string-append "https://alpha.gnu.org/gnu/guix/guixsd-vm-image-"
(latest-guix-version) ".")
#:variants (list (variant "x86_64" "x86_64-linux.xz"))
#:manual (manual-url "Installing-GuixSD-in-a-VM.html"))
(download
#:title (string-append "GNU Guix " (latest-guix-version) " Binary")
#:description
'(p
"Self-contained tarball providing binaries for Guix and for
all its dependencies.")
#:image (guix-url "static/base/img/Guix-package.png")
#:base-url (string-append "https://alpha.gnu.org/gnu/guix/guix-binary-"
(latest-guix-version) ".")
#:variants (list (variant "x86_64" "x86_64-linux.tar.xz")
(variant "i686" "i686-linux.tar.xz")
(variant "armhf" "armhf-linux.tar.xz"))
#:manual (manual-url "Binary-Installation.html"))
(download
#:title (string-append "GNU Guix " (latest-guix-version) " Source")
#:description '(p "Source code distribution.")
#:image (guix-url "static/base/img/src-package.png")
#:base-url (string-append "https://alpha.gnu.org/gnu/guix/guix-"
(latest-guix-version) ".")
#:variants (list (variant "tarball" "tar.gz"))
#:manual (manual-url "Requirements.html"))))

View File

@ -0,0 +1,49 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps download templates components)
#:use-module (apps download types)
#:export (download))
;;;
;;; Components.
;;;
(define (download dnd)
"Return an SHTML representation of the given download object.
DND (<download>)
A download object as defined in (apps download types)."
`(div
(@ (class "download-box"))
(img (@ (src ,(download-image dnd)) (alt "")))
(h3 ,(download-title dnd))
,(download-description dnd)
(p "Download options:")
,@(map (lambda (variant)
`(a
(@ (class "download-btn")
(download "")
(href ,(string-append
(download-base-url dnd)
(variant-file variant))))
,(variant-label variant)
" ")) ; Force a space for readability in non-CSS browsers.
(download-variants dnd))
(p
"Signatures: "
,@(map (lambda (variant)
`(a
(@ (class "signature-btn")
(download "")
(href ,(string-append
(download-base-url dnd)
(variant-file variant) ".sig")))
,(variant-label variant)
" ")) ; Force a space for readability in non-CSS browsers.
(download-variants dnd)))
(p (a (@ (href ,(download-manual dnd))) "Installation instructions") ".")))

View File

@ -0,0 +1,65 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps download templates download)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:use-module (apps download templates components)
#:export (download-t))
(define (download-t context)
"Return the Download page in SHTML."
(theme
#:title '("Download")
#:description
"Installers and source files for the Guix System distribution
(GuixSD), and the GNU Guix package manager. GNU Guix can be
installed on different GNU/Linux distributions."
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"Installer" "Source code" "Package manager")
#:active-menu-item "Download"
#:css (list
(guix-url "static/base/css/page.css")
(guix-url "static/base/css/download.css"))
#:crumbs (list (crumb "Download" "./"))
#:content
`(main
(section
(@ (class "page"))
(h2 "Download")
(p
(@ (class "centered-block limit-width"))
"As of version " ,(latest-guix-version)
", the Guix System Distribution "
(a
(@ (href ,(manual-url "System-Installation.html")))
"can be installed")
" on an i686 or x86_64 machine. It uses the "
(a (@ (href ,(gnu-url "software/linux-libre"))) "Linux-Libre")
" kernel and the "
(a (@ (href ,(gnu-url "software/shepherd"))) "GNU Shepherd")
" init system. Alternately, its package manager, GNU Guix,
can be installed as an additional package manager on top of an
installed Linux-based system.")
(div
(@ (class "centered-text"))
,@(map download (context-datum context "downloads")))
(p
(@ (class "centered-block limit-width"))
"Source code for the Guix System Distribution USB installation
images as well as GNU Guix can be found on the GNU ftp server
for " (em "alpha") " releases: "
(a (@ (href "http://alpha.gnu.org/gnu/guix/"))
"http://alpha.gnu.org/gnu/guix/")
" (via HTTP) and "
(a (@ (href "ftp://alpha.gnu.org/gnu/guix/"))
"ftp://alpha.gnu.org/gnu/guix/")
" (via FTP). ")))))

View File

@ -0,0 +1,105 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps download types)
#:use-module (srfi srfi-9)
#:export (download
download?
download-base-url
download-description
download-image
download-manual
download-title
download-variants
variant
variant?
variant-label
variant-file
make-download
make-variant))
;;;
;;; Data types.
;;;
;;; Download (record type)
;;; ----------------------
;;;
;;; A download object represents an item that can be downloaded in one
;;; or several flavors.
;;;
;;; Objects of this type can be created with the "download"
;;; procedure as well (see Helper procedures below).
;;;
;;; Fields:
;;;
;;; title (string)
;;; The human readable name of the download. For example:
;;; "GuixSD Installer".
;;;
;;; description (SXML)
;;; A description of the download. For example:
;;; '(p "Graphical installer of the Guix System Distribution.")
;;;
;;; image (string)
;;; A URL to an illustrative image for the download.
;;;
;;; base-url (string)
;;; The base URL where all the variants of the download can be
;;; found. For example:
;;; "https://alpha.gnu.org/gnu/guix/guixsd-usb-install-0.12.0"
;;;
;;; variants (list)
;;; A list of <variant> objects that represent the different flavors
;;; available for download.
;;;
;;; manual (string)
;;; A URL to the instructions for the download.
;;;
(define-record-type <download>
(make-download title description image base-url variants manual)
download?
(title download-title)
(description download-description)
(image download-image)
(base-url download-base-url)
(variants download-variants)
(manual download-manual))
;;; Helper procedures.
(define* (download #:key title description image base-url variants manual)
"Return a <download> object with the given attributes."
(make-download title description image base-url variants manual))
;;; Variant (record type)
;;; ---------------------
;;;
;;; A variant object represents a specific file that can be downloaded.
;;;
;;; Objects of this type can be created with the "variant" procedure
;;; as well (see Helper procedures below).
;;;
;;; Fields:
;;;
;;; label (string)
;;; A human readable name for the variant. For example: "Manual (PDF)".
;;;
;;; file (string)
;;; The file name. For example: "manual.pdf".
;;;
(define-record-type <variant>
(make-variant label file)
variant?
(label variant-label)
(file variant-file))
;;; Helper procedures.
(define (variant label file)
"Return a <variant> object with the given attributes."
(make-variant label file))

View File

@ -0,0 +1,134 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waives all
;;; copyright interest on this file.
(define-module (apps packages builder)
#:use-module (apps aux lists)
#:use-module (apps aux system)
#:use-module (apps base utils)
#:use-module (apps packages data)
#:use-module (apps packages templates detailed-index)
#:use-module (apps packages templates index)
#:use-module (apps packages templates detailed-package-list)
#:use-module (apps packages templates package)
#:use-module (apps packages templates package-list)
#:use-module (apps packages types)
#:use-module (apps packages utils)
#:use-module (haunt html)
#:use-module (haunt page)
#:use-module (haunt utils)
#:export (builder))
;;;
;;; Application builder.
;;;
(define (builder site posts)
"Return the list of web resources that compose the app.
This procedure is a Haunt builder procedure.
SITE (<site>)
A site object that defines all the properties of the website. See
Haunt <site> objects for more information.
POSTS (list of <post>)
A list of post objects that represent articles from the blog. See
Haunt <post> objects for more information.
RETURN (list of <page>)
A list of page objects that represent the web resources of the
application. See Haunt <page> objects for more information."
(flatten
(list
;; TODO: Remove these builders when the bug described below is fixed.
(detailed-index-builder)
(detailed-package-list-builder)
;; -----------------------------------------------------------------
;; BUG: These builders are commented out because of a bug using dots
;; in directory names:
;;
;; https://bitbucket.org/sirgazil/guixsd-website/issues/47/
;;
;; However, they build the pages that implement the latest design
;; proposed for the website in Guix(SD) bug #26006.
;;
;;(index-builder)
;;(packages-builder)
;;(package-list-builder)
)))
;;;
;;; Helper builders.
;;;
(define (index-builder)
"Return a Haunt page listing some random packages."
;; TODO: Pass ~30 random Guix packages.
(let ((context (list (cons "packages" (all-packages)))))
(make-page "packages/index.html" (index-t context) sxml->html)))
(define (detailed-index-builder)
"Return a Haunt page listing some random packages."
;; TODO: Pass ~30 random Guix packages.
(let ((context (list (cons "packages" (all-packages)))))
(make-page "packages/index.html" (detailed-index-t context) sxml->html)))
(define (detailed-package-list-builder)
"Return a list of grouped Haunt pages listing Guix packages.
Each group is a list of page objects corresponding to paginated
packages starting with a specific letter."
(let ((package-groups (packages/group-by-letter (all-packages))))
(map
(lambda (package-group)
(let* ((letter (car package-group))
(context
(list
(cons "letter" letter))))
(paginate #:dataset (cdr package-group)
#:limit 100
#:base-path (path-join "packages" letter)
#:template detailed-package-list-t
#:context context
#:writer sxml->html)))
package-groups)))
(define (packages-builder)
"Return a list of Haunt pages for each Guix package."
(map
(lambda (package)
(let ((context (list (cons "package" package))))
(make-page
(path-join (package-url-path package) "index.html")
(package-t context)
sxml->html)))
(all-packages)))
(define (package-list-builder)
"Return a list of grouped Haunt pages listing Guix packages.
Each group is a list of page objects corresponding to paginated
packages starting with a specific letter."
(let ((package-groups (packages/group-by-letter (all-packages))))
(map
(lambda (package-group)
(let* ((letter (car package-group))
(context
(list
(cons "letter" letter))))
(paginate #:dataset (cdr package-group)
#:limit 100
#:base-path (path-join "packages" letter)
#:template package-list-t
#:context context
#:writer sxml->html)))
package-groups)))

View File

@ -0,0 +1,52 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
;;; Copyright © 2013 Alex Sassmannshausen <alex.sassmannshausen@gmail.com>
;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
;;; Initially written by sirgazil who waives all copyright interest on this
;;; file.
;;;
;;; This file is part of GuixSD website.
;;;
;;; GuixSD website is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU Affero General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GuixSD website is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU Affero General Public License for more details.
;;;
;;; You should have received a copy of the GNU Affero General Public License
;;; along with GuixSD website. If not, see <http://www.gnu.org/licenses/>.
(define-module (apps packages data)
#:use-module (gnu packages)
#:use-module (guix packages)
#:export (all-packages
alphabet))
(define alphabet
(list "0-9" "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M"
"N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"))
(define (all-packages)
"Return the list of all Guix package objects, sorted by name.
If GUIX_WEB_SITE_LOCAL=yes, return only 300 packages for
testing the website."
(let ((packages (sort (fold-packages (lambda (package lst)
(cons (or (package-replacement package)
package)
lst))
'())
(lambda (p1 p2)
(string<? (package-name p1)
(package-name p2))))))
(cond ((null? packages) '())
((getenv "GUIX_WEB_SITE_LOCAL") (list-head packages 300))
(else packages))))

View File

@ -0,0 +1,219 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps packages templates components)
#:use-module (apps aux lists)
#:use-module (apps aux strings)
#:use-module (apps aux web)
#:use-module (apps base templates components)
#:use-module (apps base utils)
#:use-module (apps packages data)
#:use-module (apps packages types)
#:use-module (apps packages utils)
#:use-module (guix licenses)
#:use-module (guix packages)
#:export (detailed-package-preview
issue-count->shtml
lint-issue->shtml
package-preview
sidebar))
;;;
;;; Components.
;;;
(define (detailed-package-preview package)
"Return an SHTML div element representing the given PACKAGE object.
PACKAGE (<package>)
A package object as defined in the GNU Guix API reference."
`(div
(@ (class "package-preview"))
(h3
(@ (class "package-name"))
,(package-name package) " " ,(package-version package) " "
,(if (package-issues? package) '(span (@ (class "red-tag")) "") " ")
(span
(@ (class "package-synopsis"))
" — "
,(package-synopsis package)))
(p
(@ (class "package-description"))
,(package-description package))
(ul
(@ (class "package-info"))
(li (b "License:") " "
,(license->shtml (package-license package))
".")
(li (b "Website:") " "
,(link-subtle #:label (package-home-page package)
#:url (package-home-page package)) ".")
(li (b "Package source:") " "
,(let* ((l (package-location package))
(ilink (location->ilink l)))
(link-subtle #:label (ilink-name ilink)
#:url (ilink-url ilink)))
".")
(li (b "Patches:") " "
,(patches->shtml (package-patches package))
".")
(li (b "Lint issues:") " "
,(if (null? (package-lint-issues package))
"No"
(link-subtle #:label "Yes"
#:url (guix-url "packages/issues/")))
".")
(li (b "Builds:") " " ,(supported-systems->shtml package) "."))))
(define (issue-count->shtml count)
"Return an SHTML representation of COUNT in the form 'X issue(s)'.
COUNT (natural)
A natural number.
RETURN (shtml)
A span element if the count is 0. A mark element otherwise."
`(,(if (> count 0) 'mark 'span)
,(number->string count)
,(if (= count 1) " issue" " issues")))
(define (license->shtml license)
"Return an SHTML representation of the LICENSE.
LICENSE (itemization)
One of two types of object:
A <license> object as defined in the (apps packages types)
module.
A list of <license> objects.
RETURN (shtml)
One or more links to the licenses."
(cond ((license? license)
(link-subtle #:label (license-name license)
#:url (license-uri license)))
(else
(separate
(map (lambda (l) ; a license object.
(link-subtle #:label (license-name l)
#:url (license-uri l)))
license)
", "))))
(define (lint-issue->shtml issue)
"Return an SHTML div element representing the given ISSUE object.
ISSUE (<lint-issue>)
A lint issue object as defined in the (apps packages types) module."
`(div
(@ (class "lint-issue"))
(p (@ (class "lint-issue-type")) ,(lint-issue-type issue) ":")
(pre ,(lint-issue-description issue))))
(define (package-preview package)
"Return an SHTML a element representing the given PACKAGE object.
PACKAGE (<package>)
A package object as defined in the GNU Guix API reference."
`(a
(@ (class "item-preview")
(href ,(guix-url (url-path-join (package-url-path package) ""))))
(h3 ,(package-name package) " " ,(package-version package))
(p
(@ (class "item-summary"))
,(string-summarize (package-description package) 30)
"…")))
(define (patches->shtml patches)
"Return an SHTML representation of PATCHES.
PATCHES (list)
A list of <link> objects as defined in (apps packages types)
module.
RETURN (shtml)
If the list of patches is empty, return the string 'None'.
Otherwise, return a list of links to patches."
(if (null? patches)
"None"
(separate
(map (lambda (patch)
(link-subtle #:label (link-name patch)
#:url (link-url patch)))
patches)
", ")))
(define* (sidebar #:optional (active-letter ""))
"Return an SHTML section element representing the sidebar of the
package list.
ACTIVE-LETTER (string)
The letter in which the current packages are listed."
`(section
(@ (class "side-bar"))
(h3 (@ (class "a11y-offset")) "Packages menu: ")
(h4 (@ (class "bar-title bar-title-top")) "Browse alphabetically")
(div
(@ (class "bar-box-padded"))
,@(map
(lambda (letter)
(list
(button-little
#:label letter
#:url (guix-url (url-path-join "packages" letter ""))
#:active (string=? letter active-letter))
" ")) ; NOTE: Force space for readability in non-CSS browsers.
alphabet))
(h4 (@ (class "bar-title")) "Packages Issues")
(ul
(@ (class "bar-list"))
(li (@ (class "bar-item"))
(a (@ (class "bar-link")
(href ,(guix-url "packages/issues/lint/"))) "Lint"))
(li (@ (class "bar-item"))
(a (@ (class "bar-link")
(href ,(guix-url "packages/issues/reproducibility/")))
"Reproducibility")))))
(define (supported-systems->shtml package)
"Return a list of SHTML a links to SYSTEMS builds.
SYSTEMS (<package>)
A package object as defined in Guix API.
RETURN (shtml)
If the list of supported systems of the package is empty, return
the string 'None'. Otherwise, return a list of links to systems
builds in hydra."
(let ((build-url "http://hydra.gnu.org/job/gnu/master/")
(package-id (string-append (package-name package)
"-"
(package-version package)))
(systems (package-supported-systems package)))
(if (null? systems)
"None"
(separate
(map (lambda (system)
(link-subtle #:label system
#:url (string-append build-url
package-id
"."
system)))
systems)
", "))))

View File

@ -0,0 +1,60 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps packages templates detailed-index)
#:use-module (apps aux web)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:use-module (apps packages templates components)
#:use-module (srfi srfi-19)
#:export (detailed-index-t))
(define (detailed-index-t context)
"Return SHTML index page for the package app."
(let ((packages (context-datum context "packages")))
(theme
#:title (list "Packages")
#:description
"List of packages available for the Guix System Distribution
(GuixSD) and foreign GNU/Linux distributions through the GNU
Guix package manager."
#:keywords
(list "GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"GNU Guile" "Guile Scheme" "Transactional upgrades"
"Functional package management" "Reproducibility")
#:active-menu-item "Packages"
#:css
(list (guix-url "static/base/css/page.css")
(guix-url "static/base/css/item-preview.css")
(guix-url "static/base/css/sidebar.css")
(guix-url "static/packages/css/package-list.css"))
#:crumbs
(list (crumb "Packages" (guix-url "packages/")))
#:content
`(main
(section
(@ (class "page centered-text"))
(h2 "Packages")
(p
(@ (class "limit-width centered-block"))
"GNU Guix provides " ,(number* (length packages))
" packages transparently "
(a (@ (href "http://hydra.gnu.org/jobset/gnu/master#tabs-status"))
"available as pre-built binaries")
". These pages provide a complete list of the packages. Our "
(a (@ (href "http://hydra.gnu.org/jobset/gnu/master"))
"continuous integration system")
" shows their current build status "
"(updated " ,(date->string (current-date) "~B ~e, ~Y") ").")
(div
(@ (class "sheet sheet-padded justify-left"))
,@(map detailed-package-preview packages))
,(sidebar))))))

View File

@ -0,0 +1,66 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps packages templates detailed-package-list)
#:use-module (apps aux web)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:use-module (apps packages templates components)
#:export (detailed-package-list-t))
(define (detailed-package-list-t context)
"Return an SHTML page listing the packages in the CONTEXT."
(let ((letter (context-datum context "letter"))
(page-number
(number->string (context-datum context "page-number")))
(total-pages
(number->string (context-datum context "total-pages"))))
(theme
#:title (list (string-append "Page " page-number) letter "Packages")
#:description
"List of packages available for the Guix System Distribution
(GuixSD) and foreign GNU/Linux distributions through the GNU
Guix package manager."
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"GNU Guile" "Guile Scheme" "Transactional upgrades"
"Functional package management" "Reproducibility")
#:active-menu-item "Packages"
#:css
(list (guix-url "static/base/css/page.css")
(guix-url "static/base/css/item-preview.css")
(guix-url "static/base/css/sidebar.css")
(guix-url "static/packages/css/package-list.css"))
#:scripts
(list (guix-url "static/packages/js/build-status.js"))
#:crumbs
(list (crumb "Packages" (guix-url "packages/"))
(crumb letter (guix-url (url-path-join "packages"
letter
"")))
(crumb (string-append "Page " page-number)
(guix-url (url-path-join "packages"
"page"
page-number
""))))
#:content
`(main
(section
(@ (class "page centered-text"))
(h2 "Packages — " ,letter
,(page-indicator (string->number page-number)
(string->number total-pages)))
(div
(@ (class "sheet sheet-padded justify-left"))
,@(map detailed-package-preview (context-datum context "items"))
,(page-selector (string->number total-pages)
(string->number page-number)
(guix-url (url-path-join "packages" letter))))
,(sidebar letter))))))

View File

@ -0,0 +1,45 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps packages templates index)
#:use-module (apps aux web)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:use-module (apps packages templates components)
#:export (index-t))
(define (index-t context)
"Return an SHTML representation of the index page."
(theme
#:title (list "Packages")
#:description
"List of packages available for the Guix System Distribution
(GuixSD) and foreign GNU/Linux distributions through the GNU
Guix package manager."
#:keywords
(list "GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"GNU Guile" "Guile Scheme" "Transactional upgrades"
"Functional package management" "Reproducibility")
#:active-menu-item "Packages"
#:css
(list (guix-url "static/base/css/page.css")
(guix-url "static/base/css/item-preview.css")
(guix-url "static/base/css/sidebar.css"))
#:crumbs
(list (crumb "Packages" (guix-url "packages/")))
#:content
`(main
(section
(@ (class "page centered-text"))
(h2 "Packages")
(div
(@ (class "sheet"))
,@(map package-preview (context-datum context "packages")))
,(sidebar)))))

View File

@ -0,0 +1,63 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps packages templates package-list)
#:use-module (apps aux web)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:use-module (apps packages templates components)
#:export (package-list-t))
(define (package-list-t context)
"Return a list of packages in SHTML with the data in CONTEXT."
(let ((letter (context-datum context "letter"))
(page-number
(number->string (context-datum context "page-number")))
(total-pages
(number->string (context-datum context "total-pages"))))
(theme
#:title (list (string-append "Page " page-number) letter "Packages")
#:description
"List of packages available for the Guix System Distribution
(GuixSD) and foreign GNU/Linux distributions through the GNU
Guix package manager."
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"GNU Guile" "Guile Scheme" "Transactional upgrades"
"Functional package management" "Reproducibility")
#:active-menu-item "Packages"
#:css
(list (guix-url "static/base/css/page.css")
(guix-url "static/base/css/item-preview.css")
(guix-url "static/base/css/sidebar.css"))
#:crumbs
(list (crumb "Packages" (guix-url "packages/"))
(crumb letter (guix-url (url-path-join "packages"
letter
"")))
(crumb (string-append "Page " page-number)
(guix-url (url-path-join "packages"
"page"
page-number
""))))
#:content
`(main
(section
(@ (class "page centered-text"))
(h2 "Packages — " ,letter
,(page-indicator (string->number page-number)
(string->number total-pages)))
(div
(@ (class "sheet"))
,@(map package-preview (context-datum context "items"))
,(page-selector (string->number total-pages)
(string->number page-number)
(guix-url (url-path-join "packages" letter))))
,(sidebar letter))))))

View File

@ -0,0 +1,70 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps packages templates package)
#:use-module (apps aux web)
#:use-module (apps base templates components)
#:use-module (apps base templates theme)
#:use-module (apps base types)
#:use-module (apps base utils)
#:use-module (apps packages templates components)
#:use-module (apps packages types)
#:use-module (apps packages utils)
#:export (package-t))
(define (package-t context)
"Return an SHTML representation of a package page."
(let* ((package (context-datum context "package"))
(package-id (string-append (package-name package)
" "
(package-version package)))
(lint-issues (package-lint-issues package)))
(theme
#:title (list package-id "Packages")
#:description (package-synopsis package)
#:keywords
'("GNU" "Linux" "Unix" "Free software" "Libre software"
"Operating system" "GNU Hurd" "GNU Guix package manager"
"GNU Guile" "Guile Scheme" "Transactional upgrades"
"Functional package management" "Reproducibility")
#:active-menu-item "Packages"
#:css
(list (guix-url "static/base/css/page.css")
(guix-url "static/packages/css/package.css"))
#:crumbs
(list (crumb "Packages" (guix-url "packages/"))
(crumb package-id
(guix-url (package-url-path package))))
#:content
`(main
(article
(@ (class "page centered-block limit-width"))
(h2 ,package-id " "
(span
(@ (class "synopsis"))
,(package-synopsis package)))
(p ,(package-description package))
(ul
(@ (class "package-info"))
(li (b "Website: ")
(a (@ (href ,(package-home-page package)))
,(package-home-page package)))
(li (b "License: "))
(li (b "Build status: "))
(li (b "Patches: "))
(li (b "Package source code: ")))
;; Lint issues.
,(if (null? lint-issues)
""
`((h3 "Lint issues")
(p
,(issue-count->shtml (length lint-issues)) ". "
"See " (a (@ (href "#")) "package definition")
" in Guix source code.")
,@(map lint-issue->shtml lint-issues))))))))

View File

@ -0,0 +1,109 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps packages types)
#:use-module (srfi srfi-9)
#:export (ilink
ilink?
ilink-name
ilink-url
lint-issue
lint-issue?
lint-issue-type
lint-issue-description))
;;;
;;; Data types.
;;;
;;; License (record type)
;;; ---------------------
;;;
;;; A license object represents a copyright license or public domain
;;; dedication.
;;;
;;; Objects of this type can be created with the "license" procedure
;;; as well (see Helper procedures below).
;;;
;;; Fields:
;;;
;;; name (string)
;;; The human readable name of the license. For example: "GPL 2+",
;;; "CC-BY-SA 3.0", etc.
;;;
;;; uri (string)
;;; The URL to the definition of the license on the web.
;;;
;;; comment (string)
;;; A comment about the license?
;;;
(define-record-type <license>
(make-license name uri comment)
license?
(name license-name)
(uri license-uri)
(comment license-comment))
;;; Helper procedures.
(define* (license #:key name uri (comment ""))
"Return a <license> object with the given attributes."
(make-license name uri comment))
;;; ILink (record type)
;;; -------------------
;;;
;;; A link to a web resource.
;;;
;;; Fields:
;;;
;;; name (string)
;;; A descriptive name for the link. For example:
;;; "i686 build", "graphics.scm", etc.
;;;
;;; url (string)
;;; The URL to the web resource.
;;;
(define-record-type <ilink>
(ilink name url)
ilink?
(name ilink-name)
(url ilink-url))
;;; Lint Issue (record type)
;;; ------------------------
;;;
;;; A lint issue object represents an issue reported by any of the lint
;;; checkers available for GNU Guix (see `guix lint --list-checkers`).
;;;
;;; Objects of this type can be created with the "lint-issue" procedure
;;; as well (see Helper procedures below).
;;;
;;; Fields:
;;;
;;; type (string)
;;; The name of the checker the issue belongs to. For example:
;;; "home-page", "license", "source", etc.
;;;
;;; See `guix lint --list-checkers` for all the names of the checkers.
;;;
;;; description (string)
;;; The details of the issue.
;;;
(define-record-type <lint-issue>
(make-lint-issue type description)
lint-issue?
(type lint-issue-type)
(description lint-issue-description))
;;; Helper procedures.
(define (lint-issue type description)
"Return a <lint-issue> object with the given attributes."
(make-lint-issue type description))

View File

@ -0,0 +1,116 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Initially written by sirgazil who waves all
;;; copyright interest on this file.
(define-module (apps packages utils)
#:use-module (apps aux web)
#:use-module (apps base utils)
#:use-module (apps packages data)
#:use-module (apps packages types)
#:use-module (guix packages)
#:use-module (guix utils)
#:export (location->ilink
package-build-issues
package-issues?
package-lint-issues
package-patches
package-url-path
packages/group-by-letter))
;;;
;;; Helper procedures.
;;;
(define (location->ilink loc)
"Convert the given location LOC into an Ilink.
LOC (<location>)
A location object as defined in the GNU Guix API reference.
RETURN (<ilink>)
An Ilink object as defined in (apps packages types)."
(ilink (basename (location-file loc))
(guix-git-tree-url
(url-path-join (location-file loc)
(string-append "#n"
(number->string (location-line loc)))))))
;;; TODO: Stub. Implement.
;;; https://bitbucket.org/sirgazil/guixsd-website/issues/45/
(define (package-build-issues package)
"Return the list of build issues for the given PACKAGE.
PACKAGE (<package>)
A package object as defined in the GNU Guix API reference.
RETURN (list)
A list of <location> objects as defined in (apps packages types)
that represent build issues."
(list))
;;; TODO: Add unit tests.
;;; https://bitbucket.org/sirgazil/guixsd-website/issues/44/
(define (package-issues? package)
"Return true if the PACKAGE has lint or build issues.
PACKAGE (<package>)
A package object as defined in the GNU Guix API reference."
(or (not (null? (package-lint-issues package)))
(not (null? (package-build-issues package)))))
;;; TODO: Stub. Implement.
;;; https://bitbucket.org/sirgazil/guixsd-website/issues/43/
(define (package-lint-issues package)
"Return the list of lint issues for the given PACKAGE.
PACKAGE (<package>)
A package object as defined in the GNU Guix API reference.
RETURN (list)
A list of <lint-issue> objects as defined in (apps packages types)."
(list))
;;; TODO: Stub. Implement.
;;; https://bitbucket.org/sirgazil/guixsd-website/issues/42/
(define (package-patches package)
"Return the list of patches for the given PACKAGE.
PACKAGE (<package>)
A package object as defined in the GNU Guix API reference.
RETURN (list)
A list of <link> objects as defined in (apps packages types)
representing patches."
(list))
(define (package-url-path package)
"Return a URL path for the PACKAGE in the form packages/NAME-VERSION/.
PACKAGE (<package>)
A package object as defined in the GNU Guix API reference."
(url-path-join "packages"
(string-append (package-name package)
"-"
(package-version package))))
;;; TODO: Dummy. Implement it.
;;; (https://bitbucket.org/sirgazil/guixsd-website/issues/38/)
(define (packages/group-by-letter packages)
"Return a list of alphabetically grouped packages.
PACKAGES (list)
A list of package objects as defined in the GNU Guix API reference.
RETURN (list)
A list of lists of packages where each list corresponds to the
packages whose name starts with a specific letter."
(cond ((null? packages) '())
(else
(map (lambda (letter) (cons letter packages)) alphabet))))

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 921 KiB

1325
website/designs/blog.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.4 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.0 MiB

After

Width:  |  Height:  |  Size: 2.6 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.9 MiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 71 KiB

32413
website/designs/media.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 3.2 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 259 KiB

After

Width:  |  Height:  |  Size: 839 KiB

16
website/guix.packages Normal file
View File

@ -0,0 +1,16 @@
;;; Packages required to develop the website.
;;; (See guix package --manifest option for more details on this file).
(use-modules (guix profiles)
(gnu packages))
(define dev-packages
(list "glibc-locales"
"guile@2.2"
"guile-syntax-highlight"
"guix"
"haunt"))
(map specification->package dev-packages)

View File

@ -1,98 +1,25 @@
;;; GuixSD website --- GNU's advanced distro website
;;; Copyright © 2015 Mathieu Lirzin <mthl@gnu.org>
;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GuixSD website.
;;;
;;; GuixSD website is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or
;;; (at your option) any later version.
;;;
;;; GuixSD website is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;;; General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GuixSD website. If not, see <http://www.gnu.org/licenses/>.
;;; Initially written by sirgazil who waives all
;;; copyright interest on this file.
;; This is a build file for Haunt.
(use-modules (haunt site)
(haunt reader)
(haunt reader commonmark)
(haunt page)
(haunt html)
(haunt utils)
(use-modules ((apps base builder) #:prefix base:)
((apps blog builder) #:prefix blog:)
((apps download builder) #:prefix download:)
((apps packages builder) #:prefix packages:)
(haunt asset)
(haunt builder assets)
(haunt builder blog)
(haunt builder atom)
(ice-9 match)
(srfi srfi-1)
(www)
(www utils)
(www news))
(haunt reader)
(haunt reader commonmark)
(haunt site))
(define %local-test?
;; True when we're testing locally, as opposed to producing things to
;; install to gnu.org.
(or (getenv "GUIX_WEB_SITE_LOCAL")
(member "serve" (command-line)))) ;'haunt serve' command
(when %local-test?
;; The URLs produced in these pages are only meant for local consumption.
(format #t "~%Producing Web pages for local tests *only*!~%~%"))
(define-syntax-rule (with-url-parameters body ...)
"Run BODY in a context where URL parameters honor %LOCAL-TEST?."
(parameterize ((current-url-root (if %local-test?
""
(current-url-root)))
(gnu.org-root (if %local-test?
"https://www.gnu.org"
(gnu.org-root))))
body ...))
(define (parameterized-procedure proc)
(lambda args
(with-url-parameters
(apply proc args))))
(define (parameterized-theme thm)
(theme #:name (theme-name thm)
#:layout (parameterized-procedure (theme-layout thm))
#:post-template (parameterized-procedure (theme-post-template thm))
#:collection-template (parameterized-procedure
(theme-collection-template thm))))
(site #:title "GNU's advanced distro and transactional package manager"
#:domain "//www.gnu.org/software/guix"
#:default-metadata
'((author . "GuixSD Contributors")
(email . "guix-devel@gnu.org"))
(site #:title "GuixSD"
#:domain "https://gnu.org/software/guix"
;; BUG: Can't use . in directory names (e.g. /tmp/gnu.org).
#:build-directory "/tmp/gnu/software/guix"
#:readers (list sxml-reader html-reader commonmark-reader)
#:builders
`(,(lambda (site posts) ;the main page
(with-url-parameters
(make-page "guix.html" `((doctype "html") ,(main-page site posts))
sxml->html)))
,@(filter-map (match-lambda
(("guix.html" _) ;handled above
#f)
((file-name contents)
(lambda (site posts)
(with-url-parameters
(make-page file-name
`((doctype "html") ,(contents))
sxml->html)))))
%web-pages)
,(blog #:theme (parameterized-theme %news-haunt-theme)
#:prefix "news")
;; Apparently the <link> tags of Atom entries must be absolute URLs,
;; hence this #:blog-prefix.
,(atom-feed #:file-name "news/feed.xml"
#:blog-prefix "https://www.gnu.org/software/guix/news")
,(static-directory "static")))
#:builders (list base:builder
blog:builder
download:builder
packages:builder
(static-directory "static")))

View File

@ -0,0 +1,16 @@
(begin
(use-modules (srfi srfi-19))
`((title . "Back from BOB Konferenz 2017")
(author . "sirgazil")
(date unquote (make-date 0 0 0 0 25 2 2017 7200))
(tags unquote (list "Software development"
"Software packaging"
"Software repoducibility"
"Talks"))
(content
(p "The "
(a (@ (href "http://bobkonf.de/2017/en/"))
"BOB Konferenz 2017")
" concluded. There is no video recording this time, but you can download the "
(a (@ (href "https://www.gnu.org/software/guix/guix-bobkonf-20170224.pdf")) "slides")
" from Ricardo Wurmus' talk, \"Functional package management with GNU Guix for developers and power users\"."))))

View File

@ -0,0 +1,18 @@
(begin
(use-modules (srfi srfi-19))
`((title . "Back from CUFP 2016")
(author . "sirgazil")
(date unquote (make-date 0 0 0 0 24 9 2016 7200))
(tags unquote (list "Functional programming"
"Scheme API"
"Software development"
"Software packaging"
"Software repoducibility"
"Talks"))
(content
(p "The "
(a (@ (href "http://cufp.org/2016/"))
"Commencial Users of Functional Programming 2016 Workshop")
" concluded. There is no video recording this time, but you can download the "
(a (@ (href "https://www.gnu.org/software/guix/guix-cufp-20160924.pdf")) "slides")
" from Ludovic Courtès' talk, \"Guix: Scheme as a uniform OS admin and deployment interface\"."))))

View File

@ -0,0 +1,17 @@
(begin
(use-modules (srfi srfi-19))
`((title . "Back from DConf 2016")
(author . "sirgazil")
(date unquote (make-date 0 0 0 0 4 5 2016 7200))
(tags unquote (list "Software development"
"Software packaging"
"Software repoducibility"
"Systems programming"
"Talks"))
(content
(p "The "
(a (@ (href "http://dconf.org/2016/index.html"))
"DConf 2016")
" concluded. There is no video recording this time, but you can download the "
(a (@ (href "https://www.gnu.org/software/guix/guix-dconf-20160505.pdf")) "slides")
" from Pjoter Prins' lightning talk, \"GNU Guix and D\"."))))

View File

@ -0,0 +1,186 @@
(begin
(use-modules (apps base templates components)
(srfi srfi-19))
`((title . "Back from FOSDEM 2017")
(author . "sirgazil")
(date unquote (make-date 0 0 0 0 6 2 2017 7200))
(tags unquote (list "Case studies"
"FOSDEM"
"GNU/Hurd"
"High-performance computing"
"Software development"
"Software packaging"
"Software repoducibility"
"Systems programming"
"Workflow management"
"Talks"))
(content
(p (a (@ (href "https://fosdem.org/2017/"))
"FOSDEM 2017")
" concluded. This time, the GNU Guix community participated with 8 talks.")
(h3 "An introduction to functional package management with GNU Guix")
(video
(@ (src "https://video.fosdem.org/2017/K.4.601/guixintroduction.vp8.webm")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "https://video.fosdem.org/2017/K.4.601/guixintroduction.vp8.webm")
(p "(WebM, 26 minutes)")))
(ul
(li "Speaker: Ricardo Wurmus")
(li "Slides: "
(a (@ (href "https://www.gnu.org/software/guix/guix-fosdem-intro-20170205.pdf"))
"guix-fosdem-intro-20170205.pdf")))
(h3 "Composing system services in GuixSD")
(video
(@ (src "https://video.fosdem.org/2017/K.4.601/composingsystemservicesinguixsd.vp8.webm")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "https://video.fosdem.org/2017/K.4.601/composingsystemservicesinguixsd.vp8.webm")
(p "(WebM, 43 minutes)")))
(ul
(li "Speaker: Ludovic Courtès")
(li "Slides: "
(a (@ (href "https://www.gnu.org/software/guix/guix-fosdem-composing-services-20170205.pdf"))
"guix-fosdem-composing-services-20170205.pdf")))
(h3 "Reproducible packaging and distribution of software with GNU Guix")
(video
(@ (src "https://video.fosdem.org/2017/K.4.601/guixpackages.vp8.webm")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "https://video.fosdem.org/2017/K.4.601/guixpackages.vp8.webm")
(p "(WebM, 29 minutes)")))
(ul
(li "Speaker: Pjotr Prins")
(li "Slides: "
(a (@ (href "https://www.gnu.org/software/guix/guix-fosdem-packaging-20170205.pdf"))
"guix-fosdem-packaging-20170205.pdf")))
(h3 "Mes—Maxwell's Equations of Software")
(video
(@ (src "https://mirrors.dotsrc.org/fosdem/2017/K.4.601/guixsdbootstrap.vp8.webm")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "https://mirrors.dotsrc.org/fosdem/2017/K.4.601/guixsdbootstrap.vp8.webm")
(p "(WebM, 28 minutes)")))
(ul
(li "Speaker: Jan Nieuwenhuizen")
(li "Slides: "
(a (@ (href "https://www.gnu.org/software/guix/guix-fosdem-mes-20170205.pdf"))
"guix-fosdem-mes-20170205.pdf")))
(h3 "Adding GNU/Hurd support to GNU Guix and GuixSD")
(video
(@ (src "http://mirror.onet.pl/pub/mirrors/video.fosdem.org/2017/K.4.601/guixhurd.vp8.webm")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "http://mirror.onet.pl/pub/mirrors/video.fosdem.org/2017/K.4.601/guixhurd.vp8.webm")
(p "(WebM, 30 minutes)")))
(ul
(li "Speaker: Manolis Ragkousis")
(li "Slides: "
(a (@ (href "https://www.gnu.org/software/guix/guix-fosdem-hurd-20170205.pdf"))
"guix-fosdem-hurd-20170205.pdf")))
(h3 "Workflow management with GNU Guix")
(video
(@ (src "https://mirrors.dotsrc.org/fosdem/2017/K.4.601/guixworkflowmanagement.vp8.webm")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "https://mirrors.dotsrc.org/fosdem/2017/K.4.601/guixworkflowmanagement.vp8.webm")
(p "(WebM, 20 minutes)")))
(ul
(li "Speaker: Roel Janssen")
(li "Slides: "
(a (@ (href "https://www.gnu.org/software/guix/guix-fosdem-workflow-management-20170205.pdf"))
"guix-fosdem-workflow-management-20170205.pdf")))
(h3 "Optimized and reproducible HPC Software deployment")
(video
(@ (src "https://video.fosdem.org/2017/H.2213/hpc_deployment_guix.vp8.webm")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "https://video.fosdem.org/2017/H.2213/hpc_deployment_guix.vp8.webm")
(p "(WebM, 26 minutes)")))
(ul
(li "Speakers: Pjotr Prins and Ludovic Courtès")
(li "Slides: "
(a (@ (href "https://www.gnu.org/software/guix/guix-fosdem-hpc-part1-20170204.pdf"))
"guix-fosdem-hpc-part1-20170204.pdf")
", "
(a (@ (href "https://www.gnu.org/software/guix/guix-fosdem-hpc-part2-20170204.pdf"))
"guix-fosdem-hpc-part2-20170204.pdf")))
(h3 "The future of Guix")
(video
(@ (src "http://bofh.nikhef.nl/events/FOSDEM/2017/K.4.601/futureofguix.vp8.webm")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "http://bofh.nikhef.nl/events/FOSDEM/2017/K.4.601/futureofguix.vp8.webm")
(p "(WebM, 48 minutes)")))
(ul
(li "Speakers: Christopher Webber, Ludovic Courtès, Pjotr Prins, Ricardo Wurmus")))))

View File

@ -0,0 +1,18 @@
(begin
(use-modules (srfi srfi-19))
`((title . "Back from the SFPW 2016")
(author . "sirgazil")
(date unquote (make-date 0 0 0 0 18 9 2016 7200))
(tags unquote (list "Functional programming"
"Scheme API"
"Software development"
"Software packaging"
"Software repoducibility"
"Talks"))
(content
(p "The "
(a (@ (href "http://dconf.org/2016/index.html"))
"17th Annual Scheme and Functional Programming Workshop 2016")
" concluded. There is no video recording this time, but you can download the "
(a (@ (href "https://www.gnu.org/software/guix/guix-scheme-workshop-20160918.pdf")) "slides")
" from Ludovic Courtès' invited talk, \"GNU Guix: The Functional GNU/Linux Distro Thats a Scheme Library\"."))))

View File

@ -1,20 +1,36 @@
(begin
(use-modules (srfi srfi-19))
(use-modules (apps base templates components)
(apps base utils)
(srfi srfi-19))
`((title . "Back from the European Lisp Symposium")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 5 6 2013 7200))
(tags unquote (list "Functional package management"
"Software packaging"
"Talks"
"Transactional upgrades"))
(content
div
(p "The "
(a (@ (href "http://www-sop.inria.fr/members/Manuel.Serrano/conferences/els13.html"))
"European Lisp Symposium")
" (ELS) is over now, and its been pleasant experience: thoughtful discussions, beautiful city, and parentheses all around. Thanks to all the Lispers and Schemers who made it to ELS for the friendly atmosphere!"
(br))
(p "The slides of the talk I gave on the design and implementation of Guix are "
(a (@ (href "http://www.gnu.org/software/guix/guix-els-20130603.pdf"))
"available on-line")
". Nick Levine also published "
(a (@ (href "http://www.nicklevine.org/els2013/"))
"audio recordings")
" of most of the talks (thanks!)."
(br)))))
(p "The "
(a (@ (href "http://www-sop.inria.fr/members/Manuel.Serrano/conferences/els13.html"))
"European Lisp Symposium")
" (ELS) is over now, and its been pleasant experience: thoughtful discussions, beautiful city, and parentheses all around. Thanks to all the Lispers and Schemers who made it to ELS for the friendly atmosphere!")
(p "The slides of the talk I gave on the design and implementation of Guix are "
(a (@ (href "http://www.gnu.org/software/guix/guix-els-20130603.pdf"))
"available on-line")
". Nick Levine also published "
(a (@ (href "http://www.nicklevine.org/els2013/"))
"audio recordings")
" of most of the talks (thanks!).")
(audio
(@ (src "http://www.nicklevine.org/els2013/ludovic-courtes.mp3")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD AUDIO"
#:url "http://www.nicklevine.org/els2013/ludovic-courtes.mp3")
(p "(MP3, 40 minutes, 38 MiB)"))))))

View File

@ -0,0 +1,39 @@
(begin
(use-modules (apps base templates components)
(srfi srfi-19))
`((title . "Back from the GNU Hackers Meeting 2016")
(author . "sirgazil")
(date unquote (make-date 0 0 0 0 22 8 2016 7200))
(tags unquote (list "Software packaging"
"Talks"))
(content
(p "The "
(a (@ (href "http://www.gnu.org/ghm/2016/"))
"GNU Hackers Meeting 2016")
" took place in "
(a (@ (href "https://en.wikipedia.org/wiki/Rennes")) "Rennes")
" (Brittany, France) from August 18-20 hosted by "
(a (@ (href "https://www.inria.fr/en/")) "Inria")
". GNU Guix maintainer, Ludovic Courtès, participated with three presentations:")
(ul
(li "GNU Guix is 4 years old! ("
(a (@ (href "https://www.gnu.org/software/guix/guix-ghm-20160818.pdf")) "slides")
").")
(li "Using Guix and Emacs in perfect harmony (demo)")
(li "Navigating the Guix subsystems ("
(a (@ (href "https://www.gnu.org/software/guix/guix-ghm-20160819.pdf")) "slides")
")."))
(p "Here is the video recording of the first talk:")
(video
(@ (src "http://videos.rennes.inria.fr/Workshop-GNUHackersMeetings2016/expose-GNULudovicCourtes18aout2016.mp4")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "http://videos.rennes.inria.fr/Workshop-GNUHackersMeetings2016/expose-GNULudovicCourtes18aout2016.mp4")
(p "(MP4, 50 minutes)"))))))

View File

@ -1,21 +1,33 @@
(begin
(use-modules (srfi srfi-19))
(use-modules (apps base templates components)
(srfi srfi-19))
`((title . "Back from the GNU Hackers Meeting")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 2 9 2013 7200))
(tags unquote (list "Software packaging"
"Talks"))
(content
div
(p "The "
(a (@ (href "http://www.gnu.org/ghm/2013/paris"))
"GNU Hackers Meeting")
" took place last week in Paris. As usual, it was a nice place to meet fellow hackers, grow new ideas, and to learn about what other projects are up to. Thanks to "
(a (@ (href "http://www.irill.org")) "IRILL")
" for hosting the event, and a big thanks to "
(a (@ (href "http://ageinghacker.net/")) "Luca")
" for the very professional organization!"
(br))
(p "Several Guix hackers were present, with no less than "
(a (@ (href "http://www.gnu.org/software/guix/#talks"))
"two talks advertising Guix")
". The first talk demoed the package manager, both from a user's and from a hacker's perspective, and with a look forward. The second talk delivered a \"packaging how-to\" that should be helpful to anyone willing to contribute to the GNU system distribution."
(br)))))
(p "The "
(a (@ (href "http://www.gnu.org/ghm/2013/paris"))
"GNU Hackers Meeting")
" took place last week in Paris. As usual, it was a nice place to meet fellow hackers, grow new ideas, and to learn about what other projects are up to. Thanks to "
(a (@ (href "http://www.irill.org")) "IRILL")
" for hosting the event, and a big thanks to "
(a (@ (href "http://ageinghacker.net/")) "Luca")
" for the very professional organization!")
(p "Several Guix hackers were present, with no less than two talks advertising Guix. The first talk, \"Guix, the Computing Freedom Deployment Tool\", demoed the package manager, both from a user's and from a hacker's perspective, and with a look forward (see the video recording below).")
(video
(@ (src "http://audio-video.gnu.org/video/ghm2013/Ludovic_Courtes-GNU_Guix_the_computing_freedom_deployment_tool_.webm")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "http://audio-video.gnu.org/video/ghm2013/Ludovic_Courtes-GNU_Guix_the_computing_freedom_deployment_tool_.webm")
(p "(WebM, 60 minutes, 127 MiB)")))
(p "The second talk, \"GNU Guix: Package without a scheme!\", delivered a \"packaging how-to\" that should be helpful to anyone willing to contribute to the GNU system distribution. There is no recording for this talk, but the "
(a (@ (href "https://www.gnu.org/software/guix/guix-ghm-andreas-20130823.pdf")) "slides")
" are available."))))

View File

@ -3,6 +3,7 @@
`((title . "Boot-to-Guile!")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 16 2 2013 3600))
(tags unquote (list "Virtual machine images"))
(content
div
(p "As a contribution to "

View File

@ -4,6 +4,10 @@
"Chris Webber talks about Guix in Chicago, September 30th")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 18 9 2015 7200))
(tags unquote (list "Functional package management"
"Talks"
"Software deployment"
"Federation"))
(content
div
(p (a (@ (href "http://dustycloud.org/"))

View File

@ -4,6 +4,9 @@
(author . "David Thompson")
(date unquote
(make-date 0 0 0 0 27 10 2015 3600))
(tags unquote (list "Server virtualization"
"Software containers"
"Software deployment"))
(content
div
(p "The upcoming release of GNU Guix will feature an implementation of Linux containers named, following Scheme conventions, "

View File

@ -1,7 +1,7 @@
title: Creating bundles with guix pack
date: 2017-03-20 14:45
author: Ludovic Courtès
tags: pack bundles
tags: Software bundles
---
Guix just got a new command,
[dubbed `guix pack`](https://lists.gnu.org/archive/html/guix-devel/2017-03/msg00322.html),
@ -179,7 +179,7 @@ number of reasons:
that—you may or may not be able to find the corresponding source
code, and youd have a hard time fiddling with one of the
components of the software stack.
We pride ourselves with having a tool set that caters to some of the use
cases that “app bundles” and “containerization” try to address while
having none of these drawbacks. So how do Guix packs fit into that

View File

@ -5,6 +5,7 @@
(author . "Ludovic Courtès")
(date unquote
(make-date 0 0 0 0 28 10 2013 3600))
(tags unquote (list "MIPS"))
(content
div
(p "The Guix-based distro "

View File

@ -4,6 +4,7 @@
"Emacs as a general-purpose package manager")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 4 9 2014 7200))
(tags unquote (list "User interfaces"))
(content
div
(p (a (@ (href "http://www.gnu.org/software/guix"))

View File

@ -0,0 +1,37 @@
(begin
(use-modules (apps base templates components)
(apps base utils)
(srfi srfi-19))
`((title . "Functional Package Management for the People")
(author . "sirgazil")
(date unquote
(make-date 0 0 0 0 20 07 2012 3600))
(tags unquote (list "Functional package management"
"Software packaging"
"Talks"
"Transactional upgrades"))
(content
(p
(a (@ (href "https://www.gnu.org/ghm/2012/ddorf"))
"GNU Hackers Meeting in Düsseldorf")
", 2012. The following is the video of the presentation \"Guix, functional package management for the people, and for GNU?\", by Ludovic Courtès (get the "
(a (@ (href "https://www.gnu.org/software/guix/guix-ghm-20120721.pdf"))
"slides")
").")
(video
(@ (src "https://audio-video.gnu.org/video/ghm2012/guix.ogv")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "https://audio-video.gnu.org/video/ghm2012/guix.ogv")
(p "(Ogg/Theora, 84 minutes, 88.1 MiB)")))
(p "Guix is a purely functional package manager written in Guile Scheme, and building on the Nix package manager. It implements purely functional package build and composition: a build process is a Scheme function that returns the path of its result in the \"store\"-the /nix/store directory. The store acts as a build cache, subject to garbage collection. Changing a bit in the build process's inputs (dependencies, environment variables, etc.) changes the result. ")
(p " This approach provides users with features such as transactional upgrades and rollback, unprivileged package installation, coexistence of variants or versions of packages, etc. By construction, it allows users to track down all the packages involved in a build, down to the initial bootstrapping binaries. ")
(p " This talk will present Guix, detail this incredible feature set, and show what it's like to package software with it. We will discuss whether and how it could fit in the Grand Plan of making a \"GNU Distro\""))))

View File

@ -3,6 +3,7 @@
`((title . "GNOME in GuixSD")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 23 3 2016 3600))
(tags unquote (list "Desktop environments"))
(content
div
(p "Its a feature that many users were waiting for: proper "

View File

@ -3,6 +3,7 @@
`((title . "GNU dmd 0.1 released")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 2 12 2013 3600))
(tags unquote (list "Init system" "System services"))
(content
div
(p (a (@ (href "http://www.gnu.org/software/dmd"))

View File

@ -3,6 +3,7 @@
`((title . "GNU dmd 0.2 released")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 8 7 2014 7200))
(tags unquote (list "Init system" "System services"))
(content
div
(p (a (@ (href "http://www.gnu.org/software/dmd"))

View File

@ -3,6 +3,7 @@
`((title . "GNU Guix & GuixSD 0.10.0 released")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 29 3 2016 7200))
(tags unquote (list "Releases"))
(content
div
(p "We are pleased to announce the new beta release of GNU\xa0Guix and GuixSD, version 0.10.0!"

View File

@ -3,6 +3,7 @@
`((title . "GNU Guix 0.1 released!")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 18 1 2013 3600))
(tags unquote (list "Releases"))
(content
div
(p "Version 0.1 of the GNU Guix functional package manager and its baby distribution of user-land software has been released. See "

View File

@ -3,6 +3,7 @@
`((title . "GNU Guix 0.2 released")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 12 5 2013 7200))
(tags unquote (list "Releases"))
(content
div
(p "The second alpha release of "

View File

@ -3,6 +3,7 @@
`((title . "GNU Guix 0.3 released")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 17 7 2013 7200))
(tags unquote (list "Releases"))
(content
div
(p "The third alpha release of "

View File

@ -4,6 +4,7 @@
"GNU Guix 0.4 released; happy birthday, GNU!")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 27 9 2013 7200))
(tags unquote (list "Releases"))
(content
div
(p "We are pleased to celebrate "

View File

@ -4,6 +4,7 @@
(author . "Ludovic Courtès")
(date unquote
(make-date 0 0 0 0 11 12 2013 3600))
(tags unquote (list "Releases"))
(content
div
(p "We are pleased to announce the fifth alpha release of "

View File

@ -3,6 +3,7 @@
`((title . "GNU Guix 0.6 released")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 9 4 2014 7200))
(tags unquote (list "Releases"))
(content
div
(p "We are pleased to announce the sixth alpha release of "

View File

@ -3,6 +3,7 @@
`((title . "GNU Guix 0.7 released")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 25 7 2014 7200))
(tags unquote (list "Releases"))
(content
div
(p "We are pleased to announce the next alpha release of GNU Guix, version 0.7."

View File

@ -4,6 +4,7 @@
(author . "Ludovic Courtès")
(date unquote
(make-date 0 0 0 0 18 11 2014 3600))
(tags unquote (list "Releases"))
(content
div
(p "We are pleased to announce the next alpha release of GNU Guix, version 0.8."

View File

@ -3,6 +3,7 @@
`((title . "GNU Guix 0.8.1 released")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 29 1 2015 3600))
(tags unquote (list "Releases"))
(content
div
(p "We are pleased to announce the next alpha release of GNU Guix, version 0.8.1."

View File

@ -3,6 +3,7 @@
`((title . "GNU Guix 0.8.2 released")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 14 5 2015 7200))
(tags unquote (list "Releases"))
(content
div
(p "We are pleased to announce the next alpha release of GNU Guix, version 0.8.2."

View File

@ -3,6 +3,7 @@
`((title . "GNU Guix 0.8.3 released")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 22 7 2015 7200))
(tags unquote (list "Releases"))
(content
div
(p "We are pleased to announce the next alpha release of GNU Guix, version 0.8.3."

View File

@ -3,6 +3,7 @@
`((title . "GNU Guix 0.9.0 released")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 5 11 2015 3600))
(tags unquote (list "Releases"))
(content
div
(p "We are pleased to announce the next alpha release of GNU Guix, version 0.9.0."

View File

@ -4,6 +4,7 @@
"GNU\xa0Guix and GuixSD\xa00.11.0 released")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 3 8 2016 7200))
(tags unquote (list "Releases"))
(content
div
(p "It is a pleasure to announce the new beta release of GNU\xa0Guix and GuixSD, version 0.11.0!"

View File

@ -4,6 +4,7 @@
"GNU\xa0Guix and GuixSD\xa00.12.0 released")
(author . "Ricardo Wurmus")
(date unquote (make-date 0 0 0 0 21 12 2016 7200))
(tags unquote (list "Releases"))
(content
div
(p "We are pleased to announce the new release of GNU\xa0Guix and GuixSD, version 0.12.0!"

View File

@ -2,7 +2,7 @@ title: GNU Guix and GuixSD 0.13.0 released
date: 2017-05-22 15:30
author: Ludovic Courtès
slug: gnu-guix-and-guixsd-0.13.0-released
tags: release
tags: Releases
---
We are pleased to announce the new release of GNU Guix and GuixSD,
version 0.13.0!
@ -92,4 +92,3 @@ management, and is highly customizable and hackable.
GuixSD can be used on an i686 or x86_64 machine. It is also possible to
use Guix on top of an already installed GNU/Linux system, including on
mips64el, armv7, and aarch64.

View File

@ -1,15 +1,31 @@
(begin
(use-modules (srfi srfi-19))
(use-modules (apps base templates components)
(srfi srfi-19))
`((title . "GNU Guix at FOSDEM")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 27 1 2015 3600))
(tags unquote (list "FOSDEM" "Talks"))
(content
div
(p "Guix will be present at FOSDEM in Brussels, Belgium, with a talk entitled "
(a (@ (href "https://fosdem.org/2015/schedule/event/the_emacs_of_distros/"))
"\"The Emacs of Distros\"")
" this Saturday, at 3PM, in room H.1302."
(br))
(p "The talk will give an update on developments in Guix and the Guix System Distribution since last year, and will explain and demo the overall philosophy behind its design---how Guix seeks to empower users."
(br))
(p "Hope to see you there!" (br)))))
(p "Guix will be present at FOSDEM in Brussels, Belgium, with a talk entitled "
(a (@ (href "https://fosdem.org/2015/schedule/event/the_emacs_of_distros/"))
"\"The Emacs of Distros\"")
" this Saturday, at 3PM, in room H.1302.")
(p "The talk will give an update on developments in Guix and the Guix System Distribution since last year, and will explain and demo the overall philosophy behind its design---how Guix seeks to empower users.")
(p "Hope to see you there!")
(p "UPDATE: Here is the video recording and "
(a (@ (href "https://www.gnu.org/software/guix/guix-fosdem-20150131.pdf"))
"slides")
" from the talk.")
(video
(@ (src "https://audio-video.gnu.org/video/misc/2015-01__GNU_Guix__The_Emacs_of_Distros.webm")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "https://audio-video.gnu.org/video/misc/2015-01__GNU_Guix__The_Emacs_of_Distros.webm")
(p "(WebM, 47 minutes)"))))))

View File

@ -3,6 +3,7 @@
`((title . "GNU Guix looks for GSoC students")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 27 2 2014 3600))
(tags unquote (list "GSoC"))
(content
div
(p "This year again "

View File

@ -4,6 +4,7 @@
"GNU Guix ported to ARM and other niceties of the new year")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 9 1 2015 3600))
(tags unquote (list "ARM"))
(content
div
(p "A new port of GNU Guix to ARM using the \"hard float\" ABI "

View File

@ -3,6 +3,7 @@
`((title . "GNU Guix recruits for GSoC")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 13 3 2015 3600))
(tags unquote (list "GSoC"))
(content
div
(p "This year again "

View File

@ -4,31 +4,21 @@
"GNU Guix talk at OpenTechSummit, Berlin, May 14th")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 12 5 2015 7200))
(tags unquote (list "Talks"))
(content
div
(p (a (@ (href "http://elephly.net/"))
"Ricardo Wurmus")
" will be giving a talk about GNU Guix and GuixSD at the "
(a (@ (href "http://opentechsummit.net/"))
"OpenTechSummit")
" in Berlin, Germany, on May 14th. The talk will take place at "
(a (@ (href "http://opentechsummit.net/Programm.pdf"))
"3:15pm in track 2")
" and covers topics such as the fundamentals of functional package management, software management features with GNU Guix, and system description in GuixSD."
(br))
(p "Ricardo has been making major contributions to Guix over the last year and is a long-time free software contributor. If you are in Berlin area, do not miss the talk!"
(br))
(h4 "About GNU Guix")
(p (a (@ (href "http://www.gnu.org/software/guix"))
"GNU Guix")
" is a functional package manager for the GNU system. The Guix System Distribution (GuixSD) is an advanced distribution of the GNU system that relies on GNU Guix."
(br))
(p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. It also offers a declarative approach to operating system configuration management. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
(a (@ (href "http://www.gnu.org/software/guile"))
"Guile")
" modules, using extensions to the "
(a (@ (href "http://schemers.org")) "Scheme")
" language."
(br))
(p "At this stage the Guix System Distribution can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
(br)))))
(p (a (@ (href "http://elephly.net/"))
"Ricardo Wurmus")
" will be giving a talk about GNU Guix and GuixSD at the "
(a (@ (href "http://opentechsummit.net/"))
"OpenTechSummit")
" in Berlin, Germany, on May 14th. The talk will take place at "
(a (@ (href "http://opentechsummit.net/Programm.pdf"))
"3:15pm in track 2")
" and covers topics such as the fundamentals of functional package management, software management features with GNU Guix, and system description in GuixSD.")
(p "Ricardo has been making major contributions to Guix over the last year and is a long-time free software contributor. If you are in Berlin area, do not miss the talk!")
(p "UPDATE: Here are the "
(a (@ (href "https://www.gnu.org/software/guix/guix-opentechsummit-201505014.pdf"))
"slides")
" from the talk."))))

View File

@ -4,40 +4,37 @@
"GNU Guix talk in Boston, MA (USA) on January 20th")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 11 1 2016 3600))
(tags unquote (list "Functional package management" "Talks"))
(content
div
(p (a (@ (href "https://dthompson.us/"))
"David Thompson")
" will be giving a "
(a (@ (href "http://blu.org/cgi-bin/calendar/2016-jan"))
"talk about Guix on January 20th")
" at the BLU gathering at MIT in Boston, Massachusetts (USA)."
(br))
(p (em "David gives an overview of what functional package management is all about and how it differs from traditional imperative package management.")
(br))
(p (em "He also demonstrates some interesting features of Guix such as transactional package management, unprivileged package management, bit-reproducible builds, and full system configuration management.")
(br))
(p "The talk will take place in MIT building E-51, room 325."
(br))
(p "David is a GNU hacker who contributes to Guix and Guile; he implemented "
(a (@ (href "/software/guix/news/container-provisioning-with-guix.html"))
"container support")
" in Guix. If you are in the Boston area, do not miss him!"
(br))
(h4 "About GNU Guix")
(p (a (@ (href "http://www.gnu.org/software/guix"))
"GNU Guix")
" is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
(a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
"respects the user's freedom")
"."
(br))
(p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
(a (@ (href "http://www.gnu.org/software/guile"))
"Guile")
" modules, using extensions to the "
(a (@ (href "http://schemers.org")) "Scheme")
" language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
(br))
(p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
(br)))))
(p (a (@ (href "https://dthompson.us/"))
"David Thompson")
" will be giving a "
(a (@ (href "http://blu.org/cgi-bin/calendar/2016-jan"))
"talk about Guix on January 20th")
" at the BLU gathering at MIT in Boston, Massachusetts (USA).")
(p (em "David gives an overview of what functional package management is all about and how it differs from traditional imperative package management."))
(p (em "He also demonstrates some interesting features of Guix such as transactional package management, unprivileged package management, bit-reproducible builds, and full system configuration management."))
(p "The talk will take place in MIT building E-51, room 325.")
(p "David is a GNU hacker who contributes to Guix and Guile; he implemented "
(a (@ (href "/software/guix/news/container-provisioning-with-guix.html"))
"container support")
" in Guix. If you are in the Boston area, do not miss him!")
(p "UPDATE: Here are the "
(a (@ (href "https://www.gnu.org/software/guix/guix-blu-20160120.pdf"))
"slides")
" from the talk.")
(h4 "About GNU Guix")
(p (a (@ (href "http://www.gnu.org/software/guix"))
"GNU Guix")
" is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
(a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
"respects the user's freedom") ".")
(p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
(a (@ (href "http://www.gnu.org/software/guile")) "Guile")
" modules, using extensions to the "
(a (@ (href "http://schemers.org")) "Scheme")
" language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable.")
(p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."))))

View File

@ -1,33 +1,50 @@
(begin
(use-modules (srfi srfi-19))
(use-modules (apps base templates components)
(srfi srfi-19))
`((title .
"GNU Guix talk in Rennes, France, November 9th")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 2 11 2015 3600))
(tags unquote (list "Functional package management"
"Software reproducibility"
"Software deployment"
"Talks"
"Transactional upgrades"))
(content
div
(p "Ludovic Courtès will be giving a talk about GNU Guix and GuixSD "
(a (@ (href "http://www.agendadulibre.org/events/10182"))
"in Rennes, France, on November 9th")
". The event is organized by the three local free software and hacker organizations:"
(br))
(p (em " “It used to work perfectly, then I upgraded something, and somehow…” Sounds like a déjà vu? Sometimes feel like software deployment is unpredictable? Dissatisfied with Dockerfiles, Vagrantfiles, and co? Ever wondered if you can trust your compiler or the integrity of those binary packages you have downloaded?")
(br))
(p (em "This talk introduces GNU Guix, a package manager that implements the functional package management paradigm pioneered by "
(a (@ (href "http://nixos.org/nix")) "Nix")
" to address these issues. Guix supports transactional upgrades and rollbacks, as well as support for multiple software profiles. In this talk, I will introduce functional package management and demonstrate Guix on practical use cases. I will discuss the implications on (bit-)reproducible packages and environments, and how this can lead to verifiable binaries. Lastly, we will see how this extends to whole-system deployments with GuixSD, the Guix System Distribution.")
(br))
(p "Earlier on that day, a similar talk with a focus on security and reproducibility issues will be given at "
(a (@ (href "http://www.inria.fr/en/centre/rennes"))
"Inria")
", thanks to the support of "
(a (@ (href "http://grothoff.org/christian/"))
"Christian Grothoff")
" and the "
(a (@ (href "http://sed.bordeaux.inria.fr/"))
"software development department")
" in Bordeaux."
(br))
(p "Ludovic Courtès will be giving a talk about GNU Guix and GuixSD "
(a (@ (href "http://www.agendadulibre.org/events/10182"))
"in Rennes, France, on November 9th")
". The event is organized by the three local free software and hacker organizations:")
(p (em " “It used to work perfectly, then I upgraded something, and somehow…” Sounds like a déjà vu? Sometimes feel like software deployment is unpredictable? Dissatisfied with Dockerfiles, Vagrantfiles, and co? Ever wondered if you can trust your compiler or the integrity of those binary packages you have downloaded?"))
(p (em "This talk introduces GNU Guix, a package manager that implements the functional package management paradigm pioneered by "
(a (@ (href "http://nixos.org/nix")) "Nix")
" to address these issues. Guix supports transactional upgrades and rollbacks, as well as support for multiple software profiles. In this talk, I will introduce functional package management and demonstrate Guix on practical use cases. I will discuss the implications on (bit-)reproducible packages and environments, and how this can lead to verifiable binaries. Lastly, we will see how this extends to whole-system deployments with GuixSD, the Guix System Distribution."))
(p "Earlier on that day, a similar talk with a focus on security and reproducibility issues will be given at "
(a (@ (href "http://www.inria.fr/en/centre/rennes")) "Inria")
", thanks to the support of "
(a (@ (href "http://grothoff.org/christian/"))
"Christian Grothoff")
" and the "
(a (@ (href "http://sed.bordeaux.inria.fr/"))
"software development department")
" in Bordeaux.")
(p "UPDATE: Here is the video recording and "
(a (@ (href "https://www.gnu.org/software/guix/guix-rennes-20151109.pdf"))
"slides")
" from the talk.")
(video
(@ (src "https://gnunet.org/sites/default/files/ludo2015guix.webm")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "https://gnunet.org/sites/default/files/ludo2015guix.webm")
(p "(WebM, 73 minutes)")))
(h4 "About GNU Guix")
(p (a (@ (href "http://www.gnu.org/software/guix"))
"GNU Guix")

View File

@ -4,6 +4,7 @@
"GNU\xa0Guix welcomes four students for GSoC")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 24 4 2016 7200))
(tags unquote (list "GSoC"))
(content
div
(p "We are glad to announce that four students will join GNU\xa0Guix for the 2016 Google Summer of Code (GSoC):"

View File

@ -4,6 +4,7 @@
"GNU Guix welcomes three students for GSoC")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 2 5 2015 7200))
(tags unquote (list "GNU/Hurd" "GSoC"))
(content
div
(p "GNU Guix got 3 slots for the Google Summer of Code (GSoC), as part of GNU, which participates as an organization. So we are pleased to welcome three students this summer:"

View File

@ -3,6 +3,7 @@
`((title . "GSoC update")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 19 7 2015 7200))
(tags unquote (list "GNU/Hurd" "GSoC"))
(content
div
(p "This year Guix was lucky to have "

View File

@ -3,6 +3,7 @@
`((title . "Guix & GSoC")
(author . "Ludovic Courtès")
(date unquote (make-date 0 0 0 0 12 4 2013 7200))
(tags unquote (list "GSoC"))
(content
div
(p (a (@ (href "http://www.gnu.org/software/guix"))

View File

@ -3,38 +3,51 @@
`((title . "Guix at LibrePlanet 2016")
(author . "David Thompson")
(date unquote (make-date 0 0 0 0 15 3 2016 3600))
(tags unquote (list "Software deployment" "Talks"))
(content
div
(p "GNU hackers Christopher Allan Webber (whom you may know from the "
(a (@ (href "http://mediagoblin.org"))
"GNU MediaGoblin project")
") and David Thompson will be co-presenting "
(a (@ (href "https://libreplanet.org/2016/program/#day-1-timeslot-4-session-2"))
"\"Solving the Deployment Crisis with Guix\"")
" at "
(a (@ (href "https://libreplanet.org/2016"))
"LibrePlanet 2016")
" this Saturday, March 19th. Chris and David will be focusing on the hardships and obstacles that users face when trying to exercise their software freedom by self-hosting web applications, offering Guix as a solution. The presentation will be held from 10:55 AM to 11:40 AM in room 32-141 of the MIT Stata Center in Cambridge, Massachusetts."
(br))
(h4 "About LibrePlanet")
(p (a (@ (href "https://libreplanet.org"))
"LibrePlanet")
" is an annual conference run by the FSF and MIT's Student Information Processing Board for free software users, developers, and activists to gather and share ideas. Admission is gratis for FSF associate members."
(br))
(h4 "About GNU Guix")
(p (a (@ (href "http://www.gnu.org/software/guix"))
"GNU Guix")
" is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
(a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
"respects the user's freedom")
"."
(br))
(p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
(a (@ (href "http://www.gnu.org/software/guile"))
"Guile")
" modules, using extensions to the "
(a (@ (href "http://schemers.org")) "Scheme")
" language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable."
(br))
(p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."
(br)))))
(p "GNU hackers Christopher Allan Webber (whom you may know from the "
(a (@ (href "http://mediagoblin.org"))
"GNU MediaGoblin project")
") and David Thompson will be co-presenting "
(a (@ (href "https://libreplanet.org/2016/program/#day-1-timeslot-4-session-2"))
"\"Solving the Deployment Crisis with Guix\"")
" at "
(a (@ (href "https://libreplanet.org/2016"))
"LibrePlanet 2016")
" this Saturday, March 19th. Chris and David will be focusing on the hardships and obstacles that users face when trying to exercise their software freedom by self-hosting web applications, offering Guix as a solution. The presentation will be held from 10:55 AM to 11:40 AM in room 32-141 of the MIT Stata Center in Cambridge, Massachusetts.")
(p "UPDATE: Here is the video recording and "
(a (@ (href "https://www.gnu.org/software/guix/guix-libreplanet-solving-the-deployment-crisis-20160319.pdf"))
"slides")
" from the talk.")
(video
(@ (src "https://media.libreplanet.org/mgoblin_media/media_entries/1419/LP_2016_03_19_Webber_-_Thompson_Solving_the_deployment_crisis_with_GNU_STREAM.webm")
(controls "controls"))
;; Fallback content.
(div
(@ (class "action-box centered-text"))
,(button-big
#:label "DOWNLOAD VIDEO"
#:url "https://media.libreplanet.org/mgoblin_media/media_entries/1419/LP_2016_03_19_Webber_-_Thompson_Solving_the_deployment_crisis_with_GNU_STREAM.webm")
(p "(WebM, 44 minutes)")))
(h4 "About LibrePlanet")
(p (a (@ (href "https://libreplanet.org"))
"LibrePlanet")
" is an annual conference run by the FSF and MIT's Student Information Processing Board for free software users, developers, and activists to gather and share ideas. Admission is gratis for FSF associate members.")
(h4 "About GNU Guix")
(p (a (@ (href "http://www.gnu.org/software/guix"))
"GNU Guix")
" is a functional package manager for the GNU system. The Guix System Distribution or GuixSD is an advanced distribution of the GNU system that relies on GNU Guix and "
(a (@ (href "http://www.gnu.org/distros/free-system-distribution-guidelines.html"))
"respects the user's freedom")
".")
(p "In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. Guix uses low-level mechanisms from the Nix package manager, except that packages are defined as native "
(a (@ (href "http://www.gnu.org/software/guile")) "Guile")
" modules, using extensions to the "
(a (@ (href "http://schemers.org")) "Scheme")
" language. GuixSD offers a declarative approach to operating system configuration management, and is highly customizable and hackable.")
(p "GuixSD can be used on an i686 or x86_64 machine. It is also possible to use Guix on top of an already installed GNU/Linux system, including on mips64el and armv7."))))

Some files were not shown because too many files have changed in this diff Show More