site_name: Funky Penguin's Geek Cookbook
site_description: 'The Geek Cookbook is a collection of guides for establishing your own highly-available docker container cluster (swarm). This swarm enables you to run self-hosted services such as GitLab, Plex, NextCloud, etc.'
site_author: 'David Young'
site_url: 'https://geek-cookbook.funkypenguin.co.nz'
edit_uri: 'edit/main/docs/'

# Fail to build if we have broken links
# strict: true

# Repository
repo_name: 'geek-cookbook'
repo_url: 'https://github.com/geek-cookbook/geek-cookbook'

# Copyright
copyright: 'Copyright &copy; 2016 - 2023 David Young, Funky Penguin Limited'

# Plugins
plugins:
  search:
  minify:
    minify_html: true
  autolinks:
  git-revision-date-localized:
    type: date
    fallback_to_build_date: true  
  macros:
    verbose: true
    include_dir: _includes
  meta-descriptions: # If not provided, auto-generate a description (https://pypi.org/project/mkdocs-meta-descriptions-plugin/)
  meta:
  blog:
    # post_excerpt: required
    post_url_format: "{date}/{file}" # this allows us to change the post title in future without breaking URLs
  tags:
    tags_file: blog/tags.md
  rss:
    match_path: blog/posts/.*
    date_from_meta:
      as_creation: date
    categories:
      - categories
      - tags
    abstract_chars_count: 200
    image: https://geek-cookbook.funkypenguin.co.nz/images/site-logo.png
    url_parameters:
      utm_source: "geek-cookbook-blog"
      utm_medium: "RSS"
      utm_campaign: "feed-syndication"          
  social:
    # debug: true
    # debug_color: yellow
    cards_layout: geek-cookbook

