refactor: replaced hard-coded api keys and urls, declared in the '.env' file. added homepage background

This commit is contained in:
2026-05-25 03:03:29 -07:00
parent ceace85ef5
commit 8554d076e5
17 changed files with 193 additions and 107 deletions
+95 -57
View File
@@ -9,7 +9,9 @@ services:
environment:
- VPN_SERVICE_PROVIDER=protonvpn # Or mullvad, protonvpn, surfshark, etc.
- VPN_TYPE=wireguard # WireGuard, openvpn
- WIREGUARD_PRIVATE_KEY=${PROTONVPN_API_KEY}
- HTTP_CONTROL_SERVER=ON
- HTTP_CONTROL_SERVER_AUTH_DEFAULT_ROLE='{"auth":"apikey","apikey":"${GLUETUN_KEY}"}' # generate by running `docker run --rm qmcgaw/gluetun genkey`, then adding this to your `.env` file
- WIREGUARD_PRIVATE_KEY=${VPN_PRIVATE_KEY}
- WIREGUARD_MTU=1280
- VPN_PORT_FORWARDING=on
- VPN_PORT_FORWARDING_PROVIDER=protonvpn
@@ -18,18 +20,18 @@ services:
- SERVER_COUNTRIES=Netherlands # choose fast P2P friendly countries
- NETWORK_LOCAL_ADDRESSES=192.168.50.0/24,172.16.0.0/12
- FIREWALL_OUTBOUND_SUBNETS=192.168.50.0/24
- TZ=America/Los_Angeles
- DNS_UPSTREAM_RESOLVER_TYPE=doh # DNS over TLS is an extra layer of security so your isp can not look at what you're doing through your DNS requests, even if your using a vpn (very vague, I don't know how this syustem works with a vpn). Since we aren't making any weird DNS requests... we are: prowlarr
- TZ=${TIMEZONE}
- DNS_UPSTREAM_RESOLVER_TYPE=doh # DNS over TLS is an extra layer of security so your isp can not look at what you're doing through your DNS requests, even if your using a vpn (very vague, I don't know how this syustem works with a vpn).
ports: # YOU MUST SPECIFY A PORT PER SERVICE ROUTED THROUGH GLUETUN!
- 8888:8888/tcp
- 2161:2161 # qBittorrent Web UI
- 9696:9696 # Prowlarr
- 8989:8989 # Sonarr
- 7878:7878 # Radarr
- 8686:8686 # Lidarr
#- 5055:5055/tcp # Seerr # took this out of gluetun, as it could cause issues with starting the container, and it was unecessary
- 6881:6881 # Torrent port # to be honest, I forgot what this was I dont even have this listed in the universal firewall (ufw)
- 6881:6881/udp
- 8888:8000/tcp # gluetun control server, i dont think you should change this
- 6881:6881 # Default port for qbit
- 6881:6881/udp # Default port for qbit, if udp > tcp
- ${QBITTORRENT_PORT}:${QBITTORRENT_PORT} # qBittorrent Web UI
- ${PROWLARR_PORT}:${PROWLARR_PORT} # Prowlarr
- ${SONARR_PORT}:${SONARR_PORT} # Sonarr
- ${RADARR_PORT}:${RADARR_PORT} # Radarr
- ${LIDARR_PORT}:${LIDARR_PORT} # Lidarr
#- ${SEERR_PORT}:${SEERR_PORT}/tcp # Seerr # took this out of gluetun, as it could cause issues with starting the container, and it was unecessary
healthcheck:
test: wget --spider -q http://1.1.1.1 || exit 1 # ACTUALLY DUMB FUCK! gluetun itself DOES NOT NEED DNS! # the comment afterwards is stupid, if gluetun can't resolve some DNS name, then the other services can't either, they need to be able to look up databases # dont use google.com, since that requires DNS. if it fails to resolve, the container is forced to restart. This is bad, since we mostly don't need dns for things such as qbittorrent, or prowlarr itself
interval: 30s
@@ -49,18 +51,15 @@ services:
environment:
- PUID=1000
- PGID=1000
- TZ=America/Los_Angeles
- WEBUI_PORT=2161
- TZ=${TIMEZONE}
- WEBUI_PORT=${QBITTORRENT_PORT}
volumes:
- ./qbittorrent:/config
- /mnt/media/downloads:/downloads
- /mnt/media/downloads:/media/downloads
- ${DISK1}:${DISK1}/downloads
- ${DISK2}:${DISK2}/downloads
- ./gluetun-data:/tmp/gluetun
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /mnt/11tb_ext/downloads:/11tb_ext/downloads
- ./lidarr:/music:ro
- ./lidarr/downloads:/music/downloads:rw
labels:
- "autoheal=true"
depends_on:
@@ -130,7 +129,7 @@ services:
environment:
- PUID=1000
- PGID=1000
- TZ=America/Los_Angeles
- TZ=${TIMEZONE}
volumes:
- ./prowlarr:/config
- ./notify.sh:/notify.sh:ro
@@ -156,11 +155,11 @@ services:
environment:
- PUID=1000
- PGID=1000
- TZ=America/Los_Angeles
- TZ=${TIMEZONE}
volumes:
- /var/lib/sonarr:/config
- /mnt/media:/media
- /mnt/11tb_ext:/11tb_ext
- /var/lib/sonarr:/config # had migrated into docker compose
- ${DISK1}:/media # too dangerous to change this
- ${DISK2}:/11tb_ext # too dangerous to change this
labels:
- "autoheal=true"
network_mode: "container:gluetun"
@@ -181,11 +180,11 @@ services:
environment:
- PUID=1000
- PGID=1000
- TZ=America/Los_Angeles
- TZ=${TIMEZONE}
volumes:
- /var/lib/radarr:/config
- /mnt/media:/media
- /mnt/11tb_ext:/11tb_ext
- /var/lib/radarr:/config # had migrated into docker compose
- ${DISK1}:/media # too dangerous to change this
- ${DISK2}:/11tb_ext # too dangerous to change this
labels:
- "autoheal=true"
network_mode: "container:gluetun"
@@ -206,7 +205,7 @@ services:
environment:
- PUID=1000
- PGID=1000
- TZ=America/Los_Angeles
- TZ=${TIMEZONE}
volumes:
- /home/shaan/torrent-stack/lidarr:/music
- /var/lib/lidarr:/config
@@ -235,9 +234,9 @@ services:
environment:
- PUID=1000
- PGID=1000
- TZ=America/Los_Angeles
- TZ=${TIMEZONE}
ports:
- 8181:8181
- ${TAUTULLI_PORT}:${TAUTULLI_PORT}
restart: always
tdarr:
@@ -246,10 +245,10 @@ services:
networks:
- tdarr-net
ports:
- 8265:8265 # WebUI
- 8266:8266 # local tdarr-node
- ${TDARR_PORT}:${TDARR_PORT} # WebUI
- ${TDARR_NODE_PORT}:${TDARR_NODE_PORT} # local tdarr-node
environment:
- TZ=America/Los_Angeles
- TZ=${TIMEZONE}
- PUID=1000
- PGID=1000
- UMASK_SET=002
@@ -258,9 +257,9 @@ services:
- ./tdarr/server:/app/server
- ./tdarr/configs:/app/configs
- ./tdarr/temp:/temp
- /mnt/media:/media
# dont ever do this again > - /mnt/media/tdarr-temp:/temp
- /mnt/11tb_ext:/11tb_ext
- ${DISK1}:${DISK1}
- ${DISK2}:${DISK2}
# dont put temp files onto a HARD DISK DRIVE! > - ${DISK1}/tdarr-temp:/temp
devices:
- /dev/dri:/dev/dri # Intel UHD Graphics 710
restart: always
@@ -271,19 +270,19 @@ services:
networks:
- tdarr-net
environment:
- TZ=America/Los_Angeles
- TZ=${TIMEZONE}
- PUID=1000
- PGID=1000
- nodeID=ShaanNode
- nodeID=${TDARR_NODE_ID}
- nodeIP=0.0.0.0
- serverIP=tdarr # Points to the server container
- serverPort=8266
- serverPort=${TDARR_NODE_PORT}
volumes:
- ./tdarr/configs:/app/configs
- ./tdarr/logs:/app/logs
- /home/shaan/torrent-stack/tdarr/temp:/temp
- /mnt/media:/media
- /mnt/11tb_ext:/11tb_ext
- ${DISK1}:${DISK1}
- ${DISK2}:${DISK2}
devices:
- /dev/dri:/dev/dri # only works if user 'shaan' is a part of the 'video' or 'render' group.
restart: always
@@ -292,20 +291,56 @@ services:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
ports:
- 3000:3000
- ${HOMEPAGE_PORT}:${HOMEPAGE_PORT}
volumes:
#- /home/shaan/homepage/config:/app/config
#- /home/shaan/homepage/config/images:/app/public/images - # Map images to the public folder
- ./homepage:/app/config
- ./homepage/images:/app/public/images
- /var/run/docker.sock:/var/run/docker.sock:ro # (optional) For docker integrations
- ./gluetun-data:/tmp/gluetun:ro # get the port from port-updater
- /:/root:ro
- /mnt/media:/mnt/media:ro
- /mnt/shaimpy:/mnt/shaimpy:ro
- /mnt/11tb_ext:/mnt/11tb_ext:ro
environment:
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev,192.168.50.2:3000,shaan-server:3000,100.76.249.110:3000,ss:3000,shaan-server.tail:3000 # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
- "HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,192.168.50.2:3000,shaan-server:3000,100.76.249.110:3000,ss:3000,shaan-server.tail:${HOMEPAGE_PORT}" # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
- "HOMEPAGE_VAR_DISK1=${DISK1}"
- "HOMEPAGE_VAR_DISK2=${DISK2}"
- "HOMEPAGE_VAR_DISK3=${DISK3}"
- "HOMEPAGE_VAR_WEB_PROTOCOL=${WEB_PROTOCOL}"
- "HOMEPAGE_VAR_LOCAL_IPV4=${LOCAL_IPV4}"
- "HOMEPAGE_VAR_SERVER_NAME=${SERVER_NAME}"
- "HOMEPAGE_VAR_PLEX_KEY=${PLEX_KEY}"
- "HOMEPAGE_VAR_PROWLARR_KEY=${PROWLARR_KEY}"
- "HOMEPAGE_VAR_RADARR_KEY=${RADARR_KEY}"
- "HOMEPAGE_VAR_SONARR_KEY=${SONARR_KEY}"
- "HOMEPAGE_VAR_LIDARR_KEY=${LIDARR_KEY}"
- "HOMEPAGE_VAR_TAUTULLI_KEY=${TAUTULLI_KEY}"
- "HOMEPAGE_VAR_SEERR_KEY=${SEERR_KEY}"
- "HOMEPAGE_VAR_QBITTORRENT_KEY=${QBITTORRENT_KEY}"
- "HOMEPAGE_VAR_TAILSCALE_KEY=${TAILSCALE_KEY}"
- "HOMEPAGE_VAR_TAILSCALE_DEVICE_KEY=${TAILSCALE_DEVICE_KEY}"
- "HOMEPAGE_VAR_PLEX_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${PLEX_PORT}"
- "HOMEPAGE_VAR_QBITTORRENT_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${QBITTORRENT_PORT}"
- "HOMEPAGE_VAR_PROWLARR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${PROWLARR_PORT}"
- "HOMEPAGE_VAR_SONARR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${SONARR_PORT}"
- "HOMEPAGE_VAR_RADARR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${RADARR_PORT}"
- "HOMEPAGE_VAR_LIDARR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${LIDARR_PORT}"
- "HOMEPAGE_VAR_TAUTULLI_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${TAUTULLI_PORT}"
- "HOMEPAGE_VAR_TDARR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${TDARR_PORT}"
- "HOMEPAGE_VAR_HOMEPAGE_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${HOMEPAGE_PORT}"
- "HOMEPAGE_VAR_GLANCES_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${GLANCES_PORT}"
- "HOMEPAGE_VAR_SEERR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${SEERR_PORT}"
- "HOMEPAGE_VAR_MYSPEED_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${MYSPEED_PORT}"
- "HOMEPAGE_VAR_TERMIX_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${TERMIX_PORT}"
- "HOMEPAGE_VAR_PLEX_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${PLEX_PORT}"
- "HOMEPAGE_VAR_QBITTORRENT_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${QBITTORRENT_PORT}"
- "HOMEPAGE_VAR_PROWLARR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${PROWLARR_PORT}"
- "HOMEPAGE_VAR_SONARR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${SONARR_PORT}"
- "HOMEPAGE_VAR_RADARR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${RADARR_PORT}"
- "HOMEPAGE_VAR_LIDARR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${LIDARR_PORT}"
- "HOMEPAGE_VAR_TAUTULLI_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${TAUTULLI_PORT}"
- "HOMEPAGE_VAR_TDARR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${TDARR_PORT}"
- "HOMEPAGE_VAR_HOMEPAGE_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${HOMEPAGE_PORT}"
- "HOMEPAGE_VAR_GLANCES_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${GLANCES_PORT}"
- "HOMEPAGE_VAR_SEERR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${SEERR_PORT}"
- "HOMEPAGE_VAR_MYSPEED_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${MYSPEED_PORT}"
- "HOMEPAGE_VAR_TERMIX_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${TERMIX_PORT}"
extra_hosts:
- "host.docker.internal:host-gateway"
restart: always
@@ -313,11 +348,14 @@ services:
glances:
image: nicolargo/glances:latest-full
container_name: glances
pid: host
network_mode: host
devices:
- /dev/dri:/dev/dri
volumes:
- /:/root:ro
- /var/run/docker.sock:/var/run/docker.sock
- /etc/os-release:/etc/os-release:ro
- /:/host:ro
environment:
- GLANCES_OPT=-w
- PUID=1000
@@ -339,14 +377,14 @@ services:
image: ghcr.io/seerr-team/seerr:latest
init: true
container_name: seerr
ports:
- ${SEERR_PORT}:${SEERR_PORT}
environment:
- LOG_LEVEL=debug
- TZ=America/Los_Angeles
- TZ=${TIMEZONE}
- PUID=1000
- PGID=1000
- PORT=5055 #optional
volumes:
- "/home/shaan/seerr-config:/app/config"
- "./seerr:/app/config"
working_dir: "/app"
labels:
@@ -381,7 +419,7 @@ services:
mac_address: "02:42:ac:11:00:03"
network_mode: "bridge"
ports:
- "5216:5216/tcp"
- "${MYSPEED_PORT}:${MYSPEED_PORT}/tcp"
volumes:
- "myspeed:/myspeed/data"
working_dir: "/myspeed"
@@ -394,11 +432,11 @@ services:
- NET_ADMIN
- SYS_ADMIN
ports:
- "8080:8080"
- "${TERMIX_PORT}:${TERMIX_PORT}"
volumes:
- termix-data:/app/data
environment:
PORT: "8080"
PORT: "${TERMIX_PORT}"
networks:
- termix-net
restart: unless-stopped
-15
View File
@@ -1,18 +1,3 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/configs/bookmarks
- Developer:
- Github:
- abbr: GH
href: https://github.com/
- Social:
- Reddit:
- abbr: RE
href: https://reddit.com/
- Entertainment:
- YouTube:
- abbr: YT
href: https://youtube.com/

