From ae9124e83158a782125d97489819d49ffb69482d Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 29 Sep 2026 18:23:41 +0000 Subject: [PATCH 1/2] mise(taskbook): tb globally, from the Rust port taskbook is one of the few tools needed on every machine, and the original is a Node.js CLI: through mise it would put node and npm on PATH globally, with no lockfile behind its ^ ranges, for a package last released in 2019. taskbook-sh/taskbook is a Rust port: a single ~3 MB binary per release, same `tb` CLI and the same ~/.taskbook storage.json format, so existing data carries over. Global, not the root mise.toml: tasks are used from anywhere, and the root [tools] only apply inside this checkout. Its optional sync replaces the local backend with a remote one (no local copy, no offline use), so it stays off; offline sync is a separate question. Nix is left out for now, so lib/packages.nix is no longer a strict superset of mise. Tested in a scratch HOME with mise 2026.9.16: `mise dotfiles apply` links global.toml, `mise install` picks tb-linux-x86_64.tar.gz over the tb-server asset, and `tb --version` prints 1.5.0 outside the repo. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01YVLQbKokRj33H2wd5dZish --- tools/mise/global.toml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tools/mise/global.toml b/tools/mise/global.toml index 73a5acd9..56c5bddd 100644 --- a/tools/mise/global.toml +++ b/tools/mise/global.toml @@ -1,5 +1,10 @@ -# Global mise tools, linked to ~/.config/mise/conf.d/dotfiles.toml: only what -# the global justfile needs outside this repo. The repo's own tools stay in the -# root mise.toml. +# Global mise tools, linked to ~/.config/mise/conf.d/dotfiles.toml: the few +# tools needed outside this repo. The repo's own tools stay in the root +# mise.toml. [tools] +# The global justfile's recipes. just = "latest" +# taskbook (`tb`), from the Rust port: one binary instead of the original's +# Node runtime, same ~/.taskbook data format. Its sync swaps local storage for +# a server, with no offline copy, so it stays off. +"github:taskbook-sh/taskbook" = "1.5" From 00db3e52f3b679f6cbfed64b30a68a4f42fc9438 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 30 Sep 2026 06:39:30 +0000 Subject: [PATCH 2/2] nix(taskbook): tb from source in the package list The previous commit put tb in mise only. This adds it to lib/packages.nix, at the same 1.5 as mise, so the list is a superset of mise again. taskbook-sh ships its own overlay.nix, but it installs the release binaries unpatched: on Linux they ask for /lib64/ld-linux-x86-64.so.2, which works in the Debian devcontainers by accident and not at all on NixOS. Built from source with buildRustPackage instead, like the cheat override above it. Only taskbook-client is built; the workspace's server (axum, sqlx, Postgres) is left out. Tests run for the client and the common crate. The client pulls in aws-lc-sys and ring (reqwest over rustls), both C-built. CI's shell job now runs `tb --version`, which makes it the first build of tb on darwin and arm64. Tested in nixos/nix on x86_64-linux: the dev shell builds, 93 tests pass, `tb --version` prints 1.5.0, tb links against the Nix glibc, and it writes the original ~/.taskbook storage.json format. The dev shell evaluates for aarch64-linux and aarch64-darwin, and nixfmt passes. Not run here: `nix flake check` and the home-manager build, whose home-manager input this session's network policy can't fetch. The source hash was computed from `git archive v1.5.0` for the same reason (the codeload tarball was blocked), so CI's fetch is the first real check of it. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01YVLQbKokRj33H2wd5dZish --- .github/workflows/README.md | 3 ++- .github/workflows/nix.yml | 2 +- lib/packages.nix | 23 +++++++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/.github/workflows/README.md b/.github/workflows/README.md index a9d7ea69..21278c29 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -82,7 +82,8 @@ the job sets from its own token. Run them locally with `bats tests`, or no longer matches the inputs fails. nixfmt, from the flake's own nixpkgs, checks every `*.nix` file. - **shell:** builds the dev shell on each system (Linux x86_64 and arm64, and - an Apple Silicon Mac) and checks `jj` and `just` run inside. + an Apple Silicon Mac) and checks `jj`, `just` and `tb` run inside. `tb` is + built from source, so this is also its only build on darwin and arm64. - **home:** switches the devcontainer profile for a `vscode` user that already has a `~/.zshrc`, like the image's oh-my-zsh one. home-manager must take it over, keeping the old one as `~/.zshrc.backup`. Then diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index bd569cca..67640a85 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -48,7 +48,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: cachix/install-nix-action@13d8dd58da0234aa297dedd986986ccb8e7f3e24 # v31.11.1 - name: Dev shell - run: nix develop --no-update-lock-file -c sh -c 'jj --version && just --version' + run: nix develop --no-update-lock-file -c sh -c 'jj --version && just --version && tb --version' # The devcontainer profile, switched for a real vscode user whose ~/.zshrc # already exists, as the image's oh-my-zsh one does: home-manager takes it diff --git a/lib/packages.nix b/lib/packages.nix index bfd91e97..21962933 100644 --- a/lib/packages.nix +++ b/lib/packages.nix @@ -17,6 +17,28 @@ let patches = [ ]; postInstall = "installManPage doc/cheat.1"; }); + + # taskbook's Rust port (mise has it as github:taskbook-sh/taskbook). Its own + # overlay.nix installs the release binaries as they are, which on Linux ask + # for /lib64/ld-linux and so don't run on NixOS; built from source instead. + # The workspace's server (axum, sqlx, Postgres) is left out. + taskbook = pkgs.rustPlatform.buildRustPackage (finalAttrs: { + pname = "taskbook"; + version = "1.5.0"; + src = pkgs.fetchFromGitHub { + owner = "taskbook-sh"; + repo = "taskbook"; + tag = "v${finalAttrs.version}"; + hash = "sha256-zG/w3xUg6dicFFx1Bd/fcsRAS6RxibPp8mwB9fy5fog="; + }; + cargoHash = "sha256-NLuOE7rdvgqPOEa06u36b+EmWOLWEC3ygJM8lo19ksQ="; + cargoBuildFlags = [ "--package=taskbook-client" ]; + cargoTestFlags = [ + "--package=taskbook-client" + "--package=taskbook-common" + ]; + meta.mainProgram = "tb"; + }); in [ pkgs.bat @@ -27,6 +49,7 @@ in pkgs.gh pkgs.claude-code pkgs.tmux + taskbook # formatters for `jj fix` pkgs.taplo pkgs.rumdl