title: Package Basecamp MCP Server

status: closed

issue_type: task

close_reason: Packaged successfully with env file support


title: Export project config as environment variable

description: Export project configuration as home.sessionVariables (similar to zellij-ps pattern). Use JSON format for the env var since projects now have structured data (path + args).

close_reason: Added home.sessionVariables.ROFI_PROJECT_OPENER_CONFIG with JSON config

depends_on_id: nixpkgs-hrh

type: parent-child


title: Add authentication command and environment file generation to basecamp-mcp-server

description:
The basecamp-mcp-server package at pkgs/basecamp-mcp-server/default.nix wraps the FastMCP server for Basecamp 3 integration. Currently, there's no convenient way for users to:

1. Set up OAuth 2.0 authentication interactively
2. Generate a sample environment file with required credentials
3. Guide users through the Basecamp OAuth flow

## Current State

The package wraps  but users must:
- Manually clone the upstream repository
- Run  to generate  template
- Edit  with OAuth credentials from https://launchpad.37signals.com/integrations
- Run  to complete OAuth flow
- Handle token storage manually

## Required Environment Variables

### OAuth Configuration (Primary)
-  - OAuth client ID from Basecamp
-  - OAuth client secret
-  - Found in Basecamp URL: https://3.basecamp.com/ID/...
-  - Format: "App Name (email@domain.com)"
-  - http://localhost:8000/auth/callback
-  - For Flask session security

### Basic Auth (Legacy)
-  - Email for direct API access
-  - Password for direct API access

## Proposed Solution

Add a Nix package wrapper command () that:

1. **Interactive Setup Wizard**
   - Guides users through OAuth app creation at launchpad.37signals.com
   - Prompts for credentials (with secure input for secrets)
   - Validates inputs before proceeding

2. **Environment File Generation**
   - Creates  or project-local
   - Includes all required variables with clear documentation
   - Sets secure permissions (600)
   - Provides example values

3. **OAuth Flow Handler**
   - Starts local Flask server on port 8000
   - Opens browser to initiate OAuth flow
   - Handles callback and token exchange
   - Stores tokens securely in
   - Shows success/failure status

4. **Documentation**
   - Inline help for all steps
   - Links to Basecamp integration setup
   - Account ID discovery instructions

## References

- Upstream repo: https://github.com/georgeantonopoulos/Basecamp-MCP-Server
- Key files: , , ,
- OAuth endpoints: launchpad.37signals.com/authorization/new

## Subtasks

- [ ] Create auth command wrapper (basecamp-mcp-auth)
- [ ] Implement interactive OAuth wizard
- [ ] Generate sample environment file template
- [ ] Add token storage handling
- [ ] Update package documentation
- [ ] Add Home Manager module support (optional)

issue_type: feature

close_reason: Closed


title: Update rofi-project-opener script to pass args to opencode

description: Modify pkgs/rofi-project-opener script to read the new config format and launch opencode with: 'opencode <directory> <arguments>' instead of just 'opencode' in the directory.

close_reason: Script updated to read JSON config and pass args to opencode

depends_on_id: nixpkgs-sys

type: blocks


title: Update documentation to reflect latest changes

close_reason: Documentation updated: Added stt-ptt language support docs, rofi-project-opener module docs, and updated zellij-ps docs


title: n8n overlay -> pkgs

description: Create a full package definition in pkgs/n8n/default.nix that mirrors nixpkgs-unstable's n8n package but with version 2.4.1 and updated hashes from overlays/mods/n8n.nix. Register the new package in pkgs/default.nix. The overlay overrides: src (n8n-io/n8n@2.4.1) and pnpmDeps hash. Reference nixpkgs-unstable for the base package structure, then apply the version/hash modifications.

issue_type: chore

close_reason: Packages created successfully: pkgs/n8n/default.nix, pkgs/beads/default.nix, pkgs/opencode/default.nix. All packages build successfully.


title: Add authentication command for basecamp-mcp-server

