Skip to content

Configuration reference

Nebula adds one top-level Nebula tab to Stores › Configuration, and a small number of fields to tabs Magento already has. This page lists every setting the packaged modules declare, the config path behind it, its shipped default, and what reads it.

Where the settings live:

Admin location Section Owned by
Stores › Configuration › Nebula › Nebula Admin Theme nebula Nebula_Core, plus groups added by Nebula_Merchandiser and Nebula_Theme
Stores › Configuration › Nebula › Nebula Pro nebula_pro_marketing Nebula_ProMarketing
Stores › Configuration › Security › Nebula Passkey nebula_passkey Nebula_Passkey
Stores › Configuration › Nebula › Nebula Theme Switcher nebula_theme_switcher Nebula_ThemeSwitcher
Stores › Configuration › Advanced › System › Mail Sending Settings system/smtp field hardened by Nebula_System
Stores › Configuration › Security › 2FA twofactorauth/general default shipped by Nebula_Passkey
Stores › Configuration › General › Content Management cms/wysiwyg, cms/pagebuilder written once by Nebula_Quill's install patch
Stores › Configuration › Design › Transactional Emails design/email/header_template, design/email/footer_template written by Nebula_EmailTemplateEditor's header and footer editor

Nebula also reads a handful of Magento's own settings without shipping a default for them. Those are listed under Core settings Nebula reads.

Scope

Most of Nebula's settings are default scope only. Three groups show a website and store-view switcher: the theme settings (nebula/theme), the customer password template (nebula/customer_password) and the passkey storefront group (nebula_passkey/frontend). Only the last two are read at the scope they offer.

nebula/theme shows a scope switcher that nothing reads

The group declares showInWebsite and showInStore, which is why the switcher appears, but every reader resolves the value at default scope. The skin is read as getValue('nebula/theme/skin') with no scope argument at all, and so is the menu position. Nebula\Core\Model\Config\Theme accepts a scope, and every caller passes none, so it resolves against the current store. In the admin area the current store is the admin store, which inherits default. Set the skin, the menu position, the configuration menu position, the category view type and the tab toggles at Default Config. A website or store-view override is stored in core_config_data and never rendered.

The Login Screen and Admin Branding groups are deliberately default-only: there is one admin, so a website or store-view override could never be reached. Category Merchandiser is default-only because product position lives in catalog_category_product, which has no store_id.

Setting values from the command line

Every path below can be written without opening the admin:

bin/magento config:set nebula/theme/skin dracula
bin/magento config:set nebula/theme/menu_position top
bin/magento config:set nebula/theme/config_nav_position toolbar
bin/magento config:set nebula/merchandiser/page_size 48
bin/magento config:set nebula_passkey/general/passkey_satisfies_2fa 0

