3 directory_at D '.keymangler'
7 rule my_config_file F Name {
8 exists D { my_config_dir D; file_in D Name F }
11 rule known_account A {
12 exists F { my_config_file F 'accounts'; contains-line F A }
16 exists F { my_config_file F 'keys'; contains-line F K }
20 exists F { my_config_file F 'keys.dead'; contains-line F D }
24 directory_at D '.ssh' {
29 rule keys_file_in {D F} {
30 file_in D 'authorized_keys' {
35 rule keys_file F { exists D { dot_ssh D; keys_file_in D F } }
37 rule key_installed K {
44 rule key_not_installed K {
45 not exists F { keys_file F }
48 rule key_not_installed K {
49 given F { keys_file F } {
54 action sync_account A {
56 forall K { known_key K } { ensure key_installed K }
57 forall D { known_dead D } { ensure key_not_installed D }
62 forall A { known_account A } {
67 action installed_on A {
69 forall K { key_installed K } { print K }
73 action unknown_installed_on A {
75 forall K { key_installed K; not known_key K } { print K }