Skip to content

Instantly share code, notes, and snippets.

View davej's full-sized avatar
💭
Working on @ToDesktop

Dave Jeffery davej

💭
Working on @ToDesktop
View GitHub Profile
@davej
davej / getS3CredentialsFromCloudflareToken.sh
Created February 15, 2025 20:58
Get S3 Credentials From Cloudflare Token
# Specify these vars first
export CLOUDFLARE_ACCOUNT_ID=24bac...
export CLOUDFLARE_API_TOKEN=eGCxnU...
# then derive the AWS S3 credentials
export AWS_ACCESS_KEY_ID=$(curl -s https://api.cloudflare.com/client/v4/user/tokens/verify -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" | jq -r '.result.id')
export AWS_SECRET_ACCESS_KEY=$(echo -n $CLOUDFLARE_API_TOKEN | shasum -a 256 | awk '{print $1}')
export AWS_ENDPOINT_URL=https://$CLOUDFLARE_ACCOUNT_ID.r2.cloudflarestorage.com
# output the credentials
@davej
davej / .zshrc
Created July 8, 2025 09:17
`wtree` function to create and manage git worktrees
# Function to create and manage git worktrees
# 1. If the the current projects folder doesn't contain a subdirectory named "worktrees" then create it and add it to gitignore in the current project.
# 2. Create a git worktree and branch named feature-name (which was passed via the wtree alias argument) from the main project folder and save it inside the worktrees folder.
# 3. If there is a .env, prod.env or dev.env in the main project folder then copy it over to the worktrees folder.
# 4. Open the new feature-name worktree folder in a new window using Cursor.
wtree() {
# Check if a feature name was provided as an argument
if [ -z "$1" ]; then
# Print error message if no argument was provided
echo "Error: Please provide a feature name"
@davej
davej / delete_all_tweets.py
Last active August 12, 2024 16:20
This script will delete all of the tweets in a specified account.
# -*- coding: utf-8 -*-
"""
This script will delete all of the tweets in the specified account.
You may need to hit the "more" button on the bottom of your twitter profile
page every now and then as the script runs, this is due to a bug in twitter.
You will need to get a consumer key and consumer secret token to use this
script, you can do so by registering a twitter application at https://dev.twitter.com/apps
@requirements: Python 2.5+, Tweepy (http://pypi.python.org/pypi/tweepy/1.7.1)
@davej
davej / transitionToPromise.js
Last active January 31, 2023 15:49
Do a CSS transition and resolve promise when complete
const transitionToPromise = (el, property, value) =>
new Promise(resolve => {
el.style[property] = value;
const transitionEnded = e => {
if (e.propertyName !== property) return;
el.removeEventListener('transitionend', transitionEnded);
resolve();
}
el.addEventListener('transitionend', transitionEnded);
});
@davej
davej / main.js
Created October 11, 2022 17:21
Electron tray bounds bug on Mac
const { app, BrowserWindow, nativeImage, Tray } = require('electron')
let tray
function createTray() {
tray = new Tray(nativeImage.createEmpty())
// ❌ Doesn't work
console.log('sync', tray.getBounds())
@davej
davej / fetch-timeout.js
Last active July 1, 2022 23:35
Add a pseudo timeout/deadline to a request using the ES6 fetch api
Promise.race([
fetch('/foo'),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Timeout')), 7000)
)
]);
@davej
davej / prevent-idle.py
Created December 23, 2017 02:14
Prevent Mid 2014 MBP random shutdown
# From https://discussions.apple.com/thread/8115237
from time import sleep
while True:
sleep(0.00002)
@davej
davej / API.md
Created April 22, 2020 13:19
Config for todesktop.json

Project configuration (todesktop.json)

This describes all of the possible configuration options ín your todesktop.json.

To avoid confusion, the following terms will be used throughout this file:

  • "Project root": this is the parent directory of your todesktop.json.

appId - (optional) string

Keybase proof

I hereby claim:

  • I am davej on github.
  • I am davej (https://keybase.io/davej) on keybase.
  • I have a public key ASCGM6pZ2DMI-QNgpHyOlpPARpMxaK5PQI2eJIkwfMxiwwo

To claim this, I am signing this object:

@davej
davej / finished-polyfill.js
Last active August 29, 2019 14:14 — forked from simevidas/finished-polyfill.js
Animation.prototype.finished polyfill
// only polyfill .finished in browsers that already support animate()
if (document.body.animate) {
// Chrome does not seem to expose the Animation constructor globally
if (typeof Animation === 'undefined') {
window.Animation = document.body.animate({}).constructor;
}
if (!('finished' in Animation.prototype)) {
Object.defineProperty(Animation.prototype, 'finished', {