description: Add a command for the basecamp-mcp-server that will guide the user through the authentication flow and create a sample environment file with the necessary values. This involves researching the original basecamp-mcp-server repository for authentication details and implementing a user-friendly authentication workflow.

status: tombstone

deleted_by: daemon

delete_reason: delete

original_type: feature


title: fix: self-hosted nixos runner missing node in PATH for Gitea Actions

description: The nix-update workflow fails on self-hosted nixos runner because node is not available in PATH. Error: Cannot find: node in PATH. Root cause: actions/checkout@v4 requires Node.js to execute post-checkout steps. The self-hosted nixos runner does not have node installed or not in PATH. Possible solutions: 1) Add Node.js to the nixos runner environment, 2) Use container-based runner instead of bare nixos, 3) Use a different checkout action that does not require node, 4) Configure PATH to include node installation. Impact: Automated package updates are completely blocked.

status: open

issue_type: bug


title: beads overlay -> pkgs

description: Create a full package definition in pkgs/beads/default.nix that mirrors nixpkgs-unstable's beads package but with version 0.47.1 and updated hashes from overlays/mods/beads.nix. Register the new package in pkgs/default.nix. The overlay overrides: src (steveyegge/beads@v0.47.1), vendorHash, and disables tests (doCheck = false). Reference nixpkgs-unstable for the base package structure, then apply the version/hash modifications.


title: opencode overlay -> pkgs

description: Create a full package definition in pkgs/opencode/default.nix that mirrors nixpkgs-unstable's opencode package but with version 1.1.18 and updated hashes from overlays/mods/opencode.nix. Register the new package in pkgs/default.nix. The overlay overrides: src (anomalyco/opencode@v1.1.18) and node_modules hash. Reference nixpkgs-unstable for the base package structure, then apply the version/hash modifications.


title: Change projectDirs from list to attrset with path and args

description:
Change projectDirs option type from 'types.listOf types.str' to an attrset like:

projectDirs = {
  nixpkgs = { path = "~/p/NIX/nixpkgs"; args = "--agent Planner-Sisyphus"; };
  myproject = { path = "~/dev/myproject"; };  # args optional
};

Must maintain backward compatibility consideration.

close_reason: Changed projectDirs from listOf str to attrsOf submodule with path+args


title: Ensure docs are staged and committed

close_reason: Documentation staged and ready for commit


title: projectDirs on rofi-project-switcher should be exported to users home-manager environment

close_reason: Feature complete: config exported as ROFI_PROJECT_OPENER_CONFIG env var

issue_id: nixpkgs-hrh


title: feat: Add auto-language detection support to stt-ptt package

description:
## Current State
- **Package**: `/home/m3tam3re/p/NIX/nixpkgs/pkgs/stt-ptt/default.nix`
- **Module**: `/home/m3tam3re/p/NIX/nixpkgs/modules/home-manager/cli/stt-ptt.nix`
- **Current whisper-cli call** (line 55): `"$WHISPER" -m "$STT_MODEL" -f "$AUDIO" -np -nt 2>/dev/null`
- **Missing**: Language configuration option and auto-detection

## Required Changes

### 1. Update Package (`pkgs/stt-ptt/default.nix`)
Add support for language configuration:
- Add `STT_LANGUAGE` environment variable (default: "auto" for auto-detection)
- Modify whisper-cli call to use `-l "$STT_LANGUAGE"` flag
- Support the special value "auto" for automatic language detection
- Update help text to document the new environment variable

### 2. Update Home Manager Module (`modules/home-manager/cli/stt-ptt.nix`)
Add new `language` option:
- Add `language` option with type `types.enum ["auto" "en" "es" "fr" "de" "it" "pt" "ru" "zh" "ja" "ko" ...]`
- Default should be "auto" (auto-detect)
- Set `STT_LANGUAGE` environment variable in `home.sessionVariables`
- Add documentation describing available languages and auto-detection behavior
- Consider using `types.nullOr(types.str)` with "auto" as default for more flexibility

