Compare commits

...

3 Commits

15 changed files with 632 additions and 13 deletions

5
.gitignore vendored
View File

@@ -36,4 +36,7 @@ dump.rdb
# Package Manager Auth # Package Manager Auth
.npmrc .npmrc
.yarnrc .yarnrc
# Logs
*.log

View File

@@ -0,0 +1,18 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/configs/bookmarks
# - Developer:
# - Github:
# - abbr: GH
# href: https://github.com/
# - Social:
# - Reddit:
# - abbr: RE
# href: https://reddit.com/
# - Entertainment:
# - YouTube:
# - abbr: YT
# href: https://youtube.com/

View File

@@ -0,0 +1,13 @@
.backdrop-blur-xl {
background-color: rgba(0, 0, 0, 0.815) !important;
}
@media (hover: hover) {
.dark\:hover\:text-theme-300:is(.dark *):hover {
color: rgb(9, 255, 0);
}
service-card {
background-color: rgba(9, 255, 0, 0.616);
}
}

View File

View File

@@ -0,0 +1,10 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/configs/docker/
# my-docker:
# host: 127.0.0.1
# port: 2375
# my-docker:
# socket: /var/run/docker.sock

View File

@@ -0,0 +1,2 @@
---
# sample kubernetes config

View File

@@ -0,0 +1,5 @@
---
# pve:
# url: https://proxmox.host.or.ip:8006
# token: username@pam!Token ID
# secret: secret

View File

