Put something like this in the setup file:

conversion:
  - from: odt
    to: pdf
    command: [unoconv, -f, pdf, -o, $OUTPUTDIR, $INPUTFILE]
  - from: ditaa
    to: png
    command: [ditaa, $INPUTFILE, $OUTPUTFILE, -s, 0.7]

However Dumper($config{conversion}) shows:

$VAR1 = [
          'HASH(0x164e1a0)',
          'HASH(0x164e3c8)'
        ];

I think it is getting mangled in sub merge in IkiWiki/Setup.pm and its calls to possibly_foolish_untaint

Workaround: force the array values to be strings, and then re-parse them using YAML::XS::Load:

conversion:
  - |
    from: [odt, odp]
    to: pdf
    command: [unoconv, -f, pdf, -o, $OUTPUTDIR, $INPUTFILE]
  - |
    from: ditaa
    to: png
    command: [ditaa, $INPUTFILE, $OUTPUTFILE, -s, 0.7]

...

sub checkconfig {
    if (!defined $config{conversion} || ref $config{conversion} ne "ARRAY") {
        error(sprintf(gettext("Must specify '%s' and it must be a list"), "conversion"));
    }
    for (my $i=0; $i < @{$config{conversion}}; $i++) {
      $config{conversion}->[$i] = YAML::XS::Load($config{conversion}->[$i]) if
          ref $config{conversion}->[$i] ne 'HASH';
    }
}

getsetup defines config options to be one of: boolean, string, integer, pagespec, "internal" (non-user-visible string), ref to an array of one of those scalar types, or ref to a hash { string => one of those scalar types }. IkiWiki::Setup also appears to support regexps (qr//), although that's not documented (presumably they're treated the same as strings).

Supporting arbitrary arrays/hashes as values would require some way to untaint the values recursively.

Complex config data also can't be used with the websetup plugin, which currently supports everything that IkiWiki::Setup does, except for hashes. --smcv