Каков наилучший способ пакетной установки Emacs (пакеты и конфиг), чтобы он мог быстро быть установлен в любом месте?

Я вообще пишу код, войдя на удаленный компьютер (обычно AWS). У меня довольно большой список пакетов, которые я использую, и довольно большой .emacs.el. В то время как я могу быстро установить emacs на удаленную машину, я ищу способ "упаковать" мои emacs и разместить его где-нибудь, чтобы я мог быстро установить его на любую машину, на которую я вхожу. Каков наилучший способ сделать это?

Ответ 1

Сначала вы, очевидно, собираете все в исходный элемент управления (за исключением частного файла). Bitbucket и Gitlab предлагают частные репозитории.

Вы можете увидеть эту вики, чтобы указать все необходимые пакеты в файле инициализации. (это фактически используется Prelude)

Затем я вижу некоторые варианты.

Использовать Cask

Некоторые используют Cask для управления зависимостями пакетов, некоторые не

В файле Cask перечислены все зависимости:

(depends-on "cask")
(depends-on "dash")
(depends-on "evil")

Использовать org-mode

Некоторые записывают свою конфигурацию в org-mode и загружают ее вызовом org-babel, который можно выполнить в одной строке в ~/.emacs.d/init.el:

(require 'org)
(require 'ob-tangle)
(org-babel-load-file (expand-file-name "~/.emacs.d/myemacs.org"))

Разделите конфигурацию в нескольких файлах

а некоторые разделили его на несколько файлов elisp.

Вот несколько хороших конфигураций, заслуживающих вдохновения:

В init-elpa.el он определяет функцию, которая принимает пакет в аргументе и устанавливает его, если его нет:

 (defun require-package (package &optional min-version no-refresh)
    "Install given PACKAGE, optionally requiring MIN-VERSION.
    If NO-REFRESH is non-nil, the available package lists will not be
     re-downloaded in order to locate PACKAGE."
  (if (package-installed-p package min-version)
  t
  (if (or (assoc package package-archive-contents) no-refresh)
  (package-install package)
  (progn
  (package-refresh-contents)
  (require-package package min-version t)))))

и в каждом файле он использует:

(require-package 'dired+)

Также зафиксируйте установленные пакеты

И для того, чтобы ваша конфигурация была быстрее установлена, вы также можете добавить установленные пакеты в исходный элемент управления. Таким образом, вы также можете обеспечить идентичную среду.

Ответ 2

Я всегда рекомендую разместить весь ~/.emacs.d под управлением версии, включая все пакеты и другие библиотеки.

Это немного сложнее, и, может быть, немного беспорядочно, но если вы хотите гарантировать состояние конфигурации каждый раз, когда вы ее устанавливаете где-то новым, вам нужно иметь полную копию.

Использование контроля версий - это мое твердое предпочтение, потому что это делает тривиальным возвращать изменения в пакеты и т.д. Поэтому, если вы обновляете пакет, а Emacs ломается, это единственный шаг, чтобы вернуть вещи так, как они были (и так не требует, чтобы вы помнили, как они были).

При таком подходе акт клонирования одного репозитория - это все, что требуется для получения рабочей системы в известном состоянии; и это ограничивает вашу зависимость от доступности, согласованности и постоянства удаленных источников только от одного репозитория (и если у вас есть локально или даже нести копию с вами, у вас вообще нет удаленных зависимостей).

Тем не менее, многие люди не беспокоятся и не испытывают никаких проблем, поэтому это не является критическим моментом для большинства людей.

Ответ 3

Было бы полезно, если бы вы разъяснили немного больше, что вы подразумеваете под "любым" компьютером. Это звучит как emacs, уже установленный на компьютере, и вы просто хотите настроить emacs для использования ваших пакетов и настроек. У вас есть физический доступ к машине или сети, из которой вы можете загружать файлы с карты памяти? Если нет, можете ли вы получить доступ к облачному хранилищу?

Моя настройка выглядит следующим образом:

У меня есть машина Windows 7 на работе и Linux Mint дома. У меня есть учетная запись Dropbox, которая содержит все мои файлы и пакеты конфигурации emacs. Эта учетная запись Dropbox синхронизируется с локальной папкой на каждом компьютере, а файл .emacs на каждом компьютере - только одна строка: (load-file "~/Dropbox/dotemacs.el" ) Я часто настраиваю файлы и конфигурации пакетов. Использование Dropbox поддерживает синхронизацию моих настроек на всех компьютерах.

Если вы не можете установить Dropbox, вы можете вручную синхронизировать с облачным хранилищем, например git.

Ответ 4

проверить https://github.com/redguardtoo/elpa-mirror,

создайте свой собственный репозиторий на USB-накопителе, он стабилен, потому что все версии пакета - это версия, которую вы уже используете в течение очень долгого времени.

Это самый быстрый способ, в основном вы можете получить свою установку на любой машине за 1 минуту.

Ответ 5

Как README для моего репо emacs для rails devs говорит, что это так же просто, как нажимать ваше содержимое ~/.emacs.d на github и на цель машина:

  1. Установить emacs с помощью homebrew (возможно, вы находитесь на OS X) brew install emacs --HEAD --use-git-head --cocoa --srgb
  2. Git клонировать ваше репо на ~/.emacs.d/
  3. Загрузите emacs

Если есть волшебство, он использует встроенный диспетчер пакетов с ELPA и мармеладом и имеет эту проверку, чтобы проверить, установлены ли пакеты, а если нет, установите их.

Работает для меня и моих ящиков и серверов.