First of all, thanks to @toscho for the detailed answer.
This is a simple example for those who are searching for a simple solution and default widget options:
$active_sidebars = get_option( 'sidebars_widgets' ); //get all sidebars and widgets
$widget_options = get_option( 'widget_name-1' );
$widget_options[1] = array( 'option1' => 'value', 'option2' => 'value2' );
if(isset($active_sidebars['sidebar-id']) && empty($active_sidebars['sidebar-id'])) { //check if sidebar exists and it is empty
$active_sidebars['sidebar-id'] = array('widget_name-1', 'other_widget_name-1'); //add twoa widgetswidget to sidebar
update_option('widget_name-1', $widget_options); //update widget default options
update_option('sidebars_widgets', $active_sidebars); //update sidebars
}
Note 1: You can get sidebar-id
going to widgets menu and inspecting the wanted sidebar. The first <div id="widgets-holder-wrap">
's <div>
child has the sidebar-id
.
Note 2: You can get the widget_name
going to widgets menu and inspecting the wanted widget. You'll see something like <div id="widget-6_widget_name-__i__" class="widget ui-draggable">
.
I wish it helps.