feat: add hm-options package for Home Manager options
Add a new MCP server for Home Manager options, mirroring the functionality of nixos-options but targeting the home-manager repository. Changes: - Add shared options.Indexer interface for both implementations - Add internal/homemanager package with indexer and channel aliases - Add cmd/hm-options CLI entry point - Parameterize MCP server with ServerConfig for name/instructions - Parameterize nix/package.nix for building both packages - Add hm-options package and NixOS module to flake.nix - Add nix/hm-options-module.nix for systemd deployment Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
37
internal/options/indexer.go
Normal file
37
internal/options/indexer.go
Normal file
@@ -0,0 +1,37 @@
|
||||
// Package options provides shared types and interfaces for options indexers.
|
||||
package options
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.t-juice.club/torjus/labmcp/internal/database"
|
||||
)
|
||||
|
||||
// IndexResult contains the results of an indexing operation.
|
||||
type IndexResult struct {
|
||||
Revision *database.Revision
|
||||
OptionCount int
|
||||
FileCount int
|
||||
Duration interface{} // time.Duration - kept as interface to avoid import cycle
|
||||
AlreadyIndexed bool // True if revision was already indexed (skipped)
|
||||
}
|
||||
|
||||
// Indexer is the interface for options indexers.
|
||||
// Both NixOS and Home Manager indexers implement this interface.
|
||||
type Indexer interface {
|
||||
// IndexRevision indexes a revision by git hash or channel name.
|
||||
// Returns AlreadyIndexed=true if the revision was already indexed.
|
||||
IndexRevision(ctx context.Context, revision string) (*IndexResult, error)
|
||||
|
||||
// ReindexRevision forces re-indexing of a revision, deleting existing data first.
|
||||
ReindexRevision(ctx context.Context, revision string) (*IndexResult, error)
|
||||
|
||||
// IndexFiles indexes files from the source repository tarball.
|
||||
IndexFiles(ctx context.Context, revisionID int64, ref string) (int, error)
|
||||
|
||||
// ResolveRevision resolves a channel name or ref to a git ref.
|
||||
ResolveRevision(revision string) string
|
||||
|
||||
// GetChannelName returns the channel name if the revision matches one.
|
||||
GetChannelName(revision string) string
|
||||
}
|
||||
Reference in New Issue
Block a user