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;