@@ -0,0 +1,255 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/latest/configs/services
# icons found here https://github.com/walkxcode/dashboard-icons
- Devices & Network:
- Proxmox:
icon: proxmox.svg
href: "http://10.0.0.142:8006/"
target: _self
description: laptop-proxmox
ping: 10.0.0.142
widget:
type: proxmox
url: https://10.0.0.142:8006
username: root@pam!dash
password: {{HOMEPAGE_VAR_proxmox_password}}
node: laptop-proxmox # optional
- TrueNas:
icon: truenas.svg
href: "http://truenas/"
target: _self
description: TrueNas
ping: truenas
widget:
type: truenas
url: http://truenas
username: {{HOMEPAGE_VAR_truenas_username}} # not required if using api key
password: {{HOMEPAGE_VAR_truenas_password}} # not required if using api key
enablePools: true # optional, defaults to false
nasType: scale # defaults to scale, must be set to 'core' if using enablePools with TrueNAS Cor
- Router:
icon: router.svg
href: "http://router/"
target: _self
description: NAS
ping: router
- Pi-Hole:
icon: pi-hole.svg
href: "http://pihole/admin"
target: _self
description: pihole
ping: pihole
widget:
type: pihole
url: http://pi.hole
version: 6 # required if running v6 or higher, defaults to 5
key: {{HOMEPAGE_VAR_pihole_apikey}}
- pterodactyl:
icon: pterodactyl.svg
href: "http://games.wompmacho.com/"
target: _self
description: docker
ping: games.wompmacho.com
widget:
type: pterodactyl
url: https://games.wompmacho.com
key: {{HOMEPAGE_VAR_pterodactyl_apikey}}
- Arr:
- Jellyfin:
icon: jellyfin.svg
href: "https://jellyfin.wompmacho.com/"
target: _self
description: media server
widget:
type: jellyfin
url: https://jellyfin.wompmacho.com
key: {{HOMEPAGE_VAR_jellyfin_apikey}}
enableBlocks: true # optional, defaults to false
enableNowPlaying: true # optional, defaults to true
enableUser: true # optional, defaults to false
showEpisodeNumber: true # optional, defaults to false
expandOneStreamToTwoRows: false # optional, defaults to true
- jellyseerr:
icon: jellyseerr.svg
href: "http://jellyseerr/"
target: _self
description: jellyseerr
widget:
type: jellyseerr
url: https://jellyseerr/
key: {{HOMEPAGE_VAR_jellyseerr_apikey}}
- qBittorrent:
icon: https://upload.wikimedia.org/wikipedia/commons/6/66/New_qBittorrent_Logo.svg
href: "http://torrent/"
target: _self
description: qBittorrent
widget:
type: qbittorrent
url: http://10.0.0.190:8181
username: {{HOMEPAGE_VAR_qbittorrent_username}}
password: {{HOMEPAGE_VAR_qbittorrent_upassword}}
- audiobookshelf:
icon: audiobookshelf.svg
href: "https://audiobookshelf.wompmacho.com/"
target: _self
description: audiobookshelf
widget:
type: audiobookshelf
url: http://10.0.0.190:13378
key: {{HOMEPAGE_VAR_audiobookshelf_apikey}}
- radarr:
icon: radarr.svg
href: "http://radarr/"
target: _self
description: radarr
ping: radarr
widget:
type: radarr
url: http://truenas:30025
key: {{HOMEPAGE_VAR_radarr_apikey}}
enableQueue: true # optional, defaults to false
- sonarr:
icon: sonarr.svg
href: "http://sonarr/"
target: _self
description: sonarr
ping: sonarr
widget:
type: sonarr
url: http://truenas:30027
key: {{HOMEPAGE_VAR_sonarr_apikey}}
enableQueue: true # optional, defaults to false
- readarr:
icon: readarr.svg
href: "http://readarr/"
target: _self
description: readarr
ping: readarr
widget:
type: readarr
url: http://truenas:30045
key: {{HOMEPAGE_VAR_readarr_apikey}}
- bazarr:
icon: bazarr.svg
href: "http://bazarr/"
target: _self
description: bazarr
ping: bazarr
widget:
type: bazarr
url: http://truenas:30046
key: {{HOMEPAGE_VAR_bazarr_apikey}}
- prowlarr:
icon: prowlarr.svg
href: "http://prowlarr/"
target: _self
description: prowlarr
ping: prowlarr
widget:
type: prowlarr
url: http://truenas:30050
key: {{HOMEPAGE_VAR_prowlarr_apikey}}
- Containers:
- vaultwarden:
icon: vaultwarden.svg
href: "https://vaultwarden.wompmacho.com"
target: _self
description: vaultwarden
- nginx-proxy:
icon: nginx.svg
href: "http://nginx:81"
target: _self
description: nginx-proxy
- immich:
icon: https://immich.app/_app/immutable/assets/immich-logo-futo-dark.UAIWaLuX.svg
href: "https://immich.wompmacho.com/"
target: _self
description: immich
- code-server:
icon: mdi-microsoft-visual-studio-code
href: "https://dev.wompmacho.com/"
target: _self
description: code-server
- Portainer:
icon: https://docs.portainer.io/~gitbook/image?url=https%3A%2F%2F2279730396-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Forganizations%252F-MgDK9ndL1-o2MHHFiXo%252Fsites%252Fsite_gbGqX%252Ficon%252FFDKzZiw3rNqZ8FuFTT64%252FPortainer%2520-%2520P%2520Icon%2520SQUARE%2520-%2520Purple%2520%2526%2520Graphite.png%3Falt%3Dmedia%26token%3Dafbf7bd8-b9ce-4722-8101-90499e52f7fb&width=32&dpr=1&quality=100&sign=933f7d15&sv=2
href: "http://portainer/"
target: _self
description: docker managment
- Hugo (Public):
icon: https://gohugo.io/images/hugo-logo-wide.svg
href: "https://wiki.wompmacho.com/"
target: _self
description: public wiki
- Hugo (Private):
icon: mdi-lock
href: "http://private/"
target: _self
description: private wiki
- frigate:
icon: frigate.svg
href: "http://frigate/"
target: _self
description: frigate
- LinkStack:
icon: https://linkstack.org/wp-content/uploads/2023/04/logo-animated.svg
href: "https://wompmacho.com/login"
target: _self
description: LinkStack
- sure:
icon: http://sure/assets/logomark-color-92ed1e7e.svg
href: "http://sure/"
target: _self
description: sure finance app
- paperless:
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/paperless-ngx.png
href: "http://paperless/"
target: _self
description: paperless-ngx
- open-webui:
icon: http://gemma/static/favicon.png
href: "http://gemma/"
target: _self
description: open-webui
- calibre:
icon: https://upload.wikimedia.org/wikipedia/commons/c/cf/Calibre_logo_3.png
href: "http://calibre/"
target: _self
description: calibre
- gitea:
icon: https://git.wompmacho.com/assets/img/logo.svg
href: "https://git.wompmacho.com/"
target: _self
description: gitea
- dozzle:
icon: https://dozzle.dev/logo.svg
href: "http://dozzle/"
target: _self
description: dozzle
- navidrome:
type: navidrome
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/navidrome.svg
href: "http://music/"
target: _self
description: music
- nicotine:
icon: https://nicotine-plus.org/data/icons/icon.svg
href: "http://nicotine/"
target: _self
description: music
- Picard:
icon: https://picard.musicbrainz.org/static/img/picard-logo.svg
href: "http://picard/"
target: _self
description: music tagger
- Reaper-Web:
icon: https://img.icons8.com/?size=100&id=105751&format=png&color=000000
href: "http://reaper/"
target: _self
description: reaper in docker
- Slopsmith-Web:
icon: https://cdn2.steamgriddb.com/icon/dfb61b74af460c2fd68bb8266f9f0814/32/256x256.png
href: "https://slopsmith/"
target: _self
description: slopsmith in docker

