This code snippet will allow you to show different number of posts on homepage, per category, and post type without using any plugin.
function different_post_per_page( $query ) {
    if ( $query->is_main_query() && $query->is_home() ) {
        //Display 1 post per page on the homepage
        $query->query_vars['posts_per_page'] = 1;
        return;
    }
     if ($query->is_main_query() && $query->is_category('dinner') ) {
        //Display 5 posts per page for a category called 'dinner'
        $query->query_vars['posts_per_page'] = 5;
        return;
    }
     if ( $query->is_main_query() && $query->is_post_type_archive('receipe') ) {
        //Display 10 posts per page for a custom post type called 'receipe'
        $query->query_vars['posts_per_page'] = 10;
        return;
    }
}
add_action('pre_get_posts', 'different_post_per_page', 1);
Another use of this hook can be to include or exclude posts from certain categories on homepage.

