λ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ λ

✧ Guix Home ✧

Ludovic Courtès et al.
λ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ λ

Architecture

The user profile is declarative: a single home.scm is the source of truth, and guix home reconfigure applies it. Reproducing the same profile on another POWER9 host is one file plus a channel-pinned guix describe snapshot. Three concerns live in the same file:

  1. Package profile — everything user-visible under ~/.guix-home/profile.
  2. Shell configuration — Bash aliases, environment variables, profile scripts via home-bash-service-type.
  3. Dotfiles~/.fbtermrc and ~/.gitconfig deployed via home-files-service-type.

Two package managers cohabit the Emacs side, with non-overlapping scope: Guix Home installs emacs-no-x and every Emacs package available in the Guix channel; straight.el installs the Drew Adams ecosystem from emacsmirror — see the Emacs page and the Drew Adams page for the split rationale.

Package inventory

What ships, in shape:

Emacs core

PackagePurpose
emacs-no-xTerminal-only Emacs (no X11 deps)
emacs-straightstraight.el for the Drew Adams overlay
emacs-eatIn-Emacs terminal (vterm-ish)

Org & notes

emacs-orgOrg-mode
emacs-denoteFile-naming and note-linking
emacs-org-qlQuery language for org headings

Git

gitGit CLI
emacs-magitGit porcelain for Emacs
emacs-git-auto-commit-modeAuto-commit on save for the config repo

LLM

emacs-gptelLLM chat / tool interface
emacs-llm-tool-collectionBundled gptel tool functions

Browser / fediverse

emacs-elpherGemini / Gopher
emacs-mastodonMastodon client

Scheme REPL

emacs-geiserScheme interaction mode
emacs-geiser-guileGuile backend for Geiser

Editing & completion

emacs-pareditStructural editing for lisps
emacs-corfu + emacs-corfu-terminalPopup completion at point (terminal-aware)
emacs-verticoVertical minibuffer completion
emacs-orderlessFlexible matching style
emacs-marginaliaAnnotations in minibuffer margins
emacs-consultNavigation commands (consult-ripgrep, consult-org-heading)
emacs-avyJump to visible text by char
emacs-ace-windowFast window switching by number
emacs-expand-regionSemantic region expansion
emacs-wgrepEditable grep buffers
emacs-vundoVisual undo tree
emacs-envrcBuffer-local direnv / guix shell
emacs-jinxSpellchecker

File modes

emacs-markdown-modeMarkdown syntax
emacs-yaml-modeYAML syntax

Input methods

emacs-ddskkJapanese SKK
emacs-pyim + emacs-pyim-basedictMandarin pinyin (extra dicts come from ~/src — see the Talos page)

Math & statistics

r-minimalR interpreter
emacs-ess-ppc64leESS, custom build for ppc64le (see below)
maximaComputer algebra system

System & CLI utilities

sdcvStarDict console dictionary
glibc-localesUTF-8 locale data
curlHTTP client
libheifHEIF / HEIC image codec
tmuxTerminal multiplexer
fbtermFramebuffer terminal (Unicode console)
rsyncFile sync
physlockConsole screen lock

Fonts

font-dejavuLatin coverage
font-google-notoPan-script fallback
font-google-noto-sans-cjkCJK sans (JP, SC, etc.)
font-google-noto-serif-cjkCJK serif
font-google-noto-emojiEmoji glyphs

Custom package: emacs-ess-ppc64le

r-roxygen2 fails to build on ppc64le, so the stock emacs-ess can't land on the Talos. The fix is a derived package that strips r-roxygen2 from native inputs and removes the architecture whitelist:

(define emacs-ess-ppc64le
  (package
    (inherit emacs-ess)
    (supported-systems %supported-systems)
    (native-inputs (modify-inputs
                    (package-native-inputs emacs-ess)
                    (delete "r-roxygen2")))))

This is the cleanest possible Guix recipe shape for "the upstream package, minus one input that doesn't build here." It is also the only custom package definition in home.scm — every other package comes straight from the channel.

Shell & dotfiles

The home-bash-service-type service ships the bash configuration: aliases (ls --color=auto), a profile script that exports TERM=fbterm so terminfo picks the framebuffer terminal entry, and environment variables for TLS certificates, GPG TTY routing, and library / package-config paths.

The home-files-service-type service deploys two dotfiles directly:

Reproduction

To apply this configuration on another POWER9 host:

guix home reconfigure ~/.emacs.d/docs/guix.scm

To capture the exact channel state for full reproducibility:

guix describe

Two artifacts together — the home.scm and the guix describe snapshot — describe the entire user profile to the byte.