aboutsummaryrefslogtreecommitdiffstats
path: root/www/diddle
diff options
context:
space:
mode:
authorJan T <jan@jantuomi.fi>2026-07-23 19:24:22 +0300
committerJan Tuomi <jan@jantuomi.fi>2026-07-23 19:26:00 +0300
commitd57b5cd7830a5b4ed1437b1b648dca62a9b6eea3 (patch)
tree85c5e69424dd2fe4c07be9dbb1b4267ee1503c3d /www/diddle
*/*: initial commit
Diffstat (limited to 'www/diddle')
-rw-r--r--www/diddle/Makefile58
-rw-r--r--www/diddle/files/diddle.in71
-rw-r--r--www/diddle/files/pkg-message.in31
-rw-r--r--www/diddle/pkg-descr1
4 files changed, 161 insertions, 0 deletions
diff --git a/www/diddle/Makefile b/www/diddle/Makefile
new file mode 100644
index 0000000..3b26d1b
--- /dev/null
+++ b/www/diddle/Makefile
@@ -0,0 +1,58 @@
+PORTNAME= diddle
+PORTVERSION= 1.0.0
+CATEGORIES= www
+
+MAINTAINER= jan@jantuomi.fi
+COMMENT= Minimalist self-hosted Doodle alternative
+
+LICENSE= APACHE20
+
+USE_GITHUB= yes
+GH_ACCOUNT= jantuomi
+GH_PROJECT= diddle
+GH_TAGNAME= main
+
+NO_CHECKSUM= yes
+NO_ARCH= yes
+NO_BUILD= yes
+
+USES= python:3.11+
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Flask>0:www/py-flask@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}Flask-Compress>0:www/py-flask-compress@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}gunicorn>0:www/py-gunicorn@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}python-dotenv>0:www/py-python-dotenv@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}yaml>0:devel/py-pyyaml@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}ua-parser>0:www/py-ua-parser@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}user-agents>0:www/py-user-agents@${PY_FLAVOR}
+
+SUB_FILES= pkg-message
+SUB_LIST= PYTHON_CMD=${PYTHON_CMD}
+
+USE_RC_SUBR= diddle
+
+APPDIR= ${PREFIX}/diddle
+STAGE_APPDIR= ${STAGEDIR}${APPDIR}
+
+do-install:
+ ${MKDIR} ${STAGE_APPDIR}/app
+
+ ${INSTALL_DATA} ${WRKSRC}/app.py ${STAGE_APPDIR}/app/
+ ${INSTALL_DATA} ${WRKSRC}/db.py ${STAGE_APPDIR}/app/
+ ${INSTALL_DATA} ${WRKSRC}/email_client.py ${STAGE_APPDIR}/app/
+ ${INSTALL_DATA} ${WRKSRC}/apply_migrations.py ${STAGE_APPDIR}/app/
+
+ (cd ${WRKSRC}/migrations && ${COPYTREE_SHARE} . ${STAGE_APPDIR}/app/migrations)
+ (cd ${WRKSRC}/static && ${COPYTREE_SHARE} . ${STAGE_APPDIR}/app/static)
+ (cd ${WRKSRC}/templates && ${COPYTREE_SHARE} . ${STAGE_APPDIR}/app/templates)
+
+post-install:
+ @(cd ${STAGEDIR}${PREFIX} && \
+ ${FIND} diddle -type f -o -type l | \
+ ${SORT}) >> ${TMPPLIST}
+
+ @(cd ${STAGEDIR}${PREFIX} && \
+ ${FIND} diddle -type d | \
+ ${SORT} -r | \
+ ${SED} 's|^|@dir |') >> ${TMPPLIST}
+
+.include <bsd.port.mk>
diff --git a/www/diddle/files/diddle.in b/www/diddle/files/diddle.in
new file mode 100644
index 0000000..9efc9bf
--- /dev/null
+++ b/www/diddle/files/diddle.in
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+# PROVIDE: diddle
+# REQUIRE: NETWORKING
+# KEYWORD: shutdown
+
+. /etc/rc.subr
+
+name="diddle"
+rcvar="diddle_enable"
+pidfile="/var/run/${name}.pid"
+
+load_rc_config "$name"
+
+: ${diddle_enable:="NO"}
+: ${diddle_env_file:="%%PREFIX%%/etc/diddle.env"}
+: ${diddle_bind:="0.0.0.0:8000"}
+: ${diddle_workers:="4"}
+
+start_cmd="${name}_start"
+stop_cmd="${name}_stop"
+status_cmd="${name}_status"
+
+diddle_start()
+{
+ if [ ! -f "${diddle_env_file}" ]; then
+ echo "${name}: env file ${diddle_env_file} not found"
+ return 1
+ fi
+
+ echo "Starting ${name}..."
+
+ cd %%PREFIX%%/diddle/app || return 1
+
+ # Run migrations
+ daemon -f env \
+ PYTHONPATH=%%PREFIX%%/diddle/vendor:%%PREFIX%%/diddle/app \
+ %%PYTHON_CMD%% %%PREFIX%%/diddle/app/apply_migrations.py
+
+ sleep 1
+
+ daemon -p "${pidfile}" -o /var/log/diddle.log env \
+ PATH=%%PREFIX%%/bin:/usr/local/bin:/usr/bin:/bin \
+ PYTHONPATH=%%PREFIX%%/diddle/vendor:%%PREFIX%%/diddle/app \
+ ENV_FILE="${diddle_env_file}" \
+ %%PREFIX%%/diddle/vendor/bin/gunicorn \
+ --bind "${diddle_bind}" \
+ -w "${diddle_workers}" \
+ app:app
+}
+
+diddle_stop()
+{
+ if [ -f "${pidfile}" ]; then
+ echo "Stopping ${name}..."
+ kill "$(cat "${pidfile}")" 2>/dev/null
+ rm -f "${pidfile}"
+ fi
+}
+
+diddle_status()
+{
+ if [ -f "${pidfile}" ] && kill -0 "$(cat "${pidfile}")" 2>/dev/null; then
+ echo "${name} is running as pid $(cat "${pidfile}")"
+ else
+ echo "${name} is not running"
+ return 1
+ fi
+}
+
+run_rc_command "$1"
diff --git a/www/diddle/files/pkg-message.in b/www/diddle/files/pkg-message.in
new file mode 100644
index 0000000..c3bac39
--- /dev/null
+++ b/www/diddle/files/pkg-message.in
@@ -0,0 +1,31 @@
+[
+ {
+ type: install
+ message: <<EOM
+========================================================================
+
+Diddle requires an environment file for configuration.
+
+Create the env file:
+
+ install -m 600 /dev/null %%PREFIX%%/etc/diddle.env
+
+Then edit it with your settings (DATABASE_URL, SECRET_KEY, etc.):
+
+ ee %%PREFIX%%/etc/diddle.env
+
+Then enable the service and configure settings:
+
+ sysrc diddle_enable=YES
+ sysrc diddle_env_file=%%PREFIX%%/etc/diddle.env
+ sysrc diddle_bind="0.0.0.0:8000"
+ sysrc diddle_workers=4
+
+Start the service:
+
+ service diddle start
+
+========================================================================
+EOM
+ }
+]
diff --git a/www/diddle/pkg-descr b/www/diddle/pkg-descr
new file mode 100644
index 0000000..ecd2685
--- /dev/null
+++ b/www/diddle/pkg-descr
@@ -0,0 +1 @@
+Minimalist scheduling. A mobile friendly, fast, self-hosted Doodle alternative.