To write a value for one store view, add the scope arguments. Pick a path whose reader is actually scope-aware, which on this page means nebula/customer_password/* and nebula_passkey/frontend/*:

bin/magento config:set --scope=stores --scope-code=default \
  nebula/customer_password/set_by_admin_template nebula_customer_password_set_by_admin_template
bin/magento config:set --scope=stores --scope-code=default nebula_passkey/frontend/rp_id example.com

Writing nebula/theme/* at store-view scope stores a row that nothing reads. See Scope above.

Note

config:set writes to core_config_data. Use config:show <path> to read a value back, and bin/magento app:config:dump if you keep configuration in app/etc/config.php.


Nebula › Settings

Setting (label) Path Type / options Default What it does
Admin Theme nebula/theme/admin_theme Select: Nebula (packaged), plus every registered adminhtml theme that declares <parent>Nebula/backend</parent> Nebula/backend Which theme adminhtml renders. Nebula forces a theme onto every admin request; this chooses which one. Only a descendant of Nebula/backend is offered and honoured — a child inherits Nebula's layout and templates through the normal fallback chain, so theme-level files (root.phtml, the menu, the login shell, css/dist/app.css) can be overridden without editing vendor/. An unrelated theme, or a stored path that is not registered, falls back to the packaged theme and logs a warning rather than leaving the admin unthemed. The theme switcher recognises the same set as "Nebula", so a child keeps every Nebula plugin. See A theme of your own.
Menu Position nebula/theme/menu_position Select: sidebar (Sidebar (left)), top (Top (horizontal)), magento (Magento rail (icon + label)) sidebar Controls where the main navigation menu appears. magento is the native-Magento icon-above-label rail with flyout submenus. Saving a new value clears the config, layout and block caches automatically.
Configuration Menu Position nebula/theme/config_nav_position Select: sidebar (Sidebar (fixed left column)), rail (Rail (collapsible left column)), toolbar (Toolbar (dropdown beside the scope picker)) sidebar Where the section menu sits on the Configuration page itself. Rail is the same column with a control that collapses it to a strip, giving the form the width back. Toolbar drops the column and puts the menu behind a button beside the scope picker — the one to choose if you work at narrow widths with the main menu collapsed. An unrecognised stored value falls back to sidebar.
Color Scheme nebula/theme/skin Select, from the skin JSON files found in every module's view/adminhtml/nebula/skin/ (19 ship with Nebula — see below) indigo Selects the admin colour scheme. Third-party modules add their own by dropping a JSON file in that directory. An unknown id renders no skin CSS and the stylesheet defaults stand. The field offers website and store-view scope, but SkinLoader::getActiveSkinId() reads the path at default scope, so a scoped value never renders. Set the skin at Default Config.
Enable Product Edit Tabs nebula/theme/enable_product_edit_tabs Select: Yes / No 0 (No) Enables the experimental tabbed Nebula layout for the Magento product edit page.
Enable CMS Page Edit Tabs nebula/theme/enable_cms_page_edit_tabs Select: Yes / No 0 (No) Enables the experimental tabbed Nebula layout for the Magento CMS page edit view.
Enable CMS Block Edit Tabs nebula/theme/enable_cms_block_edit_tabs Select: Yes / No 0 (No) Enables the tabbed Nebula layout for the Magento CMS block edit view. Read by Nebula\Core\Plugin\UseTabbedCmsBlockEditForm.
Enable Landing Page Edit Tabs nebula/theme/enable_landing_page_edit_tabs Select: Yes / No 0 (No) Splits the landing page edit view into steps — General, Content, Products, Hub, Search Engines, Campaign Window — rather than one long form. Has no effect unless Nebula_LandingPage is installed.
Category View Type nebula/theme/category_view_type Select: standard (Standard (Sidebar + Form)), refreshed (Refreshed (Drawer Tree + Full Tabs)), unified (Unified (Drawer Tree + Top Sections + Tabs)), tabbed_sidebar (Tabbed Sidebar (Sidebar on Desktop, Drawer on Mobile)) standard Layout style for the Magento category edit page. An empty value falls back to standard.
Show Payment Recommendations nebula/theme/show_payment_recommendations Select: Yes / No 0 (No) Shows the marketing blocks on Stores › Configuration › Sales › Payment Methods (the Mollie "Hyvä's Top Pick" panel and the "Go to Payment Services" link). Hidden by default. Your actual payment method settings are never affected by this flag; it only hides the promotional sub-blocks, via Nebula\Core\Plugin\Config\HidePaymentMarketing.
The 19 colour schemes that ship with Nebula

The value stored in nebula/theme/skin is the id on the left.

Id Label
accessible-deuteranopia Accessible (Green-Blind / Deuteranopia)
accessible-protanopia Accessible (Red-Blind / Protanopia)
amber Amber
amber-large Amber Large
dracula Dracula
emerald Emerald
flat Flat (No Radius)
high-contrast ⚡ HIGH CONTRAST ⚡
indigo Indigo (Default)
indigo-compact Indigo Compact
magento-classic Magento Classic (2.4 Admin)
matrix Matrix
nord Nord (Arctic)
nostalgia Nostalgia (Magento 1)
qoliber-fire Qoliber Fire 🔥
rose Rose
siteation Siteation
slate Slate
tokio-night Tokyo Night

Skins are discovered at runtime, so this list grows with any module that ships its own. A skin file larger than 256 KiB, or one that fails to parse, is skipped rather than breaking the list.

Do not leave these selects unset

Every select in this group has a default in config.xml for a reason. A select with no stored default renders its first option, and saving the section posts every field — so opening the page and pressing Save would adopt that first option. For skin the first option is accessible-deuteranopia, not indigo. If you add a field to this group in your own module, add its default to config.xml too.

Getting a shipped default back takes the command line

Once a row exists in core_config_data at Default Config, no nebula/* field offers a "Use system value" checkbox to undo it. Only the six Nebula Passkey fields declare canRestore="1". The checkbox a website or store view shows is Magento's own "Use Default" inherit control, which points back at the parent scope rather than at the packaged default, and for nebula/theme the parent scope is the only one read anyway. The way back is bin/magento config:set nebula/theme/skin indigo with the value from the Default column of these tables, or deleting the row.

Source: code/Nebula/Core/etc/adminhtml/system.xml, code/Nebula/Core/etc/config.xml, code/Nebula/Core/Model/Config/Source/MenuPosition.php, code/Nebula/Core/Model/Config/Source/ConfigNavPosition.php, code/Nebula/Core/Model/Config/Source/CategoryViewType.php, code/Nebula/Core/Model/Config/Backend/MenuPosition.php, code/Nebula/Core/Model/Config/Theme.php, code/Nebula/Skin/Model/Source/SkinList.php, code/Nebula/Skin/Model/SkinLoader.php.


Nebula › Login Screen

This is the branding panel beside the sign-in form. Leave a field empty to keep Nebula's own wording, which is translated with the rest of the admin; anything you type is shown verbatim, in the language you type it. Default scope only.

Setting (label) Path Type / options Default What it does
Logo nebula/login/logo Image upload (Nebula\Core\Model\Config\Backend\BrandingImage: jpg, jpeg, gif, png, webp, svg) empty Shown at 64×64 inside a rounded tile. A square image is what fits; anything else is letterboxed rather than cropped. Empty falls back to nebula-logo-full.jpg shipped in the theme, resolved by the template rather than by config, so anyone inheriting the theme can drop in their own file. See Replacing the shipped marks.
Title nebula/login/title Text empty → Nebula The large line under the logo.
Subtitle nebula/login/subtitle Text empty → Administration Panel The line below the title.
Tagline nebula/login/tagline Textarea empty → Modern eCommerce management — built for speed, clarity and control. The small paragraph at the bottom. Keep it short; the column is narrow and long text pushes the panel out of balance.

Where an uploaded logo goes

pub/media/nebula/login/<scope>/, where <scope> is default, websites/<id> or stores/<id> — the directory Nebula\Core\ViewModel\LoginBranding reads, so an upload shows on the next request. (Until 2026-09-13 the field used core's Image\Logo backend model, which ignored the field's upload_dir and wrote under pub/media/logo/, where the login page never looked; a copy step was needed. It is not any more.)

Source: code/Nebula/Core/etc/adminhtml/system.xml, code/Nebula/Core/ViewModel/LoginBranding.php.


Nebula › Admin Branding

The mark and wording inside the admin itself. Same contract as the login panel: empty keeps Nebula's own, anything set is used verbatim and is not translated. Default scope only.

Setting (label) Path Type / options Default What it does
Sidebar Logo nebula/admin/logo Image upload (Nebula\Core\Model\Config\Backend\BrandingImage: jpg, jpeg, gif, png, webp, svg) empty Shown at 32×32 beside the wordmark, and it collapses with the sidebar. A square image fits; anything else is contained rather than cropped. Empty leaves the theme's nebula-logo.png in place.
Wordmark nebula/admin/wordmark Text empty → Nebula The word beside the mark. Long words are truncated by the sidebar rather than wrapping it.
Favicon nebula/admin/favicon Image upload (Nebula\Core\Model\Config\Backend\BrandingFavicon: ico, png, gif, jpg, jpeg, apng, webp, svg) empty The browser tab icon for admin pages. PNG, square, 96×96 or larger. Empty falls back to the same nebula-logo.png the sidebar uses.

Where these uploads go

pub/media/nebula/admin/<scope>/ for both, which is where Nebula\Core\ViewModel\AdminBranding reads them, so an upload shows on the next request. (Until 2026-09-13 the fields used core's Image\Logo and Image\Favicon backend models, which wrote under pub/media/logo/ and pub/media/favicon/ instead; the copy step that needed is gone. Files uploaded before then stay where they were — upload once more, or copy them into the directories above.)

Replacing the shipped marks

The fallbacks behind both branding groups are view files in the theme, not config values. A child theme can replace them without a single row in core_config_data, which is the route that does not depend on the upload fields.

View file What renders it
design/adminhtml/Nebula/backend/web/images/nebula-logo-full.jpg The login panel mark, from Magento_Backend/templates/admin/login_branding.phtml.
design/adminhtml/Nebula/backend/web/images/nebula-logo.png Both the sidebar mark (Magento_Backend/templates/page/sidebar_logo.phtml) and the admin favicon (Magento_Theme/templates/root.phtml). One file serves two surfaces, so replacing it changes both.

In a theme that declares <parent>Nebula/backend</parent>, put your own files at app/design/adminhtml/<Vendor>/<theme>/web/images/nebula-logo.png and app/design/adminhtml/<Vendor>/<theme>/web/images/nebula-logo-full.jpg. See A theme of your own.

Note

Both are resolved with getViewFileUrl(), so production mode needs a static content deploy before the replacements are served. Developer mode picks them up on the next request.

Source: code/Nebula/Core/etc/adminhtml/system.xml, code/Nebula/Core/ViewModel/AdminBranding.php.


Nebula › Category Merchandiser

Ordering the products inside a category. Default scope only. The defaults match Hyvä's Category Merchandiser 0.1.0 key for key, so a merchant moving between the two finds the same behaviour.

Setting (label) Path Type / options Default What it does
Enable Category Merchandiser nebula/merchandiser/enabled Select: Yes / No 1 (Yes) Replaces the read-only products list on the category page with a link to the merchandiser.
Include Assigned Products in Search nebula/merchandiser/search_include_assigned Select: Yes / No 1 (Yes) Shows products already in this category among the search results.
Include Disabled Products in Search nebula/merchandiser/search_include_disabled Select: Yes / No 0 (No) Includes disabled products in the merchandiser's product search.
Include Non-Visible Products in Search nebula/merchandiser/search_include_invisible Select: Yes / No 0 (No) Includes products set to "Not Visible Individually" or "Search" only.
Minimum Search Query Length nebula/merchandiser/search_min_query_length Text, digits only 3 How many characters before the merchandiser searches. Between 1 and 10; values outside that range are clamped when read, not rejected on save.
Add New Products to Top of Grid nebula/merchandiser/add_to_top Select: Yes / No 1 (Yes) Newly added products land at position 1 rather than at the end.
Product Grid Columns nebula/merchandiser/grid_columns Text, digits only 4 Columns in the merchandiser grid. Between 1 and 8, clamped on read. Each administrator can override this for themselves.
Products per Page nebula/merchandiser/page_size Text, digits only 24 Page size for the merchandiser grid. Between 12 and 100, clamped on read. Each administrator can override this for themselves.
Warn When the Category Does Not Sort by Position nebula/merchandiser/warn_on_sort_order Select: Yes / No 1 (Yes) Shows a warning when the category's default sort is not Position. Manual order is invisible to a shopper unless the listing sorts by Position.

Note

The three numeric fields are clamped every time they are read, so a value hand-edited into core_config_data — a page size of 100000, say — produces a wide page rather than an outage.

Source: code/Nebula/Merchandiser/etc/adminhtml/system.xml, code/Nebula/Merchandiser/etc/config.xml, code/Nebula/Merchandiser/Model/Config.php.


Nebula › Customer Passwords

Setting (label) Path Type / options Default What it does
Password Set By An Administrator nebula/customer_password/set_by_admin_template Select, from Magento\Config\Model\Config\Source\Email\Template (every registered transactional email template) nebula_customer_password_set_by_admin_template ("Password Set By An Administrator") The email sent to the customer after a member of staff sets a new password on their account. Deliberately not core's "your password has been changed" template, whose copy tells the recipient to raise the alarm about something the store did on purpose. Shows in default, website and store-view scope.

The on switch is an ACL resource, not a config field

Who may set a customer's password is decided by the Nebula_Theme::customer_set_password permission, per role, under System › Permissions › User Roles. This field only points the feature at different copy, so a merchant who wants different wording does not have to fork the module.

Source: code/Nebula/Theme/etc/adminhtml/system.xml, code/Nebula/Theme/etc/config.xml, code/Nebula/Theme/etc/email_templates.xml, code/Nebula/Theme/Model/Customer/PasswordChangedNotifier.php.


Nebula Pro › Pro Upsell

Controls the "this is a Nebula Pro feature" prompts shown in the admin when a paid feature is not installed. Resellers can rebrand the call to action or turn the prompts off. Default scope only.

Setting (label) Path Type / options Default What it does
Show Pro Upsell Prompts nebula_pro_marketing/upsell/enabled Select: Yes / No 1 (Yes) Master switch for every Pro upsell affordance in the admin. Set to No and the three fields below are hidden.
Call To Action Label nebula_pro_marketing/upsell/cta_label Text (shown only when enabled) Upgrade to Nebula Pro Text on the upgrade button in the upsell dialog.
Call To Action URL nebula_pro_marketing/upsell/cta_url Text, validated as a URL (shown only when enabled) https://qoliber.com/nebula-pro Where the upgrade button links to. Point this at your own sales page to white-label the prompts.
Override Message nebula_pro_marketing/upsell/message Textarea (shown only when enabled) empty Optional. Replaces the default per-feature description in the upsell dialog with your own copy.

Source: code/Nebula/ProMarketing/etc/adminhtml/system.xml, code/Nebula/ProMarketing/etc/config.xml.


Security › Nebula Passkey › General

These govern the passkeys administrators register. Default scope only. Every field can be reset with the "Use system value" checkbox.

Setting (label) Path Type / options Default What it does
Relying Party ID nebula_passkey/general/rp_id Text empty → the host of the admin base URL The WebAuthn relying party id administrators' credentials are bound to. Leave empty for almost every install. Set it only when the admin is served on a subdomain and the passkey should also work on the parent domain — example.com for an admin on admin.example.com. It must be the admin host or a parent of it; anything else is rejected, because no browser would accept it.
Relying Party Name nebula_passkey/general/rp_name Text empty → Nebula Admin The name the authenticator shows the administrator while registering a passkey.
A passkey satisfies two-factor authentication nebula_passkey/general/passkey_satisfies_2fa Select: Yes / No 1 (Yes) Whether a passkey sign-in also clears Magento's two-factor requirement. Only applies when Magento_TwoFactorAuth is enabled, and only to sign-ins where the authenticator actually performed user verification — a biometric, a PIN or a screen unlock — rather than merely confirming somebody was present. Such a sign-in is possession plus inherence, which is two factors. Set to No if a compliance regime names the specific second factors you must use.

Note

User verification is read off the signed authenticator data, not inferred from what the sign-in asked for. An assertion that only proved presence never reaches this flag, so setting it to Yes cannot waive a factor that was not actually provided.

This section is opened by Nebula_Passkey::passkey_manage

Each configuration section names the resource that opens it. nebula and nebula_pro_marketing name Nebula_Core::config, nebula_theme_switcher names Nebula_ThemeSwitcher::config, and nebula_passkey names Nebula_Passkey::passkey_manage. That last one is the resource every administrator has to hold in order to register a passkey of their own, so any role that also reaches Stores › Configuration can change the relying party id and the two-factor waiver here. That is wider than the other sections, and it is worth deciding on rather than inheriting. To narrow it, give the section its own resource in system.xml. See ACL resources.

Source: code/Nebula/Passkey/etc/adminhtml/system.xml, code/Nebula/Passkey/etc/config.xml, code/Nebula/Passkey/Model/Config/AdminRelyingParty.php, code/Nebula/Passkey/Model/TwoFactor/AdminTwoFactorBridge.php.


Security › Nebula Passkey › Storefront

Customers sign in with passkeys against the storefront's own relying party, which is deliberately separate from the admin's. A customer's authenticator must not satisfy an admin sign-in, and that holds whatever these fields say. Shows in default, website and store-view scope, and the value is read at the scope it is set. Every field here can be reset with the "Use system value" checkbox.

Setting (label) Path Type / options Default What it does
Relying Party ID nebula_passkey/frontend/rp_id Text empty → the host of this store view's base URL Leave empty unless several store views share one account and their passkeys should work across all of them — example.com for stores on uk.example.com and de.example.com. It must be the store's host or a parent of it.
Relying Party Name nebula_passkey/frontend/rp_name Text empty → the store name (or Store Account if the store has no name) What the authenticator shows a customer while they register. The store name is what a customer will recognise.
A passkey satisfies two-step verification nebula_passkey/frontend/passkey_satisfies_2fa Select: Yes / No 1 (Yes) Whether a user-verified passkey sign-in clears the storefront's two-step prompt. Separate from the admin setting above, so administrators can be held to a stricter rule than shoppers.

Source: code/Nebula/Passkey/etc/adminhtml/system.xml, code/Nebula/Passkey/etc/config.xml, code/Nebula/Passkey/Model/Config/StorefrontRelyingParty.php, code/Nebula/Passkey/Model/Totp/PasskeySatisfiesTotp.php.


Security › 2FA › force_providers

Nebula ships a default for a core setting, and it is the one default here that belongs to another module.

Setting (label) Path Type / options Default What it does
Providers to use (Magento's own field) twofactorauth/general/force_providers Multiselect of provider codes google,nebula_passkey The providers every administrator must configure. The list is cumulative, not a menu: an administrator who already has Google Authenticator set up is still required to enrol a passkey before the dashboard opens. Magento ships this empty, and an empty list sends the first administrator to a screen asking them to pick providers for the whole install before they have seen the admin at all. Naming two here answers that with the two this package can actually deliver. The field carries "Use system value", so a merchant who disagrees clears it in one click.

What this means for the first sign-in

An administrator with no second factor yet is normally redirected by Magento to tfa/tfa/requestconfig, which emails them a configuration link. On an install whose mail goes nowhere that is a dead end, and it is the whole of the first-run experience. Nebula sends them to the provider selection screen first instead: the passkey can be enrolled inline, and choosing any other provider links back to the core controller with the choice recorded, at which point the email is sent exactly as before. Nothing is bypassed.

The selection screen only appears while more than one provider is still outstanding. An administrator who already has one of the two configured has nothing to choose between, so Magento's own tfa/tfa/requestconfig handles them and emails the configuration link for the remaining provider.

See First sign-in and two-step verification.

Source: code/Nebula/Passkey/etc/config.xml, code/Nebula/Passkey/Plugin/OfferProviderChoiceOnFirstEnrolment.php.


Nebula › Nebula Theme Switcher

Default scope only.

Setting (label) Path Type / options Default What it does
Enable Module nebula_theme_switcher/general/enabled Select: Yes / No 1 (Yes) Shows the theme switcher in the admin menu. Set to No and the switcher disappears, the theme recorded below stops applying, and every Nebula plugin that asks the switcher answers "Nebula" whatever value the field still holds — so Nebula renders whole again. (Until 2026-09-13 six plugins read the stale value and stripped Nebula's own layout from a Nebula page.) Disabling the module is not a way to stay on another admin theme.
Active Admin Theme nebula_theme_switcher/general/active_theme Text (a theme path, e.g. Nebula/backend) Nebula/backend Which admin theme is rendered. Managed by the widget rather than typed by hand. Nebula keeps its own path rather than reading admin/system_admin_design/active_theme, so it does not inherit another switcher module's default; an admin who edits that core field is mirrored back onto this one so the two do not drift. An empty value counts as Nebula being active, and so does a registered child of Nebula/backend: the child renders and every Nebula plugin stays on. Only a theme outside that family — Magento/backend, MageOS/m137-admin-theme — puts the admin into legacy mode.

The sidebar widget

The switcher renders as a block inside the admin menu from Nebula_ThemeSwitcher::sidebar/theme-switcher.phtml. It sits at the foot of the sidebar under Nebula and is appended to the menu bar under a legacy admin theme. It lists every registered adminhtml theme, marks the current one, and posts the choice to its own controller, which writes active_theme above. Themes it recognises get a short, readable label; anything else keeps the title from its own theme.xml. When a non-Nebula theme is selected, Nebula's layout updates and scripts are filtered out so the legacy admin renders cleanly.

Source: code/Nebula/ThemeSwitcher/etc/adminhtml/system.xml, code/Nebula/ThemeSwitcher/etc/config.xml, code/Nebula/ThemeSwitcher/Helper/Config.php, code/Nebula/ThemeSwitcher/Block/Adminhtml/Header/ThemeSwitcher.php.


Advanced › System › Mail Sending Settings

Nebula adds no field here. It adds one validation rule to a field Magento already has.

Setting (label) Path Type / options Default What it does
Return-Path Email (core field) system/smtp/return_path_email Text; Nebula changes the client-side rule from validate-email to validate-email required-entry unchanged (core's) Makes the browser say what the save already enforces. The field only appears when Set Return-Path is "Specified", and in that state Magento's own backend model refuses to save an empty value — but core declares only validate-email, which passes on empty. So an empty value used to reach the server and fail the whole section save with The "" email address is incorrect., a message naming neither the field nor its group. The field is disabled whenever it is hidden, so the new rule can only fire when an admin has actually asked for a specified return path.

Source: code/Nebula/System/etc/adminhtml/system.xml.


General › Content Management — what the install patch writes

Nebula_Quill ships a data patch that writes three core config values once, at setup:upgrade. These are ordinary config rows afterwards: you can change any of them in the admin or with config:set, and the patch will not run again to undo you.

Path Written value What it does
cms/wysiwyg/enabled enabled Turns the WYSIWYG editor on, so content fields get a rich editor rather than a raw textarea.
cms/wysiwyg/editor Nebula_Quill/js/wysiwyg/quill-adapter Selects Nebula's Quill adapter as the editor. This value is also what the module's own config model checks to decide whether Quill is the active editor.
cms/pagebuilder/enabled 0 Turns Page Builder off. Page Builder is a Knockout/RequireJS application and does not render inside the Nebula admin.

Source: code/Nebula/Quill/Setup/Patch/Data/ConfigureDefaultEditor.php, code/Nebula/Quill/Model/Config/QuillConfig.php.


The header and footer editor is a screen, not a configuration section, but its Save button writes core config rows. The screen itself is described in Content.

Path Written on Save Removed by
design/email/header_template The numeric id of a transactional email template the editor creates, named design_email_header_template_store_<storeId> Clearing the setting for that scope. No button in the editor removes it.
design/email/footer_template The same, named design_email_footer_template_store_<storeId> The same.

The row is written at Default Config when no store view is selected, and at stores scope for that store view otherwise.

The reset path is not usable in this release

The screen's Reset to default button posts to a route that ships no controller, so it fails and changes nothing. Delete is not offered in header and footer mode, and the delete controller refuses these rows outright. To put the shipped header or footer back for a scope, clear the Email Header Template or Email Footer Template setting named below for that scope. See Content.

This is the same setting Stores › Configuration › Design › Transactional Emails shows as Email Header Template and Email Footer Template. The editor and that field are two screens onto one value, and the last one saved wins.

Source: code/Nebula/EmailTemplateEditor/Model/Partial/PartialManager.php.


Core settings Nebula reads

Magento's own settings that decide what a Nebula screen draws. Nebula ships no default for any of them, so a fresh install behaves the way Magento ships. The first two govern the Login as Customer panel described in Customers and security.

Path Admin location What it decides
login_as_customer/general/enabled Stores › Configuration › Customers › Login as Customer › Enable Login as Customer Magento ships this off. While it is off, neither Login as Customer control is drawn on the customer form: not the Start session… row and not the "Allow remote shopping assistance" toggle, whatever the role's permissions say. The row needs the module, this flag and Magento_LoginAsCustomer::login together.
login_as_customer/general/store_view_manual_choice_enabled The same group, Manual Choice Enable Whether the dialog offers a store-view choice. It is offered only when this is Yes and the customer's account reaches more than one store view. Otherwise core picks the store itself, and Nebula does not override that.
system/media_storage_configuration/allowed_resources/media_gallery_image_folders No field anywhere. An array node contributed by config.xml The only folders the media browser lists. It is an allow list, not a deny list: a folder that is not on it stays hidden even though the indexer has walked it. Magento_Cms contributes wysiwyg and Magento_Catalog contributes catalog/category, and on a stock install those two are all of it. A pub/media/brands folder filled over FTP is indexed and never listed until something adds it.

The media allow list cannot be written with config:set

It is an array node, so the only way to add a root is a module config.xml contributing a child to it:

etc/config.xml
<default>
    <system>
        <media_storage_configuration>
            <allowed_resources>
                <media_gallery_image_folders>
                    <brands>brands</brands>
                </media_gallery_image_folders>
            </allowed_resources>
        </media_storage_configuration>
    </system>
</default>

Nebula reads the node at default scope only. It also refuses downloadable, customer, customer_address, import, export, tmp, captcha, analytics, sitemap, theme_customization and .thumbs whatever the node says, so no configuration can hand the browser customer invoices or purchased downloadables. bin/magento nebula:media:index reports the same rule when the index ends up holding nothing browsable. See nebula:media:index.

Source: code/Nebula/Theme/Model/Customer/LoginAsCustomerState.php, code/Nebula/Media/Model/AllowedMediaFolders.php.


Hidden defaults

Values Nebula's config.xml files set that have no field in Stores › Configuration. Change them with bin/magento config:set, or by editing app/etc/config.php if you keep configuration in the filesystem.

Path Default Purpose
nebula/theme/enable_category_refresh 0 Legacy flag from before Category View Type existed. Nothing in this version reads it; the deprecated Theme::isCategoryRefreshEnabled() now answers from nebula/theme/category_view_type instead. Kept so an install that stored a value does not see it vanish. Use nebula/theme/category_view_type.
dev/js/minify_exclude/nebula_node_modules /node_modules/ Excludes the theme's build tooling from JavaScript minification. The Nebula theme keeps its build tooling under web/node_modules, and setup:static-content:deploy walks the whole web/ tree; without this, production-mode deploy hands those multi-megabyte Node bundles to JShrink, which fails with "Unclosed string" on non-browser code. Matching /node_modules/ anywhere in the path skips those files, which the browser never requests anyway.
dev/css/minify_exclude/nebula_node_modules /node_modules/ The same exclusion for CSS.
nebula_passkey/general/passkey_satisfies_2fa 1 Has a field (documented above); listed here because the default lives in config.xml rather than in system.xml, so a fresh install has it on before anyone visits the section.
nebula_passkey/frontend/passkey_satisfies_2fa 1 As above, for the storefront.
twofactorauth/general/force_providers google,nebula_passkey A default written into another module's path. Documented in full under Security › 2FA.

Note

nebula/login/* has no defaults in config.xml on purpose. Those fields are text, not selects, so there is no first-option hazard — and empty is the value that means something: the view model falls back to the packaged mark and to translated strings, which a stored default would replace with untranslatable English.

Source: code/Nebula/Core/etc/config.xml, code/Nebula/Core/Model/Config/Theme.php, code/Nebula/Passkey/etc/config.xml.