diff --git a/home-manager/modules/default.nix b/home-manager/modules/default.nix index e8d565204..dbec5caa2 100644 --- a/home-manager/modules/default.nix +++ b/home-manager/modules/default.nix @@ -1,9 +1,6 @@ [ ./bin-shells ./cargo-globals - ./obsidian - ./openclaw - ./paperclip ./local-binaries ./local-scripts ./npm-globals diff --git a/home-manager/modules/obsidian/default.nix b/home-manager/modules/obsidian/default.nix deleted file mode 100644 index 4efd36861..000000000 --- a/home-manager/modules/obsidian/default.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - lib, - pkgs, - inputs, - ... -}: -let - inherit (inputs) host; - - # Obsidian 1.12+ ships its official CLI as the `obsidian` binary - # (https://help.obsidian.md/cli). The CLI subcommands still load the - # full Electron asar, so they need a display server. We wrap the real - # binary in `xvfb-run` so each invocation gets an ephemeral virtual X - # server, letting the CLI run on a headless host. - # - # `pkgs.obsidian` and `pkgs.xvfb-run` are referenced by store path here, - # so they get pulled into the closure automatically without needing to - # appear directly on PATH. Only this shim is exposed as `obsidian`, - # which is exactly what memory-wiki probes for. - obsidianHeadless = pkgs.writeShellScriptBin "obsidian" ( - builtins.readFile ( - pkgs.replaceVars ./obsidian-headless.sh { - xvfbRun = pkgs.xvfb-run; - inherit (pkgs) obsidian; - } - ) - ); -in -# Only enable on kyber (gateway host) — desktops already get pkgs.obsidian -# directly via home-manager/packages/default.nix. -lib.mkIf host.isKyber { - home.packages = [ obsidianHeadless ]; -} diff --git a/home-manager/services/default.nix b/home-manager/services/default.nix index 9fe144f29..e14cd57a0 100644 --- a/home-manager/services/default.nix +++ b/home-manager/services/default.nix @@ -19,6 +19,22 @@ let neversslKeepalive = import ./neverssl-keepalive { inherit pkgs; }; obsidian = import ./obsidian { inherit pkgs inputs; }; ollama = import ./ollama { inherit pkgs inputs; }; + openclaw = import ./openclaw { + inherit + config + lib + pkgs + inputs + ; + }; + paperclip = import ./paperclip { + inherit + config + lib + pkgs + inputs + ; + }; sshAgent = import ./ssh-agent { inherit config lib pkgs; }; @@ -38,6 +54,8 @@ in neversslKeepalive obsidian ollama + openclaw + paperclip sshAgent tmuxSessionLogger ] diff --git a/home-manager/services/obsidian/default.nix b/home-manager/services/obsidian/default.nix index 3433eed63..6add7b55b 100644 --- a/home-manager/services/obsidian/default.nix +++ b/home-manager/services/obsidian/default.nix @@ -7,16 +7,25 @@ let inherit (pkgs) lib; inherit (inputs) host; + # Obsidian 1.12+ ships its official CLI as the `obsidian` binary + # (https://help.obsidian.md/cli). The CLI subcommands still load the + # full Electron asar, so they need a display server. We wrap the real + # binary in `xvfb-run` so each invocation gets an ephemeral virtual X + # server, letting the CLI run on a headless host. obsidianHeadless = pkgs.writeShellScriptBin "obsidian" ( builtins.readFile ( - pkgs.replaceVars ../../modules/obsidian/obsidian-headless.sh { + pkgs.replaceVars ./obsidian-headless.sh { xvfbRun = pkgs.xvfb-run; inherit (pkgs) obsidian; } ) ); in +# Only enable on kyber (gateway host) - desktops already get pkgs.obsidian +# directly via home-manager/packages/default.nix. lib.mkIf host.isKyber { + home.packages = [ obsidianHeadless ]; + systemd.user.services.obsidian = { Unit = { Description = "Obsidian headless daemon (xvfb-run CLI socket)"; diff --git a/home-manager/modules/obsidian/obsidian-headless.sh b/home-manager/services/obsidian/obsidian-headless.sh similarity index 100% rename from home-manager/modules/obsidian/obsidian-headless.sh rename to home-manager/services/obsidian/obsidian-headless.sh diff --git a/home-manager/modules/openclaw/activate.sh b/home-manager/services/openclaw/activate.sh similarity index 100% rename from home-manager/modules/openclaw/activate.sh rename to home-manager/services/openclaw/activate.sh diff --git a/home-manager/modules/openclaw/default.nix b/home-manager/services/openclaw/default.nix similarity index 100% rename from home-manager/modules/openclaw/default.nix rename to home-manager/services/openclaw/default.nix diff --git a/home-manager/modules/paperclip/activate.sh b/home-manager/services/paperclip/activate.sh similarity index 100% rename from home-manager/modules/paperclip/activate.sh rename to home-manager/services/paperclip/activate.sh diff --git a/home-manager/modules/paperclip/default.nix b/home-manager/services/paperclip/default.nix similarity index 100% rename from home-manager/modules/paperclip/default.nix rename to home-manager/services/paperclip/default.nix diff --git a/spec/activate_paperclip_openclaw_spec.sh b/spec/activate_paperclip_openclaw_spec.sh index bc6e4d19e..b5aa92a72 100644 --- a/spec/activate_paperclip_openclaw_spec.sh +++ b/spec/activate_paperclip_openclaw_spec.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash # shellcheck disable=SC2016,SC2329 -Describe 'home-manager/modules/paperclip/activate.sh' -SCRIPT="$PWD/home-manager/modules/paperclip/activate.sh" +Describe 'home-manager/services/paperclip/activate.sh' +SCRIPT="$PWD/home-manager/services/paperclip/activate.sh" It 'uses bash shebang' When run bash -c "head -1 '$SCRIPT'" @@ -25,15 +25,15 @@ The output should include 'chmod 700' End End -Describe 'home-manager/modules/paperclip/default.nix' +Describe 'home-manager/services/paperclip/default.nix' It 'quotes the home directory argument when invoking the helper' -When run cat "$PWD/home-manager/modules/paperclip/default.nix" +When run cat "$PWD/home-manager/services/paperclip/default.nix" The output should include '"${./activate.sh}" "${homeDir}"' End End -Describe 'home-manager/modules/openclaw/activate.sh' -SCRIPT="$PWD/home-manager/modules/openclaw/activate.sh" +Describe 'home-manager/services/openclaw/activate.sh' +SCRIPT="$PWD/home-manager/services/openclaw/activate.sh" It 'uses bash shebang' When run bash -c "head -1 '$SCRIPT'" @@ -56,9 +56,9 @@ The output should include 'chmod 700' End End -Describe 'home-manager/modules/openclaw/default.nix' +Describe 'home-manager/services/openclaw/default.nix' It 'quotes the home directory argument when invoking the helper' -When run cat "$PWD/home-manager/modules/openclaw/default.nix" +When run cat "$PWD/home-manager/services/openclaw/default.nix" The output should include '"${./activate.sh}" "${homeDir}"' End End diff --git a/spec/coverage_spec.sh b/spec/coverage_spec.sh index e06d7f0bb..ac54d69db 100644 --- a/spec/coverage_spec.sh +++ b/spec/coverage_spec.sh @@ -368,9 +368,9 @@ home-manager/modules/local-scripts/notify-local.sh home-manager/modules/local-scripts/pushover-notify.sh home-manager/modules/local-scripts/tmux-bridge.sh home-manager/modules/npm-globals/install-npm-globals.sh -home-manager/modules/obsidian/obsidian-headless.sh -home-manager/modules/openclaw/activate.sh -home-manager/modules/paperclip/activate.sh +home-manager/services/obsidian/obsidian-headless.sh +home-manager/services/openclaw/activate.sh +home-manager/services/paperclip/activate.sh home-manager/modules/tailscale/activate-create-dirs.sh home-manager/modules/tailscale/activate-install-service.sh home-manager/modules/uv-globals/install-uv-globals.sh diff --git a/spec/obsidian_headless_spec.sh b/spec/obsidian_headless_spec.sh index db8251382..6dcc78aea 100644 --- a/spec/obsidian_headless_spec.sh +++ b/spec/obsidian_headless_spec.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash # shellcheck disable=SC2329 -Describe 'home-manager/modules/obsidian/obsidian-headless.sh' -SCRIPT="$PWD/home-manager/modules/obsidian/obsidian-headless.sh" +Describe 'home-manager/services/obsidian/obsidian-headless.sh' +SCRIPT="$PWD/home-manager/services/obsidian/obsidian-headless.sh" Describe 'script properties' It 'uses bash shebang'