aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deploy/flake.lock299
-rw-r--r--flake.lock299
-rw-r--r--flakes/flake.lock297
-rw-r--r--flakes/flake.nix1
-rw-r--r--flakes/private/borg_backup/flake.lock36
-rw-r--r--flakes/private/borg_backup/flake.nix321
-rw-r--r--systems/backup-2/base.nix9
-rw-r--r--systems/backup-2/databases/mariadb_replication.nix5
-rw-r--r--systems/backup-2/databases/openldap_replication.nix6
-rw-r--r--systems/backup-2/databases/postgresql_replication.nix12
-rw-r--r--systems/backup-2/databases/redis_replication.nix7
-rw-r--r--systems/backup-2/flake.lock75
-rw-r--r--systems/backup-2/flake.nix2
-rw-r--r--systems/eldiron/base.nix1
-rw-r--r--systems/eldiron/borg_backup.nix242
-rw-r--r--systems/eldiron/flake.lock63
-rw-r--r--systems/eldiron/flake.nix2
17 files changed, 1135 insertions, 542 deletions
diff --git a/deploy/flake.lock b/deploy/flake.lock
index 49e29c8..cac84a9 100644
--- a/deploy/flake.lock
+++ b/deploy/flake.lock
@@ -112,6 +112,22 @@
112 "type": "path" 112 "type": "path"
113 } 113 }
114 }, 114 },
115 "borg-backup": {
116 "inputs": {
117 "environment": "environment",
118 "secrets": "secrets"
119 },
120 "locked": {
121 "lastModified": 1,
122 "narHash": "sha256-6IB+N7TeH+3XyK8nwlEX4LGl3EJJLVoESteotut3OUc=",
123 "path": "../../flakes/private/borg_backup",
124 "type": "path"
125 },
126 "original": {
127 "path": "../../flakes/private/borg_backup",
128 "type": "path"
129 }
130 },
115 "buildslist": { 131 "buildslist": {
116 "flake": false, 132 "flake": false,
117 "locked": { 133 "locked": {
@@ -146,7 +162,7 @@
146 }, 162 },
147 "chatons": { 163 "chatons": {
148 "inputs": { 164 "inputs": {
149 "environment": "environment" 165 "environment": "environment_2"
150 }, 166 },
151 "locked": { 167 "locked": {
152 "lastModified": 1, 168 "lastModified": 1,
@@ -161,7 +177,7 @@
161 }, 177 },
162 "chatons_2": { 178 "chatons_2": {
163 "inputs": { 179 "inputs": {
164 "environment": "environment_17" 180 "environment": "environment_19"
165 }, 181 },
166 "locked": { 182 "locked": {
167 "lastModified": 1, 183 "lastModified": 1,
@@ -674,11 +690,11 @@
674 "locked": { 690 "locked": {
675 "lastModified": 1, 691 "lastModified": 1,
676 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 692 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
677 "path": "../../flakes/private/environment", 693 "path": "../environment",
678 "type": "path" 694 "type": "path"
679 }, 695 },
680 "original": { 696 "original": {
681 "path": "../../flakes/private/environment", 697 "path": "../environment",
682 "type": "path" 698 "type": "path"
683 } 699 }
684 }, 700 },
@@ -698,11 +714,11 @@
698 "locked": { 714 "locked": {
699 "lastModified": 1, 715 "lastModified": 1,
700 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 716 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
701 "path": "../../flakes/private/environment", 717 "path": "../environment",
702 "type": "path" 718 "type": "path"
703 }, 719 },
704 "original": { 720 "original": {
705 "path": "../../flakes/private/environment", 721 "path": "../environment",
706 "type": "path" 722 "type": "path"
707 } 723 }
708 }, 724 },
@@ -710,11 +726,11 @@
710 "locked": { 726 "locked": {
711 "lastModified": 1, 727 "lastModified": 1,
712 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 728 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
713 "path": "../environment", 729 "path": "../../flakes/private/environment",
714 "type": "path" 730 "type": "path"
715 }, 731 },
716 "original": { 732 "original": {
717 "path": "../environment", 733 "path": "../../flakes/private/environment",
718 "type": "path" 734 "type": "path"
719 } 735 }
720 }, 736 },
@@ -734,11 +750,11 @@
734 "locked": { 750 "locked": {
735 "lastModified": 1, 751 "lastModified": 1,
736 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 752 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
737 "path": "../../flakes/private/environment", 753 "path": "../environment",
738 "type": "path" 754 "type": "path"
739 }, 755 },
740 "original": { 756 "original": {
741 "path": "../../flakes/private/environment", 757 "path": "../environment",
742 "type": "path" 758 "type": "path"
743 } 759 }
744 }, 760 },
@@ -758,11 +774,11 @@
758 "locked": { 774 "locked": {
759 "lastModified": 1, 775 "lastModified": 1,
760 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 776 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
761 "path": "../environment", 777 "path": "../../flakes/private/environment",
762 "type": "path" 778 "type": "path"
763 }, 779 },
764 "original": { 780 "original": {
765 "path": "../environment", 781 "path": "../../flakes/private/environment",
766 "type": "path" 782 "type": "path"
767 } 783 }
768 }, 784 },
@@ -830,11 +846,11 @@
830 "locked": { 846 "locked": {
831 "lastModified": 1, 847 "lastModified": 1,
832 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 848 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
833 "path": "../environment", 849 "path": "../../flakes/private/environment",
834 "type": "path" 850 "type": "path"
835 }, 851 },
836 "original": { 852 "original": {
837 "path": "../environment", 853 "path": "../../flakes/private/environment",
838 "type": "path" 854 "type": "path"
839 } 855 }
840 }, 856 },
@@ -874,6 +890,42 @@
874 "type": "path" 890 "type": "path"
875 } 891 }
876 }, 892 },
893 "environment_33": {
894 "locked": {
895 "lastModified": 1,
896 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
897 "path": "../environment",
898 "type": "path"
899 },
900 "original": {
901 "path": "../environment",
902 "type": "path"
903 }
904 },
905 "environment_34": {
906 "locked": {
907 "lastModified": 1,
908 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
909 "path": "../environment",
910 "type": "path"
911 },
912 "original": {
913 "path": "../environment",
914 "type": "path"
915 }
916 },
917 "environment_35": {
918 "locked": {
919 "lastModified": 1,
920 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
921 "path": "../environment",
922 "type": "path"
923 },
924 "original": {
925 "path": "../environment",
926 "type": "path"
927 }
928 },
877 "environment_4": { 929 "environment_4": {
878 "locked": { 930 "locked": {
879 "lastModified": 1, 931 "lastModified": 1,
@@ -926,11 +978,11 @@
926 "locked": { 978 "locked": {
927 "lastModified": 1, 979 "lastModified": 1,
928 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 980 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
929 "path": "../../flakes/private/environment", 981 "path": "../environment",
930 "type": "path" 982 "type": "path"
931 }, 983 },
932 "original": { 984 "original": {
933 "path": "../../flakes/private/environment", 985 "path": "../environment",
934 "type": "path" 986 "type": "path"
935 } 987 }
936 }, 988 },
@@ -938,11 +990,11 @@
938 "locked": { 990 "locked": {
939 "lastModified": 1, 991 "lastModified": 1,
940 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 992 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
941 "path": "../environment", 993 "path": "../../flakes/private/environment",
942 "type": "path" 994 "type": "path"
943 }, 995 },
944 "original": { 996 "original": {
945 "path": "../environment", 997 "path": "../../flakes/private/environment",
946 "type": "path" 998 "type": "path"
947 } 999 }
948 }, 1000 },
@@ -2703,8 +2755,8 @@
2703 }, 2755 },
2704 "mail-relay": { 2756 "mail-relay": {
2705 "inputs": { 2757 "inputs": {
2706 "environment": "environment_3", 2758 "environment": "environment_4",
2707 "secrets": "secrets" 2759 "secrets": "secrets_2"
2708 }, 2760 },
2709 "locked": { 2761 "locked": {
2710 "lastModified": 1, 2762 "lastModified": 1,
@@ -2719,8 +2771,8 @@
2719 }, 2771 },
2720 "mail-relay_2": { 2772 "mail-relay_2": {
2721 "inputs": { 2773 "inputs": {
2722 "environment": "environment_19", 2774 "environment": "environment_21",
2723 "secrets": "secrets_14" 2775 "secrets": "secrets_16"
2724 }, 2776 },
2725 "locked": { 2777 "locked": {
2726 "lastModified": 1, 2778 "lastModified": 1,
@@ -2760,6 +2812,7 @@
2760 "s-opendmarc": "s-opendmarc", 2812 "s-opendmarc": "s-opendmarc",
2761 "s-paste": "s-paste", 2813 "s-paste": "s-paste",
2762 "s-peertube": "s-peertube", 2814 "s-peertube": "s-peertube",
2815 "s-private-borg-backup": "s-private-borg-backup",
2763 "s-private-buildbot": "s-private-buildbot", 2816 "s-private-buildbot": "s-private-buildbot",
2764 "s-private-chatons": "s-private-chatons", 2817 "s-private-chatons": "s-private-chatons",
2765 "s-private-environment": "s-private-environment", 2818 "s-private-environment": "s-private-environment",
@@ -2783,7 +2836,7 @@
2783 }, 2836 },
2784 "locked": { 2837 "locked": {
2785 "lastModified": 1, 2838 "lastModified": 1,
2786 "narHash": "sha256-bacTCDQeddb777/pYiLIhcSvxbc1WDQSXKqfTCJPzwo=", 2839 "narHash": "sha256-iTtXjTzGUwsQahHeiQfECPmHZ/orceFH54SimHgpBaA=",
2787 "path": "../flakes", 2840 "path": "../flakes",
2788 "type": "path" 2841 "type": "path"
2789 }, 2842 },
@@ -2868,11 +2921,11 @@
2868 }, 2921 },
2869 "milters": { 2922 "milters": {
2870 "inputs": { 2923 "inputs": {
2871 "environment": "environment_4", 2924 "environment": "environment_5",
2872 "files-watcher": "files-watcher", 2925 "files-watcher": "files-watcher",
2873 "openarc": "openarc", 2926 "openarc": "openarc",
2874 "opendmarc": "opendmarc", 2927 "opendmarc": "opendmarc",
2875 "secrets": "secrets_2" 2928 "secrets": "secrets_3"
2876 }, 2929 },
2877 "locked": { 2930 "locked": {
2878 "lastModified": 1, 2931 "lastModified": 1,
@@ -2887,10 +2940,10 @@
2887 }, 2940 },
2888 "monitoring": { 2941 "monitoring": {
2889 "inputs": { 2942 "inputs": {
2890 "environment": "environment_5", 2943 "environment": "environment_6",
2891 "naemon": "naemon", 2944 "naemon": "naemon",
2892 "nixpkgs-lib": "nixpkgs-lib", 2945 "nixpkgs-lib": "nixpkgs-lib",
2893 "secrets": "secrets_3" 2946 "secrets": "secrets_4"
2894 }, 2947 },
2895 "locked": { 2948 "locked": {
2896 "lastModified": 1, 2949 "lastModified": 1,
@@ -2905,10 +2958,10 @@
2905 }, 2958 },
2906 "monitoring_2": { 2959 "monitoring_2": {
2907 "inputs": { 2960 "inputs": {
2908 "environment": "environment_9", 2961 "environment": "environment_10",
2909 "naemon": "naemon_2", 2962 "naemon": "naemon_2",
2910 "nixpkgs-lib": "nixpkgs-lib_4", 2963 "nixpkgs-lib": "nixpkgs-lib_4",
2911 "secrets": "secrets_7" 2964 "secrets": "secrets_8"
2912 }, 2965 },
2913 "locked": { 2966 "locked": {
2914 "lastModified": 1, 2967 "lastModified": 1,
@@ -2923,10 +2976,10 @@
2923 }, 2976 },
2924 "monitoring_3": { 2977 "monitoring_3": {
2925 "inputs": { 2978 "inputs": {
2926 "environment": "environment_20", 2979 "environment": "environment_22",
2927 "naemon": "naemon_4", 2980 "naemon": "naemon_4",
2928 "nixpkgs-lib": "nixpkgs-lib_14", 2981 "nixpkgs-lib": "nixpkgs-lib_14",
2929 "secrets": "secrets_15" 2982 "secrets": "secrets_17"
2930 }, 2983 },
2931 "locked": { 2984 "locked": {
2932 "lastModified": 1, 2985 "lastModified": 1,
@@ -2941,10 +2994,10 @@
2941 }, 2994 },
2942 "monitoring_4": { 2995 "monitoring_4": {
2943 "inputs": { 2996 "inputs": {
2944 "environment": "environment_23", 2997 "environment": "environment_25",
2945 "naemon": "naemon_5", 2998 "naemon": "naemon_5",
2946 "nixpkgs-lib": "nixpkgs-lib_17", 2999 "nixpkgs-lib": "nixpkgs-lib_17",
2947 "secrets": "secrets_17" 3000 "secrets": "secrets_19"
2948 }, 3001 },
2949 "locked": { 3002 "locked": {
2950 "lastModified": 1, 3003 "lastModified": 1,
@@ -3814,8 +3867,9 @@
3814 }, 3867 },
3815 "n-backup-2": { 3868 "n-backup-2": {
3816 "inputs": { 3869 "inputs": {
3870 "borg-backup": "borg-backup",
3817 "chatons": "chatons", 3871 "chatons": "chatons",
3818 "environment": "environment_2", 3872 "environment": "environment_3",
3819 "loginctl-linger": "loginctl-linger", 3873 "loginctl-linger": "loginctl-linger",
3820 "mail-relay": "mail-relay", 3874 "mail-relay": "mail-relay",
3821 "milters": "milters", 3875 "milters": "milters",
@@ -3827,12 +3881,12 @@
3827 "opendmarc": "opendmarc_2", 3881 "opendmarc": "opendmarc_2",
3828 "openldap": "openldap", 3882 "openldap": "openldap",
3829 "rsync_backup": "rsync_backup", 3883 "rsync_backup": "rsync_backup",
3830 "secrets": "secrets_6", 3884 "secrets": "secrets_7",
3831 "system": "system" 3885 "system": "system"
3832 }, 3886 },
3833 "locked": { 3887 "locked": {
3834 "lastModified": 1, 3888 "lastModified": 1,
3835 "narHash": "sha256-EPkvkGTy7RlhCXcngA/zGfXuiai7kE8YSL2siYe8HOI=", 3889 "narHash": "sha256-gnCoyp6EcUzjBhmNrPel4ZzhK2nK6VLBziYJkKiXcuU=",
3836 "path": "../systems/backup-2", 3890 "path": "../systems/backup-2",
3837 "type": "path" 3891 "type": "path"
3838 }, 3892 },
@@ -3843,14 +3897,14 @@
3843 }, 3897 },
3844 "n-dilion": { 3898 "n-dilion": {
3845 "inputs": { 3899 "inputs": {
3846 "environment": "environment_8", 3900 "environment": "environment_9",
3847 "files-watcher": "files-watcher_4", 3901 "files-watcher": "files-watcher_4",
3848 "loginctl-linger": "loginctl-linger_2", 3902 "loginctl-linger": "loginctl-linger_2",
3849 "monitoring": "monitoring_2", 3903 "monitoring": "monitoring_2",
3850 "my-lib": "my-lib_2", 3904 "my-lib": "my-lib_2",
3851 "myuids": "myuids_7", 3905 "myuids": "myuids_7",
3852 "nixpkgs": "nixpkgs_17", 3906 "nixpkgs": "nixpkgs_17",
3853 "secrets": "secrets_8", 3907 "secrets": "secrets_9",
3854 "system": "system_2" 3908 "system": "system_2"
3855 }, 3909 },
3856 "locked": { 3910 "locked": {
@@ -3869,6 +3923,7 @@
3869 "dns-nix": "dns-nix", 3923 "dns-nix": "dns-nix",
3870 "my-lib": "my-lib_3", 3924 "my-lib": "my-lib_3",
3871 "nixpkgs": "nixpkgs_24", 3925 "nixpkgs": "nixpkgs_24",
3926 "private-borg-backup": "private-borg-backup",
3872 "private-buildbot": "private-buildbot", 3927 "private-buildbot": "private-buildbot",
3873 "private-chatons": "private-chatons", 3928 "private-chatons": "private-chatons",
3874 "private-environment": "private-environment", 3929 "private-environment": "private-environment",
@@ -3903,7 +3958,7 @@
3903 }, 3958 },
3904 "locked": { 3959 "locked": {
3905 "lastModified": 1, 3960 "lastModified": 1,
3906 "narHash": "sha256-GP5n6/p0kgd0lf6KhPZqZxybcUPA38kl054Uo6CWYkE=", 3961 "narHash": "sha256-deESGvYrIO1Luc3tD+a+QGq5w8ZlzZrIkJa6baDWhXE=",
3907 "path": "../systems/eldiron", 3962 "path": "../systems/eldiron",
3908 "type": "path" 3963 "type": "path"
3909 }, 3964 },
@@ -3915,7 +3970,7 @@
3915 "n-monitoring-1": { 3970 "n-monitoring-1": {
3916 "inputs": { 3971 "inputs": {
3917 "chatons": "chatons_2", 3972 "chatons": "chatons_2",
3918 "environment": "environment_18", 3973 "environment": "environment_20",
3919 "files-watcher": "files-watcher_9", 3974 "files-watcher": "files-watcher_9",
3920 "loginctl-linger": "loginctl-linger_3", 3975 "loginctl-linger": "loginctl-linger_3",
3921 "mail-relay": "mail-relay_2", 3976 "mail-relay": "mail-relay_2",
@@ -3924,7 +3979,7 @@
3924 "myuids": "myuids_23", 3979 "myuids": "myuids_23",
3925 "nixpkgs": "nixpkgs_55", 3980 "nixpkgs": "nixpkgs_55",
3926 "ports": "ports", 3981 "ports": "ports",
3927 "secrets": "secrets_16", 3982 "secrets": "secrets_18",
3928 "system": "system_3" 3983 "system": "system_3"
3929 }, 3984 },
3930 "locked": { 3985 "locked": {
@@ -3940,7 +3995,7 @@
3940 }, 3995 },
3941 "n-quatresaisons": { 3996 "n-quatresaisons": {
3942 "inputs": { 3997 "inputs": {
3943 "environment": "environment_22", 3998 "environment": "environment_24",
3944 "files-watcher": "files-watcher_10", 3999 "files-watcher": "files-watcher_10",
3945 "landing-page": "landing-page", 4000 "landing-page": "landing-page",
3946 "monitoring": "monitoring_4", 4001 "monitoring": "monitoring_4",
@@ -3949,7 +4004,7 @@
3949 "myuids": "myuids_26", 4004 "myuids": "myuids_26",
3950 "nixpkgs": "nixpkgs_63", 4005 "nixpkgs": "nixpkgs_63",
3951 "ports": "ports_2", 4006 "ports": "ports_2",
3952 "secrets": "secrets_18", 4007 "secrets": "secrets_20",
3953 "system": "system_4" 4008 "system": "system_4"
3954 }, 4009 },
3955 "locked": { 4010 "locked": {
@@ -7000,7 +7055,7 @@
7000 "inputs": { 7055 "inputs": {
7001 "files-watcher": "files-watcher_2", 7056 "files-watcher": "files-watcher_2",
7002 "openarc": "openarc_4", 7057 "openarc": "openarc_4",
7003 "secrets": "secrets_4" 7058 "secrets": "secrets_5"
7004 }, 7059 },
7005 "locked": { 7060 "locked": {
7006 "lastModified": 1, 7061 "lastModified": 1,
@@ -7134,10 +7189,10 @@
7134 }, 7189 },
7135 "opendmarc_2": { 7190 "opendmarc_2": {
7136 "inputs": { 7191 "inputs": {
7137 "environment": "environment_6", 7192 "environment": "environment_7",
7138 "files-watcher": "files-watcher_3", 7193 "files-watcher": "files-watcher_3",
7139 "opendmarc": "opendmarc_3", 7194 "opendmarc": "opendmarc_3",
7140 "secrets": "secrets_5" 7195 "secrets": "secrets_6"
7141 }, 7196 },
7142 "locked": { 7197 "locked": {
7143 "lastModified": 1, 7198 "lastModified": 1,
@@ -7457,6 +7512,22 @@
7457 "type": "path" 7512 "type": "path"
7458 } 7513 }
7459 }, 7514 },
7515 "private-borg-backup": {
7516 "inputs": {
7517 "environment": "environment_12",
7518 "secrets": "secrets_10"
7519 },
7520 "locked": {
7521 "lastModified": 1,
7522 "narHash": "sha256-6IB+N7TeH+3XyK8nwlEX4LGl3EJJLVoESteotut3OUc=",
7523 "path": "../../flakes/private/borg_backup",
7524 "type": "path"
7525 },
7526 "original": {
7527 "path": "../../flakes/private/borg_backup",
7528 "type": "path"
7529 }
7530 },
7460 "private-buildbot": { 7531 "private-buildbot": {
7461 "inputs": { 7532 "inputs": {
7462 "buildslist": "buildslist", 7533 "buildslist": "buildslist",
@@ -7476,7 +7547,7 @@
7476 }, 7547 },
7477 "private-chatons": { 7548 "private-chatons": {
7478 "inputs": { 7549 "inputs": {
7479 "environment": "environment_11" 7550 "environment": "environment_13"
7480 }, 7551 },
7481 "locked": { 7552 "locked": {
7482 "lastModified": 1, 7553 "lastModified": 1,
@@ -7515,11 +7586,11 @@
7515 }, 7586 },
7516 "private-milters": { 7587 "private-milters": {
7517 "inputs": { 7588 "inputs": {
7518 "environment": "environment_12", 7589 "environment": "environment_14",
7519 "files-watcher": "files-watcher_5", 7590 "files-watcher": "files-watcher_5",
7520 "openarc": "openarc_6", 7591 "openarc": "openarc_6",
7521 "opendmarc": "opendmarc_4", 7592 "opendmarc": "opendmarc_4",
7522 "secrets": "secrets_9" 7593 "secrets": "secrets_11"
7523 }, 7594 },
7524 "locked": { 7595 "locked": {
7525 "lastModified": 1, 7596 "lastModified": 1,
@@ -7534,10 +7605,10 @@
7534 }, 7605 },
7535 "private-monitoring": { 7606 "private-monitoring": {
7536 "inputs": { 7607 "inputs": {
7537 "environment": "environment_13", 7608 "environment": "environment_15",
7538 "naemon": "naemon_3", 7609 "naemon": "naemon_3",
7539 "nixpkgs-lib": "nixpkgs-lib_8", 7610 "nixpkgs-lib": "nixpkgs-lib_8",
7540 "secrets": "secrets_10" 7611 "secrets": "secrets_12"
7541 }, 7612 },
7542 "locked": { 7613 "locked": {
7543 "lastModified": 1, 7614 "lastModified": 1,
@@ -7554,7 +7625,7 @@
7554 "inputs": { 7625 "inputs": {
7555 "files-watcher": "files-watcher_6", 7626 "files-watcher": "files-watcher_6",
7556 "openarc": "openarc_8", 7627 "openarc": "openarc_8",
7557 "secrets": "secrets_11" 7628 "secrets": "secrets_13"
7558 }, 7629 },
7559 "locked": { 7630 "locked": {
7560 "lastModified": 1, 7631 "lastModified": 1,
@@ -7569,10 +7640,10 @@
7569 }, 7640 },
7570 "private-opendmarc": { 7641 "private-opendmarc": {
7571 "inputs": { 7642 "inputs": {
7572 "environment": "environment_14", 7643 "environment": "environment_16",
7573 "files-watcher": "files-watcher_7", 7644 "files-watcher": "files-watcher_7",
7574 "opendmarc": "opendmarc_5", 7645 "opendmarc": "opendmarc_5",
7575 "secrets": "secrets_12" 7646 "secrets": "secrets_14"
7576 }, 7647 },
7577 "locked": { 7648 "locked": {
7578 "lastModified": 1, 7649 "lastModified": 1,
@@ -7632,8 +7703,8 @@
7632 }, 7703 },
7633 "private-ssh": { 7704 "private-ssh": {
7634 "inputs": { 7705 "inputs": {
7635 "environment": "environment_15", 7706 "environment": "environment_17",
7636 "secrets": "secrets_13" 7707 "secrets": "secrets_15"
7637 }, 7708 },
7638 "locked": { 7709 "locked": {
7639 "lastModified": 1, 7710 "lastModified": 1,
@@ -7649,7 +7720,7 @@
7649 "private-system": { 7720 "private-system": {
7650 "inputs": { 7721 "inputs": {
7651 "backports": "backports_3", 7722 "backports": "backports_3",
7652 "environment": "environment_16", 7723 "environment": "environment_18",
7653 "mypackages": "mypackages_3", 7724 "mypackages": "mypackages_3",
7654 "myuids": "myuids_15", 7725 "myuids": "myuids_15",
7655 "secrets-public": "secrets-public_3" 7726 "secrets-public": "secrets-public_3"
@@ -7668,7 +7739,7 @@
7668 "private-system_2": { 7739 "private-system_2": {
7669 "inputs": { 7740 "inputs": {
7670 "backports": "backports_6", 7741 "backports": "backports_6",
7671 "environment": "environment_25", 7742 "environment": "environment_27",
7672 "mypackages": "mypackages_9", 7743 "mypackages": "mypackages_9",
7673 "myuids": "myuids_28", 7744 "myuids": "myuids_28",
7674 "secrets-public": "secrets-public_6" 7745 "secrets-public": "secrets-public_6"
@@ -8005,7 +8076,7 @@
8005 "devshell": "devshell", 8076 "devshell": "devshell",
8006 "main-flake": "main-flake", 8077 "main-flake": "main-flake",
8007 "nixpkgs": "nixpkgs_105", 8078 "nixpkgs": "nixpkgs_105",
8008 "secrets": "secrets_25" 8079 "secrets": "secrets_28"
8009 } 8080 }
8010 }, 8081 },
8011 "rsync_backup": { 8082 "rsync_backup": {
@@ -8324,6 +8395,22 @@
8324 "type": "path" 8395 "type": "path"
8325 } 8396 }
8326 }, 8397 },
8398 "s-private-borg-backup": {
8399 "inputs": {
8400 "environment": "environment_28",
8401 "secrets": "secrets_21"
8402 },
8403 "locked": {
8404 "lastModified": 1,
8405 "narHash": "sha256-6IB+N7TeH+3XyK8nwlEX4LGl3EJJLVoESteotut3OUc=",
8406 "path": "./private/borg_backup",
8407 "type": "path"
8408 },
8409 "original": {
8410 "path": "./private/borg_backup",
8411 "type": "path"
8412 }
8413 },
8327 "s-private-buildbot": { 8414 "s-private-buildbot": {
8328 "inputs": { 8415 "inputs": {
8329 "buildslist": "buildslist_2", 8416 "buildslist": "buildslist_2",
@@ -8343,7 +8430,7 @@
8343 }, 8430 },
8344 "s-private-chatons": { 8431 "s-private-chatons": {
8345 "inputs": { 8432 "inputs": {
8346 "environment": "environment_26" 8433 "environment": "environment_29"
8347 }, 8434 },
8348 "locked": { 8435 "locked": {
8349 "lastModified": 1, 8436 "lastModified": 1,
@@ -8370,8 +8457,8 @@
8370 }, 8457 },
8371 "s-private-mail-relay": { 8458 "s-private-mail-relay": {
8372 "inputs": { 8459 "inputs": {
8373 "environment": "environment_27", 8460 "environment": "environment_30",
8374 "secrets": "secrets_19" 8461 "secrets": "secrets_22"
8375 }, 8462 },
8376 "locked": { 8463 "locked": {
8377 "lastModified": 1, 8464 "lastModified": 1,
@@ -8386,11 +8473,11 @@
8386 }, 8473 },
8387 "s-private-milters": { 8474 "s-private-milters": {
8388 "inputs": { 8475 "inputs": {
8389 "environment": "environment_28", 8476 "environment": "environment_31",
8390 "files-watcher": "files-watcher_13", 8477 "files-watcher": "files-watcher_13",
8391 "openarc": "openarc_12", 8478 "openarc": "openarc_12",
8392 "opendmarc": "opendmarc_6", 8479 "opendmarc": "opendmarc_6",
8393 "secrets": "secrets_20" 8480 "secrets": "secrets_23"
8394 }, 8481 },
8395 "locked": { 8482 "locked": {
8396 "lastModified": 1, 8483 "lastModified": 1,
@@ -8405,10 +8492,10 @@
8405 }, 8492 },
8406 "s-private-monitoring": { 8493 "s-private-monitoring": {
8407 "inputs": { 8494 "inputs": {
8408 "environment": "environment_29", 8495 "environment": "environment_32",
8409 "naemon": "naemon_6", 8496 "naemon": "naemon_6",
8410 "nixpkgs-lib": "nixpkgs-lib_26", 8497 "nixpkgs-lib": "nixpkgs-lib_26",
8411 "secrets": "secrets_21" 8498 "secrets": "secrets_24"
8412 }, 8499 },
8413 "locked": { 8500 "locked": {
8414 "lastModified": 1, 8501 "lastModified": 1,
@@ -8425,7 +8512,7 @@
8425 "inputs": { 8512 "inputs": {
8426 "files-watcher": "files-watcher_14", 8513 "files-watcher": "files-watcher_14",
8427 "openarc": "openarc_14", 8514 "openarc": "openarc_14",
8428 "secrets": "secrets_22" 8515 "secrets": "secrets_25"
8429 }, 8516 },
8430 "locked": { 8517 "locked": {
8431 "lastModified": 1, 8518 "lastModified": 1,
@@ -8440,10 +8527,10 @@
8440 }, 8527 },
8441 "s-private-opendmarc": { 8528 "s-private-opendmarc": {
8442 "inputs": { 8529 "inputs": {
8443 "environment": "environment_30", 8530 "environment": "environment_33",
8444 "files-watcher": "files-watcher_15", 8531 "files-watcher": "files-watcher_15",
8445 "opendmarc": "opendmarc_7", 8532 "opendmarc": "opendmarc_7",
8446 "secrets": "secrets_23" 8533 "secrets": "secrets_26"
8447 }, 8534 },
8448 "locked": { 8535 "locked": {
8449 "lastModified": 1, 8536 "lastModified": 1,
@@ -8503,8 +8590,8 @@
8503 }, 8590 },
8504 "s-private-ssh": { 8591 "s-private-ssh": {
8505 "inputs": { 8592 "inputs": {
8506 "environment": "environment_31", 8593 "environment": "environment_34",
8507 "secrets": "secrets_24" 8594 "secrets": "secrets_27"
8508 }, 8595 },
8509 "locked": { 8596 "locked": {
8510 "lastModified": 1, 8597 "lastModified": 1,
@@ -8520,7 +8607,7 @@
8520 "s-private-system": { 8607 "s-private-system": {
8521 "inputs": { 8608 "inputs": {
8522 "backports": "backports_7", 8609 "backports": "backports_7",
8523 "environment": "environment_32", 8610 "environment": "environment_35",
8524 "mypackages": "mypackages_12", 8611 "mypackages": "mypackages_12",
8525 "myuids": "myuids_42", 8612 "myuids": "myuids_42",
8526 "secrets-public": "secrets-public_7" 8613 "secrets-public": "secrets-public_7"
@@ -8767,11 +8854,11 @@
8767 "locked": { 8854 "locked": {
8768 "lastModified": 1, 8855 "lastModified": 1,
8769 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 8856 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8770 "path": "../../flakes/secrets", 8857 "path": "../../secrets",
8771 "type": "path" 8858 "type": "path"
8772 }, 8859 },
8773 "original": { 8860 "original": {
8774 "path": "../../flakes/secrets", 8861 "path": "../../secrets",
8775 "type": "path" 8862 "type": "path"
8776 } 8863 }
8777 }, 8864 },
@@ -8827,11 +8914,11 @@
8827 "locked": { 8914 "locked": {
8828 "lastModified": 1, 8915 "lastModified": 1,
8829 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 8916 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8830 "path": "../../secrets", 8917 "path": "../../flakes/secrets",
8831 "type": "path" 8918 "type": "path"
8832 }, 8919 },
8833 "original": { 8920 "original": {
8834 "path": "../../secrets", 8921 "path": "../../flakes/secrets",
8835 "type": "path" 8922 "type": "path"
8836 } 8923 }
8837 }, 8924 },
@@ -8884,6 +8971,42 @@
8884 } 8971 }
8885 }, 8972 },
8886 "secrets_25": { 8973 "secrets_25": {
8974 "locked": {
8975 "lastModified": 1,
8976 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8977 "path": "../../secrets",
8978 "type": "path"
8979 },
8980 "original": {
8981 "path": "../../secrets",
8982 "type": "path"
8983 }
8984 },
8985 "secrets_26": {
8986 "locked": {
8987 "lastModified": 1,
8988 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8989 "path": "../../secrets",
8990 "type": "path"
8991 },
8992 "original": {
8993 "path": "../../secrets",
8994 "type": "path"
8995 }
8996 },
8997 "secrets_27": {
8998 "locked": {
8999 "lastModified": 1,
9000 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
9001 "path": "../../secrets",
9002 "type": "path"
9003 },
9004 "original": {
9005 "path": "../../secrets",
9006 "type": "path"
9007 }
9008 },
9009 "secrets_28": {
8887 "inputs": { 9010 "inputs": {
8888 "nixpkgs": "nixpkgs_106" 9011 "nixpkgs": "nixpkgs_106"
8889 }, 9012 },
@@ -8942,11 +9065,11 @@
8942 "locked": { 9065 "locked": {
8943 "lastModified": 1, 9066 "lastModified": 1,
8944 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 9067 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8945 "path": "../../flakes/secrets", 9068 "path": "../../secrets",
8946 "type": "path" 9069 "type": "path"
8947 }, 9070 },
8948 "original": { 9071 "original": {
8949 "path": "../../flakes/secrets", 9072 "path": "../../secrets",
8950 "type": "path" 9073 "type": "path"
8951 } 9074 }
8952 }, 9075 },
@@ -8954,11 +9077,11 @@
8954 "locked": { 9077 "locked": {
8955 "lastModified": 1, 9078 "lastModified": 1,
8956 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 9079 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8957 "path": "../../secrets", 9080 "path": "../../flakes/secrets",
8958 "type": "path" 9081 "type": "path"
8959 }, 9082 },
8960 "original": { 9083 "original": {
8961 "path": "../../secrets", 9084 "path": "../../flakes/secrets",
8962 "type": "path" 9085 "type": "path"
8963 } 9086 }
8964 }, 9087 },
@@ -8966,11 +9089,11 @@
8966 "locked": { 9089 "locked": {
8967 "lastModified": 1, 9090 "lastModified": 1,
8968 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 9091 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8969 "path": "../../flakes/secrets", 9092 "path": "../../secrets",
8970 "type": "path" 9093 "type": "path"
8971 }, 9094 },
8972 "original": { 9095 "original": {
8973 "path": "../../flakes/secrets", 9096 "path": "../../secrets",
8974 "type": "path" 9097 "type": "path"
8975 } 9098 }
8976 }, 9099 },
@@ -8978,11 +9101,11 @@
8978 "locked": { 9101 "locked": {
8979 "lastModified": 1, 9102 "lastModified": 1,
8980 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 9103 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8981 "path": "../../secrets", 9104 "path": "../../flakes/secrets",
8982 "type": "path" 9105 "type": "path"
8983 }, 9106 },
8984 "original": { 9107 "original": {
8985 "path": "../../secrets", 9108 "path": "../../flakes/secrets",
8986 "type": "path" 9109 "type": "path"
8987 } 9110 }
8988 }, 9111 },
@@ -9133,7 +9256,7 @@
9133 "system": { 9256 "system": {
9134 "inputs": { 9257 "inputs": {
9135 "backports": "backports", 9258 "backports": "backports",
9136 "environment": "environment_7", 9259 "environment": "environment_8",
9137 "mypackages": "mypackages", 9260 "mypackages": "mypackages",
9138 "myuids": "myuids_6", 9261 "myuids": "myuids_6",
9139 "secrets-public": "secrets-public" 9262 "secrets-public": "secrets-public"
@@ -9152,7 +9275,7 @@
9152 "system_2": { 9275 "system_2": {
9153 "inputs": { 9276 "inputs": {
9154 "backports": "backports_2", 9277 "backports": "backports_2",
9155 "environment": "environment_10", 9278 "environment": "environment_11",
9156 "mypackages": "mypackages_2", 9279 "mypackages": "mypackages_2",
9157 "myuids": "myuids_8", 9280 "myuids": "myuids_8",
9158 "secrets-public": "secrets-public_2" 9281 "secrets-public": "secrets-public_2"
@@ -9171,7 +9294,7 @@
9171 "system_3": { 9294 "system_3": {
9172 "inputs": { 9295 "inputs": {
9173 "backports": "backports_4", 9296 "backports": "backports_4",
9174 "environment": "environment_21", 9297 "environment": "environment_23",
9175 "mypackages": "mypackages_7", 9298 "mypackages": "mypackages_7",
9176 "myuids": "myuids_24", 9299 "myuids": "myuids_24",
9177 "secrets-public": "secrets-public_4" 9300 "secrets-public": "secrets-public_4"
@@ -9190,7 +9313,7 @@
9190 "system_4": { 9313 "system_4": {
9191 "inputs": { 9314 "inputs": {
9192 "backports": "backports_5", 9315 "backports": "backports_5",
9193 "environment": "environment_24", 9316 "environment": "environment_26",
9194 "mypackages": "mypackages_8", 9317 "mypackages": "mypackages_8",
9195 "myuids": "myuids_27", 9318 "myuids": "myuids_27",
9196 "secrets-public": "secrets-public_5" 9319 "secrets-public": "secrets-public_5"
diff --git a/flake.lock b/flake.lock
index 8bff4a1..b3d0db2 100644
--- a/flake.lock
+++ b/flake.lock
@@ -112,6 +112,22 @@
112 "type": "path" 112 "type": "path"
113 } 113 }
114 }, 114 },
115 "borg-backup": {
116 "inputs": {
117 "environment": "environment",
118 "secrets": "secrets"
119 },
120 "locked": {
121 "lastModified": 1,
122 "narHash": "sha256-6IB+N7TeH+3XyK8nwlEX4LGl3EJJLVoESteotut3OUc=",
123 "path": "../../flakes/private/borg_backup",
124 "type": "path"
125 },
126 "original": {
127 "path": "../../flakes/private/borg_backup",
128 "type": "path"
129 }
130 },
115 "buildslist": { 131 "buildslist": {
116 "flake": false, 132 "flake": false,
117 "locked": { 133 "locked": {
@@ -146,7 +162,7 @@
146 }, 162 },
147 "chatons": { 163 "chatons": {
148 "inputs": { 164 "inputs": {
149 "environment": "environment" 165 "environment": "environment_2"
150 }, 166 },
151 "locked": { 167 "locked": {
152 "lastModified": 1, 168 "lastModified": 1,
@@ -161,7 +177,7 @@
161 }, 177 },
162 "chatons_2": { 178 "chatons_2": {
163 "inputs": { 179 "inputs": {
164 "environment": "environment_17" 180 "environment": "environment_19"
165 }, 181 },
166 "locked": { 182 "locked": {
167 "lastModified": 1, 183 "lastModified": 1,
@@ -674,11 +690,11 @@
674 "locked": { 690 "locked": {
675 "lastModified": 1, 691 "lastModified": 1,
676 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 692 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
677 "path": "../../flakes/private/environment", 693 "path": "../environment",
678 "type": "path" 694 "type": "path"
679 }, 695 },
680 "original": { 696 "original": {
681 "path": "../../flakes/private/environment", 697 "path": "../environment",
682 "type": "path" 698 "type": "path"
683 } 699 }
684 }, 700 },
@@ -698,11 +714,11 @@
698 "locked": { 714 "locked": {
699 "lastModified": 1, 715 "lastModified": 1,
700 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 716 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
701 "path": "../../flakes/private/environment", 717 "path": "../environment",
702 "type": "path" 718 "type": "path"
703 }, 719 },
704 "original": { 720 "original": {
705 "path": "../../flakes/private/environment", 721 "path": "../environment",
706 "type": "path" 722 "type": "path"
707 } 723 }
708 }, 724 },
@@ -710,11 +726,11 @@
710 "locked": { 726 "locked": {
711 "lastModified": 1, 727 "lastModified": 1,
712 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 728 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
713 "path": "../environment", 729 "path": "../../flakes/private/environment",
714 "type": "path" 730 "type": "path"
715 }, 731 },
716 "original": { 732 "original": {
717 "path": "../environment", 733 "path": "../../flakes/private/environment",
718 "type": "path" 734 "type": "path"
719 } 735 }
720 }, 736 },
@@ -734,11 +750,11 @@
734 "locked": { 750 "locked": {
735 "lastModified": 1, 751 "lastModified": 1,
736 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 752 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
737 "path": "../../flakes/private/environment", 753 "path": "../environment",
738 "type": "path" 754 "type": "path"
739 }, 755 },
740 "original": { 756 "original": {
741 "path": "../../flakes/private/environment", 757 "path": "../environment",
742 "type": "path" 758 "type": "path"
743 } 759 }
744 }, 760 },
@@ -758,11 +774,11 @@
758 "locked": { 774 "locked": {
759 "lastModified": 1, 775 "lastModified": 1,
760 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 776 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
761 "path": "../environment", 777 "path": "../../flakes/private/environment",
762 "type": "path" 778 "type": "path"
763 }, 779 },
764 "original": { 780 "original": {
765 "path": "../environment", 781 "path": "../../flakes/private/environment",
766 "type": "path" 782 "type": "path"
767 } 783 }
768 }, 784 },
@@ -830,11 +846,11 @@
830 "locked": { 846 "locked": {
831 "lastModified": 1, 847 "lastModified": 1,
832 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 848 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
833 "path": "../environment", 849 "path": "../../flakes/private/environment",
834 "type": "path" 850 "type": "path"
835 }, 851 },
836 "original": { 852 "original": {
837 "path": "../environment", 853 "path": "../../flakes/private/environment",
838 "type": "path" 854 "type": "path"
839 } 855 }
840 }, 856 },
@@ -874,6 +890,42 @@
874 "type": "path" 890 "type": "path"
875 } 891 }
876 }, 892 },
893 "environment_33": {
894 "locked": {
895 "lastModified": 1,
896 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
897 "path": "../environment",
898 "type": "path"
899 },
900 "original": {
901 "path": "../environment",
902 "type": "path"
903 }
904 },
905 "environment_34": {
906 "locked": {
907 "lastModified": 1,
908 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
909 "path": "../environment",
910 "type": "path"
911 },
912 "original": {
913 "path": "../environment",
914 "type": "path"
915 }
916 },
917 "environment_35": {
918 "locked": {
919 "lastModified": 1,
920 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
921 "path": "../environment",
922 "type": "path"
923 },
924 "original": {
925 "path": "../environment",
926 "type": "path"
927 }
928 },
877 "environment_4": { 929 "environment_4": {
878 "locked": { 930 "locked": {
879 "lastModified": 1, 931 "lastModified": 1,
@@ -926,11 +978,11 @@
926 "locked": { 978 "locked": {
927 "lastModified": 1, 979 "lastModified": 1,
928 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 980 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
929 "path": "../../flakes/private/environment", 981 "path": "../environment",
930 "type": "path" 982 "type": "path"
931 }, 983 },
932 "original": { 984 "original": {
933 "path": "../../flakes/private/environment", 985 "path": "../environment",
934 "type": "path" 986 "type": "path"
935 } 987 }
936 }, 988 },
@@ -938,11 +990,11 @@
938 "locked": { 990 "locked": {
939 "lastModified": 1, 991 "lastModified": 1,
940 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 992 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
941 "path": "../environment", 993 "path": "../../flakes/private/environment",
942 "type": "path" 994 "type": "path"
943 }, 995 },
944 "original": { 996 "original": {
945 "path": "../environment", 997 "path": "../../flakes/private/environment",
946 "type": "path" 998 "type": "path"
947 } 999 }
948 }, 1000 },
@@ -2643,6 +2695,7 @@
2643 "s-opendmarc": "s-opendmarc", 2695 "s-opendmarc": "s-opendmarc",
2644 "s-paste": "s-paste", 2696 "s-paste": "s-paste",
2645 "s-peertube": "s-peertube", 2697 "s-peertube": "s-peertube",
2698 "s-private-borg-backup": "s-private-borg-backup",
2646 "s-private-buildbot": "s-private-buildbot", 2699 "s-private-buildbot": "s-private-buildbot",
2647 "s-private-chatons": "s-private-chatons", 2700 "s-private-chatons": "s-private-chatons",
2648 "s-private-environment": "s-private-environment", 2701 "s-private-environment": "s-private-environment",
@@ -2660,11 +2713,11 @@
2660 "s-secrets": "s-secrets", 2713 "s-secrets": "s-secrets",
2661 "s-surfer": "s-surfer", 2714 "s-surfer": "s-surfer",
2662 "s-taskwarrior-web": "s-taskwarrior-web", 2715 "s-taskwarrior-web": "s-taskwarrior-web",
2663 "secrets": "secrets_25" 2716 "secrets": "secrets_28"
2664 }, 2717 },
2665 "locked": { 2718 "locked": {
2666 "lastModified": 1, 2719 "lastModified": 1,
2667 "narHash": "sha256-bacTCDQeddb777/pYiLIhcSvxbc1WDQSXKqfTCJPzwo=", 2720 "narHash": "sha256-iTtXjTzGUwsQahHeiQfECPmHZ/orceFH54SimHgpBaA=",
2668 "path": "./flakes", 2721 "path": "./flakes",
2669 "type": "path" 2722 "type": "path"
2670 }, 2723 },
@@ -2778,8 +2831,8 @@
2778 }, 2831 },
2779 "mail-relay": { 2832 "mail-relay": {
2780 "inputs": { 2833 "inputs": {
2781 "environment": "environment_3", 2834 "environment": "environment_4",
2782 "secrets": "secrets" 2835 "secrets": "secrets_2"
2783 }, 2836 },
2784 "locked": { 2837 "locked": {
2785 "lastModified": 1, 2838 "lastModified": 1,
@@ -2794,8 +2847,8 @@
2794 }, 2847 },
2795 "mail-relay_2": { 2848 "mail-relay_2": {
2796 "inputs": { 2849 "inputs": {
2797 "environment": "environment_19", 2850 "environment": "environment_21",
2798 "secrets": "secrets_14" 2851 "secrets": "secrets_16"
2799 }, 2852 },
2800 "locked": { 2853 "locked": {
2801 "lastModified": 1, 2854 "lastModified": 1,
@@ -2884,11 +2937,11 @@
2884 }, 2937 },
2885 "milters": { 2938 "milters": {
2886 "inputs": { 2939 "inputs": {
2887 "environment": "environment_4", 2940 "environment": "environment_5",
2888 "files-watcher": "files-watcher", 2941 "files-watcher": "files-watcher",
2889 "openarc": "openarc", 2942 "openarc": "openarc",
2890 "opendmarc": "opendmarc", 2943 "opendmarc": "opendmarc",
2891 "secrets": "secrets_2" 2944 "secrets": "secrets_3"
2892 }, 2945 },
2893 "locked": { 2946 "locked": {
2894 "lastModified": 1, 2947 "lastModified": 1,
@@ -2903,10 +2956,10 @@
2903 }, 2956 },
2904 "monitoring": { 2957 "monitoring": {
2905 "inputs": { 2958 "inputs": {
2906 "environment": "environment_5", 2959 "environment": "environment_6",
2907 "naemon": "naemon", 2960 "naemon": "naemon",
2908 "nixpkgs-lib": "nixpkgs-lib_2", 2961 "nixpkgs-lib": "nixpkgs-lib_2",
2909 "secrets": "secrets_3" 2962 "secrets": "secrets_4"
2910 }, 2963 },
2911 "locked": { 2964 "locked": {
2912 "lastModified": 1, 2965 "lastModified": 1,
@@ -2921,10 +2974,10 @@
2921 }, 2974 },
2922 "monitoring_2": { 2975 "monitoring_2": {
2923 "inputs": { 2976 "inputs": {
2924 "environment": "environment_9", 2977 "environment": "environment_10",
2925 "naemon": "naemon_2", 2978 "naemon": "naemon_2",
2926 "nixpkgs-lib": "nixpkgs-lib_5", 2979 "nixpkgs-lib": "nixpkgs-lib_5",
2927 "secrets": "secrets_7" 2980 "secrets": "secrets_8"
2928 }, 2981 },
2929 "locked": { 2982 "locked": {
2930 "lastModified": 1, 2983 "lastModified": 1,
@@ -2939,10 +2992,10 @@
2939 }, 2992 },
2940 "monitoring_3": { 2993 "monitoring_3": {
2941 "inputs": { 2994 "inputs": {
2942 "environment": "environment_20", 2995 "environment": "environment_22",
2943 "naemon": "naemon_4", 2996 "naemon": "naemon_4",
2944 "nixpkgs-lib": "nixpkgs-lib_15", 2997 "nixpkgs-lib": "nixpkgs-lib_15",
2945 "secrets": "secrets_15" 2998 "secrets": "secrets_17"
2946 }, 2999 },
2947 "locked": { 3000 "locked": {
2948 "lastModified": 1, 3001 "lastModified": 1,
@@ -2957,10 +3010,10 @@
2957 }, 3010 },
2958 "monitoring_4": { 3011 "monitoring_4": {
2959 "inputs": { 3012 "inputs": {
2960 "environment": "environment_23", 3013 "environment": "environment_25",
2961 "naemon": "naemon_5", 3014 "naemon": "naemon_5",
2962 "nixpkgs-lib": "nixpkgs-lib_18", 3015 "nixpkgs-lib": "nixpkgs-lib_18",
2963 "secrets": "secrets_17" 3016 "secrets": "secrets_19"
2964 }, 3017 },
2965 "locked": { 3018 "locked": {
2966 "lastModified": 1, 3019 "lastModified": 1,
@@ -3830,8 +3883,9 @@
3830 }, 3883 },
3831 "n-backup-2": { 3884 "n-backup-2": {
3832 "inputs": { 3885 "inputs": {
3886 "borg-backup": "borg-backup",
3833 "chatons": "chatons", 3887 "chatons": "chatons",
3834 "environment": "environment_2", 3888 "environment": "environment_3",
3835 "loginctl-linger": "loginctl-linger", 3889 "loginctl-linger": "loginctl-linger",
3836 "mail-relay": "mail-relay", 3890 "mail-relay": "mail-relay",
3837 "milters": "milters", 3891 "milters": "milters",
@@ -3843,12 +3897,12 @@
3843 "opendmarc": "opendmarc_2", 3897 "opendmarc": "opendmarc_2",
3844 "openldap": "openldap", 3898 "openldap": "openldap",
3845 "rsync_backup": "rsync_backup", 3899 "rsync_backup": "rsync_backup",
3846 "secrets": "secrets_6", 3900 "secrets": "secrets_7",
3847 "system": "system" 3901 "system": "system"
3848 }, 3902 },
3849 "locked": { 3903 "locked": {
3850 "lastModified": 1, 3904 "lastModified": 1,
3851 "narHash": "sha256-EPkvkGTy7RlhCXcngA/zGfXuiai7kE8YSL2siYe8HOI=", 3905 "narHash": "sha256-gnCoyp6EcUzjBhmNrPel4ZzhK2nK6VLBziYJkKiXcuU=",
3852 "path": "../systems/backup-2", 3906 "path": "../systems/backup-2",
3853 "type": "path" 3907 "type": "path"
3854 }, 3908 },
@@ -3859,14 +3913,14 @@
3859 }, 3913 },
3860 "n-dilion": { 3914 "n-dilion": {
3861 "inputs": { 3915 "inputs": {
3862 "environment": "environment_8", 3916 "environment": "environment_9",
3863 "files-watcher": "files-watcher_4", 3917 "files-watcher": "files-watcher_4",
3864 "loginctl-linger": "loginctl-linger_2", 3918 "loginctl-linger": "loginctl-linger_2",
3865 "monitoring": "monitoring_2", 3919 "monitoring": "monitoring_2",
3866 "my-lib": "my-lib_2", 3920 "my-lib": "my-lib_2",
3867 "myuids": "myuids_7", 3921 "myuids": "myuids_7",
3868 "nixpkgs": "nixpkgs_17", 3922 "nixpkgs": "nixpkgs_17",
3869 "secrets": "secrets_8", 3923 "secrets": "secrets_9",
3870 "system": "system_2" 3924 "system": "system_2"
3871 }, 3925 },
3872 "locked": { 3926 "locked": {
@@ -3885,6 +3939,7 @@
3885 "dns-nix": "dns-nix", 3939 "dns-nix": "dns-nix",
3886 "my-lib": "my-lib_3", 3940 "my-lib": "my-lib_3",
3887 "nixpkgs": "nixpkgs_24", 3941 "nixpkgs": "nixpkgs_24",
3942 "private-borg-backup": "private-borg-backup",
3888 "private-buildbot": "private-buildbot", 3943 "private-buildbot": "private-buildbot",
3889 "private-chatons": "private-chatons", 3944 "private-chatons": "private-chatons",
3890 "private-environment": "private-environment", 3945 "private-environment": "private-environment",
@@ -3919,7 +3974,7 @@
3919 }, 3974 },
3920 "locked": { 3975 "locked": {
3921 "lastModified": 1, 3976 "lastModified": 1,
3922 "narHash": "sha256-GP5n6/p0kgd0lf6KhPZqZxybcUPA38kl054Uo6CWYkE=", 3977 "narHash": "sha256-deESGvYrIO1Luc3tD+a+QGq5w8ZlzZrIkJa6baDWhXE=",
3923 "path": "../systems/eldiron", 3978 "path": "../systems/eldiron",
3924 "type": "path" 3979 "type": "path"
3925 }, 3980 },
@@ -3931,7 +3986,7 @@
3931 "n-monitoring-1": { 3986 "n-monitoring-1": {
3932 "inputs": { 3987 "inputs": {
3933 "chatons": "chatons_2", 3988 "chatons": "chatons_2",
3934 "environment": "environment_18", 3989 "environment": "environment_20",
3935 "files-watcher": "files-watcher_9", 3990 "files-watcher": "files-watcher_9",
3936 "loginctl-linger": "loginctl-linger_3", 3991 "loginctl-linger": "loginctl-linger_3",
3937 "mail-relay": "mail-relay_2", 3992 "mail-relay": "mail-relay_2",
@@ -3940,7 +3995,7 @@
3940 "myuids": "myuids_23", 3995 "myuids": "myuids_23",
3941 "nixpkgs": "nixpkgs_55", 3996 "nixpkgs": "nixpkgs_55",
3942 "ports": "ports", 3997 "ports": "ports",
3943 "secrets": "secrets_16", 3998 "secrets": "secrets_18",
3944 "system": "system_3" 3999 "system": "system_3"
3945 }, 4000 },
3946 "locked": { 4001 "locked": {
@@ -3956,7 +4011,7 @@
3956 }, 4011 },
3957 "n-quatresaisons": { 4012 "n-quatresaisons": {
3958 "inputs": { 4013 "inputs": {
3959 "environment": "environment_22", 4014 "environment": "environment_24",
3960 "files-watcher": "files-watcher_10", 4015 "files-watcher": "files-watcher_10",
3961 "landing-page": "landing-page", 4016 "landing-page": "landing-page",
3962 "monitoring": "monitoring_4", 4017 "monitoring": "monitoring_4",
@@ -3965,7 +4020,7 @@
3965 "myuids": "myuids_26", 4020 "myuids": "myuids_26",
3966 "nixpkgs": "nixpkgs_63", 4021 "nixpkgs": "nixpkgs_63",
3967 "ports": "ports_2", 4022 "ports": "ports_2",
3968 "secrets": "secrets_18", 4023 "secrets": "secrets_20",
3969 "system": "system_4" 4024 "system": "system_4"
3970 }, 4025 },
3971 "locked": { 4026 "locked": {
@@ -7016,7 +7071,7 @@
7016 "inputs": { 7071 "inputs": {
7017 "files-watcher": "files-watcher_2", 7072 "files-watcher": "files-watcher_2",
7018 "openarc": "openarc_4", 7073 "openarc": "openarc_4",
7019 "secrets": "secrets_4" 7074 "secrets": "secrets_5"
7020 }, 7075 },
7021 "locked": { 7076 "locked": {
7022 "lastModified": 1, 7077 "lastModified": 1,
@@ -7150,10 +7205,10 @@
7150 }, 7205 },
7151 "opendmarc_2": { 7206 "opendmarc_2": {
7152 "inputs": { 7207 "inputs": {
7153 "environment": "environment_6", 7208 "environment": "environment_7",
7154 "files-watcher": "files-watcher_3", 7209 "files-watcher": "files-watcher_3",
7155 "opendmarc": "opendmarc_3", 7210 "opendmarc": "opendmarc_3",
7156 "secrets": "secrets_5" 7211 "secrets": "secrets_6"
7157 }, 7212 },
7158 "locked": { 7213 "locked": {
7159 "lastModified": 1, 7214 "lastModified": 1,
@@ -7473,6 +7528,22 @@
7473 "type": "path" 7528 "type": "path"
7474 } 7529 }
7475 }, 7530 },
7531 "private-borg-backup": {
7532 "inputs": {
7533 "environment": "environment_12",
7534 "secrets": "secrets_10"
7535 },
7536 "locked": {
7537 "lastModified": 1,
7538 "narHash": "sha256-6IB+N7TeH+3XyK8nwlEX4LGl3EJJLVoESteotut3OUc=",
7539 "path": "../../flakes/private/borg_backup",
7540 "type": "path"
7541 },
7542 "original": {
7543 "path": "../../flakes/private/borg_backup",
7544 "type": "path"
7545 }
7546 },
7476 "private-buildbot": { 7547 "private-buildbot": {
7477 "inputs": { 7548 "inputs": {
7478 "buildslist": "buildslist", 7549 "buildslist": "buildslist",
@@ -7492,7 +7563,7 @@
7492 }, 7563 },
7493 "private-chatons": { 7564 "private-chatons": {
7494 "inputs": { 7565 "inputs": {
7495 "environment": "environment_11" 7566 "environment": "environment_13"
7496 }, 7567 },
7497 "locked": { 7568 "locked": {
7498 "lastModified": 1, 7569 "lastModified": 1,
@@ -7531,11 +7602,11 @@
7531 }, 7602 },
7532 "private-milters": { 7603 "private-milters": {
7533 "inputs": { 7604 "inputs": {
7534 "environment": "environment_12", 7605 "environment": "environment_14",
7535 "files-watcher": "files-watcher_5", 7606 "files-watcher": "files-watcher_5",
7536 "openarc": "openarc_6", 7607 "openarc": "openarc_6",
7537 "opendmarc": "opendmarc_4", 7608 "opendmarc": "opendmarc_4",
7538 "secrets": "secrets_9" 7609 "secrets": "secrets_11"
7539 }, 7610 },
7540 "locked": { 7611 "locked": {
7541 "lastModified": 1, 7612 "lastModified": 1,
@@ -7550,10 +7621,10 @@
7550 }, 7621 },
7551 "private-monitoring": { 7622 "private-monitoring": {
7552 "inputs": { 7623 "inputs": {
7553 "environment": "environment_13", 7624 "environment": "environment_15",
7554 "naemon": "naemon_3", 7625 "naemon": "naemon_3",
7555 "nixpkgs-lib": "nixpkgs-lib_9", 7626 "nixpkgs-lib": "nixpkgs-lib_9",
7556 "secrets": "secrets_10" 7627 "secrets": "secrets_12"
7557 }, 7628 },
7558 "locked": { 7629 "locked": {
7559 "lastModified": 1, 7630 "lastModified": 1,
@@ -7570,7 +7641,7 @@
7570 "inputs": { 7641 "inputs": {
7571 "files-watcher": "files-watcher_6", 7642 "files-watcher": "files-watcher_6",
7572 "openarc": "openarc_8", 7643 "openarc": "openarc_8",
7573 "secrets": "secrets_11" 7644 "secrets": "secrets_13"
7574 }, 7645 },
7575 "locked": { 7646 "locked": {
7576 "lastModified": 1, 7647 "lastModified": 1,
@@ -7585,10 +7656,10 @@
7585 }, 7656 },
7586 "private-opendmarc": { 7657 "private-opendmarc": {
7587 "inputs": { 7658 "inputs": {
7588 "environment": "environment_14", 7659 "environment": "environment_16",
7589 "files-watcher": "files-watcher_7", 7660 "files-watcher": "files-watcher_7",
7590 "opendmarc": "opendmarc_5", 7661 "opendmarc": "opendmarc_5",
7591 "secrets": "secrets_12" 7662 "secrets": "secrets_14"
7592 }, 7663 },
7593 "locked": { 7664 "locked": {
7594 "lastModified": 1, 7665 "lastModified": 1,
@@ -7648,8 +7719,8 @@
7648 }, 7719 },
7649 "private-ssh": { 7720 "private-ssh": {
7650 "inputs": { 7721 "inputs": {
7651 "environment": "environment_15", 7722 "environment": "environment_17",
7652 "secrets": "secrets_13" 7723 "secrets": "secrets_15"
7653 }, 7724 },
7654 "locked": { 7725 "locked": {
7655 "lastModified": 1, 7726 "lastModified": 1,
@@ -7665,7 +7736,7 @@
7665 "private-system": { 7736 "private-system": {
7666 "inputs": { 7737 "inputs": {
7667 "backports": "backports_3", 7738 "backports": "backports_3",
7668 "environment": "environment_16", 7739 "environment": "environment_18",
7669 "mypackages": "mypackages_3", 7740 "mypackages": "mypackages_3",
7670 "myuids": "myuids_15", 7741 "myuids": "myuids_15",
7671 "secrets-public": "secrets-public_3" 7742 "secrets-public": "secrets-public_3"
@@ -7684,7 +7755,7 @@
7684 "private-system_2": { 7755 "private-system_2": {
7685 "inputs": { 7756 "inputs": {
7686 "backports": "backports_6", 7757 "backports": "backports_6",
7687 "environment": "environment_25", 7758 "environment": "environment_27",
7688 "mypackages": "mypackages_9", 7759 "mypackages": "mypackages_9",
7689 "myuids": "myuids_28", 7760 "myuids": "myuids_28",
7690 "secrets-public": "secrets-public_6" 7761 "secrets-public": "secrets-public_6"
@@ -8340,6 +8411,22 @@
8340 "type": "path" 8411 "type": "path"
8341 } 8412 }
8342 }, 8413 },
8414 "s-private-borg-backup": {
8415 "inputs": {
8416 "environment": "environment_28",
8417 "secrets": "secrets_21"
8418 },
8419 "locked": {
8420 "lastModified": 1,
8421 "narHash": "sha256-6IB+N7TeH+3XyK8nwlEX4LGl3EJJLVoESteotut3OUc=",
8422 "path": "./private/borg_backup",
8423 "type": "path"
8424 },
8425 "original": {
8426 "path": "./private/borg_backup",
8427 "type": "path"
8428 }
8429 },
8343 "s-private-buildbot": { 8430 "s-private-buildbot": {
8344 "inputs": { 8431 "inputs": {
8345 "buildslist": "buildslist_2", 8432 "buildslist": "buildslist_2",
@@ -8359,7 +8446,7 @@
8359 }, 8446 },
8360 "s-private-chatons": { 8447 "s-private-chatons": {
8361 "inputs": { 8448 "inputs": {
8362 "environment": "environment_26" 8449 "environment": "environment_29"
8363 }, 8450 },
8364 "locked": { 8451 "locked": {
8365 "lastModified": 1, 8452 "lastModified": 1,
@@ -8386,8 +8473,8 @@
8386 }, 8473 },
8387 "s-private-mail-relay": { 8474 "s-private-mail-relay": {
8388 "inputs": { 8475 "inputs": {
8389 "environment": "environment_27", 8476 "environment": "environment_30",
8390 "secrets": "secrets_19" 8477 "secrets": "secrets_22"
8391 }, 8478 },
8392 "locked": { 8479 "locked": {
8393 "lastModified": 1, 8480 "lastModified": 1,
@@ -8402,11 +8489,11 @@
8402 }, 8489 },
8403 "s-private-milters": { 8490 "s-private-milters": {
8404 "inputs": { 8491 "inputs": {
8405 "environment": "environment_28", 8492 "environment": "environment_31",
8406 "files-watcher": "files-watcher_13", 8493 "files-watcher": "files-watcher_13",
8407 "openarc": "openarc_12", 8494 "openarc": "openarc_12",
8408 "opendmarc": "opendmarc_6", 8495 "opendmarc": "opendmarc_6",
8409 "secrets": "secrets_20" 8496 "secrets": "secrets_23"
8410 }, 8497 },
8411 "locked": { 8498 "locked": {
8412 "lastModified": 1, 8499 "lastModified": 1,
@@ -8421,10 +8508,10 @@
8421 }, 8508 },
8422 "s-private-monitoring": { 8509 "s-private-monitoring": {
8423 "inputs": { 8510 "inputs": {
8424 "environment": "environment_29", 8511 "environment": "environment_32",
8425 "naemon": "naemon_6", 8512 "naemon": "naemon_6",
8426 "nixpkgs-lib": "nixpkgs-lib_27", 8513 "nixpkgs-lib": "nixpkgs-lib_27",
8427 "secrets": "secrets_21" 8514 "secrets": "secrets_24"
8428 }, 8515 },
8429 "locked": { 8516 "locked": {
8430 "lastModified": 1, 8517 "lastModified": 1,
@@ -8441,7 +8528,7 @@
8441 "inputs": { 8528 "inputs": {
8442 "files-watcher": "files-watcher_14", 8529 "files-watcher": "files-watcher_14",
8443 "openarc": "openarc_14", 8530 "openarc": "openarc_14",
8444 "secrets": "secrets_22" 8531 "secrets": "secrets_25"
8445 }, 8532 },
8446 "locked": { 8533 "locked": {
8447 "lastModified": 1, 8534 "lastModified": 1,
@@ -8456,10 +8543,10 @@
8456 }, 8543 },
8457 "s-private-opendmarc": { 8544 "s-private-opendmarc": {
8458 "inputs": { 8545 "inputs": {
8459 "environment": "environment_30", 8546 "environment": "environment_33",
8460 "files-watcher": "files-watcher_15", 8547 "files-watcher": "files-watcher_15",
8461 "opendmarc": "opendmarc_7", 8548 "opendmarc": "opendmarc_7",
8462 "secrets": "secrets_23" 8549 "secrets": "secrets_26"
8463 }, 8550 },
8464 "locked": { 8551 "locked": {
8465 "lastModified": 1, 8552 "lastModified": 1,
@@ -8519,8 +8606,8 @@
8519 }, 8606 },
8520 "s-private-ssh": { 8607 "s-private-ssh": {
8521 "inputs": { 8608 "inputs": {
8522 "environment": "environment_31", 8609 "environment": "environment_34",
8523 "secrets": "secrets_24" 8610 "secrets": "secrets_27"
8524 }, 8611 },
8525 "locked": { 8612 "locked": {
8526 "lastModified": 1, 8613 "lastModified": 1,
@@ -8536,7 +8623,7 @@
8536 "s-private-system": { 8623 "s-private-system": {
8537 "inputs": { 8624 "inputs": {
8538 "backports": "backports_7", 8625 "backports": "backports_7",
8539 "environment": "environment_32", 8626 "environment": "environment_35",
8540 "mypackages": "mypackages_12", 8627 "mypackages": "mypackages_12",
8541 "myuids": "myuids_42", 8628 "myuids": "myuids_42",
8542 "secrets-public": "secrets-public_7" 8629 "secrets-public": "secrets-public_7"
@@ -8783,11 +8870,11 @@
8783 "locked": { 8870 "locked": {
8784 "lastModified": 1, 8871 "lastModified": 1,
8785 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 8872 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8786 "path": "../../flakes/secrets", 8873 "path": "../../secrets",
8787 "type": "path" 8874 "type": "path"
8788 }, 8875 },
8789 "original": { 8876 "original": {
8790 "path": "../../flakes/secrets", 8877 "path": "../../secrets",
8791 "type": "path" 8878 "type": "path"
8792 } 8879 }
8793 }, 8880 },
@@ -8843,11 +8930,11 @@
8843 "locked": { 8930 "locked": {
8844 "lastModified": 1, 8931 "lastModified": 1,
8845 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 8932 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8846 "path": "../../secrets", 8933 "path": "../../flakes/secrets",
8847 "type": "path" 8934 "type": "path"
8848 }, 8935 },
8849 "original": { 8936 "original": {
8850 "path": "../../secrets", 8937 "path": "../../flakes/secrets",
8851 "type": "path" 8938 "type": "path"
8852 } 8939 }
8853 }, 8940 },
@@ -8902,6 +8989,42 @@
8902 "secrets_25": { 8989 "secrets_25": {
8903 "locked": { 8990 "locked": {
8904 "lastModified": 1, 8991 "lastModified": 1,
8992 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8993 "path": "../../secrets",
8994 "type": "path"
8995 },
8996 "original": {
8997 "path": "../../secrets",
8998 "type": "path"
8999 }
9000 },
9001 "secrets_26": {
9002 "locked": {
9003 "lastModified": 1,
9004 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
9005 "path": "../../secrets",
9006 "type": "path"
9007 },
9008 "original": {
9009 "path": "../../secrets",
9010 "type": "path"
9011 }
9012 },
9013 "secrets_27": {
9014 "locked": {
9015 "lastModified": 1,
9016 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
9017 "path": "../../secrets",
9018 "type": "path"
9019 },
9020 "original": {
9021 "path": "../../secrets",
9022 "type": "path"
9023 }
9024 },
9025 "secrets_28": {
9026 "locked": {
9027 "lastModified": 1,
8905 "narHash": "sha256-yvhc2jxW1AQVmtrKPoYPr5DgpXKt/ua+ATuxvE3iY6c=", 9028 "narHash": "sha256-yvhc2jxW1AQVmtrKPoYPr5DgpXKt/ua+ATuxvE3iY6c=",
8906 "path": "./private/environment-dummy", 9029 "path": "./private/environment-dummy",
8907 "type": "path" 9030 "type": "path"
@@ -8951,11 +9074,11 @@
8951 "locked": { 9074 "locked": {
8952 "lastModified": 1, 9075 "lastModified": 1,
8953 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 9076 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8954 "path": "../../flakes/secrets", 9077 "path": "../../secrets",
8955 "type": "path" 9078 "type": "path"
8956 }, 9079 },
8957 "original": { 9080 "original": {
8958 "path": "../../flakes/secrets", 9081 "path": "../../secrets",
8959 "type": "path" 9082 "type": "path"
8960 } 9083 }
8961 }, 9084 },
@@ -8963,11 +9086,11 @@
8963 "locked": { 9086 "locked": {
8964 "lastModified": 1, 9087 "lastModified": 1,
8965 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 9088 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8966 "path": "../../secrets", 9089 "path": "../../flakes/secrets",
8967 "type": "path" 9090 "type": "path"
8968 }, 9091 },
8969 "original": { 9092 "original": {
8970 "path": "../../secrets", 9093 "path": "../../flakes/secrets",
8971 "type": "path" 9094 "type": "path"
8972 } 9095 }
8973 }, 9096 },
@@ -8975,11 +9098,11 @@
8975 "locked": { 9098 "locked": {
8976 "lastModified": 1, 9099 "lastModified": 1,
8977 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 9100 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8978 "path": "../../flakes/secrets", 9101 "path": "../../secrets",
8979 "type": "path" 9102 "type": "path"
8980 }, 9103 },
8981 "original": { 9104 "original": {
8982 "path": "../../flakes/secrets", 9105 "path": "../../secrets",
8983 "type": "path" 9106 "type": "path"
8984 } 9107 }
8985 }, 9108 },
@@ -8987,11 +9110,11 @@
8987 "locked": { 9110 "locked": {
8988 "lastModified": 1, 9111 "lastModified": 1,
8989 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 9112 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8990 "path": "../../secrets", 9113 "path": "../../flakes/secrets",
8991 "type": "path" 9114 "type": "path"
8992 }, 9115 },
8993 "original": { 9116 "original": {
8994 "path": "../../secrets", 9117 "path": "../../flakes/secrets",
8995 "type": "path" 9118 "type": "path"
8996 } 9119 }
8997 }, 9120 },
@@ -9142,7 +9265,7 @@
9142 "system": { 9265 "system": {
9143 "inputs": { 9266 "inputs": {
9144 "backports": "backports", 9267 "backports": "backports",
9145 "environment": "environment_7", 9268 "environment": "environment_8",
9146 "mypackages": "mypackages", 9269 "mypackages": "mypackages",
9147 "myuids": "myuids_6", 9270 "myuids": "myuids_6",
9148 "secrets-public": "secrets-public" 9271 "secrets-public": "secrets-public"
@@ -9161,7 +9284,7 @@
9161 "system_2": { 9284 "system_2": {
9162 "inputs": { 9285 "inputs": {
9163 "backports": "backports_2", 9286 "backports": "backports_2",
9164 "environment": "environment_10", 9287 "environment": "environment_11",
9165 "mypackages": "mypackages_2", 9288 "mypackages": "mypackages_2",
9166 "myuids": "myuids_8", 9289 "myuids": "myuids_8",
9167 "secrets-public": "secrets-public_2" 9290 "secrets-public": "secrets-public_2"
@@ -9180,7 +9303,7 @@
9180 "system_3": { 9303 "system_3": {
9181 "inputs": { 9304 "inputs": {
9182 "backports": "backports_4", 9305 "backports": "backports_4",
9183 "environment": "environment_21", 9306 "environment": "environment_23",
9184 "mypackages": "mypackages_7", 9307 "mypackages": "mypackages_7",
9185 "myuids": "myuids_24", 9308 "myuids": "myuids_24",
9186 "secrets-public": "secrets-public_4" 9309 "secrets-public": "secrets-public_4"
@@ -9199,7 +9322,7 @@
9199 "system_4": { 9322 "system_4": {
9200 "inputs": { 9323 "inputs": {
9201 "backports": "backports_5", 9324 "backports": "backports_5",
9202 "environment": "environment_24", 9325 "environment": "environment_26",
9203 "mypackages": "mypackages_8", 9326 "mypackages": "mypackages_8",
9204 "myuids": "myuids_27", 9327 "myuids": "myuids_27",
9205 "secrets-public": "secrets-public_5" 9328 "secrets-public": "secrets-public_5"
diff --git a/flakes/flake.lock b/flakes/flake.lock
index cbdd1a3..86fa845 100644
--- a/flakes/flake.lock
+++ b/flakes/flake.lock
@@ -112,6 +112,22 @@
112 "type": "path" 112 "type": "path"
113 } 113 }
114 }, 114 },
115 "borg-backup": {
116 "inputs": {
117 "environment": "environment",
118 "secrets": "secrets"
119 },
120 "locked": {
121 "lastModified": 1,
122 "narHash": "sha256-6IB+N7TeH+3XyK8nwlEX4LGl3EJJLVoESteotut3OUc=",
123 "path": "../../flakes/private/borg_backup",
124 "type": "path"
125 },
126 "original": {
127 "path": "../../flakes/private/borg_backup",
128 "type": "path"
129 }
130 },
115 "buildslist": { 131 "buildslist": {
116 "flake": false, 132 "flake": false,
117 "locked": { 133 "locked": {
@@ -146,7 +162,7 @@
146 }, 162 },
147 "chatons": { 163 "chatons": {
148 "inputs": { 164 "inputs": {
149 "environment": "environment" 165 "environment": "environment_2"
150 }, 166 },
151 "locked": { 167 "locked": {
152 "lastModified": 1, 168 "lastModified": 1,
@@ -161,7 +177,7 @@
161 }, 177 },
162 "chatons_2": { 178 "chatons_2": {
163 "inputs": { 179 "inputs": {
164 "environment": "environment_17" 180 "environment": "environment_19"
165 }, 181 },
166 "locked": { 182 "locked": {
167 "lastModified": 1, 183 "lastModified": 1,
@@ -654,11 +670,11 @@
654 "locked": { 670 "locked": {
655 "lastModified": 1, 671 "lastModified": 1,
656 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 672 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
657 "path": "../../flakes/private/environment", 673 "path": "../environment",
658 "type": "path" 674 "type": "path"
659 }, 675 },
660 "original": { 676 "original": {
661 "path": "../../flakes/private/environment", 677 "path": "../environment",
662 "type": "path" 678 "type": "path"
663 } 679 }
664 }, 680 },
@@ -678,11 +694,11 @@
678 "locked": { 694 "locked": {
679 "lastModified": 1, 695 "lastModified": 1,
680 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 696 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
681 "path": "../../flakes/private/environment", 697 "path": "../environment",
682 "type": "path" 698 "type": "path"
683 }, 699 },
684 "original": { 700 "original": {
685 "path": "../../flakes/private/environment", 701 "path": "../environment",
686 "type": "path" 702 "type": "path"
687 } 703 }
688 }, 704 },
@@ -690,11 +706,11 @@
690 "locked": { 706 "locked": {
691 "lastModified": 1, 707 "lastModified": 1,
692 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 708 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
693 "path": "../environment", 709 "path": "../../flakes/private/environment",
694 "type": "path" 710 "type": "path"
695 }, 711 },
696 "original": { 712 "original": {
697 "path": "../environment", 713 "path": "../../flakes/private/environment",
698 "type": "path" 714 "type": "path"
699 } 715 }
700 }, 716 },
@@ -714,11 +730,11 @@
714 "locked": { 730 "locked": {
715 "lastModified": 1, 731 "lastModified": 1,
716 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 732 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
717 "path": "../../flakes/private/environment", 733 "path": "../environment",
718 "type": "path" 734 "type": "path"
719 }, 735 },
720 "original": { 736 "original": {
721 "path": "../../flakes/private/environment", 737 "path": "../environment",
722 "type": "path" 738 "type": "path"
723 } 739 }
724 }, 740 },
@@ -738,11 +754,11 @@
738 "locked": { 754 "locked": {
739 "lastModified": 1, 755 "lastModified": 1,
740 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 756 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
741 "path": "../environment", 757 "path": "../../flakes/private/environment",
742 "type": "path" 758 "type": "path"
743 }, 759 },
744 "original": { 760 "original": {
745 "path": "../environment", 761 "path": "../../flakes/private/environment",
746 "type": "path" 762 "type": "path"
747 } 763 }
748 }, 764 },
@@ -810,11 +826,11 @@
810 "locked": { 826 "locked": {
811 "lastModified": 1, 827 "lastModified": 1,
812 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 828 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
813 "path": "../environment", 829 "path": "../../flakes/private/environment",
814 "type": "path" 830 "type": "path"
815 }, 831 },
816 "original": { 832 "original": {
817 "path": "../environment", 833 "path": "../../flakes/private/environment",
818 "type": "path" 834 "type": "path"
819 } 835 }
820 }, 836 },
@@ -854,6 +870,42 @@
854 "type": "path" 870 "type": "path"
855 } 871 }
856 }, 872 },
873 "environment_33": {
874 "locked": {
875 "lastModified": 1,
876 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
877 "path": "../environment",
878 "type": "path"
879 },
880 "original": {
881 "path": "../environment",
882 "type": "path"
883 }
884 },
885 "environment_34": {
886 "locked": {
887 "lastModified": 1,
888 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
889 "path": "../environment",
890 "type": "path"
891 },
892 "original": {
893 "path": "../environment",
894 "type": "path"
895 }
896 },
897 "environment_35": {
898 "locked": {
899 "lastModified": 1,
900 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
901 "path": "../environment",
902 "type": "path"
903 },
904 "original": {
905 "path": "../environment",
906 "type": "path"
907 }
908 },
857 "environment_4": { 909 "environment_4": {
858 "locked": { 910 "locked": {
859 "lastModified": 1, 911 "lastModified": 1,
@@ -906,11 +958,11 @@
906 "locked": { 958 "locked": {
907 "lastModified": 1, 959 "lastModified": 1,
908 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 960 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
909 "path": "../../flakes/private/environment", 961 "path": "../environment",
910 "type": "path" 962 "type": "path"
911 }, 963 },
912 "original": { 964 "original": {
913 "path": "../../flakes/private/environment", 965 "path": "../environment",
914 "type": "path" 966 "type": "path"
915 } 967 }
916 }, 968 },
@@ -918,11 +970,11 @@
918 "locked": { 970 "locked": {
919 "lastModified": 1, 971 "lastModified": 1,
920 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 972 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
921 "path": "../environment", 973 "path": "../../flakes/private/environment",
922 "type": "path" 974 "type": "path"
923 }, 975 },
924 "original": { 976 "original": {
925 "path": "../environment", 977 "path": "../../flakes/private/environment",
926 "type": "path" 978 "type": "path"
927 } 979 }
928 }, 980 },
@@ -2683,8 +2735,8 @@
2683 }, 2735 },
2684 "mail-relay": { 2736 "mail-relay": {
2685 "inputs": { 2737 "inputs": {
2686 "environment": "environment_3", 2738 "environment": "environment_4",
2687 "secrets": "secrets" 2739 "secrets": "secrets_2"
2688 }, 2740 },
2689 "locked": { 2741 "locked": {
2690 "lastModified": 1, 2742 "lastModified": 1,
@@ -2699,8 +2751,8 @@
2699 }, 2751 },
2700 "mail-relay_2": { 2752 "mail-relay_2": {
2701 "inputs": { 2753 "inputs": {
2702 "environment": "environment_19", 2754 "environment": "environment_21",
2703 "secrets": "secrets_14" 2755 "secrets": "secrets_16"
2704 }, 2756 },
2705 "locked": { 2757 "locked": {
2706 "lastModified": 1, 2758 "lastModified": 1,
@@ -2789,11 +2841,11 @@
2789 }, 2841 },
2790 "milters": { 2842 "milters": {
2791 "inputs": { 2843 "inputs": {
2792 "environment": "environment_4", 2844 "environment": "environment_5",
2793 "files-watcher": "files-watcher", 2845 "files-watcher": "files-watcher",
2794 "openarc": "openarc", 2846 "openarc": "openarc",
2795 "opendmarc": "opendmarc", 2847 "opendmarc": "opendmarc",
2796 "secrets": "secrets_2" 2848 "secrets": "secrets_3"
2797 }, 2849 },
2798 "locked": { 2850 "locked": {
2799 "lastModified": 1, 2851 "lastModified": 1,
@@ -2808,10 +2860,10 @@
2808 }, 2860 },
2809 "monitoring": { 2861 "monitoring": {
2810 "inputs": { 2862 "inputs": {
2811 "environment": "environment_5", 2863 "environment": "environment_6",
2812 "naemon": "naemon", 2864 "naemon": "naemon",
2813 "nixpkgs-lib": "nixpkgs-lib", 2865 "nixpkgs-lib": "nixpkgs-lib",
2814 "secrets": "secrets_3" 2866 "secrets": "secrets_4"
2815 }, 2867 },
2816 "locked": { 2868 "locked": {
2817 "lastModified": 1, 2869 "lastModified": 1,
@@ -2826,10 +2878,10 @@
2826 }, 2878 },
2827 "monitoring_2": { 2879 "monitoring_2": {
2828 "inputs": { 2880 "inputs": {
2829 "environment": "environment_9", 2881 "environment": "environment_10",
2830 "naemon": "naemon_2", 2882 "naemon": "naemon_2",
2831 "nixpkgs-lib": "nixpkgs-lib_4", 2883 "nixpkgs-lib": "nixpkgs-lib_4",
2832 "secrets": "secrets_7" 2884 "secrets": "secrets_8"
2833 }, 2885 },
2834 "locked": { 2886 "locked": {
2835 "lastModified": 1, 2887 "lastModified": 1,
@@ -2844,10 +2896,10 @@
2844 }, 2896 },
2845 "monitoring_3": { 2897 "monitoring_3": {
2846 "inputs": { 2898 "inputs": {
2847 "environment": "environment_20", 2899 "environment": "environment_22",
2848 "naemon": "naemon_4", 2900 "naemon": "naemon_4",
2849 "nixpkgs-lib": "nixpkgs-lib_14", 2901 "nixpkgs-lib": "nixpkgs-lib_14",
2850 "secrets": "secrets_15" 2902 "secrets": "secrets_17"
2851 }, 2903 },
2852 "locked": { 2904 "locked": {
2853 "lastModified": 1, 2905 "lastModified": 1,
@@ -2862,10 +2914,10 @@
2862 }, 2914 },
2863 "monitoring_4": { 2915 "monitoring_4": {
2864 "inputs": { 2916 "inputs": {
2865 "environment": "environment_23", 2917 "environment": "environment_25",
2866 "naemon": "naemon_5", 2918 "naemon": "naemon_5",
2867 "nixpkgs-lib": "nixpkgs-lib_17", 2919 "nixpkgs-lib": "nixpkgs-lib_17",
2868 "secrets": "secrets_17" 2920 "secrets": "secrets_19"
2869 }, 2921 },
2870 "locked": { 2922 "locked": {
2871 "lastModified": 1, 2923 "lastModified": 1,
@@ -3735,8 +3787,9 @@
3735 }, 3787 },
3736 "n-backup-2": { 3788 "n-backup-2": {
3737 "inputs": { 3789 "inputs": {
3790 "borg-backup": "borg-backup",
3738 "chatons": "chatons", 3791 "chatons": "chatons",
3739 "environment": "environment_2", 3792 "environment": "environment_3",
3740 "loginctl-linger": "loginctl-linger", 3793 "loginctl-linger": "loginctl-linger",
3741 "mail-relay": "mail-relay", 3794 "mail-relay": "mail-relay",
3742 "milters": "milters", 3795 "milters": "milters",
@@ -3748,12 +3801,12 @@
3748 "opendmarc": "opendmarc_2", 3801 "opendmarc": "opendmarc_2",
3749 "openldap": "openldap", 3802 "openldap": "openldap",
3750 "rsync_backup": "rsync_backup", 3803 "rsync_backup": "rsync_backup",
3751 "secrets": "secrets_6", 3804 "secrets": "secrets_7",
3752 "system": "system" 3805 "system": "system"
3753 }, 3806 },
3754 "locked": { 3807 "locked": {
3755 "lastModified": 1, 3808 "lastModified": 1,
3756 "narHash": "sha256-EPkvkGTy7RlhCXcngA/zGfXuiai7kE8YSL2siYe8HOI=", 3809 "narHash": "sha256-gnCoyp6EcUzjBhmNrPel4ZzhK2nK6VLBziYJkKiXcuU=",
3757 "path": "../systems/backup-2", 3810 "path": "../systems/backup-2",
3758 "type": "path" 3811 "type": "path"
3759 }, 3812 },
@@ -3764,14 +3817,14 @@
3764 }, 3817 },
3765 "n-dilion": { 3818 "n-dilion": {
3766 "inputs": { 3819 "inputs": {
3767 "environment": "environment_8", 3820 "environment": "environment_9",
3768 "files-watcher": "files-watcher_4", 3821 "files-watcher": "files-watcher_4",
3769 "loginctl-linger": "loginctl-linger_2", 3822 "loginctl-linger": "loginctl-linger_2",
3770 "monitoring": "monitoring_2", 3823 "monitoring": "monitoring_2",
3771 "my-lib": "my-lib_2", 3824 "my-lib": "my-lib_2",
3772 "myuids": "myuids_7", 3825 "myuids": "myuids_7",
3773 "nixpkgs": "nixpkgs_16", 3826 "nixpkgs": "nixpkgs_16",
3774 "secrets": "secrets_8", 3827 "secrets": "secrets_9",
3775 "system": "system_2" 3828 "system": "system_2"
3776 }, 3829 },
3777 "locked": { 3830 "locked": {
@@ -3790,6 +3843,7 @@
3790 "dns-nix": "dns-nix", 3843 "dns-nix": "dns-nix",
3791 "my-lib": "my-lib_3", 3844 "my-lib": "my-lib_3",
3792 "nixpkgs": "nixpkgs_23", 3845 "nixpkgs": "nixpkgs_23",
3846 "private-borg-backup": "private-borg-backup",
3793 "private-buildbot": "private-buildbot", 3847 "private-buildbot": "private-buildbot",
3794 "private-chatons": "private-chatons", 3848 "private-chatons": "private-chatons",
3795 "private-environment": "private-environment", 3849 "private-environment": "private-environment",
@@ -3824,7 +3878,7 @@
3824 }, 3878 },
3825 "locked": { 3879 "locked": {
3826 "lastModified": 1, 3880 "lastModified": 1,
3827 "narHash": "sha256-GP5n6/p0kgd0lf6KhPZqZxybcUPA38kl054Uo6CWYkE=", 3881 "narHash": "sha256-deESGvYrIO1Luc3tD+a+QGq5w8ZlzZrIkJa6baDWhXE=",
3828 "path": "../systems/eldiron", 3882 "path": "../systems/eldiron",
3829 "type": "path" 3883 "type": "path"
3830 }, 3884 },
@@ -3836,7 +3890,7 @@
3836 "n-monitoring-1": { 3890 "n-monitoring-1": {
3837 "inputs": { 3891 "inputs": {
3838 "chatons": "chatons_2", 3892 "chatons": "chatons_2",
3839 "environment": "environment_18", 3893 "environment": "environment_20",
3840 "files-watcher": "files-watcher_9", 3894 "files-watcher": "files-watcher_9",
3841 "loginctl-linger": "loginctl-linger_3", 3895 "loginctl-linger": "loginctl-linger_3",
3842 "mail-relay": "mail-relay_2", 3896 "mail-relay": "mail-relay_2",
@@ -3845,7 +3899,7 @@
3845 "myuids": "myuids_23", 3899 "myuids": "myuids_23",
3846 "nixpkgs": "nixpkgs_54", 3900 "nixpkgs": "nixpkgs_54",
3847 "ports": "ports", 3901 "ports": "ports",
3848 "secrets": "secrets_16", 3902 "secrets": "secrets_18",
3849 "system": "system_3" 3903 "system": "system_3"
3850 }, 3904 },
3851 "locked": { 3905 "locked": {
@@ -3861,7 +3915,7 @@
3861 }, 3915 },
3862 "n-quatresaisons": { 3916 "n-quatresaisons": {
3863 "inputs": { 3917 "inputs": {
3864 "environment": "environment_22", 3918 "environment": "environment_24",
3865 "files-watcher": "files-watcher_10", 3919 "files-watcher": "files-watcher_10",
3866 "landing-page": "landing-page", 3920 "landing-page": "landing-page",
3867 "monitoring": "monitoring_4", 3921 "monitoring": "monitoring_4",
@@ -3870,7 +3924,7 @@
3870 "myuids": "myuids_26", 3924 "myuids": "myuids_26",
3871 "nixpkgs": "nixpkgs_62", 3925 "nixpkgs": "nixpkgs_62",
3872 "ports": "ports_2", 3926 "ports": "ports_2",
3873 "secrets": "secrets_18", 3927 "secrets": "secrets_20",
3874 "system": "system_4" 3928 "system": "system_4"
3875 }, 3929 },
3876 "locked": { 3930 "locked": {
@@ -6843,7 +6897,7 @@
6843 "inputs": { 6897 "inputs": {
6844 "files-watcher": "files-watcher_2", 6898 "files-watcher": "files-watcher_2",
6845 "openarc": "openarc_4", 6899 "openarc": "openarc_4",
6846 "secrets": "secrets_4" 6900 "secrets": "secrets_5"
6847 }, 6901 },
6848 "locked": { 6902 "locked": {
6849 "lastModified": 1, 6903 "lastModified": 1,
@@ -6977,10 +7031,10 @@
6977 }, 7031 },
6978 "opendmarc_2": { 7032 "opendmarc_2": {
6979 "inputs": { 7033 "inputs": {
6980 "environment": "environment_6", 7034 "environment": "environment_7",
6981 "files-watcher": "files-watcher_3", 7035 "files-watcher": "files-watcher_3",
6982 "opendmarc": "opendmarc_3", 7036 "opendmarc": "opendmarc_3",
6983 "secrets": "secrets_5" 7037 "secrets": "secrets_6"
6984 }, 7038 },
6985 "locked": { 7039 "locked": {
6986 "lastModified": 1, 7040 "lastModified": 1,
@@ -7300,6 +7354,22 @@
7300 "type": "path" 7354 "type": "path"
7301 } 7355 }
7302 }, 7356 },
7357 "private-borg-backup": {
7358 "inputs": {
7359 "environment": "environment_12",
7360 "secrets": "secrets_10"
7361 },
7362 "locked": {
7363 "lastModified": 1,
7364 "narHash": "sha256-6IB+N7TeH+3XyK8nwlEX4LGl3EJJLVoESteotut3OUc=",
7365 "path": "../../flakes/private/borg_backup",
7366 "type": "path"
7367 },
7368 "original": {
7369 "path": "../../flakes/private/borg_backup",
7370 "type": "path"
7371 }
7372 },
7303 "private-buildbot": { 7373 "private-buildbot": {
7304 "inputs": { 7374 "inputs": {
7305 "buildslist": "buildslist", 7375 "buildslist": "buildslist",
@@ -7319,7 +7389,7 @@
7319 }, 7389 },
7320 "private-chatons": { 7390 "private-chatons": {
7321 "inputs": { 7391 "inputs": {
7322 "environment": "environment_11" 7392 "environment": "environment_13"
7323 }, 7393 },
7324 "locked": { 7394 "locked": {
7325 "lastModified": 1, 7395 "lastModified": 1,
@@ -7358,11 +7428,11 @@
7358 }, 7428 },
7359 "private-milters": { 7429 "private-milters": {
7360 "inputs": { 7430 "inputs": {
7361 "environment": "environment_12", 7431 "environment": "environment_14",
7362 "files-watcher": "files-watcher_5", 7432 "files-watcher": "files-watcher_5",
7363 "openarc": "openarc_6", 7433 "openarc": "openarc_6",
7364 "opendmarc": "opendmarc_4", 7434 "opendmarc": "opendmarc_4",
7365 "secrets": "secrets_9" 7435 "secrets": "secrets_11"
7366 }, 7436 },
7367 "locked": { 7437 "locked": {
7368 "lastModified": 1, 7438 "lastModified": 1,
@@ -7377,10 +7447,10 @@
7377 }, 7447 },
7378 "private-monitoring": { 7448 "private-monitoring": {
7379 "inputs": { 7449 "inputs": {
7380 "environment": "environment_13", 7450 "environment": "environment_15",
7381 "naemon": "naemon_3", 7451 "naemon": "naemon_3",
7382 "nixpkgs-lib": "nixpkgs-lib_8", 7452 "nixpkgs-lib": "nixpkgs-lib_8",
7383 "secrets": "secrets_10" 7453 "secrets": "secrets_12"
7384 }, 7454 },
7385 "locked": { 7455 "locked": {
7386 "lastModified": 1, 7456 "lastModified": 1,
@@ -7397,7 +7467,7 @@
7397 "inputs": { 7467 "inputs": {
7398 "files-watcher": "files-watcher_6", 7468 "files-watcher": "files-watcher_6",
7399 "openarc": "openarc_8", 7469 "openarc": "openarc_8",
7400 "secrets": "secrets_11" 7470 "secrets": "secrets_13"
7401 }, 7471 },
7402 "locked": { 7472 "locked": {
7403 "lastModified": 1, 7473 "lastModified": 1,
@@ -7412,10 +7482,10 @@
7412 }, 7482 },
7413 "private-opendmarc": { 7483 "private-opendmarc": {
7414 "inputs": { 7484 "inputs": {
7415 "environment": "environment_14", 7485 "environment": "environment_16",
7416 "files-watcher": "files-watcher_7", 7486 "files-watcher": "files-watcher_7",
7417 "opendmarc": "opendmarc_5", 7487 "opendmarc": "opendmarc_5",
7418 "secrets": "secrets_12" 7488 "secrets": "secrets_14"
7419 }, 7489 },
7420 "locked": { 7490 "locked": {
7421 "lastModified": 1, 7491 "lastModified": 1,
@@ -7475,8 +7545,8 @@
7475 }, 7545 },
7476 "private-ssh": { 7546 "private-ssh": {
7477 "inputs": { 7547 "inputs": {
7478 "environment": "environment_15", 7548 "environment": "environment_17",
7479 "secrets": "secrets_13" 7549 "secrets": "secrets_15"
7480 }, 7550 },
7481 "locked": { 7551 "locked": {
7482 "lastModified": 1, 7552 "lastModified": 1,
@@ -7492,7 +7562,7 @@
7492 "private-system": { 7562 "private-system": {
7493 "inputs": { 7563 "inputs": {
7494 "backports": "backports_3", 7564 "backports": "backports_3",
7495 "environment": "environment_16", 7565 "environment": "environment_18",
7496 "mypackages": "mypackages_3", 7566 "mypackages": "mypackages_3",
7497 "myuids": "myuids_15", 7567 "myuids": "myuids_15",
7498 "secrets-public": "secrets-public_3" 7568 "secrets-public": "secrets-public_3"
@@ -7511,7 +7581,7 @@
7511 "private-system_2": { 7581 "private-system_2": {
7512 "inputs": { 7582 "inputs": {
7513 "backports": "backports_6", 7583 "backports": "backports_6",
7514 "environment": "environment_25", 7584 "environment": "environment_27",
7515 "mypackages": "mypackages_9", 7585 "mypackages": "mypackages_9",
7516 "myuids": "myuids_28", 7586 "myuids": "myuids_28",
7517 "secrets-public": "secrets-public_6" 7587 "secrets-public": "secrets-public_6"
@@ -7870,6 +7940,7 @@
7870 "s-opendmarc": "s-opendmarc", 7940 "s-opendmarc": "s-opendmarc",
7871 "s-paste": "s-paste", 7941 "s-paste": "s-paste",
7872 "s-peertube": "s-peertube", 7942 "s-peertube": "s-peertube",
7943 "s-private-borg-backup": "s-private-borg-backup",
7873 "s-private-buildbot": "s-private-buildbot", 7944 "s-private-buildbot": "s-private-buildbot",
7874 "s-private-chatons": "s-private-chatons", 7945 "s-private-chatons": "s-private-chatons",
7875 "s-private-environment": "s-private-environment", 7946 "s-private-environment": "s-private-environment",
@@ -7887,7 +7958,7 @@
7887 "s-secrets": "s-secrets", 7958 "s-secrets": "s-secrets",
7888 "s-surfer": "s-surfer", 7959 "s-surfer": "s-surfer",
7889 "s-taskwarrior-web": "s-taskwarrior-web", 7960 "s-taskwarrior-web": "s-taskwarrior-web",
7890 "secrets": "secrets_25" 7961 "secrets": "secrets_28"
7891 } 7962 }
7892 }, 7963 },
7893 "rsync_backup": { 7964 "rsync_backup": {
@@ -8206,6 +8277,22 @@
8206 "type": "path" 8277 "type": "path"
8207 } 8278 }
8208 }, 8279 },
8280 "s-private-borg-backup": {
8281 "inputs": {
8282 "environment": "environment_28",
8283 "secrets": "secrets_21"
8284 },
8285 "locked": {
8286 "lastModified": 1,
8287 "narHash": "sha256-6IB+N7TeH+3XyK8nwlEX4LGl3EJJLVoESteotut3OUc=",
8288 "path": "./private/borg_backup",
8289 "type": "path"
8290 },
8291 "original": {
8292 "path": "./private/borg_backup",
8293 "type": "path"
8294 }
8295 },
8209 "s-private-buildbot": { 8296 "s-private-buildbot": {
8210 "inputs": { 8297 "inputs": {
8211 "buildslist": "buildslist_2", 8298 "buildslist": "buildslist_2",
@@ -8225,7 +8312,7 @@
8225 }, 8312 },
8226 "s-private-chatons": { 8313 "s-private-chatons": {
8227 "inputs": { 8314 "inputs": {
8228 "environment": "environment_26" 8315 "environment": "environment_29"
8229 }, 8316 },
8230 "locked": { 8317 "locked": {
8231 "lastModified": 1, 8318 "lastModified": 1,
@@ -8252,8 +8339,8 @@
8252 }, 8339 },
8253 "s-private-mail-relay": { 8340 "s-private-mail-relay": {
8254 "inputs": { 8341 "inputs": {
8255 "environment": "environment_27", 8342 "environment": "environment_30",
8256 "secrets": "secrets_19" 8343 "secrets": "secrets_22"
8257 }, 8344 },
8258 "locked": { 8345 "locked": {
8259 "lastModified": 1, 8346 "lastModified": 1,
@@ -8268,11 +8355,11 @@
8268 }, 8355 },
8269 "s-private-milters": { 8356 "s-private-milters": {
8270 "inputs": { 8357 "inputs": {
8271 "environment": "environment_28", 8358 "environment": "environment_31",
8272 "files-watcher": "files-watcher_13", 8359 "files-watcher": "files-watcher_13",
8273 "openarc": "openarc_12", 8360 "openarc": "openarc_12",
8274 "opendmarc": "opendmarc_6", 8361 "opendmarc": "opendmarc_6",
8275 "secrets": "secrets_20" 8362 "secrets": "secrets_23"
8276 }, 8363 },
8277 "locked": { 8364 "locked": {
8278 "lastModified": 1, 8365 "lastModified": 1,
@@ -8287,10 +8374,10 @@
8287 }, 8374 },
8288 "s-private-monitoring": { 8375 "s-private-monitoring": {
8289 "inputs": { 8376 "inputs": {
8290 "environment": "environment_29", 8377 "environment": "environment_32",
8291 "naemon": "naemon_6", 8378 "naemon": "naemon_6",
8292 "nixpkgs-lib": "nixpkgs-lib_26", 8379 "nixpkgs-lib": "nixpkgs-lib_26",
8293 "secrets": "secrets_21" 8380 "secrets": "secrets_24"
8294 }, 8381 },
8295 "locked": { 8382 "locked": {
8296 "lastModified": 1, 8383 "lastModified": 1,
@@ -8307,7 +8394,7 @@
8307 "inputs": { 8394 "inputs": {
8308 "files-watcher": "files-watcher_14", 8395 "files-watcher": "files-watcher_14",
8309 "openarc": "openarc_14", 8396 "openarc": "openarc_14",
8310 "secrets": "secrets_22" 8397 "secrets": "secrets_25"
8311 }, 8398 },
8312 "locked": { 8399 "locked": {
8313 "lastModified": 1, 8400 "lastModified": 1,
@@ -8322,10 +8409,10 @@
8322 }, 8409 },
8323 "s-private-opendmarc": { 8410 "s-private-opendmarc": {
8324 "inputs": { 8411 "inputs": {
8325 "environment": "environment_30", 8412 "environment": "environment_33",
8326 "files-watcher": "files-watcher_15", 8413 "files-watcher": "files-watcher_15",
8327 "opendmarc": "opendmarc_7", 8414 "opendmarc": "opendmarc_7",
8328 "secrets": "secrets_23" 8415 "secrets": "secrets_26"
8329 }, 8416 },
8330 "locked": { 8417 "locked": {
8331 "lastModified": 1, 8418 "lastModified": 1,
@@ -8385,8 +8472,8 @@
8385 }, 8472 },
8386 "s-private-ssh": { 8473 "s-private-ssh": {
8387 "inputs": { 8474 "inputs": {
8388 "environment": "environment_31", 8475 "environment": "environment_34",
8389 "secrets": "secrets_24" 8476 "secrets": "secrets_27"
8390 }, 8477 },
8391 "locked": { 8478 "locked": {
8392 "lastModified": 1, 8479 "lastModified": 1,
@@ -8402,7 +8489,7 @@
8402 "s-private-system": { 8489 "s-private-system": {
8403 "inputs": { 8490 "inputs": {
8404 "backports": "backports_7", 8491 "backports": "backports_7",
8405 "environment": "environment_32", 8492 "environment": "environment_35",
8406 "mypackages": "mypackages_12", 8493 "mypackages": "mypackages_12",
8407 "myuids": "myuids_42", 8494 "myuids": "myuids_42",
8408 "secrets-public": "secrets-public_7" 8495 "secrets-public": "secrets-public_7"
@@ -8649,11 +8736,11 @@
8649 "locked": { 8736 "locked": {
8650 "lastModified": 1, 8737 "lastModified": 1,
8651 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 8738 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8652 "path": "../../flakes/secrets", 8739 "path": "../../secrets",
8653 "type": "path" 8740 "type": "path"
8654 }, 8741 },
8655 "original": { 8742 "original": {
8656 "path": "../../flakes/secrets", 8743 "path": "../../secrets",
8657 "type": "path" 8744 "type": "path"
8658 } 8745 }
8659 }, 8746 },
@@ -8709,11 +8796,11 @@
8709 "locked": { 8796 "locked": {
8710 "lastModified": 1, 8797 "lastModified": 1,
8711 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 8798 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8712 "path": "../../secrets", 8799 "path": "../../flakes/secrets",
8713 "type": "path" 8800 "type": "path"
8714 }, 8801 },
8715 "original": { 8802 "original": {
8716 "path": "../../secrets", 8803 "path": "../../flakes/secrets",
8717 "type": "path" 8804 "type": "path"
8718 } 8805 }
8719 }, 8806 },
@@ -8768,6 +8855,42 @@
8768 "secrets_25": { 8855 "secrets_25": {
8769 "locked": { 8856 "locked": {
8770 "lastModified": 1, 8857 "lastModified": 1,
8858 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8859 "path": "../../secrets",
8860 "type": "path"
8861 },
8862 "original": {
8863 "path": "../../secrets",
8864 "type": "path"
8865 }
8866 },
8867 "secrets_26": {
8868 "locked": {
8869 "lastModified": 1,
8870 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8871 "path": "../../secrets",
8872 "type": "path"
8873 },
8874 "original": {
8875 "path": "../../secrets",
8876 "type": "path"
8877 }
8878 },
8879 "secrets_27": {
8880 "locked": {
8881 "lastModified": 1,
8882 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8883 "path": "../../secrets",
8884 "type": "path"
8885 },
8886 "original": {
8887 "path": "../../secrets",
8888 "type": "path"
8889 }
8890 },
8891 "secrets_28": {
8892 "locked": {
8893 "lastModified": 1,
8771 "narHash": "sha256-yvhc2jxW1AQVmtrKPoYPr5DgpXKt/ua+ATuxvE3iY6c=", 8894 "narHash": "sha256-yvhc2jxW1AQVmtrKPoYPr5DgpXKt/ua+ATuxvE3iY6c=",
8772 "path": "./private/environment-dummy", 8895 "path": "./private/environment-dummy",
8773 "type": "path" 8896 "type": "path"
@@ -8817,11 +8940,11 @@
8817 "locked": { 8940 "locked": {
8818 "lastModified": 1, 8941 "lastModified": 1,
8819 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 8942 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8820 "path": "../../flakes/secrets", 8943 "path": "../../secrets",
8821 "type": "path" 8944 "type": "path"
8822 }, 8945 },
8823 "original": { 8946 "original": {
8824 "path": "../../flakes/secrets", 8947 "path": "../../secrets",
8825 "type": "path" 8948 "type": "path"
8826 } 8949 }
8827 }, 8950 },
@@ -8829,11 +8952,11 @@
8829 "locked": { 8952 "locked": {
8830 "lastModified": 1, 8953 "lastModified": 1,
8831 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 8954 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8832 "path": "../../secrets", 8955 "path": "../../flakes/secrets",
8833 "type": "path" 8956 "type": "path"
8834 }, 8957 },
8835 "original": { 8958 "original": {
8836 "path": "../../secrets", 8959 "path": "../../flakes/secrets",
8837 "type": "path" 8960 "type": "path"
8838 } 8961 }
8839 }, 8962 },
@@ -8841,11 +8964,11 @@
8841 "locked": { 8964 "locked": {
8842 "lastModified": 1, 8965 "lastModified": 1,
8843 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 8966 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8844 "path": "../../flakes/secrets", 8967 "path": "../../secrets",
8845 "type": "path" 8968 "type": "path"
8846 }, 8969 },
8847 "original": { 8970 "original": {
8848 "path": "../../flakes/secrets", 8971 "path": "../../secrets",
8849 "type": "path" 8972 "type": "path"
8850 } 8973 }
8851 }, 8974 },
@@ -8853,11 +8976,11 @@
8853 "locked": { 8976 "locked": {
8854 "lastModified": 1, 8977 "lastModified": 1,
8855 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 8978 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
8856 "path": "../../secrets", 8979 "path": "../../flakes/secrets",
8857 "type": "path" 8980 "type": "path"
8858 }, 8981 },
8859 "original": { 8982 "original": {
8860 "path": "../../secrets", 8983 "path": "../../flakes/secrets",
8861 "type": "path" 8984 "type": "path"
8862 } 8985 }
8863 }, 8986 },
@@ -9008,7 +9131,7 @@
9008 "system": { 9131 "system": {
9009 "inputs": { 9132 "inputs": {
9010 "backports": "backports", 9133 "backports": "backports",
9011 "environment": "environment_7", 9134 "environment": "environment_8",
9012 "mypackages": "mypackages", 9135 "mypackages": "mypackages",
9013 "myuids": "myuids_6", 9136 "myuids": "myuids_6",
9014 "secrets-public": "secrets-public" 9137 "secrets-public": "secrets-public"
@@ -9027,7 +9150,7 @@
9027 "system_2": { 9150 "system_2": {
9028 "inputs": { 9151 "inputs": {
9029 "backports": "backports_2", 9152 "backports": "backports_2",
9030 "environment": "environment_10", 9153 "environment": "environment_11",
9031 "mypackages": "mypackages_2", 9154 "mypackages": "mypackages_2",
9032 "myuids": "myuids_8", 9155 "myuids": "myuids_8",
9033 "secrets-public": "secrets-public_2" 9156 "secrets-public": "secrets-public_2"
@@ -9046,7 +9169,7 @@
9046 "system_3": { 9169 "system_3": {
9047 "inputs": { 9170 "inputs": {
9048 "backports": "backports_4", 9171 "backports": "backports_4",
9049 "environment": "environment_21", 9172 "environment": "environment_23",
9050 "mypackages": "mypackages_7", 9173 "mypackages": "mypackages_7",
9051 "myuids": "myuids_24", 9174 "myuids": "myuids_24",
9052 "secrets-public": "secrets-public_4" 9175 "secrets-public": "secrets-public_4"
@@ -9065,7 +9188,7 @@
9065 "system_4": { 9188 "system_4": {
9066 "inputs": { 9189 "inputs": {
9067 "backports": "backports_5", 9190 "backports": "backports_5",
9068 "environment": "environment_24", 9191 "environment": "environment_26",
9069 "mypackages": "mypackages_8", 9192 "mypackages": "mypackages_8",
9070 "myuids": "myuids_27", 9193 "myuids": "myuids_27",
9071 "secrets-public": "secrets-public_5" 9194 "secrets-public": "secrets-public_5"
diff --git a/flakes/flake.nix b/flakes/flake.nix
index 95498de..2db031d 100644
--- a/flakes/flake.nix
+++ b/flakes/flake.nix
@@ -25,6 +25,7 @@
25 s-surfer.url = "path:./surfer"; 25 s-surfer.url = "path:./surfer";
26 s-taskwarrior-web.url = "path:./taskwarrior-web"; 26 s-taskwarrior-web.url = "path:./taskwarrior-web";
27 27
28 s-private-borg-backup.url = "path:./private/borg_backup";
28 s-private-buildbot.url = "path:./private/buildbot"; 29 s-private-buildbot.url = "path:./private/buildbot";
29 s-private-chatons.url = "path:./private/chatons"; 30 s-private-chatons.url = "path:./private/chatons";
30 s-private-environment.url = "path:./private/environment"; 31 s-private-environment.url = "path:./private/environment";
diff --git a/flakes/private/borg_backup/flake.lock b/flakes/private/borg_backup/flake.lock
new file mode 100644
index 0000000..4d620ad
--- /dev/null
+++ b/flakes/private/borg_backup/flake.lock
@@ -0,0 +1,36 @@
1{
2 "nodes": {
3 "environment": {
4 "locked": {
5 "lastModified": 1,
6 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
7 "path": "../environment",
8 "type": "path"
9 },
10 "original": {
11 "path": "../environment",
12 "type": "path"
13 }
14 },
15 "root": {
16 "inputs": {
17 "environment": "environment",
18 "secrets": "secrets"
19 }
20 },
21 "secrets": {
22 "locked": {
23 "lastModified": 1,
24 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
25 "path": "../../secrets",
26 "type": "path"
27 },
28 "original": {
29 "path": "../../secrets",
30 "type": "path"
31 }
32 }
33 },
34 "root": "root",
35 "version": 7
36}
diff --git a/flakes/private/borg_backup/flake.nix b/flakes/private/borg_backup/flake.nix
new file mode 100644
index 0000000..ad7d6eb
--- /dev/null
+++ b/flakes/private/borg_backup/flake.nix
@@ -0,0 +1,321 @@
1{
2 inputs.environment.url = "path:../environment";
3 inputs.secrets.url = "path:../../secrets";
4
5 outputs = { self, environment, secrets }: {
6 nixosModule = self.nixosModules.borgBackup;
7 nixosModules.borgBackup = { lib, pkgs, config, name, ... }:
8 let
9 cfg = config.myEnv.borg_backup;
10 varDir = "/var/lib/borgbackup";
11 borg_args = "--encryption repokey --make-parent-dirs init create prune compact check";
12 borg_backup_full_with_ignored = pkgs.writeScriptBin "borg_full_with_ignored" ''
13 #!${pkgs.stdenv.shell}
14
15 if [ -z "$1" -o "$1" = "-h" -o "$1" = "--help" ]; then
16 echo "borg_full_with_ignored /path/to/borgmatic.yaml"
17 echo "Does a full backup including directories with .duplicity-ignore"
18 exit 1
19 fi
20 ${pkgs.borgmatic}/bin/borgmatic -c "$1" --override 'storage.archive_name_format="{hostname}-with-ignored-{now:%Y-%m-%dT%H:%M:%S.%f}"' --override 'location.exclude_if_present=[]' ${borg_args}
21 '';
22 borg_backup = pkgs.writeScriptBin "borg_backup" ''
23 #!${pkgs.stdenv.shell}
24
25 declare -a profiles
26 profiles=()
27 ${builtins.concatStringsSep "\n" (lib.flatten (lib.mapAttrsToList (k: v: map (remote: [
28 ''profiles+=("${remote}_${k}")''
29 ]) v.remotes) config.services.borgBackup.profiles))}
30
31 if [ -f "${varDir}/last_backup_profile" ]; then
32 last_backup=$(cat ${varDir}/last_backup_profile)
33 for i in "''${!profiles[@]}"; do
34 if [[ "''${profiles[$i]}" = "$last_backup" ]]; then
35 break
36 fi
37 done
38 ((i+=1))
39 profiles=("''${profiles[@]:$i}" "''${profiles[@]:0:$i}")
40 fi
41
42 # timeout in minutes
43 timeout="''${1:-180}"
44 timeout_timestamp=$(date +%s -d "$timeout minutes")
45 for profile in "''${profiles[@]}"; do
46 if [ $(date +%s -d "now") -ge "$timeout_timestamp" ]; then
47 break
48 fi
49
50 touch "${varDir}/$profile.log"
51 ${pkgs.borgmatic}/bin/borgmatic -c "${config.secrets.location}/borg_backup/$profile/borgmatic.yaml" ${borg_args} >> ${varDir}/$profile.log
52 [[ $? = 0 ]] || echo -e "Error when doing backup for $profile, see above or logs in ${varDir}/$profile.log\n---------------------------------------" >&2
53 echo "$profile" > ${varDir}/last_backup_profile
54 done
55 '';
56
57 check_mysql_backups = pkgs.writeScriptBin "borg_list_mysql_not_backuped" ''
58 #!${pkgs.stdenv.shell}
59
60 comm -13 <(cat ${config.secrets.fullPaths."borg_backup/backuped_mysql_list"} | sort) <(mysql --defaults-file=${config.secrets.fullPaths."mysql_replication/eldiron/client"} -N -s -S /run/mysqld_eldiron/mysqld.sock -e "show databases;" | sort)
61 '';
62 check_psql_backups = pkgs.writeScriptBin "borg_list_psql_not_backuped" ''
63 #!${pkgs.stdenv.shell}
64
65 comm -13 <(cat ${config.secrets.fullPaths."borg_backup/backuped_psql_list"} | sort) <(sudo -u postgres psql -h /backup2/eldiron/postgresql -Atq -c "SELECT datname FROM pg_catalog.pg_database" | sort)
66 '';
67 check_backups = pkgs.writeScriptBin "borg_list_not_backuped" ''
68 #!${pkgs.stdenv.shell}
69
70 do_check() {
71 local dir="$1" path ignored_path
72 find "$dir" -mindepth 1 -maxdepth 1 | while IFS= read -r path; do
73 if ${pkgs.gnugrep}/bin/grep -qFx "$path" ${config.secrets.fullPaths."borg_backup/backuped_list"}; then
74 continue
75 elif ${pkgs.gnugrep}/bin/grep -q "^$path/" ${config.secrets.fullPaths."borg_backup/backuped_list"}; then
76 do_check "$path"
77 else
78 while IFS= read -r ignored_path; do
79 if [[ "$path" =~ ^$ignored_path$ ]]; then
80 continue 2
81 fi
82 done < ${config.secrets.fullPaths."borg_backup/ignored_list"}
83 printf '%s\n' "$path"
84 fi
85 done
86 }
87
88 do_check /var/lib
89 '';
90 borgProfile = profile: remote: bucket: builtins.toJSON {
91 location = {
92 source_directories = map (p: "${profile.rootDir}/${p}") profile.includedPaths;
93 repositories = [
94 { path = cfg.remotes.${remote}.remote name bucket; label = "backupserver"; }
95 ];
96 one_file_system = false;
97 exclude_if_present = [".duplicity-ignore"];
98 source_directories_must_exist = profile.directoriesMustExist;
99 borgmatic_source_directory = "${varDir}/${profile.bucket}/.borgmatic";
100 };
101 hooks = {
102 mysql_databases = profile.mariaDBDatabases;
103 postgresql_databases = profile.postgresqlDatabases;
104 before_backup = lib.optional (profile.postgresqlDatabasesPauseReplicationHost != null) "sudo -u postgres psql -h ${profile.postgresqlDatabasesPauseReplicationHost} -c 'SELECT pg_wal_replay_pause();' >/dev/null";
105 after_backup = lib.optional (profile.postgresqlDatabasesPauseReplicationHost != null) "sudo -u postgres psql -h ${profile.postgresqlDatabasesPauseReplicationHost} -c 'SELECT pg_wal_replay_resume();' >/dev/null";
106 };
107 storage = {
108 encryption_passphrase = profile.password;
109 ssh_command = "ssh -i ${config.secrets.fullPaths."borg_backup/identity"}";
110 compression = "zlib";
111 borg_base_directory = "${varDir}/${profile.bucket}";
112 relocated_repo_access_is_ok = true;
113 };
114 retention = {
115 keep_within = "10d";
116 keep_daily = 30;
117 };
118 };
119 in
120 {
121 imports = [
122 environment.nixosModule
123 secrets.nixosModule
124 ];
125 options = {
126 services.borgBackup.enable = lib.mkOption {
127 type = lib.types.bool;
128 default = false;
129 description = ''
130 Whether to enable remote backups.
131 '';
132 };
133 services.borgBackup.helpers = lib.mkOption {
134 readOnly = true;
135 description = ''
136 Some useful functions for borgBackup configuration
137 '';
138 default = {
139 mysqlDBFromBackup = name: primary: {
140 inherit name;
141 options = "--defaults-file=${config.secrets.fullPaths."mysql_replication/${primary}/mysqldump"} -S /run/mysqld_${primary}/mysqld.sock";
142 };
143 psqlDBWithSocket = name: socket: {
144 inherit name;
145 # do not use "host" otherwise it screws the path computation:
146 # there’s a python code os.path.join(os.path.expanduser(dump_path), hostname or 'localhost', name)
147 # and the first argument gets ignored since the second one
148 # looks like an absolute path
149 options = "--host ${socket}";
150 pg_dump_command = "sudo -u postgres pg_dump";
151 psql_command = "sudo -u postgres psql";
152 pg_restore_command = "sudo -u postgres pg_restore";
153 };
154 };
155 };
156 services.borgBackup.profiles = lib.mkOption {
157 type = lib.types.attrsOf (lib.types.submodule {
158 options = {
159 hash = lib.mkOption {
160 type = lib.types.bool;
161 default = true;
162 description = ''
163 Hash bucket and directory names
164 '';
165 };
166 rootDir = lib.mkOption {
167 type = lib.types.path;
168 default = "/var/lib";
169 description = ''
170 Path to backup
171 '';
172 };
173 password = lib.mkOption {
174 type = lib.types.str;
175 default = cfg.password;
176 description = ''
177 password to use to encrypt data
178 '';
179 };
180 directoriesMustExist = lib.mkOption {
181 type = lib.types.bool;
182 default = true;
183 description = ''
184 Raise error if backuped directory doesn't exist
185 '';
186 };
187 bucket = lib.mkOption {
188 type = lib.types.str;
189 description = ''
190 Bucket to use
191 '';
192 };
193 remotes = lib.mkOption {
194 type = lib.types.listOf lib.types.str;
195 description = ''
196 Remotes to use for backup
197 '';
198 };
199 includedPaths = lib.mkOption {
200 type = lib.types.listOf lib.types.str;
201 default = [];
202 description = ''
203 Included paths (subdirs of rootDir)
204 '';
205 };
206 mariaDBDatabases = lib.mkOption {
207 type = lib.types.listOf (lib.types.attrsOf lib.types.str);
208 default = [];
209 description = ''
210 MariaDB databases to backup
211 '';
212 };
213 postgresqlDatabasesPauseReplicationHost = lib.mkOption {
214 type = lib.types.nullOr lib.types.str;
215 default = null;
216 description = ''
217 Replicatino host to pause before the backup
218 '';
219 };
220 postgresqlDatabases = lib.mkOption {
221 type = lib.types.listOf (lib.types.attrsOf lib.types.str);
222 default = [];
223 description = ''
224 Postgresql databases to backup
225 '';
226 };
227 excludeFile = lib.mkOption {
228 type = lib.types.lines;
229 default = "";
230 description = ''
231 Content to put in exclude file
232 '';
233 };
234 ignoredPaths = lib.mkOption {
235 type = lib.types.listOf lib.types.str;
236 default = [];
237 description = ''
238 List of paths to ignore when checking non-backed-up directories
239 Can use (POSIX extended) regex
240 '';
241 };
242 };
243 });
244 };
245 };
246
247 config = lib.mkIf config.services.borgBackup.enable {
248 system.activationScripts.borg_backup = ''
249 install -m 0700 -o root -g root -d ${varDir}
250 '';
251 secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (k: v:
252 let
253 bucket = if v.hash or true then builtins.hashString "sha256" v.bucket else v.bucket;
254 in map (remote: [
255 (lib.nameValuePair "borg_backup/${remote}_${k}/borgmatic.yaml" {
256 permissions = "0400";
257 text = borgProfile v remote bucket;
258 })
259 (lib.nameValuePair "borg_backup/${remote}_${k}" {
260 permissions = "0700";
261 isDir = true;
262 })
263 ]) v.remotes) config.services.borgBackup.profiles)) // {
264 "borg_backup/identity" = {
265 permissions = "0400";
266 text = "{{ .ssl_keys.borg_backup }}";
267 };
268 "borg_backup/backuped_mysql_list" = {
269 permissions = "0400";
270 text = builtins.concatStringsSep "\n" (lib.concatMap (v: (builtins.map (b: b.name) v.mariaDBDatabases)) (builtins.attrValues config.services.borgBackup.profiles));
271 };
272 "borg_backup/backuped_psql_list" = {
273 permissions = "0400";
274 text = builtins.concatStringsSep "\n" (lib.concatMap (v: (builtins.map (b: b.name) v.postgresqlDatabases)) (builtins.attrValues config.services.borgBackup.profiles));
275 };
276 "borg_backup/ignored_list" = {
277 permissions = "0400";
278 text = let
279 ignored = map
280 (v: map (p: "${v.rootDir}/${p}") v.ignoredPaths)
281 (builtins.attrValues config.services.borgBackup.profiles);
282 in builtins.concatStringsSep "\n" (lib.flatten ignored);
283 };
284 "borg_backup/backuped_list" = {
285 permissions = "0400";
286 text = let
287 included = map
288 (v: map (p: "${v.rootDir}/${p}") v.includedPaths)
289 (builtins.attrValues config.services.borgBackup.profiles);
290 in builtins.concatStringsSep "\n" (lib.flatten included);
291 };
292 };
293
294 programs.ssh.knownHostsFiles = [
295 (pkgs.writeText
296 "borg_backup_known_hosts"
297 (builtins.concatStringsSep
298 "\n"
299 (builtins.filter
300 (v: v != null)
301 (builtins.map
302 (v: v.sshKnownHosts)
303 (builtins.attrValues cfg.remotes)
304 )
305 )
306 )
307 )
308 ];
309 environment.systemPackages = [ pkgs.borgbackup pkgs.borgmatic borg_backup_full_with_ignored borg_backup check_backups ] ++ (lib.optionals (name == "backup-2") [ check_mysql_backups check_psql_backups ]);
310 services.cron = {
311 enable = true;
312 systemCronJobs = [
313 "0 0 * * * root ${borg_backup}/bin/borg_backup 300"
314 ];
315
316 };
317
318 };
319 };
320 };
321}
diff --git a/systems/backup-2/base.nix b/systems/backup-2/base.nix
index 97a364c..61eecc9 100644
--- a/systems/backup-2/base.nix
+++ b/systems/backup-2/base.nix
@@ -92,6 +92,8 @@
92 }; 92 };
93 }; 93 };
94 94
95 services.borgBackup.enable = true;
96
95 services.rsyncBackup = { 97 services.rsyncBackup = {
96 mountpoint = "/backup2"; 98 mountpoint = "/backup2";
97 profiles = config.myEnv.rsync_backup.profiles; 99 profiles = config.myEnv.rsync_backup.profiles;
@@ -99,6 +101,13 @@
99 ssh_key_private = config.secrets.fullPaths."rsync_backup/identity"; 101 ssh_key_private = config.secrets.fullPaths."rsync_backup/identity";
100 }; 102 };
101 103
104 services.borgBackup.profiles.global = {
105 bucket = "global";
106 hash = false;
107 remotes = [ "attilax" ];
108 rootDir = "/backup2/eldiron";
109 includedPaths = [ "databases_latest_backups" ];
110 };
102 myServices.mailRelay.enable = true; 111 myServices.mailRelay.enable = true;
103 myServices.mailBackup.enable = true; 112 myServices.mailBackup.enable = true;
104 myServices.monitoring.enable = true; 113 myServices.monitoring.enable = true;
diff --git a/systems/backup-2/databases/mariadb_replication.nix b/systems/backup-2/databases/mariadb_replication.nix
index f113219..c085682 100644
--- a/systems/backup-2/databases/mariadb_replication.nix
+++ b/systems/backup-2/databases/mariadb_replication.nix
@@ -163,6 +163,9 @@ in
163 --flush-privileges \ 163 --flush-privileges \
164 --all-databases > $filename 164 --all-databases > $filename
165 ${pkgs.gzip}/bin/gzip $filename 165 ${pkgs.gzip}/bin/gzip $filename
166
167 mkdir -p "${cfg.base}/${name}/databases_latest_backups"
168 ln -f "$filename.gz" "${cfg.base}/${name}/databases_latest_backups/mysql.sql.gz"
166 ''; 169 '';
167 u = pkgs.callPackage ./utils.nix {}; 170 u = pkgs.callPackage ./utils.nix {};
168 cleanup_script = pkgs.writeScript "cleanup_mysql_${name}" (u.exponentialDumps "sql.gz" backupDir); 171 cleanup_script = pkgs.writeScript "cleanup_mysql_${name}" (u.exponentialDumps "sql.gz" backupDir);
@@ -194,7 +197,7 @@ in
194 } 197 }
195 ) cfg.hosts; 198 ) cfg.hosts;
196 199
197 environment.systemPackages = lib.mapAttrsToList (name: hcfg: 200 environment.systemPackages = [ pkgs.mariadb ] ++ lib.mapAttrsToList (name: hcfg:
198 pkgs.writeScriptBin "mysql_backup_${name}" '' 201 pkgs.writeScriptBin "mysql_backup_${name}" ''
199 #!${pkgs.stdenv.shell} 202 #!${pkgs.stdenv.shell}
200 203
diff --git a/systems/backup-2/databases/openldap_replication.nix b/systems/backup-2/databases/openldap_replication.nix
index b962224..d3cda1c 100644
--- a/systems/backup-2/databases/openldap_replication.nix
+++ b/systems/backup-2/databases/openldap_replication.nix
@@ -121,7 +121,11 @@ in
121 backup_script = pkgs.writeScript "backup_openldap_${name}" '' 121 backup_script = pkgs.writeScript "backup_openldap_${name}" ''
122 #!${pkgs.stdenv.shell} 122 #!${pkgs.stdenv.shell}
123 123
124 ${hcfg.package}/bin/slapcat -b "${hcfg.base}" -f ${ldapConfig hcfg name} -l ${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).ldif 124 filename="${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).ldif"
125 ${hcfg.package}/bin/slapcat -b "${hcfg.base}" -f ${ldapConfig hcfg name} -l "$filename"
126
127 mkdir -p "${cfg.base}/${name}/databases_latest_backups"
128 ln -f "$filename" "${cfg.base}/${name}/databases_latest_backups/openldap.ldif"
125 ''; 129 '';
126 u = pkgs.callPackage ./utils.nix {}; 130 u = pkgs.callPackage ./utils.nix {};
127 cleanup_script = pkgs.writeScript "cleanup_openldap_${name}" (u.exponentialDumps "ldif" backupDir); 131 cleanup_script = pkgs.writeScript "cleanup_openldap_${name}" (u.exponentialDumps "ldif" backupDir);
diff --git a/systems/backup-2/databases/postgresql_replication.nix b/systems/backup-2/databases/postgresql_replication.nix
index 5351a4f..b428533 100644
--- a/systems/backup-2/databases/postgresql_replication.nix
+++ b/systems/backup-2/databases/postgresql_replication.nix
@@ -127,19 +127,23 @@ in
127 set -euo pipefail 127 set -euo pipefail
128 128
129 resume_replication() { 129 resume_replication() {
130 ${hcfg.package}/bin/psql -h ${dataDir} -c "SELECT pg_wal_replay_resume();" >/dev/null || echo "impossible to resume replication" 130 sudo -u postgres ${hcfg.package}/bin/psql -h ${dataDir} -c "SELECT pg_wal_replay_resume();" >/dev/null || echo "impossible to resume replication"
131 } 131 }
132 132
133 trap resume_replication EXIT 133 trap resume_replication EXIT
134 134
135 ${hcfg.package}/bin/psql -h ${dataDir} -c "SELECT pg_wal_replay_pause();" >/dev/null || (echo "impossible to pause replication" && false) 135 sudo -u postgres ${hcfg.package}/bin/psql -h ${dataDir} -c "SELECT pg_wal_replay_pause();" >/dev/null || (echo "impossible to pause replication" && false)
136 136
137 ${hcfg.package}/bin/pg_dumpall -h ${dataDir} -f ${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).sql 137 filename=${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).sql
138 sudo -u postgres ${hcfg.package}/bin/pg_dumpall -h ${dataDir} -f "$filename"
139
140 mkdir -p "${cfg.base}/${name}/databases_latest_backups"
141 ln -f "$filename" "${cfg.base}/${name}/databases_latest_backups/postgresql.sql"
138 ''; 142 '';
139 u = pkgs.callPackage ./utils.nix {}; 143 u = pkgs.callPackage ./utils.nix {};
140 cleanup_script = pkgs.writeScript "cleanup_postgresql_${name}" (u.keepLastNDumps "sql" backupDir 6); 144 cleanup_script = pkgs.writeScript "cleanup_postgresql_${name}" (u.keepLastNDumps "sql" backupDir 6);
141 in [ 145 in [
142 "0 22,4,10,16 * * * postgres ${backup_script}" 146 "0 22,4,10,16 * * * root ${backup_script}"
143 "0 3 * * * postgres ${cleanup_script}" 147 "0 3 * * * postgres ${cleanup_script}"
144 ]) cfg.hosts); 148 ]) cfg.hosts);
145 }; 149 };
diff --git a/systems/backup-2/databases/redis_replication.nix b/systems/backup-2/databases/redis_replication.nix
index 53fa904..1088630 100644
--- a/systems/backup-2/databases/redis_replication.nix
+++ b/systems/backup-2/databases/redis_replication.nix
@@ -114,8 +114,11 @@ in
114 backup_script = pkgs.writeScript "backup_redis_${name}" '' 114 backup_script = pkgs.writeScript "backup_redis_${name}" ''
115 #!${pkgs.stdenv.shell} 115 #!${pkgs.stdenv.shell}
116 116
117 ${pkgs.coreutils}/bin/cp ${cfg.base}/${name}/redis/dump.rdb \ 117 filename="${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).rdb"
118 ${backupDir}/$(${pkgs.coreutils}/bin/date -Iminutes).rdb 118 ${pkgs.coreutils}/bin/cp ${cfg.base}/${name}/redis/dump.rdb "$filename"
119
120 mkdir -p "${cfg.base}/${name}/databases_latest_backups"
121 ln -f "$filename" "${cfg.base}/${name}/databases_latest_backups/redis.rdb"
119 ''; 122 '';
120 u = pkgs.callPackage ./utils.nix {}; 123 u = pkgs.callPackage ./utils.nix {};
121 cleanup_script = pkgs.writeScript "cleanup_redis_${name}" (u.exponentialDumps "rdb" backupDir); 124 cleanup_script = pkgs.writeScript "cleanup_redis_${name}" (u.exponentialDumps "rdb" backupDir);
diff --git a/systems/backup-2/flake.lock b/systems/backup-2/flake.lock
index 2eee849..2e5b9b2 100644
--- a/systems/backup-2/flake.lock
+++ b/systems/backup-2/flake.lock
@@ -16,9 +16,25 @@
16 "type": "path" 16 "type": "path"
17 } 17 }
18 }, 18 },
19 "borg-backup": {
20 "inputs": {
21 "environment": "environment",
22 "secrets": "secrets"
23 },
24 "locked": {
25 "lastModified": 1,
26 "narHash": "sha256-6IB+N7TeH+3XyK8nwlEX4LGl3EJJLVoESteotut3OUc=",
27 "path": "../../flakes/private/borg_backup",
28 "type": "path"
29 },
30 "original": {
31 "path": "../../flakes/private/borg_backup",
32 "type": "path"
33 }
34 },
19 "chatons": { 35 "chatons": {
20 "inputs": { 36 "inputs": {
21 "environment": "environment" 37 "environment": "environment_2"
22 }, 38 },
23 "locked": { 39 "locked": {
24 "lastModified": 1, 40 "lastModified": 1,
@@ -87,11 +103,11 @@
87 "locked": { 103 "locked": {
88 "lastModified": 1, 104 "lastModified": 1,
89 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 105 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
90 "path": "../../flakes/private/environment", 106 "path": "../environment",
91 "type": "path" 107 "type": "path"
92 }, 108 },
93 "original": { 109 "original": {
94 "path": "../../flakes/private/environment", 110 "path": "../environment",
95 "type": "path" 111 "type": "path"
96 } 112 }
97 }, 113 },
@@ -99,11 +115,11 @@
99 "locked": { 115 "locked": {
100 "lastModified": 1, 116 "lastModified": 1,
101 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=", 117 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
102 "path": "../environment", 118 "path": "../../flakes/private/environment",
103 "type": "path" 119 "type": "path"
104 }, 120 },
105 "original": { 121 "original": {
106 "path": "../environment", 122 "path": "../../flakes/private/environment",
107 "type": "path" 123 "type": "path"
108 } 124 }
109 }, 125 },
@@ -155,6 +171,18 @@
155 "type": "path" 171 "type": "path"
156 } 172 }
157 }, 173 },
174 "environment_8": {
175 "locked": {
176 "lastModified": 1,
177 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
178 "path": "../environment",
179 "type": "path"
180 },
181 "original": {
182 "path": "../environment",
183 "type": "path"
184 }
185 },
158 "files-watcher": { 186 "files-watcher": {
159 "locked": { 187 "locked": {
160 "lastModified": 1, 188 "lastModified": 1,
@@ -347,8 +375,8 @@
347 }, 375 },
348 "mail-relay": { 376 "mail-relay": {
349 "inputs": { 377 "inputs": {
350 "environment": "environment_3", 378 "environment": "environment_4",
351 "secrets": "secrets" 379 "secrets": "secrets_2"
352 }, 380 },
353 "locked": { 381 "locked": {
354 "lastModified": 1, 382 "lastModified": 1,
@@ -363,11 +391,11 @@
363 }, 391 },
364 "milters": { 392 "milters": {
365 "inputs": { 393 "inputs": {
366 "environment": "environment_4", 394 "environment": "environment_5",
367 "files-watcher": "files-watcher", 395 "files-watcher": "files-watcher",
368 "openarc": "openarc", 396 "openarc": "openarc",
369 "opendmarc": "opendmarc", 397 "opendmarc": "opendmarc",
370 "secrets": "secrets_2" 398 "secrets": "secrets_3"
371 }, 399 },
372 "locked": { 400 "locked": {
373 "lastModified": 1, 401 "lastModified": 1,
@@ -382,10 +410,10 @@
382 }, 410 },
383 "monitoring": { 411 "monitoring": {
384 "inputs": { 412 "inputs": {
385 "environment": "environment_5", 413 "environment": "environment_6",
386 "naemon": "naemon", 414 "naemon": "naemon",
387 "nixpkgs-lib": "nixpkgs-lib", 415 "nixpkgs-lib": "nixpkgs-lib",
388 "secrets": "secrets_3" 416 "secrets": "secrets_4"
389 }, 417 },
390 "locked": { 418 "locked": {
391 "lastModified": 1, 419 "lastModified": 1,
@@ -852,7 +880,7 @@
852 "inputs": { 880 "inputs": {
853 "files-watcher": "files-watcher_2", 881 "files-watcher": "files-watcher_2",
854 "openarc": "openarc_4", 882 "openarc": "openarc_4",
855 "secrets": "secrets_4" 883 "secrets": "secrets_5"
856 }, 884 },
857 "locked": { 885 "locked": {
858 "lastModified": 1, 886 "lastModified": 1,
@@ -918,10 +946,10 @@
918 }, 946 },
919 "opendmarc_2": { 947 "opendmarc_2": {
920 "inputs": { 948 "inputs": {
921 "environment": "environment_6", 949 "environment": "environment_7",
922 "files-watcher": "files-watcher_3", 950 "files-watcher": "files-watcher_3",
923 "opendmarc": "opendmarc_3", 951 "opendmarc": "opendmarc_3",
924 "secrets": "secrets_5" 952 "secrets": "secrets_6"
925 }, 953 },
926 "locked": { 954 "locked": {
927 "lastModified": 1, 955 "lastModified": 1,
@@ -965,8 +993,9 @@
965 }, 993 },
966 "root": { 994 "root": {
967 "inputs": { 995 "inputs": {
996 "borg-backup": "borg-backup",
968 "chatons": "chatons", 997 "chatons": "chatons",
969 "environment": "environment_2", 998 "environment": "environment_3",
970 "loginctl-linger": "loginctl-linger", 999 "loginctl-linger": "loginctl-linger",
971 "mail-relay": "mail-relay", 1000 "mail-relay": "mail-relay",
972 "milters": "milters", 1001 "milters": "milters",
@@ -978,7 +1007,7 @@
978 "opendmarc": "opendmarc_2", 1007 "opendmarc": "opendmarc_2",
979 "openldap": "openldap", 1008 "openldap": "openldap",
980 "rsync_backup": "rsync_backup", 1009 "rsync_backup": "rsync_backup",
981 "secrets": "secrets_6", 1010 "secrets": "secrets_7",
982 "system": "system" 1011 "system": "system"
983 } 1012 }
984 }, 1013 },
@@ -1070,6 +1099,18 @@
1070 "locked": { 1099 "locked": {
1071 "lastModified": 1, 1100 "lastModified": 1,
1072 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=", 1101 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
1102 "path": "../../secrets",
1103 "type": "path"
1104 },
1105 "original": {
1106 "path": "../../secrets",
1107 "type": "path"
1108 }
1109 },
1110 "secrets_7": {
1111 "locked": {
1112 "lastModified": 1,
1113 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
1073 "path": "../../flakes/secrets", 1114 "path": "../../flakes/secrets",
1074 "type": "path" 1115 "type": "path"
1075 }, 1116 },
@@ -1097,7 +1138,7 @@
1097 "system": { 1138 "system": {
1098 "inputs": { 1139 "inputs": {
1099 "backports": "backports", 1140 "backports": "backports",
1100 "environment": "environment_7", 1141 "environment": "environment_8",
1101 "mypackages": "mypackages", 1142 "mypackages": "mypackages",
1102 "myuids": "myuids_6", 1143 "myuids": "myuids_6",
1103 "secrets-public": "secrets-public" 1144 "secrets-public": "secrets-public"
diff --git a/systems/backup-2/flake.nix b/systems/backup-2/flake.nix
index e6807d6..f172b59 100644
--- a/systems/backup-2/flake.nix
+++ b/systems/backup-2/flake.nix
@@ -4,6 +4,7 @@
4 4
5 my-lib.url = "path:../../flakes/lib"; 5 my-lib.url = "path:../../flakes/lib";
6 6
7 borg-backup.url = "path:../../flakes/private/borg_backup";
7 openldap.url = "path:../../flakes/private/openldap"; 8 openldap.url = "path:../../flakes/private/openldap";
8 monitoring.url = "path:../../flakes/private/monitoring"; 9 monitoring.url = "path:../../flakes/private/monitoring";
9 mail-relay.url = "path:../../flakes/private/mail-relay"; 10 mail-relay.url = "path:../../flakes/private/mail-relay";
@@ -41,6 +42,7 @@
41 secrets = inputs.secrets.nixosModule; 42 secrets = inputs.secrets.nixosModule;
42 rsync_backup = inputs.rsync_backup.nixosModule; 43 rsync_backup = inputs.rsync_backup.nixosModule;
43 loginctl-linger = inputs.loginctl-linger.nixosModule; 44 loginctl-linger = inputs.loginctl-linger.nixosModule;
45 borg-backup = inputs.borg-backup.nixosModule;
44 }; 46 };
45 moduleArgs = { 47 moduleArgs = {
46 nixpkgs = inputs.nixpkgs; 48 nixpkgs = inputs.nixpkgs;
diff --git a/systems/eldiron/base.nix b/systems/eldiron/base.nix
index 4535dcf..4546212 100644
--- a/systems/eldiron/base.nix
+++ b/systems/eldiron/base.nix
@@ -118,7 +118,6 @@
118 ./buildbot 118 ./buildbot
119 ./coturn.nix 119 ./coturn.nix
120 ./dns.nix 120 ./dns.nix
121 ./borg_backup.nix
122 ./duply_backup.nix 121 ./duply_backup.nix
123 ./gemini 122 ./gemini
124 ./gitolite 123 ./gitolite
diff --git a/systems/eldiron/borg_backup.nix b/systems/eldiron/borg_backup.nix
deleted file mode 100644
index f83594a..0000000
--- a/systems/eldiron/borg_backup.nix
+++ /dev/null
@@ -1,242 +0,0 @@
1{ lib, pkgs, config, name, ... }:
2
3let
4 cfg = config.myEnv.borg_backup;
5 varDir = "/var/lib/borgbackup";
6 borg_args = "--encryption repokey --make-parent-dirs init create prune compact check";
7 borg_backup_full_with_ignored = pkgs.writeScriptBin "borg_full_with_ignored" ''
8 #!${pkgs.stdenv.shell}
9
10 if [ -z "$1" -o "$1" = "-h" -o "$1" = "--help" ]; then
11 echo "borg_full_with_ignored /path/to/borgmatic.yaml"
12 echo "Does a full backup including directories with .duplicity-ignore"
13 exit 1
14 fi
15 ${pkgs.borgmatic}/bin/borgmatic -c "$1" --override 'storage.archive_name_format="{hostname}-with-ignored-{now:%Y-%m-%dT%H:%M:%S.%f}"' --override 'location.exclude_if_present=[]' ${borg_args}
16 '';
17 borg_backup = pkgs.writeScriptBin "borg_backup" ''
18 #!${pkgs.stdenv.shell}
19
20 declare -a profiles
21 profiles=()
22 ${builtins.concatStringsSep "\n" (lib.flatten (lib.mapAttrsToList (k: v: map (remote: [
23 ''profiles+=("${remote}_${k}")''
24 ]) v.remotes) config.services.borgBackup.profiles))}
25
26 if [ -f "${varDir}/last_backup_profile" ]; then
27 last_backup=$(cat ${varDir}/last_backup_profile)
28 for i in "''${!profiles[@]}"; do
29 if [[ "''${profiles[$i]}" = "$last_backup" ]]; then
30 break
31 fi
32 done
33 ((i+=1))
34 profiles=("''${profiles[@]:$i}" "''${profiles[@]:0:$i}")
35 fi
36
37 # timeout in minutes
38 timeout="''${1:-180}"
39 timeout_timestamp=$(date +%s -d "$timeout minutes")
40 for profile in "''${profiles[@]}"; do
41 if [ $(date +%s -d "now") -ge "$timeout_timestamp" ]; then
42 break
43 fi
44
45 touch "${varDir}/$profile.log"
46 ${pkgs.borgmatic}/bin/borgmatic -c "${config.secrets.location}/borg_backup/$profile/borgmatic.yaml" ${borg_args} >> ${varDir}/$profile.log
47 [[ $? = 0 ]] || echo -e "Error when doing backup for $profile, see above or logs in ${varDir}/$profile.log\n---------------------------------------" >&2
48 echo "$profile" > ${varDir}/last_backup_profile
49 done
50 '';
51
52 check_backups = pkgs.writeScriptBin "borg_list_not_backuped" ''
53 #!${pkgs.stdenv.shell}
54
55 do_check() {
56 local dir="$1" path ignored_path
57 find "$dir" -mindepth 1 -maxdepth 1 | while IFS= read -r path; do
58 if ${pkgs.gnugrep}/bin/grep -qFx "$path" ${config.secrets.fullPaths."borg_backup/backuped_list"}; then
59 continue
60 elif ${pkgs.gnugrep}/bin/grep -q "^$path/" ${config.secrets.fullPaths."borg_backup/backuped_list"}; then
61 do_check "$path"
62 else
63 while IFS= read -r ignored_path; do
64 if [[ "$path" =~ ^$ignored_path$ ]]; then
65 continue 2
66 fi
67 done < ${config.secrets.fullPaths."borg_backup/ignored_list"}
68 printf '%s\n' "$path"
69 fi
70 done
71 }
72
73 do_check /var/lib
74 '';
75 borgProfile = profile: remote: bucket: builtins.toJSON {
76 location = {
77 source_directories = map (p: "${profile.rootDir}/${p}") profile.includedPaths;
78 repositories = [
79 { path = cfg.remotes.${remote}.remote name bucket; label = "backupserver"; }
80 ];
81 one_file_system = false;
82 exclude_if_present = [".duplicity-ignore"];
83 source_directories_must_exist = profile.directoriesMustExist;
84 borgmatic_source_directory = "${varDir}/${profile.bucket}/.borgmatic";
85 };
86 storage = {
87 encryption_passphrase = profile.password;
88 ssh_command = "ssh -i ${config.secrets.fullPaths."borg_backup/identity"}";
89 compression = "zlib";
90 borg_base_directory = "${varDir}/${profile.bucket}";
91 relocated_repo_access_is_ok = true;
92 };
93 retention = {
94 keep_within = "10d";
95 keep_daily = 30;
96 };
97 };
98in
99{
100 options = {
101 services.borgBackup.enable = lib.mkOption {
102 type = lib.types.bool;
103 default = false;
104 description = ''
105 Whether to enable remote backups.
106 '';
107 };
108 services.borgBackup.profiles = lib.mkOption {
109 type = lib.types.attrsOf (lib.types.submodule {
110 options = {
111 hash = lib.mkOption {
112 type = lib.types.bool;
113 default = true;
114 description = ''
115 Hash bucket and directory names
116 '';
117 };
118 rootDir = lib.mkOption {
119 type = lib.types.path;
120 default = "/var/lib";
121 description = ''
122 Path to backup
123 '';
124 };
125 password = lib.mkOption {
126 type = lib.types.str;
127 default = cfg.password;
128 description = ''
129 password to use to encrypt data
130 '';
131 };
132 directoriesMustExist = lib.mkOption {
133 type = lib.types.bool;
134 default = true;
135 description = ''
136 Raise error if backuped directory doesn't exist
137 '';
138 };
139 bucket = lib.mkOption {
140 type = lib.types.str;
141 description = ''
142 Bucket to use
143 '';
144 };
145 remotes = lib.mkOption {
146 type = lib.types.listOf lib.types.str;
147 description = ''
148 Remotes to use for backup
149 '';
150 };
151 includedPaths = lib.mkOption {
152 type = lib.types.listOf lib.types.str;
153 default = [];
154 description = ''
155 Included paths (subdirs of rootDir)
156 '';
157 };
158 excludeFile = lib.mkOption {
159 type = lib.types.lines;
160 default = "";
161 description = ''
162 Content to put in exclude file
163 '';
164 };
165 ignoredPaths = lib.mkOption {
166 type = lib.types.listOf lib.types.str;
167 default = [];
168 description = ''
169 List of paths to ignore when checking non-backed-up directories
170 Can use (POSIX extended) regex
171 '';
172 };
173 };
174 });
175 };
176 };
177
178 config = lib.mkIf config.services.borgBackup.enable {
179 system.activationScripts.borg_backup = ''
180 install -m 0700 -o root -g root -d ${varDir}
181 '';
182 secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (k: v:
183 let
184 bucket = if v.hash or true then builtins.hashString "sha256" v.bucket else v.bucket;
185 in map (remote: [
186 (lib.nameValuePair "borg_backup/${remote}_${k}/borgmatic.yaml" {
187 permissions = "0400";
188 text = borgProfile v remote bucket;
189 })
190 (lib.nameValuePair "borg_backup/${remote}_${k}" {
191 permissions = "0700";
192 isDir = true;
193 })
194 ]) v.remotes) config.services.borgBackup.profiles)) // {
195 "borg_backup/identity" = {
196 permissions = "0400";
197 text = "{{ .ssl_keys.borg_backup }}";
198 };
199 "borg_backup/ignored_list" = {
200 permissions = "0400";
201 text = let
202 ignored = map
203 (v: map (p: "${v.rootDir}/${p}") v.ignoredPaths)
204 (builtins.attrValues config.services.borgBackup.profiles);
205 in builtins.concatStringsSep "\n" (lib.flatten ignored);
206 };
207 "borg_backup/backuped_list" = {
208 permissions = "0400";
209 text = let
210 included = map
211 (v: map (p: "${v.rootDir}/${p}") v.includedPaths)
212 (builtins.attrValues config.services.borgBackup.profiles);
213 in builtins.concatStringsSep "\n" (lib.flatten included);
214 };
215 };
216
217 programs.ssh.knownHostsFiles = [
218 (pkgs.writeText
219 "borg_backup_known_hosts"
220 (builtins.concatStringsSep
221 "\n"
222 (builtins.filter
223 (v: v != null)
224 (builtins.map
225 (v: v.sshKnownHosts)
226 (builtins.attrValues cfg.remotes)
227 )
228 )
229 )
230 )
231 ];
232 environment.systemPackages = [ pkgs.borgbackup pkgs.borgmatic borg_backup_full_with_ignored borg_backup check_backups ];
233 services.cron = {
234 enable = true;
235 systemCronJobs = [
236 "0 0 * * * root ${borg_backup}/bin/borg_backup 300"
237 ];
238
239 };
240
241 };
242}
diff --git a/systems/eldiron/flake.lock b/systems/eldiron/flake.lock
index ac6307e..5922ea2 100644
--- a/systems/eldiron/flake.lock
+++ b/systems/eldiron/flake.lock
@@ -198,6 +198,18 @@
198 "type": "path" 198 "type": "path"
199 } 199 }
200 }, 200 },
201 "environment_7": {
202 "locked": {
203 "lastModified": 1,
204 "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
205 "path": "../environment",
206 "type": "path"
207 },
208 "original": {
209 "path": "../environment",
210 "type": "path"
211 }
212 },
201 "etherpad-lite": { 213 "etherpad-lite": {
202 "flake": false, 214 "flake": false,
203 "locked": { 215 "locked": {
@@ -1966,6 +1978,22 @@
1966 "type": "path" 1978 "type": "path"
1967 } 1979 }
1968 }, 1980 },
1981 "private-borg-backup": {
1982 "inputs": {
1983 "environment": "environment",
1984 "secrets": "secrets"
1985 },
1986 "locked": {
1987 "lastModified": 1,
1988 "narHash": "sha256-6IB+N7TeH+3XyK8nwlEX4LGl3EJJLVoESteotut3OUc=",
1989 "path": "../../flakes/private/borg_backup",
1990 "type": "path"
1991 },
1992 "original": {
1993 "path": "../../flakes/private/borg_backup",
1994 "type": "path"
1995 }
1996 },
1969 "private-buildbot": { 1997 "private-buildbot": {
1970 "inputs": { 1998 "inputs": {
1971 "buildslist": "buildslist", 1999 "buildslist": "buildslist",
@@ -1985,7 +2013,7 @@
1985 }, 2013 },
1986 "private-chatons": { 2014 "private-chatons": {
1987 "inputs": { 2015 "inputs": {
1988 "environment": "environment" 2016 "environment": "environment_2"
1989 }, 2017 },
1990 "locked": { 2018 "locked": {
1991 "lastModified": 1, 2019 "lastModified": 1,
@@ -2012,11 +2040,11 @@
2012 }, 2040 },
2013 "private-milters": { 2041 "private-milters": {
2014 "inputs": { 2042 "inputs": {
2015 "environment": "environment_2", 2043 "environment": "environment_3",
2016 "files-watcher": "files-watcher", 2044 "files-watcher": "files-watcher",
2017 "openarc": "openarc", 2045 "openarc": "openarc",
2018 "opendmarc": "opendmarc", 2046 "opendmarc": "opendmarc",
2019 "secrets": "secrets" 2047 "secrets": "secrets_2"
2020 }, 2048 },
2021 "locked": { 2049 "locked": {
2022 "lastModified": 1, 2050 "lastModified": 1,
@@ -2031,10 +2059,10 @@
2031 }, 2059 },
2032 "private-monitoring": { 2060 "private-monitoring": {
2033 "inputs": { 2061 "inputs": {
2034 "environment": "environment_3", 2062 "environment": "environment_4",
2035 "naemon": "naemon", 2063 "naemon": "naemon",
2036 "nixpkgs-lib": "nixpkgs-lib_2", 2064 "nixpkgs-lib": "nixpkgs-lib_2",
2037 "secrets": "secrets_2" 2065 "secrets": "secrets_3"
2038 }, 2066 },
2039 "locked": { 2067 "locked": {
2040 "lastModified": 1, 2068 "lastModified": 1,
@@ -2051,7 +2079,7 @@
2051 "inputs": { 2079 "inputs": {
2052 "files-watcher": "files-watcher_2", 2080 "files-watcher": "files-watcher_2",
2053 "openarc": "openarc_3", 2081 "openarc": "openarc_3",
2054 "secrets": "secrets_3" 2082 "secrets": "secrets_4"
2055 }, 2083 },
2056 "locked": { 2084 "locked": {
2057 "lastModified": 1, 2085 "lastModified": 1,
@@ -2066,10 +2094,10 @@
2066 }, 2094 },
2067 "private-opendmarc": { 2095 "private-opendmarc": {
2068 "inputs": { 2096 "inputs": {
2069 "environment": "environment_4", 2097 "environment": "environment_5",
2070 "files-watcher": "files-watcher_3", 2098 "files-watcher": "files-watcher_3",
2071 "opendmarc": "opendmarc_2", 2099 "opendmarc": "opendmarc_2",
2072 "secrets": "secrets_4" 2100 "secrets": "secrets_5"
2073 }, 2101 },
2074 "locked": { 2102 "locked": {
2075 "lastModified": 1, 2103 "lastModified": 1,
@@ -2129,8 +2157,8 @@
2129 }, 2157 },
2130 "private-ssh": { 2158 "private-ssh": {
2131 "inputs": { 2159 "inputs": {
2132 "environment": "environment_5", 2160 "environment": "environment_6",
2133 "secrets": "secrets_5" 2161 "secrets": "secrets_6"
2134 }, 2162 },
2135 "locked": { 2163 "locked": {
2136 "lastModified": 1, 2164 "lastModified": 1,
@@ -2146,7 +2174,7 @@
2146 "private-system": { 2174 "private-system": {
2147 "inputs": { 2175 "inputs": {
2148 "backports": "backports", 2176 "backports": "backports",
2149 "environment": "environment_6", 2177 "environment": "environment_7",
2150 "mypackages": "mypackages", 2178 "mypackages": "mypackages",
2151 "myuids": "myuids_7", 2179 "myuids": "myuids_7",
2152 "secrets-public": "secrets-public" 2180 "secrets-public": "secrets-public"
@@ -2471,6 +2499,7 @@
2471 "dns-nix": "dns-nix", 2499 "dns-nix": "dns-nix",
2472 "my-lib": "my-lib", 2500 "my-lib": "my-lib",
2473 "nixpkgs": "nixpkgs_5", 2501 "nixpkgs": "nixpkgs_5",
2502 "private-borg-backup": "private-borg-backup",
2474 "private-buildbot": "private-buildbot", 2503 "private-buildbot": "private-buildbot",
2475 "private-chatons": "private-chatons", 2504 "private-chatons": "private-chatons",
2476 "private-environment": "private-environment", 2505 "private-environment": "private-environment",
@@ -2576,6 +2605,18 @@
2576 "type": "path" 2605 "type": "path"
2577 } 2606 }
2578 }, 2607 },
2608 "secrets_6": {
2609 "locked": {
2610 "lastModified": 1,
2611 "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
2612 "path": "../../secrets",
2613 "type": "path"
2614 },
2615 "original": {
2616 "path": "../../secrets",
2617 "type": "path"
2618 }
2619 },
2579 "stable": { 2620 "stable": {
2580 "locked": { 2621 "locked": {
2581 "lastModified": 1669735802, 2622 "lastModified": 1669735802,
diff --git a/systems/eldiron/flake.nix b/systems/eldiron/flake.nix
index 205571f..3561a5c 100644
--- a/systems/eldiron/flake.nix
+++ b/systems/eldiron/flake.nix
@@ -26,6 +26,7 @@
26 public-paste.url = "path:../../flakes/paste"; 26 public-paste.url = "path:../../flakes/paste";
27 public-taskwarrior-web.url = "path:../../flakes/taskwarrior-web"; 27 public-taskwarrior-web.url = "path:../../flakes/taskwarrior-web";
28 28
29 private-borg-backup.url = "path:../../flakes/private/borg_backup";
29 private-peertube.url = "path:../../flakes/private/peertube"; 30 private-peertube.url = "path:../../flakes/private/peertube";
30 private-buildbot.url = "path:../../flakes/private/buildbot"; 31 private-buildbot.url = "path:../../flakes/private/buildbot";
31 private-ports.url = "path:../../flakes/private/ports"; 32 private-ports.url = "path:../../flakes/private/ports";
@@ -69,6 +70,7 @@
69 system = private-system.nixosModule; 70 system = private-system.nixosModule;
70 monitoring = private-monitoring.nixosModule; 71 monitoring = private-monitoring.nixosModule;
71 milters = private-milters.nixosModule; 72 milters = private-milters.nixosModule;
73 borg-backup = private-borg-backup.nixosModule;
72 }; 74 };
73 moduleArgs = with inputs; { 75 moduleArgs = with inputs; {
74 dns-nix = dns-nix; 76 dns-nix = dns-nix;