### Create Directories and Download Example Config Source: https://github.com/panonim/dynacat/blob/main/docs/docs/installation.md Manually set up Dynacat by creating the config directory and downloading the example dynacat.yml file. ```bash mkdir config && wget -O config/dynacat.yml https://raw.githubusercontent.com/Panonim/dynacat/refs/heads/main/docs/docs/dynacat.yml ``` -------------------------------- ### Manual Docker Compose Setup Source: https://github.com/panonim/dynacat/blob/main/docs/docs/installation.md Define the Dynacat service in your docker-compose.yml file. Ensure you create the necessary config and assets directories and download the example dynacat.yml. ```yaml services: dynacat: container_name: dynacat image: panonim/dynacat restart: unless-stopped volumes: - ./config:/app/config - ./assets:/app/assets - /etc/localtime:/etc/localtime:ro # Optionally, also mount docker socket if you want to use the docker containers widget # - /var/run/docker.sock:/var/run/docker.sock:ro ports: - 8080:8080 env_file: .env ``` -------------------------------- ### Check Dynacat Logs (Manual Setup) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/installation.md View the logs for the Dynacat container when using the manual Docker Compose setup. ```bash docker logs dynacat ``` -------------------------------- ### URL Examples for Bangs Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Examples of how to define the URL for a bang search engine, using {QUERY} as a placeholder. ```yaml url: https://www.reddit.com/search?q={QUERY} ``` ```yaml url: https://store.steampowered.com/search/?term={QUERY} ``` ```yaml url: https://www.amazon.com/s?k={QUERY} ``` -------------------------------- ### Configure qBittorrent Host Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Example configuration for connecting to a qBittorrent instance. This is the default client type if 'client' is not specified. ```yaml hosts: - url: http://192.168.1.1:8080 username: admin password: adminadmin ``` -------------------------------- ### Bang Configuration with Icon Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Example of configuring a bang with a title, shortcut, URL, and a custom icon. ```yaml bangs: - title: YouTube shortcut: "!yt" url: https://www.youtube.com/results?search_query={QUERY} icon: di:youtube ``` -------------------------------- ### Start Dynacat with Docker Compose Source: https://github.com/panonim/dynacat/blob/main/docs/docs/installation.md Run this command in the root of your dynacat directory to start the services in detached mode. ```bash docker compose up -d ``` -------------------------------- ### Widget Meta Information Source: https://github.com/panonim/dynacat/blob/main/docs/docs/contributing.md Example structure for the 'meta.yml' file, containing essential information about the widget. ```yaml title: Your widget's title description: A short description of the widget author: your-github-username ``` -------------------------------- ### Build Dynacat Binary for Current OS/Arch Source: https://github.com/panonim/dynacat/blob/main/docs/docs/installation.md Build the Dynacat project for your current operating system and architecture. Ensure you have Go installed. ```bash mkdir -p build && go build -o build/dynacat . ``` -------------------------------- ### Configure Deluge Host Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Example configuration for connecting to a Deluge instance. Specify 'client: deluge' and provide the necessary credentials. ```yaml hosts: - url: http://192.168.1.1:8112 client: deluge password: deluge ``` -------------------------------- ### Combined Authentication and Page Access Example Source: https://github.com/panonim/dynacat/blob/main/docs/docs/authentication.md Example demonstrating public status page access alongside a private admin page restricted by group. Includes OIDC configuration with group claim. ```yaml auth: secret-key: ${secret:auth_secret} require-auth: false oidc: issuer-url: https://auth.example.com client-id: dynacat client-secret: ${secret:oidc_secret} redirect-url: https://dashboard.example.com/api/oidc/callback groups-claim: groups pages: - name: Status # public - no restrictions columns: - size: full widgets: - type: monitor ... - name: Admin allowed-groups: - admins columns: - size: full widgets: - type: server-stats ... ``` -------------------------------- ### Configure Transmission Host Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Example configuration for connecting to a Transmission instance. Specify 'client: transmission' and provide the necessary credentials. ```yaml hosts: - url: http://192.168.1.1:9091 client: transmission username: admin password: adminadmin ``` -------------------------------- ### Two Full Columns Configuration Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Example of a page layout using two full-width columns. ```yaml columns: - size: full widgets: ... - size: full widgets: ... ``` -------------------------------- ### Example Dynacat Configuration Source: https://github.com/panonim/dynacat/blob/main/README.md This YAML configuration demonstrates how to set up a Dynacat dashboard with multiple pages, columns, and various widgets like calendar, RSS feeds, Twitch channels, weather, and market data. It shows how to define widget types, limits, caching, and specific widget parameters. ```yaml - name: Home columns: - size: small widgets: - type: calendar first-day-of-week: monday - type: rss limit: 10 collapse-after: 3 cache: 12h feeds: - url: https://selfh.st/rss/ title: selfh.st limit: 4 - url: https://ciechanow.ski/atom.xml - url: https://www.joshwcomeau.com/rss.xml title: Josh Comeau - url: https://samwho.dev/rss.xml - url: https://ishadeed.com/feed.xml title: Ahmad Shadeed - type: twitch-channels channels: - theprimeagen - j_blow - piratesoftware - cohhcarnage - christitustech - EJ_SA - size: full widgets: - type: group widgets: - type: hacker-news - type: lobsters - type: videos channels: - UCXuqSBlHAE6Xw-yeJA0Tunw # Linus Tech Tips - UCR-DXc1voovS8nhAvccRZhg # Jeff Geerling - UCsBjURrPoezykLs9EqgamOA # Fireship - UCBJycsmduvYEL83R_U4JriQ # Marques Brownlee - UCHnyfMqiRRG1u-2MsSQLbXA # Veritasium - type: group widgets: - type: reddit subreddit: technology show-thumbnails: true - type: reddit subreddit: selfhosted show-thumbnails: true - size: small widgets: - type: weather location: London, United Kingdom units: metric hour-format: 12h - type: markets markets: - symbol: SPY name: S&P 500 - symbol: BTC-USD name: Bitcoin - symbol: NVDA name: NVIDIA - symbol: AAPL name: Apple - symbol: MSFT name: Microsoft - type: releases cache: 1d repositories: - panonim/dynacat - go-gitea/gitea - immich-app/immich - syncthing/syncthing ``` -------------------------------- ### Reusable Template with Options (YAML) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md This example illustrates reusing a template with different options by defining an anchor and applying specific options to each instance of the widget. ```yaml # Note that `custom-widgets` isn't a special property, it's just used to define the reusable "anchor", see https://support.atlassian.com/bitbucket-cloud/docs/yaml-anchors/ custom-widgets: - &example-widget type: custom-api template: | {{ .Options.StringOr "custom-option" "not defined" }} pages: - name: Home columns: - size: full widgets: - <<: *example-widget options: custom-option: "Value 1" - <<: *example-widget options: custom-option: "Value 2" ``` -------------------------------- ### Configure Currently Playing Media Widget Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Display active media sessions from servers like Plex, Jellyfin, Emby, and Navidrome. This example shows how to configure multiple hosts, display thumbnails and progress bars, and group by host. ```yaml - type: playing hosts: - url: plex:https://plex.example.com token: ${PLEX_TOKEN} - url: jellyfin:https://jellyfin.example.com token: ${JELLYFIN_API_API_KEY} allow-insecure: true - url: navidrome:https://music.example.com username: ${NAVIDROME_USER} token: ${NAVIDROME_PASSWORD} show-thumbnail: true show-progress-bar: true group-by-host: false ``` -------------------------------- ### Full-Small Column Configuration Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Example of a page layout with a full-width column followed by a small column. ```yaml columns: - size: full widgets: ... - size: small widgets: ... ``` -------------------------------- ### Custom API Widget Template Example (Correct) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/contributing.md Shows the correct format for the template file of a custom API widget, containing only the template body. ```text
{{ .JSON.String "count" }}
``` -------------------------------- ### Build Dynacat Binary for Specific OS/Arch Source: https://github.com/panonim/dynacat/blob/main/docs/docs/installation.md Cross-compile the Dynacat project for a specific operating system and architecture. Requires Go to be installed. ```bash mkdir -p build && GOOS=linux GOARCH=amd64 go build -o build/dynacat . ``` -------------------------------- ### Define Parameters for Custom API (YAML) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md This example shows how to define query parameters that will be sent to the custom API. It supports simple key-value pairs and lists. ```yaml parameters: param1: value1 param2: - item1 - item2 ``` -------------------------------- ### Small-Full-Small Column Configuration Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Example of a page layout with a small column, followed by a full-width column, and another small column. ```yaml columns: - size: small widgets: ... - size: full widgets: ... - size: small widgets: ... ``` -------------------------------- ### Custom Mountpoint Names Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Example of setting custom names for specific mountpoints in the server-stats widget. ```yaml mountpoints: "/": name: Root "/mnt/data": name: Data "/boot/efi": hide: true ``` -------------------------------- ### Widget Configuration with Default URL Source: https://github.com/panonim/dynacat/blob/main/docs/docs/contributing.md Example of how a user's configuration would utilize the default URL specified in the widget's 'required:' section. ```yaml - type: dynawidgets widget: your-widget-slug # Uses the URL from required: section by default ``` -------------------------------- ### Hardcoded API Configuration (Bad Practice) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/contributing.md Shows an example of hardcoding sensitive information like API URLs and keys, which is discouraged. ```yaml url: https://192.168.0.50:8080/api/server/statistics headers: x-api-key: 1234567890 ``` -------------------------------- ### Simplify Subrequest Access with Variables (YAML) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md This example demonstrates defining a variable to shorten the syntax for accessing subrequest data, improving template readability. ```yaml template: | {{ $anotherOne := .Subrequest "another-one" }}

