From e6c22a04d7c040277b42af7abfb9797dd3169c6a Mon Sep 17 00:00:00 2001
From: m3tm3re
Date: Sat, 14 Feb 2026 07:15:06 +0100
Subject: [PATCH] feat: add notesmd-cli package and flake checks
- Add notesmd-cli package for Obsidian CLI interaction
- Add flake checks for package build verification
- Add documentation for notesmd-cli, sidecar, and td
- Update AGENTS.md to reference td instead of beads
- Format pkgs/default.nix with proper braces
---
AGENTS.md | 20 +++---
README.md | 3 +
docs/README.md | 3 +
docs/packages/notesmd-cli.md | 117 ++++++++++++++++++++++++++++++
docs/packages/sidecar.md | 134 +++++++++++++++++++++++++++++++++++
docs/packages/td.md | 130 +++++++++++++++++++++++++++++++++
flake.nix | 13 ++++
pkgs/default.nix | 37 +++++-----
pkgs/notesmd-cli/default.nix | 31 ++++++++
9 files changed, 462 insertions(+), 26 deletions(-)
create mode 100644 docs/packages/notesmd-cli.md
create mode 100644 docs/packages/sidecar.md
create mode 100644 docs/packages/td.md
create mode 100644 pkgs/notesmd-cli/default.nix
diff --git a/AGENTS.md b/AGENTS.md
index 8d06e51..5d465b9 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -5,8 +5,8 @@
You must run td usage --new-session at conversation start (or after /clear) to see current work.
Use td usage -q for subsequent reads.
-**Generated:** 2026-01-13
-**Commit:** 366af12
+**Generated:** 2026-02-14
+**Commit:** dc2f3b6
**Branch:** master
## OVERVIEW
@@ -155,16 +155,16 @@ Types: `feat`, `fix`, `docs`, `style`, `refactor`, `chore`
- **Dev shell tools**: `statix`, `deadnix` only available inside `nix develop`
- **Automated package updates**: Packages are automatically updated weekly via Gitea Actions using `nix-update`. Review PRs from the automation before merging. For urgent updates, manually run the workflow or update manually.
-## Issue Tracking
+## Task Management
-This project uses **bd (beads)** for issue tracking.
-Run `bd prime` for workflow context, or install hooks (`bd hooks install`) for auto-injection.
+This project uses **td** for tracking tasks across AI coding sessions.
+Run `td usage --new-session` at conversation start to see current work.
+Use `td usage -q` for subsequent reads.
**Quick reference:**
-- `bd ready` - Find unblocked work
-- `bd create "Title" --type task --priority 2` - Create issue
-- `bd close ` - Complete work
-- `bd sync` - Sync with git (run at session end)
+- `td usage --new-session` - Start new session and view tasks
+- `td usage -q` - Quick view of current tasks (subsequent reads)
+- `td version` - Check version
-For full workflow details: `bd prime`
+For full workflow details, see the [td documentation](./docs/packages/td.md).
diff --git a/README.md b/README.md
index 4286069..2048082 100644
--- a/README.md
+++ b/README.md
@@ -47,11 +47,14 @@ nix run git+https://code.m3ta.dev/m3tam3re/nixpkgs#zellij-ps
| `mem0` | AI memory assistant with vector storage |
| `msty-studio` | Msty Studio application |
| `n8n` | Free and source-available fair-code licensed workflow automation tool |
+| `notesmd-cli` | Obsidian CLI (Community) - Interact with Obsidian in the terminal |
| `opencode` | AI coding agent built for the terminal |
| `opencode-desktop` | OpenCode Desktop App with Wayland support (includes workaround for upstream issue #11755) |
| `pomodoro-timer` | Pomodoro timer utility |
| `rofi-project-opener` | Rofi-based project launcher |
+| `sidecar` | Companion tool for CLI agents with diffs, file trees, and task management |
| `stt-ptt` | Push to Talk Speech to Text |
+| `td` | Minimalist CLI for tracking tasks across AI coding sessions |
| `tuxedo-backlight` | Backlight control for Tuxedo laptops |
| `zellij-ps` | Project switcher for Zellij |
diff --git a/docs/README.md b/docs/README.md
index c4bdeab..61c8b26 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -35,10 +35,13 @@ Documentation for all custom packages:
- [mem0](./packages/mem0.md) - AI memory assistant with vector storage
- [msty-studio](./packages/msty-studio.md) - Msty Studio application
- [n8n](./packages/n8n.md) - Free and source-available fair-code licensed workflow automation tool
+- [notesmd-cli](./packages/notesmd-cli.md) - Obsidian CLI (Community) - Interact with Obsidian in the terminal
- [opencode](./packages/opencode.md) - AI coding agent built for terminal
- [pomodoro-timer](./packages/pomodoro-timer.md) - Pomodoro timer utility
- [rofi-project-opener](./packages/rofi-project-opener.md) - Rofi-based project launcher with custom args
+- [sidecar](./packages/sidecar.md) - Companion tool for CLI agents with diffs, file trees, and task management
- [stt-ptt](./packages/stt-ptt.md) - Push to Talk Speech to Text using Whisper
+- [td](./packages/td.md) - Minimalist CLI for tracking tasks across AI coding sessions
- [tuxedo-backlight](./packages/tuxedo-backlight.md) - Backlight control for Tuxedo laptops
- [zellij-ps](./packages/zellij-ps.md) - Project switcher for Zellij
diff --git a/docs/packages/notesmd-cli.md b/docs/packages/notesmd-cli.md
new file mode 100644
index 0000000..5afd135
--- /dev/null
+++ b/docs/packages/notesmd-cli.md
@@ -0,0 +1,117 @@
+# notesmd-cli
+
+Obsidian CLI (Community) - Interact with Obsidian in the terminal.
+
+## Description
+
+notesmd-cli is a command-line interface for interacting with Obsidian, the popular knowledge management and note-taking application. It allows you to create, search, and manipulate notes directly from the terminal.
+
+## Features
+
+- 📝 **Note Creation**: Create new notes from the command line
+- 🔍 **Search**: Search through your Obsidian vault
+- 📂 **Vault Management**: Interact with your vault structure
+- 🔗 **WikiLink Support**: Work with Obsidian's WikiLink format
+- 🏷️ **Tag Support**: Manage and search by tags
+- ⚡ **Fast**: Lightweight Go binary with no external dependencies
+
+## Installation
+
+### Via Overlay
+
+```nix
+{pkgs, ...}: {
+ environment.systemPackages = with pkgs; [
+ notesmd-cli
+ ];
+}
+```
+
+### Direct Reference
+
+```nix
+{pkgs, ...}: {
+ environment.systemPackages = with pkgs; [
+ inputs.m3ta-nixpkgs.packages.${pkgs.system}.notesmd-cli
+ ];
+}
+```
+
+### Run Directly
+
+```bash
+nix run git+https://code.m3ta.dev/m3tam3re/nixpkgs#notesmd-cli
+```
+
+## Usage
+
+### Basic Commands
+
+```bash
+# Show help
+notesmd-cli --help
+
+# Create a new note
+notesmd-cli new "My Note Title"
+
+# Search notes
+notesmd-cli search "search term"
+
+# List notes
+notesmd-cli list
+```
+
+### Working with Vaults
+
+```bash
+# Specify vault path
+notesmd-cli --vault /path/to/vault new "Note Title"
+
+# Open a note in Obsidian
+notesmd-cli open "Note Name"
+```
+
+### Advanced Usage
+
+```bash
+# Search with tags
+notesmd-cli search --tag "project"
+
+# Append to existing note
+notesmd-cli append "Note Name" "Additional content"
+```
+
+## Configuration
+
+### Environment Variables
+
+- `OBSIDIAN_VAULT`: Default vault path
+
+### Command Line Options
+
+Run `notesmd-cli --help` for a complete list of options.
+
+## Build Information
+
+- **Version**: 0.3.0
+- **Language**: Go
+- **License**: MIT
+- **Source**: [GitHub](https://github.com/Yakitrak/notesmd-cli)
+- **Vendor Hash**: null (no external dependencies)
+
+## Platform Support
+
+- Linux
+- macOS (Unix systems)
+
+## Notes
+
+- No vendor dependencies (pure Go stdlib)
+- The binary is named `notesmd-cli` (not `notesmd`)
+- This is the community CLI, not the official Obsidian CLI
+
+## Related
+
+- [Obsidian](https://obsidian.md) - The Obsidian application
+- [Adding Packages](../guides/adding-packages.md) - How to add new packages
+- [Quick Start](../QUICKSTART.md) - Getting started guide
diff --git a/docs/packages/sidecar.md b/docs/packages/sidecar.md
new file mode 100644
index 0000000..f919a87
--- /dev/null
+++ b/docs/packages/sidecar.md
@@ -0,0 +1,134 @@
+# sidecar
+
+A companion tool for CLI coding agents, providing diffs, file trees, conversation history, and task management with td integration.
+
+## Description
+
+sidecar is a terminal UI tool designed to enhance the experience of using AI coding agents in the terminal. It provides a side panel interface for viewing diffs, file trees, conversation history, and integrates with `td` for task management across coding sessions.
+
+## Features
+
+- 🔀 **Diff Viewer**: Visual diff display for code changes
+- 📁 **File Tree**: Navigate and understand project structure
+- 💬 **Conversation History**: Review and search past AI interactions
+- ✅ **Task Management**: Integrated with `td` for tracking tasks
+- 🖥️ **Terminal UI**: Clean interface using tmux panes
+- 🤖 **AI Agent Integration**: Designed to work with opencode and similar CLI agents
+
+## Installation
+
+### Via Overlay
+
+```nix
+{pkgs, ...}: {
+ environment.systemPackages = with pkgs; [
+ sidecar
+ ];
+}
+```
+
+### Direct Reference
+
+```nix
+{pkgs, ...}: {
+ environment.systemPackages = with pkgs; [
+ inputs.m3ta-nixpkgs.packages.${pkgs.system}.sidecar
+ ];
+}
+```
+
+### Run Directly
+
+```bash
+nix run git+https://code.m3ta.dev/m3tam3re/nixpkgs#sidecar
+```
+
+## Usage
+
+### Starting sidecar
+
+```bash
+# Start sidecar alongside your AI coding agent
+sidecar
+
+# Start with a specific agent
+sidecar --agent opencode
+```
+
+### Basic Commands
+
+```bash
+# Show help
+sidecar --help
+
+# Check version
+sidecar --version
+```
+
+## Dependencies
+
+sidecar is packaged with the following runtime dependencies:
+
+- **opencode**: AI coding agent
+- **td**: Task tracking CLI
+- **tmux**: Terminal multiplexer for UI layout
+
+These are automatically included in the PATH when running sidecar.
+
+## Workflow Integration
+
+### Typical Session
+
+1. Start `sidecar` in your project directory
+2. The tool opens a tmux session with panes for:
+ - Your AI coding agent (opencode)
+ - Task list (via td)
+ - Diff viewer
+ - File tree navigator
+3. Work with your AI agent as usual
+4. View diffs and changes in real-time
+5. Track tasks using the integrated td panel
+
+### With opencode
+
+```bash
+# sidecar automatically integrates with opencode
+cd your-project
+sidecar
+```
+
+## Configuration
+
+### Environment Variables
+
+- `SIDECAR_CONFIG`: Custom configuration file path
+- `SIDECAR_AGENT`: Default AI agent to use (default: opencode)
+
+### Customization
+
+Configuration is managed through sidecar's own config system. See the upstream documentation for details.
+
+## Build Information
+
+- **Version**: 0.71.1
+- **Language**: Go
+- **License**: MIT
+- **Source**: [GitHub](https://github.com/marcus/sidecar)
+
+## Platform Support
+
+- Linux
+- macOS (Unix systems)
+
+## Notes
+
+- Tests are disabled in the Nix package build
+- The package wraps the binary with required dependencies (opencode, td, tmux) in PATH
+- Version check is enabled for the Nix package
+
+## Related
+
+- [td](./td.md) - Task tracking CLI used by sidecar
+- [opencode](./opencode.md) - AI coding agent integration
+- [Adding Packages](../guides/adding-packages.md) - How to add new packages
+- [Quick Start](../QUICKSTART.md) - Getting started guide
diff --git a/docs/packages/td.md b/docs/packages/td.md
new file mode 100644
index 0000000..54d6892
--- /dev/null
+++ b/docs/packages/td.md
@@ -0,0 +1,130 @@
+# td
+
+Minimalist CLI for tracking tasks across AI coding sessions.
+
+## Description
+
+td (task daemon) is a lightweight command-line tool designed for tracking tasks during AI-assisted coding sessions. It provides a simple, fast way to manage todos and maintain context across conversations with AI coding agents.
+
+## Features
+
+- ✅ **Minimal Task Tracking**: Simple, focused task management
+- 🤖 **AI Session Aware**: Designed to work with AI coding workflows
+- 📊 **Usage Tracking**: Track session usage and context
+- 🔄 **Session Continuity**: Resume tasks from previous sessions
+- 📝 **Git Integration**: Works alongside git workflows
+- ⚡ **Fast**: Lightweight Go binary with minimal overhead
+
+## Installation
+
+### Via Overlay
+
+```nix
+{pkgs, ...}: {
+ environment.systemPackages = with pkgs; [
+ td
+ ];
+}
+```
+
+### Direct Reference
+
+```nix
+{pkgs, ...}: {
+ environment.systemPackages = with pkgs; [
+ inputs.m3ta-nixpkgs.packages.${pkgs.system}.td
+ ];
+}
+```
+
+### Run Directly
+
+```bash
+nix run git+https://code.m3ta.dev/m3tam3re/nixpkgs#td
+```
+
+## Usage
+
+### Starting a Session
+
+```bash
+# Start a new session and view current tasks
+td usage --new-session
+
+# Quick view of current tasks (no session tracking)
+td usage -q
+```
+
+### Basic Commands
+
+```bash
+# Show version
+td version
+
+# View help
+td --help
+```
+
+### Task Management
+
+td integrates with AI coding workflows to track tasks across sessions. Use it at the start of conversations to establish context:
+
+```bash
+# At conversation start (or after /clear)
+td usage --new-session
+
+# For subsequent reads within the same session
+td usage -q
+```
+
+## Integration with AI Agents
+
+td is designed to be used by AI coding agents as part of their workflow:
+
+1. **Session Start**: Agent reads current tasks with `td usage --new-session`
+2. **Work Progress**: Tasks are tracked and updated during the session
+3. **Session End**: State is preserved for the next session
+
+### Example Integration
+
+In an AI agent's system prompt or configuration:
+
+```
+You must run td usage --new-session at conversation start (or after /clear) to see current work.
+Use td usage -q for subsequent reads.
+```
+
+## Configuration
+
+### Environment Variables
+
+- `TD_DATA_DIR`: Custom directory for td data storage
+
+### Data Storage
+
+Task data is stored locally in the project or user directory. See upstream documentation for exact storage location.
+
+## Build Information
+
+- **Version**: 0.34.0
+- **Language**: Go
+- **License**: MIT
+- **Source**: [GitHub](https://github.com/marcus/td)
+
+## Platform Support
+
+- Linux
+- macOS (Unix systems)
+
+## Notes
+
+- Tests are disabled in the Nix package build due to git worktree operations
+- Version check is enabled for the Nix package (`td version`)
+- Minimal dependencies - pure Go binary
+
+## Related
+
+- [sidecar](./sidecar.md) - Uses td for integrated task management
+- [opencode](./opencode.md) - AI coding agent that integrates with td
+- [Adding Packages](../guides/adding-packages.md) - How to add new packages
+- [Quick Start](../QUICKSTART.md) - Getting started guide
diff --git a/flake.nix b/flake.nix
index 6f4c3f3..5afcb9f 100644
--- a/flake.nix
+++ b/flake.nix
@@ -87,6 +87,19 @@
# Formatter for 'nix fmt'
formatter = forAllSystems (system: (pkgsFor system).alejandra);
+ # Checks for 'nix flake check' - verifies all packages build
+ checks = forAllSystems (system: let
+ pkgs = pkgsFor system;
+ packages = import ./pkgs {inherit pkgs inputs;};
+ in
+ builtins.mapAttrs (name: pkg: pkgs.lib.hydraJob pkg) packages
+ // {
+ formatting = pkgs.runCommand "check-formatting" {} ''
+ ${pkgs.alejandra}/bin/alejandra --check ${./.}
+ touch $out
+ '';
+ });
+
# Templates for creating new packages/modules
templates = {
package = {
diff --git a/pkgs/default.nix b/pkgs/default.nix
index 0a48227..2ac0430 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -1,22 +1,27 @@
-{ pkgs, inputs ? null, ... }: {
+{
+ pkgs,
+ inputs ? null,
+ ...
+}: {
# Custom packages registry
# Each package is defined in its own directory under pkgs/
- beads = pkgs.callPackage ./beads { };
- sidecar = pkgs.callPackage ./sidecar { };
- td = pkgs.callPackage ./td { };
- code2prompt = pkgs.callPackage ./code2prompt { };
- hyprpaper-random = pkgs.callPackage ./hyprpaper-random { };
- launch-webapp = pkgs.callPackage ./launch-webapp { };
- mem0 = pkgs.callPackage ./mem0 { };
- msty-studio = pkgs.callPackage ./msty-studio { };
- n8n = pkgs.callPackage ./n8n { };
- pomodoro-timer = pkgs.callPackage ./pomodoro-timer { };
- rofi-project-opener = pkgs.callPackage ./rofi-project-opener { };
- stt-ptt = pkgs.callPackage ./stt-ptt { };
- tuxedo-backlight = pkgs.callPackage ./tuxedo-backlight { };
- zellij-ps = pkgs.callPackage ./zellij-ps { };
+ beads = pkgs.callPackage ./beads {};
+ sidecar = pkgs.callPackage ./sidecar {};
+ td = pkgs.callPackage ./td {};
+ code2prompt = pkgs.callPackage ./code2prompt {};
+ hyprpaper-random = pkgs.callPackage ./hyprpaper-random {};
+ launch-webapp = pkgs.callPackage ./launch-webapp {};
+ mem0 = pkgs.callPackage ./mem0 {};
+ msty-studio = pkgs.callPackage ./msty-studio {};
+ notesmd-cli = pkgs.callPackage ./notesmd-cli {};
+ n8n = pkgs.callPackage ./n8n {};
+ pomodoro-timer = pkgs.callPackage ./pomodoro-timer {};
+ rofi-project-opener = pkgs.callPackage ./rofi-project-opener {};
+ stt-ptt = pkgs.callPackage ./stt-ptt {};
+ tuxedo-backlight = pkgs.callPackage ./tuxedo-backlight {};
+ zellij-ps = pkgs.callPackage ./zellij-ps {};
# Imported from flake inputs
opencode = inputs.opencode.packages.${pkgs.system}.opencode;
- opencode-desktop = pkgs.callPackage ./opencode-desktop { inherit inputs; };
+ opencode-desktop = pkgs.callPackage ./opencode-desktop {inherit inputs;};
}
diff --git a/pkgs/notesmd-cli/default.nix b/pkgs/notesmd-cli/default.nix
new file mode 100644
index 0000000..7d26928
--- /dev/null
+++ b/pkgs/notesmd-cli/default.nix
@@ -0,0 +1,31 @@
+{
+ lib,
+ buildGoModule,
+ fetchFromGitHub,
+ nix-update-script,
+}:
+buildGoModule (finalAttrs: {
+ pname = "notesmd-cli";
+ version = "0.3.0";
+
+ src = fetchFromGitHub {
+ owner = "Yakitrak";
+ repo = "notesmd-cli";
+ tag = "v${finalAttrs.version}";
+ hash = "sha256-KJRaJ9Fw7oh108ljKw1Eb2r7hZXlFWC2NOrjhliuzVQ=";
+ };
+
+ vendorHash = null;
+
+ ldflags = ["-s" "-w"];
+
+ passthru.updateScript = nix-update-script {};
+
+ meta = {
+ description = "Obsidian CLI (Community) - Interact with Obsidian in the terminal";
+ homepage = "https://github.com/Yakitrak/notesmd-cli";
+ license = lib.licenses.mit;
+ platforms = lib.platforms.unix;
+ mainProgram = "notesmd-cli";
+ };
+})