Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| be3c27e868 | |||
| c2d286087f | |||
| 1172818062 | |||
| 9f63e1430c | |||
| b14ef1f62a | |||
| 87719fa9e6 | |||
| 933612da4c | |||
| d2c7599267 | |||
| 3d16824eac | |||
| 2cdc15163c | |||
| a77b1230fe | |||
| 623a387127 | |||
| 737f2b09e4 | |||
| cddc9de14a | |||
| 53e3bbe78f | |||
| c258eafe34 | |||
| 03d0b76f97 | |||
| b5f7233214 | |||
| 1203662237 |
+4
-2
@@ -6,7 +6,7 @@
|
|||||||
# Issue prefix for this repository (used by bd init)
|
# Issue prefix for this repository (used by bd init)
|
||||||
# If not set, bd init will auto-detect from directory name
|
# If not set, bd init will auto-detect from directory name
|
||||||
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
|
# 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
|
# 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
|
# When true, bd will use .beads/issues.jsonl as the source of truth
|
||||||
@@ -59,4 +59,6 @@ sync-branch: "beads-sync"
|
|||||||
# - linear.url
|
# - linear.url
|
||||||
# - linear.api-key
|
# - linear.api-key
|
||||||
# - github.org
|
# - github.org
|
||||||
# - github.repo
|
# - github.repo
|
||||||
|
|
||||||
|
routing.mode: "explicit"
|
||||||
@@ -12,7 +12,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- 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
|
- name: Check flake
|
||||||
run: nix flake check
|
run: nix flake check
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
result
|
result
|
||||||
thoughts
|
thoughts
|
||||||
.beads
|
.beads
|
||||||
|
|
||||||
|
# Gas Town (added by gt)
|
||||||
|
.runtime/
|
||||||
|
.claude/
|
||||||
|
.logs/
|
||||||
|
|||||||
Generated
+18
-18
@@ -8,17 +8,17 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768509852,
|
"lastModified": 1769204611,
|
||||||
"narHash": "sha256-4oZXrqBjK9V8qKHoxlfil20qcJdOU8HXJA4627nX1nQ=",
|
"narHash": "sha256-OcrHcO/TD4x5T7n1N1q8LgxA5Wb2cOaSsbj7HFzn6RA=",
|
||||||
"owner": "steveyegge",
|
"ref": "refs/heads/main",
|
||||||
"repo": "beads",
|
"rev": "a45b441bc57e65380e44cab1f4a43f8033aa26dd",
|
||||||
"rev": "d3db8253ff09e0f139ffbb6f839afe13acbf7bdb",
|
"revCount": 5462,
|
||||||
"type": "github"
|
"type": "git",
|
||||||
|
"url": "ssh://git@git.johnogle.info:2222/johno/beads.git"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "steveyegge",
|
"type": "git",
|
||||||
"repo": "beads",
|
"url": "ssh://git@git.johnogle.info:2222/johno/beads.git"
|
||||||
"type": "github"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"doomemacs": {
|
"doomemacs": {
|
||||||
@@ -81,17 +81,17 @@
|
|||||||
"gastown": {
|
"gastown": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768682809,
|
"lastModified": 1769299227,
|
||||||
"narHash": "sha256-PCP5PQasLqL5/OVNw6LsjiFfIU4RNniicTUcVq2ggHg=",
|
"narHash": "sha256-O3PhoS1ncKbUENnwZqpNvnVlSX2FGJO8GyWVNWz3cVM=",
|
||||||
"owner": "steveyegge",
|
"ref": "refs/heads/main",
|
||||||
"repo": "gastown",
|
"rev": "62fb0243b50b735efa632d992133ce4ef3c55477",
|
||||||
"rev": "9cd2696abe68ac0defc612ace5028d327d4f207d",
|
"revCount": 3026,
|
||||||
"type": "github"
|
"type": "git",
|
||||||
|
"url": "ssh://git@git.johnogle.info:2222/johno/gastown.git"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "steveyegge",
|
"type": "git",
|
||||||
"repo": "gastown",
|
"url": "ssh://git@git.johnogle.info:2222/johno/gastown.git"
|
||||||
"type": "github"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"google-cookie-retrieval": {
|
"google-cookie-retrieval": {
|
||||||
|
|||||||
@@ -43,12 +43,12 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
beads = {
|
beads = {
|
||||||
url = "github:steveyegge/beads";
|
url = "git+ssh://git@git.johnogle.info:2222/johno/beads.git";
|
||||||
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
};
|
};
|
||||||
|
|
||||||
gastown = {
|
gastown = {
|
||||||
url = "github:steveyegge/gastown";
|
url = "git+ssh://git@git.johnogle.info:2222/johno/gastown.git";
|
||||||
flake = false; # No flake.nix upstream yet
|
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 = [
|
nixosModules = [
|
||||||
./roles
|
./roles
|
||||||
inputs.home-manager.nixosModules.home-manager
|
inputs.home-manager.nixosModules.home-manager
|
||||||
{
|
{
|
||||||
nixpkgs.overlays = [ (mkBaseOverlay {}) ];
|
nixpkgs.overlays = [ (mkBaseOverlay { unstableOverlays = customUnstableOverlays; }) ];
|
||||||
}
|
}
|
||||||
(mkHomeManagerConfig {
|
(mkHomeManagerConfig {
|
||||||
sharedModules = [ inputs.plasma-manager.homeModules.plasma-manager ];
|
sharedModules = [ inputs.plasma-manager.homeModules.plasma-manager ];
|
||||||
@@ -106,7 +115,7 @@
|
|||||||
inputs.home-manager-unstable.nixosModules.home-manager
|
inputs.home-manager-unstable.nixosModules.home-manager
|
||||||
inputs.jovian.nixosModules.jovian
|
inputs.jovian.nixosModules.jovian
|
||||||
{
|
{
|
||||||
nixpkgs.overlays = [ (mkBaseOverlay {}) ];
|
nixpkgs.overlays = [ (mkBaseOverlay { unstableOverlays = customUnstableOverlays; }) ];
|
||||||
}
|
}
|
||||||
(mkHomeManagerConfig {
|
(mkHomeManagerConfig {
|
||||||
sharedModules = [ inputs.plasma-manager-unstable.homeModules.plasma-manager ];
|
sharedModules = [ inputs.plasma-manager-unstable.homeModules.plasma-manager ];
|
||||||
@@ -117,17 +126,7 @@
|
|||||||
./roles/darwin.nix
|
./roles/darwin.nix
|
||||||
inputs.home-manager.darwinModules.home-manager
|
inputs.home-manager.darwinModules.home-manager
|
||||||
{
|
{
|
||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [ (mkBaseOverlay { unstableOverlays = customUnstableOverlays; }) ];
|
||||||
(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 {};
|
|
||||||
})
|
|
||||||
];
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
(mkHomeManagerConfig { sharedModules = []; })
|
(mkHomeManagerConfig { sharedModules = []; })
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ in
|
|||||||
pkgs.unstable.claude-code
|
pkgs.unstable.claude-code
|
||||||
pkgs.unstable.claude-code-router
|
pkgs.unstable.claude-code-router
|
||||||
pkgs.unstable.codex
|
pkgs.unstable.codex
|
||||||
|
pkgs.sqlite
|
||||||
|
|
||||||
# Custom packages
|
# Custom packages
|
||||||
pkgs.custom.tea-rbw
|
pkgs.custom.tea-rbw
|
||||||
@@ -85,12 +86,14 @@ in
|
|||||||
if [ -f "$file" ]; then
|
if [ -f "$file" ]; then
|
||||||
filename=$(basename "$file" .md)
|
filename=$(basename "$file" .md)
|
||||||
dest="$HOME/.claude/commands/humanlayer:''${filename}.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
|
# Copy file and conditionally remove the "model:" line from frontmatter
|
||||||
${if cfg.allowArbitraryClaudeCodeModelSelection
|
${if cfg.allowArbitraryClaudeCodeModelSelection
|
||||||
then "cp \"$file\" \"$dest\""
|
then "cp \"$file\" \"$dest\""
|
||||||
else "${pkgs.gnused}/bin/sed '/^model:/d' \"$file\" > \"$dest\""
|
else "${pkgs.gnused}/bin/sed '/^model:/d' \"$file\" > \"$dest\""
|
||||||
}
|
}
|
||||||
|
chmod u+w "$dest" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -99,12 +102,14 @@ in
|
|||||||
if [ -f "$file" ]; then
|
if [ -f "$file" ]; then
|
||||||
filename=$(basename "$file" .md)
|
filename=$(basename "$file" .md)
|
||||||
dest="$HOME/.claude/agents/humanlayer:''${filename}.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
|
# Copy file and conditionally remove the "model:" line from frontmatter
|
||||||
${if cfg.allowArbitraryClaudeCodeModelSelection
|
${if cfg.allowArbitraryClaudeCodeModelSelection
|
||||||
then "cp \"$file\" \"$dest\""
|
then "cp \"$file\" \"$dest\""
|
||||||
else "${pkgs.gnused}/bin/sed '/^model:/d' \"$file\" > \"$dest\""
|
else "${pkgs.gnused}/bin/sed '/^model:/d' \"$file\" > \"$dest\""
|
||||||
}
|
}
|
||||||
|
chmod u+w "$dest" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -119,6 +124,7 @@ in
|
|||||||
sleep 0.5
|
sleep 0.5
|
||||||
cp "$file" "$dest" || echo "Warning: Failed to copy $filename.md to commands"
|
cp "$file" "$dest" || echo "Warning: Failed to copy $filename.md to commands"
|
||||||
fi
|
fi
|
||||||
|
chmod u+w "$dest" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -133,13 +139,17 @@ in
|
|||||||
sleep 0.5
|
sleep 0.5
|
||||||
cp "$file" "$dest" || echo "Warning: Failed to copy $filename.md to skills"
|
cp "$file" "$dest" || echo "Warning: Failed to copy $filename.md to skills"
|
||||||
fi
|
fi
|
||||||
|
chmod u+w "$dest" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Copy micro-skills (compact reusable knowledge referenced by formulas)
|
# Copy micro-skills (compact reusable knowledge referenced by formulas)
|
||||||
for file in ${./skills/micro}/*.md; do
|
for file in ${./skills/micro}/*.md; do
|
||||||
if [ -f "$file" ]; then
|
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
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -147,7 +157,10 @@ in
|
|||||||
mkdir -p ~/.beads/formulas
|
mkdir -p ~/.beads/formulas
|
||||||
for file in ${./formulas}/*.formula.toml; do
|
for file in ${./formulas}/*.formula.toml; do
|
||||||
if [ -f "$file" ]; then
|
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
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
@@ -83,15 +83,62 @@
|
|||||||
"d" #'org-agenda-day-view
|
"d" #'org-agenda-day-view
|
||||||
"w" #'org-agenda-week-view))
|
"w" #'org-agenda-week-view))
|
||||||
|
|
||||||
;; (use-package! org-caldav
|
;; org-caldav: Sync Org entries with Nextcloud CalDAV
|
||||||
;; :defer t
|
;; Setup requirements:
|
||||||
;; :config
|
;; 1. Create Nextcloud app password: Settings -> Security -> Devices & sessions
|
||||||
;; (setq org-caldav-url "https://nextcloud.johnogle.info/remote.php/dav/calendars/johno"
|
;; 2. Store in rbw: rbw add nextcloud-caldav (username in notes, app password as secret)
|
||||||
;; org-caldav-calendar-id "personal"
|
;; 3. Run: doom sync
|
||||||
;; org-icalendar-timezone "America/Los_Angeles"
|
;; 4. Test: M-x org-caldav-sync
|
||||||
;; org-caldav-inbox "~/org/calendar.org"
|
;;
|
||||||
;; org-caldav-files nil
|
;; Note: Conflict resolution is "Org always wins" - treat Org as source of truth
|
||||||
;; org-caldav-sync-direction 'cal->org))
|
;; 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)
|
(defun my/get-rbw-password (alias)
|
||||||
"Return the password for ALIAS via rbw, unlocking the vault only if needed."
|
"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)
|
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
|
||||||
;; (unpin! t)
|
;; (unpin! t)
|
||||||
|
|
||||||
;; (package! org-caldav)
|
(package! org-caldav)
|
||||||
|
|
||||||
;; Note: Packages with custom recipes must be pinned for nix-doom-emacs-unstraightened
|
;; Note: Packages with custom recipes must be pinned for nix-doom-emacs-unstraightened
|
||||||
;; to build deterministically. Update pins when upgrading packages.
|
;; to build deterministically. Update pins when upgrading packages.
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
{ lib
|
{ lib
|
||||||
, stdenv
|
, stdenv
|
||||||
, fetchurl
|
, fetchurl
|
||||||
, autoPatchelfHook
|
, patchelf
|
||||||
|
, glibc
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@@ -38,8 +39,14 @@ in stdenv.mkDerivation {
|
|||||||
|
|
||||||
dontUnpack = true;
|
dontUnpack = true;
|
||||||
dontBuild = 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 = ''
|
installPhase = ''
|
||||||
runHook preInstall
|
runHook preInstall
|
||||||
@@ -49,6 +56,14 @@ in stdenv.mkDerivation {
|
|||||||
runHook postInstall
|
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; {
|
meta = with lib; {
|
||||||
description = "Terminal-based AI coding assistant from Anthropic";
|
description = "Terminal-based AI coding assistant from Anthropic";
|
||||||
homepage = "https://www.anthropic.com/claude-code";
|
homepage = "https://www.anthropic.com/claude-code";
|
||||||
|
|||||||
Reference in New Issue
Block a user