commits
Run the requested Ghostty command via /bin/sh -lc so cd/exec expressions are interpreted correctly and avoid malformed login invocation when opening a new window.
AI-assisted: OpenCode (Openai GPT-5.3 Codex)
When the repo is ahead of or behind trunk, the dropdown menu now lists
the first line of each commit description (up to 5) with · bullet
prefixes. Descriptions longer than 72 characters are truncated with ….
When there are more than 5 commits, a "... and N more" line is shown.
Also switches both ahead/behind revsets from set difference
(::@- ~ ::trunk()) to fork_point(@|trunk()) range notation, which is
more semantically correct when there is divergence between @ and trunk.
The jj template now emits description.first_line() instead of
commit_id.short(), and the parser returns both the count and the
description strings.
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.6)
- Add Sources/hm-status/HMStatusCLI.swift: cross-platform CLI with --short, --fail, --help
- Add nix/pkgs/hm-status/integration-test.sh: comprehensive test suite (6 scenarios)
- Synced + clean, dirty, ahead, behind, ahead+dirty, error cases
- Add passthru.tests.integration to hm-status derivation; wire into flake checks
- Update JujutsuCommandRunner: find jj on PATH directly (fixes Linux nix sandbox)
- Restructure nix/pkgs/: move derivations into subdirectories for auto-discovery
- nix/pkgs/hm-status/package.nix: CLI derivation (macOS + Linux)
- nix/pkgs/app/package.nix: macOS app derivation (swiftPackages pattern)
- Update Package.swift: conditionally include HomeManagerStatus target on macOS only
- Update flake.nix: use packagesFromDirectoryRecursive; add hm-status checks
- Add .tangled/workflows/check.yml: CI for build + integration tests
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.6)
Add StatusChecker.check() to HMStatus library as a single-shot,
cross-platform status check function. Refactor the macOS-specific
polling class (renamed to AppStatusChecker) to delegate to it.
Rewrite StatusCheckerTests to test the cross-platform function.
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.6)
Move RepoStatus, StatusParser, and JujutsuCommandRunner into a
separate HMStatus library target with public API. This enables
cross-platform use (Linux + macOS) and prepares for a CLI tool.
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.6)
Remove the devShells.default — nix fmt already provides swift-format
via treefmt, and nix build handles production builds. The dev shell
added no value beyond what these commands already provide.
Document doCheck = false: SwiftPM's swift-test requires
`xcrun --find xctest` which needs Xcode, and corelibs-xctest in nix
only provides the library, not the runner. No Swift package in nixpkgs
has solved this — tests require Xcode: swift test
AI-assisted: GitLab Duo Agentic Chat (Claude Sonnet 4)
Remove the SF Symbol icon from the menu bar label, replacing it with
compact text only. The icon was vertically misaligned with adjacent text
and duplicated the directional information already conveyed by arrow
characters (↑/↓).
The menu bar now shows:
- ✓ when synced and clean
- ● when synced with dirty working copy
- ↑N / ↓N for ahead/behind counts (with optional ● for dirty)
- ! for errors
This eliminates both the visual redundancy and the alignment issue.
Closes: https://tangled.org/nolith.tngl.sh/JJHomeManagerStatus.app/issues/1
AI-assisted: GitLab Duo Agentic Chat (Claude Sonnet 4)
Add a Spindle pipeline that checks formatting on push to main and on
pull requests using `nix fmt -- --fail-on-change`. This uses the
treefmt-nix configuration from flake.nix as the single source of truth
for all formatting rules (nixfmt, shfmt, swift-format).
Since the app is macOS-only (Swift + AppKit/SwiftUI), we can't build
or test on Linux CI, but we can verify formatting.
Changes to flake.nix:
- Add x86_64-linux to systems so treefmt evaluates on Linux CI
- Gate packages.default behind stdenv.hostPlatform.isDarwin since the
Swift/macOS derivation can't build on Linux
README: Brief overview for users covering what the app does, target
audience (home-manager + jj users on macOS), and installation.
AGENTS.md: Guidelines for AI coding agents with build/test commands,
code style conventions, project structure, and development workflow.
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.5)
Adds a home-manager module that allows users to enable the app as a
launchd user agent via `programs.jj-home-manager-status.enable`.
Changes:
- Move nix files under `nix/` directory for better organization
- Export `homeManagerModules.default` and `homeManagerModules.jj-home-manager-status`
- Module configures launchd agent with RunAtLoad and KeepAlive
- Add `package` option for flexibility (defaults to pkgs.home-manager-status)
Usage in consumer flake:
```nix
{
imports = [ jj-home-manager-status.homeManagerModules.default ];
programs.jj-home-manager-status = {
enable = true;
package = jj-home-manager-status.packages.\${pkgs.system}.default;
};
}
```
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.5)
Minimal Nix flake using flake-parts with:
- nixpkgs unstable
- treefmt-nix with nixfmt, shfmt, and swift-format
- devShell with swift-format
- macOS only (aarch64-darwin, x86_64-darwin)
Also applies swift-format to all existing source files.
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.6)
A SwiftUI menu bar app that monitors the jj status of ~/.config/home-manager
relative to trunk(). Shows ahead/behind commit counts with SF Symbol icons,
dirty working copy indicator, and provides quick actions (refresh, open in
Ghostty, quit).
Architecture uses protocol-based dependency injection (JujutsuCommandRunner)
for testability. Includes 64 unit tests covering the model, parser, and
checker layers using Swift Testing framework.
Polls every 5 minutes. Nix-aware PATH handling for jj binary discovery.
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.6)
When the repo is ahead of or behind trunk, the dropdown menu now lists
the first line of each commit description (up to 5) with · bullet
prefixes. Descriptions longer than 72 characters are truncated with ….
When there are more than 5 commits, a "... and N more" line is shown.
Also switches both ahead/behind revsets from set difference
(::@- ~ ::trunk()) to fork_point(@|trunk()) range notation, which is
more semantically correct when there is divergence between @ and trunk.
The jj template now emits description.first_line() instead of
commit_id.short(), and the parser returns both the count and the
description strings.
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.6)
- Add Sources/hm-status/HMStatusCLI.swift: cross-platform CLI with --short, --fail, --help
- Add nix/pkgs/hm-status/integration-test.sh: comprehensive test suite (6 scenarios)
- Synced + clean, dirty, ahead, behind, ahead+dirty, error cases
- Add passthru.tests.integration to hm-status derivation; wire into flake checks
- Update JujutsuCommandRunner: find jj on PATH directly (fixes Linux nix sandbox)
- Restructure nix/pkgs/: move derivations into subdirectories for auto-discovery
- nix/pkgs/hm-status/package.nix: CLI derivation (macOS + Linux)
- nix/pkgs/app/package.nix: macOS app derivation (swiftPackages pattern)
- Update Package.swift: conditionally include HomeManagerStatus target on macOS only
- Update flake.nix: use packagesFromDirectoryRecursive; add hm-status checks
- Add .tangled/workflows/check.yml: CI for build + integration tests
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.6)
Add StatusChecker.check() to HMStatus library as a single-shot,
cross-platform status check function. Refactor the macOS-specific
polling class (renamed to AppStatusChecker) to delegate to it.
Rewrite StatusCheckerTests to test the cross-platform function.
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.6)
Remove the devShells.default — nix fmt already provides swift-format
via treefmt, and nix build handles production builds. The dev shell
added no value beyond what these commands already provide.
Document doCheck = false: SwiftPM's swift-test requires
`xcrun --find xctest` which needs Xcode, and corelibs-xctest in nix
only provides the library, not the runner. No Swift package in nixpkgs
has solved this — tests require Xcode: swift test
AI-assisted: GitLab Duo Agentic Chat (Claude Sonnet 4)
Remove the SF Symbol icon from the menu bar label, replacing it with
compact text only. The icon was vertically misaligned with adjacent text
and duplicated the directional information already conveyed by arrow
characters (↑/↓).
The menu bar now shows:
- ✓ when synced and clean
- ● when synced with dirty working copy
- ↑N / ↓N for ahead/behind counts (with optional ● for dirty)
- ! for errors
This eliminates both the visual redundancy and the alignment issue.
Closes: https://tangled.org/nolith.tngl.sh/JJHomeManagerStatus.app/issues/1
AI-assisted: GitLab Duo Agentic Chat (Claude Sonnet 4)
Add a Spindle pipeline that checks formatting on push to main and on
pull requests using `nix fmt -- --fail-on-change`. This uses the
treefmt-nix configuration from flake.nix as the single source of truth
for all formatting rules (nixfmt, shfmt, swift-format).
Since the app is macOS-only (Swift + AppKit/SwiftUI), we can't build
or test on Linux CI, but we can verify formatting.
Changes to flake.nix:
- Add x86_64-linux to systems so treefmt evaluates on Linux CI
- Gate packages.default behind stdenv.hostPlatform.isDarwin since the
Swift/macOS derivation can't build on Linux
README: Brief overview for users covering what the app does, target
audience (home-manager + jj users on macOS), and installation.
AGENTS.md: Guidelines for AI coding agents with build/test commands,
code style conventions, project structure, and development workflow.
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.5)
Adds a home-manager module that allows users to enable the app as a
launchd user agent via `programs.jj-home-manager-status.enable`.
Changes:
- Move nix files under `nix/` directory for better organization
- Export `homeManagerModules.default` and `homeManagerModules.jj-home-manager-status`
- Module configures launchd agent with RunAtLoad and KeepAlive
- Add `package` option for flexibility (defaults to pkgs.home-manager-status)
Usage in consumer flake:
```nix
{
imports = [ jj-home-manager-status.homeManagerModules.default ];
programs.jj-home-manager-status = {
enable = true;
package = jj-home-manager-status.packages.\${pkgs.system}.default;
};
}
```
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.5)
A SwiftUI menu bar app that monitors the jj status of ~/.config/home-manager
relative to trunk(). Shows ahead/behind commit counts with SF Symbol icons,
dirty working copy indicator, and provides quick actions (refresh, open in
Ghostty, quit).
Architecture uses protocol-based dependency injection (JujutsuCommandRunner)
for testability. Includes 64 unit tests covering the model, parser, and
checker layers using Swift Testing framework.
Polls every 5 minutes. Nix-aware PATH handling for jj binary discovery.
AI-assisted: GitLab Duo Agentic Chat (Claude Opus 4.6)