Управління пакетами наступного покоління за допомогою straight.el
Після тривалої і розчарувальної боротьби використовувати package.el
+ Quelpa для управління своїми пакунками, я кусав кулю і написав власного менеджера пакунків . Він призначений повністю замінити package.el
, забезпечивши досвід управління пакетом, який перевершує майже будь-який спосіб.
Ви можете прочитати дуже обширну документацію, щоб дізнатися про всі її особливості, але найбільш релевантним у цьому питанні є те, що straight.el
зосереджено на ідеальній відтворюваності . Це означає, що не має значення, чи нормально ви запускаєте Emacs, чи запускаєте його на новій машині, а також те, що будь-які локальні зміни контролюються версією та можуть бути повернені до канонічного стану. Практично кажучи, це досягається (1) клонування пакетів як сховищ Git та надання автоматизованих інструментів для управління їх станом; (2) використання init-файлу як єдиного джерела істини для стану управління пакетами, без змінних даних, що зберігаються в іншому місці; та (3) використання додаткових файлів блокування версій для встановлення точних змін Git кожного пакету, а також будь-яких сховищ рецептів таstraight.el
себе.
Для початку вставте фрагмент завантажувальної програми , який буде встановлено та активовано straight.el
. Потім, щоб переконатися, що пакет встановлений, просто надішліть виклик straight-use-package
у свій init-файл:
(straight-use-package 'projectile)
Так, це так просто. Ніякого поводження зі package-refresh-contents
сміттям чи будь-яким із цього сміття. Якщо ви видалите цю форму зі свого init-файла та перезапустите Emacs, Projectile більше не завантажуватиметься (на відміну від package.el
). Це означає, що вам не доведеться турбуватися про те, що ваша конфігурація якось не працює на новій машині, оскільки ви випадково залежали від незадекларованих пакетів.
Ви можете встановлювати пакети куди завгодно та коли завгодно, у всьому своєму init-файлі (не потрібно оголошувати їх перелік в одній точці). Звичайно, ви також можете просто зробити
(dolist (package '(ace-jump-mode ... zzz-to-char)) (straight-use-package package))
якщо ви віддаєте перевагу списку. Однак я рекомендую використовувати use-package
для керування конфігурацією пакета. Спочатку потрібно встановити його:
(straight-use-package 'use-package)
Потім, оскільки straight.el
має вбудовану інтеграцію з use-package
, наступне "просто працює":
(use-package projectile
:straight t
:init (projectile-mode 1))
Після того, як ви написали свій init-файл, щоб встановити необхідні йому пакунки, запустіть, M-x straight-freeze-versions
щоб зберегти файл блокування версій ~/.emacs.d/straight/versions/default.el
. Ви повинні тримати цей файл під контролем версій, оскільки він дозволить straight.el
перевірити правильні версії всіх ваших пакетів під час першого запуску Emacs на новій машині. (Ви можете вручну повернутися до версій, визначених у файлі блокування, використовуючи M-x straight-thaw-versions
.)
Для підтримки ідеї локальних машинних точкових файлів, про яку я згадував у своїй іншій відповіді , straight.el
пропонується профільна система . Я все-таки рекомендую використовувати символьні посилання для ваших точкових init.el
файлів (у цьому випадку ваш локальний init-файл, якщо це можливо, і файл блокування версії, якщо ви хочете використовувати його).
Якщо вам цікаво, як straight.el
порівнювати його з іншими менеджерами пакунків, ознайомтесь із розділом широкого порівняння . Але є ще багато документації на все інше .
init.el
навколо (наприклад, використовуючи git), такий підхід також працює (на основіuse-package
): lunaryorn.com/posts/…