misc edits

This commit is contained in:
Matthew Ryan Dillon 2025-09-14 09:21:38 -04:00
parent 6d114c53dd
commit 7f09b9fab4
5 changed files with 127 additions and 346 deletions

View file

@ -1,40 +1,41 @@
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXUUU4cUdkaUlwYTd1aFpl YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpMzQ5MlhYT09rVmRTb3Nr
dlBRZUgrMzJ0RmE0VUpNMW9DQ1ArVDJ0NjFFCmRvNkNjU3crbktoc1l6bjJpVUl4 OUpyZTlqTUZOZlAwR01TWTg0THBQZUZtTzBZCjFxY3I5NXNIb2ZuUk0xbFVyMXpX
M2NwWm9BdUhVaUZ2cHFhSWFTVVZYa00KLS0tIE5TQkw3aHl6TEoraXl0WThOS1ln aC9iWm01bXNWZUVBRVdYdjRlb2ltV3MKLS0tIHJsbUo0WlNIK2dEcUhFOWNydlow
YzdpbldkcTRjeGNYSzV3YXVGR0pQYlEK59pMsvBsL7rw7yTfTAD244/jRr7orREM SXNzb05tSnAvUWloZVBOREdtdjNHMTQK3Zrd7C2sODbcZHN2ZF0C3sbD7zpEdY6V
4F6SjSc/8UqoaXa0F5aoQkUSj3HJ0OD4FV6/Ge//5Zn8h8Cv3nWIF1hQF8iweJXJ O3bY1mPhIRd3mncob7DQuFVWv7Ih6XBnA7Fl6qQEN8JpwG5LGkgOWya/BVNwzTqr
U1RQSgnZlZuPpMVJw0/po8n9Sq6PtgEvENT3Ut42IosaJF4w9wVfAevnZgx6w3kM kQXy5Zrp5o3/4/Je3hiXhRcxveHCs1FbLu02lCDiazRFsvsyxIY19f/Ba4H4D2LB
x4VYGP1VfYIYQrwSD1ljgRNhiNWrUW0pNnUQ6eBsrPJlxsnhNw3TznYRMywY78uM aYlK0vFZnepip+ZDCA3VCZfXgXDM/QTqwJmiZYKShF3P8px+cyr/YOa+D8uMioC5
fcLn0MvyrNCBS7YTu14fDJdv5It67aatvsB0Z33srsOXsSWkN1Y8tCVw3WpkIAZN YH+X+/HapEmH/6f7whrIXhYJx+hQDXbfnk8/hOQyprGzXSYYUXpks+2ogFwy/75v
KMwFOExFe01N9AixYQmZ1kCU58kGmNRvur8667mvtKMLZCltXHrPXgjDs7BHQs3S jd7MIEqxxlyDX13JoDVV2dU7mu4LB26npjLjwFpzkA+TRzhQO9RBSET+E4izmG+t
Q0SBUacmKjsLB3XciMOTYoP3FQYBq7fUa2JxGq7LVzt7IYUvc8eo3AzCOHu4x2de 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
WOOhdrGGewKiZodf4oObqPJQ9iGfwhR/U4s= qdpDohWo7Un7arye5ew2JE05j257PXxfvbtVVQQrUlOJDvjFu8B3ddB953CHZ4wC
R7mAZF0R5VjZQ4DXBXSREjqLSDo=
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----

View file

@ -1,66 +0,0 @@
#!/usr/bin/env bash
REPO_PATH="$1"
REMOTE_NAME="$2"
COMMIT_MESSAGE_TEMPLATE="$3"
cd "$REPO_PATH" || {
echo "Error: Cannot access repository at $REPO_PATH"
exit 1
}
if ! git rev-parse --git-dir > /dev/null 2>&1; then
echo "Error: Not a git repository"
exit 1
fi
sync_repo() {
echo "Starting git sync for $(pwd)"
# Check if there are any changes to commit
if [[ -n $(git status --porcelain) ]]; then
echo "Changes detected, committing..."
COMMIT_MESSAGE=$(eval echo "\"$COMMIT_MESSAGE_TEMPLATE\"")
git add .
git commit -m "$COMMIT_MESSAGE"
if [[ $? -eq 0 ]]; then
echo "Changes committed successfully"
else
echo "Error committing changes"
return 1
fi
else
echo "No changes to commit"
fi
# Fetch and pull from remote
echo "Fetching from remote..."
git fetch "$REMOTE_NAME"
if [[ $? -eq 0 ]]; then
echo "Pulling changes..."
git pull "$REMOTE_NAME" $(git branch --show-current) --rebase
if [[ $? -eq 0 ]]; then
echo "Pull completed successfully"
else
echo "Error during pull"
return 1
fi
else
echo "Error fetching from remote"
return 1
fi
# Push to remote
echo "Pushing to remote..."
git push "$REMOTE_NAME" $(git branch --show-current)
if [[ $? -eq 0 ]]; then
echo "Push completed successfully"
else
echo "Error during push"
return 1
fi
echo "Git sync completed successfully"
}
sync_repo

