From ce8c1586eca0d9dcc2517cf1919c46c146cd59dd Mon Sep 17 00:00:00 2001 From: alexbelgium Date: Sun, 11 Oct 2026 13:23:56 +0200 Subject: [PATCH] feat(joplin_desktop): new add-on streaming Joplin desktop via Selkies (#3100) Wraps lscr.io/linuxserver/joplin (amd64 only; Joplin ships no Linux arm64 build) and shares the Selkies startup scripts with webtop/claude_desktop by symlink, the same way webtop_kde does. Chromium is told to keep shared memory out of /dev/shm because Home Assistant ignores shm_size. Co-Authored-By: Claude Opus 5.5 --- joplin_desktop/CHANGELOG.md | 4 + joplin_desktop/Dockerfile | 136 ++++++++++++++++++ joplin_desktop/README.md | 97 +++++++++++++ joplin_desktop/apparmor.txt | 72 ++++++++++ joplin_desktop/build.json | 5 + joplin_desktop/config.yaml | 107 ++++++++++++++ joplin_desktop/icon.png | Bin 0 -> 6325 bytes joplin_desktop/logo.png | Bin 0 -> 6325 bytes .../rootfs/etc/cont-init.d/20-folders.sh | 1 + .../etc/cont-init.d/21-gpu_permissions.sh | 1 + .../etc/cont-init.d/80-configuration.sh | 1 + .../rootfs/etc/cont-init.d/90-ingress.sh | 1 + .../rootfs/etc/cont-init.d/90-ssl.sh | 1 + .../rootfs/etc/nginx/includes/mime.types | 1 + .../etc/nginx/includes/proxy_params.conf | 1 + .../rootfs/etc/nginx/includes/resolver.conf | 1 + .../etc/nginx/includes/server_params.conf | 1 + .../rootfs/etc/nginx/includes/ssl_params.conf | 1 + .../rootfs/etc/nginx/includes/upstream.conf | 1 + joplin_desktop/updater.json | 9 ++ 20 files changed, 441 insertions(+) create mode 100644 joplin_desktop/CHANGELOG.md create mode 100644 joplin_desktop/Dockerfile create mode 100644 joplin_desktop/README.md create mode 100644 joplin_desktop/apparmor.txt create mode 100644 joplin_desktop/build.json create mode 100644 joplin_desktop/config.yaml create mode 100644 joplin_desktop/icon.png create mode 100644 joplin_desktop/logo.png create mode 120000 joplin_desktop/rootfs/etc/cont-init.d/20-folders.sh create mode 120000 joplin_desktop/rootfs/etc/cont-init.d/21-gpu_permissions.sh create mode 120000 joplin_desktop/rootfs/etc/cont-init.d/80-configuration.sh create mode 120000 joplin_desktop/rootfs/etc/cont-init.d/90-ingress.sh create mode 120000 joplin_desktop/rootfs/etc/cont-init.d/90-ssl.sh create mode 120000 joplin_desktop/rootfs/etc/nginx/includes/mime.types create mode 120000 joplin_desktop/rootfs/etc/nginx/includes/proxy_params.conf create mode 120000 joplin_desktop/rootfs/etc/nginx/includes/resolver.conf create mode 120000 joplin_desktop/rootfs/etc/nginx/includes/server_params.conf create mode 120000 joplin_desktop/rootfs/etc/nginx/includes/ssl_params.conf create mode 120000 joplin_desktop/rootfs/etc/nginx/includes/upstream.conf create mode 100644 joplin_desktop/updater.json diff --git a/joplin_desktop/CHANGELOG.md b/joplin_desktop/CHANGELOG.md new file mode 100644 index 0000000000..63fb2fdfd9 --- /dev/null +++ b/joplin_desktop/CHANGELOG.md @@ -0,0 +1,4 @@ + +## 3.7.21 (2026-10-11) +- Initial release: Joplin desktop streamed to the browser with Selkies, based on linuxserver/docker-joplin (amd64 only, as Joplin publishes no Linux arm64 build) +- Shares the Selkies startup scripts with the webtop and claude_desktop add-ons (data location, GPU permissions, ingress, SSL) diff --git a/joplin_desktop/Dockerfile b/joplin_desktop/Dockerfile new file mode 100644 index 0000000000..7d296660a1 --- /dev/null +++ b/joplin_desktop/Dockerfile @@ -0,0 +1,136 @@ +#============================# +# ALEXBELGIUM'S DOCKERFILE # +#============================# +# _.------. +# _.-` ('>.-`"3.7.21""-. +# '.--'` _'` _ .--.) +# -' '-.-';` ` +# ' - _.' ``'--. +# '---` .-'"3.7.21"` +# /` +#=== Home Assistant Addon ===# + +################# +# 1 Build Image # +################# + +ARG BUILD_FROM +ARG BUILD_VERSION +FROM ${BUILD_FROM} + +################## +# 2 Modify Image # +################## + +# Set S6 wait time +ENV S6_CMD_WAIT_FOR_SERVICES=1 \ + S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \ + S6_SERVICES_GRACETIME=0 + +USER root + +# load volume +VOLUME [ "/sys/fs/cgroup" ] + +# Set shell +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +# Allow UID and GID setting +# hadolint ignore=SC2015,DL4006,SC2013,SC2086 +RUN \ + # Change home folder location + usermod --home /config/data abc && \ + \ + # Set +e + if [[ -d /etc/services.d ]] && ls /etc/services.d/*/run 1> /dev/null 2>&1; then sed -i "1a set +e" /etc/services.d/*/run; fi + +# Global LSIO modifications +COPY ha_lsio.sh /ha_lsio.sh +ARG CONFIGLOCATION="/config/data" +RUN chmod 744 /ha_lsio.sh && if grep -qr "lsio" /etc; then /ha_lsio.sh "$CONFIGLOCATION"; fi && rm /ha_lsio.sh + +################## +# 3 Install apps # +################## + +# Add rootfs +COPY rootfs/ / +RUN find . -type f \( -name "*.sh" -o -name "run" -o -name "finish" \) -print -exec chmod +x {} \; + +# Docker's default /dev/shm is 64 MB and Home Assistant ignores an add-on's shm_size, while +# LinuxServer documents 1 GB as needed for Electron apps. Make Chromium keep its shared memory +# out of /dev/shm, as claude_desktop does when /dev/shm is small. The grep fails the build if a +# future upstream wrapper no longer has the --no-sandbox anchor, instead of shipping without it. +RUN sed -i 's|--no-sandbox|--no-sandbox --disable-dev-shm-usage|' /usr/bin/joplin && \ + grep -q -- '--disable-dev-shm-usage' /usr/bin/joplin + +# Uses /bin for compatibility purposes +# hadolint ignore=DL4005 +RUN if [ ! -f /bin/sh ] && [ -f /usr/bin/sh ]; then ln -s /usr/bin/sh /bin/sh; fi && \ + if [ ! -f /bin/bash ] && [ -f /usr/bin/bash ]; then ln -s /usr/bin/bash /bin/bash; fi + +# Modules +ARG MODULES="00-banner.sh 01-custom_script.sh 00-local_mounts.sh 00-smb_mounts.sh 90-dns_set.sh" + +# Automatic modules download +COPY ha_automodules.sh /ha_automodules.sh +RUN chmod 744 /ha_automodules.sh && /ha_automodules.sh "$MODULES" && rm /ha_automodules.sh + +# Manual apps +ENV PACKAGES="nginx" + +# Automatic apps & bashio +COPY ha_autoapps.sh /ha_autoapps.sh +RUN chmod 744 /ha_autoapps.sh && /ha_autoapps.sh "$PACKAGES" && rm /ha_autoapps.sh + +################ +# 4 Entrypoint # +################ + +# Add entrypoint +#ENV S6_STAGE2_HOOK=/ha_entrypoint.sh +COPY ha_entrypoint.sh /ha_entrypoint.sh +RUN chmod 777 /ha_entrypoint.sh + +# Install bashio +COPY bashio-standalone.sh /usr/local/lib/bashio-standalone.sh +RUN chmod 0755 /usr/local/lib/bashio-standalone.sh + +#WORKDIR / +ENTRYPOINT [ "/usr/bin/env" ] +CMD [ "/ha_entrypoint.sh" ] + +############ +# 5 Labels # +############ + +ARG BUILD_ARCH +ARG BUILD_DATE +ARG BUILD_DESCRIPTION +ARG BUILD_NAME +ARG BUILD_REF +ARG BUILD_REPOSITORY +ARG BUILD_VERSION +ENV BUILD_VERSION="${BUILD_VERSION}" +LABEL \ + io.hass.name="${BUILD_NAME}" \ + io.hass.description="${BUILD_DESCRIPTION}" \ + io.hass.arch="${BUILD_ARCH}" \ + io.hass.type="addon" \ + io.hass.version=${BUILD_VERSION} \ + maintainer="alexbelgium (https://github.com/alexbelgium)" \ + org.opencontainers.image.title="${BUILD_NAME}" \ + org.opencontainers.image.description="${BUILD_DESCRIPTION}" \ + org.opencontainers.image.vendor="Home Assistant Add-ons" \ + org.opencontainers.image.authors="alexbelgium (https://github.com/alexbelgium)" \ + org.opencontainers.image.licenses="MIT" \ + org.opencontainers.image.url="https://github.com/alexbelgium" \ + org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \ + org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \ + org.opencontainers.image.created=${BUILD_DATE} \ + org.opencontainers.image.revision=${BUILD_REF} \ + org.opencontainers.image.version=${BUILD_VERSION} + +#################### +# 6 HealthcheckNOT # +#################### diff --git a/joplin_desktop/README.md b/joplin_desktop/README.md new file mode 100644 index 0000000000..c81cae330a --- /dev/null +++ b/joplin_desktop/README.md @@ -0,0 +1,97 @@ +# Home assistant add-on: Joplin Desktop + + +I maintain this and other Home Assistant add-ons in my free time: keeping up with upstream changes, HA changes, and testing on real hardware takes a lot of time (and some money). I use around 5-10 of my >110 addons so regularly I install test machines (and purchase some test services such as vpn) that I don't use myself to troubleshoot and improve the addons + +If this add-on saves you time or makes your setup easier, I would be very grateful for your support! + +[![Buy me a coffee][donation-badge]](https://www.buymeacoffee.com/alexbelgium) +[![Donate via PayPal][paypal-badge]](https://www.paypal.com/donate/?hosted_button_id=DZFULJZTP3UQA) + +## Addon informations + +![Version](https://img.shields.io/badge/dynamic/yaml?label=Version&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fjoplin_desktop%2Fconfig.yaml) +![Ingress](https://img.shields.io/badge/dynamic/yaml?label=Ingress&query=%24.ingress&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fjoplin_desktop%2Fconfig.yaml) +![Arch](https://img.shields.io/badge/dynamic/yaml?color=success&label=Arch&query=%24.arch&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fjoplin_desktop%2Fconfig.yaml) + +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/9c6cf10bdbba45ecb202d7f579b5be0e)](https://www.codacy.com/gh/alexbelgium/hassio-addons/dashboard?utm_source=github.com&utm_medium=referral&utm_content=alexbelgium/hassio-addons&utm_campaign=Badge_Grade) +[![GitHub Super-Linter](https://img.shields.io/github/actions/workflow/status/alexbelgium/hassio-addons/weekly-supelinter.yaml?label=Lint%20code%20base)](https://github.com/alexbelgium/hassio-addons/actions/workflows/weekly-supelinter.yaml) +[![Builder](https://img.shields.io/github/actions/workflow/status/alexbelgium/hassio-addons/onpush_builder.yaml?label=Builder)](https://github.com/alexbelgium/hassio-addons/actions/workflows/onpush_builder.yaml) + +[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=flat&logoColor=white +[paypal-badge]: https://img.shields.io/badge/Donate%20via%20PayPal-0070BA?logo=paypal&style=flat&logoColor=white + +_Thanks to everyone having starred my repo! To star it click on the image below, then it will be on top right. Thanks!_ + +[![Stargazers repo roster for @alexbelgium/hassio-addons](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.github/stars2.svg)](https://github.com/alexbelgium/hassio-addons/stargazers) + +![downloads evolution](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/joplin_desktop/stats.png) + +## About + +[Joplin](https://joplinapp.org) is an open source note-taking and to-do application. This add-on runs the full Joplin **desktop** app and streams it to your browser with Selkies, so you can use it from any device without installing anything. + +This addon is based on the docker image + +If you only need to sync your notes between your own Joplin apps, the [Joplin Server](https://github.com/alexbelgium/hassio-addons/tree/master/joplin) add-on is lighter. The two work together: point this desktop app at your Joplin Server in Joplin's synchronisation settings. + +Only amd64 is supported, because Joplin does not publish a Linux arm64 build. + +## Configuration + +Webui can be found with ingress or at (or ). The ports are disabled by default and can be enabled in the add-on network settings. If you open a port, set `PASSWORD`: the web interface then asks for user `abc` and that password. + +Joplin's profile (notes, settings, plugins) is stored in `data_location`, by default `/config/data`, which is the add-on's own folder under `/addon_configs/` on your Home Assistant host. It is kept across restarts and updates and included in backups. + +Use the add-on `env_vars` option to pass extra environment variables (uppercase or lowercase names). See for details. + +```yaml +PUID: 1000 # user id of the desktop user and owner of the data folder +PGID: 1000 # group id of the desktop user +TZ: Europe/Paris # timezone, Country/City according to https://manpages.ubuntu.com/manpages/trusty/man3/DateTime::TimeZone::Catalog.3pm.html +KEYBOARD: fr-fr-azerty # keyboard layout +PASSWORD: "mypassword" # basic authentication on the web interface (user abc). Recommended if you open a port +DRINODE: /dev/dri/renderD128 # GPU device used for rendering and encoding, if the default does not work +data_location: /config/data # where Joplin's profile is stored; must be in /config, /share, /data or /mnt +additional_apps: "" # comma-separated apt packages to install at every start (not persistent otherwise) +use_own_certs: false # use your own certificates from /ssl for the https port 3001 +certfile: fullchain.pem # certificate file in /ssl +keyfile: privkey.pem # key file in /ssl +DNS_server: 8.8.8.8 # keep blank to use your router's DNS +localdisks: sda1 # put the hardware name of your drive to mount separated by commas, or its label. ex. sda1, sdb1, MYNAS... Add a folder to mount only it, ex. MYNAS/public mounts at /mnt/MYNAS/public +networkdisks: "//SERVER/SHARE" # optional, list of smb servers to mount, separated by commas +cifsusername: "username" # optional, smb username, same for all smb shares +cifspassword: "password" # optional, smb password +cifsdomain: "domain" # optional, allow setting the domain for the smb share +``` + +### Useful upstream variables + +These are read by the LinuxServer Selkies base image and can be set through `env_vars`. The full list is at . + +| Variable | Effect | +| --- | --- | +| `RESTART_APP` | `true` restarts Joplin automatically if its window is closed | +| `NO_DECOR` | any value removes window decorations, so Joplin fills the browser like a web app | +| `NO_FULL` | any value stops the window manager from maximising the window | +| `HARDEN_DESKTOP` | `true` disables the terminal, sudo, xdg-open and Selkies file transfers, keeping only Joplin | +| `SELKIES_AUDIO_ENABLED`, `SELKIES_MICROPHONE_ENABLED` | `false` disables audio or microphone streaming | +| `SELKIES_FRAMERATE` | streaming frame rate cap, e.g. `30` | + +## Installation + + +The installation of this add-on is pretty straightforward and not different in comparison to installing any other add-on. + +1. Add my add-ons repository to your home assistant instance (in supervisor addons store at top right, or click button below if you have configured my HA) + [![Open your Home Assistant instance and show the add add-on repository dialog with a specific repository URL pre-filled.](https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons) +1. Install this add-on. +1. Click the `Save` button to store your configuration. +1. Set the add-on options to your preferences +1. Start the add-on. +1. Check the logs of the add-on to see if everything went well. +1. Open the webUI and adapt the software options + +## Support + +Create an issue on github diff --git a/joplin_desktop/apparmor.txt b/joplin_desktop/apparmor.txt new file mode 100644 index 0000000000..8b5ce07f4e --- /dev/null +++ b/joplin_desktop/apparmor.txt @@ -0,0 +1,72 @@ +#include + +profile joplin_desktop_addon flags=(attach_disconnected,mediate_deleted) { + #include + + capability chown, + capability dac_override, + capability dac_read_search, + capability fowner, + capability setgid, + capability setuid, + capability sys_chroot, + capability sys_admin, + file, + signal, + mount, + umount, + remount, + network udp, + network tcp, + network dgram, + network stream, + network inet, + network inet6, + network netlink raw, + network unix dgram, + + +# S6-Overlay + /init ix, + /run/{s6,s6-rc*,service}/** ix, + /package/** ix, + /command/** ix, + /run/{,**} rwk, + /dev/tty rw, + /bin/** ix, + /usr/bin/** ix, + /usr/lib/bashio/** ix, + /etc/s6/** rix, + /run/s6/** rix, + /etc/services.d/** rwix, + /etc/cont-init.d/** rwix, + /etc/cont-finish.d/** rwix, + /init rix, + /var/run/** mrwkl, + /var/run/ mrwkl, + /dev/i2c-1 mrwkl, + # Files required + /dev/fuse mrwkl, + /dev/sda1 mrwkl, + /dev/sdb1 mrwkl, + /dev/nvme0 mrwkl, + /dev/nvme0n1 mrwkl, + /dev/nvme1 mrwkl, + /dev/mmcblk0p1 mrwkl, + /dev/* mrwkl, + /udev/* mrwkl, + /tmp/** mrkwl, + /dev/fuse/** mrkwl, + /dev/** mrkwl, + /sys/firmware/** mrkwl, + + # Data access + /data/** rw, + + # suppress ptrace denials when using 'docker ps' or using 'ps' inside a container + ptrace (trace,read) peer=docker-default, + + # docker daemon confinement requires explict allow rule for signal + signal (receive) set=(kill,term) peer=/usr/bin/docker, + +} diff --git a/joplin_desktop/build.json b/joplin_desktop/build.json new file mode 100644 index 0000000000..b2f7300e24 --- /dev/null +++ b/joplin_desktop/build.json @@ -0,0 +1,5 @@ +{ + "build_from": { + "amd64": "lscr.io/linuxserver/joplin:latest" + } +} diff --git a/joplin_desktop/config.yaml b/joplin_desktop/config.yaml new file mode 100644 index 0000000000..546c18feaa --- /dev/null +++ b/joplin_desktop/config.yaml @@ -0,0 +1,107 @@ +arch: + - amd64 +audio: true +description: Joplin desktop note-taking app accessible via any modern web browser +devices: + - /dev/dri + - /dev/dri/card0 + - /dev/dri/card1 + - /dev/dri/renderD128 + - /dev/sda + - /dev/sdb + - /dev/sdc + - /dev/sdd + - /dev/sde + - /dev/sdf + - /dev/sdg + - /dev/nvme + - /dev/nvme0 + - /dev/nvme0n1 + - /dev/nvme0n1p1 + - /dev/nvme0n1p2 + - /dev/mmcblk + - /dev/sda1 + - /dev/sdb1 + - /dev/sdc1 + - /dev/sdd1 + - /dev/sde1 + - /dev/sdf1 + - /dev/sdg1 + - /dev/sda2 + - /dev/sdb2 + - /dev/sdc2 + - /dev/sdd2 + - /dev/sde2 + - /dev/sdf2 + - /dev/sdg2 + - /dev/sda3 + - /dev/sdb3 + - /dev/sda4 + - /dev/sdb4 + - /dev/sda5 + - /dev/sda6 + - /dev/sda7 + - /dev/sda8 + - /dev/nvme1 + - /dev/nvme2 +environment: + FM_HOME: /config/data + HOME: /config/data + START_DOCKER: "false" + TITLE: Joplin +image: ghcr.io/alexbelgium/joplin_desktop-{arch} +ingress: true +init: false +map: + - app_config:rw + - media:rw + - share:rw + - ssl +name: Joplin Desktop +options: + env_vars: [] + DNS_server: 8.8.8.8 + PGID: 1000 + PUID: 1000 + additional_apps: "" + certfile: fullchain.pem + data_location: /config/data + keyfile: privkey.pem + use_own_certs: false +panel_admin: false +panel_icon: mdi:notebook-edit +ports: + 3000/tcp: null + 3001/tcp: null +ports_description: + 3000/tcp: Web interface (http) + 3001/tcp: Web interface (https) +privileged: + - SYS_ADMIN + - DAC_READ_SEARCH +schema: + env_vars: + - name: match(^[A-Za-z0-9_]+$) + value: str? + DNS_server: str? + DRINODE: list(/dev/dri/card0|/dev/dri/card1|/dev/dri/card2|/dev/dri/renderD128|/dev/dri/renderD129|)? + KEYBOARD: list(da-dk-qwerty|de-de-qwertz|en-gb-qwerty|en-us-qwerty|es-es-qwerty|fr-ch-qwertz|fr-fr-azerty|it-it-qwerty|ja-jp-qwerty|pt-br-qwerty|sv-se-qwerty|tr-tr-qwerty)? + PASSWORD: password? + PGID: int + PUID: int + TZ: match([A-Z][a-z]*./[A-Z][a-z]*.)? + additional_apps: str? + certfile: str + cifsdomain: str? + cifspassword: password? + cifsusername: str? + data_location: str? + keyfile: str + localdisks: str? + networkdisks: str? + use_own_certs: bool? +slug: joplin_desktop +udev: true +url: https://github.com/alexbelgium/hassio-addons/tree/master/joplin_desktop +version: "3.7.21" +video: true diff --git a/joplin_desktop/icon.png b/joplin_desktop/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..20ecba85741ba25f662d444371a813a519f92e66 GIT binary patch literal 6325 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 M(KOVkRda~`9|Di7fdBvi literal 0 HcmV?d00001 diff --git a/joplin_desktop/logo.png b/joplin_desktop/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..20ecba85741ba25f662d444371a813a519f92e66 GIT binary patch literal 6325 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 M(KOVkRda~`9|Di7fdBvi literal 0 HcmV?d00001 diff --git a/joplin_desktop/rootfs/etc/cont-init.d/20-folders.sh b/joplin_desktop/rootfs/etc/cont-init.d/20-folders.sh new file mode 120000 index 0000000000..629ed511b9 --- /dev/null +++ b/joplin_desktop/rootfs/etc/cont-init.d/20-folders.sh @@ -0,0 +1 @@ +../../../../claude_desktop/rootfs/etc/cont-init.d/20-folders.sh \ No newline at end of file diff --git a/joplin_desktop/rootfs/etc/cont-init.d/21-gpu_permissions.sh b/joplin_desktop/rootfs/etc/cont-init.d/21-gpu_permissions.sh new file mode 120000 index 0000000000..55bb6c8b96 --- /dev/null +++ b/joplin_desktop/rootfs/etc/cont-init.d/21-gpu_permissions.sh @@ -0,0 +1 @@ +../../../../claude_desktop/rootfs/etc/cont-init.d/21-gpu_permissions.sh \ No newline at end of file diff --git a/joplin_desktop/rootfs/etc/cont-init.d/80-configuration.sh b/joplin_desktop/rootfs/etc/cont-init.d/80-configuration.sh new file mode 120000 index 0000000000..2e64a3f374 --- /dev/null +++ b/joplin_desktop/rootfs/etc/cont-init.d/80-configuration.sh @@ -0,0 +1 @@ +../../../../claude_desktop/rootfs/etc/cont-init.d/80-configuration.sh \ No newline at end of file diff --git a/joplin_desktop/rootfs/etc/cont-init.d/90-ingress.sh b/joplin_desktop/rootfs/etc/cont-init.d/90-ingress.sh new file mode 120000 index 0000000000..8808b56360 --- /dev/null +++ b/joplin_desktop/rootfs/etc/cont-init.d/90-ingress.sh @@ -0,0 +1 @@ +../../../../claude_desktop/rootfs/etc/cont-init.d/90-ingress.sh \ No newline at end of file diff --git a/joplin_desktop/rootfs/etc/cont-init.d/90-ssl.sh b/joplin_desktop/rootfs/etc/cont-init.d/90-ssl.sh new file mode 120000 index 0000000000..4df0fcb2b5 --- /dev/null +++ b/joplin_desktop/rootfs/etc/cont-init.d/90-ssl.sh @@ -0,0 +1 @@ +../../../../webtop_kde/rootfs/etc/cont-init.d/90-ssl.sh \ No newline at end of file diff --git a/joplin_desktop/rootfs/etc/nginx/includes/mime.types b/joplin_desktop/rootfs/etc/nginx/includes/mime.types new file mode 120000 index 0000000000..bcff4e221b --- /dev/null +++ b/joplin_desktop/rootfs/etc/nginx/includes/mime.types @@ -0,0 +1 @@ +../../../../../claude_desktop/rootfs/etc/nginx/includes/mime.types \ No newline at end of file diff --git a/joplin_desktop/rootfs/etc/nginx/includes/proxy_params.conf b/joplin_desktop/rootfs/etc/nginx/includes/proxy_params.conf new file mode 120000 index 0000000000..f96d9e74d2 --- /dev/null +++ b/joplin_desktop/rootfs/etc/nginx/includes/proxy_params.conf @@ -0,0 +1 @@ +../../../../../claude_desktop/rootfs/etc/nginx/includes/proxy_params.conf \ No newline at end of file diff --git a/joplin_desktop/rootfs/etc/nginx/includes/resolver.conf b/joplin_desktop/rootfs/etc/nginx/includes/resolver.conf new file mode 120000 index 0000000000..76e3fade4e --- /dev/null +++ b/joplin_desktop/rootfs/etc/nginx/includes/resolver.conf @@ -0,0 +1 @@ +../../../../../claude_desktop/rootfs/etc/nginx/includes/resolver.conf \ No newline at end of file diff --git a/joplin_desktop/rootfs/etc/nginx/includes/server_params.conf b/joplin_desktop/rootfs/etc/nginx/includes/server_params.conf new file mode 120000 index 0000000000..22db18509c --- /dev/null +++ b/joplin_desktop/rootfs/etc/nginx/includes/server_params.conf @@ -0,0 +1 @@ +../../../../../claude_desktop/rootfs/etc/nginx/includes/server_params.conf \ No newline at end of file diff --git a/joplin_desktop/rootfs/etc/nginx/includes/ssl_params.conf b/joplin_desktop/rootfs/etc/nginx/includes/ssl_params.conf new file mode 120000 index 0000000000..f0235e59e9 --- /dev/null +++ b/joplin_desktop/rootfs/etc/nginx/includes/ssl_params.conf @@ -0,0 +1 @@ +../../../../../claude_desktop/rootfs/etc/nginx/includes/ssl_params.conf \ No newline at end of file diff --git a/joplin_desktop/rootfs/etc/nginx/includes/upstream.conf b/joplin_desktop/rootfs/etc/nginx/includes/upstream.conf new file mode 120000 index 0000000000..f64ccbb645 --- /dev/null +++ b/joplin_desktop/rootfs/etc/nginx/includes/upstream.conf @@ -0,0 +1 @@ +../../../../../claude_desktop/rootfs/etc/nginx/includes/upstream.conf \ No newline at end of file diff --git a/joplin_desktop/updater.json b/joplin_desktop/updater.json new file mode 100644 index 0000000000..b3be2fbda2 --- /dev/null +++ b/joplin_desktop/updater.json @@ -0,0 +1,9 @@ +{ + "github_fulltag": "false", + "last_update": "2026-10-11", + "repository": "alexbelgium/hassio-addons", + "slug": "joplin_desktop", + "source": "github", + "upstream_repo": "linuxserver/docker-joplin", + "upstream_version": "3.7.21" +}