-
-
Notifications
You must be signed in to change notification settings - Fork 440
feat: add Slidev community script #2167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,60 @@ | ||
| #!/usr/bin/env bash | ||
| # Engine comes from community-scripts/core; this repo only ships the scripts. | ||
| # A local core checkout wins (COMMUNITY_SCRIPTS_CORE_DIR, else a sibling ../core), | ||
| # so a fork or branch of core can be tested without editing this file. | ||
| _cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/shared/build.func" | ||
| source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/shared/build.func") | ||
| # Copyright (c) 2021-2026 community-scripts ORG | ||
| # Author: Filan-glitch | ||
| # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE | ||
| # Source: https://sli.dev/ | ||
|
|
||
| APP="Slidev" | ||
| var_tags="${var_tags:-presentation;markdown}" | ||
| var_cpu="${var_cpu:-2}" | ||
| var_ram="${var_ram:-2048}" | ||
| var_disk="${var_disk:-8}" | ||
| var_os="${var_os:-debian}" | ||
| var_version="${var_version:-13}" | ||
| var_unprivileged="${var_unprivileged:-1}" | ||
| #var_arm64="${var_arm64:-no}" # unset = ask the user; set yes/no only when verified | ||
|
|
||
| header_info "$APP" | ||
| variables | ||
| color | ||
| catch_errors | ||
|
|
||
| function update_script() { | ||
| header_info | ||
| check_container_storage | ||
| check_container_resources | ||
|
|
||
| if [[ ! -d /home/slidev/my-slides ]]; then | ||
| msg_error "No ${APP} Installation Found!" | ||
| exit | ||
| fi | ||
|
|
||
| msg_info "Stopping ${APP}" | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. resolve the $app var here instead of using a var |
||
| systemctl stop slidev | ||
| msg_ok "Stopped ${APP}" | ||
|
|
||
| msg_info "Updating ${APP}" | ||
| su - slidev -c "cd my-slides && npm install" </dev/null | ||
| msg_ok "Updated ${APP}" | ||
|
|
||
| msg_info "Starting ${APP}" | ||
| systemctl start slidev | ||
| msg_ok "Started ${APP}" | ||
| exit | ||
| } | ||
|
|
||
| start | ||
| build_container | ||
| description | ||
|
|
||
| msg_ok "Completed Successfully!\n" | ||
| echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" | ||
| echo -e "${INFO}${YW}Access it using the following URL:${CL}" | ||
| echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3030${CL}" | ||
| echo -e "${INFO}${YW}MCP server entrypoint (run over SSH from your client):${CL}" | ||
| echo -e "${TAB}${GATEWAY}${BGN}ssh slidev@${IP} /home/slidev/mcp-start.sh${CL}" | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,88 @@ | ||
| #!/usr/bin/env bash | ||
|
|
||
| # Copyright (c) 2021-2026 community-scripts ORG | ||
| # Author: Filan-glitch | ||
| # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE | ||
| # Source: https://sli.dev/ | ||
|
|
||
| source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" | ||
| color | ||
| verb_ip6 | ||
| catch_errors | ||
| setting_up_container | ||
| network_check | ||
| update_os | ||
|
|
||
| msg_info "Installing Dependencies" | ||
| $STD apt install -y \ | ||
| git \ | ||
| build-essential | ||
| msg_ok "Installed Dependencies" | ||
|
|
||
| NODE_VERSION="22" setup_nodejs | ||
|
|
||
| msg_info "Creating slidev user" | ||
| useradd -m -s /bin/bash slidev | ||
| SLIDEV_SSH_PASS="" | ||
| if [[ -s /root/.ssh/authorized_keys ]]; then | ||
| mkdir -p /home/slidev/.ssh | ||
| cp /root/.ssh/authorized_keys /home/slidev/.ssh/authorized_keys | ||
| chmod 700 /home/slidev/.ssh | ||
| chmod 600 /home/slidev/.ssh/authorized_keys | ||
| chown -R slidev:slidev /home/slidev/.ssh | ||
| else | ||
| # No key to inherit — fall back to a password, otherwise the account is | ||
| # unreachable over SSH and the MCP entrypoint has no way in. | ||
| SLIDEV_SSH_PASS="$(openssl rand -base64 18)" | ||
| echo "slidev:${SLIDEV_SSH_PASS}" | chpasswd | ||
| fi | ||
| msg_ok "Created slidev user" | ||
|
|
||
| msg_info "Scaffolding Slidev project" | ||
| su - slidev -c "CI=1 npx --yes create-slidev@latest my-slides --template=default --theme=default -y" </dev/null | ||
| msg_ok "Scaffolded Slidev project" | ||
|
|
||
| msg_info "Installing npm dependencies" | ||
| su - slidev -c "cd my-slides && npm install" </dev/null | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. does $STD not work here? |
||
| msg_ok "Installed npm dependencies" | ||
|
|
||
| msg_info "Creating service" | ||
| cat <<EOF >/etc/systemd/system/slidev.service | ||
| [Unit] | ||
| Description=Slidev Presentation Server | ||
| After=network.target | ||
|
|
||
| [Service] | ||
| Type=simple | ||
| User=slidev | ||
| WorkingDirectory=/home/slidev/my-slides | ||
| ExecStart=/usr/bin/npm run dev -- --remote --port 3030 | ||
| Restart=on-failure | ||
| RestartSec=5 | ||
|
|
||
| [Install] | ||
| WantedBy=multi-user.target | ||
| EOF | ||
| systemctl enable -q --now slidev | ||
| msg_ok "Created service" | ||
|
|
||
| msg_info "Installing Slidev MCP server helper" | ||
| su - slidev -c "cd my-slides && npm install -D @slidev/cli@latest" </dev/null | ||
| cat <<'EOF' >/home/slidev/mcp-start.sh | ||
| #!/usr/bin/env bash | ||
| cd /home/slidev/my-slides | ||
| exec npx slidev mcp --entry slides.md | ||
| EOF | ||
| chmod +x /home/slidev/mcp-start.sh | ||
| chown slidev:slidev /home/slidev/mcp-start.sh | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why is a seperate user needed? |
||
| msg_ok "Installed Slidev MCP server helper" | ||
|
|
||
| motd_ssh | ||
| customize | ||
|
|
||
| if [[ -n "$SLIDEV_SSH_PASS" ]]; then | ||
| msg_ok "SSH login for slidev user: slidev / ${SLIDEV_SSH_PASS}" | ||
| else | ||
| msg_ok "SSH login for slidev user: key-based (root's authorized_keys)" | ||
| fi | ||
|
Comment on lines
+82
to
+87
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. remove, this is non-standard |
||
| cleanup_lxc | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,44 @@ | ||
| { | ||
| "name": "Slidev", | ||
| "slug": "slidev", | ||
| "categories": [12], | ||
| "date_created": "2026-08-10", | ||
| "type": "ct", | ||
| "updateable": true, | ||
| "privileged": false, | ||
| "architectures": ["amd64"], | ||
| "interface_port": 3030, | ||
| "documentation": "https://sli.dev/", | ||
| "website": "https://sli.dev/", | ||
| "repository": "https://github.com/slidevjs/slidev", | ||
| "logo": "https://sli.dev/favicon.png", | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can you use one from selfh.st/icons |
||
| "description": "Slidev is a markdown-based slide deck maker and presenter, built for developers. Self-hosted instance runs a live dev server with hot reload, plus an MCP server entrypoint so AI agents (Claude Code/Desktop) can edit slides directly.", | ||
| "install_methods": [ | ||
| { | ||
| "type": "default", | ||
| "script": "ct/slidev.sh", | ||
| "config_path": "/home/slidev/my-slides/slides.md", | ||
| "resources": { | ||
| "cpu": 2, | ||
| "ram": 2048, | ||
| "hdd": 8, | ||
| "os": "Debian", | ||
| "version": "13" | ||
| } | ||
| } | ||
| ], | ||
| "default_credentials": { | ||
| "username": "slidev", | ||
| "password": null | ||
| }, | ||
| "notes": [ | ||
| { | ||
| "text": "Dev server binds 0.0.0.0:3030, no auth built in — restrict to LAN/firewall.", | ||
| "type": "warning" | ||
| }, | ||
| { | ||
| "text": "MCP server entrypoint at /home/slidev/mcp-start.sh, invoke over SSH from client-side Claude Code config.", | ||
| "type": "info" | ||
| } | ||
| ] | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
think you can remove those comments