public function configure(ArrayNodeDefinition $builder)
    {
        $builder
            ->children()
                // Common settings.
                ->enumNode('default_driver')
                    // "wpapi" is for backwards compatibility; means "wpphp".
                    ->values(['wpcli', 'wpapi', 'wpphp', 'blackbox'])
                    ->defaultValue('wpcli')
                ->end()
                ->scalarNode('path')
                    ->defaultValue('')
                ->end()

                // WordPress' "siteurl" option.
                ->scalarNode('site_url')->defaultValue('%mink.base_url%')->end()

                // Account roles -> username/password.
                ->arrayNode('users')
                    ->prototype('array')
                        ->children()
                            ->variableNode('roles')
                                ->defaultValue(['administrator'])
                            ->end()
                            ->scalarNode('username')
                                ->defaultValue('admin')
                            ->end()
                            ->scalarNode('password')
                                ->defaultValue('admin')
                            ->end()
                        ->end()
                    ->end()
                ->end()

                // WP-CLI driver.
                ->arrayNode('wpcli')
                    ->addDefaultsIfNotSet()
                    ->children()
                        ->scalarNode('alias')->end()
                        ->scalarNode('binary')
                            ->defaultValue('wp')
                        ->end()
                    ->end()
                ->end()

                // WordPress PHP driver.
                ->arrayNode('wpphp')
                    ->addDefaultsIfNotSet()
                    ->children()
                    ->end()
                ->end()

                // Blackbox driver.
                ->arrayNode('blackbox')
                    ->addDefaultsIfNotSet()
                    ->children()
                    ->end()
                ->end()

                // Database management.
                ->arrayNode('database')
                    ->addDefaultsIfNotSet()
                    ->children()
                        ->booleanNode('restore_after_test')
                            ->defaultFalse()
                        ->end()
                        ->scalarNode('backup_path')
                        ->end()
                    ->end()
                ->end()

                // Permalink patterns.
                ->arrayNode('permalinks')
                    ->addDefaultsIfNotSet()
                    ->children()
                        ->scalarNode('author_archive')
                            ->defaultValue('author/%s/')
                        ->end()
                    ->end()
                ->end()

                // Internal use only. Don't use it. Or else.
                ->arrayNode('internal')
                    ->addDefaultsIfNotSet()
                ->end()
            ->end()
        ->end();
    }