aboutsummaryrefslogtreecommitdiff
path: root/.dir-locals.el
Commit message (Collapse)AuthorAge
* store: Add with-store/non-blocking.Christopher Baines2024-05-13
| | | | | | | | | | | | | | | | | | | | | | | For some applications, it's important to establish a non-blocking connection rather than just making the socket non-blocking after the connection is established. This is because there is I/O on the socket that will block during the handshake. I've noticed this blocking during the handshake causing issues in the build coordinator for example. This commit adds a new with-store variant to avoid changing the behaviour of with-store/open-connection to ensure that this change can't break anything that depends on the blocking nature of the socket. * guix/store.scm (open-unix-domain-socket, open-inet-socket): Take #:non-blocking? and use SOCK_NONBLOCK when calling socket if appropriate. (connect-to-daemon, open-connection, call-with-store): Take #:non-blocking? and pass it on. (with-store/non-blocking): New syntax rule. * .dir-locals.el (scheme-mode): Add entry for with-store/non-blocking. Change-Id: I8225762b78448bc1f7b698c8de5d736e13f577bf
* .dir-locals: Configure indentation for swap-space.Tomas Volf2024-05-13
| | | | | | | * .dir-locals.el (scheme-mode): Indent swap-space same as file-system. Change-Id: Id9f2cbd3c81343b479ab1e4df29c65f8b5bd739f Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* store: database: Remove with-statement and associated code.Christopher Baines2024-04-03
| | | | | | | | | | | | | | | | | | I think using dynamic-wind to finalize all statements is the wrong approach. Firstly it would be good to allow reseting statements rather than finalizing them. Then for the problem of handling errors, the approach I've settled on in the build coordinator is to close the database connection, since that'll trigger guile-sqlite3 to finalize all the cached statements. This reverts commit 5d6e2255286e591def122ec2f4a3cbda497fea21. * .dir-locals.el (scheme-mode): Remove with-statement. * guix/store/database.scm (call-with-statement): Remove procedure. (with-statement): Remove syntax rule. (call-with-transaction, last-insert-row-id, path-id, update-or-insert, add-references): Don't use with-statement. Change-Id: I2fd976b3f12ec8105cc56350933a953cf53647e8
* store: database: Remove call-with-savepoint and associated code.Christopher Baines2024-04-03
| | | | | | | | | | | | | | | | | | While care does need to be taken with making updates or inserts to the ValidPaths table, I think that trying to ensure this within update-or-insert is the wrong approach. Instead, when working with the store database, only one connection should be used to make changes to the database and those changes should happen in transactions that ideally begin immediately. This reverts commit 37545de4a3bf59611c184b31506fe9a16abe4c8b. * .dir-locals.el (scheme-mode): Remove entries for call-with-savepoint and call-with-retrying-savepoint. * guix/store/database.scm (call-with-savepoint, call-with-retrying-savepoint): Remove procedures. (update-or-insert): Remove use of call-with-savepoint. Change-Id: I2f986e8623d8235a90c40d5f219c1292c1ab157b
* .dir-locals.el: Adjust indentation rule for ‘test-assertm’.Ludovic Courtès2023-10-20
| | | | | | | | | This reverts commit 92755c6352fd967bc74d8e5354aad057d779b717, which, at the time, was correct for the 3-argument ‘test-assertm’ macro in ‘tests/pack.scm’ but incorrect for the 2-argument variant found in other test files. * .dir-locals.el: Decrease argument count for ‘test-assertm’.
* .dir-locals.el: Update bug-reference configuration and document it.Maxim Cournoyer2023-09-17
| | | | | | | | (nil) <bug-reference-url-format>: Update URL. Add comment. * doc/contributing.texi (The Perfect Setup): New "Viewing bugs within Emacs" subsection. Co-authored-by: Brian Cully <bjc@spork.org>
* .dir-locals: Streamline Geiser configuration.Maxim Cournoyer2023-09-06
| | | | | | | | | | | | | Geiser now has support locating the project root and adding it to the load path without external help; leverage it. * .dir-locals.el [nil]: Remove obsolete Geiser configuration. Set the geiser-repl-per-project-p variable to t. * doc/contributing.texi (The Perfect Setup): No longer mention explicitly setting the geiser-guile-load-path; instead mention the effect of the .dir-locals.el file. Reported-by: Wolf <wolf@wolfsden.cz>
* records: Add MATCH-RECORD-LAMBDA.(unmatched-parenthesis ew syntax2023-06-04
| | | | | | | * guix/records.scm (match-record-lambda): New syntax. * tests/records.scm ("match-record-lambda"): New test. Signed-off-by: Josselin Poiret <dev@jpoiret.xyz>
* dir-locals: Fix MATCH-RECORD indentation.(unmatched-parenthesis d2023-06-04
| | | | | | | * .dir-locals.el: Treat the fourth form onwards as the body, rather than the third onwards. Signed-off-by: Josselin Poiret <dev@jpoiret.xyz>
* Revert gexp->derivation and computed-file indentation rules.Maxim Cournoyer2023-03-17
| | | | | | | | | | | | | | This reverts b1c25e2ce364741d1c257d3bb3ab773032807a80 and partially reverts 82daab42811a2e3c7684ebdf12af75ff0fa67b99, which means the computed-file and gexp->derivation procedures are now indented as normal procedures. Rationale: see the discussion at https://lists.gnu.org/archive/html/guix-devel/2023-03/msg00008.html. In a nutshell: the convention is to use special rules for special forms (macros), not for procedures. * .dir-locals.el (scheme-mode): Remove the special indentation rules for the computed-file and gexp->derivation procedures.
* .dir-locals.el: Allow Guix root-dir overrides when working via Tramp.Brian Cully2023-03-05
| | | | | | | | * .dir-localsl.el: Add only the local part of the root directory to the guile search path. This lets you use Tramp to hack on a remote Guix checkout. Signed-off-by: Leo Famulari <leo@famulari.name>
* .dir-locals: Add let-keywords indentation rules.Maxim Cournoyer2023-02-19
| | | | * .dir-locals.el (scheme-mode): Add let-keywords indentation rules.
* .dir-locals.el: Adjust indentation rule for test-assertm.Maxim Cournoyer2023-02-02
| | | | | | * .dir-locals.el: Adjust the scheme-indent-function property for test-assertm, so that the two first arguments (the test name and the store variable) are indented as procedure arguments.
* .dir-locals.el: Add indentation rule for computed-file.Maxim Cournoyer2023-02-02
| | | | | | * .dir-locals.el: Configure scheme-indent-function property for computed-file, so that its first argument (the file name) is indented as a procedure argument.
* .dir-locals.el: Update yas snippets directory.Andrew Tropin2022-09-07
| | | | * .dir-locals.el (eval): Update yas snippets directory.
* .dir-locals.el: Add .go to completion-ignored-extensions.Andrew Tropin2022-09-05
| | | | * .dir-locals.el (eval): Add .go to completion-ignored-extensions.
* .dir-locals.el: Add guix yasnippets.Andrew Tropin2022-09-05
| | | | * .dir-locals.el (eval): Add guix yasnippets.
* monads: Add 'mparameterize'.Ludovic Courtès2022-07-10
| | | | | | | * etc/system-tests.scm (mparameterize): Move to... * guix/monads.scm (mparameterize): ... here. * tests/monads.scm ("mparameterize"): New test. * .dir-locals.el (c-mode): Add it.
* .dir-locals.el: Restore Emacs 27 lisp-fill-paragraph behavior.Maxim Cournoyer2022-07-10
| | | | | * .dir-locals.el (scheme-mode): Set fill-paragraph-function to a lisp-fill-paragraph version that matches that of Emacs 27.
* .dir-locals.el: Properly indent 'wrap-script'.Maxim Cournoyer2022-06-28
| | | | | * .dir-locals.el (scheme-mode): Indent 'wrap-script' the same way as 'wrap-program'.
* .dir-locals: Adjust to bug-reference-mode in Emacs 28.Ludovic Courtès2022-06-07
| | | | | * .dir-locals.el: Adjust 'bug-reference-bug-regexp' and 'bug-reference-url-format' to Emacs 28.
* import: github: Reuse HTTP connection for the /tags URL fallback.Ludovic Courtès2022-03-06
| | | | | | | * guix/import/github.scm (fetch-releases-or-tags): Call 'open-connection-for-uri' and reuse the same connection for the two 'http-fetch' calls. * .dir-locals.el (scheme-mode): Add 'call-with-port'.
* tests: Add (guix http-client) tests.Ludovic Courtès2022-03-06
| | | | | | * tests/http-client.scm: New file. * Makefile.am (SCM_TESTS): Add it. * .dir-locals.el (scheme-mode): Add 'with-http-server'.
* .dir-locals.el: Don't mess up indentation of prepend and append.Liliana Marie Prikler2022-01-29
| | | | | | | | | | The current version appears to assume special values in the first and second package, but it's either all lists (default append) or all package input expressions (inside modify-inputs), which themselves are either packages or lists consisting of a package and a string. * .dir-locals.el: Drop (eval . (put 'prepend 'scheme-indent-function 2)) and (eval . (put 'append 'scheme-indent-function 2)).
* Merge branch 'master' into core-updates-frozenMarius Bakke2021-08-12
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: gnu/packages/algebra.scm gnu/packages/games.scm gnu/packages/golang.scm gnu/packages/kerberos.scm gnu/packages/mail.scm gnu/packages/python.scm gnu/packages/ruby.scm gnu/packages/scheme.scm gnu/packages/tex.scm gnu/packages/tls.scm gnu/packages/version-control.scm
| * .dir-locals.el: Specify indentation rule for with-shepherd-action.Maxim Cournoyer2021-08-02
| | | | | | | | * .dir-locals.el (scheme-mode) <with-shepherd-action>: New indentation rule.
* | Merge branch 'master' into core-updatesLudovic Courtès2021-07-18
|\|
| * pack: Add support for the deb format.Maxim Cournoyer2021-06-29
| | | | | | | | | | | | | | | | | | | | | | * .dir-locals.el (scheme-mode)[gexp->derivation]: Define indentation rule. * guix/scripts/pack.scm (debian-archive): New procedure. (%formats): Register the new deb format. (show-formats): Add it to the usage string. * tests/pack.scm (%ar-bootstrap): New variable. (deb archive with symlinks): New test. * doc/guix.texi (Invoking guix pack): Document it. * NEWS: Add news entry.
* | packages: Add 'modify-inputs'.Ludovic Courtès2021-07-11
| | | | | | | | | | | | | | * guix/packages.scm (inputs-sans-labels, replace-input): New procedures. (prepend, replace, modify-inputs): New macros. * doc/guix.texi (Defining Package Variants): Document 'modify-inputs'. * dir-locals.el: Add 'modify-inputs' and its keywords.
* | build-system: Rewrite using gexps.Ludovic Courtès2021-03-30
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * guix/packages.scm (expand-input): Remove 'store', 'system', and 'cross-system' parameters; add #:native?. Rewrite to return name/gexp-input tuples. (bag->derivation): Adjust accordingly. Lower (bag-build bag). (bag->cross-derivation): Ditto. Instead of #:native-drvs and #:target-drvs, pass #:build-inputs, #:host-inputs, and #:target-inputs. (%derivation-cache): Remove. * gnu/packages/bootstrap.scm (raw-build): Turn into a monadic procedure. * gnu/packages/commencement.scm (glibc-final)[arguments]: Use 'gexp-input' for the #:allowed-references argument. * guix/build-system/cmake.scm (cmake-build): Remove 'store' parameter. Switch to the use of gexps and 'gexp->derivation'. (lower): Remove #:source from 'private-keywords'. * guix/build-system/glib-or-gtk.scm (glib-or-gtk-build, lower): Likewise. * guix/build-system/font.scm (font-build): Likewise. * guix/build-system/gnu.scm (gnu-build): Likewise, and remove 'canonicalize-reference'. (gnu-cross-build): Likewise, and expect #:build-inputs, #:host-inputs, and #:target-inputs instead of #:native-drvs and #:target-drvs. (lower): Likewise. * guix/build-system/perl.scm (perl-build, lower): Likewise. * guix/build-system/python.scm (python-build, lower): Likewise. * guix/build-system/ruby.scm (ruby-build, lower): Likewise. * guix/build-system/waf.scm (waf-build, lower): Likewise. * guix/build-system/trivial.scm (guile-for-build): Remove. (trivial-build): Remove 'store' parameter, change to gexps. (trivial-cross-build): Ditto, and change to #:build-inputs & co. * guix/build-system/cargo.scm (cargo-build): Change to 'gexp->derivation'. * guix/build-system/copy.scm (copy-build): Likewise. * guix/build-system/dune.scm (dune-build): Likewise. * guix/build-system/guile.scm (guile-build, guile-cross-build): Likewise. * guix/build-system/meson.scm (meson-build): Likewise. * guix/build-system/ocaml.scm (ocaml-build): Likewise. * guix/build-system/scons.scm (scons-build): Likewise. * guix/build-system/texlive.scm (texlive-build): Likewise. * guix/build-system/android-ndk.scm (android-ndk-build): Likewise. * guix/build-system/ant.scm (ant-build): Likewise. * guix/build-system/asdf.scm (asdf-build/source, asdf-build): Likewise. * guix/build-system/chicken.scm (chicken-build): Likewise. * guix/build-system/clojure.scm (clojure-build): Likewise. (source->output-path, maybe-guile->guile): Remove. * guix/build-system/dub.scm (dub-build): Likewise. * guix/build-system/emacs.scm (emacs-build): Likewise. * guix/build-system/go.scm (go-build): Likewise. * guix/build-system/haskell.scm (haskell-build): Likewise. * guix/build-system/julia.scm (julia-build): Likewise. * guix/build-system/linux-module.scm (linux-module-build) (linux-module-build-cross): Likewise. * guix/build-system/maven.scm (maven-build): Likewise. * guix/build-system/minify.scm (minify-build): Likewise. * guix/build-system/node.scm (node-build): Likewise. * guix/build-system/qt.scm (qt-build, qt-cross-build): Likewise. * guix/build-system/r.scm (r-build): Likewise. * guix/build-system/rakudo.scm (rakudo-build): Likewise. * guix/build-system/renpy.scm (renpy-build): Likewise. * tests/builders.scm ("gnu-build"): Call 'store-lower' on 'gnu-build'. Pass #:source parameter. * tests/packages.scm ("search paths"): Use 'abort-to-prompt' instead of a normal return from the 'build' method. ("package->bag, sensitivity to %current-target-system"): Change 'build' to match the new build system signature. squash! build-system: Rewrite using gexps. squash! build-system: Rewrite using gexps.
* system: 'init' does not recompute the hash of each store item.Ludovic Courtès2020-12-15
| | | | | | | | | | | | | | | Fixes <https://bugs.gnu.org/44760>. Previously, the 'register-path' call would re-traverse ITEM to compute its nar hash, even though that hash is already known in the initial store. This patch also avoids repeated opening/closing of the database. * guix/store/database.scm (call-with-database): Export. * guix/scripts/system.scm (copy-item): Add 'db' parameter. Call 'sqlite-register' instead of 'register-path'. (copy-closure): Remove redundant call to 'references*'. Call 'call-with-database' and pass the database to 'copy-item'.
* Merge remote-tracking branch 'origin/version-1.2.0' into masterMaxim Cournoyer2020-11-17
|\ | | | | | | | | | | | | | | Conflicts: gnu/packages/bioinformatics.scm The python-pysam package fixed in master was kept instead of the update done in the version-1.2.0 branch.
| * maint: update-guix-package: Optionally add sources to store.Maxim Cournoyer2020-11-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Following discussions in <https://issues.guix.gnu.org/43893>, keeping a copy of the updated package source is desirable when generating a release. * build-aux/update-guix-package.scm (version-controlled?): Remove variable. (call-with-temporary-git-worktree): Renamed from 'with-temporary-git-worktree'. Update doc. Do not change directory implicitly. Define as a procedure, not a syntax. (keep-source-in-store): New procedure. (main): Adjust to use with call-with-temporary-git-worktree. Add the sources to the store when GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT is set. Exit gracefully when FIND-ORIGIN-REMOTE returns #f. (%savannah-guix-git-repo-push-url-regexp): Adjust match for a potential colon separator. * Makefile.am (GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT): Adjust. * .dir-locals.el (scheme-mode): Remove entry for with-temporary-git-worktree. * doc/contributing.texi (Updating the Guix Package): Update doc. Co-authored-by: Ludovic Courtès <ludo@gnu.org>
* | .dir-locals.el: Add upstream report link.Miguel Ángel Arruga Vivas2020-11-16
| | | | | | | | | | | | Follow up from 1d6e7732b163c9e945c9e5b32c726fe3b5f09c3a. * .dir-locals.el: Modify comment to point at the report to bug-gnu-emacs.
* | .dir-locals.el: Use setq-local on guix-directory.Christopher Lemmer Webber2020-11-16
| | | | | | | | | | * .dir-locals.el: Use setq-local on guix-directory. While a problem with using setq hasn't been identified, this seems like good hygiene.
* | .dir-locals.el: Prevent errors if .dir-locals.el isn't found.Christopher Lemmer Webber2020-11-16
|/ | | | | | | | | | | | While this repo should presumably always have a .dir-locals.el by the nature of this file itself, it seems that this behavior "leaks". See added comment for more details on the fix to this strange bug, which is likely an upstream emacs or vc-mode issue. Thanks to Miguel Ángel Arruga Vivas and Maxim Cournoyer for helping investigate this problem. * .dir-locals.el: Don't error out if .dir-locals.el isn't found.
* .dir-locals.el: Require cl-lib at runtime.Miguel Ángel Arruga Vivas2020-11-01
| | | | * .dir-locals.el (nil)<Geiser>: Load cl-lib when needed.
* .dir-locals.el: Automatically set the GEISER-GUILE-LOAD-PATH variable.Maxim Cournoyer2020-10-31
| | | | | | | | Thanks to Miguel Ángel Arruga Vivas and Pierre Neidhardt for their suggestions and improvements. * .dir-locals.el: Set the GUIX-DIRECTORY and GEISER-GUILE-LOAD-PATH Emacs variables based on the location of the .dir-locals file.
* maint: update-guix-package: Prevent accidentally breaking guix pull.Maxim Cournoyer2020-10-19
| | | | | | | | | | | | | | | | | | | | | Fixes <https://issues.guix.gnu.org/43893>. This changes the 'update-guix-package' tool so that it: 1. Always uses a clean checkout to compute the hash of the updated 'guix' package. 2. Ensures the commit used in the updated 'guix' package definition has already been pushed upstream. * build-aux/update-guix-package.scm (%savannah-guix-git-repo-push-url): New variable. (with-input-pipe-to-string, with-temporary-git-worktree): New syntaxes. (find-origin-remote, git-add-worktree): New procedures. (commit-already-pushed?): New predicate. (main): Check the commit used has already been pushed upstream and compute the hash from a clean checkout. * doc/contributing.texi (Updating the Guix Package): Document it. * .dir-locals.el (scheme-mode): Fix indentation of with-temporary-git-worktree.
* deduplication: pass store directory to replace-with-link.Caleb Ristvedt2020-09-14
| | | | | | | | | | | | | This causes with-writable-file to take into consideration the actual store being used, as passed to 'deduplicate', rather than whatever (%store-directory) may return. * guix/store/deduplication.scm (replace-with-link): new keyword argument 'store'. Pass to with-writable-file. (with-writable-file, call-with-writable-file): new store argument. (deduplicate): pass store to replace-with-link. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* .dir-locals.el: fix call-with-{retrying-}transaction indenting.Caleb Ristvedt2020-09-14
| | | | | | | * .dir-locals.el (call-with-transaction, call-with-retrying-transaction): change scheme-indent-function property from 2 to 1. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* .dir-locals.el: Add indentation rule for 'package/inherit'.Ludovic Courtès2020-08-26
| | | | * .dir-locals.el (scheme-mode): Add 'package/inherit'.
* deduplication: Use 'dynamic-wind' when changing permissions of the parent.Ludovic Courtès2020-06-25
| | | | | | | | Suggested by Caleb Ristvedt <caleb.ristvedt@cune.org>. * guix/store/deduplication.scm (call-with-writable-file): New procedure. (with-writable-file): New macro. (replace-with-link): Use it.
* channels: 'latest-channel-instance' authenticates Git checkouts.Ludovic Courtès2020-06-16
| | | | | | | | | | | | | | | | | | | | | | Fixes <https://bugs.gnu.org/22883>. * guix/channels.scm (<channel>)[introduction]: New field. (<channel-introduction>): New record type. (%guix-channel-introduction): New variable. (%default-channels): Use it. (<channel-metadata>)[keyring-reference]: New field. (%default-keyring-reference): New variable. (read-channel-metadata, read-channel-metadata-from-source): Initialize the 'keyring-reference' field. (commit-short-id, verify-introductory-commit) (authenticate-channel): New procedures. (latest-channel-instance): Call 'authenticate-channel' when CHANNEL has an introduction. * tests/channels.scm (gpg+git-available?, commit-id-string): New procedures. ("authenticate-channel, wrong first commit signer"): ("authenticate-channel, .guix-authorizations"): New tests. * doc/guix.texi (Invoking guix pull): Mention authentication.
* database: separate transaction-handling and retry-handling.Caleb Ristvedt2020-06-10
| | | | | | | | | | | | | | | | | | | Previously call-with-transaction would both retry when SQLITE_BUSY errors were thrown and do what its name suggested (start and rollback/commit a transaction). This changes it to do only what its name implies, which simplifies its implementation. Retrying is provided by the new call-with-SQLITE_BUSY-retrying procedure. * guix/store/database.scm (call-with-transaction): no longer restarts, new #:restartable? argument controls whether "begin" or "begin immediate" is used. (call-with-SQLITE_BUSY-retrying, call-with-retrying-transaction, call-with-retrying-savepoint): new procedures. (register-items): use call-with-retrying-transaction to preserve old behavior. * .dir-locals.el (call-with-retrying-transaction, call-with-retrying-savepoint): add indentation information.
* database: ensure update-or-insert is run within a transactionCaleb Ristvedt2020-06-10
| | | | | | | | | | | update-or-insert can break if an insert occurs between when it decides whether to update or insert and when it actually performs that operation. Putting the check and the update/insert operation in the same transaction ensures that the update/insert will only succeed if no other write has occurred in the middle. * guix/store/database.scm (call-with-savepoint): new procedure. (update-or-insert): use call-with-savepoint to ensure the read and the insert/update occur within the same transaction.
* database: rewrite query procedures in terms of with-statement.Caleb Ristvedt2020-06-10
| | | | | | | | | | | | | | | | | | | Most of our queries would fail to finalize their statements properly if sqlite returned an error during their execution. This resolves that, and also makes them somewhat more concise as a side-effect. This also makes some small changes to improve certain queries where behavior was strange or overly verbose. * guix/store/database.scm (call-with-statement): new procedure. (with-statement): new macro. (last-insert-row-id, path-id, update-or-insert, add-references): rewrite to use with-statement. (update-or-insert): factor last-insert-row-id out of the end of both branches. (add-references): remove pointless last-insert-row-id call. * .dir-locals.el (with-statement): add indenting information.
* ui: 'display-search-results' automatically invokes the pager.Ludovic Courtès2020-06-06
| | | | | | * guix/ui.scm (call-with-paginated-output-port): New procedure. (with-paginated-output-port): New macro. (display-search-results): Use it instead of displaying a hint.
* git-authenticate: Add tests.Ludovic Courtès2020-06-05
| | | | | | | | | | | | | * guix/tests/git.scm (call-with-environment-variables) (with-environment-variables): Remove. * guix/tests/git.scm (populate-git-repository): Add clauses for signed commits and signed merges. * guix/tests/gnupg.scm: New file. * tests/git-authenticate.scm: New file. * tests/ed25519bis.key, tests/ed25519bis.sec: New files. * Makefile.am (dist_noinst_DATA): Add 'guix/tests/gnupg.scm'. (SCM_TESTS): Add 'tests/git-authenticate.scm'. (EXTRA_DIST): Add tests/ed25519bis.{key,sec}.
* gexp: Add 'let-system'.Ludovic Courtès2020-05-16
| | | | | | | | | | | | | | | * guix/gexp.scm (<system-binding>): New record type. (let-system): New macro. (system-binding-compiler): New procedure. (default-expander): Add 'self-quoting?' case. (self-quoting?): New procedure. (lower-inputs): Add 'filterm'. Pass the result of 'mapm/accumulate-builds' through FILTERM. (gexp->sexp)[self-quoting?]: Remove. * tests/gexp.scm ("let-system", "let-system, target") ("let-system, ungexp-native, target") ("let-system, nested"): New tests. * doc/guix.texi (G-Expressions): Document it.