fix: correct desktop and Evolution activation

This commit is contained in:
kiri committed 2026-09-05 21:29:55 +02:00
1 parent e1ff50a9af
commit cfa5d6dabf
4 files changed
+73 -44

No files matched your search

+28 -17
View File
@@ -9,18 +9,20 @@ and add no abstraction without a demonstrated repeated need.
## Current checkpoint ## Current checkpoint
- Tranche: desktop, agents, and notes - Tranche: desktop, agents, and notes
- State: waiting for Zenith activation - State: waiting for follow-up Zenith activation
- Branch: `chore/workflow-system` - Branch: `chore/workflow-system`
- Baseline: `nix flake check --no-build --quiet` and a no-link Zenith system - Baseline: `nix flake check --no-build --quiet` and a no-link Zenith system
build passed on 2026-09-05 after the desktop, agent, runtime, and note changes; build passed on 2026-09-05 after the live activation follow-ups; only the
only the expected dirty-tree and unknown `modules` warnings were emitted. expected dirty-tree and unknown `modules` warnings were emitted. The
The generated project menu finds 30 live repositories without `.archive` or generated project menu finds 30 live repositories without `.archive` or
`.worktrees` entries, and the generated daily-note configuration passes an `.worktrees` entries, and the generated daily-note configuration passes an
isolated same-day idempotence test. isolated same-day idempotence test. The managed Actual and WhatsApp entries
are active in the current user session and the VPN reconnects successfully.
- Next: the user runs - Next: the user runs
`sudo nixos-rebuild switch --flake /home/kiri/.config/nixos#zenith` and reports `sudo nixos-rebuild switch --flake /home/kiri/.config/nixos#zenith` and reports
whether it succeeds. Then the agent verifies live ownership before asking for whether it succeeds. This persists the corrected PWA ownership and registers
one bounded interactive gate at a time. Evolution's native data-server services. Then the agent verifies the live
services before asking for one bounded interactive gate at a time.
## Progress ## Progress
@@ -29,10 +31,10 @@ and add no abstraction without a demonstrated repeated need.
| Bootstrap and repository ownership | Waiting for user | Repository and dashboard reconciliation complete; credential cleanup remains | | Bootstrap and repository ownership | Waiting for user | Repository and dashboard reconciliation complete; credential cleanup remains |
| Declarative workstation foundation | Complete | All-host builds pass with one Nixpkgs pin, `just`, and an explicit Podman Compose provider | | Declarative workstation foundation | Complete | All-host builds pass with one Nixpkgs pin, `just`, and an explicit Podman Compose provider |
| Repository contracts and workbench | Waiting externally | Three contracts and read-only Kubernetes pass; API deployment/access evidence is externally blocked, while database/report scaffolding is deferred until a real investigation | | Repository contracts and workbench | Waiting externally | Three contracts and read-only Kubernetes pass; API deployment/access evidence is externally blocked, while database/report scaffolding is deferred until a real investigation |
| Desktop navigation and interaction | Active | Project discovery, Niri vocabulary cleanup, and stable Actual/WhatsApp launchers build; activation, Outlook, and two-output checks remain | | Desktop navigation and interaction | Active | Project discovery and Niri cleanup build; stable Actual/WhatsApp launchers are live, while Walker, Outlook, and two-output checks remain |
| Agent workflow | Active | The instruction-only `nixos-maintainer` skill validates and builds; the Herdr pilot remains | | Agent workflow | Active | The instruction-only `nixos-maintainer` skill validates and builds; the Herdr pilot remains |
| Notes | Active | Authored work notes are copied and verified in the single notebook; daily-note configuration builds, while source retirement awaits one activated sanity check | | Notes | Active | Authored work notes are copied and verified in the single notebook; daily-note configuration builds, while source retirement awaits one activated sanity check |
| PIM | Active | Evolution 3.60.2 with its native Microsoft 365 backend builds beside Thunderbird; account and daily-use gates await activation and credentials | | PIM | Active | Native NixOS Evolution 3.60.2 plus Microsoft 365 integration builds beside Thunderbird; service, account, and daily-use gates await activation and credentials |
| Transcription | Pending | Requires a real Fossify recording-transfer pilot before implementation moves from Zenith to Orion | | Transcription | Pending | Requires a real Fossify recording-transfer pilot before implementation moves from Zenith to Orion |
| Conditional retirement and completion | Active | OpenVPN 3, Zed, Helix, Foot, global Node.js, and global Bun are removed declaratively; other removals remain gated separately | | Conditional retirement and completion | Active | OpenVPN 3, Zed, Helix, Foot, global Node.js, and global Bun are removed declaratively; other removals remain gated separately |
@@ -57,9 +59,11 @@ and add no abstraction without a demonstrated repeated need.
None of these block work on independent pilots. Surface the exact applicable None of these block work on independent pilots. Surface the exact applicable
step to the user only when it blocks the current task. step to the user only when it blocks the current task.
- Activate the verified Zenith generation with - Activate the verified follow-up Zenith generation with
`sudo nixos-rebuild switch --flake /home/kiri/.config/nixos#zenith`. The agent `sudo nixos-rebuild switch --flake /home/kiri/.config/nixos#zenith`. The agent
attempted this non-interactively, but `sudo` requires the user's password. attempted this non-interactively, but `sudo` requires the user's password.
The first switch succeeded; this follow-up incorporates fixes found by live
inspection of desktop-file precedence and Evolution's D-Bus registration.
- After activation, open Walker with `Super+Space`, search for a repository, - After activation, open Walker with `Super+Space`, search for a repository,
launch it, exit Neovim, and confirm the same Kitty window leaves a usable launch it, exit Neovim, and confirm the same Kitty window leaves a usable
shell in that repository. Also launch Actual and WhatsApp once from Walker. shell in that repository. Also launch Actual and WhatsApp once from Walker.
@@ -199,8 +203,8 @@ Polaris:
Zenith results are accepted for both workstations; preserve exact deferred Zenith results are accepted for both workstations; preserve exact deferred
Polaris replication steps instead. Polaris replication steps instead.
- OpenVPN 3 is removed from the configuration. A full Zenith system build - OpenVPN 3 is removed from the configuration. A full Zenith system build
passes; the next password-authorized system switch removes it from the live passes, and the first password-authorized switch removed it from the live
generation. generation. NetworkManager reconnected the VPN successfully afterward.
- Walker's native cached Lua menu scans the four identity roots and refreshes - Walker's native cached Lua menu scans the four identity roots and refreshes
when their top level changes. Its default action pipes the selected path to when their top level changes. Its default action pipes the selected path to
one Nix-owned `open-project` command, which starts Neovim in a detached Kitty one Nix-owned `open-project` command, which starts Neovim in a detached Kitty
@@ -213,8 +217,12 @@ Polaris:
existing `Super+A` helper remains until a two-output session can validate its existing `Super+A` helper remains until a two-output session can validate its
bounded name-based replacement. bounded name-based replacement.
- Home Manager now owns the existing Vivaldi launcher filenames for Actual and - Home Manager now owns the existing Vivaldi launcher filenames for Actual and
WhatsApp, so both invoke the current package with the `Default` profile and WhatsApp at the higher-precedence user-data location, so both invoke Vivaldi
stable app ID. Outlook is not installed yet, so no ID was guessed. 8.1.4087.70 with the `Default` profile and stable app ID. Direct activation
replaced both generated files with managed links and retained the originals
as adjacent `.bak` files. The entries use native forced ownership because
Vivaldi may regenerate those exact paths. Outlook is not installed yet, so no
ID was guessed.
- The first `nixos-maintainer` skill is instruction-only, Nix-owned, and passes - The first `nixos-maintainer` skill is instruction-only, Nix-owned, and passes
the skill-creator validator. It encodes repository-specific ownership, the skill-creator validator. It encodes repository-specific ownership,
research, formatting, no-switch, and affected-host validation behavior research, formatting, no-switch, and affected-host validation behavior
@@ -236,9 +244,12 @@ Polaris:
and `/tmp/workflow-work-notes-todo-before.md` until the activated check passes. and `/tmp/workflow-work-notes-todo-before.md` until the activated check passes.
- Evolution 3.60.2 is composed through Nixpkgs with `evolution-ews` 3.60.2, - Evolution 3.60.2 is composed through Nixpkgs with `evolution-ews` 3.60.2,
whose pinned source contains the separate native Microsoft 365 mail, whose pinned source contains the separate native Microsoft 365 mail,
calendar, contacts, recurrence, and OAuth backends. It is installed only as calendar, contacts, recurrence, and OAuth backends. Live inspection caught
a pilot beside Thunderbird; no account is preconfigured and no authority is that overriding `evolutionWithPlugins.plugins` replaced its default Evolution
changed. package, and that a Home Manager package alone did not register the data
server on D-Bus. The pilot now uses NixOS's native `programs.evolution`
integration with the EWS plugin beside Thunderbird; the final build passes,
no account is preconfigured, and no authority is changed.
- Named database connections and a Marimo-to-HTML report remain workbench - Named database connections and a Marimo-to-HTML report remain workbench
evaluation evidence, not scaffolding requirements. Add them only for a real evaluation evidence, not scaffolding requirements. Add them only for a real
cross-system investigation that gives the queries and report durable value. cross-system investigation that gives the queries and report durable value.
+35 -21
View File
@@ -34,6 +34,34 @@
appCommand = id: "${command} --profile-directory=Default --app-id=${id}"; appCommand = id: "${command} --profile-directory=Default --app-id=${id}";
actualId = "ahoihnifhakgijcmjlhbcgehigihinlo"; actualId = "ahoihnifhakgijcmjlhbcgehigihinlo";
whatsappId = "hnpfjngllnobngcgfapefoaidbinmjnm"; whatsappId = "hnpfjngllnobngcgfapefoaidbinmjnm";
actualDesktop = pkgs.makeDesktopItem {
name = "vivaldi-${actualId}-Default";
desktopName = "Actual";
exec = appCommand actualId;
icon = "vivaldi-${actualId}-Default";
extraConfig.StartupWMClass = "crx_${actualId}";
actions = {
Accounts = {
name = "Accounts";
exec = "${appCommand actualId} --app-launch-url-for-shortcuts-menu-item=${config.facts.services.actual.origin}/accounts";
};
"Add-Transaction" = {
name = "Add Transaction";
exec = "${appCommand actualId} --app-launch-url-for-shortcuts-menu-item=${config.facts.services.actual.origin}/transactions/new";
};
Reports = {
name = "Reports";
exec = "${appCommand actualId} --app-launch-url-for-shortcuts-menu-item=${config.facts.services.actual.origin}/reports";
};
};
};
whatsappDesktop = pkgs.makeDesktopItem {
name = "vivaldi-${whatsappId}-Default";
desktopName = "WhatsApp Web";
exec = appCommand whatsappId;
icon = "vivaldi-${whatsappId}-Default";
extraConfig.StartupWMClass = "crx_${whatsappId}";
};
in in
{ {
desktop.commands.browser = [ command ]; desktop.commands.browser = [ command ];
@@ -42,30 +70,16 @@
sessionVariables.BROWSER = command; sessionVariables.BROWSER = command;
}; };
xdg = { xdg = {
desktopEntries = { dataFile = {
"vivaldi-${actualId}-Default" = { "applications/vivaldi-${actualId}-Default.desktop" = {
name = "Actual"; force = true;
exec = appCommand actualId; source = "${actualDesktop}/share/applications/vivaldi-${actualId}-Default.desktop";
icon = "vivaldi-${actualId}-Default";
settings.StartupWMClass = "crx_${actualId}";
actions = {
Accounts.exec = "${appCommand actualId} --app-launch-url-for-shortcuts-menu-item=${config.facts.services.actual.origin}/accounts";
"Add-Transaction" = {
name = "Add Transaction";
exec = "${appCommand actualId} --app-launch-url-for-shortcuts-menu-item=${config.facts.services.actual.origin}/transactions/new";
}; };
Reports.exec = "${appCommand actualId} --app-launch-url-for-shortcuts-menu-item=${config.facts.services.actual.origin}/reports"; "applications/vivaldi-${whatsappId}-Default.desktop" = {
force = true;
source = "${whatsappDesktop}/share/applications/vivaldi-${whatsappId}-Default.desktop";
}; };
}; };
"vivaldi-${whatsappId}-Default" = {
name = "WhatsApp Web";
exec = appCommand whatsappId;
icon = "vivaldi-${whatsappId}-Default";
settings.StartupWMClass = "crx_${whatsappId}";
};
};
mimeApps.defaultApplicationPackages = [ pkgs.vivaldi ]; mimeApps.defaultApplicationPackages = [ pkgs.vivaldi ];
}; };
}; };
+9 -6
View File
@@ -8,6 +8,15 @@ let
homeModules = config.flake.modules.homeManager; homeModules = config.flake.modules.homeManager;
in in
{ {
flake.modules.nixos.evolution =
{ pkgs, ... }:
{
programs.evolution = {
enable = true;
plugins = [ pkgs.evolution-ews ];
};
};
flake.modules.homeManager.email = flake.modules.homeManager.email =
{ {
config, config,
@@ -67,12 +76,6 @@ in
}; };
in in
{ {
home.packages = [
(pkgs.evolutionWithPlugins.override {
plugins = [ pkgs.evolution-ews ];
})
];
programs.thunderbird = { programs.thunderbird = {
enable = true; enable = true;
profiles.${config.home.username} = { profiles.${config.home.username} = {
+1
View File
@@ -13,6 +13,7 @@ in
nixosModules.bluetooth nixosModules.bluetooth
nixosModules.flatpak nixosModules.flatpak
nixosModules.fonts nixosModules.fonts
nixosModules.evolution
nixosModules.network-manager nixosModules.network-manager
nixosModules.nftables-firewall nixosModules.nftables-firewall
nixosModules.niri nixosModules.niri