Make.ts

Dev swaps “Up Arrow” chaos for a TS scratchpad — and ignites Bash vs Python vs Deno brawl

TLDR: A dev proposes a single “make.ts” script—run with Deno—to capture and rerun commands reliably. Fans hail it as simpler and stronger than shell or Python, while skeptics worry about extra dependencies, editor quirks, and “magic” syntax; the thread turns into Bash vs Python vs Deno with real workflow stakes.

The post kicks off with a relatable confession: living by “Up, Enter, Up, Up” to rerun commands. The fix? A single scratchpad script named make.ts, run with Deno (a JavaScript/TypeScript runtime), plus the Dax library to spawn commands cleanly. It’s like turning the command line into a tidy to‑do list. Simple idea, big reactions.

The cheer squad arrived early. One camp shouted that Deno scripting is a game-changer, with one fan saying it’s “100x better than shell, 5x better than Python.” Another added that zx is also “great,” treating it like a pick‑your‑flavor smoothie of JS tools. Meanwhile, a growing anti-Bash chorus declared the traditional shell a pain the moment you add an “if.” One commenter even joked that LLMs can now rewrite your Bash scripts into friendlier code.

But the skeptics rolled in with receipts. A pointed question asked if this setup tracks file changes by hashes or just timestamps—translation: is it smart about when to re-run stuff? Others grumbled about editor smarts (intellisense) and asked if this is over-engineering: why add another tool when a shell script works? One skeptic called out “magic” syntax like $ls {dir} and wondered if it runs or just logs. And let’s not forget the Makefile old guard—someone cheered that this is a typed escape hatch from tab‑hell. In short: productivity boost vs dependency bloat is the fight of the day.

Key Points

  • The article advocates capturing interactive commands in a persistent script file named make.ts and running it instead of typing commands directly in the shell.
  • Benefits include easier editing of large commands, running multiple commands together, improved idempotence, and smoother evolution into proper scripts.
  • For multiprocess projects, a single script helps manage concurrency by spawning a process tree declaratively.
  • Implementation details: keep a consistent make.ts in project roots, exclude it via .git/info/exclude, use shell history (fish autosuggestions), and add a Deno shebang.
  • The author uses TypeScript with modern JavaScript features; tagged template literals and the Dax library aid subprocess spawning aligned with exec-style argument arrays.

Hottest takes

"100x better than shell scripting and like 5x better than Python" — IshKebab
"Shell makes for a terrible scripting language" — pzmarzly
"can you tell immediately why $`ls {dir}` gets executed and not just logged?" — throwaway290
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.