{{ $anotherOne.JSON.String "text" }}

``` -------------------------------- ### Inline Style Example Source: https://github.com/panonim/dynacat/blob/main/docs/docs/contributing.md Shows how to apply custom styles directly to elements using inline styles, avoiding reliance on external CSS classes. ```html ``` -------------------------------- ### Configure Calendar Widget Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Display a calendar widget. You can specify the first day of the week, for example, setting it to 'monday'. ```yaml - type: calendar first-day-of-week: monday ``` -------------------------------- ### Configure Head Widgets for a Page Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Use head-widgets to display content above the main columns on a page. This example shows how to configure the markets widget with specific symbols and names. ```yaml pages: - name: Home head-widgets: - type: markets hide-header: true markets: - symbol: SPY name: S&P 500 - symbol: BTC-USD name: Bitcoin - symbol: NVDA name: NVIDIA - symbol: AAPL name: Apple - symbol: MSFT name: Microsoft columns: - size: small widgets: - type: calendar - size: full widgets: - type: hacker-news - size: small widgets: - type: weather location: London, United Kingdom ``` -------------------------------- ### Labeling Docker Containers for Dynacat Widget Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Configure individual Docker containers using labels for display in the Dynacat widget. This example shows how to set a name, icon, URL, and description for a Jellyfin container. ```yaml jellyfin: image: jellyfin/jellyfin:latest labels: dynacat.name: Jellyfin dynacat.icon: si:jellyfin dynacat.url: https://jellyfin.domain.com dynacat.description: Movies & shows ``` -------------------------------- ### Custom API Widget Template Example (Incorrect) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/contributing.md Illustrates the incorrect way to format the template for a custom API widget, including the 'template: |' line. ```yaml - type: custom-api title: Hourly Stats update-interval: 1h # Updates every hour url: https://api.example.com/stats template: |
{{ .JSON.String "count" }}
``` -------------------------------- ### Define Options within Template (YAML) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md This example shows how to define user-configurable options directly within the template. It's less flexible than using the `options` property. ```yaml - type: custom-api template: | {{ /* User configurable options */ }} {{ $collapseAfter := 5 }} {{ $showThumbnails := true }} {{ $showFlairs := false }} ``` -------------------------------- ### Suffixed CSS Class Example Source: https://github.com/panonim/dynacat/blob/main/docs/docs/contributing.md Demonstrates the recommended practice of suffixing CSS classes with the widget name to ensure style isolation. ```css .{class}-{widget-name} { text-align: center; margin-top: 1.5rem; } ``` -------------------------------- ### Widget Configuration with Custom URL Source: https://github.com/panonim/dynacat/blob/main/docs/docs/contributing.md Example of how a user can override the default URL from the 'required:' section with a custom URL in their widget configuration. ```yaml - type: dynawidgets widget: your-widget-slug url: https://custom-api.example.com/data ``` -------------------------------- ### Docker Compose for File Secret Loading Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Example docker-compose.yml configuration to set up environment variables and volumes for loading file contents as secrets. ```yaml services: dynacat: image: Panonim/dynacat environment: - TOKEN_FILE=/home/user/token volumes: - /home/user/token:/home/user/token ``` -------------------------------- ### Stopwatch Widget Configuration Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md The `stopwatch` widget provides a browser-based stopwatch. Set `start-on-open` to `true` to have the stopwatch automatically start when the page loads. ```yaml - type: stopwatch ``` ```yaml - type: stopwatch start-on-open: true ``` -------------------------------- ### Dynamic API Request with Template Parameters Source: https://github.com/panonim/dynacat/blob/main/docs/docs/custom-api.md Construct and execute an API request entirely within the template, using dynamic parameters. This example fetches events from the last 24 hours. ```yaml - type: custom-api title: Events from the last 24h template: | {{ $events := newRequest "https://api.example.com/events" | withParameter "after" (offsetNow "-24h" | formatTime "rfc3339") | getResponse }} {{ if eq $events.Response.StatusCode 200 }} {{ range $events.JSON.Array "events" }}
{{ .String "title" }}
{{ end }} {{ else }}

