<?php
// Setup vars for pagination.
$per_page = 10;
$current_page = ( intval( get_query_var('paged') ) ) ? intval( get_query_var( 'paged' ) ) : 1;
$offset = $per_page * ($current_page - 1);

// Config, subsitute / add whatever you need. Leave per_page and offset as the vars.
$sweet_args = [
  'numberposts' => $per_page,
  'post_type' => 'post',
  'offset' => $offset
];

// Args for total post should be the same except we want no offset and numberposts to be -1 so we get all of them. You could define some more variables to make this a litle more seamless. Hard to say without seeing your code.
$total_args = [
  'numberposts' => -1,
  'post_type' => 'post',
];

// Neet total articles for pagination
$total_posts = ceil(count( get_posts( $total_args ) ));

// Results to loop through
$results = get_post_awesome( $sweet_args );

// Loop it out
foreach ( $results as $post ): setup_postdata( $post );

// post stuff

endforeach;
// Dont foreget this
wp_reset_postdata( $post );

// Pagination logic
// This could be moved above to loop if you feel like it.
$big = 999999999; // Need an unlikely integer


if ( $current_page < 5 )
  $mid = 4;
else
  $mid = 2;

$pagination = paginate_links( array(
    'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, $current_page ),
    'total' => ceil( $total_posts / $per_page),
    'type'=> 'array',
    'end_size'=> 0,
    'mid_size'=> $mid,
    'prev_text' => __('Prev'),
    'next_text' => __('Next'),
) );

// Echo the pagination links
echo implode( ' ', $pagination );
?>