
Кастомизация 
Данный инструмент можно изменить под индивидуальные задачи. Для этого скопируем себе репозиторий проекта и приступим к кастомизации.
Открываем папку src, в ней находятся папки content(сами файлы) и data(данные для настройки).
Всё что помещается в папку src/content/core будет скопировано в папку core на сайте.
./src/
├── content/
│   ├── core/
│   │   └── elements/
│   │       ├── chunks/
│   │       ├── templates/
│   │       └── zoomx/
│   │           ├── controllers/
│   │           ├── plugins/
│   │           ├── snippets/
│   │           └── templates/
│   ├── pages/
│   ├── plugins/
│   ├── snippets/
│   └── templates/
└── data/
    ├── addons.php
    ├── clientConfig.php
    ├── plugins.php
    ├── providers.php
    ├── resources.php
    ├── settings.php
    ├── snippets.php
    ├── templates.php
    └── tvs.phpДополнения 
Для редактирования списка дополнений открываем файл src/data/addons.php. В нём видим массив с провайдерами и дополнениями:
<?php
return [
  "modx.com" => [
    'FormIt',
    'ClientConfig',
    // ...
  ],
  "modstore.pro" => [
    'Ace',
    'autoRedirector',
    'pdoTools',
    // ...
  ]
];Для изменения списка дополнений ищем нужное нам дополнение на сайте провайдера (например на modstore.pro), копируем название дополнения и добавляем по аналогии с остальными дополнениями в массив к нужному провайдеру.
Системные настройки 
Для редактирования списка дополнений открываем файл src/data/settings.php. В нём видим массив с ключами системных настроек и их значениями:
<?php
return [
  'log_deprecated' => 0,
  'locale' => 'ru_RU.utf8',
  'allow_multiple_emails' => 0,
  'server_protocol' => 'http',
  'friendly_alias_realtime' => 1,
  'friendly_alias_restrict_chars' => 'alphanumeric',
  'friendly_alias_translit' => 'russian-fixed',
  // ...
];Для того чтобы настройка была со значением Нет записываем в её значение 0, соответственно если нужно Да то ставим 1.
Если нужной настройки нет в списке, то открываем на сайте системные настройки, копируем название ключа, добавляем в массив и указываем нужное значение.

Плагины/Сниппеты 
Для редактирования списка дополнений открываем файл src/data/plugins.php. В нём видим массив плагинов:
<?php
return [
  'ignore' => [
    'name' => 'ignore',
    'description' => 'Обертывание выводимых данных в тег ignore',
    'events' => [
      'pdoToolsOnFenomInit' => []
    ]
  ],
  // ...
];Ключами являются названия контента плагина, размещенного в папке src/content/plugins/ без расширения .php.

Если нужно добавить плагин, то создаём по аналогии с другими элементами массива новый плагин, в качестве ключа указываем название файла контента плагина, в name указываем название плагина, в description добавляем описание, либо оставляем пустым, в массив events добавляем события на которые подписываем плагин. Затем создаём в папке src/content/plugins/ файл с расширением .php с контентом нового плагина.
Со сниппетами всё точно также:
<?php
return [
  'version' => [
    'name' => 'version',
    'description' => 'Вывод гет параметра времени создания у подключаемого скрипта/стиля',
  ]
];ClientConfig 
Для редактирования списка дополнений открываем файл src/data/clientConfig.php. В нём видим массив категориями и её элементами:
<?php
return [
  [
    'label' => 'Основное',
    'description' => '',
    'items' => [
      ['key' => 'policy', 'xtype' => 'modx-panel-tv-file', 'label' => 'Политика конфиденциальности', 'value' => '#'],
      ['key' => 'year_start', 'xtype' => 'numberfield', 'label' => 'Год начала в копирайте', 'value' => date('Y')],
      ['key' => 'emailto', 'xtype' => 'textfield', 'label' => 'E-mail для заявок', 'value' => ''],
    ],
  ],
  // ...
];В label указываем название вкладки категории, в items добавляем список полей данной вкладки.
xtype- тип поляkey- ключ по которому будет вызываться данное полеlabel- название поляvalue- значение поля(можно оставить пустым)
Добавление кастомных операций 
Операция - это функция запускаемые при настройке нового сайта, например установка списка дополнений или добавление плагинов.
Чтобы добавить свою операцию, которой нет в списке шагов в функции steps нужно добавить новую функцию в класс MoxiPack, находящийся в файле ./app.php назовём её exampleStep:
<?php
// ...
class MoxiPack extends MoxiModx
{
  // ...
  /**
   * Пример кастомной операции
   *
   * @return void
   */
  public function exampleStep()
  {
    $this->log("Кастомная операция завершена");
  }
  // ...
}В данной функции доступен экземпляр объекта modx через обращение к $this->modx.
Также для логирования операции доступна функция $this->log принимающая текст сообщения и уровень лога, по умолчанию уровень info, также доступны уровни error и warning.
Например, для записи в лог сообщения об ошибки нужно вызвать функцию следующим образом:
$this->log("Текст ошибки", "error");Затем, чтобы данная операция отработала при настройке, её нужно добавить в массив вызовов шагов операций, находящимся в функции steps класса MoxiHelp в файле ./app.php:
<?php
// ...
class MoxiHelp
{
  // ...
  /**
   * Возвращает массив порядка выполнения операций.
   *
   * @return array Массив порядка выполнения операций, включает в себе имя и описание.
   */
  static function steps()
  {
    return [
      ["name" => "providers", "desc" => "Добавление поставщиков дополнений", ],
      ["name" => "addons", "desc" => "Установка дополнений", ],
      ["name" => "copyCore", "desc" => "Копирование папки core", ],
      ["name" => "templates", "desc" => "Добавление шаблонов", ],
      ["name" => "resources", "desc" => "Добавление ресурсов", ],
      ["name" => "settings", "desc" => "Изменение настроек", ],
      ["name" => "snippets", "desc" => "Добавление сниппетов", ],
      ["name" => "plugins", "desc" => "Добавление плагинов", ],
      ["name" => "tvs", "desc" => "Добавление дополнительных полей", ],
      ["name" => "clientConfig", "desc" => "Настройка clientConfig", ],
      ["name" => "exampleStep", "desc" => "Кастомная операция", ], 
      ["name" => "managerCustomize", "desc" => "Настройка панели администрирования", ],
      ["name" => "renameHtaccess", "desc" => "Переименовывание ht.access в .htaccess", ],
      ["name" => "removeChangelog", "desc" => "Удаление changelog", ],
      ["name" => "clearCache", "desc" => "Очистка кэша", ],
    ];
  }
  // ...
}name- название функции, которая будет запущенаdesc- описание данной функции
Операции из данного массива выполняются поочередно начиная с самого первого, если кастомная операция должна выполнятся после окончания какого-либо события, то её нужно добавлять после данной операции. В данном примере exampleStep выполнится после операции clientConfig.
На этом добавление кастомной операции закончено.