I can create content type fields pragmatically, but I set het widget options too?
I think it should look like this :

    'field_instance' =&gt; array(
  'bundle' =&gt; 'fo',
  'default_formatter' =&gt; 'text_default',
  'default_value' =&gt; NULL,
  'default_widget' =&gt; 'text_textfield',
  'deleted' =&gt; '0',
  'description' =&gt; 'blah blah blah.',
  'display' =&gt; array(
    'default' =&gt; array(
      'label' =&gt; 'above',
      'module' =&gt; 'text',
      'settings' =&gt; array(),
      'type' =&gt; 'text_default',
      'weight' =&gt; 0,
    ),
  ),
  'entity_type' =&gt; 'taxonomy_term',
  'field_name' =&gt; 'test',
  'instance_settings' =&gt; array(
    'text_processing' =&gt; 0,
  ),
  'label' =&gt; ' test',
  'required' =&gt; FALSE,
  'settings' =&gt; array(
    'max_length' =&gt; 255,
    'text_processing' =&gt; 0,
    'user_register_form' =&gt; FALSE,
  ),
  'title' =&gt; 'test',
  'widget' =&gt; array(
    'module' =&gt; 'text',
    'settings' =&gt; array(
      'size' =&gt; 60,
    ),
    'type' =&gt; 'text_textfield',
    'weight' =&gt; 31,
  ),
),