1 line
No EOL
6.8 KiB
HTML
1 line
No EOL
6.8 KiB
HTML
<!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-Cn83fOYW.js"></script><link rel="stylesheet" crossorigin href="/assets/main-BFsgSS42.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 don’t 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>© 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> |