#theme_dir: mkdocs-material
nav:
    - Home: index.md
    - 🐳 Docker Swarm:
      - docker-swarm/index.md
      - Preparation:
        - Design: docker-swarm/design.md
        - Nodes: docker-swarm/nodes.md
        - Shared Storage (Ceph): docker-swarm/shared-storage-ceph.md
        - Shared Storage (GlusterFS): docker-swarm/shared-storage-gluster.md
        - Keepalived: docker-swarm/keepalived.md
        - Docker Swarm Mode: docker-swarm/docker-swarm-mode.md
      - Essentials:
        - Traefik: docker-swarm/traefik.md
        - Traefik Forward Auth:
            - docker-swarm/traefik-forward-auth/index.md
            - Dex (static): docker-swarm/traefik-forward-auth/dex-static.md
            - Google: docker-swarm/traefik-forward-auth/google.md
            - Keycloak: docker-swarm/traefik-forward-auth/keycloak.md
        - Authelia: docker-swarm/authelia.md
        - Registry: docker-swarm/registry.md
        - Mail Server: recipes/mail.md
        - Duplicity: recipes/duplicity.md
      - Recipes:
        - Auto Pirate:
          - recipes/autopirate/index.md
          - Headphones: recipes/autopirate/headphones.md
          - Heimdall: recipes/autopirate/heimdall.md
          - Jackett: recipes/autopirate/jackett.md
          - Lazy Librarian: recipes/autopirate/lazylibrarian.md
          - Lidarr: recipes/autopirate/lidarr.md
          - Mylar: recipes/autopirate/mylar.md
          - NZBGet: recipes/autopirate/nzbget.md
          - NZBHydra: recipes/autopirate/nzbhydra.md
          - Prowlarr: recipes/autopirate/prowlarr.md
          - Ombi: recipes/autopirate/ombi.md
          - Radarr: recipes/autopirate/radarr.md
          - Readarr: recipes/autopirate/readarr.md
          - Rtorrent: recipes/autopirate/rtorrent.md
          - SABnzbd: recipes/autopirate/sabnzbd.md
          - Sonarr: recipes/autopirate/sonarr.md
          - End: recipes/autopirate/end.md
        - Archive Box: recipes/archivebox.md
        - Audiobookshelf: recipes/audiobookshelf.md
        - Bitwarden: recipes/bitwarden.md
        - Bookstack: recipes/bookstack.md
        - Calibre-Web: recipes/calibre-web.md
        - Collabora Online: recipes/collabora-online.md
        - CyberChef: recipes/cyberchef.md
        - Duplicati: recipes/duplicati.md
        - ElkarBackup: recipes/elkarbackup.md
        - Emby: recipes/emby.md
        - Home Assistant: recipes/homeassistant.md
        - Huginn: recipes/huginn.md
        - Funkwhale: recipes/funkwhale.md
        - Ghost: recipes/ghost.md
        - GitLab: recipes/gitlab.md
        - GitLab Runner: recipes/gitlab-runner.md
        - Gollum: recipes/gollum.md
        - Immich: recipes/immich.md
        - InstaPy: recipes/instapy.md
        - Invidious: recipes/invidious.md
        - Jellyfin: recipes/jellyfin.md
        - Joplin Server: recipes/joplin-server.md
        - Kanboard: recipes/kanboard.md
        - Kavita: recipes/kavita.md
        - Keycloak:
          - recipes/keycloak/index.md
          - OIDC Provider: recipes/keycloak/setup-oidc-provider.md
          - OpenLDAP: recipes/keycloak/authenticate-against-openldap.md
        - Komga: recipes/komga.md
        - Linx: recipes/linx.md
        - Mastodon: recipes/mastodon.md
        - Mealie: recipes/mealie.md
        - Miniflux: recipes/miniflux.md
        - Minio: recipes/minio.md
        - Munin: recipes/munin.md
        - NextCloud: recipes/nextcloud.md
        - NightScout: recipes/nightscout.md
        - Nitter: recipes/nitter.md        
        - Nomie: recipes/nomie.md
        - OpenLDAP: recipes/openldap.md
        - OwnTracks: recipes/owntracks.md
        - Paperless NG: recipes/paperless-ng.md
        - Photoprism: recipes/photoprism.md
        - Pixelfed: recipes/pixelfed.md
        - Plex: recipes/plex.md
        - phpIPAM: recipes/phpipam.md
        - Portainer: recipes/portainer.md
        - PrivateBin: recipes/privatebin.md
        - Realms: recipes/realms.md
        - Restic: recipes/restic.md
        - RSS Bridge: recipes/rss-bridge.md
        - SearXNG: recipes/searxng.md
        - Swarmprom: recipes/swarmprom.md
        - Tiny Tiny RSS: recipes/tiny-tiny-rss.md
        - Traefik: docker-swarm/traefik.md
        - Traefik Forward Auth:
            - docker-swarm/traefik-forward-auth/index.md
            - Dex (static): docker-swarm/traefik-forward-auth/dex-static.md
            - Google: docker-swarm/traefik-forward-auth/google.md
            - Keycloak: docker-swarm/traefik-forward-auth/keycloak.md
        - Wallabag: recipes/wallabag.md
        - Wekan: recipes/wekan.md
        - Wetty: recipes/wetty.md
      - Reference:
        - OAuth Proxy: reference/oauth_proxy.md
        - Data Layout: reference/data_layout.md
        - Networks: reference/networks.md
        - OpenVPN : reference/openvpn.md
        - Troubleshooting: reference/troubleshooting.md
    - ⛴ Kubernetes:
      - Preparation:
        - kubernetes/index.md
        - Introduction: kubernetes/index.md
        - Cluster:
          - kubernetes/cluster/index.md
          - Digital Ocean: kubernetes/cluster/digitalocean.md
      #     - Bare Metal: kubernetes/cluster/baremetal.md
          - EKS: kubernetes/cluster/eks.md
          - k3s: kubernetes/cluster/k3s.md
      #     - The Hard Way: kubernetes/cluster/the-hard-way.md
        - Deployment:
          - kubernetes/deployment/index.md
      #     - YAML: kubernetes/wip.md
      #     - Helm: kubernetes/wip.md
      #     - GitHub Actions: kubernetes/wip.md
          - Flux:
            - kubernetes/deployment/flux/index.md
            - Install: kubernetes/deployment/flux/install.md
            - Design: kubernetes/deployment/flux/design.md
            - Operate: kubernetes/deployment/flux/operate.md
        - Essentials:
          - Load Balancer:
            - kubernetes/loadbalancer/index.md
            - k3s: kubernetes/loadbalancer/k3s.md
            - MetalLB:
              - kubernetes/loadbalancer/metallb/index.md
              - pfSense: kubernetes/loadbalancer/metallb/pfsense.md
          - Sealed Secrets: kubernetes/sealed-secrets.md
          - External DNS: kubernetes/external-dns.md
          - SSL Certificates:
            - kubernetes/ssl-certificates/index.md
            - Cert-Manager: kubernetes/ssl-certificates/cert-manager.md
            - LetsEncrypt Issuers: kubernetes/ssl-certificates/letsencrypt-issuers.md
            - Wildcard Certificate: kubernetes/ssl-certificates/wildcard-certificate.md
            - Secret Replicator: kubernetes/ssl-certificates/secret-replicator.md
          - Ingress:
            - kubernetes/ingress/index.md
            - Traefik:
              - kubernetes/ingress/traefik/index.md
              # - Dashboard: kubernetes/ingress/traefik/dashboard.md
            - Nginx: kubernetes/ingress/nginx.md
          - Persistence:
            - NFS-Subdirectory-Provider: kubernetes/persistence/nfs-subdirectory-provider.md
            - kubernetes/persistence/index.md
            - Local Path Provisioner: kubernetes/persistence/local-path-provisioner.md
            - TopoLVM: kubernetes/persistence/topolvm.md
            - AWS EBS: kubernetes/persistence/aws-ebs.md
            # - OpenEBS: kubernetes/persistence/openebs.md
            - Rook Ceph:
              - kubernetes/persistence/rook-ceph/index.md
              - Operator: kubernetes/persistence/rook-ceph/operator.md
              - Cluster: kubernetes/persistence/rook-ceph/cluster.md
            # - LongHorn: kubernetes/persistence/longhorn.md
          - OIDC Authentication:
              - Guide: kubernetes/oidc-authentication/index.md
              - Providers:
                - authentik: kubernetes/oidc-authentication/authentik.md
                - Keycloak: kubernetes/oidc-authentication/keycloak.md
              - Platforms:
                - EKS (authentik): kubernetes/oidc-authentication/eks-authentik.md
                - EKS (Keycloak): kubernetes/oidc-authentication/eks-keycloak.md
                - K3s (authentik): kubernetes/oidc-authentication/k3s-authentik.md
                - K3s (Keycloak): kubernetes/oidc-authentication/k3s-keycloak.md
          - Backup:
            - kubernetes/backup/index.md
            - CSI Snapshots:
              - kubernetes/backup/csi-snapshots/index.md
              - Snapshot Validation Webhook: kubernetes/backup/csi-snapshots/snapshot-validation-webhook.md
              - Snapshot Controller: kubernetes/backup/csi-snapshots/snapshot-controller.md            
            - Velero: kubernetes/backup/velero.md

      #   - Logging:
      #     - fluent-bit, graylog, etc.


      #   - Monitoring:
      #     - kubernetes/monitoring/index.md
      #     - Prometheus: kubernetes/wip.md
      #     - Grafana: kubernetes/wip.md
      #     - AlertManager: kubernetes/wip.md
      #     - Goldilocks: kubernetes/wip.md
      #   - Reloader: kubernetes/wip.md
      #   - Dashboard: kubernetes/wip.md
      #   - Kured: kubernetes/wip.md
      #   - Keycloak: kubernetes/wip.md
      - Recipes:
      #   - Harbor:
      #     - recipes/kubernetes/harbor/index.md
      #     Istio: recipes/kubernetes/harbor/istio.md
        # - GitHub Actions Runners: kubernetes/wip.md
      #   - Cilium: kubernetes/wip.md
      #   - Concourse: kubernetes/wip.md
      #   - Flagger: kubernetes/wip.md
      #   - Flagger: kubernetes/wip.md
      #   - Flux: recipes/kubernetes/wip.md
      #   - FoundationDB: kubernetes/wip.md
      #   - Istio: recipes/kubernetes/wip.md
      #   - Jaeger: kubernetes/wip.md
      #   - Kiali: kubernetes/wip.md
        - Authentik: recipes/kubernetes/authentik.md
        - Dashboard: recipes/kubernetes/dashboard.md
        # - Descheduler: recipes/kubernetes/descheduler.md
        - Invidious: recipes/kubernetes/invidious.md
        - Keycloak: recipes/kubernetes/keycloak.md
        - OAuth2 Proxy: recipes/kubernetes/oauth2-proxy.md
        - Mastodon: recipes/kubernetes/mastodon.md
        - Polaris: recipes/kubernetes/polaris.md
        # - Matrix: recipes/kubernetes/matrix.md
      #   - NGINX Ingress: kubernetes/wip.md
      #   - Polaris: kubernetes/wip.md
      #   - Portainer: kubernetes/wip.md
      #   - Prometheus: kubernetes/wip.md
      #   - Traefik: kubernetes/wip.md
      #   - Vault: kubernetes/wip.md
      #   - Webook Receiver: kubernetes/wip.md
    # - 🧝 Elf Hosted:
    #   - elfhosted/index.md
    #   - Build Story:
    #     - elfhosted/build/index.md
    #     - A bastion of hope: elfhosted/build/bastion.md
    - 🪄 ElfHosted:
      - elfhosted/index.md    
    - 🚀 Get Premix!:
      - premix/index.md
      - Get Started:
        - Setup: premix/ansible/operation.md
        - Deploy!:
          - Swarm: premix/swarm.md
          - Kubernetes: premix/kubernetes.md
      - Contribute:
        - Ansiblizing:
          - premix/ansiblizing/index.md
          - Swarm: premix/ansiblizing/swarm.md
          - Kubernetes: premix/ansiblizing/kubernetes.md
      - Reference:
        - Design: premix/ansible/design.md
    - ✅ Reviews:
      - blog/category/review.md
    - 🪵 Blog:
      - Blog: blog/index.md
      - Tags: blog/tags.md
    - Support: support.md
    - Contribute: community/contribute.md
    - Community:
      - community/index.md
      - Support: support.md
      - Contribute: community/contribute.md
      - Code of Conduct: community/code-of-conduct.md
      - Discord: community/discord.md
      - Matrix: community/matrix.md
      - Reddit: community/reddit.md
      - Mastodon: community/mastodon.md
      - Forum: community/discourse.md
      - GitHub: community/github.md

