fix: apply the namespace edits dropped from the task 0031 merge
The task 0031 commit moved the module files but a mis-staged `git add` left the option-path rewrites out, so main declared the old namespaces (`modules.claude-code`, `modules.gitea-axi`, `modules.pi`, `modules.desktop.hyprlock`/`hypridle`) while CONTEXT.md and ADR 0004 already documented the new ones. Rewrite the paths in the moved and in-place modules, the neogaia host, and the two live CLAUDE.md gotchas so the code matches the recorded convention.
This commit is contained in:
@@ -40,7 +40,7 @@ The domain model (Host, Module, Skeleton, Auto-loader, Enable convention, overla
|
|||||||
That is what lets the `nyx-cache.chaotic.cx` binary cache hit instead of compiling the CachyOS kernel from source; the tradeoff is that chaotic packages do not see our `unstable`/`stable` overlays.
|
That is what lets the `nyx-cache.chaotic.cx` binary cache hit instead of compiling the CachyOS kernel from source; the tradeoff is that chaotic packages do not see our `unstable`/`stable` overlays.
|
||||||
- The remote is self-hosted Gitea (`git.alexion.dev`), and the forge CLI is `gitea-axi` rather than `tea`.
|
- The remote is self-hosted Gitea (`git.alexion.dev`), and the forge CLI is `gitea-axi` rather than `tea`.
|
||||||
`gitea-axi` resolves the repository from the `origin` remote and discovers credentials from a `tea` login whose host matches the remote, so both are implicit inside a checkout.
|
`gitea-axi` resolves the repository from the `origin` remote and discovers credentials from a `tea` login whose host matches the remote, so both are implicit inside a checkout.
|
||||||
It is installed on `neogaia` by `modules.gitea-axi`, and verified: `gitea-axi` run from this checkout renders the `alexion/dotfiles` dashboard authenticated, so the claude-code `SessionStart` hook that runs it now resolves to a real binary rather than a missing one.
|
It is installed on `neogaia` by `modules.agents.tools.gitea-axi`, and verified: `gitea-axi` run from this checkout renders the `alexion/dotfiles` dashboard authenticated, so the claude-code `SessionStart` hook that runs it now resolves to a real binary rather than a missing one.
|
||||||
The package wraps the binary so `git` and `tea` are reachable without being on `PATH`, while still preferring the operator's own where present.
|
The package wraps the binary so `git` and `tea` are reachable without being on `PATH`, while still preferring the operator's own where present.
|
||||||
Credentials: `~/.config/tea/config.yml` holds a token-bearing login named `alexion`, which `gitea-axi` uses and which also opens pull requests directly with `nix run nixpkgs#tea -- pr create --login alexion --repo alexion/dotfiles --base main --head <branch> ...`.
|
Credentials: `~/.config/tea/config.yml` holds a token-bearing login named `alexion`, which `gitea-axi` uses and which also opens pull requests directly with `nix run nixpkgs#tea -- pr create --login alexion --repo alexion/dotfiles --base main --head <branch> ...`.
|
||||||
The `--repo` flag is required on that path, since `tea` resolves `origin` only for a login whose SSH host matches.
|
The `--repo` flag is required on that path, since `tea` resolves `origin` only for a login whose SSH host matches.
|
||||||
@@ -54,7 +54,7 @@ The domain model (Host, Module, Skeleton, Auto-loader, Enable convention, overla
|
|||||||
On this machine the two are provably distinct: the daemon presents `SHA256:2ysuBX0+Z6GbdCTujz5JHX6rqnJzIyWhYNrxdhhGwEM`, while pushes to `git.alexion.dev` authenticate with `SHA256:nEhHwtHDnLlsuFxyfp+cETgHUZ8xDMxaPVmYM5vuCkA`.
|
On this machine the two are provably distinct: the daemon presents `SHA256:2ysuBX0+Z6GbdCTujz5JHX6rqnJzIyWhYNrxdhhGwEM`, while pushes to `git.alexion.dev` authenticate with `SHA256:nEhHwtHDnLlsuFxyfp+cETgHUZ8xDMxaPVmYM5vuCkA`.
|
||||||
Renaming host keys after user keys, or vice versa, is therefore always wrong.
|
Renaming host keys after user keys, or vice versa, is therefore always wrong.
|
||||||
- `~/.claude/skills` is generated by home-manager with `recursive = true`, so the directories are real and writable but every leaf file is a read-only symlink into the store.
|
- `~/.claude/skills` is generated by home-manager with `recursive = true`, so the directories are real and writable but every leaf file is a read-only symlink into the store.
|
||||||
Editing a skill in place fails; its source is `modules/claude-code/skills/<name>/` here, applied by a rebuild.
|
Editing a skill in place fails; its source is `modules/agents/claude-code/skills/<name>/` here, applied by a rebuild.
|
||||||
Creating a new file under `~/.claude/skills/` succeeds silently and is the trap — it stays outside the repo and reaches no other machine.
|
Creating a new file under `~/.claude/skills/` succeeds silently and is the trap — it stays outside the repo and reaches no other machine.
|
||||||
Copying out of that tree needs `cp -rL` plus `chmod -R u+w`: a plain `cp -r` copies the symlinks, putting store paths into the destination, and dereferenced files keep the store's read-only mode.
|
Copying out of that tree needs `cp -rL` plus `chmod -R u+w`: a plain `cp -r` copies the symlinks, putting store paths into the destination, and dereferenced files keep the store's read-only mode.
|
||||||
- `home-manager.users.<user>.home.file` is keyed by **absolute** path, not by a path relative to the home directory.
|
- `home-manager.users.<user>.home.file` is keyed by **absolute** path, not by a path relative to the home directory.
|
||||||
|
|||||||
@@ -48,9 +48,9 @@
|
|||||||
modules.git.enable = true;
|
modules.git.enable = true;
|
||||||
modules.tmux.enable = true;
|
modules.tmux.enable = true;
|
||||||
modules.nvim.enable = true;
|
modules.nvim.enable = true;
|
||||||
modules.claude-code.enable = true;
|
modules.agents.claude-code.enable = true;
|
||||||
modules.gitea-axi.enable = true;
|
modules.agents.tools.gitea-axi.enable = true;
|
||||||
modules.pi.enable = true;
|
modules.agents.pi.enable = true;
|
||||||
|
|
||||||
modules.desktop.enable = true;
|
modules.desktop.enable = true;
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,11 @@
|
|||||||
# the package and manages ~/.claude. Login credentials are left unmanaged so they
|
# the package and manages ~/.claude. Login credentials are left unmanaged so they
|
||||||
# survive rebuilds.
|
# survive rebuilds.
|
||||||
let
|
let
|
||||||
cfg = config.modules.claude-code;
|
cfg = config.modules.agents.claude-code;
|
||||||
user = config.user.name;
|
user = config.user.name;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.modules.claude-code.enable = lib.mkEnableOption ''
|
options.modules.agents.claude-code.enable = lib.mkEnableOption ''
|
||||||
Claude Code, Anthropic's CLI, configured via home-manager.
|
Claude Code, Anthropic's CLI, configured via home-manager.
|
||||||
|
|
||||||
Enabling this also widens sudo's credential cache, keying it per user rather
|
Enabling this also widens sudo's credential cache, keying it per user rather
|
||||||
|
|||||||
@@ -7,11 +7,11 @@
|
|||||||
# home-manager, which ships the package and manages ~/.pi/agent.
|
# home-manager, which ships the package and manages ~/.pi/agent.
|
||||||
# The login credential is left unmanaged, so it survives rebuilds.
|
# The login credential is left unmanaged, so it survives rebuilds.
|
||||||
let
|
let
|
||||||
cfg = config.modules.pi;
|
cfg = config.modules.agents.pi;
|
||||||
user = config.user.name;
|
user = config.user.name;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.modules.pi.enable = lib.mkEnableOption ''
|
options.modules.agents.pi.enable = lib.mkEnableOption ''
|
||||||
Pi, a terminal coding agent, configured via home-manager'';
|
Pi, a terminal coding agent, configured via home-manager'';
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
|
|||||||
@@ -8,11 +8,11 @@
|
|||||||
# That module also declares the Claude Code context when that harness is
|
# That module also declares the Claude Code context when that harness is
|
||||||
# enabled on the host; enabling this alone installs the CLI and nothing else.
|
# enabled on the host; enabling this alone installs the CLI and nothing else.
|
||||||
let
|
let
|
||||||
cfg = config.modules.gitea-axi;
|
cfg = config.modules.agents.tools.gitea-axi;
|
||||||
user = config.user.name;
|
user = config.user.name;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.modules.gitea-axi.enable =
|
options.modules.agents.tools.gitea-axi.enable =
|
||||||
lib.mkEnableOption "gitea-axi, an agent-ergonomic CLI for Gitea issues and pull requests";
|
lib.mkEnableOption "gitea-axi, an agent-ergonomic CLI for Gitea issues and pull requests";
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ in
|
|||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
modules.desktop.clipboard.enable = lib.mkDefault true;
|
modules.desktop.clipboard.enable = lib.mkDefault true;
|
||||||
modules.desktop.hyprland.enable = lib.mkDefault true;
|
modules.desktop.hyprland.enable = lib.mkDefault true;
|
||||||
modules.desktop.hyprlock.enable = lib.mkDefault true;
|
modules.desktop.hyprland.hyprlock.enable = lib.mkDefault true;
|
||||||
modules.desktop.hypridle.enable = lib.mkDefault true;
|
modules.desktop.hyprland.hypridle.enable = lib.mkDefault true;
|
||||||
modules.desktop.login.enable = lib.mkDefault true;
|
modules.desktop.login.enable = lib.mkDefault true;
|
||||||
modules.desktop.mako.enable = lib.mkDefault true;
|
modules.desktop.mako.enable = lib.mkDefault true;
|
||||||
modules.desktop.portals.enable = lib.mkDefault true;
|
modules.desktop.portals.enable = lib.mkDefault true;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
# Idle management: hypridle locks on idle, powers the displays off, and locks
|
# Idle management: hypridle locks on idle, powers the displays off, and locks
|
||||||
# before every suspend, so an unattended session always lands at hyprlock.
|
# before every suspend, so an unattended session always lands at hyprlock.
|
||||||
let
|
let
|
||||||
cfg = config.modules.desktop.hypridle;
|
cfg = config.modules.desktop.hyprland.hypridle;
|
||||||
user = config.user.name;
|
user = config.user.name;
|
||||||
|
|
||||||
hyprctl = "${config.programs.hyprland.package}/bin/hyprctl";
|
hyprctl = "${config.programs.hyprland.package}/bin/hyprctl";
|
||||||
@@ -18,7 +18,7 @@ let
|
|||||||
lockCmd = "${pkgs.procps}/bin/pidof hyprlock || ${hyprlock}";
|
lockCmd = "${pkgs.procps}/bin/pidof hyprlock || ${hyprlock}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.modules.desktop.hypridle = {
|
options.modules.desktop.hyprland.hypridle = {
|
||||||
enable = lib.mkEnableOption "hypridle idle management";
|
enable = lib.mkEnableOption "hypridle idle management";
|
||||||
|
|
||||||
lockTimeout = lib.mkOption {
|
lockTimeout = lib.mkOption {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
}:
|
}:
|
||||||
# The lock screen: hyprlock, a session-lock client whose surface the compositor owns, so it survives a crash of the locker rather than exposing the session.
|
# The lock screen: hyprlock, a session-lock client whose surface the compositor owns, so it survives a crash of the locker rather than exposing the session.
|
||||||
let
|
let
|
||||||
cfg = config.modules.desktop.hyprlock;
|
cfg = config.modules.desktop.hyprland.hyprlock;
|
||||||
user = config.user.name;
|
user = config.user.name;
|
||||||
|
|
||||||
# The hyprlock this module installs, so the keybind and the idle daemon lock
|
# The hyprlock this module installs, so the keybind and the idle daemon lock
|
||||||
@@ -14,7 +14,7 @@ let
|
|||||||
hyprlock = "${config.home-manager.users.${user}.programs.hyprlock.package}/bin/hyprlock";
|
hyprlock = "${config.home-manager.users.${user}.programs.hyprlock.package}/bin/hyprlock";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.modules.desktop.hyprlock.enable = lib.mkEnableOption "the hyprlock lock screen";
|
options.modules.desktop.hyprland.hyprlock.enable = lib.mkEnableOption "the hyprlock lock screen";
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
home-manager.users.${user} = {
|
home-manager.users.${user} = {
|
||||||
|
|||||||
Reference in New Issue
Block a user