Commit graph

340 commits

Author SHA1 Message Date
Maxim Cournoyer
10482f731e
Reapply "Update Maxim's email address."
This reverts commit a7db92d9b3, this time with
the more careful command, to avoid a world rebuild:

grep -rl --exclude-dir=build --exclude-dir=patches --exclude=ld-wrapper.in \
  --exclude=sitecustomize.py --exclude=guix-emacs.el maxim.cournoyer@gmail.com |
  xargs sed -i 's/maxim.cournoyer@gmail.com/maxim@guixotic.coop/g'

Change-Id: I0871f5cf9ace79e34e78e24154d0da6ea95a3a91
2025-09-18 13:44:12 +09:00
Maxim Cournoyer
a7db92d9b3
Revert "Update Maxim's email address."
This reverts commit d0d87a744d. Oops! This
caused a world rebuild.

Change-Id: I25fff644b2b61d0ee93d69b457b04c72b5b74d15
2025-09-18 12:07:31 +09:00
Maxim Cournoyer
d0d87a744d
Update Maxim's email address.
The change was automated via:

  git grep -l maxim.cournoyer@gmail.com |
    xargs sed -i 's/maxim.cournoyer@gmail.com/maxim@guixotic.coop/g'

* .mailmap: New entry.

Change-Id: Iaa88b1e51c94159c49138fb43910badb990eb169
2025-09-18 08:05:19 +09:00
Efraim Flashner
cc588d8eb6
guix gc: Adjust size suffix based on the amount of data.
* guix/ui.scm (number->size): New procedure.
* guix/scripts/gc.scm (guix-gc)[actions]: Display the amount of
collected-garbage using more specific units.
[ensure-free-space]: Display the size using an appropriate size unit.
* nix/libstore/gc.cc (deletePathRecursive, removeUnusedLinks): Same.
* nix/libstore/optimise-store.cc (showBytes): Move function ...
* nix/libstore/misc.cc: ... to here.  Expand to adjust the output based
on the amount of bytes received.

Change-Id: Idceb1a13f8e45f959d327f53d1a8accb29d2678b
2025-07-28 13:57:53 +03:00
Maxim Cournoyer
18ed22536d
ui: Allow evaluating multi-expressions strings with read/eval.
This can be useful when evaluating a scheme-file store output for example,
which has multiple top level expressions.

* guix/ui.scm (read/eval): Also accept a port object as argument.  Read and
evaluate all expressions from input port or string.

Change-Id: I0213706fa4824c3a8ffe5d93f44f263048cb62c2
2025-05-09 23:05:26 +09:00
Brian Kubisiak
60c41183d9
ui: Search channels for guix extensions
* guix/describe.scm (append-channels-to-load-path!): New function.
* gnu/packages.scm (%package-module-path): Call new function. Remove
the code that the function call replaces.
* guix/ui.scm (extension-directories): Call new function. Search
channels for guix extensions.
* guix/self.scm (compiled-guix)[*core-modules*]: Add 'guile-git' to
the list of extensions.

Change-Id: I53af828dc554485ca28389c9e2653ea6b4fb6b7e
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2025-03-08 17:40:58 +01:00
Ludovic Courtès
6b60d9efd7
ui: It’s 2025 now!
* guix/ui.scm (show-version-and-exit): Change year to 2025.

Change-Id: I83bffc752904d20c82afe527097226d8a8aa9170
2025-01-06 15:02:10 +01:00
Ludovic Courtès
d7c8a5ff3c
guile-launcher: Avoid the “C” locale and try “C.UTF-8”.
This is a followup to ed0cd12a82, which
adds the C.UTF-8 locale to the glibc package, and
ee4e79f871, which changed the default to
“C.UTF-8” for ‘guix’ commands.

Fixes a bug whereby starting ‘guix’ in an environment where the LC_*
variables are unset would start it in the “C” locale:

  echo '(pk (setlocale LC_ALL))' | guix shell -CW coreutils -- guix repl

This would lead to breakage for commands such as ‘guix substitute’ that
need to run in a UTF-8 locale.

* gnu/packages/aux-files/guile-launcher.c (main): Try “C.UTF-8” before
“en_US.UTF-8”.  Do that also when the current locale is “C”.
* guix/ui.scm (install-locale): Likewise.