View file

@ -1,156 +0,0 @@
local preloadView = hs.webview.new({x=0, y=0, w=10, h=10}):html("<html></html>")
preloadView:hide()
hs.timer.doAfter(2, function() preloadView:delete() end) -- delete after 2 seconds
local GitSync = {}
GitSync.config = {
repoPath = "{{ .chezmoi.homeDir }}/notebook",
remoteName = "pingo",
syncInterval = 60,
commitMessage = "Auto-sync: $(date +\"%Y-%m-%d %H:%M:%S\") from $(hostname)"
}
GitSync.scriptPath = os.getenv("HOME") .. "/.hammerspoon/git-sync.sh"
GitSync.timer = nil
GitSync.caffeineWatcher = nil
function GitSync.runSync(reason)
reason = reason or "periodic"
print("Git sync triggered: " .. reason)
local task = hs.task.new(GitSync.scriptPath, function(exitCode, stdOut, stdErr)
if exitCode == 0 then
print("Git sync completed successfully (" .. reason .. ")")
if stdOut and stdOut ~= "" then
print("Output: " .. stdOut)
end
else
print("Git sync failed (" .. reason .. ") with exit code: " .. exitCode)
if stdErr and stdErr ~= "" then
print("Error: " .. stdErr)
end
end
end, {
GitSync.config.repoPath,
GitSync.config.remoteName,
GitSync.config.commitMessage
})
task:start()
end
function GitSync.startPeriodicSync()
if GitSync.timer then
GitSync.timer:stop()
end
GitSync.timer = hs.timer.doEvery(GitSync.config.syncInterval, function()
GitSync.runSync("periodic")
end)
print("Git periodic sync started (interval: " .. GitSync.config.syncInterval .. " seconds)")
end
function GitSync.stopPeriodicSync()
if GitSync.timer then
GitSync.timer:stop()
GitSync.timer = nil
print("Git periodic sync stopped")
end
end
function GitSync.handlePowerEvent(eventType)
if eventType == hs.caffeinate.watcher.systemWillSleep then
print("System going to sleep, running git sync...")
GitSync.runSync("pre-sleep")
elseif eventType == hs.caffeinate.watcher.systemDidWake then
print("System woke up, running git sync...")
-- Add a small delay to ensure network is available
hs.timer.doAfter(5, function()
GitSync.runSync("post-wake")
end)
end
end
function GitSync.startPowerEventMonitoring()
GitSync.caffeineWatcher = hs.caffeinate.watcher.new(GitSync.handlePowerEvent)
GitSync.caffeineWatcher:start()
print("Git power event monitoring started")
end
function GitSync.stopPowerEventMonitoring()
if GitSync.caffeineWatcher then
GitSync.caffeineWatcher:stop()
GitSync.caffeineWatcher = nil
print("Git power event monitoring stopped")
end
end
function GitSync.start()
GitSync.startPeriodicSync()
GitSync.startPowerEventMonitoring()
GitSync.runSync("initial")
print("Git auto-sync initialized")
print("Repository: " .. GitSync.config.repoPath)
print("Remote: " .. GitSync.config.remoteName)
print("Sync interval: " .. GitSync.config.syncInterval .. " seconds")
end
function GitSync.stop()
GitSync.stopPeriodicSync()
GitSync.stopPowerEventMonitoring()
print("Git auto-sync stopped")
end
GitSync.start()
if hs.menubar then
GitSync.menubar = hs.menubar.new()
GitSync.menubar:setTitle("🦖")
GitSync.menubar:setTooltip("Git Auto-Sync")
GitSync.menubar:setMenu({
{ title = "Sync Now", fn = function() GitSync.runSync("manual") end },
{ title = "Start Auto-Sync", fn = GitSync.start },
{ title = "Stop Auto-Sync", fn = GitSync.stop },
{ title = "-" },
{ title = "Repository: " .. GitSync.config.repoPath, disabled = true }
})
end
-- Make GitSync available globally for console access
_G.GitSync = GitSync
local filePath = "/Users/matthew.dillon/notebook/inbox.md"
hs.hotkey.bind({"cmd", "shift"}, "J", function()
local button, text = hs.dialog.textPrompt(
"Add To-Do",
"Enter your tasks (one per line):",
"",
"OK",
"Cancel"
)
if button == "OK" and text ~= "" then
-- Split input into lines
local lines = {}
for line in text:gmatch("[^\r\n]+") do
table.insert(lines, "- [ ] " .. line)
end
-- Concatenate lines with newlines
local formatted = table.concat(lines, "\n") .. "\n"
-- Append to file
local file = io.open(filePath, "a")
if file then
file:write(formatted)
file:close()
hs.alert.show("Tasks added!")
else
hs.alert.show("Failed to open file.")
end
end
end)