theme:
  name: 'material'
  custom_dir: 'overrides'
  # disqus: 'geeks-cookbook'
  logo: 'images/site-logo.svg'
  favicon: 'images/site-logo.svg'
  features:
      - navigation.tabs
      - navigation.tabs.sticky
      - navigation.instant
      - navigation.sections
      - navigation.indexes
      - navigation.top
      - navigation.pruning
      - navigation.path
      - search.suggest
      - search.share
      - content.code.annotate
      - content.code.copy
      - header.autohide
      - announce.dismiss
      - toc.follow
  icon:
    repo: 'fontawesome/brands/github'
    tag:
      kubernetes: material/kubernetes
      js: fontawesome/brands/js
  palette:

    # Palette toggle for automatic mode
    - media: "(prefers-color-scheme)"
      scheme: default
      toggle:
        icon: material/brightness-auto
        name: Follow system preferences

    # Toggle light mode
    - media: "(prefers-color-scheme: light)"
      scheme: default
      primary: 'black'
      accent: 'orange'
      toggle:
        icon: material/brightness-7
        name: Burn my eyes!

    # Toggle dark mode
    - media: "(prefers-color-scheme: dark)"
      scheme: slate
      primary: 'black'
      accent: 'orange'
      toggle:
        icon: material/brightness-4
        name: Love my eyes!

  font:
    text: 'Ubuntu'
    code: 'Ubuntu Mono'

