website: Incorporate sirgazil's major update.
Copied by Ludovic from https://bitbucket.org/sirgazil/guixsd-website hg changeset 209:ce9d62df07f2.
|
@ -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))))))
|
|
@ -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)))))
|
|
@ -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) " "))))
|
|
@ -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)))
|
|
@ -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))))
|
|
@ -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 "/"))))
|
|
@ -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))
|
|
@ -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")))
|
|
@ -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. ")))))
|
|
@ -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")) "."))))
|
|
@ -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"))))))
|
|
@ -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")
|
||||
".")))))
|
|
@ -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)")))))))))))
|
|
@ -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.")))))
|
|
@ -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/")))))))))
|
|
@ -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/")))))))
|
|
@ -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")))))))
|
|
@ -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"))))
|
|
@ -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)))))))
|
|
@ -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.")))))
|
|
@ -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") ".")))))
|
|
@ -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))
|
|
@ -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))))))
|
|
@ -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)))
|
|
@ -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?)))))
|
|
@ -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))))
|
|
@ -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")))))))
|
|
@ -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?))))))))
|
|
@ -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))))))
|
|
@ -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))
|
|
@ -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)))
|
|
@ -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"))))
|
|
@ -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") ".")))
|
|
@ -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). ")))))
|
|
@ -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))
|
|
@ -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)))
|
|
@ -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))))
|
|
@ -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)
|
||||
", "))))
|
|
@ -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))))))
|
|
@ -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))))))
|
|
@ -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)))))
|
|
@ -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))))))
|
|
@ -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))))))))
|
|
@ -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))
|
|
@ -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))))
|
After Width: | Height: | Size: 921 KiB |
After Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 3.0 MiB After Width: | Height: | Size: 2.6 MiB |
Before Width: | Height: | Size: 1.9 MiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 3.2 MiB |
Before Width: | Height: | Size: 259 KiB After Width: | Height: | Size: 839 KiB |
|
@ -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)
|
|
@ -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")))
|
||||
|
|
|
@ -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\"."))))
|
|
@ -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\"."))))
|
|
@ -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\"."))))
|
|
@ -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")))))
|
|
@ -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 That’s a Scheme Library\"."))))
|
|
@ -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 it’s 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 it’s 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)"))))))
|
||||
|
|
|
@ -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)"))))))
|
|
@ -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."))))
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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/"))
|
||||
|
|
|
@ -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, "
|
||||
|
|
|
@ -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 you’d 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
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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"))
|
||||
|
|
|
@ -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\""))))
|
|
@ -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 "It’s a feature that many users were waiting for: proper "
|
||||
|
|
|
@ -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"))
|
||||
|
|
|
@ -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"))
|
||||
|
|
|
@ -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!"
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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."
|
||||
|
|
|
@ -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!"
|
||||
|
|
|
@ -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!"
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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)"))))))
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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."))))
|
||||
|
|
|
@ -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."))))
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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):"
|
||||
|
|
|
@ -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:"
|
||||
|
|
|
@ -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 "
|
||||
|
|
|
@ -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"))
|
||||
|
|
|
@ -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."))))
|
||||
|
|