Change-Id: I36da4db8f898f1083b33760e1ab46c3a257de811
2025-01-04 23:35:40 +01:00
Ludovic Courtès
2b8d612f4e
ui: ‘display-hint’ checks column number for the right port.
This fixes (rather: works around) something like:

  $ guix import pypi nipype -r >/dev/null
  […]
  hint: Backtrace:
  […]
     344:42  3 (display-hint "This indicates that the\npackage is a…" . #)
  In ice-9/boot-9.scm:
    1747:15  2 (with-exception-handler #<procedure 7f9ee8e5f120 at ic…> …)
  In guix/build/syscalls.scm:
    2334:35  1 (_)
     2323:8  0 (terminal-window-size _)

  guix/build/syscalls.scm:2323:8: In procedure terminal-window-size:
  In procedure terminal-window-size: Inappropriate ioctl for device

* guix/ui.scm (display-hint): Pass PORT to ‘terminal-columns’.

Change-Id: Ica0096aee5e6b2c19814ae5d71de9ffe9ab32430
2024-11-23 16:01:44 +01:00
Ludovic Courtès
f7a0be4d73
ui: ‘show-what-to-build’ displays builds in topological order.
That gives something like:

  $ ./pre-inst-env guix build vim --no-grafts --no-substitutes -n
  The following derivations would be built:
    /gnu/store/…-tcsh-6.24.01.tar.gz.drv
    /gnu/store/…-tcsh-6.24.01.tar.zst.drv
    /gnu/store/…-tcsh-6.24.01.drv
    /gnu/store/…-vim-9.1.0744-checkout.drv
    /gnu/store/…-vim-9.1.0744.drv

… with the derivation(s) being asked for coming last.

* guix/ui.scm (show-what-to-build): Reverse ‘build/full’ before folding it.

Change-Id: Ic0da9f4f8a58c7ed5e2d10f6ec2226f0865aed75
2024-11-12 23:46:52 +01:00
Ludovic Courtès
49ece68b0b
ui: Clarify that the module is meant for UIs only.
* guix/ui.scm: Add comment.

Suggested-by: Tomas Volf <~@wolfsden.cz>
Change-Id: I203b2e2bfe1b6f94b96054fe61069f20b580fcd6
2024-09-04 19:17:01 +02:00
Ludovic Courtès
ee4e79f871
ui: Default to “C.UTF-8” locale instead of “en_US.utf8”.
This is a followup to 1cebc334a7.

* guix/ui.scm (install-locale): Default to “C.UTF-8”.

Change-Id: Icc92bfe0d75c415eb11a9af207824544ed75e084
2024-08-31 10:44:46 +02:00
Christopher Baines
b6afc69605
guix: packages: Add &unsupported-cross-compilation-target-error.
* guix/packages.scm (&unsupported-cross-compilation-target-error): New
variable.
* guix/ui.scm (call-with-error-handling): Handle this new condition type.

Change-Id: I9e7782ee4799b5fecb3c890a75008c35c003f55d
2024-07-15 22:34:24 +01:00
Christopher Baines
4b85db10b1
guix: packages: Add new &package-unsupported-target-error.
Some packages don't support cross building to specific targets, so add a error
type to signal this.

* guix/packages.scm (&package-unsupported-target-error): New condition type.
[package-unsupported-target-error? package-unsupported-target-error-target):
New procedures.
* guix/ui.scm (call-with-error-handling): Handle this new condition type.

Change-Id: Ib47813399e04b20d616a95f545b6aabe25736e92
2024-07-15 22:34:22 +01:00
Ludovic Courtès
657107cb90
ui: Delay use of (guix build syscalls).
This ensures (guix build syscalls) is loaded only when needed.

* guix/ui.scm (%text-width): Unconditionally alias ‘*line-width*’.
Remove initialization.
<top level>: Remove code for Guile < 2.2.7.
(package->recutils): Change default #:width to (terminal-columns).

Change-Id: I990a1b5b0f20a6243e47e314d1d3d4f8298b7151
2024-04-15 22:36:42 +02:00
Ludovic Courtès
7bc1f7be62
ui: Autoload some more.
* guix/ui.scm: Autoload a number of modules.

Change-Id: I22d4f719dae73594499522ce6dc8464948f564ec
2024-03-31 18:39:57 +02:00
Ludovic Courtès
dc5e9c0130
ui: It’s 2024 now!
* guix/ui.scm (show-version-and-exit): Change year to 2024.

Change-Id: I00fc2754da2b93d8b595a35aacdff087124df706
2024-01-05 17:27:21 +01:00
Simon Tournier
b4d1eb53c0
ui: Handle EPIPE errors when displaying Guix version.
Fixes <https://issues.guix.gnu.org/66254>.
Reported by Clément Lassieur <clement@lassieur.org>.

* guix/ui.scm (show-version-and-exit): Handle EPIPE errors when displaying
version.
2023-10-17 14:51:53 +02:00
Ludovic Courtès
3363ff1867
ui: 'load*' accepts /dev/fd/N files pointing to a pipe.
This allows users to write Bash commands like:

  guix time-machine -C <(echo %default-channels) -- ...

or:

  guix build -m <(echo '(specifications->manifest (list "guile"))')

Previously, on GNU/Linux, they would fail with:

  error: failed to load '/dev/fd/63': No such file or directory

* guix/ui.scm (try-canonicalize-path): New procedure.
(load*): Use it.
* tests/guix-build.sh: Test 'guix build -m' with a /dev/fd/N file.
2023-08-17 17:33:53 +02:00
Ludovic Courtès
e4259d4e9e
packages: 'package-transitive-supported-systems' detects cycles.
With this change, commands such as 'guix build' or 'guix package' report
obvious package-level cycles upfront.  Derivation-level cycles are not
detected.

* guix/packages.scm (&package-cyclic-dependency-error): New condition
type.
(package-transitive-supported-systems): Define 'visited', check it, and
parameterize it.
* guix/ui.scm (call-with-error-handling): Handle
'&package-cyclic-dependency-error'.
* tests/packages.scm ("package-transitive-supported-systems detects
cycles"): Add test.
2023-06-14 22:54:30 +02:00
Antero Mejr
2135f69dc0
ui: format 'display-hint' output when no arguments are passed.
When display-hint is given format specifiers such as "~%" but no arguments,
it does not format the output, causing the specifiers to be visible in the
displayed text.

* guix/ui.scm (display-hint): Format output when no arguments are passed.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2023-03-17 23:20:35 +01:00
Ludovic Courtès
43c36c5c9f
ui: 'display-hint' quotes extra arguments for Texinfo.
Fixes <https://issues.guix.gnu.org/61201>.

Previously, common practice was to splice arbitrary strings (user names,
file names, etc.) into Texinfo snippets passed to 'display-hint'.  This
is unsafe in the general case because at signs and braces need to be
escaped to produced valid Texinfo.  This commit addresses that.

* guix/ui.scm (texinfo-quote): New procedure.
(display-hint): When ARGUMENTS is non-empty, pass it to 'texinfo-quote'
and call 'format'.
(report-unbound-variable-error, check-module-matches-file)
(display-collision-resolution-hint, run-guix-command): Remove explicit
'format' call; pass 'format' arguments as extra arguments to 'display-hint'.
* gnu/services/monitoring.scm (zabbix-front-end-config): Likewise.
* guix/scripts.scm (warn-about-disk-space): Likewise.
* guix/scripts/build.scm (%standard-cross-build-options)
(%standard-native-build-options): Likewise.
* guix/scripts/describe.scm (display-checkout-info): Likewise.
* guix/scripts/environment.scm (suggest-command-name): Likewise.
* guix/scripts/home.scm (process-command): Likewise.
* guix/scripts/home/edit.scm (service-type-not-found): Likewise.
* guix/scripts/import.scm (guix-import): Likewise.
* guix/scripts/package.scm (display-search-path-hint): Likewise.
* guix/scripts/pull.scm (build-and-install): Likewise.
* guix/scripts/shell.scm (auto-detect-manifest): Likewise.
* guix/scripts/system.scm (check-file-system-availability): Likewise.
(guix-system): Likewise.
* guix/scripts/system/edit.scm (service-type-not-found): Likewise.
* guix/status.scm (print-build-event): Likewise.
2023-02-27 23:40:43 +01:00
Ludovic Courtès
852908d24d
ui: Add "error-reporting wrapper" for 'mkdir'.
* guix/ui.scm <top level>: Change 'mkdir' to use an error-reporting
wrapper.
2023-01-25 22:53:20 +01:00
Ludovic Courtès
c6ac47afdf
ui: It's 2023 now!
* guix/ui.scm (show-version-and-exit): Change year to 2023.
2023-01-03 12:25:48 +01:00
Lars-Dominik Braun
bbcd06e56c
ui: Take package upstream name into account when searching.
* guix/ui.scm (%package-metrics): Add PACKAGE-UPSTREAM-NAME*.
* tests/ui.scm ("package-relevance and upstream name"): New test.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2022-12-13 17:46:39 +01:00
Liliana Marie Prikler
2f4071b0b2
guix: ui: Add default synopsis for “doc” output.
* guix/ui.scm (package->recutils)[%default-output-synopses]: Add “doc”.
2022-11-05 10:23:24 +01:00
Liliana Marie Prikler
2c8b1be0d5
guix: ui: Improve missing output descriptions.
The current reference to Intel's Appendix H appears too obscure and confusing.

* guix/ui.scm (package->recutils)[output->recutils]: Replace “see Appendix H”
with “[description missing]”.
2022-11-05 10:23:23 +01:00
Liliana Marie Prikler
9eb80094ae
guix: ui: Handle single outputs.
The current code says "out" contains "everything else", even if there's no
other output to contain anything.

* guix/ui.scm (package->recutils)[default-output-synopses]: New variable.
[output->recutils]: Take default synopses as argument.
["outputs"]: Distinguish single and multiple outputs.
2022-11-05 10:23:23 +01:00
Liliana Marie Prikler
37cd553679
ui: Describe package outputs.
* guix/ui.scm (package->recutils): Output outputs with their descriptions,
one per line.
* po/packages/Makevars (XGETTEXT_OPTIONS): Add ‘output-synopsis’ as keyword.
2022-08-16 21:25:25 +02:00
Taiju HIGASHI
c8803d89fe
ui: Improve pager selection logic when less is not installed.
* guix/ui.scm (find-available-pager): New procedure.
(call-with-paginated-output-port): Use it.
* guix/utils.scm (call-with-environment-variables): Allow clearing of
specified environment variables.
* tests/ui.scm (make-empty-file, assert-equals-find-available-pager):
New procedures.
("find-available-pager, GUIX_PAGER takes precedence")
("find-available-pager, PAGER takes precedence")
("find-available-pager, 'less' takes precedence")
("find-available-pager, 'more' takes precedence")
("find-available-pager, no pager"): New tests.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2022-06-16 23:57:41 +02:00
Ludovic Courtès
5e0c347975
ui: Highlight package and service search results.
* guix/ui.scm (package->recutils): Add #:highlighting parameter and use it.
(display-search-results): Add #:regexps parameter; call
'colorize-full-matches' and pass #:highlighting.
* guix/scripts/package.scm (process-query): Pass #:regexps to
'display-search-results'.
* guix/scripts/home.scm (search): Likewise.
* guix/scripts/system/search.scm (service-type->recutils): Add #:highlighting
parameter and use it.
2022-04-19 18:07:49 +02:00
Ludovic Courtès
00dcfb261b
ui: Highlight important bits in recutils output.
* guix/scripts/system/search.scm (service-type->recutils): Highlight the
value of the 'name' field.
* guix/ui.scm (package->recutils): Likewise for 'name' and 'version'.
2022-04-19 18:07:49 +02:00
Ludovic Courtès
3da62bf5aa
ui: Move 'location->hyperlink' to (guix diagnostics).
* guix/ui.scm (location->hyperlink): Move to...
* guix/diagnostics.scm: ... here.
* guix/scripts/system/search.scm: Adjust imports accordingly.
2022-04-08 23:59:48 +02:00
Ludovic Courtès
d4e858763c
ui: Move hyperlink facilities to (guix colors).
* guix/ui.scm (supports-hyperlinks?, file-hyperlink, hyperlink): Move to...
* guix/colors.scm: ... here.
* guix/scripts/home.scm, guix/scripts/system.scm,
guix/scripts/system/search.scm: Adjust imports accordingly.
2022-04-08 23:59:48 +02:00
Ludovic Courtès
625fa3cfe8
ui: 'show-what-to-build' highlights "would be downloaded" headings.
* guix/ui.scm (show-what-to-build): Highlight "X MB would be downloaded".
2022-03-18 16:03:33 +01:00
Ludovic Courtès
9e0f0123a0
ui: 'show-what-to-build' highlights "The following [...] will be built".
* guix/colors.scm (highlight/warn): New procedure.
* guix/ui.scm (show-what-to-build): Use 'highlight/warn' when displaying
what would/will be built.
2022-03-18 16:03:32 +01:00
Ludovic Courtès
5b6e31b020
ui: 'display-generation' uses color when talking to a pager.
This makes sure that, say, 'guix pull -l' benefits from colors when its
output is piped to a pager, as long as the underlying terminal supports
it.

* guix/ui.scm (display-generation): Add second argument to 'highlight'.
2022-02-14 15:52:36 +01:00
Ludovic Courtès
7ffcee1937
ui: 'with-paginated-output-port' gives access to the wrapped port.
* guix/ui.scm (pager-port-mapping): New variable.
(pager-wrapped-port): New procedure.
(call-with-paginated-output-port): Parameterize 'pager-port-mapping'.
2022-02-14 15:52:36 +01:00
jgart
d25a4e49d7
guix: ui: Fix typo in docstring.
* guix/ui.scm (colorize-store-file-name)[docstring]: Fix typo.

Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
2022-01-22 21:35:47 -05:00
Ludovic Courtès
54237556ba
ui: 'package->recutils' can split the "system:" line.
Previously, long system lines would not be split, which would confuse
'less', possibly leading it to hide the first line of the package
recutils record (the "name:" line).

* guix/ui.scm (package->recutils)[split-lines]: New procedure.
[dependencies->recutils]: Use it.
Use it for the "systems:" value.
2022-01-11 20:35:00 +01:00
Leo Famulari
806a4e986d
ui: It's 2022!
Happy new year!

* guix/ui.scm (show-version-and-exit): Change the year to 2022.
2022-01-01 02:02:44 -05:00
Ludovic Courtès
4d59596a1c
ui: 'load*' correctly reports 'read-error' in all cases.
Previously, 'read-error' exceptions other than "missing closing paren"
would not be reported; instead, we'd directly call (exit 1) without
printing anything.

Fixes <https://issues.guix.gnu.org/51463>.
Reported by Alice BRENON <alice.brenon@ens-lyon.fr>.

* guix/ui.scm (report-load-error): Report the error without re-throwing
upon 'read-error'.
* tests/guix-build.sh: Add test.
2021-11-07 23:10:41 +01:00
Tobias Geerinckx-Rice
8f45555781
ui: Use DISPLAY in SHOW-GUIX-HELP.
* guix/ui.scm (show-guix-help): Use DISPLAY where FORMAT isn't needed.
2021-10-31 00:57:07 +02:00
Tobias Geerinckx-Rice
943dd59beb
ui: Add top-level options to help text.
This also makes automated ‘guix --h<Tab>’ completion possible.

* guix/ui.scm (show-guix-help): Document that an OPTION's an option,
and all valid options.
2021-10-31 00:57:07 +02:00
Ludovic Courtès
6938d9f1c7
ui: Gracefully handle invalid Texinfo markup in package blurbs.
Previously 'guix search' & co. would crash when encountering invalid
Texinfo.

* guix/ui.scm (texi->plain-text*): New procedure.
(package-field-string, package->recutils): Use it.
2021-10-28 21:30:27 +02:00
Steve Sprang
423f5f867c
ui: Improve output appearance when listing generations.
* guix/ui.scm (display-profile-content-diff): Use pretty-print-table to format
output.
(display-profile-content): Likewise.

Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
2021-07-15 16:11:47 -04:00
Ludovic Courtès
ab37731a8d
ui: Have 'guix help' stat less.
This reduces the number of syscalls for:

  env -i $(type -P strace) -c $(type -P guix) help

from 4.3K to 2.2K, thereby reducing startup time.

Reported by Julien Lepiller.

* guix/ui.scm (run-guix-command): Move %FILE-PORT-NAME-CANONICALIZATION
to...
(run-guix): ... here.
2021-06-29 00:00:13 +02:00
Ludovic Courtès
5bcb4f8a58
ui, lint: Simplify exception handling in Guile 3 style.
* guix/lint.scm (check-derivation)[try]: Remove "catch #t" wrapping.
* guix/ui.scm (call-with-error-handling): Remove "catch 'system-error"
and move 'system-error handling to the &exception-with-kind-and-args
clause.
2021-06-01 23:26:07 +02:00
Ludovic Courtès
82d8ab01f5
maint: Require Guile 3.0.
* configure.ac: Require Guile 3.0.
* doc/guix.texi (Requirements): Adjust accordingly.
* gnu/packages/package-management.scm (guile2.2-guix): Remove.
* guix/lint.scm (exception-with-kind-and-args?): Remove 'cond-expand'.
* guix/scripts/deploy.scm (deploy-machine*): Likewise.
* guix/store.scm (call-with-store): Likewise.
* guix/swh.scm (http-get*, http-post*): Likewise.
* guix/ui.scm (without-compiler-optimizations, guard*)
(call-with-error-handling): Likewise.
2021-06-01 23:26:07 +02:00
Ludovic Courtès
a0ad636167
ui: 'load*' compiles with '-O1'.
With this change, the wall-clock time of:

  guix system build --no-grafts -d gnu/system/install.scm

goes from 5.0s to 2.3s on Guile 3.0.5.

* guix/ui.scm (without-compiler-optimizations): New macro.
(load*): Use it.
2021-05-17 23:59:58 +02:00