View file

@ -1,87 +1,90 @@
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAza280UmpqZjBzWlF6eVg5 YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvVGF5ZE5KV1ZqajBMREFp
Vjh1OFZYMG5tejE4am1mWGNmTVprRzdjU3hFCjh1V05NQXhwWE5IQnZka05vZUMy SlBWWlNVdnE1NWFkSStSNE16dGxsY1E3WUU0Cmg1aVYwU2tncFZqNEdpNnovUzRJ
eUJkQXZCM1VuZ2ZpdUt3ekhMUEE5UVEKLS0tIEI4ZlN4R0xjYUpBLzVlWXNjZ0VO b3I2Qms5cTNBL3BOMmJBVHJpQ0Y4amsKLS0tIC9JMlFZT1o2Tm00Qko2WEhvcWJt
OFpzN2dBektpM2NtMkkwaTRLaGpoRlkKBdUq1Wwk2B0b5XDXQ1e4C/4ja3ZQbkjn VEp1eUwwRTFBRHR3TkJ4eU5MUnRLMFUKqtpY73n9s7/gkvNpPm0LtISYXPyau6Tv
nDNYyevmQrJ4MHXK27R3XK2HY5OUx9NdKQxfUbER07mv2ZywemdhLQOoKPkZiJU3 rk5HgJ4WS7OgbT4v7401Ztvay5hFdjzVh8RWvgWB7Smap6gnrWpJJuN3vC0xUrmF
XfllBkHdce3GNT3gPwB0aOvoYV8cG+9lxAJEMGujqJwMosxJiPADbFSgEaHOEqga wrGHciLxOTCSW1EvOEA0euwYRs9RnNKzrTo5S9koS7fvuw/1Xy+/FdBMh4oGzall
0dF+7VCOLqWeUIvPLqar1j6QtKZVRC9zp5LFnoR2CRyobnEjZCnems+77mfWmeEM lk9Ug0TtbfAq1BFsmvW4Y7gV2a74us7p82pwwp8mudQ9wcuD8Yt0Aq+V7EOevTQa
jgOH15NP5vQyUZzZsQ/sRX2OVosqCZDy3RbUaIXtkTBlvPmCxUxEDlCgiXVL7bCD ej11U5Spo7nRwSQ5t7evG4fDzVN6sRTZenPr0R+b4E8+8GidEi/vZNIPVmwv/W7O
qYOPwoOAp4TdWekpS28YTLnPm7S20wNamvzdPzunufQjxpkuuikZmcNLF2xxGAor /nqufkGwbvkChEEVcuYziYhqz4Jwzj4XxaO9OgkzlaWUznCjT/fipCvhtySN2/zW
uIoLGRSVyOuCozz4ZdHN00gVElflCOE3V8GWE/mMMBYQ+ZuD0GijnBYIysvFU0UX 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
vrVZips=
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----

View file

@ -18,7 +18,6 @@ brew install \
glow \ glow \
go \ go \
golangci-lint \ golangci-lint \
hammerspoon \
helix \ helix \
inlyne \ inlyne \
jj \ jj \