extra:
  status:
    new: Recently added
    deprecated: Deprecated
  analytics:
    provider: google
    property: G-N2YBGGF31R
    feedback:
      title: Was this page helpful?
      ratings:
        - icon: material/emoticon-happy-outline
          name: This page was helpful
          data: 1
          note: >-
            Thanks for your feedback!
        - icon: material/emoticon-sad-outline
          name: This page could be improved
          data: 0
          note: >- 
            Thanks for your feedback! Help us improve this page by
            <a href="https://github.com/geek-cookbook/geek-cookbook/issues/new/?title=[Feedback]+{title}+-+{url}" target="_blank" rel="noopener">creating an issue</a>.    
  consent:
    title: Cookie consent
    description: >- 
      We use cookies to recognize your repeated visits and preferences, as well
      as to measure the effectiveness of our documentation and whether users
      find what they're searching for. With your consent, you're helping us to
      make our documentation better.            
  social:
    - icon: 'fontawesome/brands/mastodon'
      link: 'https://so.fnky.nz/@funkypenguin'
    - icon: 'fontawesome/brands/github'
      link: 'https://github.com/funkypenguin'
    - icon: 'fontawesome/brands/discord'
      link: 'http://chat.funkypenguin.co.nz' 
    - icon: 'simple/matrix'
      link: 'http://matrix.funkypenguin.co.nz' 
    - icon: 'fontawesome/brands/slack'
      link: 'https://communityinviter.com/apps/funkypenguin/geek-with-us'       
    - icon: 'fontawesome/brands/stack-overflow'         
      link: 'https://stackoverflow.com/cv/funkypenguin'
    - icon: 'fontawesome/brands/linkedin'
      link: 'https://www.linkedin.com/in/funkypenguin'
    - icon: 'fontawesome/brands/facebook'
      link: 'https://www.facebook.com/funkypenguinnz'
    - icon: 'material/mailbox'
      link: 'mailto:davidy@funkypenguin.co.nz?Subject=Hello%2C%20from%20a%20geek-cookbook%20reader%20%3B%29'
    - icon: 'material/rss'
      link: 'https://geek-cookbook.funkypenguin.co.nz/rss/'

  generator: false
  # Plausible doesn't use cookies, so no need for this!
  # consent:
  #   title: 'Would you like a cookie? 🍪'
  #   description: >

  #     I know. cookies suck (<I>except the fresh, warm, choc-chip ones!</I>), and so does invasive tracking. Thing is, without cookies,
  #     analytics can't record your visit, and I can't work out where/how to invest time to make the cookbook better.

  #     <p>So, with your consent, I'd like to record what you look at and where you're from, so that I can make the
  #     cookbook even better. My analytics are public - here's <A HREF='https://plausible.io/geek-cookbook.funkypenguin.co.nz' target="_blank">all</A> I know about you! - David</p>
  #   cookies:
  #     custom: Plausible Analytics

