diff --git a/frontend/public/json/librenms.json b/frontend/public/json/librenms.json
index ed854fe..0ac6c49 100644
--- a/frontend/public/json/librenms.json
+++ b/frontend/public/json/librenms.json
@@ -9,6 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": 80,
+ "config_path": "/opt/librenms/config.php",
"documentation": "https://docs.librenms.org/",
"website": "https://librenms.org/",
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/librenms.svg",
@@ -31,4 +32,4 @@
"password": null
},
"notes": []
-}
\ No newline at end of file
+}
diff --git a/frontend/src/app/json-editor/_schemas/schemas.ts b/frontend/src/app/json-editor/_schemas/schemas.ts
index 9ffe8f3..a35da4e 100644
--- a/frontend/src/app/json-editor/_schemas/schemas.ts
+++ b/frontend/src/app/json-editor/_schemas/schemas.ts
@@ -34,6 +34,7 @@ export const ScriptSchema = z.object({
website: z.string().url().nullable(),
logo: z.string().url().nullable(),
description: z.string().min(1, "Description is required"),
+ config_path: z.string(),
install_methods: z.array(InstallMethodSchema).min(1, "At least one install method is required"),
default_credentials: z.object({
username: z.string().nullable(),
diff --git a/frontend/src/app/json-editor/page.tsx b/frontend/src/app/json-editor/page.tsx
index 1789b0a..9354896 100644
--- a/frontend/src/app/json-editor/page.tsx
+++ b/frontend/src/app/json-editor/page.tsx
@@ -32,6 +32,7 @@ const initialScript: Script = {
privileged: false,
interface_port: null,
documentation: null,
+ config_path: "",
website: null,
logo: null,
description: "",
@@ -184,6 +185,14 @@ export default function JSONGenerator() {
onChange={(e) => updateScript("description", e.target.value)}
/>
+
+
+ updateScript("config_path", e.target.value || null)}
+ />
+
diff --git a/frontend/src/app/scripts/_components/ScriptItem.tsx b/frontend/src/app/scripts/_components/ScriptItem.tsx
index 7a2ba6d..d00dd90 100644
--- a/frontend/src/app/scripts/_components/ScriptItem.tsx
+++ b/frontend/src/app/scripts/_components/ScriptItem.tsx
@@ -18,9 +18,11 @@ import Buttons from "./ScriptItems/Buttons";
import DefaultPassword from "./ScriptItems/DefaultPassword";
import Description from "./ScriptItems/Description";
import InstallCommand from "./ScriptItems/InstallCommand";
+import ConfigFile from "./ScriptItems/ConfigFile";
import InterFaces from "./ScriptItems/InterFaces";
import Tooltips from "./ScriptItems/Tooltips";
+
interface ScriptItemProps {
item: Script;
setSelectedScript: (script: string | null) => void;
@@ -141,6 +143,7 @@ export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) {
+
How to {item.type === "pve" ? "use" : item.type === "addon" ? "apply" : "install"}
@@ -151,6 +154,17 @@ export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) {
+
+
+
+ Location of config file
+
+
+
+
+
+
+
diff --git a/frontend/src/app/scripts/_components/ScriptItems/ConfigFile.tsx b/frontend/src/app/scripts/_components/ScriptItems/ConfigFile.tsx
new file mode 100644
index 0000000..c484aa5
--- /dev/null
+++ b/frontend/src/app/scripts/_components/ScriptItems/ConfigFile.tsx
@@ -0,0 +1,10 @@
+import CodeCopyButton from "@/components/ui/code-copy-button";
+import { Script } from "@/lib/types";
+
+export default function ConfigFile({ item }: { item: Script }) {
+ return (
+
+ {item.config_path ? item.config_path : "No config path set"}
+
+ );
+}
diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts
index b6aa20b..dcf235b 100644
--- a/frontend/src/lib/types.ts
+++ b/frontend/src/lib/types.ts
@@ -13,6 +13,7 @@ export type Script = {
website: string | null;
logo: string | null;
description: string;
+ config_path: string | null;
install_methods: {
type: "default" | "alpine";
script: string;