joshua.seigler.net/posts/tools-of-the-trade/index.html
Joshua Seigler 2db4d372fe Updates
2025-07-11 00:52:01 -04:00

1 line
No EOL
6.8 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover"><link rel="preconnect" href="https://stats.apps.seigler.net/"><style>@font-face{font-family:'Inter Variable';font-style:normal;font-display:swap;font-weight:100 900;src:url(/fonts/inter-latin-wght-normal.woff2) format('woff2-variations');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Inter Variable';font-style:italic;font-display:swap;font-weight:100 900;src:url(/fonts/inter-latin-wght-italic.woff2) format('woff2-variations');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style><script defer src="https://stats.apps.seigler.net/script.js" data-website-id="ccb4bd94-2a71-47fe-8eea-d85bf75b7f6d"></script><link rel="me" href="https://github.com/seigler"><link rel="webmention" href="https://webmention.io/joshua.seigler.net/webmention"><title>Tools of the trade - joshua.seigler.net</title><meta name="description" content="Some dev tools I recommend."><meta name="keywords" content="posts, technical, software"><meta property="og:title" content="Tools of the trade"><meta property="og:type" content=""><meta property="og:url" content="/posts/tools-of-the-trade/"><meta name="twitter:title" content="Tools of the trade"><meta name="twitter:description" content="Some dev tools I recommend."><meta name="twitter:card" content="summary"><meta name="generator" content="Eleventy v3.1.0"><script type="module" crossorigin src="/assets/main-nXw2QMt0.js"></script><link rel="stylesheet" crossorigin href="/assets/main-BUx5lSqQ.css"></head><body data-font="english" data-path="/posts/tools-of-the-trade/"><header><nav><div class="nav-row"><div class="nav-home"><a href="/">joshua.seigler.net</a></div></div><div class="nav-categories"><a aria-current="page" href="/posts/">/posts</a> <a href="/about/">/about</a> <a href="/now/">/now</a> <a href="/uses/">/uses</a> <a href="/recipes/">/recipes</a> <a href="/music/">/music</a> <a href="/books/">/books</a> <a href="/links/">/links</a> <a href="/search/">/search</a></div></nav><h1>Tools of the trade</h1><div class="header-meta"><span>May 15, 2025</span> <span class="tags"><a class="tag" style="--tagIndex:5" href="/tags/technical/">technical</a> <a class="tag" style="--tagIndex:8" href="/tags/software/">software</a></span></div></header><header class="toc"><span class="toc"><ol><li><a href="#mise-en-place">mise-en-place</a></li><li><a href="#stack-pr">stack-pr</a></li><li><a href="#xc">xc</a></li><li><a href="#pd2slack">pd2slack</a></li><li><a href="#syncthing">SyncThing</a></li><li><a href="#obsidian">Obsidian</a></li><li><a href="#keepassxc">KeePassXC</a></li></ol></span></header><main data-pagefind-body="data-pagefind-body"><p>Everyone has different tools that they find especially effective. Here are some I have found with a few words about why I like them.</p><blockquote><p>Update: I made a <a href="/uses">/uses</a> page that lists these tools and many others I like.</p></blockquote><h3 id="mise-en-place" tabindex="-1"><a class="header-anchor" href="#mise-en-place" aria-hidden="true"></a> <a href="https://mise.jdx.dev/" target="_blank" rel="noopener">mise-en-place</a></h3><p>Universal dev tool version manager. Specify tool versions in a config file and this tool can ensure that they are installed and active when entering the project directory. Amazing for getting a new dev environment set up in seconds. Replaces <code>asdf</code>, <code>nvm</code>, <code>pyenv</code>, <code>venv</code>, <code>rbenv</code>, and many other tool-specific version managers. Supports an incredible number of tools thanks to compatibility with <code>asdf</code>.</p><p>It also supports installing specific global tools, like <code>angular-cli</code> from <code>npm</code>, or <code>stack-pr</code> from <code>pipx</code>.</p><h3 id="stack-pr" tabindex="-1"><a class="header-anchor" href="#stack-pr" aria-hidden="true"></a> <a href="https://github.com/modular/stack-pr" target="_blank" rel="noopener">stack-pr</a></h3><p>Open source tool for <a href="https://www.stacking.dev/" target="_blank" rel="noopener">stacking PRs</a>.</p><p>PR stacks are, as far as I can tell, the best way to manage large features in git. I first heard about this practice in a series of blog posts from Graphite, a company offering free PR-stacking software and related paid services. But you dont need a custom CI flow or managed service for stacking to work - this CLI tool or one of the others at <a href="https://www.stacking.dev/" target="_blank" rel="noopener">stacking.dev</a> can take care of this.</p><p>If you start using PR stacks your whole company will start copying you.</p><h3 id="xc" tabindex="-1"><a class="header-anchor" href="#xc" aria-hidden="true"></a> <a href="https://xcfile.dev/" target="_blank" rel="noopener">xc</a></h3><p>Markdown based task runner.</p><p>Define tasks in code blocks in markdown, and call them from the CLI. Serves as both task definition and documentation.</p><h3 id="pd2slack" tabindex="-1"><a class="header-anchor" href="#pd2slack" aria-hidden="true"></a> <a href="https://github.com/sidpremkumar/pd2slack" target="_blank" rel="noopener">pd2slack</a></h3><p>Simple python script to update the members of a Slack group such as <code>@oncall</code> to match the active member(s) of a PagerDuty schedule. This replaces several expensive SAAS services.</p><h3 id="syncthing" tabindex="-1"><a class="header-anchor" href="#syncthing" aria-hidden="true"></a> <a href="https://syncthing.net/" target="_blank" rel="noopener">SyncThing</a></h3><p>P2P alternative to Dropbox, supports mobile and desktop. Synchronize folders of content across all my devices.</p><h3 id="obsidian" tabindex="-1"><a class="header-anchor" href="#obsidian" aria-hidden="true"></a> <a href="https://obsidian.md/" target="_blank" rel="noopener">Obsidian</a></h3><p>For notes and reference. Sync across devices with <code>syncthing</code>.</p><h3 id="keepassxc" tabindex="-1"><a class="header-anchor" href="#keepassxc" aria-hidden="true"></a> <a href="https://keepassxc.org/" target="_blank" rel="noopener">KeePassXC</a></h3><p>For passwords. Sync across devices with <code>syncthing</code>.</p></main><script data-isso="//comments.apps.seigler.net/" src="//comments.apps.seigler.net/js/embed.min.js"></script><section id="isso-thread" data-title=""><noscript>Javascript needs to be activated to view comments.</noscript></section><footer>&copy; Joshua Seigler 2025. - <a rel="me" href="mailto:joshua@seigler.net?subject=Hello">Contact</a> - <a href="/feed.xml">RSS</a> - <a href="/unoffice-hours/">Unoffice Hours</a> - <a href="/webrings/">Webrings</a></footer><div id="effects"></div></body></html>