### 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 }}
{{ if $showThumbnails }}
-
{{ end }}
{{ if $showFlairs }}
-
{{ .JSON.String "flair" }}
{{ end }}
```
--------------------------------
### 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: |
{{ if (.Options.BoolOr "show-thumbnails" true) }}
-
{{ end }}
{{ if (.Options.BoolOr "show-flairs" false) }}
-
{{ .JSON.String "flair" }}
{{ end }}
```
--------------------------------
### 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
- collapsible
- list
- with
- many
- items
- that
- will
- appear
- when
- you
- click
- the
- button
- below
```
--------------------------------
### 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
```