From 1fc08363dfdaf83af1bc19d47ec7cc953105a960 Mon Sep 17 00:00:00 2001 From: him <143047010+itsrllyhim@users.noreply.github.com> Date: Tue, 5 Sep 2023 18:26:58 +0000 Subject: [PATCH] Add trilium app --- README.md | 1 + apps/trilium/config.json | 16 ++++++++++++ apps/trilium/docker-compose.yml | 36 +++++++++++++++++++++++++++ apps/trilium/metadata/description.md | 25 +++++++++++++++++++ apps/trilium/metadata/logo.jpg | Bin 0 -> 15683 bytes 5 files changed, 78 insertions(+) create mode 100644 apps/trilium/config.json create mode 100644 apps/trilium/docker-compose.yml create mode 100644 apps/trilium/metadata/description.md create mode 100644 apps/trilium/metadata/logo.jpg diff --git a/README.md b/README.md index d6e7ad6d..c8f19a09 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Tautulli](https://github.com/Tautulli/Tautulli) - A Python based monitoring and tracking tool for Plex Media Server - [Teddit](https://codeberg.org/teddit/teddit) - Alternative Reddit front-end focused on privacy https://teddit.net - [Transmission](https://github.com/transmission/transmission) - Fast, easy, and free BitTorrent client +- [Trillium](https://github.com/zadam/trilium) - An open-source, self-hosted Notion alterative - [Tube Archivist](https://github.com/tubearchivist/tubearchivist) - Your self-hosted YouTube media server - [Umami](https://github.com/umami-software/umami) - Umami is a simple, fast, privacy-focused alternative to Google Analytics. - [Unmanic](https://github.com/Unmanic/unmanic) - Unmanic gives you the power to automate the management of any file library. diff --git a/apps/trilium/config.json b/apps/trilium/config.json new file mode 100644 index 00000000..523a1b96 --- /dev/null +++ b/apps/trilium/config.json @@ -0,0 +1,16 @@ +{ + "name": "Trillium", + "available": true, + "port": 8267, + "exposable": true, + "id": "trillium", + "description": "Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases. ", + "tipi_version": 1, + "version": "1.25.1", + "categories": [ + "utilities" + ], + "short_desc": "An open-source, self-hosted Notion alterative", + "author": "zadam", + "source": "https://github.com/zadam/trilium" + } \ No newline at end of file diff --git a/apps/trilium/docker-compose.yml b/apps/trilium/docker-compose.yml new file mode 100644 index 00000000..0cf8d2f7 --- /dev/null +++ b/apps/trilium/docker-compose.yml @@ -0,0 +1,36 @@ +version: "3.7" +services: + trillium: + image: docker pull ghcr.io/zadam/trilium:0.61.5-beta + container_name: trillium + ports: + - ${APP_PORT}:8080 + volumes: + - ${APP_DATA_DIR}/home/node/trilium-data + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.trillium-web-redirect.redirectscheme.scheme: https + traefik.http.services.trillium.loadbalancer.server.port: 8080 + # Web + traefik.http.routers.trillium-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.trillium-insecure.entrypoints: web + traefik.http.routers.trillium-insecure.service: trillium + traefik.http.routers.trillium-insecure.middlewares: trillium-web-redirect + # Websecure + traefik.http.routers.trillium.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.trillium.entrypoints: websecure + traefik.http.routers.trillium.service: trillium + traefik.http.routers.trillium.tls.certresolver: myresolver + # Local domain + traefik.http.routers.trillium-local-insecure.rule: Host(`trillium.${LOCAL_DOMAIN}`) + traefik.http.routers.trillium-local-insecure.entrypoints: web + traefik.http.routers.trillium-local-insecure.service: trillium + traefik.http.routers.trillium-local-insecure.middlewares: trillium-web-redirect + # Local domain secure + traefik.http.routers.trillium-local.rule: Host(`trillium.${LOCAL_DOMAIN}`) + traefik.http.routers.trillium-local.entrypoints: websecure + traefik.http.routers.trillium-local.service: trillium + traefik.http.routers.trillium-local.tls: true \ No newline at end of file diff --git a/apps/trilium/metadata/description.md b/apps/trilium/metadata/description.md new file mode 100644 index 00000000..ab747271 --- /dev/null +++ b/apps/trilium/metadata/description.md @@ -0,0 +1,25 @@ +Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases. See [screenshots](https://github.com/zadam/trilium/wiki/Screenshot-tour) for quick overview: + +Trilium Screenshot + +## 🎁 Features + +* Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://github.com/zadam/trilium/wiki/Cloning-notes)) +* Rich WYSIWYG note editing including e.g. tables, images and [math](https://github.com/zadam/trilium/wiki/Text-notes#math-support) with markdown [autoformat](https://github.com/zadam/trilium/wiki/Text-notes#autoformat) +* Support for editing [notes with source code](https://github.com/zadam/trilium/wiki/Code-notes), including syntax highlighting +* Fast and easy [navigation between notes](https://github.com/zadam/trilium/wiki/Note-navigation), full text search and [note hoisting](https://github.com/zadam/trilium/wiki/Note-hoisting) +* Seamless [note versioning](https://github.com/zadam/trilium/wiki/Note-revisions) +* Note [attributes](https://github.com/zadam/trilium/wiki/Attributes) can be used for note organization, querying and advanced [scripting](https://github.com/zadam/trilium/wiki/Scripts) +* [Synchronization](https://github.com/zadam/trilium/wiki/Synchronization) with self-hosted sync server + * there's a [3rd party service for hosting synchronisation server](https://trilium.cc/paid-hosting) +* [Sharing](https://github.com/zadam/trilium/wiki/Sharing) (publishing) notes to public internet +* Strong [note encryption](https://github.com/zadam/trilium/wiki/Protected-notes) with per-note granularity +* Sketching diagrams with built-in Excalidraw (note type "canvas") +* [Relation maps](https://github.com/zadam/trilium/wiki/Relation-map) and [link maps](https://github.com/zadam/trilium/wiki/Link-map) for visualizing notes and their relations +* [Scripting](https://github.com/zadam/trilium/wiki/Scripts) - see [Advanced showcases](https://github.com/zadam/trilium/wiki/Advanced-showcases) +* [REST API](https://github.com/zadam/trilium/wiki/ETAPI) for automation +* Scales well in both usability and performance upwards of 100 000 notes +* Touch optimized [mobile frontend](https://github.com/zadam/trilium/wiki/Mobile-frontend) for smartphones and tablets +* [Night theme](https://github.com/zadam/trilium/wiki/Themes) +* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) and [Markdown import & export](https://github.com/zadam/trilium/wiki/Markdown) +* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) for easy saving of web content \ No newline at end of file diff --git a/apps/trilium/metadata/logo.jpg b/apps/trilium/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43fea14d520fb7fe411aeb59ac7d955d5cfa5374 GIT binary patch literal 15683 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 literal 0 HcmV?d00001