Вопрос или проблема
Я установил guix поверх Debian, затем использовал guix для установки emacs и нескольких пакетов emacs (emacs-discover и emacs-mastodon), что также привело к установке некоторых зависимостей этих пакетов.
Каждый пакет, установленный через guix, отображается дважды в списке встроенного менеджера пакетов в emacs. Для ясности, они не отображаются дважды потому, что доступны в другом репозитории, таком как elpa или melpa. Они вообще не отображались до установки guix и указаны как “внешние” в столбце статуса списка (скриншот прилагается).
Есть ли способ это исправить? Будет очень неприятно иметь много дублирующихся пакетов.
Таким образом, оказывается, что guix, во время установки либо emacs, либо пакетов emacs, автоматически обновил $GUIX_PROFILE/etc/profile с этой строкой:
export EMACSLOADPATH=”${GUIX_PROFILE:-/gnu/store/aw9nzpanmzpnf0j3fdh6vlv05d95si6c-profile}/share/emacs/site-lisp${EMACSLOADPATH:+:}$EMACSLOADPATH”
Затем guix автоматически подключает этот скрипт профиля, чтобы обновить пользовательскую среду, чтобы новые установленные пакеты могли быть найдены.
Однако guix подключил профиль дважды (возможно, один раз при установке emacs и один раз при установке пакетов emacs; или, возможно, один раз для каждого пакета emacs, который я установил), что привело к тому, что моя переменная окружения содержала каталог site-lisp дублирующимся в переменной окружения. Инструмент пакетов emacs внутри emacs, похоже, будет счастливо сканировать один и тот же каталог дважды и добавлять записи каждый раз, когда находит пакеты в одном и том же каталоге.
Решение очень простое: выйдите из вашей оболочки, чтобы очистить среду, затем войдите снова, чтобы получить новую оболочку, и переменная окружения будет содержать каталог только один раз.
Ответ или решение
Устранение дублирования установленных пакетов Emacs при использовании Guix
При использовании Guix для установки Emacs и его пакетов на Debian может возникнуть ситуация, когда установленные пакеты отображаются дважды в списке встроенного менеджера пакетов Emacs. Это может вызывать неудобства, особенно при работе с большим количеством пакетов. В данном ответе мы рассмотрим причины данного поведения и предложим решение проблемы.
Причины возникновения проблемы
Как было установлено, Guix при установке Emacs или его пакетов автоматически обновляет файл конфигурации $GUIX_PROFILE/etc/profile, добавляя следующую строку:
export EMACSLOADPATH="${GUIX_PROFILE:-/gnu/store/aw9nzpanmzpnf0j3fdh6vlv05d95si6c-profile}/share/emacs/site-lisp${EMACSLOADPATH:+:}$EMACSLOADPATH"
Эта команда настроена так, чтобы добавить каталог с установленными пакетами в переменную среды EMACSLOADPATH
. Однако, если после установки Emacs и пакетов Guix дважды вызывает процесс обновления этой переменной, это приводит к тому, что сам каталог оказывается дублированным в EMACSLOADPATH
. В результате Emacs видит одни и те же пакеты дважды и отображает их в списке как "внешние" (external) пакеты несколько раз.
Решение
Устранение дублирования установленных пакетов – это процесс, который можно легко реализовать. Ниже представлены этапы, которые помогут вам решить проблему:
-
Выйдите из текущей сессии: Выйдите из терминала или завершите сеанс вашей оболочки. Это необходимо для очистки существующих переменных окружения, включая
EMACSLOADPATH
. -
Войдите снова: После выхода перезапустите вашу оболочку. Это обеспечит загрузку конфигураций, в которых каталог с Emacs пакетами будет указан только один раз.
-
Проверьте переменные окружения: Убедитесь, что переменная
EMACSLOADPATH
больше не содержит дубликатов. Для этого можно воспользоваться командой:echo $EMACSLOADPATH
Если все сделано правильно, вы должны увидеть путь к директории с пакетами Emacs только один раз.
-
Перезапустите Emacs: Рекомендуется закрыть и заново запустить Emacs после выполнения вышеперечисленных шагов, чтобы убедиться, что изменения вступили в силу, и дублирующиеся пакеты исчезли из списка.
Заключение
Установка пакетов Emacs с помощью Guix может привести к проблеме дублирования, однако простая перезагрузка оболочки поможет решить ее. Регулярный контроль и очистка переменных окружения могут значительно упростить вашу работу и избежать лишних сложностей. Всегда проверяйте вывод переменных после установки новых пакетов, чтобы убедиться в отсутствии ошибок конфигурации, и оптимизировать свое окружение под конкретные задачи.