41554 blogs · [ { "id": "01a0879d-670c-709c-8242-4d99e673b0f5", "title": "Storing 1Password 2FA tokens on CachyOS/Niri", "url": "https://lukehansford.me/posts/storing-1password-2fa-tokens-on-cachyos-niri/", "published_at": "2026-03-04T14:31:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99e74d4a4a", "title": "My favourite music in 2025", "url": "https://lukehansford.me/posts/my-favourite-music-in-2025/", "published_at": "2026-02-27T16:36:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99e790384a", "title": "My self-hosting setup in 2026", "url": "https://lukehansford.me/posts/my-self-hosting-setup-in-2026/", "published_at": "2026-01-28T14:40:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99e862ef4b", "title": "A plan for 2026", "url": "https://lukehansford.me/posts/a-plan-for-2026/", "published_at": "2026-01-19T10:02:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99e8e8c5d6", "title": "My favourite media in 2025", "url": "https://lukehansford.me/posts/my-favourite-media-in-2025/", "published_at": "2026-01-17T10:04:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99e97b9a9a", "title": "Canonical request logs in Flask", "url": "https://lukehansford.me/posts/canonical-request-logs-in-flask/", "published_at": "2026-01-07T11:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99e9f03a3f", "title": "2025 in review", "url": "https://lukehansford.me/posts/2025-in-review/", "published_at": "2025-12-31T11:15:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99ea645e53", "title": "Thoughts on using Zed & Claude Sonnet 4", "url": "https://lukehansford.me/posts/thoughts-on-using-zed-claude-sonnet-4/", "published_at": "2025-06-02T11:36:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99eae59a6a", "title": "My Tech Stack in 2025", "url": "https://lukehansford.me/posts/my-tech-stack-in-2025/", "published_at": "2025-02-17T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99eb245e57", "title": "Creating a custom terminal prompt for ZSH", "url": "https://lukehansford.me/posts/creating-a-custom-terminal-prompt-for-zsh/", "published_at": "2025-01-13T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99eb2fbcb7", "title": "Using Raindrop.io with the Kobo Libra Colour", "url": "https://lukehansford.me/posts/using-raindrop-io-with-the-kobo-libra-colour/", "published_at": "2025-01-07T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99eb598427", "title": "Default apps in 2025", "url": "https://lukehansford.me/posts/default-apps-in-2025/", "published_at": "2025-01-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99ec04baa3", "title": "A plan for 2025", "url": "https://lukehansford.me/posts/a-plan-for-2025/", "published_at": "2024-12-31T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99ecaafd46", "title": "2024 in review", "url": "https://lukehansford.me/posts/2024-in-review/", "published_at": "2024-12-30T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99ed1d0efe", "title": "Defaults apps in 2024", "url": "https://lukehansford.me/posts/default-apps-in-2024/", "published_at": "2024-05-13T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99ed4942c3", "title": "MacOS Customisation", "url": "https://lukehansford.me/posts/macos-customisation/", "published_at": "2024-05-10T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99ee0a2fcb", "title": "Using mise to manage development environments", "url": "https://lukehansford.me/posts/using-mise-to-manage-development-environments/", "published_at": "2024-05-08T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99eebbd26f", "title": "Roll20 macros for Dungeons & Dragons 5E", "url": "https://lukehansford.me/posts/roll20-macros/", "published_at": "2023-06-20T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99ef3c925a", "title": "Simple Github Actions CI for Javascript projects", "url": "https://lukehansford.me/posts/simple-github-actions-ci-for-js-projects/", "published_at": "2023-01-06T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99efadc9eb", "title": "How I use Todoist as an Engineering Manager", "url": "https://lukehansford.me/posts/how-i-use-todoist-as-an-engineering-manager/", "published_at": "2023-01-05T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f0567442", "title": "2023: The year of health", "url": "https://lukehansford.me/posts/2023-the-year-of-health/", "published_at": "2023-01-02T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f1233a3f", "title": "2022 in review", "url": "https://lukehansford.me/posts/2022-in-review/", "published_at": "2023-01-02T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f1546f6d", "title": "2022: The year of habits", "url": "https://lukehansford.me/posts/2022-the-year-of-habits/", "published_at": "2022-02-25T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f15a6c13", "title": "Splitting up a .zshrc file", "url": "https://lukehansford.me/posts/splitting-up-a-zshrc-file/", "published_at": "2021-08-27T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f2552e6e", "title": "Improving images on fishbrain.com", "url": "https://lukehansford.me/posts/improving-images-on-fishbrain-com/", "published_at": "2021-07-14T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f2bd6184", "title": "Digital detox - week 2", "url": "https://lukehansford.me/posts/digital-detox-week-2/", "published_at": "2021-04-05T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f361c405", "title": "Digital detox - week 1", "url": "https://lukehansford.me/posts/digital-detox-week-1/", "published_at": "2021-03-28T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f4464276", "title": "Digital detox", "url": "https://lukehansford.me/posts/digital-detox/", "published_at": "2021-03-20T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f48fc912", "title": "2020 in Review", "url": "https://lukehansford.me/posts/2020-in-review/", "published_at": "2021-01-24T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f4ab39cf", "title": "The Idle-Until-Urgent Pattern in React", "url": "https://lukehansford.me/posts/the-idle-until-urgent-pattern-in-react/", "published_at": "2020-11-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f5431c25", "title": "Ephemera - 17th October, 2020", "url": "https://lukehansford.me/posts/ephemera-2020-10-17/", "published_at": "2020-10-17T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f5c3c02a", "title": "Ephemera - 28th June, 2020", "url": "https://lukehansford.me/posts/ephemera-2020-06-28/", "published_at": "2020-06-28T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f5ee6b90", "title": "DRY unit tests in Javascript", "url": "https://lukehansford.me/posts/dry-unit-tests-in-javascript/", "published_at": "2020-06-02T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f642adf6", "title": "Ephemera - 15th December, 2019", "url": "https://lukehansford.me/posts/ephemera-2019-12-15/", "published_at": "2019-12-15T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f69d52ff", "title": "Ephemera - 8th December, 2019", "url": "https://lukehansford.me/posts/ephemera-2019-12-08/", "published_at": "2019-12-08T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f79067e2", "title": "Ephemera - 30th May, 2019", "url": "https://lukehansford.me/posts/ephemera-2019-05-30/", "published_at": "2019-05-30T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f7a57c22", "title": "Ephemera - 1st February, 2019", "url": "https://lukehansford.me/posts/ephemera-2019-01-31/", "published_at": "2019-01-31T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f7e38b6a", "title": "Ephemera - 19th January, 2019", "url": "https://lukehansford.me/posts/ephemera-2019-01-19/", "published_at": "2019-01-19T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f8b6074c", "title": "Ephemera - 1st October, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-10-01/", "published_at": "2018-10-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f94a12c0", "title": "Ephemera - 23rd September, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-09-23/", "published_at": "2018-09-23T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f99ef7bf", "title": "Ephemera - 2nd September, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-09-02/", "published_at": "2018-09-02T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99f99fa513", "title": "Ephemera - 1st July, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-07-01/", "published_at": "2018-07-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99fa40e72d", "title": "Ephemera - 24th June, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-06-24/", "published_at": "2018-06-24T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99fac5b369", "title": "Ephemera - 17th June, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-06-17/", "published_at": "2018-06-17T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99fb4d0359", "title": "Ephemera - 6th May, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-05-06/", "published_at": "2018-05-06T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99fb85648e", "title": "Ephemera - 5th April, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-04-05/", "published_at": "2018-04-05T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99fc69d383", "title": "Ephemera - 5th March, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-03-05/", "published_at": "2018-03-05T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99fcf0f59e", "title": "Ephemera - 12th February, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-02-12/", "published_at": "2018-02-12T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99fd35b4e1", "title": "Ephemera - 5th February, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-02-05/", "published_at": "2018-02-05T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99fde81d44", "title": "Big Muff Eurorack Conversion, Pt. 3", "url": "https://lukehansford.me/posts/big-muff-eurorack-conversion-part-3/", "published_at": "2018-02-04T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99fe134021", "title": "Ephemera - 29th January, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-01-29/", "published_at": "2018-01-29T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99fe917e81", "title": "Big Muff Eurorack Conversion, Pt. 2", "url": "https://lukehansford.me/posts/big-muff-eurorack-conversion-part-2/", "published_at": "2018-01-20T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d99ff53592e", "title": "Big Muff Eurorack Conversion, Pt. 1", "url": "https://lukehansford.me/posts/big-muff-eurorack-conversion-part-1/", "published_at": "2018-01-16T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a000b5cbe", "title": "Ephemera - 15th January, 2018", "url": "https://lukehansford.me/posts/ephemera-2018-01-15/", "published_at": "2018-01-15T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a00a7c424", "title": "The State of My Resolutions, November 2015", "url": "https://lukehansford.me/posts/resolutions-nov-2015/", "published_at": "2015-11-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a01316d10", "title": "The State of My Resolutions, August 2015", "url": "https://lukehansford.me/posts/resolutions-aug-2015/", "published_at": "2015-08-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a018b56be", "title": "The State of My Resolutions, September 2015", "url": "https://lukehansford.me/posts/resolutions-sep-2015/", "published_at": "2015-07-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a0193054c", "title": "The State of My Resolutions, July 2015", "url": "https://lukehansford.me/posts/resolutions-jul-2015/", "published_at": "2015-07-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a0276df0c", "title": "The State of My Resolutions, June 2015", "url": "https://lukehansford.me/posts/resolutions-jun-2015/", "published_at": "2015-06-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a02aab25b", "title": "The State of My Resolutions, May 2015", "url": "https://lukehansford.me/posts/resolutions-may-2015/", "published_at": "2015-05-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a02c7c385", "title": "The State of My Resolutions, April 2015", "url": "https://lukehansford.me/posts/resolutions-apr-2015/", "published_at": "2015-04-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a03c45284", "title": "The State of My Resolutions, Mar 2015", "url": "https://lukehansford.me/posts/resolutions-mar-2015/", "published_at": "2015-03-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a03c5fa26", "title": "The State of My Resolutions, Feb 2015", "url": "https://lukehansford.me/posts/resolutions-feb-2015/", "published_at": "2015-02-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a0484a44b", "title": "Ephemera - 1st February, 2015", "url": "https://lukehansford.me/posts/ephemera-2015-02-01/", "published_at": "2015-02-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a0520c1d9", "title": "Ephemera - 4th January, 2015", "url": "https://lukehansford.me/posts/ephemera-2015-01-04/", "published_at": "2015-01-04T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a05601b4f", "title": "Resolutions for 2015", "url": "https://lukehansford.me/posts/resolutions-2015/", "published_at": "2015-01-01T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a0632f676", "title": "Ephemera - 14th December, 2014", "url": "https://lukehansford.me/posts/ephemera-2014-12-14/", "published_at": "2014-12-14T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a06b1f137", "title": "Ephemera - 7th December, 2014", "url": "https://lukehansford.me/posts/ephemera-2014-12-07/", "published_at": "2014-12-07T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a07563192", "title": "NaNoCroSoMo", "url": "https://lukehansford.me/posts/nanocrosomo/", "published_at": "2014-11-26T00:00:00+00:00" }, { "id": "01a0879d-670c-709c-8242-4d9a08136470", "title": "Ephemera - 23rd November, 2014", "url": "https://lukehansford.me/posts/ephemera-2014-11-23/", "published_at": "2014-11-23T00:00:00+00:00" } ] posts Claim your blog
Back to Home | Luke Hansford
Blog · corpus.blog/blogs/lukehansford.me/posts

Home | Luke Hansford

lukehansford.me

2026

2025

2024

2023

2022

2021

2020

2019

2018

2015

2014