I solved it at checkout using a plugin and modifying the country list in $jsLayout. In my case I only use US and Canada, so:
=> In Vendor/Module/etc/di.xml you add the next
<type name="Magento\Checkout\Block\Checkout\LayoutProcessor">
<plugin name="afterProcess" type="Vendor\Module\Block\LayoutProcessor"/>
</type>
=> And in Vendor/Module/Block/LayoutProcessor.php:
public function afterProcess(
\Magento\Checkout\Block\Checkout\LayoutProcessor $subject,
array $jsLayout
)
{
$jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']
['shippingAddress']['children']['shipping-address-fieldset']['children']['country_id']['options'] =
array(
array(
'value' => '',
'label' => ' ',
),
array (
'value' => 'CA',
'label' => 'Canada',
'is_region_required' => true,
),
array(
'value' => 'US',
'label' => 'United States',
'is_region_required' => true,
)
);
return $jsLayout;
}