Before

Width:  |  Height:  |  Size: 3.0 MiB

After

Width:  |  Height:  |  Size: 3.0 MiB

Before

Width:  |  Height:  |  Size: 253 KiB

After

Width:  |  Height:  |  Size: 253 KiB

View File

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

Before

Width:  |  Height:  |  Size: 450 KiB

After

Width:  |  Height:  |  Size: 450 KiB

View File

Before

Width:  |  Height:  |  Size: 692 KiB

After

Width:  |  Height:  |  Size: 692 KiB

View File

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 210 KiB

View File

Before

Width:  |  Height:  |  Size: 972 KiB

After

Width:  |  Height:  |  Size: 972 KiB

View File

Before

Width:  |  Height:  |  Size: 337 KiB

After

Width:  |  Height:  |  Size: 337 KiB

View File

Before

Width:  |  Height:  |  Size: 716 KiB

After

Width:  |  Height:  |  Size: 716 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

Before

Width:  |  Height:  |  Size: 409 KiB

After

Width:  |  Height:  |  Size: 409 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

+45 -14
View File
@@ -17,6 +17,9 @@
description: Mesh VPN Network
widget:
type: tailscale
deviceid: "{{HOMEPAGE_VAR_TAILSCALE_DEVICE_KEY}}"
key: "{{HOMEPAGE_VAR_TAILSCALE_KEY}}"
fields: [address]
- "Speedtest Results >":
icon: si-speedtest
href: http://localhost
@@ -24,6 +27,7 @@
widget:
type: myspeed
url: http://192.168.50.2:5216
fields: [download, upload]
# Non-Torrent-Stack Group
- "non-torrent-stack":
@@ -48,40 +52,66 @@
- "Media":
- "Tautulli >":
icon: si-tautulli
href: http://localhost:8181
href: "{{HOMEPAGE_VAR_TAUTULLI_HOST}}"
description: Plex Monitoring and Statistics
widget:
type: tautulli
url: "{{HOMEPAGE_VAR_TAUTULLI_ADDRESS}}"
key: "{{HOMEPAGE_VAR_TAUTULLI_KEY}}"
- "Plex >":
icon: si-plex
href: http://localhost:32400
href: "{{HOMEPAGE_VAR_PLEX_HOST}}"
description: Media Server
widget:
type: plex
url: "{{HOMEPAGE_VAR_PLEX_ADDRESS}}"
key: "{{HOMEPAGE_VAR_PLEX_KEY}}"
- "Media_2x2":
- "Seerr >":
icon: si-overseerr
href: http://localhost:5055
href: "{{HOMEPAGE_VAR_SEERR_HOST}}"
description: Media Request Management
widget:
type: seerr
url: "{{HOMEPAGE_VAR_SEERR_ADDRESS}}"
key: "{{HOMEPAGE_VAR_SEERR_KEY}}"
fields: [pending, completed]
- "Sonarr >":
icon: si-sonarr
href: http://localhost:8989
href: "{{HOMEPAGE_VAR_SONARR_HOST}}"
description: TV Show Torrent Grabber
widget:
type: sonarr
url: http://{{LOCAL_IPV4}}
key: { { HOMEAGE_VARS_SONARR_API_KEY } }
url: "{{HOMEPAGE_VAR_SONARR_ADDRESS}}"
key: "{{HOMEPAGE_VAR_SONARR_KEY}}"
enableQueue: true # optional, defaults to false
fields: [wanted, queued]
- "Radarr >":
icon: si-radarr
href: "{{HOMEPAGE_VAR_RADARR_HOST}}"
description: Movie Torrent Grabber
widget:
type: radarr
url: "{{HOMEPAGE_VAR_RADARR_ADDRESS}}"
key: "{{HOMEPAGE_VAR_RADARR_KEY}}"
fields: [wanted, queued]
- "Lidarr >":
icon: si-lidarr
href: http://localhost:8686
href: "{{HOMEPAGE_VAR_LIDARR_HOST}}"
description: Music Torrent Grabber
widget:
type: lidarr
url: "{{HOMEPAGE_VAR_LIDARR_ADDRESS}}"
key: "{{HOMEPAGE_VAR_LIDARR_KEY}}"
fields: [wanted, queued]
- "Tdarr >":
icon: si-tdarr
href: "{{HOMEPAGE_VAR_TDARR_HOST}}"
description: Distributed Media Transcoding
widget:
type: tdarr
url:
url: "{{HOMEPAGE_VAR_TDARR_ADDRESS}}"
key: "{{HOMEPAGE_VAR_TDARR_KEY}}"
- Tdarr Node:
icon: si-tdarr
href: http://localhost
@@ -90,12 +120,18 @@
icon: si-minecraft
href: http://localhost
description: Game Server Instance
widget:
type: minecraft
url: http://localhost:25565
- Network:
- "Gluetun":
icon: si-gluetun
href: http://localhost
description: VPN Client Container
widget:
type: gluetun
url: ${HOMEPAGE_VAR_WEB_PROTOCOL}://${HOMEPAGE_VAR_LOCAL_IPV4}:8000
- "Port Updater":
icon: si-docker
@@ -114,7 +150,7 @@
- "qBittorrent2 >":
icon: si-qbittorrent
href: http://localhost
href: ""
description:
- "qBittorrent3 >":
@@ -126,8 +162,3 @@
icon: si-qbittorrent
href: http://localhost
description:
- "qBittorrent4 >":
icon: si-qbittorrent
href: http://localhost
description:
+37 -5
View File
@@ -2,11 +2,43 @@
# For configuration options and examples, please see:
# https://gethomepage.dev/configs/info-widgets/
- resources:
cpu: true
memory: true
disk: /
- greeting:
text_size: 3xl
text: shaan-server
- datetime:
text_size: xl
format:
timeStyle: long
dateStyle: short
hour12: true
- openmeteo:
#label: Sacramento, CA
latitude: 38.58
longitude: -121.49
units: imperial # Uses Fahrenheit and mph for Roseville
- glances:
url: http://host.docker.internal:61208
username: user # optional if auth enabled in Glances
password: pass # optional if auth enabled in Glances
version: 4 # required only if running glances v4 or higher, defaults to 3
cpu: true # optional, enabled by default, disable by setting to false
cputemp: false # disabled by default
mem: true # optional, enabled by default, disable by setting to false
cpuSensorLabel: Package id # optional additional cputemp sensor label prefix
unit: imperial # optional for temp, default is metric
uptime: true # disabled by default
disk: # disabled by default, use mount point of disk(s) in glances. Can also be a list (see below)
- /
- /host/mnt/media
- /host/mnt/11tb_ext
- /host/mnt/shaimpy
diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk
expanded: true # show the expanded view
#label: MyMachine # optional
- search:
provider: duckduckgo
provider: google
target: _blank