diff --git a/.beads/.gitignore b/.beads/.gitignore new file mode 100644 index 0000000..4a7a77d --- /dev/null +++ b/.beads/.gitignore @@ -0,0 +1,39 @@ +# SQLite databases +*.db +*.db?* +*.db-journal +*.db-wal +*.db-shm + +# Daemon runtime files +daemon.lock +daemon.log +daemon.pid +bd.sock +sync-state.json +last-touched + +# Local version tracking (prevents upgrade notification spam after git ops) +.local_version + +# Legacy database files +db.sqlite +bd.db + +# Worktree redirect file (contains relative path to main repo's .beads/) +# Must not be committed as paths would be wrong in other clones +redirect + +# Merge artifacts (temporary files from 3-way merge) +beads.base.jsonl +beads.base.meta.json +beads.left.jsonl +beads.left.meta.json +beads.right.jsonl +beads.right.meta.json + +# NOTE: Do NOT add negation patterns (e.g., !issues.jsonl) here. +# They would override fork protection in .git/info/exclude, allowing +# contributors to accidentally commit upstream issue databases. +# The JSONL files (issues.jsonl, interactions.jsonl) and config files +# are tracked by git by default since no pattern above ignores them. diff --git a/.beads/README.md b/.beads/README.md new file mode 100644 index 0000000..50f281f --- /dev/null +++ b/.beads/README.md @@ -0,0 +1,81 @@ +# Beads - AI-Native Issue Tracking + +Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code. + +## What is Beads? + +Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git. + +**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads) + +## Quick Start + +### Essential Commands + +```bash +# Create new issues +bd create "Add user authentication" + +# View all issues +bd list + +# View issue details +bd show + +# Update issue status +bd update --status in_progress +bd update --status done + +# Sync with git remote +bd sync +``` + +### Working with Issues + +Issues in Beads are: +- **Git-native**: Stored in `.beads/issues.jsonl` and synced like code +- **AI-friendly**: CLI-first design works perfectly with AI coding agents +- **Branch-aware**: Issues can follow your branch workflow +- **Always in sync**: Auto-syncs with your commits + +## Why Beads? + +✨ **AI-Native Design** +- Built specifically for AI-assisted development workflows +- CLI-first interface works seamlessly with AI coding agents +- No context switching to web UIs + +🚀 **Developer Focused** +- Issues live in your repo, right next to your code +- Works offline, syncs when you push +- Fast, lightweight, and stays out of your way + +🔧 **Git Integration** +- Automatic sync with git commits +- Branch-aware issue tracking +- Intelligent JSONL merge resolution + +## Get Started with Beads + +Try Beads in your own projects: + +```bash +# Install Beads +curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash + +# Initialize in your repo +bd init + +# Create your first issue +bd create "Try out Beads" +``` + +## Learn More + +- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs) +- **Quick Start Guide**: Run `bd quickstart` +- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples) + +--- + +*Beads: Issue tracking that moves at the speed of thought* ⚡ diff --git a/.beads/config.yaml b/.beads/config.yaml new file mode 100644 index 0000000..f242785 --- /dev/null +++ b/.beads/config.yaml @@ -0,0 +1,62 @@ +# Beads Configuration File +# This file configures default behavior for all bd commands in this repository +# All settings can also be set via environment variables (BD_* prefix) +# or overridden with command-line flags + +# Issue prefix for this repository (used by bd init) +# If not set, bd init will auto-detect from directory name +# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc. +# issue-prefix: "" + +# Use no-db mode: load from JSONL, no SQLite, write back after each command +# When true, bd will use .beads/issues.jsonl as the source of truth +# instead of SQLite database +# no-db: false + +# Disable daemon for RPC communication (forces direct database access) +# no-daemon: false + +# Disable auto-flush of database to JSONL after mutations +# no-auto-flush: false + +# Disable auto-import from JSONL when it's newer than database +# no-auto-import: false + +# Enable JSON output by default +# json: false + +# Default actor for audit trails (overridden by BD_ACTOR or --actor) +# actor: "" + +# Path to database (overridden by BEADS_DB or --db) +# db: "" + +# Auto-start daemon if not running (can also use BEADS_AUTO_START_DAEMON) +# auto-start-daemon: true + +# Debounce interval for auto-flush (can also use BEADS_FLUSH_DEBOUNCE) +# flush-debounce: "5s" + +# Git branch for beads commits (bd sync will commit to this branch) +# IMPORTANT: Set this for team projects so all clones use the same sync branch. +# This setting persists across clones (unlike database config which is gitignored). +# Can also use BEADS_SYNC_BRANCH env var for local override. +# If not set, bd sync will require you to run 'bd config set sync.branch '. +# sync-branch: "beads-sync" + +# Multi-repo configuration (experimental - bd-307) +# Allows hydrating from multiple repositories and routing writes to the correct JSONL +# repos: +# primary: "." # Primary repo (where this database lives) +# additional: # Additional repos to hydrate from (read-only) +# - ~/beads-planning # Personal planning repo +# - ~/work-planning # Work planning repo + +# Integration settings (access with 'bd config get/set') +# These are stored in the database, not in this file: +# - jira.url +# - jira.project +# - linear.url +# - linear.api-key +# - github.org +# - github.repo diff --git a/.beads/interactions.jsonl b/.beads/interactions.jsonl new file mode 100644 index 0000000..e69de29 diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl new file mode 100644 index 0000000..012472c --- /dev/null +++ b/.beads/issues.jsonl @@ -0,0 +1 @@ +{"id":"AZ-NIX-d9j","title":"Install outline-mcp-server for Outline knowledge base integration","description":"## Summary\nAdd the mcp-outline server to enable AI agents to interact with the AZ-Gruppe Outline wiki.\n\n## MCP Server Details\n- **PyPI package**: `mcp-outline`\n- **Repository**: https://github.com/Vortiago/mcp-outline\n- **License**: MIT\n- **Author**: Atle H. Havsø\n\n## Configuration\n- **OUTLINE_API_KEY**: API key from Outline (required)\n- **OUTLINE_API_URL**: `https://wiki.az-gruppe.com/api`\n- **OUTLINE_DISABLE_DELETE**: `true` (prevent accidental deletions)\n\n## Implementation\nAdd to `home/features/coding/opencode.nix`:\n\n```nix\nOutline = {\n type = \"local\";\n command = [\n \"sh\"\n \"-c\"\n \"OUTLINE_API_KEY=$(cat /run/agenix/outline-key) OUTLINE_API_URL=https://wiki.az-gruppe.com/api OUTLINE_DISABLE_DELETE=true exec uv tool run mcp-outline\"\n ];\n enabled = true;\n};\n```\n\n## Tasks\n1. Add agenix secret for OUTLINE_API_KEY\n2. Add MCP server config to opencode.nix","status":"closed","priority":2,"issue_type":"feature","created_at":"2026-01-08T08:28:21.68774325+01:00","created_by":"sascha.koenig","updated_at":"2026-01-08T08:50:49.963659214+01:00","closed_at":"2026-01-08T08:50:49.963659214+01:00","close_reason":"Complete. Added: (1) MCP config to opencode.nix, (2) AZLT124-L system key and outline-key.age entry to secrets.nix, (3) host secrets.nix for AZLT124-L. User needs to create secrets/outline-key.age with: agenix -e secrets/outline-key.age"} diff --git a/.beads/metadata.json b/.beads/metadata.json new file mode 100644 index 0000000..c787975 --- /dev/null +++ b/.beads/metadata.json @@ -0,0 +1,4 @@ +{ + "database": "beads.db", + "jsonl_export": "issues.jsonl" +} \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..807d598 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ + +# Use bd merge for beads JSONL files +.beads/issues.jsonl merge=beads diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..df7a4af --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,40 @@ +# Agent Instructions + +This project uses **bd** (beads) for issue tracking. Run `bd onboard` to get started. + +## Quick Reference + +```bash +bd ready # Find available work +bd show # View issue details +bd update --status in_progress # Claim work +bd close # Complete work +bd sync # Sync with git +``` + +## Landing the Plane (Session Completion) + +**When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds. + +**MANDATORY WORKFLOW:** + +1. **File issues for remaining work** - Create issues for anything that needs follow-up +2. **Run quality gates** (if code changed) - Tests, linters, builds +3. **Update issue status** - Close finished work, update in-progress items +4. **PUSH TO REMOTE** - This is MANDATORY: + ```bash + git pull --rebase + bd sync + git push + git status # MUST show "up to date with origin" + ``` +5. **Clean up** - Clear stashes, prune remote branches +6. **Verify** - All changes committed AND pushed +7. **Hand off** - Provide context for next session + +**CRITICAL RULES:** +- Work is NOT complete until `git push` succeeds +- NEVER stop before pushing - that leaves work stranded locally +- NEVER say "ready to push when you are" - YOU must push +- If push fails, resolve and retry until it succeeds + diff --git a/flake.lock b/flake.lock index dc68a4a..30d70bb 100644 --- a/flake.lock +++ b/flake.lock @@ -21,6 +21,22 @@ "type": "github" } }, + "agents": { + "flake": false, + "locked": { + "lastModified": 1768312204, + "narHash": "sha256-wB1pEROaXzJzxCaJwOyXmD0gq8/hv7OeEw3jNXrPwAc=", + "ref": "refs/heads/master", + "rev": "cfa0f8f942545434a825fedf0a49061d26fff73d", + "revCount": 9, + "type": "git", + "url": "https://code.m3ta.dev/m3tam3re/AGENTS" + }, + "original": { + "type": "git", + "url": "https://code.m3ta.dev/m3tam3re/AGENTS" + } + }, "base16-schemes": { "flake": false, "locked": { @@ -46,11 +62,11 @@ "systems": "systems_3" }, "locked": { - "lastModified": 1763308703, - "narHash": "sha256-O9Y+Wer8wOh+N+4kcCK5p/VLrXyX+ktk0/s3HdZvJzk=", + "lastModified": 1767386128, + "narHash": "sha256-BJDu7dIMauO2nYRSL4aI8wDNtEm2KOb7lDKP3hxdrpo=", "owner": "numtide", "repo": "blueprint", - "rev": "5a9bba070f801d63e2af3c9ef00b86b212429f4f", + "rev": "0ed984d51a3031065925ab08812a5434f40b93d4", "type": "github" }, "original": { @@ -88,11 +104,11 @@ "utils": "utils" }, "locked": { - "lastModified": 1762286984, - "narHash": "sha256-9I2H9x5We6Pl+DBYHjR1s3UT8wgwcpAH03kn9CqtdQc=", + "lastModified": 1766051518, + "narHash": "sha256-znKOwPXQnt3o7lDb3hdf19oDo0BLP4MfBOYiWkEHoik=", "owner": "serokell", "repo": "deploy-rs", - "rev": "9c870f63e28ec1e83305f7f6cb73c941e699f74f", + "rev": "d5eff7f948535b9c723d60cd8239f8f11ddc90fa", "type": "github" }, "original": { @@ -108,11 +124,11 @@ ] }, "locked": { - "lastModified": 1764350888, - "narHash": "sha256-6Rp18zavTlnlZzcoLoBTJMBahL2FycVkw2rAEs3cQvo=", + "lastModified": 1766150702, + "narHash": "sha256-P0kM+5o+DKnB6raXgFEk3azw8Wqg5FL6wyl9jD+G5a4=", "owner": "nix-community", "repo": "disko", - "rev": "2055a08fd0e2fd41318279a5355eb8a161accf26", + "rev": "916506443ecd0d0b4a0f4cf9d40a3c22ce39b378", "type": "github" }, "original": { @@ -229,11 +245,11 @@ ] }, "locked": { - "lastModified": 1764544324, - "narHash": "sha256-GVBGjO7UsmzLrlOJV8NlKSxukHaHencrJqWkCA6FkqI=", + "lastModified": 1768366276, + "narHash": "sha256-NUdsaB6H1wvbOC7oh1UZ7Ojg1I+mYBQv8ovlMB6FbHk=", "owner": "nix-community", "repo": "home-manager", - "rev": "e4e25a8c310fa45f2a8339c7972dc43d2845a612", + "rev": "4e235a8746b195e335306d898f0cc93ad6c4564c", "type": "github" }, "original": { @@ -250,16 +266,16 @@ ] }, "locked": { - "lastModified": 1763992789, - "narHash": "sha256-WHkdBlw6oyxXIra/vQPYLtqY+3G8dUVZM8bEXk0t8x4=", + "lastModified": 1767910483, + "narHash": "sha256-MOU5YdVu4DVwuT5ztXgQpPuRRBjSjUGIdUzOQr9iQOY=", "owner": "nix-community", "repo": "home-manager", - "rev": "44831a7eaba4360fb81f2acc5ea6de5fde90aaa3", + "rev": "82fb7dedaad83e5e279127a38ef410bcfac6d77c", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-25.05", + "ref": "release-25.11", "repo": "home-manager", "type": "github" } @@ -269,11 +285,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1760467504, - "narHash": "sha256-KzUZPZxIF6FmQW/Zpt8NtbPQ4lnkj/jdBYqBw5xE1L0=", + "lastModified": 1768334942, + "narHash": "sha256-Fh+pDmT20IKW6j6vwckPkSV+41M1HHlCGAkDRQZpMjE=", "ref": "refs/heads/master", - "rev": "a5f30c83b37d3171d5a8c1d2daf2c46829e04803", - "revCount": 9, + "rev": "42d94876d843a54be21fff04f4414dac2a4907ab", + "revCount": 39, "type": "git", "url": "https://code.m3ta.dev/m3tam3re/nixpkgs" }, @@ -289,11 +305,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1764557939, - "narHash": "sha256-vUUR0jQE8AsrJWzzNIt6lSnE+R4f3n2MXAG9ZNXPO6k=", + "lastModified": 1768370489, + "narHash": "sha256-/tZo3ePuv6gbJ+OUAtn/vIL/NHwXmVdmTqwpRKKYuW4=", "owner": "numtide", "repo": "nix-ai-tools", - "rev": "eba89074f26014d7bf4ff0c8e83b80a2f0c1f2f1", + "rev": "41130668102a77795069d950e001926dd7542c99", "type": "github" }, "original": { @@ -355,11 +371,11 @@ "treefmt-nix": "treefmt-nix_2" }, "locked": { - "lastModified": 1763045507, - "narHash": "sha256-61zO8zsFE8C104hCTv04z6a4H8U03OEMrRAXtGsszkE=", + "lastModified": 1766503044, + "narHash": "sha256-DdJ0OIngRjekqXJauSQ8y9vyDO24dX8v7DiaWmxk7PU=", "owner": "nix-community", "repo": "nixos-anywhere", - "rev": "bad98b0685cf47eaeadcaf6787da8b51cf025693", + "rev": "e86fad431cf9161ca39747972bd255897572dc3b", "type": "github" }, "original": { @@ -442,11 +458,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1764517877, - "narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=", + "lastModified": 1768127708, + "narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c", + "rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", "type": "github" }, "original": { @@ -474,11 +490,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1759381078, - "narHash": "sha256-gTrEEp5gEspIcCOx9PD8kMaF1iEmfBcTbO0Jag2QhQs=", + "lastModified": 1768127708, + "narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7df7ff7d8e00218376575f0acdcc5d66741351ee", + "rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", "type": "github" }, "original": { @@ -490,11 +506,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1764527385, - "narHash": "sha256-nA5ywiGKl76atrbdZ5Aucd8SjF/v8ew9b9QsC+MKL14=", + "lastModified": 1768302833, + "narHash": "sha256-h5bRFy9bco+8QcK7rGoOiqMxMbmn21moTACofNLRMP4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "23258e03aaa49b3a68597e3e50eb0cbce7e42e9d", + "rev": "61db79b0c6b838d9894923920b612048e1201926", "type": "github" }, "original": { @@ -506,16 +522,16 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1764316264, - "narHash": "sha256-82L+EJU+40+FIdeG4gmUlOF1jeSwlf2AwMarrpdHF6o=", + "lastModified": 1768242861, + "narHash": "sha256-F4IIxa5xDHjtrmMcayM8lHctUq1oGltfBQu2+oqDWP4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9a7b80b6f82a71ea04270d7ba11b48855681c4b0", + "rev": "1327e798cb055f96f92685df444e9a2c326ab5ed", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-25.05", + "ref": "nixos-25.11", "repo": "nixpkgs", "type": "github" } @@ -528,11 +544,11 @@ ] }, "locked": { - "lastModified": 1764568551, - "narHash": "sha256-Qpuk/n9JTUdBCIxK0qcGU1gT3INT+CCe+h1Y91o+Ud0=", + "lastModified": 1768380127, + "narHash": "sha256-c026Qn/mDygVsEXxmDY9RYozdAAenaR5G/v1qNtwG4M=", "owner": "nix-community", "repo": "NUR", - "rev": "30c32ec8e715f1e73eb9d51a62126dda75050a71", + "rev": "dfea818ef57dc9c4035369f1839d20681ea01d47", "type": "github" }, "original": { @@ -544,6 +560,7 @@ "root": { "inputs": { "agenix": "agenix", + "agents": "agents", "deploy-rs": "deploy-rs", "disko": "disko", "home-manager": "home-manager_2", @@ -610,11 +627,11 @@ ] }, "locked": { - "lastModified": 1762938485, - "narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=", + "lastModified": 1768158989, + "narHash": "sha256-67vyT1+xClLldnumAzCTBvU0jLZ1YBcf4vANRWP3+Ak=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4", + "rev": "e96d59dff5c0d7fddb9d113ba108f03c3ef99eca", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index bd284b1..0865f77 100644 --- a/flake.nix +++ b/flake.nix @@ -12,14 +12,14 @@ inputs = { home-manager = { - url = "github:nix-community/home-manager/release-25.05"; + url = "github:nix-community/home-manager/release-25.11"; inputs.nixpkgs.follows = "nixpkgs"; }; home-manager-unstable = { url = "github:nix-community/home-manager/master"; inputs.nixpkgs.follows = "nixpkgs-unstable"; }; - nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; m3ta-nixpkgs.url = "git+https://code.m3ta.dev/m3tam3re/nixpkgs"; @@ -45,6 +45,12 @@ nix-colors.url = "github:misterio77/nix-colors"; nix-ai-tools.url = "github:numtide/nix-ai-tools"; + + agents = { + # url = "path:/home/m3tam3re/p/MISC/AGENTS"; + url = "git+https://code.m3ta.dev/m3tam3re/AGENTS"; + flake = false; + }; }; outputs = { @@ -166,6 +172,14 @@ }; modules = [./home/logistik/AZPILOGISTIK05.nix]; }; + "logistik@AZPILOGISTIKTEST" = home-manager.lib.homeManagerConfiguration { + pkgs = nixpkgs.legacyPackages."aarch64-linux"; + extraSpecialArgs = { + inherit inputs outputs; + hostname = "AZPILOGISTIKTEST"; + }; + modules = [./home/logistik/AZPILOGISTIKTEST.nix]; + }; }; deploy.nodes = { AZ-CLD-1 = { diff --git a/home/features/cli/default.nix b/home/features/cli/default.nix index 381e263..e6d762b 100644 --- a/home/features/cli/default.nix +++ b/home/features/cli/default.nix @@ -9,6 +9,13 @@ ./zellij.nix ]; + cli.stt-ptt = { + enable = true; + whisperPackage = pkgs.whisper-cpp-vulkan; + model = "ggml-large-v3-turbo"; + notifyTimeout = 2000; + }; + programs.carapace = { enable = true; enableFishIntegration = true; diff --git a/home/features/cli/nushell.nix b/home/features/cli/nushell.nix index 918486c..5c1e6a8 100644 --- a/home/features/cli/nushell.nix +++ b/home/features/cli/nushell.nix @@ -25,7 +25,8 @@ in { $env.XDG_DATA_HOME = $"($env.HOME)/.local/share" $env.FZF_DEFAULT_COMMAND = "fd --type f --exclude .git --follow --hidden" $env.SSH_AUTH_SOCK = "/run/user/1000/gnupg/S.gpg-agent.ssh" - $env.FLAKE = $"($env.HOME)/p/nixos/nixos-config" + $env.PATH = ($env.PATH | split row (char esep) | append "/home/sascha.koenig/.cache/.bun/bin" | uniq) + $env.FLAKE = $"($env.HOME)/p/NIX/nixos-config" #source /run/agenix/${config.home.username}-secrets ''; # if (tty) == "/dev/tty1" { diff --git a/home/features/coding/default.nix b/home/features/coding/default.nix new file mode 100644 index 0000000..ef95bc0 --- /dev/null +++ b/home/features/coding/default.nix @@ -0,0 +1,28 @@ +{pkgs, ...}: { + imports = [ + ./opencode.nix + ]; + home.packages = with pkgs; [ + agenix-cli + alejandra + beads + bc + bun + devpod + #devpod-desktop + (python3.withPackages (ps: + with ps; [ + pip + uv + # Scientific packages + numba + numpy + torch + srt + ])) + pyrefly + nixd + tailwindcss + tailwindcss-language-server + ]; +} diff --git a/home/features/coding/opencode.nix b/home/features/coding/opencode.nix new file mode 100644 index 0000000..c1a3a0f --- /dev/null +++ b/home/features/coding/opencode.nix @@ -0,0 +1,186 @@ +{inputs, ...}: { + xdg.configFile = { + "opencode/command" = { + source = "${inputs.agents}/command"; + recursive = true; + }; + "opencode/context" = { + source = "${inputs.agents}/context"; + recursive = true; + }; + "opencode/prompts" = { + source = "${inputs.agents}/prompts"; + recursive = true; + }; + "opencode/skill" = { + source = "${inputs.agents}/skill"; + recursive = true; + }; + }; + + programs.opencode = { + enable = true; + settings = { + theme = "opencode"; + plugin = ["oh-my-opencode" "opencode-beads" "opencode-anthropic-auth"]; + agent = builtins.fromJSON (builtins.readFile "${inputs.agents}/agent/agents.json"); + formatter = { + alejandra = { + command = ["alejandra" "-q" "-"]; + extensions = [".nix"]; + }; + }; + mcp = { + Ref = { + type = "local"; + command = [ + "sh" + "-c" + "REF_API_KEY=$(cat /run/agenix/ref-key) exec bunx ref-tools-mcp@latest" + ]; + enabled = true; + }; + Exa = { + type = "local"; + command = [ + "sh" + "-c" + "EXA_API_KEY=$(cat /run/agenix/exa-key) exec bunx exa-mcp-server@latest tools=web_search_exa" + ]; + enabled = true; + }; + Outline = { + type = "local"; + command = [ + "sh" + "-c" + "OUTLINE_API_KEY=$(cat /run/agenix/outline-key) OUTLINE_API_URL=https://wiki.az-gruppe.com/api OUTLINE_DISABLE_DELETE=true exec uv tool run mcp-outline" + ]; + enabled = false; + }; + }; + }; + }; + + home.file.".config/opencode/oh-my-opencode.json".text = builtins.toJSON { + "$schema" = "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json"; + agents = { + Sisyphus = { + model = "anthropic/claude-opus-4-5"; + permission = { + edit = "allow"; + bash = { + "*" = "allow"; + "rm *" = "ask"; + "rmdir *" = "ask"; + "mv *" = "ask"; + "chmod *" = "ask"; + "chown *" = "ask"; + "git *" = "ask"; + "git status*" = "allow"; + "git log*" = "allow"; + "git diff*" = "allow"; + "git branch*" = "allow"; + "git show*" = "allow"; + "git stash list*" = "allow"; + "git remote -v" = "allow"; + "git add *" = "allow"; + "git commit *" = "allow"; + "jj *" = "ask"; + "jj status" = "allow"; + "jj log*" = "allow"; + "jj diff*" = "allow"; + "jj show*" = "allow"; + "npm *" = "ask"; + "npx *" = "ask"; + "bun *" = "ask"; + "bunx *" = "ask"; + "uv *" = "ask"; + "pip *" = "ask"; + "pip3 *" = "ask"; + "yarn *" = "ask"; + "pnpm *" = "ask"; + "cargo *" = "ask"; + "go *" = "ask"; + "make *" = "ask"; + "dd *" = "deny"; + "mkfs*" = "deny"; + "fdisk *" = "deny"; + "parted *" = "deny"; + "eval *" = "deny"; + "source *" = "deny"; + "curl *|*sh" = "deny"; + "wget *|*sh" = "deny"; + "sudo *" = "deny"; + "su *" = "deny"; + "systemctl *" = "deny"; + "service *" = "deny"; + "shutdown *" = "deny"; + "reboot*" = "deny"; + "init *" = "deny"; + "> /dev/*" = "deny"; + "cat * > /dev/*" = "deny"; + }; + external_directory = "ask"; + doom_loop = "ask"; + }; + }; + librarian = { + model = "anthropic/claude-sonnet-4-5"; + permission = { + edit = "deny"; + bash = "deny"; + }; + }; + explore = { + model = "opencode/big-pickle"; + permission = { + edit = "deny"; + bash = "deny"; + }; + }; + oracle = { + model = "anthropic/claude-sonnet-4-5"; + permission = { + edit = "deny"; + bash = "deny"; + }; + }; + frontend-ui-ux-engineer = { + model = "anthropic/claude-opus-4-5"; + permission = { + edit = "allow"; + bash = { + "*" = "ask"; + "npm *" = "ask"; + "npx *" = "ask"; + "bun *" = "ask"; + "bunx *" = "ask"; + "rm *" = "ask"; + "mv *" = "ask"; + "dd *" = "deny"; + "mkfs*" = "deny"; + "sudo *" = "deny"; + "curl *|*sh" = "deny"; + "wget *|*sh" = "deny"; + }; + }; + }; + document-writer = { + model = "anthropic/claude-opus-4-5"; + permission = { + edit = "allow"; + bash = "deny"; + }; + }; + multimodal-looker = { + model = "anthropic/claude-opus-4-5"; + permission = { + edit = "deny"; + bash = "deny"; + }; + }; + }; + disabled_mcps = ["context7" "websearch"]; + }; +} diff --git a/home/features/desktop/coding.nix b/home/features/desktop/coding.nix index 8358eed..3084c5d 100644 --- a/home/features/desktop/coding.nix +++ b/home/features/desktop/coding.nix @@ -14,9 +14,10 @@ in { home.packages = with pkgs; [ nur.repos.charmbracelet.crush bruno + bun filezilla insomnia - opencode + nodejs ]; programs.zed-editor = { diff --git a/home/features/desktop/default.nix b/home/features/desktop/default.nix index e257b25..f342d2c 100644 --- a/home/features/desktop/default.nix +++ b/home/features/desktop/default.nix @@ -48,7 +48,7 @@ XDG_SESSION_TYPE = "wayland"; XDG_SESSION_DESKTOP = "Hyprland"; }; - home.sessionPath = ["\${XDG_BIN_HOME}" "\${HOME}/.cargo/bin" "$HOME/.npm-global/bin"]; + home.sessionPath = ["\${XDG_BIN_HOME}" "\${HOME}/.cargo/bin" "$HOME/.npm-global/bin" "$HOME/.cache/.bun/bin"]; fonts.fontconfig.enable = true; @@ -96,6 +96,7 @@ hyprpaper-random hyprpanel launch-webapp + lmstudio rustdesk seahorse sushi diff --git a/home/features/desktop/hyprland.nix b/home/features/desktop/hyprland.nix index f535ed0..5950c24 100644 --- a/home/features/desktop/hyprland.nix +++ b/home/features/desktop/hyprland.nix @@ -11,33 +11,6 @@ in { mkEnableOption "Hyprland related stuff"; config = mkIf cfg.enable { - home.file.".config/hypr/colors.conf".text = '' - $background = rgb(282A36) - $backgroundRaw = 282A36 - $foreground = rgb(F8F8F2) - $foregroundRaw = F8F8F2 - $selection = rgb(44475A) - $selectionRaw = 44475A - $comment = rgb(6272A4) - $commentRaw = 6272A4 - $red = rgb(FF5555) - $redRaw = FF5555 - $orange = rgb(FFB86C) - $orangeRaw = FFB86C - $yellow = rgb(F1FA8C) - $yellowRaw = F1FA8C - $green = rgb(50FA7B) - $greenRaw = 50FA7B - $purple = rgb(BD93F9) - $purpleRaw = BD93F9 - $cyan = rgb(8BE9FD) - $cyanRaw = 8BE9FD - $pink = rgb(FF79C6) - $pinkRaw = FF79C6 - $accent = $purple - $accentRaw = $purpleRaw - ''; - wayland.windowManager.hyprland = { settings = { xwayland = { @@ -46,8 +19,7 @@ in { exec-once = [ "hyprpanel" - "hyprpaper-random" - "hypridle" + "while ! hyprpaper-random; do sleep 0.5; done" "wl-paste --type text --watch cliphist store" # Stores only text data "wl-paste --type image --watch cliphist store" # Stores only image data "wl-paste -p -t text --watch clipman store -P --histpath=\"~/.local/share/clipman-primary.json\"" ]; @@ -86,7 +58,6 @@ in { "col.inactive_border" = "rgba(44475aaa)"; "col.nogroup_border" = "rgba(282a36dd)"; "col.nogroup_border_active" = "rgb(bd93f9) rgb(44475a) 90deg"; - no_border_on_floating = false; layout = "dwindle"; }; @@ -95,7 +66,7 @@ in { enabled = true; range = 60; render_power = 3; - color = "rgba(1E202966)"; + color = "rgba(${config.colorScheme.palette.base00}66)"; offset = "1 2"; scale = 0.97; }; @@ -146,49 +117,38 @@ in { } ]; windowrule = [ - "float, class:file_progress" - "float, class:confirm" - "float, class:dialog" - "float, class:download" - "float, class:notification" - "float, class:error" - "float, class:splash" - "float, class:confirmreset" - "float, title:Open File" - "float, title:branchdialog" - "float, class:pavucontrol-qt" - "float, class:pavucontrol" - "fullscreen, class:wlogout" - "float, title:wlogout" - "fullscreen, title:wlogout" - "float, class:mpv" - "idleinhibit focus, class:mpv" - "opacity 1.0 override, class:mpv" - "float, title:^(Media viewer)$" - "float, title:^(Volume Control)$" - "float, title:^(Picture-in-Picture)$" - "float,title:^(floating-pomodoro)$" - "size 250 50, title:^(floating-pomodoro)$" - "move 12 100%-150,title:^(floating-pomodoro)$" - "pin,title:^(floating-pomodoro)$" - "float, initialTitle:.*streamlabs.com.*" - "pin, initialTitle:.*streamlabs.com.*" - "size 800 400, initialTitle:.*streamlabs.com.*" - "move 100%-820 102, initialTitle:.*alert-box.*" - "move 100%-820 512, initialTitle:.*chat-box.*" - "opacity 0.5 override, initialTitle:.*streamlabs.com.*" - "idleinhibit focus, initialTitle:.*streamlabs.com.*" - "noanim, initialTitle:.*streamlabs.com.*" - "noborder, initialTitle:.*streamlabs.com.*" - "noshadow, initialTitle:.*streamlabs.com.*" - "noblur, initialTitle:.*streamlabs.com.*" - "bordercolor rgb(ffffff),xwayland:1" - "opacity 0.0 override, class:^(xwaylandvideobridge)$" - "noanim, class:^(xwaylandvideobridge)$" - "noinitialfocus, class:^(xwaylandvideobridge)$" - "maxsize 1 1, class:^(xwaylandvideobridge)$" - "noblur, class:^(xwaylandvideobridge)$" - "nofocus, class:^(xwaylandvideobridge)$" + # Floating dialogs + "match:class file_progress, float on" + "match:class confirm, float on" + "match:class dialog, float on" + "match:class download, float on" + "match:class notification, float on" + "match:class error, float on" + "match:class splash, float on" + "match:class confirmreset, float on" + "match:title Open File, float on" + "match:title branchdialog, float on" + "match:class pavucontrol-qt, float on" + "match:class pavucontrol, float on" + # wlogout + "match:class wlogout, fullscreen on" + "match:title wlogout, float on" + "match:title wlogout, fullscreen on" + # mpv + "match:class mpv, float on" + "match:class mpv, idle_inhibit focus" + "match:class mpv, opacity 1.0 override" + # Media/Volume/PiP + "match:title ^(Media viewer)$, float on" + "match:title ^(Volume Control)$, float on" + "match:title ^(Picture-in-Picture)$, float on" + # Pomodoro timer + "match:title ^(floating-pomodoro)$, float on" + "match:title ^(floating-pomodoro)$, size 250 50" + "match:title ^(floating-pomodoro)$, move 12 (monitor_h-150)" + "match:title ^(floating-pomodoro)$, pin on" + "match:initial_title .*streamlabs.com.*, no_blur on" + "border_color rgb(ffffff), match:xwayland 1" ]; "$mainMod" = "SUPER"; @@ -200,8 +160,9 @@ in { "$mainMod, t, exec, $terminal -e nu -c 'nitch; exec nu'" "$mainMod SHIFT, t, exec, launch-timer" "$mainMod SHIFT, e, exec, $terminal -e zellij_nvim" - "$mainMod, o, exec, hyprctl setprop activewindow opaque toggle" - "$mainMod, r, exec, hyprctl dispatch focuswindow \"initialtitle:.*alert-box.*\" && hyprctl dispatch moveactive exact 4300 102 && hyprctl dispatch focuswindow \"initialtitle:.*chat-box.*\" && hyprctl dispatch moveactive exact 4300 512" + "$mainMod, o, exec, hyprctl dispatch setprop activewindow opaque toggle" + #"$mainMod, r, exec, hyprctl dispatch focuswindow \"initialtitle:.*alert-box.*\" && hyprctl dispatch moveactive exact 4300 102 && hyprctl dispatch focuswindow \"initialtitle:.*chat-box.*\" && hyprctl dispatch moveactive exact 4300 512" + "$mainMod, R, exec, stt-ptt start" "$mainMod, b, exec, thunar" "$mainMod SHIFT, B, exec, vivaldi" "$mainMod, Escape, exec, wlogout -p layer-shell" @@ -246,7 +207,9 @@ in { "$mainMod, mouse_down, workspace, e+1" "$mainMod, mouse_up, workspace, e-1" ]; - + bindr = [ + "$mainMod, R, exec, stt-ptt stop" + ]; bindm = [ "$mainMod, mouse:272, movewindow" "$mainMod, mouse:273, resizewindow" @@ -282,13 +245,13 @@ in { programs.hyprlock = { enable = true; settings = { - source = "$HOME/.config/hypr/colors.conf"; - - "$font" = "JetBrainsMono Nerd Font"; - "$base" = "$background"; - "$text" = "$foreground"; - "$textAlpha" = "$foregroundRaw"; - "$accentAlpha" = "$accentRaw"; + "$font" = "FiraCode Nerd Font"; + "$base" = "rgb(${config.colorScheme.palette.base00})"; + "$text" = "rgb(${config.colorScheme.palette.base05})"; + "$textAlpha" = "${config.colorScheme.palette.base05}"; + "$accentAlpha" = "${config.colorScheme.palette.base0D}"; + "$red" = "rgb(${config.colorScheme.palette.base08})"; + "$yellow" = "rgb(${config.colorScheme.palette.base0A})"; general = { hide_cursor = true; @@ -296,9 +259,9 @@ in { background = { monitor = ""; - path = "~/.hypr/wallpapers/wallhaven-lmmo8r_2560x1600.png"; + path = "${config.home.homeDirectory}/.config/hypr/wallpapers/wallhaven-lmmo8r_2560x1600.png"; blur_passes = 0; - color = "$base"; + color = "rgb(${config.colorScheme.palette.base00})"; }; label = [ @@ -332,16 +295,16 @@ in { dots_size = 0.2; dots_spacing = 0.2; dots_center = true; - outer_color = "$accent"; - inner_color = "$background"; - font_color = "$text"; + outer_color = "rgb(${config.colorScheme.palette.base0D})"; + inner_color = "rgb(${config.colorScheme.palette.base00})"; + font_color = "rgb(${config.colorScheme.palette.base05})"; fade_on_empty = false; - placeholder_text = ''󰌾 Logged in as $USER''; + placeholder_text = ''󰌾 Logged in as $USER''; hide_input = false; - check_color = "$accent"; - fail_color = "$red"; + check_color = "rgb(${config.colorScheme.palette.base0D})"; + fail_color = "rgb(${config.colorScheme.palette.base08})"; fail_text = ''$FAIL ($ATTEMPTS)''; - capslock_color = "$yellow"; + capslock_color = "rgb(${config.colorScheme.palette.base0A})"; position = "0, -35"; halign = "center"; valign = "center"; diff --git a/home/features/desktop/media.nix b/home/features/desktop/media.nix index 33d5176..c4173a3 100644 --- a/home/features/desktop/media.nix +++ b/home/features/desktop/media.nix @@ -31,8 +31,6 @@ in { pavucontrol qpwgraph v4l-utils - plexamp - webcord # uxplay # vlc # webcord diff --git a/home/features/desktop/rofi.nix b/home/features/desktop/rofi.nix index f2163ef..9e2c5c1 100644 --- a/home/features/desktop/rofi.nix +++ b/home/features/desktop/rofi.nix @@ -179,5 +179,20 @@ in { } ''); }; + cli.rofi-project-opener = { + enable = true; + projectDirs = { + NIX = { + path = "~/p/NIX"; + args = ""; + }; + CHAT = { + path = "~/p/CHAT"; + args = "--agent chiron"; + }; + }; + terminal = pkgs.kitty; + terminalCommand = "opencode %a"; + }; }; } diff --git a/home/features/desktop/webapps.nix b/home/features/desktop/webapps.nix index 6d9acfa..57ed3fc 100644 --- a/home/features/desktop/webapps.nix +++ b/home/features/desktop/webapps.nix @@ -12,6 +12,10 @@ url = "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/microsoft-outlook.svg"; sha256 = "sha256-3u8t5QNHFZvrAegxBiGicO4PjtMWhEaQSCv7MSSfLLc="; }; + opencode = pkgs.fetchurl { + url = "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/opencode-dark.svg"; + sha256 = "1lms4f8habamvdh2qqqz9psx4py9wx23mmlkkds44pvrbq3bkj3n"; + }; }; in { xdg.desktopEntries = { @@ -39,5 +43,13 @@ in { terminal = false; icon = "/home/sascha.koenig/.local/share/icons/basecamp-logo.png"; }; + opencode = { + name = "Opencode"; + exec = "rofi-project-opener"; + comment = "Open Opencode Terminal App"; + categories = ["Application" "Development"]; + terminal = false; + icon = icons.opencode; + }; }; } diff --git a/home/jannik.mueller/AZ-CLD-1.nix b/home/jannik.mueller/AZ-CLD-1.nix index c7186b1..4d3d64c 100644 --- a/home/jannik.mueller/AZ-CLD-1.nix +++ b/home/jannik.mueller/AZ-CLD-1.nix @@ -1 +1 @@ -{config, ...}: {imports = [./home-stable.nix ../common];} +{config, ...}: {imports = [./home.nix ../common];} diff --git a/home/logistik/AZPILOGISTIKTEST.nix b/home/logistik/AZPILOGISTIKTEST.nix new file mode 100644 index 0000000..71ac617 --- /dev/null +++ b/home/logistik/AZPILOGISTIKTEST.nix @@ -0,0 +1,27 @@ +{ + config, + lib, + inputs, + ... +}: { + imports = [ + ../common + ./home.nix + ]; + wayland.windowManager.hyprland.settings = { + env = [ + "WEBAPP_URL,http://192.168.152.98:4711/login/logistik-pick-master" + "WEBAPP_URL1,http://192.168.152.98:4711/login/logistik-pack-master" + "HYPRCURSOR_THEME,rose-pine-hyprcursor" + "HYPRCURSOR_SIZE,32" + "WLR_NO_HARDWARE_CURSORS,1" + ]; + exec-once = [ + "start-browsers" + ]; + workspace = [ + "1, monitor:HDMI-A-1, default:true" + "2, monitor:HDMI-A-2" + ]; + }; +} diff --git a/home/logistik/home.nix b/home/logistik/home.nix index 31bb9a2..b810586 100644 --- a/home/logistik/home.nix +++ b/home/logistik/home.nix @@ -99,9 +99,11 @@ programs.git = { enable = true; - aliases = { - st = "status"; - logd = "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"; + settings = { + alias = { + st = "status"; + logd = "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"; + }; }; }; @@ -188,6 +190,32 @@ sensitivity = -0.5; } ]; + # windowrule = [ + # ## HYPRLAND 0.53+ # + # # Floating dialogs + # "match:class file_progress, float on" + # "match:class confirm, float on" + # "match:class dialog, float on" + # "match:class download, float on" + # "match:class notification, float on" + # "match:class error, float on" + # "match:class splash, float on" + # "match:class confirmreset, float on" + # "match:title Open File, float on" + # "match:title branchdialog, float on" + + # # XWayland border color + # "border_color rgb(ffffff), match:xwayland 1" + + # # Chromium workspace 1 + # "workspace 1, match:class chromium-browser" + + # # Chromium tile rules + # "match:class ^(chromium)$, tile on" + # "match:class ^(Chromium)$, tile on" + # "match:class ^(chromium-browser)$, tile on" + # "match:class ^(Chromium-browser)$, tile on" + # ]; windowrule = [ "float, class:file_progress" "float, class:confirm" diff --git a/home/sascha.koenig/AZ-CLD-1.nix b/home/sascha.koenig/AZ-CLD-1.nix index 68174ac..818bef0 100644 --- a/home/sascha.koenig/AZ-CLD-1.nix +++ b/home/sascha.koenig/AZ-CLD-1.nix @@ -1,6 +1,6 @@ {config, ...}: { imports = [ - ./home-stable.nix + ./home.nix ../common ../features/cli/fish.nix ../features/cli/fzf.nix diff --git a/home/sascha.koenig/AZLT124-L.nix b/home/sascha.koenig/AZLT124-L.nix index c0488b4..004b4b2 100644 --- a/home/sascha.koenig/AZLT124-L.nix +++ b/home/sascha.koenig/AZLT124-L.nix @@ -11,6 +11,7 @@ in { ../common ./home.nix ../features/cli + ../features/coding ../features/desktop inputs.nix-colors.homeManagerModules.default ]; @@ -86,15 +87,15 @@ in { "6, monitor:DP-8" ]; windowrule = [ - "workspace 1,class:(com.obsproject.Studio)" - "workspace 3,class:dev.zed.Zed" - "workspace 5,opacity 1.0, class:(vivaldi-stable)" - "workspace 5,opacity 1.0, initialTitle:(3.basecamp.com_/5996442/)" - "tile, initialTitle:(3.basecamp.com_/5996442/)" - "workspace 6,opacity 1.0, initialTitle:(teams.microsoft.com_/)" - "tile, initialTitle:(teams.microsoft.com_/)" - "workspace 6,opacity 1.0, initialTitle:(outlook.office.com_/mail/)" - "tile, initialTitle:(outlook.office.com_/mail/)" + "match:class com.obsproject.Studio, workspace 1" + "match:class dev.zed.Zed, workspace 3" + "match:class vivaldi-stable, workspace 5, opacity 1.0" + "match:initial_title 3.basecamp.com_/5996442/, workspace 5, opacity 1.0" + "match:initial_title 3.basecamp.com_/5996442/, tile on" + "match:initial_title teams.microsoft.com_/, workspace 6, opacity 1.0" + "match:initial_title teams.microsoft.com_/, tile on" + "match:initial_title outlook.office.com_/mail/, workspace 6, opacity 1.0" + "match:initial_title outlook.office.com_/mail/, tile on" ]; }; }; diff --git a/hosts/AZ-CLD-1/services/containers/baserow.nix b/hosts/AZ-CLD-1/services/containers/baserow.nix index cf5b6ad..70479d6 100644 --- a/hosts/AZ-CLD-1/services/containers/baserow.nix +++ b/hosts/AZ-CLD-1/services/containers/baserow.nix @@ -8,7 +8,7 @@ servicePort = portUtils.getPort serviceName "AZ-CLD-1"; in { virtualisation.oci-containers.containers.${serviceName} = { - image = "docker.io/baserow/baserow:1.35.2"; + image = "docker.io/baserow/baserow:2.0.6"; environment = { BASEROW_AMOUNT_OF_GUNICORN_WORKERS = "4"; BASEROW_AMOUNT_OF_WORKERS = "2"; diff --git a/hosts/AZ-CLD-1/services/default.nix b/hosts/AZ-CLD-1/services/default.nix index 8d219b8..9f4a06c 100644 --- a/hosts/AZ-CLD-1/services/default.nix +++ b/hosts/AZ-CLD-1/services/default.nix @@ -10,6 +10,6 @@ ./postgres.nix ./traefik.nix ./vaultwarden.nix - ./zammad.nix + # ./zammad.nix ]; } diff --git a/hosts/AZ-CLD-1/services/n8n.nix b/hosts/AZ-CLD-1/services/n8n.nix index a13d507..6f91cac 100644 --- a/hosts/AZ-CLD-1/services/n8n.nix +++ b/hosts/AZ-CLD-1/services/n8n.nix @@ -9,7 +9,7 @@ in { services.${serviceName} = { enable = true; - webhookUrl = "https://wf.az-gruppe.com"; + environment.WEBHOOK_URL = "https://wf.az-gruppe.com"; }; systemd.services.${serviceName}.serviceConfig = { diff --git a/hosts/AZ-PRM-1/services/containers/baserow.nix b/hosts/AZ-PRM-1/services/containers/baserow.nix index 210e7ea..b3d871d 100644 --- a/hosts/AZ-PRM-1/services/containers/baserow.nix +++ b/hosts/AZ-PRM-1/services/containers/baserow.nix @@ -1,6 +1,6 @@ {config, ...}: { virtualisation.oci-containers.containers."baserow" = { - image = "docker.io/baserow/baserow:1.34.2"; + image = "docker.io/baserow/baserow:2.0.6"; environmentFiles = [config.age.secrets.baserow-env.path]; ports = ["127.0.0.1:3032:80"]; volumes = ["baserow_data:/baserow/data"]; diff --git a/hosts/AZ-PRM-1/services/n8n.nix b/hosts/AZ-PRM-1/services/n8n.nix index 573314b..eccd763 100644 --- a/hosts/AZ-PRM-1/services/n8n.nix +++ b/hosts/AZ-PRM-1/services/n8n.nix @@ -1,7 +1,7 @@ {config, ...}: { services.n8n = { enable = true; - webhookUrl = "https://wf.az-group.com"; + environment.WEBHOOK_URL = "https://wf.az-group.com"; }; systemd.services.n8n.serviceConfig = { EnvironmentFile = ["${config.age.secrets.n8n-env.path}"]; diff --git a/hosts/AZLT124-L/configuration.nix b/hosts/AZLT124-L/configuration.nix index 8c4731c..61c68fd 100644 --- a/hosts/AZLT124-L/configuration.nix +++ b/hosts/AZLT124-L/configuration.nix @@ -14,7 +14,7 @@ # Bootloader. boot.loader.systemd-boot.enable = true; boot.initrd.kernelModules = ["amdgpu" "hid_asus"]; - boot.kernelPackages = pkgs.linuxPackages_6_17; + boot.kernelPackages = pkgs.linuxPackages_6_18; boot.extraModprobeConfig = '' options hid_asus enable_touchpad=1 ''; diff --git a/hosts/AZLT124-L/programs.nix b/hosts/AZLT124-L/programs.nix index 1331894..a3850b9 100644 --- a/hosts/AZLT124-L/programs.nix +++ b/hosts/AZLT124-L/programs.nix @@ -12,7 +12,7 @@ programs.fish.enable = true; programs.thunar = { enable = true; - plugins = with pkgs.xfce; [thunar-archive-plugin thunar-volman]; + plugins = with pkgs; [thunar-archive-plugin thunar-volman]; }; programs.gnupg.agent = { enable = true; diff --git a/hosts/AZLT124-L/secrets.nix b/hosts/AZLT124-L/secrets.nix index 0967ef4..89979d3 100644 --- a/hosts/AZLT124-L/secrets.nix +++ b/hosts/AZLT124-L/secrets.nix @@ -1 +1,10 @@ -{} +{ + age = { + secrets = { + outline-key = { + file = ../../secrets/outline-key.age; + owner = "sascha.koenig"; + }; + }; + }; +} diff --git a/hosts/AZLT124-L/services/default.nix b/hosts/AZLT124-L/services/default.nix index 03a630f..b78fbf6 100644 --- a/hosts/AZLT124-L/services/default.nix +++ b/hosts/AZLT124-L/services/default.nix @@ -1,6 +1,7 @@ { imports = [ # ./ad.nix + ./mem0.nix ./n8n.nix ./sound.nix ./udev.nix diff --git a/hosts/AZLT124-L/services/mem0.nix b/hosts/AZLT124-L/services/mem0.nix new file mode 100644 index 0000000..a673bfe --- /dev/null +++ b/hosts/AZLT124-L/services/mem0.nix @@ -0,0 +1,23 @@ +{ + m3ta.mem0 = { + enable = false; + port = 8000; + host = "127.0.0.1"; + + # LLM Configuration + llm = { + provider = "openai"; + apiKeyFile = "/var/lib/mem0/openai-api-key-1"; # Use agenix or sops-nix + }; + + # Vector Storage Configuration + vectorStore = { + provider = "qdrant"; # or "chroma", "pinecone", etc. + config = { + host = "localhost"; + port = 6333; + collection_name = "mem0_alice"; + }; + }; + }; +} diff --git a/hosts/common/default.nix b/hosts/common/default.nix index 0c3fb12..042034f 100644 --- a/hosts/common/default.nix +++ b/hosts/common/default.nix @@ -1,5 +1,7 @@ # Common configuration for all hosts { + config, + pkgs, lib, inputs, outputs, @@ -13,7 +15,9 @@ home-manager = { useUserPackages = true; - extraSpecialArgs = {inherit inputs outputs;}; + extraSpecialArgs = { + inherit inputs outputs; + }; }; nixpkgs = { # You can add overlays here diff --git a/hosts/common/extraServices/ollama.nix b/hosts/common/extraServices/ollama.nix index 6e6fd43..fe1b53d 100644 --- a/hosts/common/extraServices/ollama.nix +++ b/hosts/common/extraServices/ollama.nix @@ -12,12 +12,7 @@ in { config = mkIf cfg.enable { services.ollama = { enable = true; - acceleration = - if config.services.xserver.videoDrivers == ["amdgpu"] - then "rocm" - else if config.services.xserver.videoDrivers == ["nvidia"] - then "cuda" - else null; + package = pkgs.ollama-vulkan; host = "[::]"; openFirewall = true; environmentVariables = { diff --git a/overlays/default.nix b/overlays/default.nix index fcabd9b..28ad72b 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -10,7 +10,7 @@ # You can change versions, add patches, set compilation flags, anything really. # https://nixos.wiki/wiki/Overlays modifications = final: prev: { - n8n = import ./mods/n8n.nix {inherit prev;}; + # n8n = import ./mods/n8n.nix {inherit prev;}; vivaldi = prev.vivaldi.override { commandLineArgs = "--enable-features=UseOzonePlatform --ozone-platform=wayland"; }; diff --git a/secrets.nix b/secrets.nix index 7192e37..8fe10dc 100644 --- a/secrets.nix +++ b/secrets.nix @@ -1,13 +1,14 @@ let #SYSTEMS AZ-CLD-1 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIItSijmU5YwcJcoshtmYxpxBaVA4TPaCMk23ws7KDkAH"; + AZLT124-L = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIg/nFOPx763xIbepPsdYRE49R7HwvikXhLF/iPgH1Jh"; #USERS sascha.koenig = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEZbg/Z9mnflXuLahGY8WOSBMqbgeqVIkIwRkquys1Ml"; jannik.mueller = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPvZazSuIoWoRWhkAqQDMLeurxVUyy1MTllp1wfw1tzq"; users = [sascha.koenig]; - systems = [AZ-CLD-1]; + systems = [AZ-CLD-1 AZLT124-L]; in { "secrets/server.crt.age".publicKeys = systems ++ users; "secrets/server.key.age".publicKeys = systems ++ users; @@ -31,4 +32,5 @@ in { "secrets/zammad-secret.age".publicKeys = systems ++ users; "secrets/zammad-hr-env.age".publicKeys = systems ++ users; "secrets/zammad-hr-env-prod.age".publicKeys = systems ++ users; + "secrets/outline-key.age".publicKeys = systems ++ users; } diff --git a/secrets/outline-key.age b/secrets/outline-key.age new file mode 100644 index 0000000..1d153cb --- /dev/null +++ b/secrets/outline-key.age @@ -0,0 +1,14 @@ +-----BEGIN AGE ENCRYPTED FILE----- +YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpoVnNlZyB5VmZT +ZXNLY3BRV0ZzQWNjODNRSWZCME16NmJldDBobXZKcGVSRTQ2NXdvCkU1SFZOYTZ1 +b3lHTUxwZmV1STNuV2VQWU9IZ1lWSlVDVThwMWt1UXcrQkkKLT4gc3NoLWVkMjU1 +MTkgU3JIYXFBIGV4V3NWKzVrU1lXT3g1RnA0YUNtdnNlMDMzaFpOQ3YwREgyU1ZU +WVNrQWsKeXFtTVRQd1htYjRITDZkZHpKOVA5N1NwVlRYRmFPUm16NkZmSHpqNEFw +MAotPiBzc2gtZWQyNTUxOSBDU015aGcgNkp3VFk1S2ZZZEtobGVWRTZkMjhiSEVP +UnhkTkxtS3JBMkZZSDBZMG0wTQpTbDlOanVNZXdtY1JsSUlqS2IrN3F5QzVHSUUw +dlJ4aHgyNjU0L1d6S3QwCi0+IDV0LWdyZWFzZQo3UUJ2S2Q5Q251UmVDZndCYTh0 +M3lNUFlpQTlkcVlQckg3N09TNjBPSWZLc3QxcURkUVo2N0pjCi0tLSBYR1krVnFY +d0pmNVZLd3ZrMHlXQTFUNE55dGRPLy9icy9uYmlCaEU0TjlVCpvQKF0z2iDtyvwv +qLbqIQ970U/l4oZLyiXtPVQeYvq794NGbOo/378qxQO87AutJrfdvpmRcQ/AZ2dH +n1SHYEu/da6dckOvtLrMcXdN+Q== +-----END AGE ENCRYPTED FILE-----