Compare commits
129 Commits
5a5de7353b
...
beads-sync
| Author | SHA1 | Date | |
|---|---|---|---|
| 7edb888b9c | |||
| 96a14dda71 | |||
| 3afb717a5c | |||
| fe1f3062a4 | |||
| 9de94043e8 | |||
| 158a8d364b | |||
| bde68afe3d | |||
| 517341a54e | |||
| e21ee4a3d7 | |||
| 4c2b17e233 | |||
| d0bf4d0559 | |||
| bfbe4817dc | |||
| fe07dd9721 | |||
| 920189c149 | |||
| 80534508a6 | |||
| 6425726461 | |||
| 8c28c82419 | |||
| c8fd76ea09 | |||
| 784bc89ab8 | |||
| ea0afe00de | |||
| a87d2c799d | |||
| d6c594d403 | |||
| 43a76a816e | |||
| 012b4fcf2d | |||
| 9a349169fa | |||
| 4b61ca40f9 | |||
| 0d3a54bfd3 | |||
| d109419493 | |||
| 1653b5055e | |||
| 5d6f696f50 | |||
| 14e17ea4cc | |||
| 4edaf7acf0 | |||
| 4290c7092e | |||
| 66d2826d03 | |||
| 86e42cb7ba | |||
| 4b437de986 | |||
| 46dc67494c | |||
| e76cfa4519 | |||
| 20f7a258dc | |||
| 006903eafd | |||
| b477b081f1 | |||
| 701e7982e7 | |||
| f848f2a195 | |||
| 84f33df138 | |||
| 5d946eea54 | |||
| a25ed55e98 | |||
| f6732df5c6 | |||
| 0f1a585b39 | |||
| 21f1d7c814 | |||
| a97c5400ac | |||
| 5ea26ce2b2 | |||
| c295041902 | |||
| 574dc1d4e1 | |||
| 9dc8b6de6e | |||
| 416da275dd | |||
| dafc1808de | |||
| 0c3d9a2df9 | |||
| 652c1c8722 | |||
| ea9b093aff | |||
| d963595dfb | |||
| de40a3f8b3 | |||
| 04401d75b0 | |||
| 94d767edc3 | |||
| 950ddef305 | |||
| 2bad594287 | |||
| e59c4b00ec | |||
| f917dbf0e6 | |||
| 077d4bb147 | |||
| 5888e274e6 | |||
| 6544899d34 | |||
| dc803e6aad | |||
| b9a1b3d26b | |||
| 50f916cf2e | |||
| 74a2bb6a16 | |||
| f611a2c39f | |||
| 1f4ba6a80f | |||
| 2cc9b1c491 | |||
| 197191ce4a | |||
| 25fb086142 | |||
| 056925dd72 | |||
| 47aa5fd454 | |||
| b1d82da740 | |||
| 602d3067f0 | |||
| 5b492046e6 | |||
| dd660d65ba | |||
| d03a935912 | |||
| 3f7a909b0a | |||
| 5a705803e5 | |||
| db0f78bd4a | |||
| 81ef9def29 | |||
| 4784190104 | |||
| 791be65d8d | |||
| c6d7399d64 | |||
| 908183f53e | |||
| 83f4dc268c | |||
| 6a6d0e7726 | |||
| 14c80ae448 | |||
| 3f607a91ec | |||
| e46eb093fe | |||
| 349ae65ff2 | |||
| 57252c9ba2 | |||
| 85cccf0dc9 | |||
| c642619bae | |||
| 3e9111b670 | |||
| 206b23bfa2 | |||
| cba4f78ebc | |||
| 8bc654f39a | |||
| 5057266b7a | |||
| 02529be730 | |||
| a6f7026b16 | |||
| 6d17a62a13 | |||
| 855f777824 | |||
| ccab26f6e7 | |||
| 20536548a0 | |||
| 5a42ccda98 | |||
| 090882595b | |||
| 2c08b31bb9 | |||
| 84f5f87027 | |||
| ac01548e89 | |||
| bb7f79843b | |||
| c1d6663a36 | |||
| 3cf4403ffa | |||
| 4e6123de9a | |||
| 19ee298b71 | |||
| 537f7831a7 | |||
| bf0d16fe1a | |||
| 858b6009ae | |||
| 40b323dcfd | |||
| 60bd89b02c |
0
.beads/interactions.jsonl
Normal file
0
.beads/interactions.jsonl
Normal file
54
.beads/issues.jsonl
Normal file
54
.beads/issues.jsonl
Normal file
File diff suppressed because one or more lines are too long
4
.beads/metadata.json
Normal file
4
.beads/metadata.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"database": "beads.db",
|
||||||
|
"jsonl_export": "sync_base.jsonl"
|
||||||
|
}
|
||||||
37
.beads/sync_base.jsonl
Normal file
37
.beads/sync_base.jsonl
Normal file
File diff suppressed because one or more lines are too long
28
AGENTS.md
28
AGENTS.md
@@ -200,4 +200,30 @@ tea issues close --repo johno/nixos-configs 2
|
|||||||
|
|
||||||
## Important Notes
|
## Important Notes
|
||||||
|
|
||||||
- **Sudo access**: Claude Code does not have sudo access. Ask the user to run elevated commands like `sudo nixos-rebuild switch`
|
- **Sudo access**: Claude Code does not have sudo access. Ask the user to run elevated commands like `sudo nixos-rebuild switch`
|
||||||
|
|
||||||
|
## 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
|
||||||
|
|||||||
55
flake.lock
generated
55
flake.lock
generated
@@ -1,5 +1,26 @@
|
|||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
|
"beads": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs-unstable"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1767911810,
|
||||||
|
"narHash": "sha256-0L4ATr01UsmBC0rSW62VIMVVSUihAQu2+ZOoHk9BQnA=",
|
||||||
|
"owner": "steveyegge",
|
||||||
|
"repo": "beads",
|
||||||
|
"rev": "28ff9fe9919a9665a0f00f5b3fcd084b43fb6cc3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "steveyegge",
|
||||||
|
"repo": "beads",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
@@ -16,6 +37,24 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731533236,
|
||||||
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"google-cookie-retrieval": {
|
"google-cookie-retrieval": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -258,6 +297,7 @@
|
|||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"beads": "beads",
|
||||||
"google-cookie-retrieval": "google-cookie-retrieval",
|
"google-cookie-retrieval": "google-cookie-retrieval",
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"home-manager-unstable": "home-manager-unstable",
|
"home-manager-unstable": "home-manager-unstable",
|
||||||
@@ -269,6 +309,21 @@
|
|||||||
"plasma-manager": "plasma-manager",
|
"plasma-manager": "plasma-manager",
|
||||||
"plasma-manager-unstable": "plasma-manager-unstable"
|
"plasma-manager-unstable": "plasma-manager-unstable"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|||||||
@@ -42,6 +42,11 @@
|
|||||||
url = "github:Jovian-Experiments/Jovian-NixOS";
|
url = "github:Jovian-Experiments/Jovian-NixOS";
|
||||||
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
beads = {
|
||||||
|
url = "github:steveyegge/beads";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, nixpkgs-unstable, nixos-wsl, ... } @ inputs: let
|
outputs = { self, nixpkgs, nixpkgs-unstable, nixos-wsl, ... } @ inputs: let
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ with lib;
|
|||||||
let
|
let
|
||||||
cfg = config.home.roles.development;
|
cfg = config.home.roles.development;
|
||||||
|
|
||||||
# Fetch the claude-plugins repository
|
# Fetch the claude-plugins repository (for humanlayer commands/agents)
|
||||||
# Update the rev to get newer versions of the commands
|
# Update the rev to get newer versions of the commands
|
||||||
claudePluginsRepo = builtins.fetchGit {
|
claudePluginsRepo = builtins.fetchGit {
|
||||||
url = "https://github.com/jeffh/claude-plugins.git";
|
url = "https://github.com/jeffh/claude-plugins.git";
|
||||||
@@ -14,6 +14,7 @@ let
|
|||||||
rev = "5e3e4d937162185b6d78c62022cbfd1c8ad42c4c";
|
rev = "5e3e4d937162185b6d78c62022cbfd1c8ad42c4c";
|
||||||
ref = "main";
|
ref = "main";
|
||||||
};
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.home.roles.development = {
|
options.home.roles.development = {
|
||||||
@@ -36,12 +37,14 @@ in
|
|||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.packages = [
|
home.packages = [
|
||||||
|
globalInputs.beads.packages.${system}.default
|
||||||
pkgs.unstable.claude-code
|
pkgs.unstable.claude-code
|
||||||
pkgs.unstable.claude-code-router
|
pkgs.unstable.claude-code-router
|
||||||
pkgs.unstable.codex
|
pkgs.unstable.codex
|
||||||
|
|
||||||
# Custom packages
|
# Custom packages
|
||||||
pkgs.custom.tea-rbw
|
pkgs.custom.tea-rbw
|
||||||
|
pkgs.custom.perles
|
||||||
];
|
];
|
||||||
|
|
||||||
# Install Claude Code humanlayer command and agent plugins
|
# Install Claude Code humanlayer command and agent plugins
|
||||||
@@ -89,6 +92,16 @@ in
|
|||||||
}"
|
}"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
# Set up beads Claude Code integration (hooks for SessionStart/PreCompact)
|
||||||
|
# This uses the CLI + hooks approach which is recommended over MCP for Claude Code
|
||||||
|
home.activation.claudeCodeBeadsSetup = lib.hm.dag.entryAfter ["writeBoundary" "claudeCodeCommands"] ''
|
||||||
|
# Run bd setup claude to install hooks into ~/.claude/settings.json
|
||||||
|
# This is idempotent - safe to run multiple times
|
||||||
|
${globalInputs.beads.packages.${system}.default}/bin/bd setup claude 2>/dev/null || true
|
||||||
|
|
||||||
|
$DRY_RUN_CMD echo "Claude Code beads integration configured (hooks installed)"
|
||||||
|
'';
|
||||||
|
|
||||||
# Note: modules must be imported at top-level home config
|
# Note: modules must be imported at top-level home config
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,10 @@
|
|||||||
org-journal-file-format "%Y-%m-%d.org"
|
org-journal-file-format "%Y-%m-%d.org"
|
||||||
org-capture-templates
|
org-capture-templates
|
||||||
'(("t" "Todo" entry (file+headline "~/org/todo.org" "Inbox")
|
'(("t" "Todo" entry (file+headline "~/org/todo.org" "Inbox")
|
||||||
"* TODO %? \n %i \n%a" :prepend t))))
|
"* TODO %? \n %i \n%a" :prepend t)))
|
||||||
|
;; Make blocked tasks more visible in agenda (they have subtasks to do!)
|
||||||
|
(custom-set-faces!
|
||||||
|
'(org-agenda-dimmed-todo-face :foreground "#bb9af7" :weight normal)))
|
||||||
|
|
||||||
(map! :after org-agenda
|
(map! :after org-agenda
|
||||||
:map org-agenda-mode-map
|
:map org-agenda-mode-map
|
||||||
@@ -145,12 +148,24 @@
|
|||||||
:args (list '(:name "dirpath" :type "string" :description "Directory path to list"))))
|
:args (list '(:name "dirpath" :type "string" :description "Directory path to list"))))
|
||||||
|
|
||||||
(use-package! claude-code-ide
|
(use-package! claude-code-ide
|
||||||
:defer t
|
:commands (claude-code-ide-menu claude-code-ide-open-here)
|
||||||
:config
|
:init
|
||||||
(claude-code-ide-emacs-tools-setup)
|
|
||||||
(map! :leader
|
(map! :leader
|
||||||
(:prefix ("o" . "open")
|
(:prefix ("o" . "open")
|
||||||
:desc "Claude Code IDE" "c" #'claude-code-ide-menu)))
|
:desc "Claude Code IDE" "c" #'claude-code-ide-menu))
|
||||||
|
:config
|
||||||
|
(claude-code-ide-emacs-tools-setup)
|
||||||
|
(setq claude-code-ide-cli-path "claude"
|
||||||
|
claude-code-ide-cli-extra-flags "--dangerously-skip-permissions"
|
||||||
|
claude-code-ide-focus-claude-after-ediff t
|
||||||
|
claude-code-ide-focus-on-open t
|
||||||
|
claude-code-ide-show-claude-window-in-ediff t
|
||||||
|
claude-code-ide-switch-tab-on-ediff t
|
||||||
|
claude-code-ide-use-ide-diff t
|
||||||
|
claude-code-ide-use-side-window t
|
||||||
|
claude-code-ide-window-height 20
|
||||||
|
claude-code-ide-window-side 'right
|
||||||
|
claude-code-ide-window-width 90))
|
||||||
|
|
||||||
(after! gptel
|
(after! gptel
|
||||||
(require 'gptel-tool-library)
|
(require 'gptel-tool-library)
|
||||||
|
|||||||
@@ -43,14 +43,28 @@ in
|
|||||||
Inbox ~/Mail/INBOX
|
Inbox ~/Mail/INBOX
|
||||||
SubFolders Verbatim
|
SubFolders Verbatim
|
||||||
|
|
||||||
# Channel Configuration - Sync All
|
# Channel Configuration - Main (excludes Sent)
|
||||||
Channel proton
|
Channel proton-main
|
||||||
Far :proton-remote:
|
Far :proton-remote:
|
||||||
Near :proton-local:
|
Near :proton-local:
|
||||||
Patterns *
|
Patterns * !Sent
|
||||||
Create Both
|
Create Both
|
||||||
Expunge Both
|
Expunge Both
|
||||||
SyncState *
|
SyncState *
|
||||||
|
|
||||||
|
# Channel Configuration - Sent (pull only)
|
||||||
|
Channel proton-sent
|
||||||
|
Far :proton-remote:Sent
|
||||||
|
Near :proton-local:Sent
|
||||||
|
Create Near
|
||||||
|
Expunge Near
|
||||||
|
Sync Pull
|
||||||
|
SyncState *
|
||||||
|
|
||||||
|
# Group both channels
|
||||||
|
Group proton
|
||||||
|
Channel proton-main
|
||||||
|
Channel proton-sent
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# msmtp configuration
|
# msmtp configuration
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ let
|
|||||||
|
|
||||||
keybindings = {
|
keybindings = {
|
||||||
"${shared_config.modifier}+Return" = "exec ${terminal}";
|
"${shared_config.modifier}+Return" = "exec ${terminal}";
|
||||||
|
"${shared_config.modifier}+Shift+Return" = "exec ${cfg.browser}";
|
||||||
"${shared_config.modifier}+Shift+q" = "kill";
|
"${shared_config.modifier}+Shift+q" = "kill";
|
||||||
|
|
||||||
"${shared_config.modifier}+a" = "focus parent";
|
"${shared_config.modifier}+a" = "focus parent";
|
||||||
@@ -98,6 +99,12 @@ in {
|
|||||||
options.home.roles.i3_sway = {
|
options.home.roles.i3_sway = {
|
||||||
enable = mkEnableOption "i3 and Sway tiling window managers with waybar and rofi";
|
enable = mkEnableOption "i3 and Sway tiling window managers with waybar and rofi";
|
||||||
|
|
||||||
|
browser = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "firefox --new-window";
|
||||||
|
description = "Browser to use for new window keybinding";
|
||||||
|
};
|
||||||
|
|
||||||
extraSharedConfig = mkOption {
|
extraSharedConfig = mkOption {
|
||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
default = {};
|
default = {};
|
||||||
|
|||||||
@@ -40,14 +40,15 @@
|
|||||||
|
|
||||||
boot.initrd.luks.devices."luks-b614167b-9045-4234-a441-ac6f60a96d81".device = "/dev/disk/by-uuid/b614167b-9045-4234-a441-ac6f60a96d81";
|
boot.initrd.luks.devices."luks-b614167b-9045-4234-a441-ac6f60a96d81".device = "/dev/disk/by-uuid/b614167b-9045-4234-a441-ac6f60a96d81";
|
||||||
|
|
||||||
# S3 deep sleep broken on Alder Lake - use direct hibernate on lid close
|
|
||||||
services.logind.settings.Login = {
|
services.logind.settings.Login = {
|
||||||
HandleLidSwitch = "hibernate";
|
HandleLidSwitch = "suspend-then-hibernate";
|
||||||
HandleLidSwitchExternalPower = "hibernate";
|
|
||||||
HandleLidSwitchDocked = "hibernate";
|
|
||||||
HandlePowerKey = "hibernate";
|
HandlePowerKey = "hibernate";
|
||||||
HandlePowerKeyLongPress = "poweroff";
|
HandlePowerKeyLongPress = "poweroff";
|
||||||
};
|
};
|
||||||
|
systemd.sleep.extraConfig = ''
|
||||||
|
HibernateDelaySec=30m
|
||||||
|
SuspendState=mem
|
||||||
|
'';
|
||||||
|
|
||||||
networking.hostName = "nix-book"; # Define your hostname.
|
networking.hostName = "nix-book"; # Define your hostname.
|
||||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||||
|
|||||||
@@ -4,4 +4,5 @@
|
|||||||
tea-rbw = pkgs.callPackage ./tea-rbw {};
|
tea-rbw = pkgs.callPackage ./tea-rbw {};
|
||||||
app-launcher-server = pkgs.callPackage ./app-launcher-server {};
|
app-launcher-server = pkgs.callPackage ./app-launcher-server {};
|
||||||
claude-code = pkgs.callPackage ./claude-code {};
|
claude-code = pkgs.callPackage ./claude-code {};
|
||||||
|
perles = pkgs.callPackage ./perles {};
|
||||||
}
|
}
|
||||||
|
|||||||
26
packages/perles/default.nix
Normal file
26
packages/perles/default.nix
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{ lib, buildGoModule, fetchFromGitHub }:
|
||||||
|
|
||||||
|
buildGoModule rec {
|
||||||
|
pname = "perles";
|
||||||
|
version = "unstable-2025-01-09";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "zjrosen";
|
||||||
|
repo = "perles";
|
||||||
|
rev = "main";
|
||||||
|
hash = "sha256-JgRayb4+mJ1r0AtdnQfqAw2+QRte+licsfZOaRgYqcs=";
|
||||||
|
};
|
||||||
|
|
||||||
|
vendorHash = "sha256-R7UWTdBuPteneRqxrWK51nqLtZwDsqQoMAcohN4fyak=";
|
||||||
|
|
||||||
|
# Tests require a real git repository context
|
||||||
|
doCheck = false;
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "A TUI for the Beads issue tracking system with BQL query language";
|
||||||
|
homepage = "https://github.com/zjrosen/perles";
|
||||||
|
license = licenses.mit;
|
||||||
|
maintainers = [ ];
|
||||||
|
mainProgram = "perles";
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user