style: auto-fix lint and format
This commit is contained in:
1 parent
06db42129c
commit
51d8a3cc53
177 files changed
+7758
-6562
No files matched your search
@@ -1,37 +1,44 @@
|
||||
---
|
||||
title: 'AdGuard Home'
|
||||
title: "AdGuard Home"
|
||||
description: "AdGuard Home is a network-wide software for blocking ads and trackers, providing a safer and faster internet experience."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconAd, IconDeviceGamepad } from "@tabler/icons-react";
|
||||
import { adguardHomeIntegration } from '.';
|
||||
import { dnsHoleSummaryWidget } from '@site/docs/widgets/dns-hole-summary';
|
||||
import { dnsHoleControlsWidget } from '@site/docs/widgets/dns-hole-controls';
|
||||
import { adguardHomeIntegration } from ".";
|
||||
import { dnsHoleSummaryWidget } from "@site/docs/widgets/dns-hole-summary";
|
||||
import { dnsHoleControlsWidget } from "@site/docs/widgets/dns-hole-controls";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={adguardHomeIntegration}
|
||||
categories={['DNS Hole']}
|
||||
/>
|
||||
<IntegrationHeader integration={adguardHomeIntegration} categories={["DNS Hole"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: dnsHoleSummaryWidget,
|
||||
},{
|
||||
widget: dnsHoleControlsWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: dnsHoleSummaryWidget,
|
||||
},
|
||||
{
|
||||
widget: dnsHoleControlsWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['username', 'password'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,40 +1,45 @@
|
||||
---
|
||||
title: 'Anchor'
|
||||
title: "Anchor"
|
||||
description: "Anchor is a self-hosted note-taking application."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { anchorIntegration } from '.';
|
||||
import { anchorNoteWidget } from '@site/docs/widgets/anchor-note';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { anchorIntegration } from ".";
|
||||
import { anchorNoteWidget } from "@site/docs/widgets/anchor-note";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={anchorIntegration}
|
||||
categories={['Notes']}
|
||||
/>
|
||||
<IntegrationHeader integration={anchorIntegration} categories={["Notes"]} />
|
||||
|
||||
The Anchor integration lets Homarr connect to your Anchor instance so you can display and edit selected notes directly from your dashboard.
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: anchorNoteWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: anchorNoteWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [
|
||||
'Open your Anchor instance.',
|
||||
'Generate or copy an API key from Anchor settings.',
|
||||
'Paste that key into the API Key secret field in Homarr.'
|
||||
]
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [
|
||||
"Open your Anchor instance.",
|
||||
"Generate or copy an API key from Anchor settings.",
|
||||
"Paste that key into the API Key secret field in Homarr.",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,38 +1,43 @@
|
||||
---
|
||||
title: 'Aria2'
|
||||
title: "Aria2"
|
||||
description: "Lightweight multiprotocol & multi-source command-line download utility. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink"
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { aria2Integration } from '.';
|
||||
import { downloadsWidget } from '@site/docs/widgets/downloads';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { aria2Integration } from ".";
|
||||
import { downloadsWidget } from "@site/docs/widgets/downloads";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={aria2Integration}
|
||||
categories={['Download', 'Multiprotocol', 'Multi-source']}
|
||||
/>
|
||||
<IntegrationHeader integration={aria2Integration} categories={["Download", "Multiprotocol", "Multi-source"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: downloadsWidget,
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: downloadsWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[
|
||||
{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
},
|
||||
{
|
||||
credentials: [],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
{
|
||||
credentials: [],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,41 +1,40 @@
|
||||
---
|
||||
title: 'Audiobookshelf'
|
||||
title: "Audiobookshelf"
|
||||
description: "Audiobookshelf is a self-hosted audiobook and podcast server that lets you manage and stream your audio library."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { audiobookshelfIntegration } from '.';
|
||||
import { audioStatsWidget } from '@site/docs/widgets/audio-stats';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { audiobookshelfIntegration } from ".";
|
||||
import { audioStatsWidget } from "@site/docs/widgets/audio-stats";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={audiobookshelfIntegration}
|
||||
categories={['Media']}
|
||||
/>
|
||||
<IntegrationHeader integration={audiobookshelfIntegration} categories={["Media"]} />
|
||||
|
||||
Audiobookshelf provides library statistics including audiobook and podcast counts, listening time, and active sessions.
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: audioStatsWidget },
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: audioStatsWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [
|
||||
'Open your Audiobookshelf instance',
|
||||
'Go to Settings → Users',
|
||||
'Click on your user account',
|
||||
'Copy the API token from the user details',
|
||||
]
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [
|
||||
"Open your Audiobookshelf instance",
|
||||
"Go to Settings → Users",
|
||||
"Click on your user account",
|
||||
"Copy the API token from the user details",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,31 +1,30 @@
|
||||
---
|
||||
title: 'Bazarr'
|
||||
title: "Bazarr"
|
||||
description: "Bazarr is a companion application to Sonarr and Radarr that manages and downloads subtitles."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { bazarrIntegration } from '.';
|
||||
import { bazarrWidget } from '@site/docs/widgets/bazarr';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { bazarrIntegration } from ".";
|
||||
import { bazarrWidget } from "@site/docs/widgets/bazarr";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={bazarrIntegration}
|
||||
categories={['Subtitles', 'Media']}
|
||||
/>
|
||||
<IntegrationHeader integration={bazarrIntegration} categories={["Subtitles", "Media"]} />
|
||||
|
||||
Bazarr complements Sonarr and Radarr by managing subtitle downloads. The Homarr integration uses your Bazarr API key to fetch missing subtitle counts and health badges.
|
||||
|
||||
### Screenshots
|
||||
|
||||
import apiKeySettings from './img/api-key-settings.png';
|
||||
import widgetOverview from '@site/docs/widgets/bazarr/img/widget-overview.png';
|
||||
import apiKeySettings from "./img/api-key-settings.png";
|
||||
import widgetOverview from "@site/docs/widgets/bazarr/img/widget-overview.png";
|
||||
|
||||
<div className="flex flex-col gap-4">
|
||||
<div>
|
||||
<p>API key location in Bazarr (<strong>Settings → General → Security</strong>):</p>
|
||||
<p>
|
||||
API key location in Bazarr (<strong>Settings → General → Security</strong>):
|
||||
</p>
|
||||
<img src={apiKeySettings} alt="bazarr-api-key-settings" width={128 * 4} />
|
||||
</div>
|
||||
<div>
|
||||
@@ -35,20 +34,25 @@ import widgetOverview from '@site/docs/widgets/bazarr/img/widget-overview.png';
|
||||
</div>
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: bazarrWidget }]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: bazarrWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
|
||||
You can find your Bazarr API key under **Settings → General → Security**.
|
||||
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [
|
||||
"Open Bazarr and go to Settings → General → Security.",
|
||||
"Copy the API key and paste it into Homarr when creating the integration.",
|
||||
],
|
||||
}]} />
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [
|
||||
"Open Bazarr and go to Settings → General → Security.",
|
||||
"Copy the API key and paste it into Homarr when creating the integration.",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,25 +1,22 @@
|
||||
---
|
||||
title: 'Beszel'
|
||||
title: "Beszel"
|
||||
description: "Beszel is a lightweight server monitoring platform with Docker stats, historical data, and alert functions."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { beszelIntegration } from '.';
|
||||
import { beszelSystemStatsWidget } from '@site/docs/widgets/beszel-system-stats';
|
||||
import { beszelSystemGridWidget } from '@site/docs/widgets/beszel-system-grid';
|
||||
import { beszelSystemTableWidget } from '@site/docs/widgets/beszel-system-table';
|
||||
import { beszelAlertsWidget } from '@site/docs/widgets/beszel-alerts';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { beszelIntegration } from ".";
|
||||
import { beszelSystemStatsWidget } from "@site/docs/widgets/beszel-system-stats";
|
||||
import { beszelSystemGridWidget } from "@site/docs/widgets/beszel-system-grid";
|
||||
import { beszelSystemTableWidget } from "@site/docs/widgets/beszel-system-table";
|
||||
import { beszelAlertsWidget } from "@site/docs/widgets/beszel-alerts";
|
||||
|
||||
import beszelDashboard from './img/beszel-dashboard.png';
|
||||
import beszelDashboard from "./img/beszel-dashboard.png";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={beszelIntegration}
|
||||
categories={['System Monitoring']}
|
||||
/>
|
||||
<IntegrationHeader integration={beszelIntegration} categories={["System Monitoring"]} />
|
||||
|
||||
Beszel monitors your servers in real time via lightweight agents, collecting CPU, memory, disk, network, GPU, temperature, and Docker container metrics. It stores historical data and supports configurable alerts.
|
||||
|
||||
@@ -28,26 +25,33 @@ Beszel monitors your servers in real time via lightweight agents, collecting CPU
|
||||
<img src={beszelDashboard} alt="Beszel dashboard overview showing all four widgets" />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: beszelSystemStatsWidget },
|
||||
{ widget: beszelSystemGridWidget },
|
||||
{ widget: beszelSystemTableWidget },
|
||||
{ widget: beszelAlertsWidget },
|
||||
]}
|
||||
items={[
|
||||
{ widget: beszelSystemStatsWidget },
|
||||
{ widget: beszelSystemGridWidget },
|
||||
{ widget: beszelSystemTableWidget },
|
||||
{ widget: beszelAlertsWidget },
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['username', 'password'],
|
||||
steps: [
|
||||
'Open your Beszel hub instance (default port 8090)',
|
||||
'Use the same credentials you use to log in to the Beszel web UI',
|
||||
]
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [
|
||||
"Open your Beszel hub instance (default port 8090)",
|
||||
"Use the same credentials you use to log in to the Beszel web UI",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
:::tip
|
||||
Beszel uses PocketBase under the hood. The default admin credentials are set during the initial Beszel setup.
|
||||
|
||||
@@ -1,29 +1,24 @@
|
||||
---
|
||||
title: 'Coolify'
|
||||
description: 'Self-hosted PaaS and deployment platform'
|
||||
title: "Coolify"
|
||||
description: "Self-hosted PaaS and deployment platform"
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { coolifyIntegration } from '.';
|
||||
import { coolifyWidget } from '../../widgets/coolify';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { coolifyIntegration } from ".";
|
||||
import { coolifyWidget } from "../../widgets/coolify";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={coolifyIntegration}
|
||||
categories={['System monitoring', 'Deployment']}
|
||||
/>
|
||||
<IntegrationHeader integration={coolifyIntegration} categories={["System monitoring", "Deployment"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: coolifyWidget }
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: coolifyWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
:::info URL configuration
|
||||
@@ -31,16 +26,28 @@ Use the root URL of your Coolify instance, for example `https://coolify.example.
|
||||
:::
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [
|
||||
'Open your Coolify instance and make sure you are in the team you want Homarr to monitor.',
|
||||
(<span>Enable API access under <strong>Settings > Advanced</strong> if it is disabled.</span>),
|
||||
(<span>Go to <strong>Security > API Tokens</strong>.</span>),
|
||||
'Enter a name, e.g. "Homarr".',
|
||||
(<span>Select the <code>read</code> permission. The Coolify widget only reads version, server, project, application, and service data.</span>),
|
||||
'Click "Create".',
|
||||
'Copy the generated token immediately. Coolify only shows it once.',
|
||||
'Paste the token into the API Key field in Homarr.'
|
||||
]
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [
|
||||
"Open your Coolify instance and make sure you are in the team you want Homarr to monitor.",
|
||||
<span>
|
||||
Enable API access under <strong>Settings > Advanced</strong> if it is disabled.
|
||||
</span>,
|
||||
<span>
|
||||
Go to <strong>Security > API Tokens</strong>.
|
||||
</span>,
|
||||
'Enter a name, e.g. "Homarr".',
|
||||
<span>
|
||||
Select the <code>read</code> permission. The Coolify widget only reads version, server, project, application,
|
||||
and service data.
|
||||
</span>,
|
||||
'Click "Create".',
|
||||
"Copy the generated token immediately. Coolify only shows it once.",
|
||||
"Paste the token into the API Key field in Homarr.",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,32 +1,33 @@
|
||||
---
|
||||
title: 'Dash.'
|
||||
title: "Dash."
|
||||
description: "Dash. is a system performance and resource monitoring tool"
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconHeartRateMonitor } from "@tabler/icons-react";
|
||||
import { dashDotIntegration } from '.';
|
||||
import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
|
||||
import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
|
||||
import { dashDotIntegration } from ".";
|
||||
import { healthMonitoringWidget } from "@site/docs/widgets/health-monitoring";
|
||||
import { systemResourcesWidget } from "@site/docs/widgets/system-resources";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={dashDotIntegration}
|
||||
categories={['System monitoring']}
|
||||
/>
|
||||
<IntegrationHeader integration={dashDotIntegration} categories={["System monitoring"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: healthMonitoringWidget
|
||||
}, {
|
||||
widget: systemResourcesWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: healthMonitoringWidget,
|
||||
},
|
||||
{
|
||||
widget: systemResourcesWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
<AddingIntegration />
|
||||
|
||||
<AddingIntegration />
|
||||
@@ -1,36 +1,41 @@
|
||||
---
|
||||
title: 'Deluge'
|
||||
title: "Deluge"
|
||||
description: "Deluge is a lightweight, Free Software, cross-platform BitTorrent client."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconDownload } from "@tabler/icons-react";
|
||||
import Alert from '@theme/Admonition';
|
||||
import { delugeIntegration } from '.';
|
||||
import { downloadsWidget } from '@site/docs/widgets/downloads';
|
||||
import Alert from "@theme/Admonition";
|
||||
import { delugeIntegration } from ".";
|
||||
import { downloadsWidget } from "@site/docs/widgets/downloads";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={delugeIntegration}
|
||||
categories={['Torrent client']}
|
||||
/>
|
||||
<IntegrationHeader integration={delugeIntegration} categories={["Torrent client"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: downloadsWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: downloadsWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['password'],
|
||||
steps: [],
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["password"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,32 +1,31 @@
|
||||
---
|
||||
title: 'Docker'
|
||||
title: "Docker"
|
||||
description: "Docker is a platform where you can run your applications in containers, allowing for easy deployment and management of applications."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconBrandDocker, IconTool } from "@tabler/icons-react";
|
||||
import { dockerIntegration } from '.';
|
||||
import { dockerContainersWidget } from '@site/docs/widgets/docker-containers';
|
||||
import { dockerIntegration } from ".";
|
||||
import { dockerContainersWidget } from "@site/docs/widgets/docker-containers";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={dockerIntegration}
|
||||
categories={['Containers']}
|
||||
/>
|
||||
<IntegrationHeader integration={dockerIntegration} categories={["Containers"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
items={[
|
||||
{
|
||||
widget: dockerContainersWidget,
|
||||
note: "This widget can only be used with administrator privileges"
|
||||
}]}
|
||||
note: "This widget can only be used with administrator privileges",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
|
||||
## Enabling the Docker integration
|
||||
|
||||
This integration must first be enabled.
|
||||
If you directly run on the host system and you have docker installed, it will be enabled by default.
|
||||
Otherwise, you'll need to mount the [docker socket](https://docs.docker.com/engine/security/protect-access/) to the Homarr container,
|
||||
@@ -49,15 +48,17 @@ services:
|
||||
environment:
|
||||
- SECRET_ENCRYPTION_KEY=your_64_character_hex_string # <--- can be generated with `openssl rand -hex 32`
|
||||
ports:
|
||||
- '7575:7575'
|
||||
- "7575:7575"
|
||||
```
|
||||
|
||||
With docker run, add this parameter: `-v /var/run/docker.sock:/var/run/docker.sock`.
|
||||
In Windows, you'll need to adjust the slashes: `-v //var/run/docker.sock:/var/run/docker.sock`
|
||||
|
||||
### Managing your Docker containers within Homarr
|
||||
|
||||
Homarr allows you to interact with Docker containers running on your system.
|
||||
Each container row has an action menu with the following options:
|
||||
|
||||
- **View logs** - opens a dedicated logs page with a live terminal
|
||||
- **Start** - start a stopped container
|
||||
- **Stop** - stop a running container
|
||||
@@ -98,11 +99,13 @@ Currently Homarr supports one label for configuration of the containers:
|
||||
- **homarr.hide:** If set to any value, the container will be hidden from the Docker Containers widget and tools page.
|
||||
|
||||
### Security
|
||||
|
||||
Mounting docker sockets can be risky, as they permit full control over your docker service.
|
||||
As an example, a thread actor could abuse Homarr use the socket to start, stop or delete containers on your system.
|
||||
|
||||
Therefore we recommend the usage of a socket proxy, which can prohibit certain actions.
|
||||
A few examples include:
|
||||
|
||||
- https://github.com/linuxserver/docker-socket-proxy
|
||||
- https://github.com/Tecnativa/docker-socket-proxy
|
||||
|
||||
@@ -110,36 +113,44 @@ See documentation of the respective proxies on how to configure them.
|
||||
Homarr may behave in unexpected ways when you use proxies.
|
||||
|
||||
#### Permissions
|
||||
|
||||
Homarr needs the following permissions from the Docker API:
|
||||
|
||||
- Containers/Start
|
||||
- Containers/Stop
|
||||
- Containers/Restart
|
||||
- Containers/Remove
|
||||
|
||||
For socket proxies, you will need these permissions:
|
||||
|
||||
- `CONTAINERS=1`
|
||||
- `POST=1`
|
||||
|
||||
**Caution:** `POST` access is security critical as it provides extensive capabilities to modify your docker environment. Please leave it disabled if you're concerned about this.
|
||||
|
||||
As a workaround, you can use [LSIO's socket proxy](https://github.com/linuxserver/docker-socket-proxy) and set the following:
|
||||
|
||||
- ALLOW_START=1
|
||||
- ALLOW_STOP=1
|
||||
- ALLOW_RESTARTS=1
|
||||
|
||||
These will work even with `POST=0`.
|
||||
These will work even with `POST=0`.
|
||||
|
||||
You lose the ability to remove containers, but start, stop and restarts should work just fine.
|
||||
|
||||
#### Connecting to Docker via Socket Proxies
|
||||
|
||||
To connect to Docker via a socket proxy, you'll need to add these two environment variables in the compose file:
|
||||
|
||||
- `DOCKER_HOSTNAMES=<name of the socket proxy container>`
|
||||
- `DOCKER_PORTS=<socket proxy port, usually 2375>`
|
||||
|
||||
Refer: https://homarr.dev/docs/advanced/environment-variables/
|
||||
|
||||
You will also need to add Homarr to the network of your socket proxy. You can do it like this:
|
||||
|
||||
1. Add the network to your compose file (with appropriate changes):
|
||||
|
||||
```yaml
|
||||
networks:
|
||||
socket-proxy:
|
||||
@@ -148,6 +159,7 @@ networks:
|
||||
```
|
||||
|
||||
2. Add the network to the homarr service in the compose file:
|
||||
|
||||
```yaml
|
||||
networks:
|
||||
- socket-proxy
|
||||
|
||||
@@ -1,37 +1,35 @@
|
||||
---
|
||||
title: 'Emby'
|
||||
title: "Emby"
|
||||
description: "Emby is a media server platform that allows you to organize, manage, and stream your personal media collection."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconVideo, IconTicket } from "@tabler/icons-react";
|
||||
import { embyIntegration } from '.';
|
||||
import { mediaServerWidget } from '@site/docs/widgets/media-server';
|
||||
import { mediaReleasesWidget } from '@site/docs/widgets/media-releases';
|
||||
import { embyIntegration } from ".";
|
||||
import { mediaServerWidget } from "@site/docs/widgets/media-server";
|
||||
import { mediaReleasesWidget } from "@site/docs/widgets/media-releases";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={embyIntegration}
|
||||
categories={['Media server']}
|
||||
/>
|
||||
<IntegrationHeader integration={embyIntegration} categories={["Media server"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: mediaServerWidget },
|
||||
{ widget: mediaReleasesWidget }
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: mediaServerWidget }, { widget: mediaReleasesWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,37 +1,43 @@
|
||||
---
|
||||
title: 'Glances'
|
||||
title: "Glances"
|
||||
description: "Glances is a cross-platform system monitoring tool."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { glancesIntegration } from '.';
|
||||
import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
|
||||
import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { glancesIntegration } from ".";
|
||||
import { systemResourcesWidget } from "@site/docs/widgets/system-resources";
|
||||
import { healthMonitoringWidget } from "@site/docs/widgets/health-monitoring";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={glancesIntegration}
|
||||
categories={['System Monitoring']}
|
||||
/>
|
||||
<IntegrationHeader integration={glancesIntegration} categories={["System Monitoring"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: systemResourcesWidget
|
||||
}, {
|
||||
widget: healthMonitoringWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: systemResourcesWidget,
|
||||
},
|
||||
{
|
||||
widget: healthMonitoringWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: [],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: [],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,20 +1,17 @@
|
||||
---
|
||||
title: 'Gluetun'
|
||||
description: 'Connect Gluetun to Homarr as a VPN integration.'
|
||||
title: "Gluetun"
|
||||
description: "Connect Gluetun to Homarr as a VPN integration."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { gluetunIntegration } from '.';
|
||||
import { vpnWidget } from '@site/docs/widgets/vpn';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { gluetunIntegration } from ".";
|
||||
import { vpnWidget } from "@site/docs/widgets/vpn";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={gluetunIntegration}
|
||||
categories={['VPN', 'Network']}
|
||||
/>
|
||||
<IntegrationHeader integration={gluetunIntegration} categories={["VPN", "Network"]} />
|
||||
|
||||
[Gluetun](https://github.com/qdm12/gluetun) exposes a control server that Homarr can query to report the VPN tunnel
|
||||
status, DNS status, public IP address, and active provider details in the VPN widget.
|
||||
@@ -22,9 +19,11 @@ status, DNS status, public IP address, and active provider details in the VPN wi
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: vpnWidget,
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: vpnWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Setting up the Gluetun control server
|
||||
@@ -40,13 +39,20 @@ Refer to the [Gluetun control server documentation](https://github.com/qdm12/glu
|
||||
Gluetun's control server can be left unprotected or secured with either an API key or HTTP Basic authentication.
|
||||
Choose the option that matches how your Gluetun instance integration is set up.
|
||||
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: [],
|
||||
steps: [],
|
||||
},{
|
||||
credentials: ['username', 'password'],
|
||||
steps: [],
|
||||
},{
|
||||
credentials: ['apiKey'],
|
||||
steps: [],
|
||||
},,]} />
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: [],
|
||||
steps: [],
|
||||
},
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [],
|
||||
},
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
,
|
||||
]}
|
||||
/>
|
||||
@@ -1,33 +1,39 @@
|
||||
---
|
||||
title: 'Gotify'
|
||||
title: "Gotify"
|
||||
description: "Gotify is a simple, self-hosted server for sending and receiving messages in real time."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { notificationsWidget } from '@site/docs/widgets/notifications';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { gotifyIntegration } from '.';
|
||||
import { notificationsWidget } from "@site/docs/widgets/notifications";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { gotifyIntegration } from ".";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={gotifyIntegration}
|
||||
categories={['Notifications', 'Messaging']}
|
||||
/>
|
||||
<IntegrationHeader integration={gotifyIntegration} categories={["Notifications", "Messaging"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: notificationsWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: notificationsWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['username', 'password'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,45 +1,51 @@
|
||||
---
|
||||
title: 'Home Assistant'
|
||||
title: "Home Assistant"
|
||||
description: "Home Assistant is an open-source home automation platform that focuses on privacy and local control, allowing you to automate and control your smart home devices."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconBinaryTree } from "@tabler/icons-react";
|
||||
import { homeAssistantIntegration } from '.';
|
||||
import { smartHomeEntityStateWidget } from '@site/docs/widgets/smart-home-entity-state';
|
||||
import { smartHomeExecuteAutomationWidget } from '@site/docs/widgets/smart-home-execute-automation';
|
||||
import { homeAssistantIntegration } from ".";
|
||||
import { smartHomeEntityStateWidget } from "@site/docs/widgets/smart-home-entity-state";
|
||||
import { smartHomeExecuteAutomationWidget } from "@site/docs/widgets/smart-home-execute-automation";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={homeAssistantIntegration}
|
||||
categories={['Smart Home', 'Automation']}
|
||||
/>
|
||||
<IntegrationHeader integration={homeAssistantIntegration} categories={["Smart Home", "Automation"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: smartHomeEntityStateWidget
|
||||
}, {
|
||||
widget: smartHomeExecuteAutomationWidget,
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: smartHomeEntityStateWidget,
|
||||
},
|
||||
{
|
||||
widget: smartHomeExecuteAutomationWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [
|
||||
"Click on your profile in the bottom left corner of Home Assistant.",
|
||||
"Switch to the Security tab.",
|
||||
"Scroll down to the Long-lived access tokens section.",
|
||||
"Click on the Create Token button.",
|
||||
"Enter a name for the token (e.g., 'Homarr Integration') and click Create.",
|
||||
"Copy the generated token and paste it into the Homarr integration settings.",
|
||||
]
|
||||
}]} />
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,38 +1,44 @@
|
||||
---
|
||||
title: 'iCal'
|
||||
title: "iCal"
|
||||
description: "iCal is a standard for calendar data exchange, allowing users to share and manage calendar events across different platforms."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconZoomQuestion, IconChartBar, IconSearch } from "@tabler/icons-react";
|
||||
import { icalIntegration } from '.';
|
||||
import { calendarWidget } from '@site/docs/widgets/calendar';
|
||||
import { icalIntegration } from ".";
|
||||
import { calendarWidget } from "@site/docs/widgets/calendar";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={icalIntegration}
|
||||
categories={['Calendar']}
|
||||
/>
|
||||
<IntegrationHeader integration={icalIntegration} categories={["Calendar"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: calendarWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: calendarWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['url'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["url"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
## Using the iCal integration
|
||||
|
||||
The iCal integration allows you to add external calendars to Homarr. Any calendar that provides a public iCal URL can be integrated, such as Google Calendar, Apple Calendar, or Outlook.
|
||||
The iCal integration allows you to add external calendars to Homarr. Any calendar that provides a public iCal URL can be integrated, such as Google Calendar, Apple Calendar, or Outlook.
|
||||
@@ -1,36 +1,29 @@
|
||||
---
|
||||
title: 'Immich'
|
||||
title: "Immich"
|
||||
description: "Self-hosted photo and video management solution"
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { immichAlbumCarouselWidget } from '../../widgets/immich-album-carousel';import {
|
||||
IntegrationHeader
|
||||
} from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { immichIntegration } from '.';
|
||||
import { immichServerStatsWidget } from '../../widgets/immich-server-stats';
|
||||
import { immichAlbumCarouselWidget } from "../../widgets/immich-album-carousel";
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { immichIntegration } from ".";
|
||||
import { immichServerStatsWidget } from "../../widgets/immich-server-stats";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={immichIntegration}
|
||||
categories={['Photo server']}
|
||||
/>
|
||||
<IntegrationHeader integration={immichIntegration} categories={["Photo server"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: immichAlbumCarouselWidget },
|
||||
{ widget: immichServerStatsWidget }
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: immichAlbumCarouselWidget }, { widget: immichServerStatsWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [
|
||||
@@ -56,9 +49,10 @@ import { immichServerStatsWidget } from '../../widgets/immich-server-stats';
|
||||
<code>server.about</code>.
|
||||
<br />
|
||||
Additional permissions may be required depending on your Immich version. If you encounter authorization errors, grant any missing permissions requested by the server.
|
||||
|
||||
</span>
|
||||
|
||||
),
|
||||
'Create the integration in Homarr and copy the API key to there'
|
||||
]
|
||||
'Create the integration in Homarr and copy the API key to there'
|
||||
]
|
||||
}]} />
|
||||
@@ -1,40 +1,39 @@
|
||||
---
|
||||
title: 'Jellyfin'
|
||||
title: "Jellyfin"
|
||||
description: "Jellyfin is a free and open-source media server software that allows you to organize, manage, and share your media files."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconVideo, IconTicket } from "@tabler/icons-react";
|
||||
import { jellyfinIntegration } from '.';
|
||||
import { mediaServerWidget } from '@site/docs/widgets/media-server';
|
||||
import { mediaReleasesWidget } from '@site/docs/widgets/media-releases';
|
||||
import { jellyfinIntegration } from ".";
|
||||
import { mediaServerWidget } from "@site/docs/widgets/media-server";
|
||||
import { mediaReleasesWidget } from "@site/docs/widgets/media-releases";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={jellyfinIntegration}
|
||||
categories={['Media server']}
|
||||
/>
|
||||
<IntegrationHeader integration={jellyfinIntegration} categories={["Media server"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: mediaServerWidget },
|
||||
{ widget: mediaReleasesWidget }
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: mediaServerWidget }, { widget: mediaReleasesWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
},{
|
||||
credentials: ['username', 'password'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,45 +1,52 @@
|
||||
---
|
||||
title: 'Jellyseerr'
|
||||
title: "Jellyseerr"
|
||||
description: "Jellyseerr is a self-hosted media request management system that integrates with Jellyfin and other media servers."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconZoomQuestion, IconChartBar, IconSearch } from "@tabler/icons-react";
|
||||
import { jellyseerrIntegration } from '.';
|
||||
import { mediaRequestListWidget } from '@site/docs/widgets/media-request-list';
|
||||
import { mediaRequestStatsWidget } from '@site/docs/widgets/media-request-stats';
|
||||
import { jellyseerrIntegration } from ".";
|
||||
import { mediaRequestListWidget } from "@site/docs/widgets/media-request-list";
|
||||
import { mediaRequestStatsWidget } from "@site/docs/widgets/media-request-stats";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={jellyseerrIntegration}
|
||||
categories={['Media requests']}
|
||||
/>
|
||||
<IntegrationHeader integration={jellyseerrIntegration} categories={["Media requests"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: mediaRequestListWidget,
|
||||
},{
|
||||
widget: mediaRequestStatsWidget,
|
||||
}, {
|
||||
capability: {
|
||||
icon: IconSearch,
|
||||
name: "Media Search",
|
||||
description: "Search for movies and TV shows directly from Spotlight and request them.",
|
||||
path: "../../management/search-engines/#media-request-search"
|
||||
}
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: mediaRequestListWidget,
|
||||
},
|
||||
{
|
||||
widget: mediaRequestStatsWidget,
|
||||
},
|
||||
{
|
||||
capability: {
|
||||
icon: IconSearch,
|
||||
name: "Media Search",
|
||||
description: "Search for movies and TV shows directly from Spotlight and request them.",
|
||||
path: "../../management/search-engines/#media-request-search",
|
||||
},
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,20 +1,16 @@
|
||||
---
|
||||
title: 'Kubernetes'
|
||||
title: "Kubernetes"
|
||||
description: "Kubernetes is a powerful container orchestration platform that automates the deployment, scaling, and management of containerized applications."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconBrandDocker, IconTool } from "@tabler/icons-react";
|
||||
import { kubernetesIntegration } from '.';
|
||||
import { kubernetesIntegration } from ".";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={kubernetesIntegration}
|
||||
categories={['Containers']}
|
||||
/>
|
||||
<IntegrationHeader integration={kubernetesIntegration} categories={["Containers"]} />
|
||||
|
||||
Homarr provides a user-friendly Kubernetes dashboard that offers an overview of your cluster’s resources in a clear and structured interface. It allows users to view key Kubernetes objects, including `Pods`, `Services`, `Ingresses`, `Nodes`, `ConfigMaps`, `Secrets`, `Namespaces`, and `Volumes`, as well as basic metrics when the Kubernetes Metrics Server is enabled.
|
||||
|
||||
@@ -47,7 +43,7 @@ Enabling RBAC in the Helm chart creates the necessary Kubernetes Role-Based Acce
|
||||
- Service Account: A dedicated service account for Homarr.
|
||||
- Role & RoleBinding: Grants permissions within a specific namespace to list, watch, and get pods, services, secrets, configmaps, and more.
|
||||
- ClusterRole & ClusterRoleBinding: Extends the same permissions cluster-wide for additional flexibility.
|
||||
:::
|
||||
:::
|
||||
|
||||
### Homarr Dashboard Overview
|
||||
|
||||
|
||||
@@ -1,35 +1,40 @@
|
||||
---
|
||||
title: 'Lidarr'
|
||||
title: "Lidarr"
|
||||
description: "Lidarr is a music management tool that automates the process of downloading, sorting, and renaming music."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconCalendar } from "@tabler/icons-react";
|
||||
import { lidarrIntegration } from '.';
|
||||
import { calendarWidget } from '@site/docs/widgets/calendar';
|
||||
import { lidarrIntegration } from ".";
|
||||
import { calendarWidget } from "@site/docs/widgets/calendar";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={lidarrIntegration}
|
||||
categories={['Media manager', "Servarr"]}
|
||||
/>
|
||||
<IntegrationHeader integration={lidarrIntegration} categories={["Media manager", "Servarr"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: calendarWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: calendarWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,39 +1,38 @@
|
||||
---
|
||||
title: 'Navidrome'
|
||||
title: "Navidrome"
|
||||
description: "Navidrome is a self-hosted music server and streamer compatible with the Subsonic API."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { navidromeIntegration } from '.';
|
||||
import { audioStatsWidget } from '@site/docs/widgets/audio-stats';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { navidromeIntegration } from ".";
|
||||
import { audioStatsWidget } from "@site/docs/widgets/audio-stats";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={navidromeIntegration}
|
||||
categories={['Media']}
|
||||
/>
|
||||
<IntegrationHeader integration={navidromeIntegration} categories={["Media"]} />
|
||||
|
||||
Navidrome provides music library statistics including artist, album, and song counts, as well as now playing information via the Subsonic API.
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: audioStatsWidget },
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: audioStatsWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['username', 'password'],
|
||||
steps: [
|
||||
'Use the same credentials you use to log in to Navidrome',
|
||||
'The user must have access to the Subsonic API (enabled by default)',
|
||||
]
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [
|
||||
"Use the same credentials you use to log in to Navidrome",
|
||||
"The user must have access to the Subsonic API (enabled by default)",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,40 +1,43 @@
|
||||
---
|
||||
title: 'Nextcloud'
|
||||
title: "Nextcloud"
|
||||
description: "Nextcloud is a self-hosted productivity platform that provides file storage, collaboration tools, and more."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconCalendar } from "@tabler/icons-react";
|
||||
import Alert from '@theme/Admonition';
|
||||
import { nextcloudIntegration } from '.';
|
||||
import { calendarWidget } from '@site/docs/widgets/calendar';
|
||||
import { notificationsWidget } from '@site/docs/widgets/notifications';
|
||||
import Alert from "@theme/Admonition";
|
||||
import { nextcloudIntegration } from ".";
|
||||
import { calendarWidget } from "@site/docs/widgets/calendar";
|
||||
import { notificationsWidget } from "@site/docs/widgets/notifications";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={nextcloudIntegration}
|
||||
categories={['Calendar', 'Notifications']}
|
||||
/>
|
||||
<IntegrationHeader integration={nextcloudIntegration} categories={["Calendar", "Notifications"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: calendarWidget },
|
||||
{ widget: notificationsWidget }
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: calendarWidget }, { widget: notificationsWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['username', 'password'],
|
||||
steps: [],
|
||||
header: <Alert type="info">
|
||||
Users who use 2FA will have to use Nextcloud's App Password tool to grant Homarr access, as 2FA breaks the traditional process. For more information, see [Nextcloud's Documentation](https://docs.nextcloud.com/server/stable/admin_manual/configuration_user/authentication.html#app-passwords)
|
||||
</Alert>,
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [],
|
||||
header: (
|
||||
<Alert type="info">
|
||||
Users who use 2FA will have to use Nextcloud's App Password tool to grant Homarr access, as 2FA breaks the
|
||||
traditional process. For more information, see [Nextcloud's
|
||||
Documentation](https://docs.nextcloud.com/server/stable/admin_manual/configuration_user/authentication.html#app-passwords)
|
||||
</Alert>
|
||||
),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,37 +1,44 @@
|
||||
---
|
||||
title: 'Ntfy'
|
||||
title: "Ntfy"
|
||||
description: "Ntfy is a simple, open-source notification service that allows you to send and receive notifications across devices."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { notificationsWidget } from '@site/docs/widgets/notifications';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { notificationsWidget } from "@site/docs/widgets/notifications";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { IconMessage } from "@tabler/icons-react";
|
||||
import { ntfyIntegration } from '.';
|
||||
import { ntfyIntegration } from ".";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={ntfyIntegration}
|
||||
categories={['Notifications', 'Messaging']}
|
||||
/>
|
||||
<IntegrationHeader integration={ntfyIntegration} categories={["Notifications", "Messaging"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: notificationsWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: notificationsWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['topic'],
|
||||
steps: []
|
||||
}, {
|
||||
credentials: ['topic', 'apiKey'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["topic"],
|
||||
steps: [],
|
||||
},
|
||||
{
|
||||
credentials: ["topic", "apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,36 +1,41 @@
|
||||
---
|
||||
title: 'NZBGet'
|
||||
title: "NZBGet"
|
||||
description: "NZBGet is a lightweight and efficient Usenet downloader."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconDownload } from "@tabler/icons-react";
|
||||
import { nzbgetIntegration } from '.';
|
||||
import Alert from '@theme/Admonition';
|
||||
import { downloadsWidget } from '@site/docs/widgets/downloads';
|
||||
import { nzbgetIntegration } from ".";
|
||||
import Alert from "@theme/Admonition";
|
||||
import { downloadsWidget } from "@site/docs/widgets/downloads";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={nzbgetIntegration}
|
||||
categories={['Usenet client']}
|
||||
/>
|
||||
<IntegrationHeader integration={nzbgetIntegration} categories={["Usenet client"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: downloadsWidget,
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: downloadsWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['username', 'password'],
|
||||
steps: [],
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,42 +1,52 @@
|
||||
---
|
||||
title: 'Open Media Vault'
|
||||
title: "Open Media Vault"
|
||||
description: "Open Media Vault is a free network-attached storage server based on the Debian operating system."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconHeartRateMonitor } from "@tabler/icons-react";
|
||||
import { openMediaVaultIntegration } from '.';
|
||||
import Alert from '@theme/Admonition'
|
||||
import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
|
||||
import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
|
||||
import { openMediaVaultIntegration } from ".";
|
||||
import Alert from "@theme/Admonition";
|
||||
import { healthMonitoringWidget } from "@site/docs/widgets/health-monitoring";
|
||||
import { systemResourcesWidget } from "@site/docs/widgets/system-resources";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={openMediaVaultIntegration}
|
||||
categories={['System monitoring']}
|
||||
/>
|
||||
<IntegrationHeader integration={openMediaVaultIntegration} categories={["System monitoring"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: healthMonitoringWidget,
|
||||
note: "To use this widget, you must have the OpenMediaVault plugin openmediavault-cputemp installed.",
|
||||
}, {
|
||||
widget: systemResourcesWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: healthMonitoringWidget,
|
||||
note: "To use this widget, you must have the OpenMediaVault plugin openmediavault-cputemp installed.",
|
||||
},
|
||||
{
|
||||
widget: systemResourcesWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['username', 'password'],
|
||||
steps: [],
|
||||
body: <Alert type="caution">
|
||||
The user used here must have administrative permissions or Homarr won't be able to read the system performance and resource data.
|
||||
</Alert>
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [],
|
||||
body: (
|
||||
<Alert type="caution">
|
||||
The user used here must have administrative permissions or Homarr won't be able to read the system performance
|
||||
and resource data.
|
||||
</Alert>
|
||||
),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,65 +1,75 @@
|
||||
---
|
||||
title: 'OPNsense'
|
||||
title: "OPNsense"
|
||||
description: "OPNsense is an open-source, easy-to-use, and easy-to-build firewall and routing platform."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconHeartRateMonitor } from "@tabler/icons-react";
|
||||
import { opnsenseIntegration } from '.';
|
||||
import Alert from '@theme/Admonition'
|
||||
import { firewallWidget } from '../../widgets/firewall';
|
||||
import { opnsenseIntegration } from ".";
|
||||
import Alert from "@theme/Admonition";
|
||||
import { firewallWidget } from "../../widgets/firewall";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={opnsenseIntegration}
|
||||
categories={['Firewall']}
|
||||
/>
|
||||
<IntegrationHeader integration={opnsenseIntegration} categories={["Firewall"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: firewallWidget,
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: firewallWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
tabLabel: "ApiKey (Key & Secret)",
|
||||
credentials: ['opnsenseApiKey', 'opnsenseApiSecret'],
|
||||
header: <Alert type="info">
|
||||
This integration does not require full API access to the firewall. The following guide outlines the process for creating a restricted OPNsense user with a scrambled password, designed exclusively for API access. This ensures minimal permissions and prevents local login capability.
|
||||
</Alert>,
|
||||
steps: [
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
tabLabel: "ApiKey (Key & Secret)",
|
||||
credentials: ["opnsenseApiKey", "opnsenseApiSecret"],
|
||||
header: (
|
||||
<Alert type="info">
|
||||
This integration does not require full API access to the firewall. The following guide outlines the process
|
||||
for creating a restricted OPNsense user with a scrambled password, designed exclusively for API access. This
|
||||
ensures minimal permissions and prevents local login capability.
|
||||
</Alert>
|
||||
),
|
||||
steps: [
|
||||
"Log in to the OPNsense web interface as an administrator",
|
||||
"Navigate to System → Access → Users",
|
||||
"Click the + (Add) button to create a new user",
|
||||
<>
|
||||
Fill in the user details:
|
||||
<ul>
|
||||
<li>Username: Enter a unique name</li>
|
||||
<li>Password: Leave empty</li>
|
||||
<li>Scrambled Password: Enable this option</li>
|
||||
<li>Full name: (Optional) Add a descriptive name</li>
|
||||
</ul>
|
||||
Fill in the user details:
|
||||
<ul>
|
||||
<li>Username: Enter a unique name</li>
|
||||
<li>Password: Leave empty</li>
|
||||
<li>Scrambled Password: Enable this option</li>
|
||||
<li>Full name: (Optional) Add a descriptive name</li>
|
||||
</ul>
|
||||
</>,
|
||||
<>
|
||||
In Privileges section → Select the option below:
|
||||
<ul>
|
||||
<li>Lobby: Dashboard</li>
|
||||
<li>Reporting: Traffic</li>
|
||||
</ul>
|
||||
In Privileges section → Select the option below:
|
||||
<ul>
|
||||
<li>Lobby: Dashboard</li>
|
||||
<li>Reporting: Traffic</li>
|
||||
</ul>
|
||||
</>,
|
||||
"Click Save",
|
||||
"Return to the Users list",
|
||||
"Find the user and click the ticket icon in the Commands column",
|
||||
"Click Yes in the popup to confirm",
|
||||
"A txt file will download automatically, containing: Key and Secret",
|
||||
"Save this file securely—this information will only be shown once"
|
||||
],
|
||||
}]} />
|
||||
"Save this file securely—this information will only be shown once",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,45 +1,52 @@
|
||||
---
|
||||
title: 'Overseerr'
|
||||
title: "Overseerr"
|
||||
description: "Overseerr is a self-hosted media request management system that integrates with Plex."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconZoomQuestion, IconChartBar, IconSearch } from "@tabler/icons-react";
|
||||
import { overseerrIntegration } from '.';
|
||||
import { mediaRequestListWidget } from '@site/docs/widgets/media-request-list';
|
||||
import { mediaRequestStatsWidget } from '@site/docs/widgets/media-request-stats';
|
||||
import { overseerrIntegration } from ".";
|
||||
import { mediaRequestListWidget } from "@site/docs/widgets/media-request-list";
|
||||
import { mediaRequestStatsWidget } from "@site/docs/widgets/media-request-stats";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={overseerrIntegration}
|
||||
categories={['Media requests']}
|
||||
/>
|
||||
<IntegrationHeader integration={overseerrIntegration} categories={["Media requests"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: mediaRequestListWidget
|
||||
}, {
|
||||
widget: mediaRequestStatsWidget
|
||||
}, {
|
||||
capability: {
|
||||
icon: IconSearch,
|
||||
name: "Media Search",
|
||||
description: "Search for movies and TV shows directly from Spotlight and request them.",
|
||||
path: "../../management/search-engines/#media-request-search"
|
||||
}
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: mediaRequestListWidget,
|
||||
},
|
||||
{
|
||||
widget: mediaRequestStatsWidget,
|
||||
},
|
||||
{
|
||||
capability: {
|
||||
icon: IconSearch,
|
||||
name: "Media Search",
|
||||
description: "Search for movies and TV shows directly from Spotlight and request them.",
|
||||
path: "../../management/search-engines/#media-request-search",
|
||||
},
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,41 +1,40 @@
|
||||
---
|
||||
title: 'Paperless-ngx'
|
||||
title: "Paperless-ngx"
|
||||
description: "Paperless-ngx is a document management system that transforms your physical documents into a searchable online archive."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { paperlessNgxIntegration } from '.';
|
||||
import { paperlessNgxWidget } from '@site/docs/widgets/paperless-ngx';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { paperlessNgxIntegration } from ".";
|
||||
import { paperlessNgxWidget } from "@site/docs/widgets/paperless-ngx";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={paperlessNgxIntegration}
|
||||
categories={['Documents']}
|
||||
/>
|
||||
<IntegrationHeader integration={paperlessNgxIntegration} categories={["Documents"]} />
|
||||
|
||||
Paperless-ngx provides document statistics including total documents, inbox count, correspondents, tags, and document types.
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: paperlessNgxWidget },
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: paperlessNgxWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [
|
||||
'Open your Paperless-ngx instance',
|
||||
'Navigate to Settings → Django Admin → Tokens',
|
||||
'Create a new token for your user',
|
||||
'Copy the token value',
|
||||
]
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [
|
||||
"Open your Paperless-ngx instance",
|
||||
"Navigate to Settings → Django Admin → Tokens",
|
||||
"Create a new token for your user",
|
||||
"Copy the token value",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,43 +1,42 @@
|
||||
---
|
||||
title: 'PatchMon'
|
||||
title: "PatchMon"
|
||||
description: "PatchMon is a patch management and monitoring solution for Linux hosts."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { patchmonIntegration } from '.';
|
||||
import { patchmonWidget } from '@site/docs/widgets/patchmon';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { patchmonIntegration } from ".";
|
||||
import { patchmonWidget } from "@site/docs/widgets/patchmon";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={patchmonIntegration}
|
||||
categories={['Health Monitoring']}
|
||||
/>
|
||||
<IntegrationHeader integration={patchmonIntegration} categories={["Health Monitoring"]} />
|
||||
|
||||
PatchMon provides host and package update statistics including total hosts, hosts needing updates, and security update counts.
|
||||
|
||||
The PatchMon widget requires users to be **signed in to Homarr**; see the [PatchMon widget documentation](/docs/widgets/patchmon#authentication) for details on authentication and public boards.
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: patchmonWidget },
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: patchmonWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['patchmonApiKey', 'patchmonApiSecret'],
|
||||
steps: [
|
||||
'Open your PatchMon instance',
|
||||
'Navigate to Settings and create a new GetHomepage API key',
|
||||
'Copy the API key and secret from the success dialog',
|
||||
'Paste them into Homarr — Basic authentication is handled automatically',
|
||||
]
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["patchmonApiKey", "patchmonApiSecret"],
|
||||
steps: [
|
||||
"Open your PatchMon instance",
|
||||
"Navigate to Settings and create a new GetHomepage API key",
|
||||
"Copy the API key and secret from the success dialog",
|
||||
"Paste them into Homarr — Basic authentication is handled automatically",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,48 +1,53 @@
|
||||
---
|
||||
title: 'PeaNUT'
|
||||
description: 'A tiny dashboard for Network UPS Tools (NUT) servers.'
|
||||
title: "PeaNUT"
|
||||
description: "A tiny dashboard for Network UPS Tools (NUT) servers."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { peaNutIntegration } from '.';
|
||||
import { upsWidget } from '@site/docs/widgets/ups';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { peaNutIntegration } from ".";
|
||||
import { upsWidget } from "@site/docs/widgets/ups";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={peaNutIntegration}
|
||||
categories={['UPS', 'Hardware']}
|
||||
/>
|
||||
<IntegrationHeader integration={peaNutIntegration} categories={["UPS", "Hardware"]} />
|
||||
|
||||
[PeaNUT](https://github.com/Brandawg93/PeaNUT) exposes the data of your [Network UPS Tools](https://networkupstools.org/) servers
|
||||
over a REST API, which Homarr reads to display the status of your UPS devices.
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
items={[
|
||||
{
|
||||
widget: upsWidget,
|
||||
}]}
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
|
||||
PeaNUT secures its API with HTTP Basic authentication when the `WEB_USERNAME` and `WEB_PASSWORD` environment variables
|
||||
are set on the PeaNUT instance. Provide the same credentials here. If the instance runs with `AUTH_DISABLED=true`, no
|
||||
secrets are required.
|
||||
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['username', 'password'],
|
||||
steps: [
|
||||
"Set WEB_USERNAME and WEB_PASSWORD on your PeaNUT instance.",
|
||||
"Create an integration in Homarr with the PeaNUT URL and those credentials.",
|
||||
],
|
||||
},{
|
||||
credentials: [],
|
||||
steps: [
|
||||
"If PeaNUT runs with AUTH_DISABLED=true, create the integration with no credentials.",
|
||||
],
|
||||
}]} />
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [
|
||||
"Set WEB_USERNAME and WEB_PASSWORD on your PeaNUT instance.",
|
||||
"Create an integration in Homarr with the PeaNUT URL and those credentials.",
|
||||
],
|
||||
},
|
||||
{
|
||||
credentials: [],
|
||||
steps: ["If PeaNUT runs with AUTH_DISABLED=true, create the integration with no credentials."],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,47 +1,54 @@
|
||||
---
|
||||
title: 'Pi-hole'
|
||||
title: "Pi-hole"
|
||||
description: "Pi-hole is a network-wide ad blocker that acts as a DNS sinkhole, blocking unwanted content and improving your browsing experience."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconAd, IconDeviceGamepad } from "@tabler/icons-react";
|
||||
import Alert from '@theme/Admonition';
|
||||
import { dnsHoleSummaryWidget } from '@site/docs/widgets/dns-hole-summary';
|
||||
import { dnsHoleControlsWidget } from '@site/docs/widgets/dns-hole-controls';
|
||||
import { piHoleIntegration } from '.';
|
||||
import Alert from "@theme/Admonition";
|
||||
import { dnsHoleSummaryWidget } from "@site/docs/widgets/dns-hole-summary";
|
||||
import { dnsHoleControlsWidget } from "@site/docs/widgets/dns-hole-controls";
|
||||
import { piHoleIntegration } from ".";
|
||||
|
||||
<IntegrationHeader integration={piHoleIntegration} categories={["DNS Hole"]} />
|
||||
|
||||
<IntegrationHeader
|
||||
integration={piHoleIntegration}
|
||||
categories={['DNS Hole']}
|
||||
/>
|
||||
|
||||
<Alert type="note" className='my-2'>
|
||||
Homarr supports both Pi-hole v5 and v6. It automatically detects the version and uses the correct API.
|
||||
<Alert type="note" className="my-2">
|
||||
Homarr supports both Pi-hole v5 and v6. It automatically detects the version and uses the correct API.
|
||||
</Alert>
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: dnsHoleSummaryWidget,
|
||||
},{
|
||||
widget: dnsHoleControlsWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: dnsHoleSummaryWidget,
|
||||
},
|
||||
{
|
||||
widget: dnsHoleControlsWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [],
|
||||
body: "Please note, that in v6 of Pi-hole you no longer specify an API key, but instead either a password or application password. We suggest to use the application password when possible."
|
||||
}, {
|
||||
credentials: [],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
body: "Please note, that in v6 of Pi-hole you no longer specify an API key, but instead either a password or application password. We suggest to use the application password when possible.",
|
||||
},
|
||||
{
|
||||
credentials: [],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,41 +1,47 @@
|
||||
---
|
||||
title: 'Plex'
|
||||
title: "Plex"
|
||||
description: "Plex is a media server platform that allows you to organize, manage, and stream your personal media collection."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconVideo, IconTicket } from "@tabler/icons-react";
|
||||
import { plexIntegration } from '.';
|
||||
import { mediaServerWidget } from '@site/docs/widgets/media-server';
|
||||
import { mediaReleasesWidget } from '@site/docs/widgets/media-releases';
|
||||
import { plexIntegration } from ".";
|
||||
import { mediaServerWidget } from "@site/docs/widgets/media-server";
|
||||
import { mediaReleasesWidget } from "@site/docs/widgets/media-releases";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={plexIntegration}
|
||||
categories={['Media server']}
|
||||
/>
|
||||
<IntegrationHeader integration={plexIntegration} categories={["Media server"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: mediaServerWidget },
|
||||
{ widget: mediaReleasesWidget }
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: mediaServerWidget }, { widget: mediaReleasesWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [
|
||||
<span>
|
||||
Follow the official <a href="https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/" target="_blank" rel="noopener noreferrer">Plex documentation</a> to find your authentication token.
|
||||
</span>
|
||||
]
|
||||
}]} />
|
||||
Follow the official{" "}
|
||||
<a
|
||||
href="https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Plex documentation
|
||||
</a>{" "}
|
||||
to find your authentication token.
|
||||
</span>,
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,32 +1,34 @@
|
||||
---
|
||||
title: 'Prowlarr'
|
||||
title: "Prowlarr"
|
||||
description: "Prowlarr is an indexer manager for Usenet and BitTorrent, providing a unified interface to manage your indexers."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconHeartRateMonitor } from "@tabler/icons-react";
|
||||
import { prowlarrIntegration } from '.';
|
||||
import { indexerManagerWidget } from '@site/docs/widgets/indexer-manager';
|
||||
import { prowlarrIntegration } from ".";
|
||||
import { indexerManagerWidget } from "@site/docs/widgets/indexer-manager";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={prowlarrIntegration}
|
||||
categories={['Indexer']}
|
||||
/>
|
||||
<IntegrationHeader integration={prowlarrIntegration} categories={["Indexer"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: indexerManagerWidget }]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: indexerManagerWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,103 +1,107 @@
|
||||
---
|
||||
title: 'Proxmox'
|
||||
title: "Proxmox"
|
||||
description: "Proxmox is a powerful open-source virtualization platform that allows you to run virtual machines and containers."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconHeartRateMonitor } from "@tabler/icons-react";
|
||||
import { proxmoxIntegration } from '.';
|
||||
import Alert from '@theme/Admonition'
|
||||
import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
|
||||
import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
|
||||
import { proxmoxIntegration } from ".";
|
||||
import Alert from "@theme/Admonition";
|
||||
import { healthMonitoringWidget } from "@site/docs/widgets/health-monitoring";
|
||||
import { systemResourcesWidget } from "@site/docs/widgets/system-resources";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={proxmoxIntegration}
|
||||
categories={['System monitoring']}
|
||||
/>
|
||||
<IntegrationHeader integration={proxmoxIntegration} categories={["System monitoring"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: healthMonitoringWidget },
|
||||
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: healthMonitoringWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
header: <Alert type="caution">
|
||||
The Proxmox API may not work with Linux PAM standard authentication. It is strongly recommended to use the Proxmox VE authentication server realm when creating your API user.
|
||||
</Alert>,
|
||||
credentials: ['username', 'tokenId', 'realm', 'apiKey'],
|
||||
steps: [
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
header: (
|
||||
<Alert type="caution">
|
||||
The Proxmox API may not work with Linux PAM standard authentication. It is strongly recommended to use the
|
||||
Proxmox VE authentication server realm when creating your API user.
|
||||
</Alert>
|
||||
),
|
||||
credentials: ["username", "tokenId", "realm", "apiKey"],
|
||||
steps: [
|
||||
"Navigate to the Proxmox portal, click on Datacenter",
|
||||
"Expand Permissions, click on Groups",
|
||||
"Click the Create button",
|
||||
"Name the group something informative, like api-users",
|
||||
"Click on the Permissions 'folder'",
|
||||
<>
|
||||
Click Add {"->"} Group Permission
|
||||
<ul>
|
||||
<li>Path: /</li>
|
||||
<li>Group: group from Step 4 above</li>
|
||||
<li>Role: PVEAuditor</li>
|
||||
<li>Propagate: Checked</li>
|
||||
</ul>
|
||||
Click Add {"->"} Group Permission
|
||||
<ul>
|
||||
<li>Path: /</li>
|
||||
<li>Group: group from Step 4 above</li>
|
||||
<li>Role: PVEAuditor</li>
|
||||
<li>Propagate: Checked</li>
|
||||
</ul>
|
||||
</>,
|
||||
"Expand Permissions, click on Users",
|
||||
<>
|
||||
Click the Add button
|
||||
<ul>
|
||||
<li>User name: something informative like api</li>
|
||||
<li>Realm: Proxmox VE authentication server</li>
|
||||
<li>Password: create a secure password for the user</li>
|
||||
<li>Confirm Password: re-enter the password</li>
|
||||
<li>Group: group from Step 4 above</li>
|
||||
</ul>
|
||||
Click the Add button
|
||||
<ul>
|
||||
<li>User name: something informative like api</li>
|
||||
<li>Realm: Proxmox VE authentication server</li>
|
||||
<li>Password: create a secure password for the user</li>
|
||||
<li>Confirm Password: re-enter the password</li>
|
||||
<li>Group: group from Step 4 above</li>
|
||||
</ul>
|
||||
</>,
|
||||
"Expand Permissions, click on API Tokens",
|
||||
<>
|
||||
Click the Add button
|
||||
<ul>
|
||||
<li>User: user from Step 8 above</li>
|
||||
<li>Token ID: something informative like the application or purpose like homarr</li>
|
||||
<li>Privilege Separation: unchecked</li>
|
||||
</ul>
|
||||
Click the Add button
|
||||
<ul>
|
||||
<li>User: user from Step 8 above</li>
|
||||
<li>Token ID: something informative like the application or purpose like homarr</li>
|
||||
<li>Privilege Separation: unchecked</li>
|
||||
</ul>
|
||||
</>,
|
||||
"Copy the Secret that is shown in Step 10 because it is only shown once",
|
||||
"Go back to the 'Permissions' menu",
|
||||
<>
|
||||
Click Add {"->"} API Token Permission
|
||||
<ul>
|
||||
<li>Path: /</li>
|
||||
<li>API Token: select the API token created in Step 10</li>
|
||||
<li>Role: PVE Auditor</li>
|
||||
<li>Propagate: Checked</li>
|
||||
</ul>
|
||||
Click Add {"->"} API Token Permission
|
||||
<ul>
|
||||
<li>Path: /</li>
|
||||
<li>API Token: select the API token created in Step 10</li>
|
||||
<li>Role: PVE Auditor</li>
|
||||
<li>Propagate: Checked</li>
|
||||
</ul>
|
||||
</>,
|
||||
],
|
||||
body: <>
|
||||
<span>
|
||||
Sometimes you'll also find the <code>api@pve!homarr</code> format,
|
||||
within Homarr you'll have to split it up into:
|
||||
</span>
|
||||
<ul>
|
||||
],
|
||||
body: (
|
||||
<>
|
||||
<span>
|
||||
Sometimes you'll also find the <code>api@pve!homarr</code> format, within Homarr you'll have to split it up
|
||||
into:
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
<b>Username:</b> api
|
||||
<b>Username:</b> api
|
||||
</li>
|
||||
<li>
|
||||
<b>Realm:</b> pve
|
||||
<b>Realm:</b> pve
|
||||
</li>
|
||||
<li>
|
||||
<b>Token ID:</b> homarr
|
||||
<b>Token ID:</b> homarr
|
||||
</li>
|
||||
</ul>
|
||||
</>
|
||||
}]} />
|
||||
</ul>
|
||||
</>
|
||||
),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,37 +1,39 @@
|
||||
---
|
||||
title: 'qBittorrent'
|
||||
title: "qBittorrent"
|
||||
description: "qBittorrent is a free and open-source BitTorrent client."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconDownload } from "@tabler/icons-react";
|
||||
import { qBittorentIntegration } from '.';
|
||||
import Alert from '@theme/Admonition';
|
||||
import { downloadsWidget } from '@site/docs/widgets/downloads';
|
||||
import { qBittorentIntegration } from ".";
|
||||
import Alert from "@theme/Admonition";
|
||||
import { downloadsWidget } from "@site/docs/widgets/downloads";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={qBittorentIntegration}
|
||||
categories={['Torrent client']}
|
||||
/>
|
||||
<IntegrationHeader integration={qBittorentIntegration} categories={["Torrent client"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: downloadsWidget }]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: downloadsWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
},{
|
||||
credentials: ['username', 'password'],
|
||||
steps: [],
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,33 +1,34 @@
|
||||
---
|
||||
title: 'Radarr'
|
||||
title: "Radarr"
|
||||
description: "Radarr is a movie management tool that automates the process of downloading, sorting, and renaming movies."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconCalendar } from "@tabler/icons-react";
|
||||
import { radarrIntegration } from '.';
|
||||
import { calendarWidget } from '@site/docs/widgets/calendar';
|
||||
import { radarrIntegration } from ".";
|
||||
import { calendarWidget } from "@site/docs/widgets/calendar";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={radarrIntegration}
|
||||
categories={['Media manager', "Servarr"]}
|
||||
/>
|
||||
<IntegrationHeader integration={radarrIntegration} categories={["Media manager", "Servarr"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: calendarWidget }]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: calendarWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,33 +1,34 @@
|
||||
---
|
||||
title: 'Readarr'
|
||||
title: "Readarr"
|
||||
description: "Readarr is a book management tool that automates the process of downloading, sorting, and renaming books."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconCalendar } from "@tabler/icons-react";
|
||||
import { readarrIntegration } from '.';
|
||||
import { calendarWidget } from '@site/docs/widgets/calendar';
|
||||
import { readarrIntegration } from ".";
|
||||
import { calendarWidget } from "@site/docs/widgets/calendar";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={readarrIntegration}
|
||||
categories={['Media manager', "Servarr"]}
|
||||
/>
|
||||
<IntegrationHeader integration={readarrIntegration} categories={["Media manager", "Servarr"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: calendarWidget }]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: calendarWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,34 +1,35 @@
|
||||
---
|
||||
title: 'SABnzbd'
|
||||
title: "SABnzbd"
|
||||
description: "SABnzbd is an Open Source Binary Newsreader."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconDownload } from "@tabler/icons-react";
|
||||
import { sabnzbdIntegration } from '.';
|
||||
import Alert from '@theme/Admonition';
|
||||
import { downloadsWidget } from '@site/docs/widgets/downloads';
|
||||
import { sabnzbdIntegration } from ".";
|
||||
import Alert from "@theme/Admonition";
|
||||
import { downloadsWidget } from "@site/docs/widgets/downloads";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={sabnzbdIntegration}
|
||||
categories={['Usenet client']}
|
||||
/>
|
||||
<IntegrationHeader integration={sabnzbdIntegration} categories={["Usenet client"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: downloadsWidget}]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: downloadsWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [],
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,45 +1,52 @@
|
||||
---
|
||||
title: 'Seerr'
|
||||
title: "Seerr"
|
||||
description: "Seerr is a self-hosted media request management system that integrates with various media servers."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconZoomQuestion, IconChartBar, IconSearch } from "@tabler/icons-react";
|
||||
import { seerrIntegration } from '.';
|
||||
import { mediaRequestListWidget } from '@site/docs/widgets/media-request-list';
|
||||
import { mediaRequestStatsWidget } from '@site/docs/widgets/media-request-stats';
|
||||
import { seerrIntegration } from ".";
|
||||
import { mediaRequestListWidget } from "@site/docs/widgets/media-request-list";
|
||||
import { mediaRequestStatsWidget } from "@site/docs/widgets/media-request-stats";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={seerrIntegration}
|
||||
categories={['Media requests']}
|
||||
/>
|
||||
<IntegrationHeader integration={seerrIntegration} categories={["Media requests"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: mediaRequestListWidget
|
||||
}, {
|
||||
widget: mediaRequestStatsWidget
|
||||
}, {
|
||||
capability: {
|
||||
icon: IconSearch,
|
||||
name: "Media Search",
|
||||
description: "Search for movies and TV shows directly from Spotlight and request them.",
|
||||
path: "../../management/search-engines/#media-request-search"
|
||||
}
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: mediaRequestListWidget,
|
||||
},
|
||||
{
|
||||
widget: mediaRequestStatsWidget,
|
||||
},
|
||||
{
|
||||
capability: {
|
||||
icon: IconSearch,
|
||||
name: "Media Search",
|
||||
description: "Search for movies and TV shows directly from Spotlight and request them.",
|
||||
path: "../../management/search-engines/#media-request-search",
|
||||
},
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,34 +1,39 @@
|
||||
---
|
||||
title: 'Slskd'
|
||||
title: "Slskd"
|
||||
description: "A modern client-server application for the Soulseek file sharing network."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { slskdIntegration } from '.';
|
||||
import { downloadsWidget } from '@site/docs/widgets/downloads';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { slskdIntegration } from ".";
|
||||
import { downloadsWidget } from "@site/docs/widgets/downloads";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={slskdIntegration}
|
||||
categories={['System Monitoring']}
|
||||
/>
|
||||
<IntegrationHeader integration={slskdIntegration} categories={["System Monitoring"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: downloadsWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: downloadsWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ["apiKey"],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,33 +1,34 @@
|
||||
---
|
||||
title: 'Sonarr'
|
||||
title: "Sonarr"
|
||||
description: "Sonarr is a TV series management tool that automates the process of downloading, sorting, and renaming episodes."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconCalendar } from "@tabler/icons-react";
|
||||
import { sonarrIntegration } from '.';
|
||||
import { calendarWidget } from '@site/docs/widgets/calendar';
|
||||
import { sonarrIntegration } from ".";
|
||||
import { calendarWidget } from "@site/docs/widgets/calendar";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={sonarrIntegration}
|
||||
categories={['Media manager', "Servarr"]}
|
||||
/>
|
||||
<IntegrationHeader integration={sonarrIntegration} categories={["Media manager", "Servarr"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: calendarWidget }]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: calendarWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,34 +1,39 @@
|
||||
---
|
||||
title: 'Speedtest Tracker'
|
||||
description: 'Speedtest Tracker is a self-hosted internet performance tracking application.'
|
||||
title: "Speedtest Tracker"
|
||||
description: "Speedtest Tracker is a self-hosted internet performance tracking application."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { speedtestTrackerIntegration } from '.';
|
||||
import { speedtestTrackerWidget } from '@site/docs/widgets/speedtest-tracker';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { speedtestTrackerIntegration } from ".";
|
||||
import { speedtestTrackerWidget } from "@site/docs/widgets/speedtest-tracker";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={speedtestTrackerIntegration}
|
||||
categories={['Speedtest']}
|
||||
/>
|
||||
<IntegrationHeader integration={speedtestTrackerIntegration} categories={["Speedtest"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: speedtestTrackerWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: speedtestTrackerWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -19,11 +19,7 @@ import Alert from "@theme/Admonition";
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: healthMonitoringWidget },
|
||||
{ widget: systemResourcesWidget },
|
||||
{ widget: systemDisksWidget },
|
||||
]}
|
||||
items={[{ widget: healthMonitoringWidget }, { widget: systemResourcesWidget }, { widget: systemDisksWidget }]}
|
||||
/>
|
||||
|
||||
### Supported metrics
|
||||
|
||||
@@ -1,36 +1,38 @@
|
||||
---
|
||||
title: 'Tdarr'
|
||||
title: "Tdarr"
|
||||
description: "Tdarr is a distributed media transcoding system that allows you to process and optimize your media files across multiple nodes."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconTransform } from "@tabler/icons-react";
|
||||
import { tdarrIntegration } from '.';
|
||||
import { mediaTranscodingWidget } from '@site/docs/widgets/media-transcoding';
|
||||
import { tdarrIntegration } from ".";
|
||||
import { mediaTranscodingWidget } from "@site/docs/widgets/media-transcoding";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={tdarrIntegration}
|
||||
categories={['Media Transcoding']}
|
||||
/>
|
||||
<IntegrationHeader integration={tdarrIntegration} categories={["Media Transcoding"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: mediaTranscodingWidget }]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: mediaTranscodingWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: []
|
||||
}, {
|
||||
credentials: [],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [],
|
||||
},
|
||||
{
|
||||
credentials: [],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,62 +1,72 @@
|
||||
---
|
||||
title: 'Technitium DNS'
|
||||
title: "Technitium DNS"
|
||||
description: "Technitium DNS Server is a self-hosted DNS server with ad-blocking and network-wide filtering capabilities."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import Alert from '@theme/Admonition';
|
||||
import { technitiumDnsIntegration } from '.';
|
||||
import { dnsHoleSummaryWidget } from '@site/docs/widgets/dns-hole-summary';
|
||||
import { dnsHoleControlsWidget } from '@site/docs/widgets/dns-hole-controls';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import Alert from "@theme/Admonition";
|
||||
import { technitiumDnsIntegration } from ".";
|
||||
import { dnsHoleSummaryWidget } from "@site/docs/widgets/dns-hole-summary";
|
||||
import { dnsHoleControlsWidget } from "@site/docs/widgets/dns-hole-controls";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={technitiumDnsIntegration}
|
||||
categories={['DNS Hole']}
|
||||
/>
|
||||
<IntegrationHeader integration={technitiumDnsIntegration} categories={["DNS Hole"]} />
|
||||
|
||||
<Alert type="note" className='my-2'>
|
||||
Homarr supports Technitium DNS v11 and above. The correct API version is detected automatically - no manual configuration is required.
|
||||
<Alert type="note" className="my-2">
|
||||
Homarr supports Technitium DNS v11 and above. The correct API version is detected automatically - no manual
|
||||
configuration is required.
|
||||
</Alert>
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[{
|
||||
widget: dnsHoleSummaryWidget,
|
||||
},{
|
||||
widget: dnsHoleControlsWidget
|
||||
}]}
|
||||
items={[
|
||||
{
|
||||
widget: dnsHoleSummaryWidget,
|
||||
},
|
||||
{
|
||||
widget: dnsHoleControlsWidget,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
|
||||
<Alert type="info" className='my-2'>
|
||||
The **API token** option is recommended. API tokens are non-expiring and do not require storing your admin password in Homarr.
|
||||
Username and password authentication uses a session token that expires after inactivity, triggering a silent re-login on the next request.
|
||||
<Alert type="info" className="my-2">
|
||||
The **API token** option is recommended. API tokens are non-expiring and do not require storing your admin password in
|
||||
Homarr. Username and password authentication uses a session token that expires after inactivity, triggering a silent
|
||||
re-login on the next request.
|
||||
</Alert>
|
||||
|
||||
<Alert type="warning" className='my-2'>
|
||||
The **DNS Hole Controls** widget (enabling, disabling, and timed disabling of blocking) requires the token to have settings-level permissions.
|
||||
The **DNS Hole Summary** widget (stats only) works with any valid token.
|
||||
If Homarr cannot read the blocking status due to insufficient permissions, the status indicator will be hidden but statistics will still be shown.
|
||||
<Alert type="warning" className="my-2">
|
||||
The **DNS Hole Controls** widget (enabling, disabling, and timed disabling of blocking) requires the token to have
|
||||
settings-level permissions. The **DNS Hole Summary** widget (stats only) works with any valid token. If Homarr cannot
|
||||
read the blocking status due to insufficient permissions, the status indicator will be hidden but statistics will
|
||||
still be shown.
|
||||
</Alert>
|
||||
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [
|
||||
"Open the Technitium DNS web console and sign in.",
|
||||
"Click on your username in the top-right corner and select \"Create API Token\".",
|
||||
"Give the token a name (e.g. \"Homarr\") and click \"Create Token\".",
|
||||
"Copy the generated token and paste it into the API Key field in Homarr."
|
||||
]
|
||||
}, {
|
||||
credentials: ['username', 'password'],
|
||||
steps: [],
|
||||
body: "Enter your Technitium DNS admin credentials. Homarr will exchange them for a session token and transparently re-authenticate when the session expires."
|
||||
}]} />
|
||||
'Click on your username in the top-right corner and select "Create API Token".',
|
||||
'Give the token a name (e.g. "Homarr") and click "Create Token".',
|
||||
"Copy the generated token and paste it into the API Key field in Homarr.",
|
||||
],
|
||||
},
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [],
|
||||
body: "Enter your Technitium DNS admin credentials. Homarr will exchange them for a session token and transparently re-authenticate when the session expires.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,38 +1,37 @@
|
||||
---
|
||||
title: 'Tracearr'
|
||||
title: "Tracearr"
|
||||
description: "Tracearr is a comprehensive media monitoring solution that tracks streams, user activity, and policy violations in your media server (including Plex, Jellyfin, Emby)."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { tracearrIntegration } from '.';
|
||||
import { tracearrWidget } from '@site/docs/widgets/tracearr';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { tracearrIntegration } from ".";
|
||||
import { tracearrWidget } from "@site/docs/widgets/tracearr";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={tracearrIntegration}
|
||||
categories={['Media Monitoring']}
|
||||
/>
|
||||
<IntegrationHeader integration={tracearrIntegration} categories={["Media Monitoring"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: tracearrWidget }
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: tracearrWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [
|
||||
<span>
|
||||
In Tracearr, go to <strong>Settings → API</strong> and generate or copy your API key.
|
||||
</span>
|
||||
]
|
||||
}]} />
|
||||
In Tracearr, go to <strong>Settings → API</strong> and generate or copy your API key.
|
||||
</span>,
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,34 +1,35 @@
|
||||
---
|
||||
title: 'Transmission'
|
||||
title: "Transmission"
|
||||
description: "A Fast, Easy and Free Bittorrent Client."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconDownload } from "@tabler/icons-react";
|
||||
import { transmissionIntegration } from '.';
|
||||
import Alert from '@theme/Admonition';
|
||||
import { downloadsWidget } from '@site/docs/widgets/downloads';
|
||||
import { transmissionIntegration } from ".";
|
||||
import Alert from "@theme/Admonition";
|
||||
import { downloadsWidget } from "@site/docs/widgets/downloads";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={transmissionIntegration}
|
||||
categories={['Torrent client']}
|
||||
/>
|
||||
<IntegrationHeader integration={transmissionIntegration} categories={["Torrent client"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[{ widget: downloadsWidget }]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: downloadsWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['username', 'password'],
|
||||
steps: [],
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,61 +1,67 @@
|
||||
---
|
||||
title: 'TrueNAS'
|
||||
title: "TrueNAS"
|
||||
description: "Enterprise network-attached storage for your home, office, and cloud."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { truenasIntegration } from '.';
|
||||
import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
|
||||
import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
|
||||
import Alert from '@theme/Admonition';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { truenasIntegration } from ".";
|
||||
import { systemResourcesWidget } from "@site/docs/widgets/system-resources";
|
||||
import { healthMonitoringWidget } from "@site/docs/widgets/health-monitoring";
|
||||
import Alert from "@theme/Admonition";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={truenasIntegration}
|
||||
categories={['NAS', 'Hardware']}
|
||||
/>
|
||||
<IntegrationHeader integration={truenasIntegration} categories={["NAS", "Hardware"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: healthMonitoringWidget },
|
||||
{ widget: systemResourcesWidget },
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: healthMonitoringWidget }, { widget: systemResourcesWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
<Alert type="info" title="Use the HTTPS address">
|
||||
TrueNAS only serves its API over HTTPS, so enter the <code>https://</code> URL of your TrueNAS web interface. If it uses a self-signed certificate (the default), add it under <a href="/docs/management/certificates">Management > Tools > Certificates</a> so Homarr can establish the connection.
|
||||
TrueNAS only serves its API over HTTPS, so enter the <code>https://</code> URL of your TrueNAS web interface. If it
|
||||
uses a self-signed certificate (the default), add it under{" "}
|
||||
<a href="/docs/management/certificates">Management > Tools > Certificates</a> so Homarr can establish the
|
||||
connection.
|
||||
</Alert>
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ['apiKey'],
|
||||
header: <Alert type="tip" title="Recommended">
|
||||
API key authentication is the recommended method. It works across current TrueNAS versions and does not depend on user group membership.
|
||||
</Alert>,
|
||||
steps: [
|
||||
"In the TrueNAS web interface, click your user avatar in the top-right corner and select \"API Keys\".",
|
||||
"Click \"Add\", give the key a name such as \"Homarr\", and confirm.",
|
||||
"Copy the generated key immediately - TrueNAS only shows it once - and paste it as the API Key when creating the integration in Homarr.",
|
||||
],
|
||||
credentials: ["apiKey"],
|
||||
header: (
|
||||
<Alert type="tip" title="Recommended">
|
||||
API key authentication is the recommended method. It works across current TrueNAS versions and does not depend
|
||||
on user group membership.
|
||||
</Alert>
|
||||
),
|
||||
steps: [
|
||||
'In the TrueNAS web interface, click your user avatar in the top-right corner and select "API Keys".',
|
||||
'Click "Add", give the key a name such as "Homarr", and confirm.',
|
||||
"Copy the generated key immediately - TrueNAS only shows it once - and paste it as the API Key when creating the integration in Homarr.",
|
||||
],
|
||||
},
|
||||
{
|
||||
credentials: ['username', 'password'],
|
||||
steps: [
|
||||
"In the TrueNAS web interface, go to \"Credentials\" > \"Users\" > \"Add\" and create a user with a secure password.",
|
||||
"Grant the user administrative access so Homarr can read system, pool, and reporting data.",
|
||||
"Save the user and create the integration in Homarr with these credentials.",
|
||||
],
|
||||
body: <Alert type="caution" title="Administrative access required">
|
||||
The account must have administrative API access. The <code>auxiliary_administrator</code> group was removed in TrueNAS 25.10; on that version or newer, use API key authentication instead, or assign the user a full-admin role.
|
||||
</Alert>,
|
||||
credentials: ["username", "password"],
|
||||
steps: [
|
||||
'In the TrueNAS web interface, go to "Credentials" > "Users" > "Add" and create a user with a secure password.',
|
||||
"Grant the user administrative access so Homarr can read system, pool, and reporting data.",
|
||||
"Save the user and create the integration in Homarr with these credentials.",
|
||||
],
|
||||
body: (
|
||||
<Alert type="caution" title="Administrative access required">
|
||||
The account must have administrative API access. The <code>auxiliary_administrator</code> group was removed in
|
||||
TrueNAS 25.10; on that version or newer, use API key authentication instead, or assign the user a full-admin
|
||||
role.
|
||||
</Alert>
|
||||
),
|
||||
},
|
||||
]} />
|
||||
]}
|
||||
/>
|
||||
@@ -1,53 +1,52 @@
|
||||
---
|
||||
title: 'Umami'
|
||||
description: 'Privacy-focused, open-source web analytics'
|
||||
title: "Umami"
|
||||
description: "Privacy-focused, open-source web analytics"
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { umamiIntegration } from '.';
|
||||
import { umamiWidget } from '../../widgets/umami';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { umamiIntegration } from ".";
|
||||
import { umamiWidget } from "../../widgets/umami";
|
||||
|
||||
<IntegrationHeader
|
||||
integration={umamiIntegration}
|
||||
categories={['Analytics']}
|
||||
/>
|
||||
<IntegrationHeader integration={umamiIntegration} categories={["Analytics"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: umamiWidget }
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: umamiWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
:::tip URL configuration
|
||||
|
||||
- **Umami Cloud:** Use `https://api.umami.is/v1`
|
||||
- **Self-hosted:** Use `http://your-umami-host:3000/api`
|
||||
:::
|
||||
:::
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[
|
||||
{
|
||||
credentials: ['apiKey'],
|
||||
steps: [
|
||||
'Log in to your Umami instance (or Umami Cloud at https://cloud.umami.is)',
|
||||
'Open Settings → API Keys',
|
||||
'Click "Create API key"',
|
||||
'Enter a name, e.g. "Homarr", and save',
|
||||
'Copy the generated API key into Homarr',
|
||||
]
|
||||
},
|
||||
{
|
||||
credentials: ['username', 'password'],
|
||||
steps: [
|
||||
'Use the username and password of your Umami account',
|
||||
'Note: username/password auth is for self-hosted instances only - Umami Cloud requires an API key',
|
||||
]
|
||||
}
|
||||
]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [
|
||||
"Log in to your Umami instance (or Umami Cloud at https://cloud.umami.is)",
|
||||
"Open Settings → API Keys",
|
||||
'Click "Create API key"',
|
||||
'Enter a name, e.g. "Homarr", and save',
|
||||
"Copy the generated API key into Homarr",
|
||||
],
|
||||
},
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [
|
||||
"Use the username and password of your Umami account",
|
||||
"Note: username/password auth is for self-hosted instances only - Umami Cloud requires an API key",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,40 +1,40 @@
|
||||
---
|
||||
title: 'Unifi Controller'
|
||||
title: "Unifi Controller"
|
||||
description: "Unifi Controller is a network management platform for Unifi devices."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { IconTopologyFull } from "@tabler/icons-react";
|
||||
import { unifiControllerIntegration } from '.';
|
||||
import { networkControllerSummaryWidget } from '@site/docs/widgets/network-controller-summary';
|
||||
import { networkControllerStatusWidget } from '@site/docs/widgets/network-controller-status';
|
||||
import { unifiControllerIntegration } from ".";
|
||||
import { networkControllerSummaryWidget } from "@site/docs/widgets/network-controller-summary";
|
||||
import { networkControllerStatusWidget } from "@site/docs/widgets/network-controller-status";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={unifiControllerIntegration}
|
||||
categories={['Network controller']}
|
||||
/>
|
||||
<IntegrationHeader integration={unifiControllerIntegration} categories={["Network controller"]} />
|
||||
|
||||
This integration is using the [node-unifi](https://www.npmjs.com/package/node-unifi) library under the hood to connect to the Unifi Controller.
|
||||
Therfore it should support CloudKey Gen1, CloudKey Gen2, UnifiOS-based UDM-Pro controllers as well as self-hosted UniFi controllers.
|
||||
|
||||
### Widgets & Capabilities
|
||||
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: networkControllerSummaryWidget },
|
||||
{ widget: networkControllerStatusWidget}
|
||||
]}
|
||||
items={[{ widget: networkControllerSummaryWidget }, { widget: networkControllerStatusWidget }]}
|
||||
/>
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['username', 'password'],
|
||||
steps: []
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["username", "password"],
|
||||
steps: [],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,59 +1,71 @@
|
||||
---
|
||||
title: 'Unraid'
|
||||
title: "Unraid"
|
||||
description: "Versatile operating system that lets you run applications, virtual machines, and storage devices on your server"
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { unraidIntegration } from '.';
|
||||
import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
|
||||
import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { unraidIntegration } from ".";
|
||||
import { systemResourcesWidget } from "@site/docs/widgets/system-resources";
|
||||
import { healthMonitoringWidget } from "@site/docs/widgets/health-monitoring";
|
||||
|
||||
import imgManagement from "./imgs/unraid-management.png";
|
||||
import imgCreateApiKey from "./imgs/unraid-create-api-key.png";
|
||||
import imgCopyApiKey from "./imgs/copy-api-key.png";
|
||||
import imgSelectApikeyPreset from "./imgs/unraid-select-api-key-preset.png";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={unraidIntegration}
|
||||
categories={['NAS', 'Hardware']}
|
||||
/>
|
||||
<IntegrationHeader integration={unraidIntegration} categories={["NAS", "Hardware"]} />
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: healthMonitoringWidget },
|
||||
{ widget: systemResourcesWidget },
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: healthMonitoringWidget }, { widget: systemResourcesWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['apiKey'],
|
||||
steps: [
|
||||
<span>Are you using Unraid pre-7.2? If yes, please first <a href={"https://docs.unraid.net/API/#plugin-installation-pre-72-and-advanced-users"} target={"_blank"}>follow the steps here to install the Unraid API</a>.</span>,
|
||||
<>
|
||||
<span>Open the settings and open the management access</span><br/>
|
||||
<img src={imgManagement} alt="Unraid management" style={{ height: 160 }} />
|
||||
</>,
|
||||
<>
|
||||
<span>Click on the "API Keys" tab at the top and click on the "create API key" button. Choose "Create new"</span><br/>
|
||||
<img src={imgCreateApiKey} alt="Unraid management" style={{ height: 120 }} />
|
||||
</>,
|
||||
<>
|
||||
<span>Enter a suitable name for your API key (e.g. Homarr), select the "Viewer" preset and submit the modal.</span><br/>
|
||||
<img src={imgSelectApikeyPreset} alt="Unraid management" style={{ height: 350 }} />
|
||||
</>,
|
||||
<>
|
||||
<span>Last, copy the API key after your API key has been created</span><br/>
|
||||
<img src={imgCopyApiKey} alt="Unraid management" style={{ height: 200 }} />
|
||||
</>
|
||||
],
|
||||
}]} />
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["apiKey"],
|
||||
steps: [
|
||||
<span>
|
||||
Are you using Unraid pre-7.2? If yes, please first{" "}
|
||||
<a href={"https://docs.unraid.net/API/#plugin-installation-pre-72-and-advanced-users"} target={"_blank"}>
|
||||
follow the steps here to install the Unraid API
|
||||
</a>
|
||||
.
|
||||
</span>,
|
||||
<>
|
||||
<span>Open the settings and open the management access</span>
|
||||
<br />
|
||||
<img src={imgManagement} alt="Unraid management" style={{ height: 160 }} />
|
||||
</>,
|
||||
<>
|
||||
<span>
|
||||
Click on the "API Keys" tab at the top and click on the "create API key" button. Choose "Create new"
|
||||
</span>
|
||||
<br />
|
||||
<img src={imgCreateApiKey} alt="Unraid management" style={{ height: 120 }} />
|
||||
</>,
|
||||
<>
|
||||
<span>
|
||||
Enter a suitable name for your API key (e.g. Homarr), select the "Viewer" preset and submit the modal.
|
||||
</span>
|
||||
<br />
|
||||
<img src={imgSelectApikeyPreset} alt="Unraid management" style={{ height: 350 }} />
|
||||
</>,
|
||||
<>
|
||||
<span>Last, copy the API key after your API key has been created</span>
|
||||
<br />
|
||||
<img src={imgCopyApiKey} alt="Unraid management" style={{ height: 200 }} />
|
||||
</>,
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -1,43 +1,42 @@
|
||||
---
|
||||
title: 'Uptime Kuma'
|
||||
title: "Uptime Kuma"
|
||||
description: "Uptime Kuma is a self-hosted monitoring tool that tracks the availability of your services and websites."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
|
||||
import { uptimeKumaIntegration } from '.';
|
||||
import { uptimeKumaWidget } from '@site/docs/widgets/uptime-kuma';
|
||||
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
|
||||
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||
import { uptimeKumaIntegration } from ".";
|
||||
import { uptimeKumaWidget } from "@site/docs/widgets/uptime-kuma";
|
||||
|
||||
|
||||
<IntegrationHeader
|
||||
integration={uptimeKumaIntegration}
|
||||
categories={['Monitoring']}
|
||||
/>
|
||||
<IntegrationHeader integration={uptimeKumaIntegration} categories={["Monitoring"]} />
|
||||
|
||||
Uptime Kuma monitors the availability of your services and provides uptime statistics through its status page API.
|
||||
|
||||
### Widgets & Capabilities
|
||||
<IntegrationCapabilites
|
||||
items={[
|
||||
{ widget: uptimeKumaWidget },
|
||||
]}
|
||||
/>
|
||||
|
||||
<IntegrationCapabilites items={[{ widget: uptimeKumaWidget }]} />
|
||||
|
||||
### Adding the integration
|
||||
|
||||
<AddingIntegration />
|
||||
|
||||
### Secrets
|
||||
<IntegrationSecrets secrets={[{
|
||||
credentials: ['slug'],
|
||||
steps: [
|
||||
'Navigate to your Uptime Kuma instance',
|
||||
'Go to Status Pages and create or select a status page',
|
||||
|
||||
<IntegrationSecrets
|
||||
secrets={[
|
||||
{
|
||||
credentials: ["slug"],
|
||||
steps: [
|
||||
"Navigate to your Uptime Kuma instance",
|
||||
"Go to Status Pages and create or select a status page",
|
||||
'The slug is the URL path of your status page (e.g. "default" for /status/default)',
|
||||
]
|
||||
}]} />
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
:::tip
|
||||
If you don't specify a slug, Homarr will use `default` as the status page slug.
|
||||
|
||||
Reference in new issue
Block a user