Compare commits
19 Commits
polecat/ch
...
be3c27e868
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be3c27e868 | ||
| c2d286087f | |||
|
|
1172818062 | ||
|
|
9f63e1430c | ||
| b14ef1f62a | |||
| 87719fa9e6 | |||
| 933612da4c | |||
|
|
d2c7599267 | ||
|
|
3d16824eac | ||
| 2cdc15163c | |||
| a77b1230fe | |||
| 623a387127 | |||
| 737f2b09e4 | |||
| cddc9de14a | |||
| 53e3bbe78f | |||
| c258eafe34 | |||
| 03d0b76f97 | |||
| b5f7233214 | |||
| 1203662237 |
@@ -6,7 +6,7 @@
|
||||
# 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: ""
|
||||
issue-prefix: "x"
|
||||
|
||||
# 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
|
||||
@@ -59,4 +59,6 @@ sync-branch: "beads-sync"
|
||||
# - linear.url
|
||||
# - linear.api-key
|
||||
# - github.org
|
||||
# - github.repo
|
||||
# - github.repo
|
||||
|
||||
routing.mode: "explicit"
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: https://git.johnogle.info/johno/gitea-actions/nix-setup@main
|
||||
- uses: https://git.johnogle.info/johno/gitea-actions/nix-setup@v1
|
||||
|
||||
- name: Check flake
|
||||
run: nix flake check
|
||||
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,3 +1,8 @@
|
||||
result
|
||||
thoughts
|
||||
.beads
|
||||
|
||||
# Gas Town (added by gt)
|
||||
.runtime/
|
||||
.claude/
|
||||
.logs/
|
||||
|
||||
36
flake.lock
generated
36
flake.lock
generated
@@ -8,17 +8,17 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1768509852,
|
||||
"narHash": "sha256-4oZXrqBjK9V8qKHoxlfil20qcJdOU8HXJA4627nX1nQ=",
|
||||
"owner": "steveyegge",
|
||||
"repo": "beads",
|
||||
"rev": "d3db8253ff09e0f139ffbb6f839afe13acbf7bdb",
|
||||
"type": "github"
|
||||
"lastModified": 1769204611,
|
||||
"narHash": "sha256-OcrHcO/TD4x5T7n1N1q8LgxA5Wb2cOaSsbj7HFzn6RA=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "a45b441bc57e65380e44cab1f4a43f8033aa26dd",
|
||||
"revCount": 5462,
|
||||
"type": "git",
|
||||
"url": "ssh://git@git.johnogle.info:2222/johno/beads.git"
|
||||
},
|
||||
"original": {
|
||||
"owner": "steveyegge",
|
||||
"repo": "beads",
|
||||
"type": "github"
|
||||
"type": "git",
|
||||
"url": "ssh://git@git.johnogle.info:2222/johno/beads.git"
|
||||
}
|
||||
},
|
||||
"doomemacs": {
|
||||
@@ -81,17 +81,17 @@
|
||||
"gastown": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1768682809,
|
||||
"narHash": "sha256-PCP5PQasLqL5/OVNw6LsjiFfIU4RNniicTUcVq2ggHg=",
|
||||
"owner": "steveyegge",
|
||||
"repo": "gastown",
|
||||
"rev": "9cd2696abe68ac0defc612ace5028d327d4f207d",
|
||||
"type": "github"
|
||||
"lastModified": 1769299227,
|
||||
"narHash": "sha256-O3PhoS1ncKbUENnwZqpNvnVlSX2FGJO8GyWVNWz3cVM=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "62fb0243b50b735efa632d992133ce4ef3c55477",
|
||||
"revCount": 3026,
|
||||
"type": "git",
|
||||
"url": "ssh://git@git.johnogle.info:2222/johno/gastown.git"
|
||||
},
|
||||
"original": {
|
||||
"owner": "steveyegge",
|
||||
"repo": "gastown",
|
||||
"type": "github"
|
||||
"type": "git",
|
||||
"url": "ssh://git@git.johnogle.info:2222/johno/gastown.git"
|
||||
}
|
||||
},
|
||||
"google-cookie-retrieval": {
|
||||
|
||||
29
flake.nix
29
flake.nix
@@ -43,12 +43,12 @@
|
||||
};
|
||||
|
||||
beads = {
|
||||
url = "github:steveyegge/beads";
|
||||
url = "git+ssh://git@git.johnogle.info:2222/johno/beads.git";
|
||||
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||
};
|
||||
|
||||
gastown = {
|
||||
url = "github:steveyegge/gastown";
|
||||
url = "git+ssh://git@git.johnogle.info:2222/johno/gastown.git";
|
||||
flake = false; # No flake.nix upstream yet
|
||||
};
|
||||
|
||||
@@ -89,11 +89,20 @@
|
||||
};
|
||||
|
||||
|
||||
# Shared unstable overlays for custom package builds
|
||||
customUnstableOverlays = [
|
||||
# Override claude-code in unstable to use our custom GCS-based build
|
||||
# (needed for corporate networks that block npm registry)
|
||||
(ufinal: uprev: {
|
||||
claude-code = uprev.callPackage ./packages/claude-code {};
|
||||
})
|
||||
];
|
||||
|
||||
nixosModules = [
|
||||
./roles
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
{
|
||||
nixpkgs.overlays = [ (mkBaseOverlay {}) ];
|
||||
nixpkgs.overlays = [ (mkBaseOverlay { unstableOverlays = customUnstableOverlays; }) ];
|
||||
}
|
||||
(mkHomeManagerConfig {
|
||||
sharedModules = [ inputs.plasma-manager.homeModules.plasma-manager ];
|
||||
@@ -106,7 +115,7 @@
|
||||
inputs.home-manager-unstable.nixosModules.home-manager
|
||||
inputs.jovian.nixosModules.jovian
|
||||
{
|
||||
nixpkgs.overlays = [ (mkBaseOverlay {}) ];
|
||||
nixpkgs.overlays = [ (mkBaseOverlay { unstableOverlays = customUnstableOverlays; }) ];
|
||||
}
|
||||
(mkHomeManagerConfig {
|
||||
sharedModules = [ inputs.plasma-manager-unstable.homeModules.plasma-manager ];
|
||||
@@ -117,17 +126,7 @@
|
||||
./roles/darwin.nix
|
||||
inputs.home-manager.darwinModules.home-manager
|
||||
{
|
||||
nixpkgs.overlays = [
|
||||
(mkBaseOverlay {
|
||||
# Override claude-code in unstable to use our custom GCS-based build
|
||||
# (needed for corporate networks that block npm registry)
|
||||
unstableOverlays = [
|
||||
(ufinal: uprev: {
|
||||
claude-code = uprev.callPackage ./packages/claude-code {};
|
||||
})
|
||||
];
|
||||
})
|
||||
];
|
||||
nixpkgs.overlays = [ (mkBaseOverlay { unstableOverlays = customUnstableOverlays; }) ];
|
||||
}
|
||||
(mkHomeManagerConfig { sharedModules = []; })
|
||||
];
|
||||
|
||||
@@ -65,6 +65,7 @@ in
|
||||
pkgs.unstable.claude-code
|
||||
pkgs.unstable.claude-code-router
|
||||
pkgs.unstable.codex
|
||||
pkgs.sqlite
|
||||
|
||||
# Custom packages
|
||||
pkgs.custom.tea-rbw
|
||||
@@ -85,12 +86,14 @@ in
|
||||
if [ -f "$file" ]; then
|
||||
filename=$(basename "$file" .md)
|
||||
dest="$HOME/.claude/commands/humanlayer:''${filename}.md"
|
||||
rm -f "$dest" 2>/dev/null || true
|
||||
|
||||
# Copy file and conditionally remove the "model:" line from frontmatter
|
||||
${if cfg.allowArbitraryClaudeCodeModelSelection
|
||||
then "cp \"$file\" \"$dest\""
|
||||
else "${pkgs.gnused}/bin/sed '/^model:/d' \"$file\" > \"$dest\""
|
||||
}
|
||||
chmod u+w "$dest" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -99,12 +102,14 @@ in
|
||||
if [ -f "$file" ]; then
|
||||
filename=$(basename "$file" .md)
|
||||
dest="$HOME/.claude/agents/humanlayer:''${filename}.md"
|
||||
rm -f "$dest" 2>/dev/null || true
|
||||
|
||||
# Copy file and conditionally remove the "model:" line from frontmatter
|
||||
${if cfg.allowArbitraryClaudeCodeModelSelection
|
||||
then "cp \"$file\" \"$dest\""
|
||||
else "${pkgs.gnused}/bin/sed '/^model:/d' \"$file\" > \"$dest\""
|
||||
}
|
||||
chmod u+w "$dest" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -119,6 +124,7 @@ in
|
||||
sleep 0.5
|
||||
cp "$file" "$dest" || echo "Warning: Failed to copy $filename.md to commands"
|
||||
fi
|
||||
chmod u+w "$dest" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -133,13 +139,17 @@ in
|
||||
sleep 0.5
|
||||
cp "$file" "$dest" || echo "Warning: Failed to copy $filename.md to skills"
|
||||
fi
|
||||
chmod u+w "$dest" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
# Copy micro-skills (compact reusable knowledge referenced by formulas)
|
||||
for file in ${./skills/micro}/*.md; do
|
||||
if [ -f "$file" ]; then
|
||||
cp "$file" "$HOME/.claude/commands/skills/$(basename "$file")"
|
||||
dest="$HOME/.claude/commands/skills/$(basename "$file")"
|
||||
rm -f "$dest" 2>/dev/null || true
|
||||
cp "$file" "$dest"
|
||||
chmod u+w "$dest" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -147,7 +157,10 @@ in
|
||||
mkdir -p ~/.beads/formulas
|
||||
for file in ${./formulas}/*.formula.toml; do
|
||||
if [ -f "$file" ]; then
|
||||
cp "$file" "$HOME/.beads/formulas/$(basename "$file")"
|
||||
dest="$HOME/.beads/formulas/$(basename "$file")"
|
||||
rm -f "$dest" 2>/dev/null || true
|
||||
cp "$file" "$dest"
|
||||
chmod u+w "$dest" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
@@ -83,15 +83,62 @@
|
||||
"d" #'org-agenda-day-view
|
||||
"w" #'org-agenda-week-view))
|
||||
|
||||
;; (use-package! org-caldav
|
||||
;; :defer t
|
||||
;; :config
|
||||
;; (setq org-caldav-url "https://nextcloud.johnogle.info/remote.php/dav/calendars/johno"
|
||||
;; org-caldav-calendar-id "personal"
|
||||
;; org-icalendar-timezone "America/Los_Angeles"
|
||||
;; org-caldav-inbox "~/org/calendar.org"
|
||||
;; org-caldav-files nil
|
||||
;; org-caldav-sync-direction 'cal->org))
|
||||
;; org-caldav: Sync Org entries with Nextcloud CalDAV
|
||||
;; Setup requirements:
|
||||
;; 1. Create Nextcloud app password: Settings -> Security -> Devices & sessions
|
||||
;; 2. Store in rbw: rbw add nextcloud-caldav (username in notes, app password as secret)
|
||||
;; 3. Run: doom sync
|
||||
;; 4. Test: M-x org-caldav-sync
|
||||
;;
|
||||
;; Note: Conflict resolution is "Org always wins" - treat Org as source of truth
|
||||
;; for entries that originated in Org.
|
||||
(use-package! org-caldav
|
||||
:after org
|
||||
:commands (org-caldav-sync)
|
||||
:init
|
||||
(map! :leader
|
||||
:desc "Sync calendar" "o C" #'org-caldav-sync)
|
||||
:config
|
||||
;; Nextcloud CalDAV base URL
|
||||
(setq org-caldav-url "https://nextcloud.johnogle.info/remote.php/dav/calendars/johno")
|
||||
|
||||
;; Timezone for iCalendar export
|
||||
(setq org-icalendar-timezone "America/Los_Angeles")
|
||||
|
||||
;; Sync state storage (in org directory for multi-machine sync)
|
||||
(setq org-caldav-save-directory (expand-file-name ".org-caldav/" org-directory))
|
||||
|
||||
;; Backup file for entries before modification
|
||||
(setq org-caldav-backup-file (expand-file-name ".org-caldav/backup.org" org-directory))
|
||||
|
||||
;; Sync behavior: bidirectional by default
|
||||
(setq org-caldav-sync-direction 'twoway)
|
||||
|
||||
;; What changes from calendar sync back to Org (conservative: title and timestamp only)
|
||||
(setq org-caldav-sync-changes-to-org 'title-and-timestamp)
|
||||
|
||||
;; Deletion handling: ask before deleting
|
||||
(setq org-caldav-delete-calendar-entries 'ask)
|
||||
(setq org-caldav-delete-org-entries 'ask)
|
||||
|
||||
;; Enable TODO/VTODO sync
|
||||
(setq org-icalendar-include-todo 'all)
|
||||
(setq org-caldav-sync-todo t)
|
||||
|
||||
;; Calendar-specific configuration
|
||||
(setq org-caldav-calendars
|
||||
'(;; Personal calendar: two-way sync with family-shared Nextcloud calendar
|
||||
(:calendar-id "personal"
|
||||
:inbox "~/org/personal-calendar.org"
|
||||
:files ("~/org/personal-calendar.org"))
|
||||
|
||||
;; Tasks calendar: one-way sync (org → calendar only)
|
||||
;; SCHEDULED/DEADLINE items from todo.org push to private Tasks calendar.
|
||||
;; No inbox = no download from calendar (effectively one-way).
|
||||
;; Note: Create 'tasks' calendar in Nextcloud first, keep it private.
|
||||
(:calendar-id "tasks"
|
||||
:files ("~/org/todo.org"))))
|
||||
)
|
||||
|
||||
(defun my/get-rbw-password (alias)
|
||||
"Return the password for ALIAS via rbw, unlocking the vault only if needed."
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
|
||||
;; (unpin! t)
|
||||
|
||||
;; (package! org-caldav)
|
||||
(package! org-caldav)
|
||||
|
||||
;; Note: Packages with custom recipes must be pinned for nix-doom-emacs-unstraightened
|
||||
;; to build deterministically. Update pins when upgrading packages.
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
, autoPatchelfHook
|
||||
, patchelf
|
||||
, glibc
|
||||
}:
|
||||
|
||||
let
|
||||
@@ -38,8 +39,14 @@ in stdenv.mkDerivation {
|
||||
|
||||
dontUnpack = true;
|
||||
dontBuild = true;
|
||||
# Bun standalone binaries have JS code appended after the ELF sections
|
||||
# stripping/patching would remove or corrupt this appended data
|
||||
dontStrip = true;
|
||||
dontPatchELF = true;
|
||||
|
||||
nativeBuildInputs = lib.optionals stdenv.isLinux [ autoPatchelfHook ];
|
||||
# Don't use autoPatchelfHook - it rewrites the ELF and strips the appended
|
||||
# bun bundle (the JS code is appended after the ELF sections)
|
||||
nativeBuildInputs = lib.optionals stdenv.isLinux [ patchelf ];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
@@ -49,6 +56,14 @@ in stdenv.mkDerivation {
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
# Manually patch the interpreter for bun standalone binaries
|
||||
# patchelf --set-interpreter modifies in-place without rewriting the entire ELF,
|
||||
# preserving the appended JS bundle that bun needs at runtime
|
||||
postFixup = lib.optionalString stdenv.isLinux ''
|
||||
interpreter="${glibc}/lib/${if stdenv.hostPlatform.system == "aarch64-linux" then "ld-linux-aarch64.so.1" else "ld-linux-x86-64.so.2"}"
|
||||
patchelf --set-interpreter "$interpreter" $out/bin/claude
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Terminal-based AI coding assistant from Anthropic";
|
||||
homepage = "https://www.anthropic.com/claude-code";
|
||||
|
||||
Reference in New Issue
Block a user