Skip to content

Instantly share code, notes, and snippets.

@pdxmph
pdxmph / denote_tasks_spec.md
Created July 5, 2025 01:37
Denote tasks spec

Denote Task Format Specification

Version: 1.0
Date: 2025-07-04

Overview

This specification describes the file format and metadata structure for tasks and projects using the Denote naming convention with extended YAML frontmatter. This format is designed to be human-readable, sync-friendly, and easily parseable by multiple tools.

File Naming Convention

@pdxmph
pdxmph / setup.md
Created May 26, 2025 02:00
go2social setup on Synology and Cloudflare with Portainer
date title type permalink tags modified
2025-05-25 11:25:56 -0700
GotoSocial Setup on Synology with Custom Domain
note
basic-memory/goto-social-setup-on-synology-with-custom-domain
gotosocial synology selfhosted fediverse activitypub docker
2025-05-25 11:43:46 -0700
@pdxmph
pdxmph / tags.html
Created May 3, 2025 21:14
Mastodon tags shortcode for Hugo
{{ $tags_list := index .Params 0 }}
{{ $tags := split $tags_list " " }}
<i class="fa-brands fa-mastodon"></i> {{ range $tags }}<a href="https://social.lol/tags/{{ substr . 1 }}">{{ . }}</a>&nbsp;{{ end }}
{
"\u001b\u003c": "CursorStart",
"\u001b\u003e": "CursorEnd",
"\u003cCtrl-x\u003e\u003c0\u003e": "Unsplit",
"\u003cCtrl-x\u003e\u003c2\u003e": "HSplit",
"\u003cCtrl-x\u003e\u003c3\u003e": "VSplit",
"\u003cCtrl-x\u003e\u003cCtrl-c\u003e": "Quit",
"\u003cCtrl-x\u003e\u003cCtrl-f\u003e": "OpenFile",
"\u003cCtrl-x\u003e\u003cCtrl-s\u003e": "Save",
"\u003cCtrl-x\u003e\u003ch\u003e": "SelectAll",
@pdxmph
pdxmph / daily.nb-plugin
Created April 24, 2025 20:47
Daily #nb-plugin for making daily posts in nb. Modified from the original to title the initial file and make the filename more obviously a daily post.
#!/usr/bin/env bash
###############################################################################
# daily.nb-plugin
#
# Write to a daily log.
#
# Install with:
# nb plugin install https://github.com/xwmx/nb/blob/master/plugins/daily.nb-plugin
#
# A plugin for `nb`.
@pdxmph
pdxmph / lmno.org
Created April 22, 2025 03:27
lmno blogging capture tool

lmno blogging

Minor mode to capture:

(define-minor-mode lmno-blog-capture-mode
  "Mode for capturing blog entries like org-capture."
  :lighter ">> BlogCapture"
  :keymap (let ((map (make-sparse-keymap)))
@pdxmph
pdxmph / makeapp.rb
Created November 19, 2023 18:48
Wrapper to make nativifier apps and create the corresponding .desktop files
#!/usr/bin/env ruby
# - `makeapp.rb --help` for help on the options
require 'optparse'
# Where do we want to put things?
app_dir = "~/Applications"
custom_dir = "/home/mph/.local/share/applications/"
@pdxmph
pdxmph / update_contact.applescript
Last active April 27, 2023 18:11
Half-working contact update
-- provided there's a custom date field in a contact record, this will prepend a datestamped note and update "last contacted" to today.
set theDate to do shell script "date +%Y-%m-%d"
tell application "Contacts"
set selectedPeople to selection
repeat with thePerson in selectedPeople
set customDates to custom dates of thePerson
repeat with aCustomDate in customDates
if label of aCustomDate is "last contacted" then
set value of aCustomDate to current date
@pdxmph
pdxmph / org-contacts-crm.org
Created April 18, 2023 22:28
Functions, helpers, and agenda views to make a plaintext CRM in org-mode with org-contacts.

Org Plaintext Crm

org-contacts CRM

A bunch of functions and views to allow org-contacts to serve as the basis for a lightweight, text-based CRM.

Basic workflow:

  1. Get your contacts into org-contacts format. Traditionally this is done with org-vcard, but that didn’t work for me so I made a script.[fn:1]
  2. Add a :CONTACTED: property to the cards. It takes a date (not an org-date, just an ISO-8601 YYYY-mm-dd date). The script adds one.
  3. Tag contacts. The custom views depend on the tags :close:, :fam:, and :network:
@pdxmph
pdxmph / trains.rb
Last active April 15, 2023 06:35
ChatGPT-generated script to find the arrival time of a train at a given station in Portland, OR
#!/usr/bin/env ruby
require 'net/http'
require 'json'
require 'time'
# Replace with your TriMet API key
API_KEY = '73E10D534D59A179A687B98EDEE'
# Replace with the TriMet stop ID for the stop you're interested in
STOP_ID = '13136'