Failed to fetch data: {{ $events.Response.Status }}

{{ end }} ``` -------------------------------- ### Use Options Property in Template (YAML) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md This example demonstrates using the `options` property to retrieve and define default values for template variables, offering more flexibility than inline definitions. ```yaml - type: custom-api template: | ``` -------------------------------- ### Dynawidgets Widget with Custom Title and Cache (YAML) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md This example shows how to configure a Dynawidgets widget with a custom title and a cache duration, demonstrating further customization options. ```yaml - type: dynawidgets widget: daily-chess-puzzle title: Chess Challenge cache: 1d ``` -------------------------------- ### Docker Compose OIDC Environment Variables Source: https://github.com/panonim/dynacat/blob/main/docs/docs/authentication.md Example Docker Compose configuration for Dynacat, setting OIDC-related environment variables and defining secrets for sensitive information. ```yaml services: dynacat: image: panonim/dynacat volumes: - ./config:/app/config environment: - OIDC_ISSUER_URL=https://auth.example.com - OIDC_CLIENT_ID=dynacat - OIDC_REDIRECT_URL=https://dashboard.example.com/api/oidc/callback secrets: - auth_secret - oidc_client_secret secrets: auth_secret: file: ./auth_secret.txt oidc_client_secret: file: ./oidc_secret.txt ``` -------------------------------- ### Accessing Response Headers Source: https://github.com/panonim/dynacat/blob/main/docs/docs/custom-api.md Retrieve specific headers from the API response. This example shows how to get the 'Content-Type' header. ```html
{{ .Response.Header.Get "Content-Type" }}
``` -------------------------------- ### Set up Dynacat with Docker Compose (Recommended) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/installation.md Use this command to create the dynacat directory, download the template files, modify the docker-compose.yml, and move the configuration file. ```bash mkdir dynacat && cd dynacat && \ curl -sL https://github.com/glanceapp/docker-compose-template/archive/refs/heads/main.tar.gz | tar -xzf - --strip-components 2 && \ sed -i \ -e 's/^ glance:/ dynacat:/' \ -e 's/^ container_name: glance/ container_name: dynacat/' \ -e 's/^ image: glanceapp\/glance/ image: panonim\/dynacat/' \ docker-compose.yml && \ mv config/glance.yml config/dynacat.yml ``` -------------------------------- ### Environment Variable Configuration (Good Practice) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/contributing.md Illustrates the recommended approach of using environment variables for configurable values like API URLs and keys. ```yaml url: https://${IMMICH_URL}/api/server/statistics headers: x-api-key: ${IMMICH_API_KEY} ``` -------------------------------- ### Startpage Configuration Source: https://github.com/panonim/dynacat/blob/main/docs/docs/preconfigured-pages.md Use this configuration for a streamlined startpage featuring a prominent search bar, service monitoring widgets, and categorized bookmarks. It's designed for quick access to essential tools and information. ```yaml - name: Startpage width: slim hide-desktop-navigation: true center-vertically: true hide-from-navigation: true columns: - size: full widgets: - type: search autofocus: true - type: monitor cache: 1m title: Services sites: - title: Jellyfin url: https://yourdomain.com/ icon: si:jellyfin - title: Gitea url: https://yourdomain.com/ icon: si:gitea - title: qBittorrent # only for Linux ISOs, of course url: https://yourdomain.com/ icon: si:qbittorrent - title: Immich url: https://yourdomain.com/ icon: si:immich - title: AdGuard Home url: https://yourdomain.com/ icon: si:adguard - title: Vaultwarden url: https://yourdomain.com/ icon: si:vaultwarden - type: bookmarks groups: - title: General links: - title: Gmail url: https://mail.google.com/mail/u/0/ - title: Amazon url: https://www.amazon.com/ - title: Github url: https://github.com/ - title: Entertainment links: - title: YouTube url: https://www.youtube.com/ - title: Prime Video url: https://www.primevideo.com/ - title: Disney+ url: https://www.disneyplus.com/ - title: Social links: - title: Reddit url: https://www.reddit.com/ - title: Twitter url: https://twitter.com/ - title: Instagram url: https://www.instagram.com/ ``` -------------------------------- ### Configure To-Do list with server storage Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Set up a to-do list that persists tasks on a server-side SQLite database. Ensure `server.db-path` is configured. ```yaml server: db-path: /data/dynacat.db pages: - name: Home columns: - size: full widgets: - type: to-do id: my-list storage: server ``` -------------------------------- ### YAML Shortcut with Special Character Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md When a shortcut starts with '!' or other special YAML characters, wrap the value in quotes. ```yaml shortcut: "!yt" ``` -------------------------------- ### Loading File Contents via Environment Variable Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Demonstrates how to load the content of a file into the configuration, where the file path is specified by an environment variable. ```yaml token: ${readFileFromEnv:TOKEN_FILE} ``` -------------------------------- ### Configure Latest Media Display Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Set up the 'latest-media' card to display recently added items. Specify the number of items, columns, and update interval. Requires a list of media server hosts. ```yaml - type: latest-media title: Recently Added update-interval: 30m item-count: 12 columns: 4 hosts: - url: jellyfin:https://jellyfin.example.com token: ${JELLYFIN_KEY} - url: plex:https://plex.example.com token: ${PLEX_TOKEN} - url: emby:https://emby.example.com token: ${EMBY_KEY} ``` -------------------------------- ### Configure Basic Authentication Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Set up HTTP Basic Authentication credentials for accessing protected sites. Ensure the username and password are correct for authentication to succeed. ```yaml basic-auth: username: your-username password: your-password ``` -------------------------------- ### Run Dynacat Directly with Go Source: https://github.com/panonim/dynacat/blob/main/docs/docs/installation.md Execute the Dynacat application directly using the Go runtime, useful for testing changes without building a binary. ```bash go run . ``` -------------------------------- ### Configure Media Server Hosts Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Define the media servers to connect to. Each host requires a URL with a server type prefix (plex:, jellyfin:, emby:, navidrome:) and an authentication token or password. Navidrome also requires a username. ```yaml hosts: - url: plex:https://plex.example.com token: ${PLEX_TOKEN} - url: jellyfin:https://jellyfin.example.com token: ${JELLYFIN_API_KEY} - url: emby:https://emby.example.com token: ${EMBY_API_KEY} - url: navidrome:https://music.example.com username: ${NAVIDROME_USER} token: ${NAVIDROME_PASSWORD} ``` -------------------------------- ### Set Request Headers Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Example of how to specify custom headers for an HTTP request in the custom-api configuration. This is useful for authentication or setting content types. ```yaml headers: x-api-key: your-api-key Accept: application/json ``` -------------------------------- ### Configure Monitor Widget Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Set up a monitor widget to display the status of various services. Includes cache duration, title, and a list of sites with their URLs and icons. Supports custom icons and update intervals. ```yaml - type: monitor cache: 1m title: Services sites: - title: Jellyfin url: https://jellyfin.yourdomain.com icon: /assets/jellyfin-logo.png - title: Gitea url: https://gitea.yourdomain.com icon: /assets/gitea-logo.png - title: Immich url: https://immich.yourdomain.com icon: /assets/immich-logo.png - title: AdGuard Home url: https://adguard.yourdomain.com icon: /assets/adguard-logo.png - title: Vaultwarden url: https://vault.yourdomain.com icon: /assets/vaultwarden-logo.png ``` -------------------------------- ### Server Configuration Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Configure server-level settings such as the port, asset path for local icons, and cache directory using the top-level `server` property. ```yaml server: port: 8080 assets-path: /home/user/dynacat-assets ``` -------------------------------- ### Customizing Widget Update Interval Source: https://github.com/panonim/dynacat/blob/main/docs/docs/custom-api.md Set a custom refresh interval for the custom API widget. This example changes the update interval to 5 seconds. ```yaml - type: custom-api update-interval: 5s url: https://api.example.com/live-data template: |
Current value: {{ .JSON.Int "value" }}
``` -------------------------------- ### Configure a basic To-Do list widget Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Use this configuration to create a simple to-do list. Tasks are stored in the browser's local storage by default. ```yaml - type: to-do ``` -------------------------------- ### Configure Media Server Hosts Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Define a list of media server hosts to fetch content from. Each host requires a URL with a server type prefix and an authentication token. Optionally, specify libraries to filter content. ```yaml hosts: - url: jellyfin:https://jellyfin.example.com token: ${JELLYFIN_API_KEY} libraries: - Movies - TV Shows - url: plex:https://plex.example.com token: ${PLEX_TOKEN} libraries: - Movies ``` -------------------------------- ### Environment Variable Substitution in YAML Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Demonstrates how to use environment variables within the Dynacat configuration file for dynamic settings. ```yaml server: host: ${HOST} port: ${PORT} ``` ```yaml - type: rss title: ${RSS_TITLE} feeds: - url: http://domain.com/rss/${RSS_CATEGORY}.xml ``` ```yaml - type: rss limit: ${RSS_LIMIT} ``` -------------------------------- ### Send JSON Body in Request Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Example of configuring a POST request with a JSON body. The `body-type` is set to `json` and the `body` contains a map of key-value pairs. ```yaml body-type: json body: key1: value1 key2: value2 multiple-items: - item1 - item2 ``` -------------------------------- ### Send String Body in Request Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Example of configuring a request with a string body, often used for form data. The `body-type` is set to `string` and the `body` is a URL-encoded string. ```yaml body-type: string body: | key1=value1&key2=value2 ``` -------------------------------- ### Configure Search Widget Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Set up a search widget with a specified search engine and custom bangs for site-specific searches. ```yaml - type: search search-engine: duckduckgo bangs: - title: YouTube shortcut: "!yt" url: https://www.youtube.com/results?search_query={QUERY} ``` -------------------------------- ### Iterating Over JSON Lines Response Source: https://github.com/panonim/dynacat/blob/main/docs/docs/custom-api.md Process each JSON object within a JSON Lines (NDJSON) response. This example iterates through a list of people and displays their name and age. ```html {{ range .JSONLines }}

