Belajar Emacs - Package Management (ELPA/MELPA)
Episode 11 of 30

Belajar Emacs - Package Management (ELPA/MELPA)

Mengelola ekosistem paket Emacs: memahami archive ELPA, non-GNU ELPA, dan MELPA, menjalankan package-refresh-contents dan package-install, verifikasi tanda tangan paket, install paket populer (Magit, Corfu, Vertico), dan membandingkan package.el dengan straight.el untuk reproduksibilitas config.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Episode 10 menyentuh use-package :ensure t — tapi dari mana paket itu datang? Episode 11 membahas sistem distribusi paket Emacs: archive, perintah manajemen, keamanan tanda tangan, dan paket-paket pertama yang wajib dipasang.

Mengapa ini penting? Karena ekosistem paket adalah alasan Emacs tetap segar di 2026. Ratusan paket komunitas — dari Magit (git UI) sampai Vertico (completion) — memperbarui Emacs dengan fitur modern tanpa menyentuh core. Paham cara mengelolanya = paham cara memperluas Emacs dengan aman.

Archive: Dari Mana Paket Berasal

Paket Emacs didistribusikan dari archive (repositori paket). Tiga archive utama:

ArchiveURLKarakteristik
ELPA (GNU)https://elpa.gnu.org/packages/Resmi GNU, stabil, aturan bebas GPL ketat
non-GNU ELPAhttps://elpa.nongnu.org/packages/Paket resmi yang belum masuk ELPA
MELPAhttps://melpa.org/packages/Komunitas, ribuan paket, update tiap hari

Setup archive di init file:

Daftarkan archive di init.el
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(setq package-archive-priorities '(("gnu" . 10) ("nongnu" . 5) ("melpa" . 0)))
(package-initialize)

Prioritas menentukan archive mana yang dipakai saat dua archive punya paket sama — gnu paling diutamakan agar paket resmi menang.

Perintah Dasar package.el

text
M-x package-refresh-contents   →  update daftar paket dari semua archive
M-x package-install RET magit RET
M-x list-packages              →  tampilkan daftar semua paket yang tersedia

list-packages membuka buffer interaktif — toolbar-nya menyediakan I (install), U (upgrade), d (delete), x (eksekusi). Cari paket dengan C-s (Isearch episode 6) di buffer ini.

Install 3 Paket Populer

Langsung praktikkan paket yang akan dipakai di episode-episode berikutnya:

Install via package-install (satu per satu)
M-x package-refresh-contents RET
M-x package-install RET magit RET
M-x package-install RET vertico RET
M-x package-install RET corfu RET

Verifikasi terpasang dengan M-x describe-package RET magit RET (episode 8) — versi terpasang harus tampil.

use-package + :ensure — Pola Modern

Cara modern: biarkan use-package yang menginstall dan mengkonfigurasi sekaligus. Tambahkan ke init.el:

Config deklaratif dengan use-package :ensure
(use-package vertico
  :ensure t
  :init (vertico-mode 1))
 
(use-package corfu
  :ensure t
  :init (global-corfu-mode 1)
  :config
  (setq corfu-auto t))
 
(use-package magit
  :ensure t
  :defer t)

Saat Emacs restart, use-package akan otomatis package-install yang belum terpasang — :ensure t melakukan itu. Tidak perlu M-x package-install manual lagi.

Tip

Untuk pemula, (setq use-package-always-ensure t) membuat semua use-package menginstall otomatis — hemat satu keyword tiap blok. Tapi di project nyata lebih baik eksplisit: config yang bisa di-porting tidak boleh berasumsi "semua selalu diensure".

Verifikasi Tanda Tangan: Keamanan Dasar

Sejak Emacs 27, package-check-signature default allow-unsigned untuk ELPA dan t (wajib) untuk non-GNU/MELPA. Untuk memaksa verifikasi semua archive:

Wajibkan verifikasi tanda tangan
(setq package-check-signature t)

Artinya: setiap paket harus punya tanda tangan GPG yang valid dari kunci archive. Kunci dikelola lewat M-x package-list-packagesg (refresh) yang otomatis mengambil kunci. Keamanan paket Emacs dibahas penuh di episode 22.

Alternatif: straight.el untuk Reproduksibilitas

package.el (built-in) punya keterbatasan: tidak ada lockfile — config kalian di mesin baru mungkin menginstall versi paket berbeda dari mesin lama. straight.el mengatasi ini: ia meng-clone paket langsung dari git pada commit yang dicatat, menghasilkan config deterministik.

Bootstrap straight.el (tambahkan di paling atas init.el)
(defvar bootstrap-version)
(let ((bootstrap-file
       (expand-file-name "straight/repos/straight.el/bootstrap.el"
                         user-emacs-directory))
      (bootstrap-version 6))
  (unless (file-exists-p bootstrap-file)
    (with-current-buffer
        (url-retrieve-synchronously
         "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
         'silent 'inhibit-cookies)
      (goto-char (point-max))
      (eval-print-last-sexp)))
  (load bootstrap-file nil 'nomessage))
 
(use-package vertico
  :straight t
  :init (vertico-mode 1))

Perhatikan keyword :straight t menggantikan :ensure t. Versi paket direkam di ~/.emacs.d/straight/repos/, dan lock dicatat otomatis. Episode 29 akan menilai kapan straight.el layak dipakai di setup produksi.

Package vs Paket di Core

Beberapa "paket" sebenarnya sudah ada di core Emacs — use-package dan eglot sejak 29.1, org dan magit tidak (magit harus diinstall). Perbedaan yang perlu diingat:

  • Paket core: sudah di Emacs, tidak perlu :ensure.
  • Paket archive: perlu :ensure t / :straight t.
  • Cek ketersediaan: M-x describe-package RET <nama> — jika tidak terdaftar, refresh dulu (M-x package-refresh-contents).

Pitfall Package Management

  • Lupa package-refresh-contents: daftar paket hanya segar setelah refresh. Error "package not found" sering karena daftar basi.
  • Dua package manager bercampur: jangan campur :ensure t (package.el) dan :straight t (straight.el) untuk paket yang sama — instalasi dobel dan konflik binding. Pilih satu sistem.
  • MELPA daily bisa berubah: paket komunitas bisa update setiap hari; kalau config tiba-tiba rusak setelah update, cek changelog atau pin versi di straight.el.
  • Package dari archive mencurigakan: M-x list-packages dan periksa M-x package-desc-status. Episode 22 membahas cara memverifikasi isi sebelum install.

Penutup

Pada episode 11 ini, kalian telah menguasai manajemen paket Emacs.

Inti yang harus dibawa pulang:

  • Tiga archive: ELPA (resmi), non-GNU ELPA, MELPA (komunitas) — set prioritas di init.
  • Perintah: package-refresh-contents, package-install, list-packages.
  • use-package :ensure t = install + config deklaratif dalam satu blok.
  • package-check-signature t memaksa verifikasi tanda tangan (detail di episode 22).
  • straight.el memberikan reproduksibilitas via git lock untuk config produksi.

Di episode 12 selanjutnya, kita masuk dunia Org-mode — headings, TODO/DONE, links, tabel, agenda, clocking & capture — dan membangun sistem notes + agenda pribadi pertama kalian. Sampai jumpa di episode 12!