### 3. Technical Details
From whisper.cpp CLI documentation:
- `-l LANG, --language LANG [en] spoken language ('auto' for auto-detect)`
- Auto-detection analyzes audio to determine spoken language automatically
- Specifying a language can improve accuracy if you know the language
- Language codes follow ISO 639-1 standard (2-letter codes)

## Implementation Plan

### Package Changes:
```nix
# Add to environment variables section:
STT_LANGUAGE="${STT_LANGUAGE:-auto}"

# Modify whisper call:
"$WHISPER" -m "$STT_MODEL" -f "$AUDIO" -l "$STT_LANGUAGE" -np -nt 2>/dev/null

# Update help text:
echo "  STT_LANGUAGE       - Language code or 'auto' for auto-detection (default: auto)"
```

### Module Changes:
```nix
language = mkOption {
  type = types.enum ["auto" "en" "es" "fr" "de" "it" "pt" "ru" "zh" "ja" "ko"];
  default = "auto";
  description = ''
    Language for speech recognition. Use "auto" for automatic language detection,
    or specify a language code (e.g., "en", "es", "fr") for better accuracy.
    Auto-detection analyzes the audio to determine the spoken language.
  '';
};

home.sessionVariables = {
  STT_LANGUAGE = cfg.language;
  # ... existing variables
};
```

## Benefits
- **Multilingual support**: Users can speak in any language
- **Convenience**: Auto-detection eliminates need to specify language
- **Accuracy**: Explicit language selection improves transcription accuracy
- **Backward compatible**: Default behavior (auto) matches current functionality

## Testing Considerations
1. Test auto-detection with multiple languages
2. Test explicit language selection
3. Test fallback behavior when auto-detection fails
4. Test with different Whisper models

## Related
- whisper.cpp supports 100+ languages
- Language codes follow ISO 639-1 standard
- Auto-detection adds slight processing overhead

close_reason: Implemented auto-language detection support: Added STT_LANGUAGE environment variable to package, modified whisper-cli call to use -l flag, updated help text, and added language option to HM module with enum support for 23 common languages plus 'auto'.


title: Add a Gitea action for nix-update to automatically update packages

description: Create a Gitea action that runs nix-update to automatically update packages in this repository. My Gitea instance runs on NixOS (hostname: m3-atlas). Check the Gitea configuration in /home/m3tam3re/p/NIX/nixos-config for reference on how to set up actions. The action should target the packages directory and create PRs with updates when nix-update finds newer versions.

type: discovered-from

depends_on_id: nixpkgs-bqc


title: Update config file format to include args per project

description: Update the config file at ~/.config/rofi-project-opener/config to support per-project args. Change from PROJECT_DIRS to a format that encodes both path and args, e.g. JSON or structured text.

close_reason: Config file now writes JSON (projects.json) with per-project path and args

issue_id: nixpkgs-sys


title: projectDirs should support args, for example --agent <agentname>

description: This means project directories need to be an attribute set and we also need to change the launch command to "opencode <directory name> <arguments>".

close_reason: Feature complete: projectDirs now supports args per directory


title: There is a bug in the basecamp-mcp server

description:
OSError: [Errno 30] Read-only file system when trying to write log file.

Traceback:
File: /nix/store/708ksr7z3484bj8faysd7djwpa8xvw12-basecamp-mcp-server-0.0.1-unstable/lib/basecamp-mcp-server/basecamp_fastmcp.py, line 35
Error: logging.FileHandler(LOG_FILE_PATH) - attempting to write to read-only Nix store location: /nix/store/708ksr7z3484bj8faysd7djwpa8xvw12-basecamp-mcp-server-0.0.1-unstable/lib/basecamp-mcp-server/basecamp_fastmcp.log

The package needs to use a writable directory (e.g., XDG_DATA_HOME or /tmp) for log files instead of the Nix store.