{{ .String "name" }} is {{ .Int "age" }} years old

{{ end }} ``` -------------------------------- ### Implement Collapsible Lists Source: https://github.com/panonim/dynacat/blob/main/docs/docs/extensions.md Create lists that can be collapsed to show a limited number of items initially, with an option to expand. Use `collapsible-container` and `data-collapse-after` to configure the behavior. ```html ``` -------------------------------- ### Authelia OIDC Client Configuration Source: https://github.com/panonim/dynacat/blob/main/docs/docs/authentication.md Configure Authelia to act as an OIDC provider for Dynacat. Ensure the client ID, secret, and redirect URIs match your Dynacat setup. ```yaml identity_providers: oidc: clients: - client_id: dynacat client_secret: '$pbkdf2-sha512$...' # hashed secret redirect_uris: - https://dashboard.example.com/api/oidc/callback scopes: - openid - profile - email - groups grant_types: - authorization_code ``` -------------------------------- ### Switching from Glance to Dynacat Source: https://github.com/panonim/dynacat/blob/main/docs/docs/installation.md Replace your current Glance image with the Dynacat image to migrate. ```yaml panonim/dynacat:latest ``` -------------------------------- ### Configuring Docker Containers via dynacat.yml Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Alternatively, define container configurations directly in your `dynacat.yml` file using the `containers` property. This avoids the need for Docker labels. ```yaml - type: docker-containers containers: container_name_1: name: Container Name description: Description of the container url: https://container.domain.com icon: si:container-icon hide: false ``` -------------------------------- ### Extracting Array Elements with gjson Path Source: https://github.com/panonim/dynacat/blob/main/docs/docs/custom-api.md Use gjson path syntax to extract specific data from a JSON response, such as an array of names. This example retrieves all 'name' fields from the JSON. ```html {{ range .JSON.Array "..#.name" }}

