Problem/Motivation
Profiles are in a confusing place in core. Let's define what they do that can't be done elsewhere and either replace that functionality or better define how and when to use profiles.
Profiles can currently do the following (non exhaustive and not in a specific order)
- Define a distribution ( prevents selecting a profile )
- Define install time theme
- Define hook_install_tasks and hook_install_tasks_alter
- Provide a list of modules and themes to install during Drupal install
- Provide configuration for modules and themes
- Override default configuration from modules (even once an install is finished)
I think the first step in this cleanup is to remove the profile selection form: #3520028: Remove support for selecting install profiles via the UI installer
The above issue means we need to provide a way to define which profile to install, this is one of the main features of distributions.
The other feature of distributions is the ability to define which theme to use - we should replace the ability to choose the theme shortly after or as part of that issue.
Steps to reproduce
Proposed resolution
Remaining tasks
Find place for profile docs
Document keep_english
Document #3605551: Allow install profiles to be automatically uninstalled
Comments
Comment #2
nicxvan commentedComment #3
nicxvan commentedComment #4
catchCross-linking #2876001: Installerless Drupal. We are still nowhere near the point of being completely 'installerless', but I think it would be feasible to move towards something like the following:
1. Choose language and submit the database settings form (or just the database settings form if we decided that this and only this could be untranslatable).
2. As soon as the database settings form is submitted, Drupal is 'installed' and you land on a wizard. This wizard would be on a route or custom controller like update.php, fully installed site, from there you get language settings, site template selection, things like the site name etc. Once you submit the wizard we set a flag in key/value so you can't get back in again.
So more or less replacing the 'late installer' with a wizard and hopefully we'd be able to simplify the early installer a lot (but wouldn't need to finish that to bypass the late installer, so that could happen in parallel).
With ddev, the Drupal CMS desktop app, and any other system that pre-fills settings.php, you never see #1 anyway so it would be an instant redirect to #2.
We'd still need a way to pre-set a distribution and theme before the first step of #2, but all the other features could be (re-) implemented as normal Drupal APIs.
Comment #5
phenaproximaIt is worth mentioning that this is what the Drupal CMS installer effectively does, as of version 2.1.0.
The installer is still a profile (since that's the only way to hook into core's install process), but it front-loads the initial database set-up so that the rest of the profile can act as a wizard operating in a fully booted, minimally installed (i.e., only required modules) Drupal environment.
Core could get there too if we did at least these two things:
Comment #6
andypostExcept KV(e) storage (which could use APCu for example) and "system.module" it needs KV storage for user and user_data KeyValueEntityStorage
Comment #7
nicxvan commentedComment #8
nicxvan commentedComment #9
nicxvan commentedWe can prevent profiles from being installed here #3614401: Allow install profiles to opt out of being installed
Comment #10
nicxvan commentedI think one of the first things we need is to do is add a profile.api.php.
There we can document the keys that profiles have.
#3615639: Add profile.api.php
Comment #11
nicxvan commented