Jakub Czajka [Tue, 7 Jul 2026 15:11:14 +0000 (17:11 +0200)]
[style] Separate then from if in shell scripts.
Move 'then' to its own line after 'if' for readability. Also
converts the remaining extended regex patterns in guix-check to basic
regex, and fixes a comment case in notify.
Jakub Czajka [Tue, 7 Jul 2026 16:13:40 +0000 (18:13 +0200)]
[home] Add paseo CLI package and services.
The paseo daemon spawns Claude Code agents, so CLAUDE_CONFIG_DIR is
set in the daemon environment to point to ~/.config/claude/, where the
home claude service installs its configuration. This ensures spawned
agents find their config without relying on shell init files.
Jakub Czajka [Mon, 6 Jul 2026 10:23:44 +0000 (12:23 +0200)]
[ai] Replace guard-commands with block-builds, block-worktrees, and create-worktree hooks.
Splits the monolithic guard-commands hook into three single-purpose
hooks with more granular matchers in settings.json.
block-builds:
Guards guix and make build/reconfigure commands. Asks on main,
denies in worktrees for destructive operations (reconfigure,
home-*, system-*).
block-worktrees:
Denies git checkout/switch outright. Enforces EnterWorktree
(must not already be in a worktree) and ExitWorktree (must not
have unpushed commits diverging from main). Sends a desktop
notification on EnterWorktree success.
create-worktree:
Uses a universal matcher ("*") to deny all tool calls on main
unless already inside the session's worktree. Allows
EnterWorktree through to let the user enter an isolated session.
Jakub Czajka [Mon, 6 Jul 2026 09:43:07 +0000 (11:43 +0200)]
[ai] Move ask-build-queue from hooks/ to scripts/.
Relocates the build-queue dialog from the hooks directory to the
scripts directory, reflecting its role as a manually-invoked helper
rather than an automatic hook. Also adds branch-awareness: the
script now asks about builds on non-main branches and reconfigures
on main.
Jakub Czajka [Mon, 6 Jul 2026 09:24:17 +0000 (11:24 +0200)]
[ai] Add merge-worktree workflow: branch-summary, merge script, and skill doc.
Introduces a workflow for merging feature branches into main via
rebase + fast-forward merge. The skill document teaches Claude
the merge-worktree procedure so it can be invoked as a slash command.
Jakub Czajka [Mon, 6 Jul 2026 08:37:59 +0000 (10:37 +0200)]
[ai] Add status-line hook showing worktree session in prompt.
Displays the current worktree session ID or branch name in the
Claude Code status line, making it visible at a glance whether
the session is running in an isolated worktree or on main.
Jakub Czajka [Tue, 23 Jun 2026 20:49:10 +0000 (22:49 +0200)]
[ai] Extract build-queue dialog to standalone ask-build-queue script.
Move the AskUserQuestion dialog out of the guix-build Stop hook into
a separate script so it can be invoked proactively (before code changes
begin) rather than only at Stop time.
- ask-build-queue: new script with the build-target selection dialog.
Exits early if a queue file already exists for the session.
- guix-build: simplified to use $CLAUDE_CODE_SESSION_ID directly
instead of JSON parsing. Delegates the no-queue case to
ask-build-queue.
- CLAUDE.md: instructs to run ask-build-queue before any prompt that
looks like it will modify code.
Jakub Czajka [Mon, 22 Jun 2026 08:56:24 +0000 (10:56 +0200)]
[home] Use guix repl as the Geiser Guile REPL backend.
Set geiser-guile-binary to ("guix" "repl") so the Geiser REPL
starts inside the Guix execution environment, giving it access to all
Guix-installed Guile libraries.
Jakub Czajka [Sun, 21 Jun 2026 13:43:30 +0000 (15:43 +0200)]
[home] Add desktop notification hooks for Claude Code.
Send dunstify notifications on permission_prompt and idle_prompt
events via a shell script alongside the existing guix-check hook.
Uses a single Notification matcher entry in project settings.json
referenced via CLAUDE_PROJECT_DIR.
Jakub Czajka [Sat, 20 Jun 2026 22:39:24 +0000 (00:39 +0200)]
[home] Introduce Claude Code settings.json installed via Guix home.
- Add claude/.config/claude/settings.json with model overrides, max
- effort and apiKeyHelper wired to pass.
- Add conf/home/claude.scm service module bundling the claude-code
package with its dotfile.
- Wire claude-service into home.scm, replacing the raw claude-code
package.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Jakub Czajka [Sat, 20 Jun 2026 22:38:14 +0000 (00:38 +0200)]
[emacs] Add geiser-guile and flymake-guile for Scheme editing.
Configure geiser-guile and flymake-guile in conf-lisp.el, gated on the
guile binary being present for portability. Document the Lisp/Scheme
ecosystem and the environment variables set in .dir-locals.el.
Update .dir-locals.el copyright year to 2026.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Jakub Czajka [Sat, 20 Jun 2026 21:44:28 +0000 (23:44 +0200)]
[home] Fix duplicate service type conflict in home reconfigure.
home-symlink-service-type was named 'home-profile', colliding with
the built-in home-profile-service-type. Additionally, both
profile-service (bash.scm) and channels-service (guix.scm) directly
instantiated home-symlink-service-type — but Guix allows only one
direct (service <type> ...) per service type across the entire service
graph.
Changes:
- symlink.scm: Rename service type from 'home-profile' to
'home-symlink', reflecting its actual purpose.
- bash.scm: Route profile-service through home-program-service-type
(which extends home-symlink-service-type via service-extension)
instead of directly instantiating it. Remove unused
(conf home symlink) import.
- guix.scm: Same for channels-service. Switch import from
(conf home symlink) to (conf home program).
Service extensions can be merged by Guix; direct instantiations
cannot, hence the "more than one target service" error.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Jakub Czajka [Sat, 20 Jun 2026 21:40:24 +0000 (23:40 +0200)]
[home] Install Claude Code.
Introduce a Guix package for the upstream Claude Code binary. The
binary is prebuilt for FHS systems, so wrap it in a shell script that
sets LD_LIBRARY_PATH to Guix store paths and invokes it via ld-linux.
Set CLAUDE_CONFIG_DIR to store its configuration under ~/.config/claude
instead of ~/.claude. Document manual version-update instructions in
the README.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Jakub Czajka [Sat, 20 Jun 2026 20:58:16 +0000 (22:58 +0200)]
[emacs] Set Guile environment variables in dir-locals.
.dir-locals.el now sets GUILE_LOAD_PATH and GUILE_LOAD_COMPILED_PATH
so that Emacs can compile Guile files with guild compile. TAGS file is
no longer necessary as geiser provides references.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Jakub Czajka [Sun, 12 May 2024 10:54:23 +0000 (12:54 +0200)]
[system] Explicly disable Wayland.
Accordion to documentation, `(wayland? #f)` is the default
setting. However, Guix installed Xwayland which broke the
system. By disabling Wayland explicitly Guix returned to Xorg.
Jakub Czajka [Sat, 24 Dec 2022 12:31:41 +0000 (13:31 +0100)]
[home] Install custom st.
This commit installs custom version of the st terminal. It includes
the libxft-bgra patche and more. The source code is obtained from a
self-hosted git instance.
Jakub Czajka [Fri, 23 Dec 2022 19:57:37 +0000 (20:57 +0100)]
[common] Package libxft with the bgra patch.
Libxft has a bug which crashes the library when displaying colorful
emojis. A patch is available online. This commit packages libxft with
the patch applied.
Jakub Czajka [Fri, 23 Dec 2022 19:47:12 +0000 (20:47 +0100)]
[common] Install programs from local source code.
Guix downloads programs and source code from the internet. However, if
we want to install custom versions of these programs, we need to
compile them manually from local source code. This commit adds helper
functions for working with such programs.
Jakub Czajka [Fri, 23 Dec 2022 18:01:17 +0000 (19:01 +0100)]
[emacs] Extend the default minibuffer.
Minibuffer is a special window for selecting from a set of
values (e.g. a file to open). This commit extends the default emacs
minibuffer with orderless (narrowing the set of values) and
vertico (live preview of the set of values).
Jakub Czajka [Fri, 23 Dec 2022 17:40:24 +0000 (18:40 +0100)]
[emacs] Simplify entering long keybindings.
Emacs has a lot of built-in keybindings and users can define
more. They can be long. This commit installs which-key and
transient which help when entering long keybindings.
Jakub Czajka [Fri, 23 Dec 2022 17:11:27 +0000 (18:11 +0100)]
[emacs] Read documents within emacs.
Emacs has built-in support for reading PDFs. However, pdf-tools is
better than the default PDF reader. This commit installs pdf-tools and
the necessary dependencies.