diff --git a/docs/sourceos-shell-integration.md b/docs/sourceos-shell-integration.md index b0be40a..9f365a9 100644 --- a/docs/sourceos-shell-integration.md +++ b/docs/sourceos-shell-integration.md @@ -11,6 +11,7 @@ This repository, `source-os`, carries the Linux realization surfaces required to - Nix/NixOS modules - profile wiring - machine-level integration hooks +- derive-service runtime integration such as `docd` ## What does not belong here diff --git a/docs/sourceos-shell-launcher-bridge.md b/docs/sourceos-shell-launcher-bridge.md new file mode 100644 index 0000000..c54baf9 --- /dev/null +++ b/docs/sourceos-shell-launcher-bridge.md @@ -0,0 +1,19 @@ +# sourceos-shell launcher bridge note + +During the early shell rollout, launcher integration is tracked as temporary bridge work. + +## Routing rule + +Queries are routed by scope: + +- `apps` -> launcher or desktop-entry provider +- `files` -> Linux-native file search only +- `web` -> browser or web agent + +## Required invariant + +For `files` queries, Albert must not perform a second file-search pass in parallel with the Linux-native provider. + +## Lifecycle + +This bridge exists only until the shell's own command/search surface fully absorbs the routing behavior. diff --git a/flake.nix b/flake.nix index 507321e..0d41c44 100644 --- a/flake.nix +++ b/flake.nix @@ -65,6 +65,8 @@ else pkgs.runCommand "stable-x86_64-smoke-skip" {} '' mkdir -p $out ''; + + sourceos-shell-module-contract = import ./tests/sourceos-shell-module-contract.nix { inherit pkgs; }; }); sourceos = { diff --git a/linux/systemd/sourceos-docd.service b/linux/systemd/sourceos-docd.service new file mode 100644 index 0000000..b34e30c --- /dev/null +++ b/linux/systemd/sourceos-docd.service @@ -0,0 +1,13 @@ +[Unit] +Description=SourceOS docd derive service +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +ExecStart=/opt/sourceos-shell/bin/sourceos-docd +Restart=on-failure +RestartSec=2s + +[Install] +WantedBy=multi-user.target diff --git a/modules/nixos/sourceos-shell/default.nix b/modules/nixos/sourceos-shell/default.nix index 7ae9e9a..08de019 100644 --- a/modules/nixos/sourceos-shell/default.nix +++ b/modules/nixos/sourceos-shell/default.nix @@ -73,5 +73,14 @@ in ExecStart = "${pkgs.coreutils}/bin/echo sourceos-pdf-secure placeholder port=${toString cfg.pdfSecurePort}"; }; }; + + systemd.services.sourceos-docd = { + description = "SourceOS shell docd scaffold"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "simple"; + ExecStart = "${pkgs.coreutils}/bin/echo sourceos-docd placeholder port=${toString cfg.docdPort}"; + }; + }; }; } diff --git a/profiles/linux-dev/default.nix b/profiles/linux-dev/default.nix index f2ef598..678d171 100644 --- a/profiles/linux-dev/default.nix +++ b/profiles/linux-dev/default.nix @@ -2,6 +2,7 @@ { imports = [ ../../modules/build/default.nix + ../../profiles/linux-dev/sourceos-shell.nix ]; sourceos.build = { diff --git a/tests/sourceos-shell-module-contract.nix b/tests/sourceos-shell-module-contract.nix new file mode 100644 index 0000000..8126ea8 --- /dev/null +++ b/tests/sourceos-shell-module-contract.nix @@ -0,0 +1,17 @@ +{ pkgs ? import {} }: +pkgs.runCommand "sourceos-shell-module-contract" { + nativeBuildInputs = [ pkgs.gnugrep ]; +} '' + test -f ${../modules/nixos/sourceos-shell/default.nix} + test -f ${../profiles/linux-dev/sourceos-shell.nix} + test -f ${../linux/desktop/sourceos-shell.desktop} + test -f ${../linux/systemd/sourceos-shell.service} + test -f ${../linux/systemd/sourceos-router.service} + test -f ${../linux/systemd/sourceos-pdf-secure.service} + test -f ${../linux/systemd/sourceos-docd.service} + grep -q '../../modules/nixos/sourceos-shell/default.nix' ${../profiles/linux-dev/sourceos-shell.nix} + grep -q 'sourceos.shell' ${../modules/nixos/sourceos-shell/default.nix} + grep -q 'sourceos-docd' ${../modules/nixos/sourceos-shell/default.nix} + mkdir -p $out + echo validated > $out/result.txt +''