View File

@@ -0,0 +1,34 @@
title: Home
background:
image: /images/background_40890255.jpg
#blur: sm # sm, "", md, xl... see https://tailwindcss.com/docs/backdrop-blur
saturate: 100 # 0, 50, 100... see https://tailwindcss.com/docs/backdrop-saturate
brightness: 50 # 0, 50, 75... see https://tailwindcss.com/docs/backdrop-brightness
opacity: 100 # 0-100
cardBlur: xl # sm, "", md, etc... see https://tailwindcss.com/docs/backdrop-blur
favicon: https://www.svgrepo.com/show/22031/home-icon-silhouette.svg
theme: dark # or light
color: cyan
headerStyle: underlined # default style
#fullWidth: true
providers:
finnhub: {{HOMEPAGE_VAR_finnhub}}
useEqualHeights: false
layout:
Devices & Network:
useEqualHeights: true
style: row
columns: 5
Media:
useEqualHeights: true
style: row
columns: 4
Containers:
style: row
columns: 8
Arr:
useEqualHeights: true
style: row
columns: 5
showStats: true
disableCollapse: true

View File

@@ -0,0 +1,45 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/configs/service-widgets
- resources:
cpu: true
memory: true
disk: /
cputemp: true
tempmin: 0 # optional, minimum cpu temp
tempmax: 100 # optional, maximum cpu temp
uptime: true
units: imperial # only used by cpu temp
refresh: 3000 # optional, in ms
diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk
- openmeteo:
label: Charleston # optional
latitude: 32.7766
longitude: -79.930903
timezone: America/New_York # optional
units: imperial # or imperial
cache: 5 # Time in minutes to cache API responses, to stay within limits
format: # optional, Intl.NumberFormat options
maximumFractionDigits: 1
- search:
provider: google # google, duckduckgo, bing, baidu, brave or custom
focus: true # Optional, will set focus to the search bar on page load
showSearchSuggestions: true # Optional, will show search suggestions. Defaults to false
target: _self # One of _self, _blank, _parent or _top
- datetime:
text_size: xl
format:
timeStyle: short
- stocks:
provider: finnhub
color: true # optional, defaults to true
cache: 1 # optional, default caches results for 1 minute
watchlist:
- NVDA
- AMD
- AAPL
- GOOG
- GOOGL
- ARM
- SCHD
- VOO

View File

@@ -11,10 +11,16 @@ services:
env_file: env_file:
- .env - .env
volumes: volumes:
- ${HOMEPAGE_DIR}/config:/app/config - ./config:/app/config
- ${HOMEPAGE_DIR}/images:/app/public/images - ./images:/app/public/images
- /var/run/docker.sock:/var/run/docker.sock:ro # docker socket - /var/run/docker.sock:/var/run/docker.sock:ro # docker socket
ports: ports:
- 7676:3000 - ${HOMEPAGE_PORT}:3000
restart: unless-stopped restart: unless-stopped
labels:
# Nginx Proxy Manager Automation
- "npm.proxy.domains=homepage"
- "npm.proxy.port=${HOMEPAGE_PORT}"
- "npm.proxy.scheme=http"
# Pi-hole Automation (Point to Docker Host/Proxy IP)
- "pihole.custom-record=[[\"homepage\", \"${DOCKER_HOST_IP}\"]]"

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 MiB

