MM""""""""`M                                           M""MMMMMMMM M""M M""MMMMM""M MM""""""""`M
 MM  mmmmmmmM                                           M  MMMMMMMM M  M M  MMMMM  M MM  mmmmmmmM
 M`      MMMM 88d8b.d8b. .d8888b. .d8888b. .d8888b.     M  MMMMMMMM M  M M  MMMMP  M M`      MMMM
 MM  MMMMMMMM 88''88'`88 88'  `88 88'  `"" Y8ooooo.     M  MMMMMMMM M  M M  MMMM' .M MM  MMMMMMMM
 MM  MMMMMMMM 88  88  88 88.  .88 88.  ...       88     M  MMMMMMMM M  M M  MMP' .MM MM  MMMMMMMM
 MM        .M dP  dP  dP `88888P8 '88888P' '88888P'     M         M M  M M     .dMMM MM        .M
 MMMMMMMMMMMM                                           MMMMMMMMMMM MMMM MMMMMMMMMMM MMMMMMMMMMMM

–> Pack Structure

Emacs Live packs have a simple yet specific structure:

pack/
├── README.md
├── config
│   └── foo-conf.el
├── info.el
├── init.el
└── lib
    └── foo-mode
        └── foo.el

Let’s explore each part individually.

–> README.md

In this file you should describe the pack, what it does, list any dependencies etc. This is the location of the main documentation for your pack.

–> info.el

This file contains metadata about your pack that Emacs Live can read and use. Currently there are the following entries to this file:

(live-pack-name "your-pack-name-goes-here")
(live-pack-version "1.0beta21"))
(live-pack-description "A description of your pack")

–> init.el

This is the file that first gets loaded by Emacs Live when it loads this pack. You can place arbitrary elisp code here and Emacs will execute it. However, it’s not advised to put large amounts of elisp in this file. Instead, it’s recommended that you break up the config into conceptual chunks and create separate config files which you can place in the config directory. Emacs Live makes it easy to pull in these config files with the fn live-load-config-file. For example, you can load the file foo-conf.el stored in the config directory with the following line:

(live-load-config-file foo-conf.el")

–> config

This is the directory into which you should place your config files. Config files typically are elisp files for configuring a certain aspect of your pack. Should your pack wish to pull in external projects, such as new major modes which are stored in the lib directory (explained below) then these projects can be added to the load path (and therefore made visible to Emacs to require things with the fn live-add-pack-lib. For example, if you have added the project foo-mode to your lib directory which contains a foo.el file you need to require to enable its functionality, you can add the following to a foo-conf.el config file:

(live-add-pack-lib "foo-mode")
(require 'foo)

You can then use the rest of the config file to configure foo-mode in any way you fancy.

–> lib

This directory is where you can place any Emacs functionality that you wish to include in your pack. For example, you may place any number new major or minor modes in here. These files won’t be loaded automatically. This directory can be empty if you don’t wish to pull in any external projects.

-UUU:@----F2  pack-structure.md   All (14,54)    (Markdown Undo-Tree yas VHl AC -1-) --------------------------------------------------------------------