I am one of the maintainers of Web3modal. It is a project that allows you easily to connect any wallet with your web3.js project.
There are five categories of Ethereum wallets that can interact with dApps
- Browser built-in (Opera, Brave, …)
- Browser extension (MetaMask, …)
- Mobile wallets (Trust, Walleth, Pillar, …)
- Account-based web wallets (Fortmatic, 3box, …)
- Hardware wallets (Ledger, Trezor, …)
Different wallets have a different user experience to connect. For example, with MetaMask you get a Connect pop up. With mobile wallets, you scan a QR code.
See the repo