View File

@@ -1,10 +1,7 @@
# reaper-web - # reaper-web -
services: services:
reaper: reaper:
build: image: git.wompmacho.com/wompmacho/reaper-web:latest
context: .
args:
REAPER_VERSION: "732"
container_name: reaper-web container_name: reaper-web
privileged: true # Required for low-latency scheduling and /dev/snd access privileged: true # Required for low-latency scheduling and /dev/snd access
shm_size: "1gb" # Critical for GUI performance in KasmVNC shm_size: "1gb" # Critical for GUI performance in KasmVNC
@@ -15,13 +12,13 @@ services:
- VNC_PASSWORD=${VNC_PASSWORD} # Managed via .env - VNC_PASSWORD=${VNC_PASSWORD} # Managed via .env
- PIPEWIRE_LATENCY=128/48000 - PIPEWIRE_LATENCY=128/48000
volumes: volumes:
# Persistent REAPER configuration (keymaps, templates, etc.) # Default REAPER configuration from image
- ${DATA_PATH}/config:/config - ${APP_PATH}/config:/config
# VST/CLAP/LV2 Plugins # VST/CLAP/LV2 Plugins (Persistent)
- ${DATA_PATH}/vst:/vst - ${DATA_PATH}/vst:/vst
- ${DATA_PATH}/vst3:/usr/lib/vst3 - ${DATA_PATH}/vst3:/usr/lib/vst3
- ${DATA_PATH}/lv2:/usr/lib/lv2 - ${DATA_PATH}/lv2:/usr/lib/lv2
# Project files # Project files (Persistent)
- ${DATA_PATH}/projects:/projects - ${DATA_PATH}/projects:/projects
# Audio/MIDI Hardware Passthrough # Audio/MIDI Hardware Passthrough
- /dev/snd:/dev/snd - /dev/snd:/dev/snd

View File

@@ -0,0 +1,49 @@
# slopsmith - https://github.com/byrongamatos/slopsmith
services:
slopsmith:
build:
context: .
dockerfile: dockerfile
args:
# Set to 'true' to bake the plugin into the image during build
- PLUGIN_SECTION_MAP=true
- PLUGIN_NOTE_DETECTION=true
- PLUGIN_FIND_MORE_CDLC=true
- PLUGIN_SPLIT_SCREEN=true
- PLUGIN_SLOPPAK_CONVERTER=true
- PLUGIN_INVERT_HIGHWAY=true
- PLUGIN_JUMPING_TAB=true
- PLUGIN_STEP_MODE=true
- PLUGIN_THEMES=true
- PLUGIN_TUNER=true
container_name: slopsmith-web
volumes:
- "Rocksmith_CDLC:/dlc"
- "${CONFIG_DIR_PATH}:/config"
# Only mount this if you want to override the baked-in plugins or add manual ones
# - "./plugins:/app/plugins"
environment:
- DLC_DIR=/dlc
- CONFIG_DIR=/config
ports:
- "${SLOPSMITH_PORT}:8000"
restart: unless-stopped
labels:
# Nginx Proxy Manager Automation
- "npm.proxy.domains=slopsmith"
- "npm.proxy.host=${DOCKER_HOST_IP}"
- "npm.proxy.port=${SLOPSMITH_PORT}"
- "npm.proxy.scheme=https"
- "npm.proxy.ssl_verify=false"
- "npm.proxy.websockets=true"
# Pi-hole Automation (Point to Docker Host/Proxy IP)
- "pihole.custom-record=[[\"slopsmith\", \"${DOCKER_HOST_IP}\"]]"
volumes:
Rocksmith_CDLC:
name: Rocksmith_CDLC
driver_opts:
type: nfs
o: addr=${NAS_ADDR},nolock,soft,rw
device: :${DLC_DIR_PATH}

View File

