Compare commits

..
2 Commits
Author SHA1 Message Date
kiri e887fcd435 updates 2026-09-27 12:35:04 +02:00
kiri 98a9be3615 cleanup 2026-09-22 22:05:11 +02:00
16 changed files with 96 additions and 204 deletions

No files matched your search

+4 -6
View File
@@ -11,12 +11,10 @@ and maintenance entry points. Global instructions remain applicable.
environment, or access live company systems with write authority. Test writes need environment, or access live company systems with write authority. Test writes need
task-specific authority. Moving credentials or synchronizing company content task-specific authority. Moving credentials or synchronizing company content
requires agreement; ordinary repository work does not authorize either. requires agreement; ordinary repository work does not authorize either.
- Follow the user's testing policy: automated tests only when explicitly requested - Do not write or run tests or perform extensive validation unless explicitly
or covered by an established repository policy. A test file alone does not establish requested. For routine changes, use a focused review or small manual check.
a general policy. Use the smallest relevant review, build, or manual check. - Run `just validate` only when explicitly requested. Read its short result first;
- Use `just validate` for a completed configuration batch, or name affected hosts inspect saved logs only for failures or a concrete unresolved concern.
for iteration. Read the short result first; inspect saved logs only for failures
or a concrete unresolved concern. Documentation-only edits need no system build.
- Replace superseded state in `docs/current-work.md`; keep durable rationale in - Replace superseded state in `docs/current-work.md`; keep durable rationale in
`docs/design.md` and operational detail beside its owner. Use Git for chronology. `docs/design.md` and operational detail beside its owner. Use Git for chronology.
Remove temporary state when it no longer serves a purpose. Remove temporary state when it no longer serves a purpose.
+5 -5
View File
@@ -55,9 +55,9 @@ directory. Failure stops the command; snapshots are removed on exit. It neither
updates inputs nor creates result links or activates systems. The implementation is updates inputs nor creates result links or activates systems. The implementation is
`scripts/validate.py`; `just` and Python are installed on both workstations. `scripts/validate.py`; `just` and Python are installed on both workstations.
Use targeted hosts during iteration and full validation for a completed batch. Run targeted host builds or full validation only when explicitly requested. Routine
Documentation-only changes need review and `git diff --check`, not system builds. changes need a focused review or small manual check. Build, activation and
Build, activation and interactive behavior are separate evidence. interactive behavior are separate evidence.
User-owned activation: User-owned activation:
@@ -76,8 +76,8 @@ provisioning is documented with workbench. Never put plaintext secrets in Nix.
- **Orientation:** Super+Shift+N names the focused workspace; submit an empty name - **Orientation:** Super+Shift+N names the focused workspace; submit an empty name
to clear it. Named empty workspaces persist until cleared. Noctalia shows labels; to clear it. Named empty workspaces persist until cleared. Noctalia shows labels;
terminal titles include the working directory and command. terminal titles include the working directory and command.
- **Icons/vault:** check Oil from Walker and Nautilus device/symbolic icons. Walker's - **Icons/vault:** check Oil from Walker and Nautilus device/symbolic icons. Check
`?` vault provider should request unlocking on use, never during desktop startup. Walker's `?` vault provider; upstream Elephant may query `rbw` during startup.
- **Calendar:** in Noctalia Settings → Services → Calendar, set the Radicale - **Calendar:** in Noctalia Settings → Services → Calendar, set the Radicale
password through the existing Personal account (GNOME Keyring). Add an ICS account password through the existing Personal account (GNOME Keyring). Add an ICS account
named Work using Outlook's published URL. Keep this URL in writable Noctalia named Work using Outlook's published URL. Keep this URL in writable Noctalia
+17 -16
View File
@@ -10,6 +10,7 @@ Complete independent agreed work and obvious fixes autonomously. Leave consequen
unknowns pending and collect recommendations/alternatives into one substantial review unknowns pending and collect recommendations/alternatives into one substantial review
batch. Ask earlier only to prevent broad rework/blockage. The old 2–4-question quota batch. Ask earlier only to prevent broad rework/blockage. The old 2–4-question quota
is superseded. Keep effort focused; no speculative systems or peripheral research. is superseded. Keep effort focused; no speculative systems or peripheral research.
Do not write or run tests or perform extensive validation unless explicitly requested.
Do not activate, push, decrypt for discovery or access company systems with write Do not activate, push, decrypt for discovery or access company systems with write
authority. No subagents unless explicitly authorized by current instructions. authority. No subagents unless explicitly authorized by current instructions.
@@ -31,7 +32,7 @@ The unedited `~/sync/notes/setup-todo.md` remains an idea inbox, not authorizati
Noctalia labels; shell titles include directory/command. Garden shell initialization Noctalia labels; shell titles include directory/command. Garden shell initialization
now belongs to company integration instead of every host's generic shell. now belongs to company integration instead of every host's generic shell.
- Kanagawa declares Adwaita/hicolor icon fallback; modest Limine branding/layout. - Kanagawa declares Adwaita/hicolor icon fallback; modest Limine branding/layout.
A pinned Elephant patch defers its startup `rbw list` to the explicit vault query. Walker uses upstream Elephant without a local vault patch. It may query `rbw` at startup.
- GitHub devenv 2.3.2 installed with native Zsh hook and upstream reload defaults. - GitHub devenv 2.3.2 installed with native Zsh hook and upstream reload defaults.
CLI dependencies keep upstream pins/cache; workbench tools use this repository's CLI dependencies keep upstream pins/cache; workbench tools use this repository's
exact nixpkgs pin. Company tools are also installed through the work profile. Product and exact nixpkgs pin. Company tools are also installed through the work profile. Product and
@@ -53,6 +54,8 @@ The unedited `~/sync/notes/setup-todo.md` remains an idea inbox, not authorizati
Validation prepares upstream devenv's import-from-derivation dependencies before Validation prepares upstream devenv's import-from-derivation dependencies before
read-only flake checking, accepts the repository's declared official cache, and read-only flake checking, accepts the repository's declared official cache, and
reports interruption concisely. Full builds still include the tools-only shell. reports interruption concisely. Full builds still include the tools-only shell.
The devenv cache is now in persistent NixOS Nix settings; the flake cache hint
was removed.
## Decisions/provisioning still needed ## Decisions/provisioning still needed
@@ -87,8 +90,8 @@ Final full validation passed before the final review deletions:
`/tmp/nixos-validate-t7zv1zux` (session 88912, `/tmp/nixos-validate-t7zv1zux` (session 88912,
completed exit 0). Formatting, devenv preparation, flake check, all three host completed exit 0). Formatting, devenv preparation, flake check, all three host
builds (Orion, Polaris, Zenith), and the tools-only workbench build passed. builds (Orion, Polaris, Zenith), and the tools-only workbench build passed.
This includes the final notes startup ordering, serialized vault-query patch, This includes the final notes startup ordering, FUSE wrapper paths, native Zsh retry
FUSE wrapper paths, native Zsh retry function and SecretSpec package collision fix. function and SecretSpec package collision fix. The vault patch was removed afterward.
No systems were activated. No systems were activated.
Native devenv tools-only startup also passed in an isolated temporary home: Native devenv tools-only startup also passed in an isolated temporary home:
@@ -101,9 +104,9 @@ Evidence: `/tmp/foundation-editor-check/{startup,notes}.log`. No real notebook o
credentials loaded. Built Kanagawa index declares `Inherits=Adwaita,hicolor`. credentials loaded. Built Kanagawa index declares `Inherits=Adwaita,hicolor`.
Python source syntax and local documentation links checked; no automated tests added. Python source syntax and local documentation links checked; no automated tests added.
The final review only removed the unaccepted Kubernetes login wrapper and the The earlier final review removed the unaccepted Kubernetes login wrapper and the
machine-wide devenv cache setting; the flake-scoped cache remains. Full builds were machine-wide devenv cache setting; the flake-scoped cache remains. Full builds were
not repeated for those deletions. not repeated for those deletions. The later Walker patch removal has not been built.
Builds do not establish interactive acceptance. The user checkpoint remains; do not Builds do not establish interactive acceptance. The user checkpoint remains; do not
repeat full builds for documentation-only handoff edits. repeat full builds for documentation-only handoff edits.
@@ -112,18 +115,16 @@ repeat full builds for documentation-only handoff edits.
The final diff was reviewed for correctness, integration and Ponytail complexity. The final diff was reviewed for correctness, integration and Ponytail complexity.
Desktop/capability moves and repository wiring had no material findings. The review Desktop/capability moves and repository wiring had no material findings. The review
removed the speculative Kubernetes login interpreter and kept the devenv cache at removed the speculative Kubernetes login interpreter. The devenv cache was later
flake scope instead of granting it machine-wide trust. The remaining Python has a moved from flake scope to machine-wide Nix settings at the user's request. The
concrete role: in-memory concurrent secret loading with completeness checks, one-time remaining Python has a concrete role: in-memory concurrent secret loading with
encrypted credential reshaping, dynamic OBS rclone configuration, or pre-existing completeness checks, one-time encrypted credential reshaping, dynamic OBS rclone
dictation/transcription behavior. configuration, or pre-existing dictation/transcription behavior.
The user checkpoint is still required before this pass is complete. No implementation The user checkpoint is still required before this pass is complete. The implementation
commit was made in this turn. was committed as `5748b34` after the initial foundation commit `f164d8b`. Later
cleanup removed the Walker patch, Handy test and AI capability README.
Initial local commit `f164d8b` predates this implementation. Four documentation files No activation was recorded during that pass. External workbench analysis/content
were already modified during the design pass; those changes belong to this effort.
No remote changes or activation have occurred. External workbench analysis/content
changes are unrelated and must not be committed here. Previous external loader changes are unrelated and must not be committed here. Previous external loader
copies remain at `/tmp/workbench-environment-before-6k4dwzuo`; only root/workbench environment documentation and ignore entries were updated. copies remain at `/tmp/workbench-environment-before-6k4dwzuo`; only root/workbench environment documentation and ignore entries were updated.
Backups: `/tmp/foundation-workbench-docs-bvrs1hu9`. Old external loaders remain Backups: `/tmp/foundation-workbench-docs-bvrs1hu9`. Old external loaders remain
+10 -10
View File
@@ -52,8 +52,8 @@ Use store-qualified executables or `runtimeInputs` in packaged scripts; make run
paths and failures explicit. Do not duplicate package lists, generated settings or paths and failures explicit. Do not duplicate package lists, generated settings or
binding references in documentation. binding references in documentation.
These clarify the agreed model; they are not a one-package-per-file rule, a new These clarify the agreed model; they are not a one-package-per-file rule or a
testing policy, or a requirement for additional abstractions. requirement for additional abstractions.
## Daily environment ## Daily environment
@@ -74,9 +74,9 @@ Notes stay in `~/sync/notes`, mostly meeting material; no new taxonomy. HTTP and
database targets remain independently selected and visibly named. Dadbod working database targets remain independently selected and visibly named. Dadbod working
queries and connection state stay outside Git; see the editor's `database.lua`. queries and connection state stay outside Git; see the editor's `database.lua`.
Kanagawa remains the theme with Adwaita fallback icons. rbw unlocks on requested Kanagawa remains the theme with Adwaita fallback icons. Walker uses upstream Elephant
vault access, preserving its lock policy. Outlook PWA owns work email/calendar without a local vault patch; it may query rbw during startup. Outlook PWA owns work
editing. Mailspring owns personal mail; Thunderbird remains a backup. Noctalia email/calendar editing. Mailspring owns personal mail; Thunderbird remains a backup. Noctalia
provides the combined read-only Radicale/Outlook agenda. The user accepts published provides the combined read-only Radicale/Outlook agenda. The user accepts published
ICS link access and supplies the URL privately through runtime settings. Personal ICS link access and supplies the URL privately through runtime settings. Personal
calendar editing stays on the phone; keep khal/todoman. calendar editing stays on the phone; keep khal/todoman.
@@ -118,11 +118,11 @@ validation feedback to repeated reminders. This applies the useful principle of
progressive disclosure from [OpenAI's harness engineering article](https://openai.com/index/harness-engineering/) progressive disclosure from [OpenAI's harness engineering article](https://openai.com/index/harness-engineering/)
without introducing speculative skills, orchestration or evaluation infrastructure. without introducing speculative skills, orchestration or evaluation infrastructure.
`just validate` includes working-tree changes and new nonignored files without staging, `just validate` is available on explicit request. It includes working-tree changes
formats, evaluates and builds. Concise results and saved logs minimize agent overhead. and new nonignored files without staging, formats, evaluates and builds. Targeted
Targeted host builds support iteration; a full run also builds workbench tools. host builds are supported; a full run also builds workbench tools. Builds do not
Builds do not prove activation or interactive behavior. Preserve the user's testing prove activation or interactive behavior. Do not write or run tests or perform
policy; this pass does not create a new automated testing policy. extensive validation unless explicitly requested.
Keep native update and activation commands. `nix flake update` is normal; selective Keep native update and activation commands. `nix flake update` is normal; selective
updates (often `llm-agents`) are appropriate while nixpkgs breakage awaits repair. updates (often `llm-agents`) are appropriate while nixpkgs breakage awaits repair.
Generated
+40 -40
View File
@@ -20,16 +20,16 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1788011267, "lastModified": 1790001035,
"narHash": "sha256-mEq2kU+ljompTToZ44Afvm7d/rHJ5iMBl0tjZuyShJs=", "narHash": "sha256-1/SLBjSYBzDdDhvLQ83wrzBakyS/xNGgtxHGNuveOEQ=",
"owner": "Mic92", "owner": "Mic92",
"repo": "bun2nix", "repo": "bun2nix",
"rev": "5765b0614591f75ee8ba5596e81ae85c167d1071", "rev": "07a5bfc8ac36c5370199343fa620b69f63186e33",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "Mic92", "owner": "Mic92",
"ref": "fix-structured-attrs-hook", "ref": "llm-agents",
"repo": "bun2nix", "repo": "bun2nix",
"type": "github" "type": "github"
} }
@@ -98,11 +98,11 @@
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1789773873, "lastModified": 1789991752,
"narHash": "sha256-lFR8A3JzpXn4Az9quklprOje/+Njyh9+bP+CE1TCIxI=", "narHash": "sha256-SiH+H00IutELZBg7BBNo6r5DU6E+DG7DjrbeX5+QLa0=",
"owner": "cachix", "owner": "cachix",
"repo": "devenv", "repo": "devenv",
"rev": "2ba2f9ed32596289874c58981a4d3e56cadd639d", "rev": "1c57b5dea0d400af97053fdd1a536fca17378f73",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -118,11 +118,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1781152676, "lastModified": 1789770686,
"narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=", "narHash": "sha256-uZkBR7yHdIKUFB5SZdfgh1qkGfI3XmYmI/lTiquxbck=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1", "rev": "725ea35e410ad83be4931d1bff7e090eacaf3563",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -281,11 +281,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1788651960, "lastModified": 1790080548,
"narHash": "sha256-v9wJd32eZ2bvhBzVOd7TIjLQd011P7nwOhjKtWlci5I=", "narHash": "sha256-u4sa7RCbwvk8cZmAGs35F7o0h4IqDc3wsrrnjQvMumk=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "2c0350c759688177331b8f5242311fae8877bdb3", "rev": "cbcbfa2778e0c5653ef349df3ebae8288efac3c0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -318,11 +318,11 @@
"treefmt-nix": "treefmt-nix_2" "treefmt-nix": "treefmt-nix_2"
}, },
"locked": { "locked": {
"lastModified": 1789804571, "lastModified": 1790311386,
"narHash": "sha256-qYKCHhnLrEQ5XOH/5vwc57FSpPNCWC/4+AcWjJa7vPE=", "narHash": "sha256-bOexMr1RcAS6PFcMnEfwe5apsEoaLmSUUxlqUftd2uU=",
"owner": "numtide", "owner": "numtide",
"repo": "llm-agents.nix", "repo": "llm-agents.nix",
"rev": "c2351168cdce1d7ab47961266b999a449f23bfad", "rev": "1446b3cb242c8cd24619b58054112cc2d870e591",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -378,11 +378,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1788680125, "lastModified": 1789892076,
"narHash": "sha256-amGSoDobwmp4CFvCn841ws2iuitus+HUJdD/gKgsrJA=", "narHash": "sha256-Dkg4VKPmDPqTwaiw2WH5br73tXoL1qrOO0xJnR4TlcA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-index-database", "repo": "nix-index-database",
"rev": "116ad1c2adb642405ef8916f6a94c8626f971344", "rev": "9ad722673ab3b3f91f02135e53775825b240b869",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -398,11 +398,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1788744583, "lastModified": 1788981141,
"narHash": "sha256-oNMrijfyaoRjjWhxHNFSBYyEB4u/zb/AxoKewC56LvE=", "narHash": "sha256-7xWS16u13YGlRNKWaAPzRbEyh4OLOXJe31k7h4AnXNU=",
"owner": "BirdeeHub", "owner": "BirdeeHub",
"repo": "nix-wrapper-modules", "repo": "nix-wrapper-modules",
"rev": "e88c449105c6aafa460196d3cbd16718655aee0f", "rev": "1db3c116a6aa61823f8d8f3c47c306846428fc54",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -444,11 +444,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1788860136, "lastModified": 1789978172,
"narHash": "sha256-MhPMOFV4pVkygWEbQ8t1De/uQ9cWF1u++tRe2L5tG48=", "narHash": "sha256-FIRXajv1pPZ+l6On6ekkmcQ6le0Zi0ncRUoR3nB0vKA=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "62173785b9a18c78b4a15aca2623d02bceb9d077", "rev": "9ebcb7766700d7e006d9505247bd7ce0426f4232",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -463,11 +463,11 @@
"nixpkgs-src": "nixpkgs-src" "nixpkgs-src": "nixpkgs-src"
}, },
"locked": { "locked": {
"lastModified": 1789506231, "lastModified": 1787753358,
"narHash": "sha256-vNkJbtmqyBfFhn/HnzQo4ROuoyYWuy/allqTfJb4kMY=", "narHash": "sha256-Tl77VbWyAKrOfRNQhL6JbQtb/MLzbYa/1RG1gWWfICk=",
"owner": "cachix", "owner": "cachix",
"repo": "devenv-nixpkgs", "repo": "devenv-nixpkgs",
"rev": "c2f38fe7f9e04d9aadd354d380f2bd40531d9737", "rev": "256551e45f6303e142ab4a98be1bf243feb77dc0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -495,11 +495,11 @@
"nixpkgs-src": { "nixpkgs-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1789370336, "lastModified": 1787394516,
"narHash": "sha256-6RSEDHIWQtesQKWSu5qRai8L2h4KgCgMEfJHstW99G4=", "narHash": "sha256-pRGOQSClnXNI2iLUG6DYpsGvYcuw0drOutVZFTJNw90=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c7def046b9a883d46974757852106483d741586f", "rev": "c8f90650c15282fa8656a041bfbbd2403997a9a7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -511,11 +511,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1789632929, "lastModified": 1790238896,
"narHash": "sha256-RjR8AyvGlWuw16XRj7C1YDEw4E27ciuyPeB2nDMzgTU=", "narHash": "sha256-ym4BG18Pu2awiJIehla1Lo9xiB2QYRcCzW3SB74gEBY=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a32edd7654519351e48e80372a928df336394670", "rev": "34ca302a9572963c02e385c056be37c85ff51b77",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -545,11 +545,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1788886125, "lastModified": 1790104132,
"narHash": "sha256-5rgQFUGr8GXYyyuy8ynrN39WfZzSiO/wqGWjELBOkEY=", "narHash": "sha256-yvcudrhnWvWSFS2ujWxAJ7CVdgdiZs2BDGbgn38p1l0=",
"owner": "noctalia-dev", "owner": "noctalia-dev",
"repo": "noctalia", "repo": "noctalia",
"rev": "d6607b4eafbb92f6d494ebed3e296d4b741c0b58", "rev": "61aa22730c434500fd3f2048eba47658b1f20aad",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -603,11 +603,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1788337237, "lastModified": 1789890976,
"narHash": "sha256-gkSH8VUtCo6hnysNmb9DbTuDepH2t5pv+QWjP75xKAk=", "narHash": "sha256-GKwH3zpy7tartuJMG0Rv/xUsdetG1QLmTVv8UKgJLmA=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "fbf759290e0cb0a98dfc813a4eb7d53ad1dacb57", "rev": "7214124c20c1542c90deb54af50e2f53ae02711f",
"type": "github" "type": "github"
}, },
"original": { "original": {
-5
View File
@@ -1,11 +1,6 @@
{ {
description = "NixOS Configuration"; description = "NixOS Configuration";
nixConfig = {
extra-substituters = [ "https://devenv.cachix.org" ];
extra-trusted-public-keys = [ "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=" ];
};
inputs = { inputs = {
devenv.url = "github:cachix/devenv"; devenv.url = "github:cachix/devenv";
disko = { disko = {
-14
View File
@@ -1,14 +0,0 @@
# AI tools
Nix installs the tools, assets, skills and system Codex defaults. Codex owns its
writable user configuration; credentials, session history and other runtime state
remain outside this repository. `instructions/codex.md` owns global agent guidance.
Herdr is optional experimentation. Reload its managed configuration with
Ctrl+Alt+Shift+R (or Ctrl+B then Shift+R); its configuration owns the binding reference.
Home Manager may preserve an earlier regular configuration file with `.bak`.
Ollama supplies `nomic-embed-text` for grounded-docs. The latter runs on localhost
port 6280 with persistent Podman volumes. Removing another tool must not delete
these models or volumes. No mandatory agent persistence or orchestration workflow
is defined here.
+3 -1
View File
@@ -28,6 +28,8 @@ in
}; };
features.plugins = true; features.plugins = true;
# The Nix package lacks the codex-package.json layout the daemon requires.
features.daemon_auto_start = false;
hooks = ai.codexHooks; hooks = ai.codexHooks;
mcp_servers = ai.servers // { mcp_servers = ai.servers // {
context7 = ai.servers.context7 // { context7 = ai.servers.context7 // {
@@ -98,7 +100,7 @@ in
pkgs.nodejs pkgs.nodejs
pkgs.python3 pkgs.python3
inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.codex inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.codex
pkgs.llm-agents.chatgpt inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.chatgpt
pkgs.llm-agents.pi pkgs.llm-agents.pi
pkgs.llm-agents.claude-code pkgs.llm-agents.claude-code
pkgs.llm-agents.herdr pkgs.llm-agents.herdr
@@ -14,9 +14,8 @@
# Validation # Validation
- Write or run automated tests only when explicitly requested or covered by the repository's established testing policy. Do not invent a testing policy or introduce tests into a repository without tests unless explicitly requested. - Do not write or run tests or perform extensive validation unless explicitly requested.
- Validate changes with the smallest relevant build, manual behaviour check, or review of code and output. - For routine changes, use a focused review or small manual check. Report only checks performed.
- Broaden or repeat validation only for changes, failures or unresolved concerns. Report only checks performed.
# Writing # Writing
+9
View File
@@ -8,4 +8,13 @@
jack.enable = true; jack.enable = true;
}; };
}; };
flake.modules.homeManager.audio =
{ pkgs, ... }:
{
home.packages = [
pkgs.reaper
pkgs.bitwig-studio
];
};
} }
@@ -1,37 +0,0 @@
"""Synthetic key-state checks; never reads a keyboard or records audio."""
from unittest.mock import Mock, patch
import push_to_talk as ptt
down = [ptt.key.KEY_LEFTMETA, ptt.key.KEY_D]
def check(states, expected, error=None):
device = Mock()
device.active_keys.side_effect = states
device.read_loop.return_value = iter([object(), object()])
if error:
device.read_loop.side_effect = error
with (
patch.object(ptt, "list_devices", return_value=["keyboard"]),
patch.object(ptt, "InputDevice", return_value=device),
patch.object(ptt.signal, "signal"),
patch.object(ptt.subprocess, "run") as run,
):
try:
ptt.main("handy")
except (OSError, KeyboardInterrupt):
assert error is not None
assert [call.args[0][1] for call in run.call_args_list] == expected
device.close.assert_called_once()
check([[]], []) # Released before the listener starts: do not record.
check([down, []], ["--toggle-transcription", "--toggle-transcription"])
check([down, down, down, [ptt.key.KEY_D]], ["--toggle-transcription"] * 2)
check([down, down], ["--toggle-transcription", "--cancel"], OSError("unplugged"))
check([down, down], ["--toggle-transcription", "--cancel"], KeyboardInterrupt())
assert ptt.held([ptt.key.KEY_RIGHTMETA, ptt.key.KEY_D])
assert not ptt.held([ptt.key.KEY_LEFTMETA])
print("Push-to-talk release, repeat, disconnect and cancellation checks passed")
+4
View File
@@ -14,6 +14,10 @@ in
settings = { settings = {
trusted-users = [ "@wheel" ]; trusted-users = [ "@wheel" ];
use-xdg-base-directories = true; use-xdg-base-directories = true;
extra-substituters = [ "https://devenv.cachix.org" ];
extra-trusted-public-keys = [
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
];
experimental-features = [ experimental-features = [
"nix-command" "nix-command"
-12
View File
@@ -23,16 +23,6 @@
... ...
}: }:
let let
elephantPackages = inputs.walker.inputs.elephant.packages.${pkgs.stdenv.hostPlatform.system};
# Upstream initializes rbw at startup. Drop this patch when it supports lazy vault access.
providers = elephantPackages.elephant-providers.overrideAttrs (old: {
patches = (old.patches or [ ]) ++ [ ./demand-driven-vault.patch ];
});
elephant = elephantPackages.elephant-with-providers.overrideAttrs (old: {
installPhase =
builtins.replaceStrings [ "${elephantPackages.elephant-providers}" ] [ "${providers}" ]
old.installPhase;
});
walkerDefaults = builtins.fromTOML (builtins.readFile "${inputs.walker}/resources/config.toml"); walkerDefaults = builtins.fromTOML (builtins.readFile "${inputs.walker}/resources/config.toml");
launcher = pkgs.writeShellApplication { launcher = pkgs.writeShellApplication {
@@ -46,8 +36,6 @@
{ {
imports = [ inputs.walker.homeManagerModules.default ]; imports = [ inputs.walker.homeManagerModules.default ];
programs.elephant.package = elephant;
desktop.commands.launcher = [ (lib.getExe launcher) ]; desktop.commands.launcher = [ (lib.getExe launcher) ];
programs.walker = { programs.walker = {
enable = true; enable = true;
@@ -1,55 +0,0 @@
--- a/internal/providers/bitwarden/setup.go
+++ b/internal/providers/bitwarden/setup.go
@@ -34,7 +34,7 @@
func Setup() {
LoadConfig()
- initItems()
+ // Vault access is initiated by an explicit query, never daemon startup.
}
func LoadConfig() {
--- a/internal/providers/bitwarden/query.go
+++ b/internal/providers/bitwarden/query.go
@@ -7,6 +7,7 @@
"net"
"os/exec"
"strings"
+ "sync"
"time"
"github.com/abenz1267/elephant/v2/pkg/common"
@@ -20,7 +21,24 @@
Folder string `json:"folder"`
}
+var itemsMu sync.Mutex
+
func initItems() {
+ itemsMu.Lock()
+ defer itemsMu.Unlock()
+ initItemsLocked()
+}
+
+func items() []RbwItem {
+ itemsMu.Lock()
+ defer itemsMu.Unlock()
+ if cachedItems == nil {
+ initItemsLocked()
+ }
+ return cachedItems
+}
+
+func initItemsLocked() {
cachedItems = nil
cmd := exec.Command("rbw", "list", "--raw")
output, err := cmd.CombinedOutput()
@@ -40,7 +58,7 @@
entries := []*pb.QueryResponse_Item{}
- for k, v := range cachedItems {
+ for k, v := range items() {
var subtexts []string
actions := []string{ActionCopyPassword, ActionCopyTotp, ActionSyncVault}
if config.AutoTypeSupport {
@@ -13,6 +13,7 @@
kubelogin-oidc kubelogin-oidc
jq jq
just just
python3Packages.python-openstackclient
python314 python314
rclone rclone
sops sops
+1
View File
@@ -43,6 +43,7 @@ in
flake.modules.homeManager.workstation-base = { flake.modules.homeManager.workstation-base = {
imports = [ imports = [
homeModules.passwords homeModules.passwords
homeModules.audio
homeModules.clipboard homeModules.clipboard
homeModules.handy homeModules.handy
homeModules.desktop-commands homeModules.desktop-commands