extra_css:
  - extras/css/icons.css

extra_javascript:
  # - extras/javascript/plausible.js
  # - extras/javascript/widgetbot.js # uncommented for dev
  - https://unpkg.com/tablesort@5.3.0/dist/tablesort.min.js
  - extras/javascript/tablesort.js

# Extensions
markdown_extensions:
  - attr_list
  - admonition
  - codehilite:
      linenums: true
  - toc:
      permalink: false
      toc_depth: 3 # ignore H4/5/6
  - footnotes
  - pymdownx.critic
  - pymdownx.arithmatex
  - pymdownx.betterem:
      smart_enable: all
  - pymdownx.caret
  - pymdownx.details
  - pymdownx.snippets:
      check_paths: true
      base_path: _snippets
  - pymdownx.emoji:
      emoji_index: !!python/name:material.extensions.emoji.twemoji
      emoji_generator: !!python/name:material.extensions.emoji.to_svg
      options:
        custom_icons:
          - overrides/.icons      
  - pymdownx.inlinehilite
  - pymdownx.magiclink:
      repo_url_shorthand: true
      user: funkypenguin
      repo: geek-cookbook
  - pymdownx.mark
  - pymdownx.smartsymbols
  - pymdownx.superfences:
      custom_fences:
        - name: mermaid
          class: mermaid
          format: !!python/name:pymdownx.superfences.fence_code_format
  - pymdownx.tasklist:
      custom_checkbox: true
  - pymdownx.tilde
  - pymdownx.tabbed:
      alternate_style: true 
  - meta
  - md_in_html