@@ -0,0 +1,182 @@
# ── Stage 1: Build RsCli ─────────────────────────────────────────────────
FROM python:3.12-slim AS builder
ARG TARGETARCH
RUN apt-get update && apt-get install -y --no-install-recommends curl git && rm -rf /var/lib/apt/lists/*
RUN curl -sL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh \
&& chmod +x /tmp/dotnet-install.sh \
&& /tmp/dotnet-install.sh --channel 10.0 --install-dir /usr/share/dotnet \
&& ln -s /usr/share/dotnet/dotnet /usr/local/bin/dotnet
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
RUN git clone --depth 1 https://github.com/iminashi/Rocksmith2014.NET.git /tmp/rs2014
RUN git clone --depth 1 https://github.com/byrongamatos/slopsmith.git /tmp/slopsmith
RUN mkdir -p /tmp/rs2014/tools/RsCli/ \
&& cp /tmp/slopsmith/rscli/RsCli.fsproj /tmp/rs2014/tools/RsCli/ \
&& cp /tmp/slopsmith/rscli/Program.fs /tmp/rs2014/tools/RsCli/
RUN sed -i 's|</PropertyGroup>|<NuGetAudit>false</NuGetAudit></PropertyGroup>|' /tmp/rs2014/Directory.Build.props \
&& cd /tmp/rs2014/tools/RsCli \
&& arch="${TARGETARCH:-$(dpkg --print-architecture)}" \
&& case "$arch" in \
arm64|aarch64) RID=linux-arm64 ;; \
amd64|x86_64) RID=linux-x64 ;; \
*) echo "Unsupported build architecture: $arch" >&2; exit 1 ;; \
esac \
&& dotnet publish -c Release -r "$RID" --self-contained -o /opt/rscli
# ── Stage 1b: Build native vgmstream-cli for target arch ─────────────────────
FROM python:3.12-slim AS vgmstream-builder
ARG VGMSTREAM_REF=r2083
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
cmake \
pkg-config \
yasm \
libmpg123-dev \
libvorbis-dev \
libspeex-dev \
libavformat-dev \
libavcodec-dev \
libavutil-dev \
libswresample-dev \
libopus-dev \
git \
&& rm -rf /var/lib/apt/lists/*
RUN git clone --depth 1 --branch "${VGMSTREAM_REF}" https://github.com/vgmstream/vgmstream.git /tmp/vgmstream
RUN cmake -S /tmp/vgmstream -B /tmp/vgmstream/build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_V123=OFF \
-DBUILD_AUDACIOUS=OFF \
-DBUILD_SHARED_LIBS=OFF \
&& cmake --build /tmp/vgmstream/build --config Release --target vgmstream_cli -j"$(nproc)" \
&& mkdir -p /out \
&& cp /tmp/vgmstream/build/cli/vgmstream-cli /out/vgmstream-cli
# ── Stage 2: Final image ────────────────────────────────────────────────
FROM python:3.12-slim
# Accept all plugin toggles
ARG PLUGIN_ULTIMATE_GUITAR=false
ARG PLUGIN_TAB_IMPORT=false
ARG PLUGIN_PRACTICE_JOURNAL=false
ARG PLUGIN_SETLIST_BUILDER=false
ARG PLUGIN_METRONOME=false
ARG PLUGIN_TONE_PLAYER=false
ARG PLUGIN_FRETBOARD=false
ARG PLUGIN_TAB_VIEW=false
ARG PLUGIN_MIDI_AMP_CONTROL=false
ARG PLUGIN_SECTION_MAP=false
ARG PLUGIN_RS1_EXTRACTOR=false
ARG PLUGIN_BASE_GAME_EXTRACTOR=false
ARG PLUGIN_ARRANGEMENT_EDITOR=false
ARG PLUGIN_PROFILE_IMPORT=false
ARG PLUGIN_MIDI_CAPO=false
ARG PLUGIN_NOTE_DETECTION=false
ARG PLUGIN_FIND_MORE_CDLC=false
ARG PLUGIN_PIANO_HIGHWAY=false
ARG PLUGIN_STUDIO=false
ARG PLUGIN_DRUM_HIGHWAY=false
ARG PLUGIN_SPLIT_SCREEN=false
ARG PLUGIN_SLOPPAK_CONVERTER=false
ARG PLUGIN_STEMS_MIXER=false
ARG PLUGIN_INVERT_HIGHWAY=false
ARG PLUGIN_JUMPING_TAB=false
ARG PLUGIN_STEP_MODE=false
ARG PLUGIN_LYRICS_SYNC=false
ARG PLUGIN_NAM_TONE_ENGINE=false
ARG PLUGIN_GUITAR_THEORY_LAB=false
ARG PLUGIN_THEMES=false
ARG PLUGIN_UPDATE_MANAGER=false
ARG PLUGIN_TUNER=false
ARG PLUGIN_SIMPLIFY_CHORDS=false
RUN apt-get update && apt-get install -y --no-install-recommends \
ffmpeg \
fluidsynth \
fluid-soundfont-gm \
libsndfile1 \
curl \
megatools \
libmpg123-0 \
libvorbisfile3 \
libspeex1 \
libopus0 \
git \
openssl \
&& rm -rf /var/lib/apt/lists/*
COPY --from=vgmstream-builder /out/vgmstream-cli /usr/local/bin/vgmstream-cli
RUN chmod +x /usr/local/bin/vgmstream-cli
COPY --from=builder /opt/rscli /opt/rscli
WORKDIR /app
RUN git clone --depth 1 https://github.com/byrongamatos/slopsmith.git /tmp/slopsmith \
&& cp -a /tmp/slopsmith/. /app/ \
&& rm -rf /tmp/slopsmith \
&& cd /app/plugins \
&& if [ "$PLUGIN_ULTIMATE_GUITAR" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-ug.git ultimate_guitar; fi \
&& if [ "$PLUGIN_TAB_IMPORT" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-tabimport.git tab_import; fi \
&& if [ "$PLUGIN_PRACTICE_JOURNAL" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-practice.git practice_journal; fi \
&& if [ "$PLUGIN_SETLIST_BUILDER" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-setlist.git setlist; fi \
&& if [ "$PLUGIN_METRONOME" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-metronome.git metronome; fi \
&& if [ "$PLUGIN_TONE_PLAYER" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-tones.git tones; fi \
&& if [ "$PLUGIN_FRETBOARD" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-fretboard.git fretboard; fi \
&& if [ "$PLUGIN_TAB_VIEW" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-tabview.git tab_view; fi \
&& if [ "$PLUGIN_MIDI_AMP_CONTROL" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-midi.git midi_amp; fi \
&& if [ "$PLUGIN_SECTION_MAP" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-sectionmap.git section_map; fi \
&& if [ "$PLUGIN_RS1_EXTRACTOR" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-rs1extract.git rs1_extract; fi \
&& if [ "$PLUGIN_BASE_GAME_EXTRACTOR" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-discextract.git disc_extract; fi \
&& if [ "$PLUGIN_ARRANGEMENT_EDITOR" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-editor.git editor; fi \
&& if [ "$PLUGIN_PROFILE_IMPORT" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-profileimport.git profileimport; fi \
&& if [ "$PLUGIN_MIDI_CAPO" = "true" ]; then git clone --depth 1 https://github.com/masc0t/slopsmith-plugin-midi-capo.git midi_capo; fi \
&& if [ "$PLUGIN_NOTE_DETECTION" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-notedetect.git note_detect; fi \
&& if [ "$PLUGIN_FIND_MORE_CDLC" = "true" ]; then git clone --depth 1 https://github.com/masc0t/slopsmith-plugin-find-more.git find_more; fi \
&& if [ "$PLUGIN_PIANO_HIGHWAY" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-piano.git piano; fi \
&& if [ "$PLUGIN_STUDIO" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-studio.git studio; fi \
&& if [ "$PLUGIN_DRUM_HIGHWAY" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-drums.git drums; fi \
&& if [ "$PLUGIN_SPLIT_SCREEN" = "true" ]; then git clone --depth 1 https://github.com/topkoa/slopsmith-plugin-splitscreen.git splitscreen; fi \
&& if [ "$PLUGIN_SLOPPAK_CONVERTER" = "true" ]; then git clone --depth 1 https://github.com/topkoa/slopsmith-plugin-sloppak-converter.git sloppak_converter; fi \
&& if [ "$PLUGIN_STEMS_MIXER" = "true" ]; then git clone --depth 1 https://github.com/topkoa/slopsmith-plugin-stems.git stems; fi \
&& if [ "$PLUGIN_INVERT_HIGHWAY" = "true" ]; then git clone --depth 1 https://github.com/masc0t/slopsmith-plugin-invert-highway.git invert_highway; fi \
&& if [ "$PLUGIN_JUMPING_TAB" = "true" ]; then git clone --depth 1 https://github.com/renanboni/slopsmith-plugin-jumpingtab.git jumpingtab; fi \
&& if [ "$PLUGIN_STEP_MODE" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-stepmode.git step_mode; fi \
&& if [ "$PLUGIN_LYRICS_SYNC" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-lyrics-sync.git lyrics_sync; fi \
&& if [ "$PLUGIN_NAM_TONE_ENGINE" = "true" ]; then git clone --depth 1 https://github.com/byrongamatos/slopsmith-plugin-nam-tone.git nam_tone; fi \
&& if [ "$PLUGIN_GUITAR_THEORY_LAB" = "true" ]; then git clone --depth 1 https://github.com/topkoa/slopsmith-plugin-guitar-theory.git guitar_theory_lab; fi \
&& if [ "$PLUGIN_THEMES" = "true" ]; then git clone --depth 1 https://github.com/masc0t/slopsmith-plugin-themes.git themes; fi \
&& if [ "$PLUGIN_UPDATE_MANAGER" = "true" ]; then git clone --depth 1 https://github.com/masc0t/slopsmith-update-manager.git update_manager; fi \
&& if [ "$PLUGIN_TUNER" = "true" ]; then git clone --depth 1 https://github.com/OmikronApex/slopsmith-plugin-tuner.git tuner; fi \
&& if [ "$PLUGIN_SIMPLIFY_CHORDS" = "true" ]; then git clone --depth 1 https://github.com/bkranendonk/slopsmith-plugin-simplify-chords.git simplify_chords; fi \
&& find . -name ".git" -type d -exec rm -rf {} + 2>/dev/null || true \
&& cd /app \
&& find plugins -name "requirements.txt" -exec cat {} + >> requirements.txt \
&& pip install --no-cache-dir -r requirements.txt \
&& mkdir -p /app/certs \
&& openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /app/certs/key.pem -out /app/certs/cert.pem -subj "/C=US/ST=State/L=City/O=Slopsmith/CN=slopsmith.local" \
&& sed -i 's/log_config=None,/log_config=None,\n ssl_keyfile="\/app\/certs\/key.pem",\n ssl_certfile="\/app\/certs\/cert.pem",/g' /app/main.py \
&& sed -i 's/ART_CACHE_DIR = CONFIG_DIR \/ "art_cache"/ART_CACHE_DIR = CONFIG_DIR \/ "data" \/ "art_cache"/g' /app/server.py \
&& sed -i 's/AUDIO_CACHE_DIR = CONFIG_DIR \/ "audio_cache"/AUDIO_CACHE_DIR = CONFIG_DIR \/ "data" \/ "audio_cache"/g' /app/server.py \
&& sed -i 's/SLOPPAK_CACHE_DIR = CONFIG_DIR \/ "sloppak_cache"/SLOPPAK_CACHE_DIR = CONFIG_DIR \/ "data" \/ "sloppak_cache"/g' /app/server.py \
&& sed -i 's/self.db_path = str(CONFIG_DIR \/ "web_library.db")/self.db_path = str(CONFIG_DIR \/ "data" \/ "web_library.db")/g' /app/server.py \
&& sed -i 's/CONFIG_DIR.mkdir(parents=True, exist_ok=True)/(CONFIG_DIR \/ "data").mkdir(parents=True, exist_ok=True)/g' /app/server.py \
&& sed -i 's/_PIP_TARGET = Path(os.environ.get("CONFIG_DIR", "\/config")) \/ "pip_packages"/_PIP_TARGET = Path(os.environ.get("CONFIG_DIR", "\/config")) \/ "data" \/ "pip_packages"/g' /app/plugins/__init__.py \
&& sed -i 's/def _install_requirements(plugin_dir: Path, plugin_id: str):/def _install_requirements(plugin_dir: Path, plugin_id: str):\n return True/g' /app/plugins/__init__.py
ENV PYTHONPATH=/app/lib:/app
ENV RSCLI_PATH=/opt/rscli/RsCli
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
EXPOSE 8000
CMD ["python", "main.py"]