summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2017-12-15 23:10:54 +0100
committerRicardo Wurmus <rekado@elephly.net>2017-12-15 23:15:32 +0100
commit42cdcdff1945b112452029c6a79445aac15ffd16 (patch)
treefebbc1a8d8980b89b6313157fc06401ef24b3506
parent7683bf1183cfd05e5c4475265687096589d0239e (diff)
downloadgnu-guix-42cdcdff1945b112452029c6a79445aac15ffd16.tar
gnu-guix-42cdcdff1945b112452029c6a79445aac15ffd16.tar.gz
etc: Add snippets.
* etc/snippets/scheme-mode/guix-cvs-reference, etc/snippets/scheme-mode/guix-git-reference, etc/snippets/scheme-mode/guix-hg-reference, etc/snippets/scheme-mode/guix-origin, etc/snippets/scheme-mode/guix-package, etc/snippets/scheme-mode/guix-svn-reference, etc/snippets/text-mode/guix-commit-message-add-package, etc/snippets/text-mode/guix-commit-message-update-package: New files. * doc/contributing.texi (The Perfect Setup): Document snippets.
-rw-r--r--doc/contributing.texi28
-rw-r--r--etc/snippets/scheme-mode/guix-cvs-reference8
-rw-r--r--etc/snippets/scheme-mode/guix-git-reference7
-rw-r--r--etc/snippets/scheme-mode/guix-hg-reference7
-rw-r--r--etc/snippets/scheme-mode/guix-origin23
-rw-r--r--etc/snippets/scheme-mode/guix-package34
-rw-r--r--etc/snippets/scheme-mode/guix-svn-reference7
-rw-r--r--etc/snippets/text-mode/guix-commit-message-add-package8
-rw-r--r--etc/snippets/text-mode/guix-commit-message-update-package9
9 files changed, 131 insertions, 0 deletions
diff --git a/doc/contributing.texi b/doc/contributing.texi
index 1dd3ea8e1d..01f8aad9fb 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -193,6 +193,34 @@ facilities to directly operate on the syntax tree, such as raising an
s-expression or wrapping it, swallowing or rejecting the following
s-expression, etc.
+@cindex code snippets
+@cindex templates
+@cindex reducing boilerplate
+We also provide templates for common git commit messages and package
+definitions in the @file{etc/snippets} directory. These templates can
+be used with @url{http://joaotavora.github.io/yasnippet/, YASnippet} to
+expand short trigger strings to interactive text snippets. You may want
+to add the snippets directory to the @var{yas-snippet-dirs} variable in
+Emacs.
+
+@lisp
+;; @r{Assuming the Guix checkout is in ~/src/guix.}
+(with-eval-after-load 'yasnippet
+ (add-to-list 'yas-snippet-dirs "~/src/guix/etc/snippets"))
+@end lisp
+
+The commit message snippets depend on @url{https://magit.vc/, Magit} to
+display staged files. When editing a commit message type @code{add}
+followed by @kbd{TAB} to insert a commit message template for adding a
+package; type @code{update} followed by @kbd{TAB} to insert a template
+for updating a package.
+
+The main snippet for @code{scheme-mode} is triggered by typing
+@code{package...} followed by @kbd{TAB}. This snippet also inserts the
+trigger string @code{origin...}, which can be expanded further. The
+@code{origin} snippet in turn may insert other trigger strings ending on
+@code{...}, which also can be expanded further.
+
@node Coding Style
@section Coding Style
diff --git a/etc/snippets/scheme-mode/guix-cvs-reference b/etc/snippets/scheme-mode/guix-cvs-reference
new file mode 100644
index 0000000000..fbc5034b66
--- /dev/null
+++ b/etc/snippets/scheme-mode/guix-cvs-reference
@@ -0,0 +1,8 @@
+# -*- mode: snippet -*-
+# name: guix-cvs-reference
+# key: cvs-reference...
+# --
+(cvs-reference
+ (root-directory "${1:root-directory}")
+ (module "${2:module}")
+ (revision "${3:revision}")) \ No newline at end of file
diff --git a/etc/snippets/scheme-mode/guix-git-reference b/etc/snippets/scheme-mode/guix-git-reference
new file mode 100644
index 0000000000..29ca6a9c54
--- /dev/null
+++ b/etc/snippets/scheme-mode/guix-git-reference
@@ -0,0 +1,7 @@
+# -*- mode: snippet -*-
+# name: guix-git-reference
+# key: git-reference...
+# --
+(git-reference
+ (url "$1")
+ (commit ${2:commit})) \ No newline at end of file
diff --git a/etc/snippets/scheme-mode/guix-hg-reference b/etc/snippets/scheme-mode/guix-hg-reference
new file mode 100644
index 0000000000..95de16daae
--- /dev/null
+++ b/etc/snippets/scheme-mode/guix-hg-reference
@@ -0,0 +1,7 @@
+# -*- mode: snippet -*-
+# name: guix-hg-reference
+# key: hg-reference...
+# --
+(hg-reference
+ (url "$1")
+ (changeset ${2:changeset})) \ No newline at end of file
diff --git a/etc/snippets/scheme-mode/guix-origin b/etc/snippets/scheme-mode/guix-origin
new file mode 100644
index 0000000000..68d47135db
--- /dev/null
+++ b/etc/snippets/scheme-mode/guix-origin
@@ -0,0 +1,23 @@
+# -*- mode: snippet -*-
+# name: guix-origin
+# key: origin...
+# --
+(origin
+ (method ${1:$$(yas-choose-value "url-fetch"
+ "url-fetch/tarbomb"
+ "url-fetch/zipbomb"
+ "cvs-fetch"
+ "git-fetch"
+ "hg-fetch"
+ "svn-fetch")})
+ (uri ${1:$(cond ((equal yas-text "git-fetch") "git-reference...")
+ ((equal yas-text "svn-fetch") "svn-reference...")
+ ((equal yas-text "hg-fetch") "hg-reference...")
+ ((equal yas-text "cvs-fetch") "cvs-reference...")
+ (t "(string-append \\"https://\\" version \\".tar.gz\\")"))}$0)
+ ${1:$(cond ((member yas-text '("git-fetch" "svn-fetch" "hg-fetch" "cvs-fetch"))
+ "(file-name (string-append name \\"-\\" version \\"-checkout\\"))")
+ (t ""))}
+ (sha256
+ (base32
+ "$2"))) \ No newline at end of file
diff --git a/etc/snippets/scheme-mode/guix-package b/etc/snippets/scheme-mode/guix-package
new file mode 100644
index 0000000000..d392e82093
--- /dev/null
+++ b/etc/snippets/scheme-mode/guix-package
@@ -0,0 +1,34 @@
+# -*- mode: snippet -*-
+# name: guix-package
+# key: package...
+# --
+(define-public $1
+ (package
+ (name "$1")
+ (version "$2")
+ (source origin...$0)
+ (build-system ${3:$$(yas-choose-value "ant-build-system"
+ "asdf-build-system"
+ "cargo-build-system"
+ "cmake-build-system"
+ "dub-build-system"
+ "emacs-build-system"
+ "font-build-system"
+ "glib-or-gtk-build-system"
+ "gnu-build-system"
+ "go-build-system"
+ "haskell-build-system"
+ "meson-build-system"
+ "minify-build-system"
+ "ocaml-build-system"
+ "perl-build-system"
+ "python-build-system"
+ "r-build-system"
+ "ruby-build-system"
+ "texlive-build-system"
+ "trivial-build-system"
+ "waf-build-system")})
+ (home-page "$4")
+ (synopsis "$5")
+ (description "$6")
+ (license $7))) \ No newline at end of file
diff --git a/etc/snippets/scheme-mode/guix-svn-reference b/etc/snippets/scheme-mode/guix-svn-reference
new file mode 100644
index 0000000000..7d897dc690
--- /dev/null
+++ b/etc/snippets/scheme-mode/guix-svn-reference
@@ -0,0 +1,7 @@
+# -*- mode: snippet -*-
+# name: guix-svn-reference
+# key: svn-reference...
+# --
+(svn-reference
+ (url "$1")
+ (revision ${2:svn-revision})) \ No newline at end of file
diff --git a/etc/snippets/text-mode/guix-commit-message-add-package b/etc/snippets/text-mode/guix-commit-message-add-package
new file mode 100644
index 0000000000..1aebe8a763
--- /dev/null
+++ b/etc/snippets/text-mode/guix-commit-message-add-package
@@ -0,0 +1,8 @@
+# -*- mode: snippet -*-
+# name: guix-commit-message-add-package
+# key: add
+# condition: git-commit-mode
+# --
+gnu: Add $1.
+
+* `(car (magit-staged-files))` ($1): New variable. \ No newline at end of file
diff --git a/etc/snippets/text-mode/guix-commit-message-update-package b/etc/snippets/text-mode/guix-commit-message-update-package
new file mode 100644
index 0000000000..79fcf7c6e3
--- /dev/null
+++ b/etc/snippets/text-mode/guix-commit-message-update-package
@@ -0,0 +1,9 @@
+# -*- mode: snippet -*-
+# name: guix-commit-message-update-package
+# key: update
+# condition: git-commit-mode
+# --
+gnu: $1: Update to $2.
+
+* `(car (magit-staged-files))` ($1): Update to $2.$0
+`(mapconcat (lambda (file) (concat "* " file)) (cdr (magit-staged-files)) "\n")` \ No newline at end of file