Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions frontend/src/app/scripts/_components/ScriptAccordion.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,22 @@ export default function ScriptAccordion({
undefined,
);
const linkRefs = useRef<{ [key: string]: HTMLAnchorElement | null }>({});

const handleAccordionChange = (value: string | undefined) => {
setExpandedItem(value);
};

const handleSelected = useCallback(
(title: string) => {
setSelectedScript(title);
(slug: string) => {
setSelectedScript(slug);
},
[setSelectedScript],
);

useEffect(() => {
if (selectedScript) {
const category = items.find((category) =>
category.scripts.some((script) => script.name === selectedScript),
category.scripts.some((script) => script.slug === selectedScript),
);
if (category) {
setExpandedItem(category.name);
Expand Down Expand Up @@ -89,17 +89,17 @@ export default function ScriptAccordion({
<Link
href={{
pathname: "/scripts",
query: { id: script.name },
query: { id: script.slug },
}}
prefetch={false}
className={`flex cursor-pointer items-center justify-between gap-1 px-1 py-1 text-muted-foreground hover:rounded-lg hover:bg-accent/60 hover:dark:bg-accent/20 ${
selectedScript === script.name
selectedScript === script.slug
? "rounded-lg bg-accent font-semibold dark:bg-accent/30 dark:text-white"
: ""
}`}
onClick={() => handleSelected(script.name)}
onClick={() => handleSelected(script.slug)}
ref={(el) => {
linkRefs.current[script.name] = el;
linkRefs.current[script.slug] = el;
}}
>
<div className="flex items-center">
Expand Down
8 changes: 4 additions & 4 deletions frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
<div className="min-w flex w-full flex-row flex-wrap gap-4">
{latestScripts.slice(startIndex, endIndex).map((script) => (
<Card
key={script.name}
key={script.slug}
className="min-w-[250px] flex-1 flex-grow bg-accent/30"
>
<CardHeader>
Expand Down Expand Up @@ -121,7 +121,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
<Link
href={{
pathname: "/scripts",
query: { id: script.name },
query: { id: script.slug },
}}
>
View Script
Expand Down Expand Up @@ -153,7 +153,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
<div className="min-w flex w-full flex-row flex-wrap gap-4">
{mostViewedScripts.map((script) => (
<Card
key={script.name}
key={script.slug}
className="min-w-[250px] flex-1 flex-grow bg-accent/30"
>
<CardHeader>
Expand Down Expand Up @@ -189,7 +189,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
<Link
href={{
pathname: "/scripts",
query: { id: script.name },
query: { id: script.slug },
}}
prefetch={false}
>
Expand Down
10 changes: 5 additions & 5 deletions frontend/src/app/scripts/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@
export const dynamic = "force-static";

import ScriptItem from "@/app/scripts/_components/ScriptItem";
import { fetchCategories } from "@/lib/data";
import { Category, Script } from "@/lib/types";
import { Loader2 } from "lucide-react";
import { Suspense, useEffect, useState } from "react";
import Sidebar from "./_components/Sidebar";
import { useQueryState } from "nuqs";
import { Suspense, useEffect, useState } from "react";
import {
LatestScripts,
MostViewedScripts,
} from "./_components/ScriptInfoBlocks";
import { fetchCategories } from "@/lib/data";
import Sidebar from "./_components/Sidebar";

function ScriptContent() {
const [selectedScript, setSelectedScript] = useQueryState("id");
Expand All @@ -24,7 +24,7 @@ function ScriptContent() {
const script = links
.map((category) => category.scripts)
.flat()
.find((script) => script.name === selectedScript);
.find((script) => script.slug === selectedScript);
setItem(script);
}
}, [selectedScript, links]);
Expand Down Expand Up @@ -76,4 +76,4 @@ export default function Page() {
<ScriptContent />
</Suspense>
);
}
}
6 changes: 3 additions & 3 deletions frontend/src/components/CommandMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,11 @@ export default function CommandMenu() {
>
{category.scripts.map((script) => (
<CommandItem
key={`script:${script.name}`}
value={script.name}
key={`script:${script.slug}`}
value={script.slug}
onSelect={() => {
setOpen(false);
router.push(`/scripts?id=${script.name}`);
router.push(`/scripts?id=${script.slug}`);
}}
>
<div className="flex gap-2" onClick={() => setOpen(false)}>
Expand Down
2 changes: 1 addition & 1 deletion json/jellyfin.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"documentation": null,
"website": null,
"logo": "https://github.com/home-assistant/brands/blob/master/core_integrations/jellyfin/icon.png?raw=true",
"description": null,
"description": "Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files to networked devices.",
"install_methods": [
{
"type": "default",
Expand Down
34 changes: 34 additions & 0 deletions json/nextcloud-vm.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "Nextcloud",
"slug": "nextcloud-vm",
"categories": [
12
],
"date_created": "2023-11-14",
"type": "vm",
"updateable": false,
"privileged": false,
"interface_port": "80",
"documentation": null,
"website": "https://www.turnkeylinux.org/nextcloud",
"logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/nextcloud.svg",
"description": "TurnKey Nextcloud is an open-source file sharing server and collaboration platform that can store your personal content, like documents and pictures, in a centralized location.",
"install_methods": [
{
"type": "default",
"script": "vm/nextcloud-vm.sh",
"resources": {
"cpu": "2",
"ram": "2048",
"hdd": "12G",
"os": "debian",
"version": 12
}
}
],
"default_credentials": {
"username": "admin",
"password": null
},
"notes": []
}
6 changes: 3 additions & 3 deletions json/owncloud-vm.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@
"cpu": "2",
"ram": "2048",
"hdd": "12G",
"os": null,
"version": null
"os": "debian",
"version": 12
}
}
],
"default_credentials": {
"username": null,
"username": "admin",
"password": null
},
"notes": []
Expand Down
12 changes: 7 additions & 5 deletions vm/nextcloud-vm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ BFR="\\r\\033[K"
HOLD="-"
CM="${GN}✓${CL}"
CROSS="${RD}✗${CL}"
THIN="discard=on,ssd=1,"
THIN="discard=on,ssd=1"
set -e
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
trap cleanup EXIT
Expand Down Expand Up @@ -207,7 +207,7 @@ function advanced_settings() {
exit-script
fi

if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 $HN --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 turnkey-nextcloud-vm --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
if [ -z $VM_NAME ]; then
HN="$HN"
echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}"
Expand Down Expand Up @@ -393,7 +393,7 @@ btrfs)
THIN=""
;;
esac
for i in {0,1}; do
for i in {0,1,2}; do
disk="DISK$i"
eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
Expand All @@ -403,11 +403,13 @@ msg_info "Creating a $NAME"
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios seabios${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
-name $HN -tags proxmox-helper-scripts -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
pvesm alloc $STORAGE $VMID $DISK1 12G 1>&/dev/null
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
qm set $VMID \
-efidisk0 ${DISK0_REF}${FORMAT} \
-scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=12G \
-boot order=scsi0 \
-scsi0 ${DISK1_REF},${DISK_CACHE}${THIN} \
-scsi1 ${DISK2_REF},${DISK_CACHE}${THIN} \
-boot order='scsi1;scsi0' \
-description "<div align='center'><a href='https://Helper-Scripts.com'><img src='https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png'/></a>

# $NAME
Expand Down
32 changes: 17 additions & 15 deletions vm/owncloud-vm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ header_info
echo -e "\n Loading..."
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
NEXTID=$(pvesh get /cluster/nextid)

NAME="TurnKey ownCloud VM"
YW=$(echo "\033[33m")
BL=$(echo "\033[36m")
HA=$(echo "\033[1;34m")
Expand All @@ -32,7 +32,7 @@ BFR="\\r\\033[K"
HOLD="-"
CM="${GN}✓${CL}"
CROSS="${RD}✗${CL}"
THIN="discard=on,ssd=1,"
THIN="discard=on,ssd=1"
set -e
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
trap cleanup EXIT
Expand All @@ -59,7 +59,7 @@ function cleanup() {

TEMP_DIR=$(mktemp -d)
pushd $TEMP_DIR >/dev/null
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "TurnKey-ownCloud VM" --yesno "This will create a New TurnKey-ownCloud VM. Proceed?" 10 58; then
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "$NAME" --yesno "This will create a New $NAME. Proceed?" 10 58; then
:
else
header_info && echo -e "⚠ User exited script \n" && exit
Expand Down Expand Up @@ -154,7 +154,7 @@ function default_settings() {
echo -e "${DGN}Using VLAN: ${BGN}Default${CL}"
echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}"
echo -e "${DGN}Start VM when completed: ${BGN}no${CL}"
echo -e "${BL}Creating a TurnKey ownCloud VM using the above default settings${CL}"
echo -e "${BL}Creating a $NAME using the above default settings${CL}"
}

function advanced_settings() {
Expand Down Expand Up @@ -313,8 +313,8 @@ function advanced_settings() {
START_VM="no"
fi

if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a TurnKey ownCloud VM?" --no-button Do-Over 10 58); then
echo -e "${RD}Creating a TurnKey ownCloud VM using the above advanced settings${CL}"
if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a $NAME?" --no-button Do-Over 10 58); then
echo -e "${RD}Creating a $NAME using the above advanced settings${CL}"
else
header_info
echo -e "${RD}Using Advanced Settings${CL}"
Expand Down Expand Up @@ -368,7 +368,7 @@ else
fi
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
msg_info "Retrieving the URL for the TurnKey ownCloud ISO Disk Image"
msg_info "Retrieving the URL for the $NAME Disk Image"
URL=http://mirror.turnkeylinux.org/turnkeylinux/images/iso/turnkey-owncloud-18.0-bookworm-amd64.iso
sleep 2
msg_ok "${CL}${BL}${URL}${CL}"
Expand All @@ -393,31 +393,33 @@ btrfs)
THIN=""
;;
esac
for i in {0,1}; do
for i in {0,1,2}; do
disk="DISK$i"
eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
done

msg_info "Creating a TurnKey ownCloud VM"
msg_info "Creating a $NAME"
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios seabios${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
-name $HN -tags proxmox-helper-scripts -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
pvesm alloc $STORAGE $VMID $DISK1 12G 1>&/dev/null
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
qm set $VMID \
-efidisk0 ${DISK0_REF}${FORMAT} \
-scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=12G \
-boot order=scsi0 \
-scsi0 ${DISK1_REF},${DISK_CACHE}${THIN} \
-scsi1 ${DISK2_REF},${DISK_CACHE}${THIN} \
-boot order='scsi1;scsi0' \
-description "<div align='center'><a href='https://Helper-Scripts.com'><img src='https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png'/></a>

# TurnKey ownCloud VM
# $NAME

<a href='https://ko-fi.com/D1D7EP4GF'><img src='https://img.shields.io/badge/&#x2615;-Buy me a coffee-blue' /></a>
</div>" >/dev/null
msg_ok "Created a TurnKey ownCloud VM ${CL}${BL}(${HN})"
msg_ok "Created a $NAME ${CL}${BL}(${HN})"
if [ "$START_VM" == "yes" ]; then
msg_info "Starting TurnKey ownCloud VM"
msg_info "Starting $NAME"
qm start $VMID
msg_ok "Started TurnKey ownCloud VM"
msg_ok "Started $NAME"
fi
msg_ok "Completed Successfully!\n"