{{ .String "" }}

{{ end }} ``` -------------------------------- ### Configure Docker Controller Widget Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Use this snippet to display and manage Docker containers and images. Mount the docker.sock volume if Dynacat is running inside a container. ```yaml - type: docker-controller title: Docker show: both update-interval: 15s ``` -------------------------------- ### Share Properties Using YAML Anchors Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Leverage YAML anchors to define shared properties and reduce repetition when configuring multiple widgets within a group. This example demonstrates sharing common properties for Reddit widgets. ```yaml - type: group define: &shared-properties type: reddit show-thumbnails: true collapse-after: 6 widgets: - subreddit: gamingnews <<: *shared-properties - subreddit: games <<: *shared-properties - subreddit: pcgaming <<: *shared-properties ``` -------------------------------- ### Configure Extension Widget Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Integrate external widgets by specifying their URL and optional parameters. Be cautious when enabling `allow-potentially-dangerous-html`. ```yaml - type: extension url: https://domain.com/widget/display-a-message allow-potentially-dangerous-html: true parameters: message: Hello, world! ``` -------------------------------- ### Configure Custom API Widget Update Interval Source: https://github.com/panonim/dynacat/blob/main/docs/docs/custom-api.md Set a custom client-side update interval for a custom API widget. This example shows updating every 5 seconds. Supported units are 's', 'm', and 'h'. ```yaml - type: custom-api title: Live Data update-interval: 5s # Updates every 5 seconds url: https://api.example.com/data template: |
{{ .JSON.String "value" }}
``` ```yaml - type: custom-api title: Hourly Stats update-interval: 1h # Updates every hour url: https://api.example.com/stats template: |
{{ .JSON.String "count" }}
``` -------------------------------- ### Configure Torrent Client Hosts Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Specify a list of torrent client instances to connect to. Supports qBittorrent, Deluge, and Transmission. Each host requires a URL and authentication credentials. ```yaml hosts: - url: http://192.168.1.1:8080 username: admin password: adminadmin - url: http://192.168.1.2:8112 client: deluge password: deluge - url: http://192.168.1.3:9091 client: transmission username: admin password: adminadmin ``` -------------------------------- ### Specify Options in Widget Configuration (YAML) Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md This configuration snippet shows how to specify options directly in the widget's configuration, allowing for dynamic behavior without modifying the template. ```yaml - type: custom-api options: collapse-after: 5 show-thumbnails: true show-flairs: false ``` -------------------------------- ### Configure Twitch Channels widget Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Display a list of specified Twitch channels. The `channels` property is required. ```yaml - type: twitch-channels channels: - jembawls - giantwaffle - asmongold - cohhcarnage - j_blow - xQc ``` -------------------------------- ### Configure Monitor Widget Style Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Apply a 'compact' style to the monitor widget for a condensed appearance. This affects how the list of services is displayed. ```yaml style: compact ``` -------------------------------- ### Template Helper Functions Source: https://github.com/panonim/dynacat/blob/main/docs/docs/custom-api.md Provides documentation for helper functions available from Go's text/template package. ```APIDOC ## Template Helper Functions ### eq(a, b any) bool Compares two values for equality. ### ne(a, b any) bool Compares two values for inequality. ### lt(a, b any) bool Compares two values for less than. ### le(a, b any) bool Compares two values for less than or equal to. ### gt(a, b any) bool Compares two values for greater than. ### ge(a, b any) bool Compares two values for greater than or equal to. ### and(args ...bool) bool Returns true if all arguments are true; accepts two or more boolean values. ### or(args ...bool) bool Returns true if any argument is true; accepts two or more boolean values. ### not(a bool) bool Returns the opposite of the value. ### index(a any, b int) any Returns the value at the specified index of an array. ### len(a any) int Returns the length of an array. ### printf(format string, a ...any) string Returns a formatted string. ``` -------------------------------- ### Bind Dynacat to All Interfaces Source: https://github.com/panonim/dynacat/blob/main/docs/docs/docker-options.md Configures the server to listen on all network interfaces (0.0.0.0), allowing access from any IP address. This is the default behavior. ```yaml environment: - BIND=0.0.0.0 ``` -------------------------------- ### Configure Bookmarks Widget Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Display a list of links, optionally grouped by category with custom colors. Properties like 'same-tab', 'hide-arrow', and 'target' can be set at the group or individual link level. ```yaml - type: bookmarks groups: - links: - title: Gmail url: https://mail.google.com/mail/u/0/ - title: Amazon url: https://www.amazon.com/ - title: Github url: https://github.com/ - title: Wikipedia url: https://en.wikipedia.org/ - title: Entertainment color: 10 70 50 links: - title: Netflix url: https://www.netflix.com/ - title: Disney+ url: https://www.disneyplus.com/ - title: YouTube url: https://www.youtube.com/ - title: Prime Video url: https://www.primevideo.com/ - title: Social color: 200 50 50 links: - title: Reddit url: https://www.reddit.com/ - title: Twitter url: https://twitter.com/ - title: Instagram url: https://www.instagram.com/ ``` -------------------------------- ### Configure Videos widget for YouTube channels Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Display the latest videos from specified YouTube channels. The `channels` property is required and accepts channel IDs. ```yaml - type: videos channels: - UCXuqSBlHAE6Xw-yeJA0Tunw - UCBJycsmduvYEL83R_U4JriQ - UCHnyfMqiRRG1u-2MsSQLbXA ``` -------------------------------- ### Configure Theme with Presets Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Define custom theme presets for the theme picker. You can specify colors, contrast, and saturation multipliers. To override default themes, use 'default-dark' or 'default-light' keys. ```yaml theme: # This will be the default theme background-color: 100 20 10 primary-color: 40 90 40 contrast-multiplier: 1.1 disable-picker: false presets: gruvbox-dark: background-color: 0 0 16 primary-color: 43 59 81 positive-color: 61 66 44 negative-color: 6 96 59 zebra: light: true background-color: 0 0 95 primary-color: 0 0 10 negative-color: 0 90 50 ``` -------------------------------- ### Configure Repository Widget Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Display general repository information, including the latest open pull requests, issues, and commits. Set limits for each to control the amount of data shown. ```yaml - type: repository repository: Panonim/dynacat pull-requests-limit: 5 issues-limit: 3 commits-limit: 3 ``` -------------------------------- ### Configure Podman Network for Dynacat Source: https://github.com/panonim/dynacat/blob/main/README.md If experiencing timeouts with Podman, add this network configuration to your docker-compose.yml file to potentially resolve the issue. ```yaml networks: podman: external: true ``` -------------------------------- ### Custom API Widget Template with Required Section Source: https://github.com/panonim/dynacat/blob/main/docs/docs/contributing.md Demonstrates the correct format for a custom API widget's template file, including the optional but recommended 'required:' section for default configuration. ```text
{{ .JSON.String "count" }}
required: | url: https://api.example.com/stats ``` -------------------------------- ### Catppuccin Frappe Dark Theme Configuration Source: https://github.com/panonim/dynacat/blob/main/docs/docs/themes.md Configuration for the 'Catppuccin Frappe' dark theme. Includes background, contrast, primary, positive, and negative colors. ```yaml theme: background-color: 229 19 23 contrast-multiplier: 1.2 primary-color: 222 74 74 positive-color: 96 44 68 negative-color: 359 68 71 ``` -------------------------------- ### Using Docker Secrets Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Illustrates how to inject secrets directly from Docker secrets into the Dynacat configuration. ```yaml # This will be replaced with the contents of the file /run/secrets/github_token # so long as the secret `github_token` is provided to the container token: ${secret:github_token} ``` -------------------------------- ### Define Pages in Configuration Source: https://github.com/panonim/dynacat/blob/main/docs/docs/configuration.md Pages are defined using the top-level `pages` property. The first page defined becomes the home page and all pages are added to the navigation bar in definition order. ```yaml pages: - name: Home columns: ... - name: Videos columns: ... - name: Homelab columns: ... ``` -------------------------------- ### Configure Password Authentication Source: https://github.com/panonim/dynacat/blob/main/docs/docs/authentication.md Set up username and password authentication by defining users and their credentials in the auth section. A secret key is required for secure operation. ```yaml auth: secret-key: # generate with: ./dynacat secret:make users: admin: password: mysecretpassword alice: password: anotherpassword ```