From f2090436ef77377f46dba27147c0f5d6c6a8b418 Mon Sep 17 00:00:00 2001 From: Victor Borja Date: Wed, 1 Apr 2026 04:39:46 -0600 Subject: [PATCH] feat(batteries): mutual-provider allows user-to-users provides --- modules/aspects/provides/mutual-provider.nix | 14 ++++++ .../features/user-host-mutual-config.nix | 48 +++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/modules/aspects/provides/mutual-provider.nix b/modules/aspects/provides/mutual-provider.nix index 196b54e..4d64469 100644 --- a/modules/aspects/provides/mutual-provider.nix +++ b/modules/aspects/provides/mutual-provider.nix @@ -37,6 +37,19 @@ let find-mutual = from: to: den.aspects.${from.aspect}._.${to.aspect} or { }; user-to-hosts = user: den.aspects.${user.aspect}._.to-hosts or { }; host-to-users = host: den.aspects.${host.aspect}._.to-users or { }; + user-to-users = user: den.aspects.${user.aspect}._.to-users or { }; + + mutual-user-user = host: user: { + includes = map ( + from: + parametric.fixedTo { inherit host user; } { + includes = [ + (find-mutual from user) + (user-to-users from) + ]; + } + ) (builtins.filter (u: u != user) (builtins.attrValues host.users)); + }; mutual-host-user = { host, user }: @@ -47,6 +60,7 @@ let (find-mutual user host) (host-to-users host) (user-to-hosts user) + (mutual-user-user host user) ]; }; diff --git a/templates/ci/modules/features/user-host-mutual-config.nix b/templates/ci/modules/features/user-host-mutual-config.nix index 3593617..20b3ca4 100644 --- a/templates/ci/modules/features/user-host-mutual-config.nix +++ b/templates/ci/modules/features/user-host-mutual-config.nix @@ -244,5 +244,53 @@ } ); + test-user-provides-to-all-users = denTest ( + { + den, + lib, + igloo, + ... + }: + { + den.ctx.user.includes = [ den._.mutual-provider ]; + + den.hosts.x86_64-linux.igloo.users = { + tux = { }; + alice = { }; + bob = { }; + carl = { }; + }; + + den.aspects.tux.provides.to-users = + { user, ... }: + { + homeManager.programs.vim.enable = true; + }; + + den.aspects.tux.provides.alice = { + homeManager.programs.tmux.enable = true; + }; + + expr = with igloo.home-manager.users; { + tux = tux.programs.vim.enable; + alice = alice.programs.vim.enable; + bob = bob.programs.vim.enable; + carl = carl.programs.vim.enable; + aliceTmux = alice.programs.tmux.enable; + bobTmux = bob.programs.tmux.enable; + }; + + expected = { + tux = false; + alice = true; + bob = true; + carl = true; + aliceTmux = true; + bobTmux = false; + }; + + } + ); + }; }