},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "../../flakes/private/chatons",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "../../flakes/private/chatons",
"type": "path"
},
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_10": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_11": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_12": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_13": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_14": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_15": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_16": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_17": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_18": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_19": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_2": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_20": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_21": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_22": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_23": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_24": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_25": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_26": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_27": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_28": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_29": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_3": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_30": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_31": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_32": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_4": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_5": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_6": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_7": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_8": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_9": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-1sEwMNWSytfyn4Rh5gUJACwCNgaTLdMDkO9hEr5OB7M=",
+ "narHash": "sha256-tY5qk98NpdM4osbPYFeo6/pHiQQU4a4iKw2jCJP99q8=",
"path": "../../flakes/private/mail-relay",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-1sEwMNWSytfyn4Rh5gUJACwCNgaTLdMDkO9hEr5OB7M=",
+ "narHash": "sha256-tY5qk98NpdM4osbPYFeo6/pHiQQU4a4iKw2jCJP99q8=",
"path": "../../flakes/private/mail-relay",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-N8FlN9eUGGmz7MevjaGC7Y07AEebJGRzcESmOW87/0Q=",
+ "narHash": "sha256-R3FAjRFGXXrYqICZrB0jFWVe7Ahqu1s8HSGYucmCfiU=",
"path": "../flakes",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-VhRXb3AAlSKwkq4BfVmoKzkLxEaAFGjYLAFETTZuhjE=",
+ "narHash": "sha256-Aqubcd5AOuP6XUdvjeCXIP6Yksn8uBXbS62kWXBop1w=",
"path": "../../flakes/private/milters",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-B2JdIp5q/8/LurN4lXB17C1+mpEKeqPzObmNOObO5rQ=",
+ "narHash": "sha256-60yr/wCF+U3z+wYR+UEgM+68nc4/CWkoIAjJsMpUG8c=",
"path": "../systems/backup-2",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-dWAbGxB91utxwTlxsJZdp2OSaIAo8y5LXjdTCFMRn+4=",
+ "narHash": "sha256-9geQj091r2/Sxi8/ghsp5mO8MIT/kT+nEL3PKgwuApc=",
"path": "../systems/dilion",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-OvT4dJGxdFBUgwjTu6FzejI/euWYXWsX1vD952B8934=",
+ "narHash": "sha256-MB/c+BVgQQ3qjAchd1Oe8qvg9UbFcY0xhxpj9RkEOnI=",
"path": "../systems/eldiron",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-6hqQjoy1lyIJziqe0AJ62aq62soi5D14NKOzNEY3SsQ=",
+ "narHash": "sha256-nV8j6HW6B93HEbeiy43tKCGV9J6xR7jIkAUZVbkKDt4=",
"path": "../systems/monitoring-1",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-yBuAfW59X0e840QBFtQrefG3T/IQIQSXiZ4WU2/+gBI=",
+ "narHash": "sha256-4vXBjKeelh3z1l7ZYO0ucB2cZPuVJsYX7yZV3MDGqdk=",
"path": "../systems/quatresaisons",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-Q+U6JxtY67jVPjuzfwrjSGmIM73kIRrjKm0ihbUxPGQ=",
+ "narHash": "sha256-wAhvhb/zq5upukz/cfyN1nRfYTcFby8OJi2yFaZBGIM=",
"path": "../systems/zoldene",
"type": "path"
},
},
"nixpkgs_71": {
"locked": {
- "lastModified": 1708475490,
- "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=",
+ "lastModified": 1720031269,
+ "narHash": "sha256-rwz8NJZV+387rnWpTYcXaRNvzUSnnF9aHONoJIYmiUQ=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "0e74ca98a74bc7270d28838369593635a5db3260",
+ "rev": "9f4128e00b0ae8ec65918efeba59db998750ead6",
"type": "github"
},
"original": {
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-/vQ6FGFc53r79yiQrzF0NWTbRd4RKf8QiPSDhmiCciU=",
+ "narHash": "sha256-LDicilQIpNXKg/UD6uyf66h/iL/rhDOkkVjTMdKRzX4=",
"path": "../../flakes/private/opendmarc",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "../../flakes/private/chatons",
"type": "path"
},
"private-environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"private-environment_2": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-VhRXb3AAlSKwkq4BfVmoKzkLxEaAFGjYLAFETTZuhjE=",
+ "narHash": "sha256-Aqubcd5AOuP6XUdvjeCXIP6Yksn8uBXbS62kWXBop1w=",
"path": "../../flakes/private/milters",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-/vQ6FGFc53r79yiQrzF0NWTbRd4RKf8QiPSDhmiCciU=",
+ "narHash": "sha256-LDicilQIpNXKg/UD6uyf66h/iL/rhDOkkVjTMdKRzX4=",
"path": "../../flakes/private/opendmarc",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-gjapO6CZFeLMHUlhqBVZu5P+IJzJaPu4pnuTep4ZSuM=",
+ "narHash": "sha256-mhoBv1NxQoAMlfFGkgGC28cjMTgUxgb2oqNS+k6kWH4=",
"path": "../../flakes/private/ssh",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0RN3EjVLumRs4/CYgYA1+UQecq+LyzrUJI6SpGHN/50=",
+ "narHash": "sha256-2fWHwmMMILe0enrbMMgFoVH+3PysvSx1Oair4W2hgIw=",
"path": "../../flakes/etherpad-lite",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0j7YmFwrbLg3FKeAcZApJ240cpt6uhiEEZt5v52QN5Q=",
+ "narHash": "sha256-emS5jDCcLaK3/Hqk/2p6jQDxZfO1hPicMTblyVBD7EI=",
"path": "../../flakes/grocy",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../flakes/mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-SaZuUdU7estQQxxOhZ0mRyaQHK3AnlCUo/lTP8MFBao=",
+ "narHash": "sha256-cR14yn0IbWNe98PAlV+MHO6ClQqeT5HztMeLawldtWs=",
"path": "../../flakes/surfer",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0RN3EjVLumRs4/CYgYA1+UQecq+LyzrUJI6SpGHN/50=",
+ "narHash": "sha256-2fWHwmMMILe0enrbMMgFoVH+3PysvSx1Oair4W2hgIw=",
"path": "./etherpad-lite",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0j7YmFwrbLg3FKeAcZApJ240cpt6uhiEEZt5v52QN5Q=",
+ "narHash": "sha256-emS5jDCcLaK3/Hqk/2p6jQDxZfO1hPicMTblyVBD7EI=",
"path": "./grocy",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "./mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "./private/chatons",
"type": "path"
},
"s-private-environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "./private/environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-1sEwMNWSytfyn4Rh5gUJACwCNgaTLdMDkO9hEr5OB7M=",
+ "narHash": "sha256-tY5qk98NpdM4osbPYFeo6/pHiQQU4a4iKw2jCJP99q8=",
"path": "./private/mail-relay",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-VhRXb3AAlSKwkq4BfVmoKzkLxEaAFGjYLAFETTZuhjE=",
+ "narHash": "sha256-Aqubcd5AOuP6XUdvjeCXIP6Yksn8uBXbS62kWXBop1w=",
"path": "./private/milters",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "./private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-/vQ6FGFc53r79yiQrzF0NWTbRd4RKf8QiPSDhmiCciU=",
+ "narHash": "sha256-LDicilQIpNXKg/UD6uyf66h/iL/rhDOkkVjTMdKRzX4=",
"path": "./private/opendmarc",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-gjapO6CZFeLMHUlhqBVZu5P+IJzJaPu4pnuTep4ZSuM=",
+ "narHash": "sha256-mhoBv1NxQoAMlfFGkgGC28cjMTgUxgb2oqNS+k6kWH4=",
"path": "./private/ssh",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "./private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-SaZuUdU7estQQxxOhZ0mRyaQHK3AnlCUo/lTP8MFBao=",
+ "narHash": "sha256-cR14yn0IbWNe98PAlV+MHO6ClQqeT5HztMeLawldtWs=",
"path": "./surfer",
"type": "path"
},
"nixpkgs": "nixpkgs_106"
},
"locked": {
- "lastModified": 1713004475,
- "narHash": "sha256-zXj5DiaeAiLGIFcgMyQTtICXg4kgIiiYcTbnDIocY38=",
+ "lastModified": 1722637825,
+ "narHash": "sha256-nVRtZ9lu7ILJPA+wNn5D+5R7nJBKtfY0Rx335xVUYFw=",
"ref": "master",
- "rev": "8fd3e35df106a494e3195708e8cba076f2c94acb",
- "revCount": 728,
+ "rev": "c0221952994e304539e9cccd5db8e818df4e6e51",
+ "revCount": 747,
"type": "git",
"url": "git+ssh://gitolite@git.immae.eu/perso/Immae/Config/Nix/Nixops/Secrets"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "../../flakes/private/chatons",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "../../flakes/private/chatons",
"type": "path"
},
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_10": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_11": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_12": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_13": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_14": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_15": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_16": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_17": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_18": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_19": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_2": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_20": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_21": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_22": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_23": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_24": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_25": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_26": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_27": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_28": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_29": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_3": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_30": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_31": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_32": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_4": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_5": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_6": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_7": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_8": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_9": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-N8FlN9eUGGmz7MevjaGC7Y07AEebJGRzcESmOW87/0Q=",
+ "narHash": "sha256-R3FAjRFGXXrYqICZrB0jFWVe7Ahqu1s8HSGYucmCfiU=",
"path": "./flakes",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-1sEwMNWSytfyn4Rh5gUJACwCNgaTLdMDkO9hEr5OB7M=",
+ "narHash": "sha256-tY5qk98NpdM4osbPYFeo6/pHiQQU4a4iKw2jCJP99q8=",
"path": "../../flakes/private/mail-relay",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-1sEwMNWSytfyn4Rh5gUJACwCNgaTLdMDkO9hEr5OB7M=",
+ "narHash": "sha256-tY5qk98NpdM4osbPYFeo6/pHiQQU4a4iKw2jCJP99q8=",
"path": "../../flakes/private/mail-relay",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-VhRXb3AAlSKwkq4BfVmoKzkLxEaAFGjYLAFETTZuhjE=",
+ "narHash": "sha256-Aqubcd5AOuP6XUdvjeCXIP6Yksn8uBXbS62kWXBop1w=",
"path": "../../flakes/private/milters",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-B2JdIp5q/8/LurN4lXB17C1+mpEKeqPzObmNOObO5rQ=",
+ "narHash": "sha256-60yr/wCF+U3z+wYR+UEgM+68nc4/CWkoIAjJsMpUG8c=",
"path": "../systems/backup-2",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-dWAbGxB91utxwTlxsJZdp2OSaIAo8y5LXjdTCFMRn+4=",
+ "narHash": "sha256-9geQj091r2/Sxi8/ghsp5mO8MIT/kT+nEL3PKgwuApc=",
"path": "../systems/dilion",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-OvT4dJGxdFBUgwjTu6FzejI/euWYXWsX1vD952B8934=",
+ "narHash": "sha256-MB/c+BVgQQ3qjAchd1Oe8qvg9UbFcY0xhxpj9RkEOnI=",
"path": "../systems/eldiron",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-6hqQjoy1lyIJziqe0AJ62aq62soi5D14NKOzNEY3SsQ=",
+ "narHash": "sha256-nV8j6HW6B93HEbeiy43tKCGV9J6xR7jIkAUZVbkKDt4=",
"path": "../systems/monitoring-1",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-yBuAfW59X0e840QBFtQrefG3T/IQIQSXiZ4WU2/+gBI=",
+ "narHash": "sha256-4vXBjKeelh3z1l7ZYO0ucB2cZPuVJsYX7yZV3MDGqdk=",
"path": "../systems/quatresaisons",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-Q+U6JxtY67jVPjuzfwrjSGmIM73kIRrjKm0ihbUxPGQ=",
+ "narHash": "sha256-wAhvhb/zq5upukz/cfyN1nRfYTcFby8OJi2yFaZBGIM=",
"path": "../systems/zoldene",
"type": "path"
},
},
"nixpkgs_71": {
"locked": {
- "lastModified": 1708475490,
- "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=",
+ "lastModified": 1720031269,
+ "narHash": "sha256-rwz8NJZV+387rnWpTYcXaRNvzUSnnF9aHONoJIYmiUQ=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "0e74ca98a74bc7270d28838369593635a5db3260",
+ "rev": "9f4128e00b0ae8ec65918efeba59db998750ead6",
"type": "github"
},
"original": {
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-/vQ6FGFc53r79yiQrzF0NWTbRd4RKf8QiPSDhmiCciU=",
+ "narHash": "sha256-LDicilQIpNXKg/UD6uyf66h/iL/rhDOkkVjTMdKRzX4=",
"path": "../../flakes/private/opendmarc",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "../../flakes/private/chatons",
"type": "path"
},
"private-environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"private-environment_2": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-VhRXb3AAlSKwkq4BfVmoKzkLxEaAFGjYLAFETTZuhjE=",
+ "narHash": "sha256-Aqubcd5AOuP6XUdvjeCXIP6Yksn8uBXbS62kWXBop1w=",
"path": "../../flakes/private/milters",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-/vQ6FGFc53r79yiQrzF0NWTbRd4RKf8QiPSDhmiCciU=",
+ "narHash": "sha256-LDicilQIpNXKg/UD6uyf66h/iL/rhDOkkVjTMdKRzX4=",
"path": "../../flakes/private/opendmarc",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-gjapO6CZFeLMHUlhqBVZu5P+IJzJaPu4pnuTep4ZSuM=",
+ "narHash": "sha256-mhoBv1NxQoAMlfFGkgGC28cjMTgUxgb2oqNS+k6kWH4=",
"path": "../../flakes/private/ssh",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0RN3EjVLumRs4/CYgYA1+UQecq+LyzrUJI6SpGHN/50=",
+ "narHash": "sha256-2fWHwmMMILe0enrbMMgFoVH+3PysvSx1Oair4W2hgIw=",
"path": "../../flakes/etherpad-lite",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0j7YmFwrbLg3FKeAcZApJ240cpt6uhiEEZt5v52QN5Q=",
+ "narHash": "sha256-emS5jDCcLaK3/Hqk/2p6jQDxZfO1hPicMTblyVBD7EI=",
"path": "../../flakes/grocy",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../flakes/mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-SaZuUdU7estQQxxOhZ0mRyaQHK3AnlCUo/lTP8MFBao=",
+ "narHash": "sha256-cR14yn0IbWNe98PAlV+MHO6ClQqeT5HztMeLawldtWs=",
"path": "../../flakes/surfer",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0RN3EjVLumRs4/CYgYA1+UQecq+LyzrUJI6SpGHN/50=",
+ "narHash": "sha256-2fWHwmMMILe0enrbMMgFoVH+3PysvSx1Oair4W2hgIw=",
"path": "./etherpad-lite",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0j7YmFwrbLg3FKeAcZApJ240cpt6uhiEEZt5v52QN5Q=",
+ "narHash": "sha256-emS5jDCcLaK3/Hqk/2p6jQDxZfO1hPicMTblyVBD7EI=",
"path": "./grocy",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "./mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "./private/chatons",
"type": "path"
},
"s-private-environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "./private/environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-1sEwMNWSytfyn4Rh5gUJACwCNgaTLdMDkO9hEr5OB7M=",
+ "narHash": "sha256-tY5qk98NpdM4osbPYFeo6/pHiQQU4a4iKw2jCJP99q8=",
"path": "./private/mail-relay",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-VhRXb3AAlSKwkq4BfVmoKzkLxEaAFGjYLAFETTZuhjE=",
+ "narHash": "sha256-Aqubcd5AOuP6XUdvjeCXIP6Yksn8uBXbS62kWXBop1w=",
"path": "./private/milters",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "./private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-/vQ6FGFc53r79yiQrzF0NWTbRd4RKf8QiPSDhmiCciU=",
+ "narHash": "sha256-LDicilQIpNXKg/UD6uyf66h/iL/rhDOkkVjTMdKRzX4=",
"path": "./private/opendmarc",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-gjapO6CZFeLMHUlhqBVZu5P+IJzJaPu4pnuTep4ZSuM=",
+ "narHash": "sha256-mhoBv1NxQoAMlfFGkgGC28cjMTgUxgb2oqNS+k6kWH4=",
"path": "./private/ssh",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "./private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-SaZuUdU7estQQxxOhZ0mRyaQHK3AnlCUo/lTP8MFBao=",
+ "narHash": "sha256-cR14yn0IbWNe98PAlV+MHO6ClQqeT5HztMeLawldtWs=",
"path": "./surfer",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "../../flakes/private/chatons",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "../../flakes/private/chatons",
"type": "path"
},
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_10": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_11": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_12": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_13": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_14": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_15": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_16": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_17": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_18": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_19": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_2": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_20": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_21": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_22": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_23": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_24": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_25": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_26": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_27": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_28": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_29": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_3": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_30": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_31": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_32": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_4": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_5": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_6": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_7": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_8": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_9": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-1sEwMNWSytfyn4Rh5gUJACwCNgaTLdMDkO9hEr5OB7M=",
+ "narHash": "sha256-tY5qk98NpdM4osbPYFeo6/pHiQQU4a4iKw2jCJP99q8=",
"path": "../../flakes/private/mail-relay",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-1sEwMNWSytfyn4Rh5gUJACwCNgaTLdMDkO9hEr5OB7M=",
+ "narHash": "sha256-tY5qk98NpdM4osbPYFeo6/pHiQQU4a4iKw2jCJP99q8=",
"path": "../../flakes/private/mail-relay",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-VhRXb3AAlSKwkq4BfVmoKzkLxEaAFGjYLAFETTZuhjE=",
+ "narHash": "sha256-Aqubcd5AOuP6XUdvjeCXIP6Yksn8uBXbS62kWXBop1w=",
"path": "../../flakes/private/milters",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-B2JdIp5q/8/LurN4lXB17C1+mpEKeqPzObmNOObO5rQ=",
+ "narHash": "sha256-60yr/wCF+U3z+wYR+UEgM+68nc4/CWkoIAjJsMpUG8c=",
"path": "../systems/backup-2",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-dWAbGxB91utxwTlxsJZdp2OSaIAo8y5LXjdTCFMRn+4=",
+ "narHash": "sha256-9geQj091r2/Sxi8/ghsp5mO8MIT/kT+nEL3PKgwuApc=",
"path": "../systems/dilion",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-OvT4dJGxdFBUgwjTu6FzejI/euWYXWsX1vD952B8934=",
+ "narHash": "sha256-MB/c+BVgQQ3qjAchd1Oe8qvg9UbFcY0xhxpj9RkEOnI=",
"path": "../systems/eldiron",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-6hqQjoy1lyIJziqe0AJ62aq62soi5D14NKOzNEY3SsQ=",
+ "narHash": "sha256-nV8j6HW6B93HEbeiy43tKCGV9J6xR7jIkAUZVbkKDt4=",
"path": "../systems/monitoring-1",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-yBuAfW59X0e840QBFtQrefG3T/IQIQSXiZ4WU2/+gBI=",
+ "narHash": "sha256-4vXBjKeelh3z1l7ZYO0ucB2cZPuVJsYX7yZV3MDGqdk=",
"path": "../systems/quatresaisons",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-Q+U6JxtY67jVPjuzfwrjSGmIM73kIRrjKm0ihbUxPGQ=",
+ "narHash": "sha256-wAhvhb/zq5upukz/cfyN1nRfYTcFby8OJi2yFaZBGIM=",
"path": "../systems/zoldene",
"type": "path"
},
},
"nixpkgs_70": {
"locked": {
- "lastModified": 1708475490,
- "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=",
+ "lastModified": 1720031269,
+ "narHash": "sha256-rwz8NJZV+387rnWpTYcXaRNvzUSnnF9aHONoJIYmiUQ=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "0e74ca98a74bc7270d28838369593635a5db3260",
+ "rev": "9f4128e00b0ae8ec65918efeba59db998750ead6",
"type": "github"
},
"original": {
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-/vQ6FGFc53r79yiQrzF0NWTbRd4RKf8QiPSDhmiCciU=",
+ "narHash": "sha256-LDicilQIpNXKg/UD6uyf66h/iL/rhDOkkVjTMdKRzX4=",
"path": "../../flakes/private/opendmarc",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "../../flakes/private/chatons",
"type": "path"
},
"private-environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"private-environment_2": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-VhRXb3AAlSKwkq4BfVmoKzkLxEaAFGjYLAFETTZuhjE=",
+ "narHash": "sha256-Aqubcd5AOuP6XUdvjeCXIP6Yksn8uBXbS62kWXBop1w=",
"path": "../../flakes/private/milters",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-/vQ6FGFc53r79yiQrzF0NWTbRd4RKf8QiPSDhmiCciU=",
+ "narHash": "sha256-LDicilQIpNXKg/UD6uyf66h/iL/rhDOkkVjTMdKRzX4=",
"path": "../../flakes/private/opendmarc",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-gjapO6CZFeLMHUlhqBVZu5P+IJzJaPu4pnuTep4ZSuM=",
+ "narHash": "sha256-mhoBv1NxQoAMlfFGkgGC28cjMTgUxgb2oqNS+k6kWH4=",
"path": "../../flakes/private/ssh",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0RN3EjVLumRs4/CYgYA1+UQecq+LyzrUJI6SpGHN/50=",
+ "narHash": "sha256-2fWHwmMMILe0enrbMMgFoVH+3PysvSx1Oair4W2hgIw=",
"path": "../../flakes/etherpad-lite",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0j7YmFwrbLg3FKeAcZApJ240cpt6uhiEEZt5v52QN5Q=",
+ "narHash": "sha256-emS5jDCcLaK3/Hqk/2p6jQDxZfO1hPicMTblyVBD7EI=",
"path": "../../flakes/grocy",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../flakes/mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-SaZuUdU7estQQxxOhZ0mRyaQHK3AnlCUo/lTP8MFBao=",
+ "narHash": "sha256-cR14yn0IbWNe98PAlV+MHO6ClQqeT5HztMeLawldtWs=",
"path": "../../flakes/surfer",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0RN3EjVLumRs4/CYgYA1+UQecq+LyzrUJI6SpGHN/50=",
+ "narHash": "sha256-2fWHwmMMILe0enrbMMgFoVH+3PysvSx1Oair4W2hgIw=",
"path": "./etherpad-lite",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0j7YmFwrbLg3FKeAcZApJ240cpt6uhiEEZt5v52QN5Q=",
+ "narHash": "sha256-emS5jDCcLaK3/Hqk/2p6jQDxZfO1hPicMTblyVBD7EI=",
"path": "./grocy",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "./mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "./private/chatons",
"type": "path"
},
"s-private-environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "./private/environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-1sEwMNWSytfyn4Rh5gUJACwCNgaTLdMDkO9hEr5OB7M=",
+ "narHash": "sha256-tY5qk98NpdM4osbPYFeo6/pHiQQU4a4iKw2jCJP99q8=",
"path": "./private/mail-relay",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-VhRXb3AAlSKwkq4BfVmoKzkLxEaAFGjYLAFETTZuhjE=",
+ "narHash": "sha256-Aqubcd5AOuP6XUdvjeCXIP6Yksn8uBXbS62kWXBop1w=",
"path": "./private/milters",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "./private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-/vQ6FGFc53r79yiQrzF0NWTbRd4RKf8QiPSDhmiCciU=",
+ "narHash": "sha256-LDicilQIpNXKg/UD6uyf66h/iL/rhDOkkVjTMdKRzX4=",
"path": "./private/opendmarc",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-gjapO6CZFeLMHUlhqBVZu5P+IJzJaPu4pnuTep4ZSuM=",
+ "narHash": "sha256-mhoBv1NxQoAMlfFGkgGC28cjMTgUxgb2oqNS+k6kWH4=",
"path": "./private/ssh",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "./private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-SaZuUdU7estQQxxOhZ0mRyaQHK3AnlCUo/lTP8MFBao=",
+ "narHash": "sha256-cR14yn0IbWNe98PAlV+MHO6ClQqeT5HztMeLawldtWs=",
"path": "./surfer",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
- $this->setEmpty('resource.history', 'data/history.php');
+ if ($this->userSpace === null) {
+ $data = 'data';
-+ $tmp = 'tmp';
++ $tmp = 'tmp/';
+ $cache = 'cache';
+ $pagecache = 'pagecache';
+ } else {
+ $data = 'data/' . ($this->userSpace);
-+ $tmp = 'tmp/' . ($this->userSpace);
++ $tmp = 'tmp/' . ($this->userSpace) . '/';
+ $cache = 'cache/' . ($this->userSpace);
+ $pagecache = 'pagecache/' . ($this->userSpace);
+ }
nextcloud_25 = callPackage ./nextcloud { nextcloudVersion = 25; };
nextcloud_26 = callPackage ./nextcloud { nextcloudVersion = 26; };
nextcloud_27 = callPackage ./nextcloud { nextcloudVersion = 27; };
+ nextcloud_27_2 = callPackage ./nextcloud { nextcloudVersion = "27_2"; };
+ # required postgresql and php upgrade!
+ #nextcloud_28 = callPackage ./nextcloud { nextcloudVersion = 28; };
+ #nextcloud_29 = callPackage ./nextcloud { nextcloudVersion = 29; };
nextcloud_25-all = nextcloud_25.withApps (a: builtins.attrValues nextcloud_25.allSupportedApps);
nextcloud_26-all = nextcloud_26.withApps (a: builtins.attrValues nextcloud_26.allSupportedApps);
nextcloud_27-all = nextcloud_27.withApps (a: builtins.attrValues nextcloud_27.allSupportedApps);
+ nextcloud_27_2-all = nextcloud_27_2.withApps (a: builtins.attrValues nextcloud_27_2.allSupportedApps);
+ # required postgresql and php upgrade!
+ #nextcloud_28-all = nextcloud_28.withApps (a: builtins.attrValues nextcloud_28.allSupportedApps);
+ #nextcloud_29-all = nextcloud_29.withApps (a: builtins.attrValues nextcloud_29.allSupportedApps);
phpbb = callPackage ./phpbb {};
phpldapadmin = callPackage ./phpldapadmin {};
rompr = callPackage ./rompr {};
-{ mantis_config ? "/etc/mantisbt/config_inc.php", stdenv, fetchurl, lib, callPackage}:
+{ mantis_config ? {}, stdenv, fetchurl, lib, callPackage}:
let
- pluginNames = [ "slack" "source-integration" ];
+ pluginNames = [ "slack" "source-integration" "taskodrome" "mantis-kanban" "tasks" ];
allPlugins = lib.attrsets.genAttrs pluginNames
(name: callPackage (./plugins + "/${name}") {});
toPassthru = pkg: plugins: {
in newMantisbt;
package = stdenv.mkDerivation rec {
name = "mantisbt-${version}";
- version = "2.21.0";
+ version = "2.26.1";
src = fetchurl {
url = "https://downloads.sourceforge.net/project/mantisbt/mantis-stable/${version}/${name}.tar.gz";
- sha256 = "13lx569dp1gibq5daqp7dj6gsqic85rrix1s7xkp60gwpzk8wiw5";
+ sha256 = "sha256-poJCEjq+yB2RbA0k5go899mBGBXewjLZHGFmabrCYW4=";
};
- patches = [
- ./bug_report.php.diff
- ./bug_report_page.php.diff
- ./bugnote_add.php.diff
- ./bugnote_add_inc.php.diff
- ];
+ # FIXME: captcha for anonymous
+ #patches = [
+ # ./bug_report.php.diff
+ # ./bug_report_page.php.diff
+ # ./bugnote_add.php.diff
+ # ./bugnote_add_inc.php.diff
+ #];
installPhase = ''
cp -a . $out
- ln -s ${mantis_config} $out/config/config_inc.php
- '';
+ '' + builtins.concatStringsSep "\n" (lib.mapAttrsToList (k: v: "ln -s ${v} $out/config/${k}.php") mantis_config);
passthru = toPassthru package [];
};
--- /dev/null
+{ stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+ version = "v2.1.0";
+ name = "mantisbt-plugin-kanban-${version}";
+ src = fetchFromGitHub {
+ owner = "mantisbt-plugins";
+ repo = "MantisKanban";
+ rev = "62c3815578cab8a7766580049c3a4f5968331231";
+ sha256 = "sha256-wvinh7+QjsCEk05LHCL1KfTy/3+PvnVYwduHq2hlQP0=";
+ };
+ installPhase = ''
+ mkdir $out
+ cp -a * $out/
+ '';
+ passthru = {
+ pluginName = "MantisKanban";
+ };
+}
+
--- /dev/null
+{ stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+ version = "v2.1.8";
+ name = "mantisbt-plugin-taskodrome-${version}";
+ src = fetchFromGitHub {
+ owner = "mantisbt-plugins";
+ repo = "Taskodrome";
+ rev = "d8e24a0991f58a902c6c5cf9e88132a17ad533ac";
+ sha256 = "sha256-Jp2ROIjcSFTtGC58sDUg4FaB3mOKbY3GGpnIQqSpUaY=";
+ };
+ installPhase = ''
+ mkdir $out
+ cp -a Taskodrome $out/
+ '';
+ passthru = {
+ pluginName = "Taskodrome";
+ selector = "Taskodrome";
+ };
+}
--- /dev/null
+{ stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+ version = "v3.30";
+ name = "mantisbt-plugin-tasks-${version}";
+ src = fetchFromGitHub {
+ owner = "mantisbt-plugins";
+ repo = "Tasks";
+ rev = "38d8255aa989b914ec0730e58ca73708d07f35c3";
+ sha256 = "sha256-QDMa8ar/FEpJCSH1D9LEaXSDR+WRkDx3stXm2+LKO0Q=";
+ };
+ installPhase = ''
+ mkdir $out
+ cp -a * $out/
+ '';
+ passthru = {
+ pluginName = "Tasks";
+ };
+}
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/audioplayer
audioplayer_3_4_0 = buildApp rec {
appName = "audioplayer";
version = "3.4.0";
url = "https://github.com/Rello/${appName}/releases/download/${version}/${appName}-${version}.tar.gz";
sha256 = "sha256-pog9cll02+AbYHG/jiUztO9odqu7PSEWBUieK32Eqf4=";
};
+ audioplayer_3_4_1 = buildApp rec {
+ appName = "audioplayer";
+ version = "3.4.1";
+ url = "https://github.com/Rello/${appName}/releases/download/${version}/${appName}-${version}.tar.gz";
+ sha256 = "sha256-ZPIvn5devG6puTyxgXlBpA60kJsYWXbQLNiL5f2jLrA=";
+ };
versions = {
"25" = audioplayer_3_4_0;
"26" = audioplayer_3_4_0;
"27" = audioplayer_3_4_0;
+ "27_2" = audioplayer_3_4_1;
+ "28" = audioplayer_3_4_1;
+ "29" = audioplayer_3_4_1;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app audioplayer")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/bookmarks
bookmarks_12_1_0 = buildApp rec {
appName = "bookmarks";
version = "12.1.0";
url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}-${version}.tar.gz";
sha256 = "sha256-7Gx8e8C2dDkB/39eAGKOLrP3YkVbGkfPKpQBeCaV/cE=";
};
+ bookmarks_13_1_3 = buildApp rec {
+ appName = "bookmarks";
+ version = "13.1.3";
+ url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}-${version}.tar.gz";
+ sha256 = "sha256-9jSUtLT89UkxZhvyp+cDNV2OAc0+BzFoXAd5YfJTgXo=";
+ };
+ bookmarks_14_2_2 = buildApp rec {
+ appName = "bookmarks";
+ version = "14.2.2";
+ url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}-${version}.tar.gz";
+ sha256 = "sha256-hqmX64arwllviwG7ySvdwA8IYzWoLjP2MyhT389UZXw=";
+ };
versions = {
"25" = bookmarks_12_1_0;
"26" = bookmarks_13_0_1;
"27" = bookmarks_13_0_1;
+ "27_2" = bookmarks_13_1_3;
+ "28" = bookmarks_14_2_2;
+ "29" = bookmarks_14_2_2;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app bookmarks")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/calendar
calendar_4_4_4 = buildApp rec {
appName = "calendar";
version = "4.4.4";
url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
sha256 = "sha256-8UeHOpgbUf2oHHOvLN58v68QvyDYQXkSjsVKn6UGrGU=";
};
+ calendar_4_7_6 = buildApp rec {
+ appName = "calendar";
+ version = "4.7.6";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-WSz30rta3PdNaxisxUNE1Zcp5MPfw9jB9ervMjgjZss=";
+ };
versions = {
"25" = calendar_4_4_4;
"26" = calendar_4_4_4;
"27" = calendar_4_4_4;
+ "27_2" = calendar_4_7_6;
+ "28" = calendar_4_7_6;
+ "29" = calendar_4_7_6;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app calendar")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/carnet
carnet_0_25_2 = buildApp rec {
appName = "carnet";
version = "0.25.2";
url = "https://github.com/PhieF/CarnetNextcloud/releases/download/v${version}/${appName}-nc-v${version}.tar.gz";
sha256 = "sha256-HArD+M6UA9BhSsrlpp/gsKWkUTWAoNHl/gr0S3AlKzg=";
};
+ carnet_0_25_4 = buildApp rec {
+ appName = "carnet";
+ version = "0.25.4";
+ url = "https://github.com/PhieF/CarnetNextcloud/releases/download/v${version}/${appName}-nc-v${version}.tar.gz";
+ sha256 = "sha256-xKG0MRzWdBYJERXZ6HU4sZIqhL9lVZHnWIkaVdZnYUg=";
+ };
versions = {
"25" = carnet_0_25_2;
"26" = carnet_0_25_2;
"27" = carnet_0_25_2;
+ "27_2" = carnet_0_25_4;
+ "28" = carnet_0_25_4;
+ "29" = carnet_0_25_4;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app carnet")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/contacts
contacts_5_3_2 = buildApp rec {
appName = "contacts";
version = "5.3.2";
url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
sha256 = "sha256-1jQ+pyLBPU7I4wSPkmezJq7ukrQh8WPErG4J6Ps3LR4=";
};
+ contacts_5_5_3 = buildApp rec {
+ appName = "contacts";
+ version = "5.5.3";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-zxmgMiizzXGfReRS9XJ+fb6tJRLH/Z5NvuLpspYARFI=";
+ };
+ contacts_6_0_0 = buildApp rec {
+ appName = "contacts";
+ version = "6.0.0";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-48ERJ9DQ9w71encT2XVvcVaV+EbthgExQliKO1sQ+1A=";
+ };
versions = {
"25" = contacts_5_3_2;
"26" = contacts_5_3_2;
"27" = contacts_5_3_2;
+ "27_2" = contacts_5_5_3;
+ "28" = contacts_5_5_3;
+ "29" = contacts_6_0_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app contacts")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/cookbook
cookbook_0_10_2 = buildApp rec {
appName = "cookbook";
version = "0.10.2";
url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/Cookbook-${version}.tar.gz";
sha256 = "sha256-H7KVeISBnu0/4Q31ihhiXvRtkXz4yLGOAsAj5ERgeCM=";
};
+ cookbook_0_10_5 = buildApp rec {
+ appName = "cookbook";
+ version = "0.10.5";
+ url = "https://github.com/christianlupus-nextcloud/cookbook-releases/releases/download/v${version}/cookbook-${version}.tar.gz";
+ sha256 = "sha256-EHc+AMKsjAVVcNQ00Yf0Z4AFeUWdtf1uYGA5BHlTcTM=";
+ };
+ cookbook_0_11_0 = buildApp rec {
+ appName = "cookbook";
+ version = "0.11.0";
+ url = "https://github.com/christianlupus-nextcloud/cookbook-releases/releases/download/v${version}/cookbook-${version}.tar.gz";
+ sha256 = "sha256-8oIhtI1Bkb3zC/znDLYWmLaVqkiBLLMqbqEAW5HycS4=";
+ };
versions = {
"25" = cookbook_0_10_2;
"26" = cookbook_0_10_2;
"27" = cookbook_0_10_2;
+ "27_2" = cookbook_0_10_5;
+ "28" = cookbook_0_11_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app cookbook")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/deck
deck_1_8_5 = buildApp rec {
appName = "deck";
version = "1.8.5";
url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
sha256 = "sha256-W0XVvhTQoCjoK7S2tEd7bvU0MTWtqYt7QiB9H1p1UP8=";
};
+ deck_1_11_4 = buildApp rec {
+ appName = "deck";
+ version = "1.11.4";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-LIQgzM7C21ON+DMAjwREmgVACPtCMOBYuYbdGYHGnLI=";
+ };
+ deck_1_12_2 = buildApp rec {
+ appName = "deck";
+ version = "1.12.2";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-K9ZG3Pc9dfrF3hFi3FCKoZWywXUaueQuwGpZksumToA=";
+ };
+ deck_1_13_0 = buildApp rec {
+ appName = "deck";
+ version = "1.13.0";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-Gyfyq4rJv4alLhdIW8S8wCUAOdxp6UG7UgUWH0CkVR4=";
+ };
versions = {
"25" = deck_1_8_5;
"26" = deck_1_9_2;
"27" = deck_1_10_0;
+ "27_2" = deck_1_11_4;
+ "28" = deck_1_12_2;
+ "29" = deck_1_13_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app deck")
"drawio" = ["application/x-drawio"];
};
};
+ # https://apps.nextcloud.com/apps/drawio
drawio_2_1_2 = buildApp rec {
appName = "drawio";
version = "2.1.2";
sha256 = "sha256-5BrEnS2cMk/vwkAr1lXKtfocqReZAj1+pbDqmi/uG0A=";
inherit otherConfig;
};
+ drawio_2_1_4 = buildApp rec {
+ appName = "drawio";
+ version = "2.1.4";
+ url = "https://github.com/jgraph/drawio-nextcloud/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-QD7b6+UjWNeS4Z2QLcgBfetIXwqNngFRX9Fryx90mQA=";
+ inherit otherConfig;
+ };
+ drawio_3_0_2 = buildApp rec {
+ appName = "drawio";
+ version = "3.0.2";
+ url = "https://github.com/jgraph/drawio-nextcloud/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-7ulo+7rHIOCCFt4LhXDFQc+ighMiwfHDwcJuCfCb4CE=";
+ inherit otherConfig;
+ };
versions = {
"25" = drawio_2_1_2;
"26" = drawio_2_1_2;
"27" = drawio_2_1_2;
+ "27_2" = drawio_2_1_4;
+ "28" = drawio_3_0_2;
+ "29" = drawio_3_0_2;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app drawio")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/external
external_5_0_2 = buildApp rec {
appName = "external";
version = "5.0.2";
url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
sha256 = "sha256-XqeJCWS8mncS7CfrnXdhtzdgkFTib/RnursJ/AqyvD8=";
};
+ external_5_2_1 = buildApp rec {
+ appName = "external";
+ version = "5.2.1";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-kyeqd/KRbDuqfnYUb0sb7QF1LKmtQvlI/NPCH8oFutQ=";
+ };
+ external_5_3_1 = buildApp rec {
+ appName = "external";
+ version = "5.3.1";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-WJBu2KFLsT/p+iiwy0p5UdKdrSMrfD3dSQjwuAw6DwY=";
+ };
+ external_5_4_0 = buildApp rec {
+ appName = "external";
+ version = "5.4.0";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-7DxvOwy+AI/+t559ffqCIDBnyozxQTe1EhvbUhX64UY=";
+ };
versions = {
"25" = external_5_0_2;
"26" = external_5_1_0;
"27" = external_5_2_0;
+ "27_2" = external_5_2_1;
+ "28" = external_5_3_1;
+ "29" = external_5_4_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app external")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/extract
extract_1_3_6 = buildApp rec {
appName = "extract";
version = "1.3.6";
"25" = extract_1_3_6;
"26" = extract_1_3_6;
"27" = extract_1_3_6;
+ "27_2" = extract_1_3_6;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app extract")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/files_markdown
files_markdown_2_4_1 = buildApp rec {
appName = "files_markdown";
version = "2.4.1";
"25" = files_markdown_2_4_1;
"26" = files_markdown_2_4_1;
"27" = files_markdown_2_4_1;
+ "27_2" = files_markdown_2_4_1;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app files_markdown")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/files_mindmap
files_mindmap_0_0_28 = buildApp rec {
appName = "files_mindmap";
version = "0.0.28";
url = "https://github.com/ACTom/${appName}/releases/download/v${version}/${appName}-${version}.tar.gz";
sha256 = "sha256-VlzqstlsdinaqkbK32NvS1oFoQcFasJGHSlcKxdQwIM=";
};
+ files_mindmap_0_0_30 = buildApp rec {
+ appName = "files_mindmap";
+ version = "0.0.30";
+ url = "https://github.com/ACTom/${appName}/releases/download/v${version}/${appName}-${version}.tar.gz";
+ sha256 = "sha256-VsaJT3lsPqnCmgLYkkdLhyIRmi/CumEdezsvhra2NQk=";
+ };
versions = {
"25" = files_mindmap_0_0_28;
"26" = files_mindmap_0_0_28;
"27" = files_mindmap_0_0_28;
+ "27_2" = files_mindmap_0_0_30;
+ "28" = files_mindmap_0_0_30;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app files_mindmap")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/files_readmemd
files_readmemd_2_0_0 = buildApp rec {
appName = "files_readmemd";
version = "2.0.0";
url = "https://github.com/mamatt/files_readmemd/releases/download/V${version}/${appName}.tar.gz";
sha256 = "sha256-vUoSK+b4gj51eJcocrXINO/eFKPRZQoj0q6l0gVBqgw=";
};
+ files_readmemd_2_0_1 = buildApp rec {
+ appName = "files_readmemd";
+ version = "2.0.1";
+ url = "https://github.com/mamatt/files_readmemd/releases/download/V${version}/${appName}.tar.gz";
+ sha256 = "sha256-tilluHmSXiuiW07rtbBGckUxrL92BPhIcBt5aPLkhq8=";
+ };
versions = {
"25" = files_readmemd_2_0_0;
"26" = files_readmemd_2_0_0;
+ "27_2" = files_readmemd_2_0_1;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app files_readmemd")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/flowupload
flowupload_1_1_3 = buildApp rec {
appName = "flowupload";
version = "1.1.3";
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/gpxedit
gpxedit_0_0_14 = buildApp rec {
appName = "gpxedit";
version = "0.0.14";
"gpx" = ["application/gpx+xml"];
};
};
+ # https://apps.nextcloud.com/apps/gpxpod
gpxpod_5_0_10 = buildApp rec {
appName = "gpxpod";
version = "5.0.10";
sha256 = "sha256-uhz6AC8opDQkFQDpG4u8H4vkFtzbFAZvb8r32QHj/8I=";
inherit otherConfig;
};
+ gpxpod_5_0_13 = buildApp rec {
+ appName = "gpxpod";
+ version = "5.0.13";
+ url = "https://github.com/julien-nc/gpxpod/releases/download/v${version}/${appName}-${version}.tar.gz";
+ sha256 = "sha256-NdP95TtTd9Vo6f+PQ/JpcpJNvqRZQ/3NWxNaQRu67vs=";
+ inherit otherConfig;
+ };
+ gpxpod_5_0_18 = buildApp rec {
+ appName = "gpxpod";
+ version = "5.0.18";
+ url = "https://github.com/julien-nc/gpxpod/releases/download/v${version}/${appName}-${version}.tar.gz";
+ sha256 = "sha256-OaU903sxoSzfVv1igwSLdgepgXKBkEuoin/crSg+RyA=";
+ inherit otherConfig;
+ };
versions = {
"25" = gpxpod_5_0_10;
"26" = gpxpod_5_0_12;
"27" = gpxpod_5_0_12;
+ "27_2" = gpxpod_5_0_13;
+ "28" = gpxpod_5_0_18;
+ "29" = gpxpod_5_0_18;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app gpxpod")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/groupfolders
groupfolders_13_1_5 = buildApp rec {
appName = "groupfolders";
version = "13.1.5";
url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
sha256 = "sha256-NsTZhmY1XBKHn/1IcIp2Al7BwJzE2xoBzgyBXnmuWls=";
};
+ groupfolders_15_3_8 = buildApp rec {
+ appName = "groupfolders";
+ version = "15.3.8";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-0R2FN7ba5FI95GWTUeE2JUoYIvSLIsQH/Y+VTqZQn1M=";
+ };
+ groupfolders_16_0_7 = buildApp rec {
+ appName = "groupfolders";
+ version = "16.0.7";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-a22KP20fE+cpOuv2erl3qUu4glWArx5oISFlI8vxAQc=";
+ };
+ groupfolders_17_0_1 = buildApp rec {
+ appName = "groupfolders";
+ version = "17.0.1";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-x9T/JoNJl6LxaPzF9IpKaGrz321nbMSAN3gfZbSapGE=";
+ };
versions = {
"25" = groupfolders_13_1_5;
"26" = groupfolders_14_0_4;
"27" = groupfolders_15_0_2;
+ "27_2" = groupfolders_15_3_8;
+ "28" = groupfolders_16_0_7;
+ "29" = groupfolders_17_0_1;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app groupfolders")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/impersonate
impersonate_1_12_1 = buildApp rec {
appName = "impersonate";
version = "1.12.1";
url = "https://github.com/nextcloud-releases/impersonate/releases/download/v${version}/${appName}-v${version}.tar.gz";
sha256 = "sha256-A1rGJJLaWhiNf9l0YUh6WOB+fKRBRDckE890hq5OB4k=";
};
+ impersonate_1_15_0 = buildApp rec {
+ appName = "impersonate";
+ version = "1.15.0";
+ url = "https://github.com/nextcloud-releases/impersonate/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-fJ96PmkRvgmoIYmF7r/zOQ88/tjb6d0+sQ1YbKq8sY8=";
+ };
+ impersonate_1_16_0 = buildApp rec {
+ appName = "impersonate";
+ version = "1.16.0";
+ url = "https://github.com/nextcloud-releases/impersonate/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-7NCfm2c861E1ZOZhpqjbsw2LC9I7ypp2J1LamqmWvtU=";
+ };
versions = {
"25" = impersonate_1_12_1;
"26" = impersonate_1_13_1;
"27" = impersonate_1_14_0;
+ "27_2" = impersonate_1_14_0;
+ "28" = impersonate_1_15_0;
+ "29" = impersonate_1_16_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app impersonate")
{ buildApp, nextcloudVersion }:
let
- integration_dropbox_2_0_1 = buildApp rec {
+ # https://apps.nextcloud.com/apps/integration_dropbox
+ integration_dropbox_2_0_1 = buildApp rec {
appName = "integration_dropbox";
version = "2.0.1";
url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
sha256 = "sha256-RPCd8+/yKNlIGfEU+ITS8DBIxJDfc//8MGHaIjfYxdQ=";
};
+ integration_dropbox_2_2_0 = buildApp rec {
+ appName = "integration_dropbox";
+ version = "2.2.0";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-GSdiE/WYyJlBv6SuViLzidJvbzImnfWUEKwjqye6qyw=";
+ };
versions = {
"27" = integration_dropbox_2_0_1;
+ "27_2" = integration_dropbox_2_2_0;
+ "28" = integration_dropbox_2_2_0;
+ "29" = integration_dropbox_2_2_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app integration_dropbox")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/keeweb
keeweb_0_6_13 = buildApp rec {
appName = "keeweb";
version = "0.6.13";
};
};
};
+ keeweb_0_6_18 = buildApp rec {
+ appName = "keeweb";
+ version = "0.6.18";
+ url = "https://github.com/jhass/nextcloud-keeweb/releases/download/v${version}/${appName}-${version}.tar.gz";
+ sha256 = "sha256-DsWjS7U8FPbryfH3TjQ0sLqVYZX4wlzy6AZl2cHXR6M=";
+ installPhase = ''
+ mkdir -p $out
+ cp -R . $out/
+ '';
+ otherConfig = {
+ mimetypemapping = {
+ "kdbx" = ["application/x-kdbx"];
+ };
+ };
+ };
versions = {
"25" = keeweb_0_6_13;
"26" = keeweb_0_6_13;
"27" = keeweb_0_6_13;
+ "27_2" = keeweb_0_6_13;
+ "28" = keeweb_0_6_18;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app keeweb")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/maps
maps_1_1_0 = buildApp rec {
appName = "maps";
version = "1.1.0";
url = "https://github.com/nextcloud/maps/releases/download/v${version}/${appName}-${version}.tar.gz";
sha256 = "sha256-Me/V+9wXZyq3UEVx9Nqim6pfPFJaALjKv9f7iUjill8=";
};
+ maps_1_2_0 = buildApp rec {
+ appName = "maps";
+ version = "1.2.0";
+ url = "https://github.com/nextcloud/maps/releases/download/v${version}/${appName}-${version}.tar.gz";
+ sha256 = "sha256-3XCjm1rsPpLnOEVoHPasKDZEJzweY7AbqASXoimHGVg=";
+ };
+ maps_1_4_0 = buildApp rec {
+ appName = "maps";
+ version = "1.4.0";
+ url = "https://github.com/nextcloud/maps/releases/download/v${version}/${appName}-${version}.tar.gz";
+ sha256 = "sha256-BmXs6Oepwnm+Cviy4awm3S8P9AiJTt1BnAQNb4TxVYE=";
+ };
versions = {
"25" = maps_1_1_0;
"26" = maps_1_1_0;
"27" = maps_1_1_0;
+ "27_2" = maps_1_2_0;
+ "28" = maps_1_4_0;
+ "29" = maps_1_4_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app maps")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/metadata
metadata_0_19_0 = buildApp rec {
appName = "metadata";
version = "0.19.0";
url = "https://github.com/gino0631/nextcloud-metadata/releases/download/v${version}/${appName}.tar.gz";
sha256 = "sha256-XfFxCwRFO0WnBPU4CIejNXySRQdguvzauu62bzUKD44=";
};
+ metadata_0_20_0 = buildApp rec {
+ appName = "metadata";
+ version = "0.20.0";
+ url = "https://github.com/gino0631/nextcloud-metadata/releases/download/v${version}/${appName}.tar.gz";
+ sha256 = "sha256-FsdkKnF+hXhrw3KVYWLu7FN34PMF0mOM4+tvB8IzmXw=";
+ };
versions = {
"25" = metadata_0_19_0;
"26" = metadata_0_19_0;
"27" = metadata_0_19_0;
+ "27_2" = metadata_0_20_0;
+ "28" = metadata_0_20_0;
+ "29" = metadata_0_20_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app metadata")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/music
music_1_8_4 = buildApp rec {
appName = "music";
version = "1.8.4";
url = "https://github.com/owncloud/music/releases/download/v${version}/${appName}_${version}_for_nextcloud.tar.gz";
sha256 = "sha256-WWXMpOyTRxykAVeUj/h6QP5ENqaMvTcPIqPQjhY68KA=";
};
+ music_1_11_0 = buildApp rec {
+ appName = "music";
+ version = "1.11.0";
+ url = "https://github.com/owncloud/music/releases/download/v${version}/${appName}_${version}_for_nextcloud.tar.gz";
+ sha256 = "sha256-IcxgSo5kIDzMideKlrh3gdG71s0+KqTCNCpmH+N1lGQ=";
+ };
versions = {
"25" = music_1_8_4;
"26" = music_1_8_4;
"27" = music_1_8_4;
+ "27_2" = music_1_11_0;
+ "28" = music_1_11_0;
+ "29" = music_1_11_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app music")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/notes
notes_4_8_1 = buildApp rec {
appName = "notes";
version = "4.8.1";
url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz";
sha256 = "sha256-BfH1W+7TWKZRuAAhKQEQtlv8ePTtJQvZQVMMu3zULR4=";
};
+ notes_4_10_0 = buildApp rec {
+ appName = "notes";
+ version = "4.10.0";
+ url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz";
+ sha256 = "sha256-av6y5GViTzlHtnUb/OIDw+0wdA/ZRwPYQMU3yDEbMTQ=";
+ };
versions = {
"25" = notes_4_8_1;
"26" = notes_4_8_1;
"27" = notes_4_8_1;
+ "27_2" = notes_4_10_0;
+ "28" = notes_4_10_0;
+ "29" = notes_4_10_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app notes")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/ocsms
ocsms_2_2_0 = buildApp rec {
appName = "ocsms";
version = "2.2.0";
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/onlyoffice
onlyoffice_7_9_0 = buildApp rec {
appName = "onlyoffice";
version = "7.9.0";
url = "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v${version}/${appName}.tar.gz";
sha256 = "sha256-DfZKgpkpcogy9I3A3ru0V/WR5wYWBr+wrHe+mQJBPYk=";
};
+ onlyoffice_9_2_2 = buildApp rec {
+ appName = "onlyoffice";
+ version = "9.2.2";
+ url = "https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v${version}/${appName}.tar.gz";
+ sha256 = "sha256-tvecrmbsxfzth+9y5WUYz8Mpwh7rf4NAYOc021vTjS0=";
+ };
versions = {
"25" = onlyoffice_7_9_0;
"26" = onlyoffice_7_9_0;
"27" = onlyoffice_8_2_0;
+ "27_2" = onlyoffice_9_2_2;
+ "28" = onlyoffice_9_2_2;
+ "29" = onlyoffice_9_2_2;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app onlyoffice")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/passman
passman_2_4_5 = buildApp rec {
appName = "passman";
version = "2.4.5";
url = "https://releases.passman.cc/${appName}_${version}.tar.gz";
sha256 = "sha256-CeNaN0cioVjcW6ILB//BIvmjQWcbvfK3m8jVQ8LGtyM=";
};
+ passman_2_4_9 = buildApp rec {
+ appName = "passman";
+ version = "2.4.9";
+ url = "https://releases.passman.cc/${appName}_${version}.tar.gz";
+ sha256 = "sha256-jLcKuY8wJohZ/oRon05yBq+755W9ytgOZsad9jhjUJY=";
+ };
versions = {
"25" = passman_2_4_5;
"26" = passman_2_4_7;
"27" = passman_2_4_7;
+ "27_2" = passman_2_4_9;
+ "28" = passman_2_4_9;
+ "29" = passman_2_4_9;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app passman")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/polls
polls_5_2_0 = buildApp rec {
appName = "polls";
version = "5.2.0";
url = "https://github.com/nextcloud/polls/releases/download/v${version}/${appName}.tar.gz";
sha256 = "sha256-45YNcSeFG9v3mfk7eLbDiy6hFgmfePY0j86JiVS0k14=";
};
+ polls_7_1_1 = buildApp rec {
+ appName = "polls";
+ version = "7.1.1";
+ url = "https://github.com/nextcloud/polls/releases/download/v${version}/${appName}.tar.gz";
+ sha256 = "sha256-C9za++xDhiKQD97M39RijteP0PhTtlDTs94H3Z/pd+I=";
+ };
versions = {
"25" = polls_5_2_0;
"26" = polls_5_2_0;
"27" = polls_5_2_0;
+ "27_2" = polls_7_1_1;
+ "28" = polls_7_1_1;
+ "29" = polls_7_1_1;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app polls")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/side_menu
side_menu_3_10_3 = buildApp rec {
appName = "side_menu";
version = "3.10.3";
filename = "${appName}-${version}.tar.gz";
sha256 = "sha256-WKbc6Ln6v3LYyRzwy0xAOmXilbqrWGS8XGWIT+TajdM=";
};
+ side_menu_3_12_0 = buildApp rec {
+ appName = "side_menu";
+ version = "3.12.0";
+ url = "https://gitnet.fr/attachments/9c9be610-5d3b-414d-a523-396c237c15ef";
+ filename = "${appName}-${version}.tar.gz";
+ sha256 = "sha256-WKbc6Ln6v3LYyRzwy0xAOmXilbqrWGS8XGWIT+TajdM=";
+ };
versions = {
"25" = side_menu_3_10_3;
"26" = side_menu_3_10_3;
"27" = side_menu_3_10_3;
+ "27_2" = side_menu_3_12_0;
+ "28" = side_menu_3_12_0;
+ "29" = side_menu_3_12_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app side_menu")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/social
social_0_6_1 = buildApp rec {
appName = "social";
version = "0.6.1";
versions = {
"26" = social_0_6_1;
"27" = social_0_6_1;
+ "27_2" = social_0_6_1;
+ "28" = social_0_6_1;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app social")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/spreed
spreed_15_0_7 = buildApp rec {
appName = "spreed";
version = "15.0.7";
url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
sha256 = "sha256-vb08DI+q+5f87zz2UguE1y6b0NV2EoICYpaKUGmyF5w=";
};
+ spreed_17_1_9 = buildApp rec {
+ appName = "spreed";
+ version = "17.1.9";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-YP/EDlxw3BVRVwWNyopt54Gcw5kG54gBHm2sDkSWLk0=";
+ };
+ spreed_18_0_8 = buildApp rec {
+ appName = "spreed";
+ version = "18.0.8";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-oUbZxLf1maXXB4FYWJ4zsnbkIcaXBcHZdlR3m4wTPio=";
+ };
+ spreed_19_0_2 = buildApp rec {
+ appName = "spreed";
+ version = "19.0.2";
+ url = "https://github.com/nextcloud-releases/${appName}/releases/download/v${version}/${appName}-v${version}.tar.gz";
+ sha256 = "sha256-FmikkGguGlMdEyae3vT6Esx1mMUc1ri5eQX280woPls=";
+ };
versions = {
"25" = spreed_15_0_7;
"26" = spreed_16_0_5;
"27" = spreed_17_0_3;
+ "27_2" = spreed_17_1_9;
+ "28" = spreed_18_0_8;
+ "29" = spreed_19_0_2;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app spreed")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/talk_matterbridge
talk_matterbridge_1_26_0 = buildApp rec {
appName = "talk_matterbridge";
version = "1.26.0";
url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz";
sha256 = "sha256-gD5lfLWBjWOiy2ULf31ngQVIQbMZj3iwu3zuVrEDSks=";
};
+ talk_matterbridge_1_28_0 = buildApp rec {
+ appName = "talk_matterbridge";
+ version = "1.28.0";
+ url = "https://github.com/nextcloud/${appName}/releases/download/v${version}-0/${appName}.tar.gz";
+ sha256 = "sha256-uZNc+mJb+frlnXYAZJnn84aopsHvakQ4e7ZKFG6Gwyo=";
+ };
versions = {
"25" = talk_matterbridge_1_26_0;
"26" = talk_matterbridge_1_26_0;
+ "27_2" = talk_matterbridge_1_28_0;
+ "28" = talk_matterbridge_1_28_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app talk_matterbridge")
{ buildApp, nextcloudVersion }:
let
+ # https://apps.nextcloud.com/apps/tasks
tasks_0_15_0 = buildApp rec {
appName = "tasks";
version = "0.15.0";
url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz";
sha256 = "sha256-nizJUFByK78FZ6KPJ4zfOU5Z9ClAxhwgQ7d+X5TGnM8=";
};
+ tasks_0_16_0 = buildApp rec {
+ appName = "tasks";
+ version = "0.16.0";
+ url = "https://github.com/nextcloud/${appName}/releases/download/v${version}/${appName}.tar.gz";
+ sha256 = "sha256-HitYQcdURUHujRNMF0jKQzvSO93bItisI0emq0yw8p4=";
+ };
versions = {
"25" = tasks_0_15_0;
"26" = tasks_0_15_0;
"27" = tasks_0_15_0;
+ "27_2" = tasks_0_15_0;
+ "28" = tasks_0_16_0;
+ "29" = tasks_0_16_0;
};
in
versions."${builtins.toString nextcloudVersion}" or (throw "Unsupported version for nextcloud app tasks")
"25" = { sum = "sha256-alvh0fWESSS5KbfiKI1gaoahisDWnfT/bUhsSEEXfQI="; fullVersion = "25.0.10"; }; # php 7.4 - 8.2
"26" = { sum = "sha256-nhq0aAY4T1hUZdKJY66ZSlirCSgPQet8YJpciwJw1b4="; fullVersion = "26.0.5"; }; # php 8.0 - 8.2
"27" = { sum = "sha256-O1NMmOdrf+2Mo5NMrUGbEK9YViWfMTvsIs06e/pu+WE="; fullVersion = "27.1.5"; }; # php 8.0 - 8.2
+ "27_2" = { sum = "sha256-lD4ScNdxp8gNqisy5ylM6MO3e56u9yrYs4SH1YyFB1Y="; fullVersion = "27.1.10"; }; # php 8.0 - 8.2
+ # postgresql 12/13/14
+ "28" = { sum = "sha256-3w0zhLRHy6HhKPIggPZ4BSH4aBab6r7o6g0VW/nGa48="; fullVersion = "28.0.6"; }; # php 8.0 - 8.2
+ # postgresql 12/13/14/15
+ "29" = { sum = "sha256-LUnSl9w0AJICEFeCPo54oxK8APVt59hneseQWQkYqxc="; fullVersion = "29.0.2"; }; # php 8.0 - 8.3
+ # postgresql 12/13/14/15/16
};
appNames = [
"audioplayer" "bookmarks" "calendar" "carnet"
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
};
};
};
+ borg_backup = mkOption {
+ description = ''
+ Remote backup with borg/borgmatic
+ '';
+ type = submodule {
+ options = {
+ password = mkOption { type = str; description = "Password for encrypting files"; };
+ remotes = mkOption {
+ type = attrsOf (submodule {
+ options = {
+ remote = mkOption {
+ type = functionTo (functionTo str);
+ example = literalExample ''
+ bucket: "ssh://some_host/${bucket}";
+ '';
+ description = ''
+ Function.
+ Takes a bucket name as argument and returns a url
+ '';
+ };
+ sshRsyncPort = mkOption { type = str; default = "22"; description = "SSH port"; };
+ sshRsyncHost = mkOption { type = nullOr str; default = null; description = "SSH host"; };
+
+ sshKnownHosts = mkOption { type = nullOr str; default = null; description = "Ssh known hosts"; };
+ };
+ });
+ };
+ };
+ };
+ };
backup = mkOption {
description = ''
Remote backup with duplicity
remotes = mkOption {
type = attrsOf (submodule {
options = {
+ remote_type = mkOption {
+ type = enum [ "s3" "rsync" ];
+ };
remote = mkOption {
type = functionTo str;
example = literalExample ''
Takes a bucket name as argument and returns a url
'';
};
- accessKeyId = mkOption { type = str; description = "Remote access-key"; };
- secretAccessKey = mkOption { type = str; description = "Remote access secret"; };
+ sshRsyncPort = mkOption { type = str; default = "22"; description = "SSH port for rsync"; };
+ sshRsyncHost = mkOption { type = nullOr str; default = null; description = "SSH host for rsync"; };
+
+ sshKnownHosts = mkOption { type = nullOr str; default = null; description = "Ssh known hosts"; };
+ s3AccessKeyId = mkOption { type = nullOr str; default = null; description = "Remote access-key"; };
+ s3SecretAccessKey = mkOption { type = nullOr str; default = null; description = "Remote access secret"; };
};
});
};
};
};
};
+ matrix = mkOption {
+ description = "Matrix configuration";
+ type = submodule {
+ options = {
+ ldap = mkLdapOptions "Mediagoblin" {};
+ };
+ };
+ };
mediagoblin = mkOption {
description = "Mediagoblin configuration";
type = submodule {
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
Whether to enable monitoring.
'';
};
+ smartdDisks = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [];
+ description = ''
+ List of smartd disks ids (symlinks in /dev/disk/by-id/) to monitor
+ '';
+ };
master = lib.mkOption {
type = lib.types.bool;
default = false;
objectDefs =
self.lib.toObjects cfg.objects;
};
+
+ myServices.monitoring.objects.service = builtins.map (d: {
+ service_description = "Disk /dev/disk/by-id/${d} is sane";
+ use = "local-service";
+ check_command = [ "check_smartctl" "/dev/disk/by-id/${d}" ];
+ __passive_servicegroups = "webstatus-resources";
+
+ check_interval = 60;
+ }) cfg.smartdDisks;
+
+ systemd = let
+ checkShortTimer = {
+ timerConfig = {
+ OnCalendar = "monthly";
+ RandomizedDelaySec = "3 weeks";
+ FixedRandomDelay = true;
+ };
+ wantedBy = [ "timers.target" ];
+ };
+ checkLongTimer = {
+ timerConfig = {
+ OnCalendar = "monthly";
+ RandomizedDelaySec = "3 weeks";
+ FixedRandomDelay = true;
+ };
+ wantedBy = [ "timers.target" ];
+ };
+ toSDTimers = id: {
+ "check-smartd-long-${id}" = checkLongTimer;
+ "check-smartd-short-${id}" = checkShortTimer;
+ };
+ toCheckService = id: type: {
+ description = "Run ${type} smartctl test for /dev/disk/by-id/${id}";
+ after = [ "multi-user.target" ];
+ serviceConfig = {
+ Type = "oneshot";
+ ExecStart = "${pkgs.smartmontools}/bin/smartctl -t ${type} /dev/disk/by-id/${id}";
+ };
+ };
+ toSDServices = id: {
+ "check-smartd-long-${id}" = toCheckService id "long";
+ "check-smartd-short-${id}" = toCheckService id "short";
+ };
+
+ in {
+ services = lib.attrsets.mergeAttrsList (builtins.map toSDServices cfg.smartdDisks);
+ timers = lib.attrsets.mergeAttrsList (builtins.map toSDTimers cfg.smartdDisks);
+ };
};
};
};
]}
'';
};
+ smartctl = {
+ commands = {
+ check_smartctl = "$USER2$/check_smartctl -i auto -d $ARG1$";
+ };
+ chunk = let
+ smartPlugin = pkgs.fetchurl {
+ url = "https://www.claudiokuenzler.com/monitoring-plugins/check_smart.pl";
+ sha256 = "sha256-gxGkzyycUl+I3WziKhOnZSoQjpqbPqjbunfUQxmeb7w=";
+ };
+ in ''
+ cp ${smartPlugin} $out/check_smartctl
+ chmod +x $out/check_smartctl
+ patchShebangs $out
+ substituteInPlace $out/check_smartctl --replace "/usr/bin /bin /usr/sbin /sbin /usr/local/bin /usr/local/sbin" "${pkgs.smartmontools}/bin"
+ substituteInPlace $out/check_smartctl --replace "sudo" "${sudo}"
+ '';
+
+ sudo = _: {
+ commands = [
+ { command = "${pkgs.smartmontools}/bin/smartctl *"; options = [ "NOPASSWD" ]; }
+ ];
+ runAs = "root";
+ };
+ };
mysql = {
commands = {
check_mysql_replication = "${sudo} -u mysql $USER2$/check_mysql_replication \"$ARG1$\" \"$ARG2$\"";
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
secrets.deleteSecretsVars = true;
secrets.secretsVars = "/run/keys/vars.yml";
+ programs.ssh.package = lib.mkDefault (
+ pkgs.openssh.overrideAttrs(old: rec {
+ patches = old.patches ++ [
+ # Mitigation for CVE https://www.qualys.com/2024/07/01/cve-2024-6387/regresshion.txt
+ (pkgs.fetchpatch {
+ url = "https://raw.githubusercontent.com/NixOS/nixpkgs/342bfe5c431fd7828fee8fa7e07a4d8fbfd18618/pkgs/tools/networking/openssh/openssh-9.6_p1-CVE-2024-6387.patch";
+ sha256 = "sha256-B3Wz/eWSdOnrOcVzDv+QqzLGdFlb3jivQ8qZMC3d0Qw=";
+ })
+ ];
+ })
+ );
services.openssh.enable = true;
nixpkgs.overlays =
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
--gtid \
--master-data \
--flush-privileges \
- --ignore-database=netdata \
--all-databases > $filename
${pkgs.gzip}/bin/gzip $filename
'';
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "../../flakes/private/chatons",
"type": "path"
},
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_2": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_3": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_4": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_5": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_6": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_7": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-1sEwMNWSytfyn4Rh5gUJACwCNgaTLdMDkO9hEr5OB7M=",
+ "narHash": "sha256-tY5qk98NpdM4osbPYFeo6/pHiQQU4a4iKw2jCJP99q8=",
"path": "../../flakes/private/mail-relay",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-VhRXb3AAlSKwkq4BfVmoKzkLxEaAFGjYLAFETTZuhjE=",
+ "narHash": "sha256-Aqubcd5AOuP6XUdvjeCXIP6Yksn8uBXbS62kWXBop1w=",
"path": "../../flakes/private/milters",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-/vQ6FGFc53r79yiQrzF0NWTbRd4RKf8QiPSDhmiCciU=",
+ "narHash": "sha256-LDicilQIpNXKg/UD6uyf66h/iL/rhDOkkVjTMdKRzX4=",
"path": "../../flakes/private/opendmarc",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
# available in nixos-20.09
#zfs.requestEncryptionCredentials = [ "zpool/root" ];
};
- powerManagement.cpuFreqGovernor = "powersave";
+ powerManagement.cpuFreqGovernor = "ondemand";
hardware.enableRedistributableFirmware = true;
swapDevices = [ { label = "swap"; } ];
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_2": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_3": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
};
in
{
- config.myServices.monitoring.activatedPlugins = [ "memory" "command" "bandwidth" "mdadm" "zfs" "notify-secondary"];
+ config.myServices.monitoring.smartdDisks = [
+ "ata-Micron_1100_MTFDDAK512TBN_171216BD2A4B"
+ "ata-Micron_1100_MTFDDAK512TBN_171216BD2A70"
+ "ata-TOSHIBA_MG04ACA400N_96K1K87YFVLC"
+ "ata-WDC_WD3000FYYZ-01UL1B2_WD-WMC1F0E4X6WP"
+ ];
+ config.myServices.monitoring.activatedPlugins = [ "memory" "command" "bandwidth" "mdadm" "zfs" "notify-secondary" "smartctl" ];
config.myServices.monitoring.objects = lib.mkMerge [
(monitoring.lib.objectsCommon {
inherit hostFQDN;
];
nixpkgs.overlays = builtins.attrValues ports.overlays;
- powerManagement.cpuFreqGovernor = "powersave";
+ powerManagement.cpuFreqGovernor = "ondemand";
security.acme.certs."${name}".postRun = builtins.concatStringsSep "\n" [
(lib.optionalString config.services.websites.env.production.enable "/run/current-system/sw/bin/machinectl shell httpd-production /usr/bin/env systemctl reload httpd.service")
./buildbot
./coturn.nix
./dns.nix
+ ./borg_backup.nix
./duply_backup.nix
./gemini
./gitolite
./vpn
];
+ services.borgBackup.enable = true;
+ services.borgBackup.profiles.global = {
+ bucket = "global";
+ hash = false;
+ remotes = [ "attilax" ];
+ ignoredPaths = [
+ "udev"
+ "portables"
+ "machines"
+ "nixos"
+ "nixos-containers"
+ ];
+ };
myServices.buildbot.enable = true;
myServices.databases.enable = true;
myServices.gitolite.enable = true;
table = ldap_users
user_column = login
pw_type = function
- auth_query = SELECT ((mechanism = 'SSHA' AND password = encode(digest( %p || salt, 'sha1'), 'hex')) OR (mechanism = 'PLAIN' AND password = %p)) FROM ldap_users WHERE login = %u OR login || '@' || realm = %u
+ auth_query = SELECT ((mechanism = 'SSHA' AND password = encode(digest( convert_to(%p, 'UTF8') || salt, 'sha1'), 'hex')) OR (mechanism = 'PLAIN' AND password = %p)) FROM ldap_users WHERE login = %u OR login || '@' || realm = %u
#pwd_query = WITH newsalt as (select gen_random_bytes(4)) UPDATE ldap_users SET password = encode(digest( %p || (SELECT * FROM newsalt), 'sha1'), 'hex'), salt = (SELECT * FROM newsalt), mechanism = 'SSHA' WHERE login = %u OR login || '@' || realm = %u
'';
};
--- /dev/null
+{ lib, pkgs, config, name, ... }:
+
+let
+ cfg = config.myEnv.borg_backup;
+ varDir = "/var/lib/borgbackup";
+ borg_args = "--encryption repokey --make-parent-dirs init create prune compact check";
+ borg_backup_full_with_ignored = pkgs.writeScriptBin "borg_full_with_ignored" ''
+ #!${pkgs.stdenv.shell}
+
+ if [ -z "$1" -o "$1" = "-h" -o "$1" = "--help" ]; then
+ echo "borg_full_with_ignored /path/to/borgmatic.yaml"
+ echo "Does a full backup including directories with .duplicity-ignore"
+ exit 1
+ fi
+ ${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}
+ '';
+ borg_backup = pkgs.writeScriptBin "borg_backup" ''
+ #!${pkgs.stdenv.shell}
+
+ declare -a profiles
+ profiles=()
+ ${builtins.concatStringsSep "\n" (lib.flatten (lib.mapAttrsToList (k: v: map (remote: [
+ ''profiles+=("${remote}_${k}")''
+ ]) v.remotes) config.services.borgBackup.profiles))}
+
+ if [ -f "${varDir}/last_backup_profile" ]; then
+ last_backup=$(cat ${varDir}/last_backup_profile)
+ for i in "''${!profiles[@]}"; do
+ if [[ "''${profiles[$i]}" = "$last_backup" ]]; then
+ break
+ fi
+ done
+ ((i+=1))
+ profiles=("''${profiles[@]:$i}" "''${profiles[@]:0:$i}")
+ fi
+
+ # timeout in minutes
+ timeout="''${1:-180}"
+ timeout_timestamp=$(date +%s -d "$timeout minutes")
+ for profile in "''${profiles[@]}"; do
+ if [ $(date +%s -d "now") -ge "$timeout_timestamp" ]; then
+ break
+ fi
+
+ touch "${varDir}/$profile.log"
+ ${pkgs.borgmatic}/bin/borgmatic -c "${config.secrets.location}/borg_backup/$profile/borgmatic.yaml" ${borg_args} >> ${varDir}/$profile.log
+ [[ $? = 0 ]] || echo -e "Error when doing backup for $profile, see above or logs in ${varDir}/$profile.log\n---------------------------------------" >&2
+ echo "$profile" > ${varDir}/last_backup_profile
+ done
+ '';
+
+ check_backups = pkgs.writeScriptBin "borg_list_not_backuped" ''
+ #!${pkgs.stdenv.shell}
+
+ do_check() {
+ local dir="$1" path ignored_path
+ find "$dir" -mindepth 1 -maxdepth 1 | while IFS= read -r path; do
+ if ${pkgs.gnugrep}/bin/grep -qFx "$path" ${config.secrets.fullPaths."borg_backup/backuped_list"}; then
+ continue
+ elif ${pkgs.gnugrep}/bin/grep -q "^$path/" ${config.secrets.fullPaths."borg_backup/backuped_list"}; then
+ do_check "$path"
+ else
+ while IFS= read -r ignored_path; do
+ if [[ "$path" =~ ^$ignored_path$ ]]; then
+ continue 2
+ fi
+ done < ${config.secrets.fullPaths."borg_backup/ignored_list"}
+ printf '%s\n' "$path"
+ fi
+ done
+ }
+
+ do_check /var/lib
+ '';
+ borgProfile = profile: remote: bucket: builtins.toJSON {
+ location = {
+ source_directories = map (p: "${profile.rootDir}/${p}") profile.includedPaths;
+ repositories = [
+ { path = cfg.remotes.${remote}.remote name bucket; label = "backupserver"; }
+ ];
+ one_file_system = false;
+ exclude_if_present = [".duplicity-ignore"];
+ source_directories_must_exist = profile.directoriesMustExist;
+ borgmatic_source_directory = "${varDir}/${profile.bucket}/.borgmatic";
+ };
+ storage = {
+ encryption_passphrase = profile.password;
+ ssh_command = "ssh -i ${config.secrets.fullPaths."borg_backup/identity"}";
+ compression = "zlib";
+ borg_base_directory = "${varDir}/${profile.bucket}";
+ relocated_repo_access_is_ok = true;
+ };
+ retention = {
+ keep_within = "10d";
+ keep_daily = 30;
+ };
+ };
+in
+{
+ options = {
+ services.borgBackup.enable = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Whether to enable remote backups.
+ '';
+ };
+ services.borgBackup.profiles = lib.mkOption {
+ type = lib.types.attrsOf (lib.types.submodule {
+ options = {
+ hash = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = ''
+ Hash bucket and directory names
+ '';
+ };
+ rootDir = lib.mkOption {
+ type = lib.types.path;
+ default = "/var/lib";
+ description = ''
+ Path to backup
+ '';
+ };
+ password = lib.mkOption {
+ type = lib.types.str;
+ default = cfg.password;
+ description = ''
+ password to use to encrypt data
+ '';
+ };
+ directoriesMustExist = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = ''
+ Raise error if backuped directory doesn't exist
+ '';
+ };
+ bucket = lib.mkOption {
+ type = lib.types.str;
+ description = ''
+ Bucket to use
+ '';
+ };
+ remotes = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ description = ''
+ Remotes to use for backup
+ '';
+ };
+ includedPaths = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [];
+ description = ''
+ Included paths (subdirs of rootDir)
+ '';
+ };
+ excludeFile = lib.mkOption {
+ type = lib.types.lines;
+ default = "";
+ description = ''
+ Content to put in exclude file
+ '';
+ };
+ ignoredPaths = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [];
+ description = ''
+ List of paths to ignore when checking non-backed-up directories
+ Can use (POSIX extended) regex
+ '';
+ };
+ };
+ });
+ };
+ };
+
+ config = lib.mkIf config.services.borgBackup.enable {
+ system.activationScripts.borg_backup = ''
+ install -m 0700 -o root -g root -d ${varDir}
+ '';
+ secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (k: v:
+ let
+ bucket = if v.hash or true then builtins.hashString "sha256" v.bucket else v.bucket;
+ in map (remote: [
+ (lib.nameValuePair "borg_backup/${remote}_${k}/borgmatic.yaml" {
+ permissions = "0400";
+ text = borgProfile v remote bucket;
+ })
+ (lib.nameValuePair "borg_backup/${remote}_${k}" {
+ permissions = "0700";
+ isDir = true;
+ })
+ ]) v.remotes) config.services.borgBackup.profiles)) // {
+ "borg_backup/identity" = {
+ permissions = "0400";
+ text = "{{ .ssl_keys.borg_backup }}";
+ };
+ "borg_backup/ignored_list" = {
+ permissions = "0400";
+ text = let
+ ignored = map
+ (v: map (p: "${v.rootDir}/${p}") v.ignoredPaths)
+ (builtins.attrValues config.services.borgBackup.profiles);
+ in builtins.concatStringsSep "\n" (lib.flatten ignored);
+ };
+ "borg_backup/backuped_list" = {
+ permissions = "0400";
+ text = let
+ included = map
+ (v: map (p: "${v.rootDir}/${p}") v.includedPaths)
+ (builtins.attrValues config.services.borgBackup.profiles);
+ in builtins.concatStringsSep "\n" (lib.flatten included);
+ };
+ };
+
+ programs.ssh.knownHostsFiles = [
+ (pkgs.writeText
+ "borg_backup_known_hosts"
+ (builtins.concatStringsSep
+ "\n"
+ (builtins.filter
+ (v: v != null)
+ (builtins.map
+ (v: v.sshKnownHosts)
+ (builtins.attrValues cfg.remotes)
+ )
+ )
+ )
+ )
+ ];
+ environment.systemPackages = [ pkgs.borgbackup pkgs.borgmatic borg_backup_full_with_ignored borg_backup check_backups ];
+ services.cron = {
+ enable = true;
+ systemCronJobs = [
+ "0 0 * * * root ${borg_backup}/bin/borg_backup 300"
+ ];
+
+ };
+
+ };
+}
};
users.users.openldap.extraGroups = [ "keys" ];
networking.firewall.allowedTCPPorts = [ 636 389 ];
+ services.borgBackup.profiles.global.includedPaths = [
+ "openldap"
+ ];
security.acme.certs."ldap" = {
group = "openldap";
let
cfg = config.myEnv.backup;
varDir = "/var/lib/duply";
- duplyProfile = profile: remote: prefix: ''
- GPG_PW="${cfg.password}"
- TARGET="${cfg.remotes.${remote}.remote profile.bucket}${prefix}"
- export AWS_ACCESS_KEY_ID="${cfg.remotes.${remote}.accessKeyId}"
- export AWS_SECRET_ACCESS_KEY="${cfg.remotes.${remote}.secretAccessKey}"
+ default_action = "pre_bkp_purge_purgeFull_purgeIncr";
+ duply_backup_full_with_ignored = pkgs.writeScriptBin "duply_full_with_ignored" ''
+ #!${pkgs.stdenv.shell}
+
+ export DUPLY_FULL_BACKUP_WITH_IGNORED=yes
+ if [ -z "$1" -o "$1" = "-h" -o "$1" = "--help" ]; then
+ echo "duply_full_with_ignored /path/to/profile"
+ echo "Does a full backup including directories with .duplicity-ignore"
+ exit 1
+ fi
+ ${pkgs.duply}/bin/duply "$1" pre_full --force
+ '';
+ duply_backup = pkgs.writeScriptBin "duply_backup" ''
+ #!${pkgs.stdenv.shell}
+
+ declare -a profiles
+ profiles=()
+ ${builtins.concatStringsSep "\n" (lib.flatten (lib.mapAttrsToList (k: v: map (remote: [
+ ''profiles+=("${remote}_${k}")''
+ ]) v.remotes) config.services.duplyBackup.profiles))}
+
+ if [ -f "${varDir}/last_backup_profile" ]; then
+ last_backup=$(cat ${varDir}/last_backup_profile)
+ for i in "''${!profiles[@]}"; do
+ if [[ "''${profiles[$i]}" = "$last_backup" ]]; then
+ break
+ fi
+ done
+ ((i+=1))
+ profiles=("''${profiles[@]:$i}" "''${profiles[@]:0:$i}")
+ fi
+
+ # timeout in minutes
+ timeout="''${1:-180}"
+ timeout_timestamp=$(date +%s -d "$timeout minutes")
+ for profile in "''${profiles[@]}"; do
+ if [ $(date +%s -d "now") -ge "$timeout_timestamp" ]; then
+ break
+ fi
+
+ touch "${varDir}/$profile.log"
+ ${pkgs.duply}/bin/duply ${config.secrets.location}/backup/$profile/ ${default_action} --force >> ${varDir}/$profile.log
+ [[ $? = 0 ]] || echo -e "Error when doing backup for $profile, see above or logs in ${varDir}/$profile.log\n---------------------------------------" >&2
+ echo "$profile" > ${varDir}/last_backup_profile
+ done
+ '';
+
+ check_backups = pkgs.writeScriptBin "duply_list_not_backuped" ''
+ #!${pkgs.stdenv.shell}
+
+ do_check() {
+ local dir="$1" path ignored_path
+ find "$dir" -mindepth 1 -maxdepth 1 | while IFS= read -r path; do
+ if ${pkgs.gnugrep}/bin/grep -qFx "$path" ${config.secrets.fullPaths."backup/backuped_list"}; then
+ continue
+ elif ${pkgs.gnugrep}/bin/grep -q "^$path/" ${config.secrets.fullPaths."backup/backuped_list"}; then
+ do_check "$path"
+ else
+ while IFS= read -r ignored_path; do
+ if [[ "$path" =~ ^$ignored_path$ ]]; then
+ continue 2
+ fi
+ done < ${config.secrets.fullPaths."backup/ignored_list"}
+ printf '%s\n' "$path"
+ fi
+ done
+ }
+
+ do_check /var/lib
+ '';
+ duplyProfile = profile: remote: bucket: let
+ remote' = cfg.remotes.${remote};
+ in ''
+ if [ -z "$DUPLY_FULL_BACKUP_WITH_IGNORED" ]; then
+ GPG_PW="${cfg.password}"
+ fi
+ TARGET="${remote'.remote bucket}"
+ ${lib.optionalString (remote'.remote_type == "s3") ''
+ export AWS_ACCESS_KEY_ID="${remote'.s3AccessKeyId}"
+ export AWS_SECRET_ACCESS_KEY="${remote'.s3SecretAccessKey}"
+ ''}
+ ${lib.optionalString (remote'.remote_type == "rsync") ''
+ DUPL_PARAMS="$DUPL_PARAMS --ssh-options=-oIdentityFile='${config.secrets.fullPaths."backup/identity"}' "
+ ''}
SOURCE="${profile.rootDir}"
- FILENAME=".duplicity-ignore"
- DUPL_PARAMS="$DUPL_PARAMS --exclude-if-present '$FILENAME'"
+ if [ -z "$DUPLY_FULL_BACKUP_WITH_IGNORED" ]; then
+ FILENAME=".duplicity-ignore"
+ DUPL_PARAMS="$DUPL_PARAMS --exclude-if-present '$FILENAME'"
+ fi
VERBOSITY=4
ARCH_DIR="${varDir}/caches"
+ DUPL_PYTHON_BIN=""
- # Do a full backup after 1 month
- MAX_FULLBKP_AGE=1M
- DUPL_PARAMS="$DUPL_PARAMS --allow-source-mismatch --exclude-other-filesystems --full-if-older-than $MAX_FULLBKP_AGE "
- # Backups older than 2months are deleted
- MAX_AGE=2M
- # Keep 2 full backups
- MAX_FULL_BACKUPS=2
- MAX_FULLS_WITH_INCRS=2
+ # Do a full backup after 6 month
+ MAX_FULLBKP_AGE=6M
+ DUPL_PARAMS="$DUPL_PARAMS --allow-source-mismatch --full-if-older-than $MAX_FULLBKP_AGE "
+ # Backups older than 1months are deleted
+ MAX_AGE=1M
+ # Keep 1 full backup
+ MAX_FULL_BACKUPS=1
+ MAX_FULLS_WITH_INCRS=1
'';
- action = "bkp_purge_purgeFull_purgeIncr";
- varName = k: remoteName:
- if remoteName == "eriomem" then k else remoteName + "_" + k;
in
{
options = {
services.duplyBackup.profiles = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule {
options = {
+ hash = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = ''
+ Hash bucket and directory names
+ '';
+ };
+ excludeRootDir = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = ''
+ Exclude root dir in exclusion file
+ '';
+ };
rootDir = lib.mkOption {
type = lib.types.path;
+ default = "/var/lib";
description = ''
Path to backup
'';
};
bucket = lib.mkOption {
type = lib.types.str;
- default = "immae-${name}";
description = ''
Bucket to use
'';
};
remotes = lib.mkOption {
type = lib.types.listOf lib.types.str;
- default = ["eriomem"];
description = ''
Remotes to use for backup
'';
};
+ includedPaths = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [];
+ description = ''
+ Included paths (subdirs of rootDir)
+ '';
+ };
excludeFile = lib.mkOption {
type = lib.types.lines;
default = "";
Content to put in exclude file
'';
};
+ ignoredPaths = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [];
+ description = ''
+ List of paths to ignore when checking non-backed-up directories
+ Can use (POSIX extended) regex
+ '';
+ };
};
});
};
install -m 0700 -o root -g root -d ${varDir} ${varDir}/caches
'';
secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (k: v:
- map (remote: [
- (lib.nameValuePair "backup/${varName k remote}/conf" {
+ let
+ bucket = if v.hash or true then builtins.hashString "sha256" v.bucket else v.bucket;
+ in map (remote: [
+ (lib.nameValuePair "backup/${remote}_${k}/conf" {
permissions = "0400";
- text = duplyProfile v remote "${k}/";
+ text = duplyProfile v remote bucket;
})
- (lib.nameValuePair "backup/${varName k remote}/exclude" {
+ (lib.nameValuePair "backup/${remote}_${k}/exclude" {
permissions = "0400";
- text = v.excludeFile;
+ text = v.excludeFile + (builtins.concatStringsSep "\n" (map (p: "+ ${v.rootDir}/${p}") v.includedPaths)) + (lib.optionalString v.excludeRootDir ''
+
+ - **
+ '');
})
- (lib.nameValuePair "backup/${varName k remote}" {
+ (lib.nameValuePair "backup/${remote}_${k}/pre" {
+ keyDependencies = [
+ pkgs.bash
+ pkgs.rsync
+ ];
permissions = "0500";
+ text = let
+ remote' = cfg.remotes.${remote};
+ in ''
+ #!${pkgs.stdenv.shell}
+
+ ${lib.optionalString (remote'.remote_type == "rsync") ''
+ # Recreate directory structure before synchronizing
+ mkdir -p ${varDir}/rsync_remotes/${remote}/${bucket}
+ ${pkgs.rsync}/bin/rsync -av -e \
+ "ssh -p ${remote'.sshRsyncPort} -oIdentityFile=${config.secrets.fullPaths."backup/identity"}" \
+ "${varDir}/rsync_remotes/${remote}/" \
+ ${remote'.sshRsyncHost}:
+ ''}
+ '';
+ })
+ (lib.nameValuePair "backup/${remote}_${k}" {
+ permissions = "0700";
isDir = true;
})
- ]) v.remotes) config.services.duplyBackup.profiles));
+ ]) v.remotes) config.services.duplyBackup.profiles)) // {
+ "backup/identity" = {
+ permissions = "0400";
+ text = "{{ .ssl_keys.duply_backup }}";
+ };
+ "backup/ignored_list" = {
+ permissions = "0400";
+ text = let
+ ignored = map
+ (v: map (p: "${v.rootDir}/${p}") v.ignoredPaths)
+ (builtins.attrValues config.services.duplyBackup.profiles);
+ in builtins.concatStringsSep "\n" (lib.flatten ignored);
+ };
+ "backup/backuped_list" = {
+ permissions = "0400";
+ text = let
+ included = map
+ (v: map (p: "${v.rootDir}/${p}") v.includedPaths)
+ (builtins.attrValues config.services.duplyBackup.profiles);
+ in builtins.concatStringsSep "\n" (lib.flatten included);
+ };
+ };
+ programs.ssh.knownHostsFiles = [
+ (pkgs.writeText
+ "duply_backup_known_hosts"
+ (builtins.concatStringsSep
+ "\n"
+ (builtins.filter
+ (v: v != null)
+ (builtins.map
+ (v: v.sshKnownHosts)
+ (builtins.attrValues cfg.remotes)
+ )
+ )
+ )
+ )
+ ];
+ environment.systemPackages = [ pkgs.duply check_backups duply_backup_full_with_ignored duply_backup ];
services.cron = {
enable = true;
- systemCronJobs = let
- backups = pkgs.writeScript "backups" ''
- #!${pkgs.stdenv.shell}
-
- ${builtins.concatStringsSep "\n" (lib.flatten (lib.mapAttrsToList (k: v:
- map (remote: [
- ''
- touch ${varDir}/${varName k remote}.log
- ${pkgs.duply}/bin/duply ${config.secrets.fullPaths."backup/${varName k remote}"}/ ${action} --force >> ${varDir}/${varName k remote}.log
- [[ $? = 0 ]] || echo -e "Error when doing backup for ${varName k remote}, see above\n---------------------------------------" >&2
- ''
- ]) v.remotes
- ) config.services.duplyBackup.profiles))}
- '';
- in
- [
- "0 2 * * * root ${backups}"
- ];
+ systemCronJobs = [
+ "0 0 * * * root ${duply_backup}/bin/duply_backup 90"
+ ];
};
- security.pki.certificateFiles = [
- (pkgs.fetchurl {
- url = "http://downloads.e.eriomem.net/eriomemca.pem";
- sha256 = "1ixx4c6j3m26j8dp9a3dkvxc80v1nr5aqgmawwgs06bskasqkvvh";
- })
- ];
-
- myServices.monitoring.fromMasterActivatedPlugins = [ "eriomem" ];
- myServices.monitoring.fromMasterObjects.service = [
- {
- service_description = "eriomem backup is up and not full";
- host_name = config.hostEnv.fqdn;
- use = "external-service";
- check_command = "check_backup_eriomem";
-
- check_interval = 120;
- notification_interval = "1440";
-
- servicegroups = "webstatus-backup";
- }
-
- {
- service_description = "ovh backup is up and not full";
- host_name = config.hostEnv.fqdn;
- use = "external-service";
- check_command = "check_ok";
-
- check_interval = 120;
- notification_interval = "1440";
-
- servicegroups = "webstatus-backup";
- }
- ];
};
}
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_2": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_3": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_4": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_5": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_6": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "../../flakes/private/chatons",
"type": "path"
},
"private-environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-VhRXb3AAlSKwkq4BfVmoKzkLxEaAFGjYLAFETTZuhjE=",
+ "narHash": "sha256-Aqubcd5AOuP6XUdvjeCXIP6Yksn8uBXbS62kWXBop1w=",
"path": "../../flakes/private/milters",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-/vQ6FGFc53r79yiQrzF0NWTbRd4RKf8QiPSDhmiCciU=",
+ "narHash": "sha256-LDicilQIpNXKg/UD6uyf66h/iL/rhDOkkVjTMdKRzX4=",
"path": "../../flakes/private/opendmarc",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-gjapO6CZFeLMHUlhqBVZu5P+IJzJaPu4pnuTep4ZSuM=",
+ "narHash": "sha256-mhoBv1NxQoAMlfFGkgGC28cjMTgUxgb2oqNS+k6kWH4=",
"path": "../../flakes/private/ssh",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0RN3EjVLumRs4/CYgYA1+UQecq+LyzrUJI6SpGHN/50=",
+ "narHash": "sha256-2fWHwmMMILe0enrbMMgFoVH+3PysvSx1Oair4W2hgIw=",
"path": "../../flakes/etherpad-lite",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-0j7YmFwrbLg3FKeAcZApJ240cpt6uhiEEZt5v52QN5Q=",
+ "narHash": "sha256-emS5jDCcLaK3/Hqk/2p6jQDxZfO1hPicMTblyVBD7EI=",
"path": "../../flakes/grocy",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../flakes/mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-SaZuUdU7estQQxxOhZ0mRyaQHK3AnlCUo/lTP8MFBao=",
+ "narHash": "sha256-cR14yn0IbWNe98PAlV+MHO6ClQqeT5HztMeLawldtWs=",
"path": "../../flakes/surfer",
"type": "path"
},
};
config = lib.mkIf config.myServices.ftp.enable {
+ services.borgBackup.profiles.global.ignoredPaths = [
+ "ftp/test_ftp"
+ "proftpd/authorized_keys"
+ ];
myServices.dns.zones."immae.eu".subdomains.ftp =
with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
};
config = lib.mkIf cfg.enable {
+ services.borgBackup.profiles.global.ignoredPaths = [
+ "gitolite/.nix-.*"
+ "gitolite/.ssh"
+ "gitolite/.vim.*"
+ "gitolite/.bash_history"
+ ];
+ services.borgBackup.profiles.global.includedPaths = [
+ "gitolite/gitolite_ldap_groups.sh"
+ "gitolite/projects.list"
+ "gitolite/.gitolite.rc"
+ "gitolite/.gitolite"
+ "gitolite/repositories/github"
+ "gitolite/repositories/testing.git"
+ "gitolite/repositories/gitolite-admin.git"
+
+ ];
myServices.dns.zones."immae.eu".subdomains.git =
with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
emailCheck = monitoring.lib.emailCheck config.myEnv.monitoring.email_check;
in
{
- config.myServices.monitoring.activatedPlugins = [ "memory" "command" "bandwidth" "emails" "mdadm" "postfix" "postgresql" "zfs" "notify-secondary"];
+ config.myServices.monitoring.smartdDisks = [
+ "ata-ST33000650NS_Z29540DM"
+ "ata-ST33000650NS_Z296JGJ4"
+ "ata-Micron_5200_MTFDDAK480TDC_18011BEE03B3"
+ ];
+
+ config.myServices.monitoring.activatedPlugins = [ "memory" "command" "bandwidth" "emails" "mdadm" "postfix" "postgresql" "zfs" "notify-secondary" "smartctl" ];
config.myServices.monitoring.pluginsArgs.postgresql.package = config.myServices.databases.postgresql.package;
config.myServices.monitoring.objects = lib.mkMerge [
(monitoring.lib.objectsCommon {
};
config = lib.mkIf config.myServices.pub.enable {
+ services.borgBackup.profiles.global.ignoredPaths = [
+ "pub/.nix-.*"
+ ];
myServices.dns.zones."immae.eu".subdomains.pub =
with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
};
config = lib.mkIf cfg.enable {
+ services.borgBackup.profiles.global.includedPaths = [
+ "nextcloud/appdata_occ80acffb591"
+ "nextcloud/files_external"
+ "nextcloud/config"
+ #"nextcloud/gpxpod"
+ "nextcloud/.ocdata"
+ "nextcloud/.htaccess"
+ "nextcloud/index.html"
+ ];
myServices.dns.zones."immae.eu".subdomains.cloud =
with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
};
myServices.tools.cloud.farm.instances.immae = {
- nextcloud = pkgs.webapps-nextcloud_27.override ({
+ nextcloud = pkgs.webapps-nextcloud_27_2.override ({
# Allow /index.php redirects
postInstall = ''
cd $out
enable = lib.mkEnableOption "Enable commento website";
};
config = lib.mkIf cfg.enable {
+ services.borgBackup.profiles.global.includedPaths = [
+ "vhost/tools.immae.eu/commento"
+ ];
myServices.dns.zones."immae.eu".subdomains.commento =
with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
inherit domain port;
config = configFile;
};
+ services.borgBackup.profiles.global.includedPaths = [
+ "cryptpad/immaeEu"
+ ];
services.websites.env.tools.modules = [ "proxy_wstunnel" ];
security.acme.certs.eldiron.extraDomainNames = [ domain ];
services.websites.env.tools.vhostConfs.cryptpad = {
-{ env, mantisbt_2, mantisbt_2-plugins, config }:
+{ env, mantisbt_2, mantisbt_2-plugins, config, writeText }:
+let
+ mantis_config = {
+ config_inc = config.secrets.fullPaths."webapps/tools-mantisbt";
+ custom_constants_inc = writeText "custom_constants_inc.php" ''
+ <?php
+ define('TESTING', 60);
+ ?>
+ '';
+ custom_strings_inc = writeText "custom_strings_inc.php" ''
+ <?php
+ switch( $g_active_language ) {
+ case 'french':
+ $s_status_enum_string = '10:nouveau,20:retour d’informations,30:reçu,40:confirmé,50:affecté,60:à tester,80:traité,90:fermé';
+ $s_acknowledged_bug_title = 'Recevoir l’anomalie';
+ $s_acknowledged_bug_button = 'Recevoir l’anomalie';
+ $s_email_notification_title_for_status_bug_acknowledged = 'L’anomalie suivante a été REÇUE.';
+
+ $s_testing_bug_title = "Mettre l’anomalie en test";
+ $s_testing_bug_button = 'À tester';
+ $s_email_notification_title_for_status_bug_testing = "L’anomalie suivante est prête à être TESTÉE.";
+ break;
+ default: # english
+ $s_status_enum_string = '10:new,20:feedback,30:acknowledged,40:confirmed,50:assigned,60:testing,80:resolved,90:closed';
+
+ $s_testing_bug_title = 'Mark issue Ready for Testing';
+ $s_testing_bug_button = 'Ready for Testing';
+
+ $s_email_notification_title_for_status_bug_testing = 'The following issue is ready for TESTING.';
+ break;
+ }
+ ?>
+ '';
+ };
+in
rec {
keys."webapps/tools-mantisbt" = {
user = apache.user;
permissions = "0400";
text = ''
<?php
+ $g_admin_checks = OFF;
+ $g_reauthentication = OFF;
+ $g_reauthentication_expiry = 604800;
+ $g_path = 'https://git.immae.eu/mantisbt/';
$g_hostname = '${env.postgresql.socket}';
$g_db_username = '${env.postgresql.user}';
$g_db_password = '${env.postgresql.password}';
$g_allow_anonymous_login = ON;
$g_anonymous_account = 'anonymous';
- $g_phpMailer_method = PHPMAILER_METHOD_SENDMAIL;
+ $g_log_level = LOG_EMAIL_VERBOSE;
+ $g_phpMailer_method = PHPMAILER_METHOD_MAIL;
$g_smtp_host = 'localhost';
$g_smtp_username = ''';
$g_smtp_password = ''';
$g_login_method = LDAP;
$g_ldap_protocol_version = 3;
$g_ldap_server = 'ldaps://${env.ldap.host}:636';
+ $g_ldap_use_starttls = OFF;
$g_ldap_root_dn = 'ou=users,${env.ldap.base}';
$g_ldap_bind_dn = '${env.ldap.dn}';
$g_ldap_bind_passwd = '${env.ldap.password}';
$g_ldap_uid_field = 'uid';
$g_ldap_realname_field = 'cn';
$g_ldap_organization = '${env.ldap.filter}';
+
+ $g_status_enum_string = '10:new,20:feedback,30:acknowledged,40:confirmed,50:assigned,60:testing,80:resolved,90:closed';
+ $g_status_colors['testing'] = '#ace7ae';
'';
};
- webRoot = (mantisbt_2.override { mantis_config = config.secrets.fullPaths."webapps/tools-mantisbt"; }).withPlugins (p: [p.slack p.source-integration]);
+ webRoot = (mantisbt_2.override { inherit mantis_config; }).withPlugins (p: [p.slack p.source-integration ]);
apache = rec {
user = "wwwrun";
group = "wwwrun";
};
phpFpm = rec {
serviceDeps = [ "postgresql.service" "openldap.service" ];
- basedir = builtins.concatStringsSep ":" (
- [ webRoot config.secrets.fullPaths."webapps/tools-mantisbt" ]
- ++ webRoot.plugins);
+ basedir = builtins.concatStringsSep ":" ([ webRoot ] ++
+ webRoot.plugins ++ builtins.attrValues mantis_config);
pool = {
"listen.owner" = apache.user;
"listen.group" = apache.group;
"php_admin_value[upload_max_filesize]" = "5000000";
- "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ "php_admin_value[sendmail_path]" = "/run/wrappers/bin/sendmail -t -i";
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp:/run/wrappers/bin/sendmail";
"php_admin_value[session.save_handler]" = "redis";
"php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:MantisBT:'";
};
mailSend
(ips servers.eldiron.ips.main)
];
+ synapse = ips servers.zoldene.ips.main;
};
+ services.borgBackup.profiles.global.ignoredPaths = [
+ "duply"
+ "kanboard"
+ "ntfy"
+ ];
+ services.borgBackup.profiles.global.includedPaths = [
+ "paste"
+ "dokuwiki/conf"
+ "dokuwiki/data"
+ "phpbb"
+ "shaarli/cache"
+ "shaarli/pagecache"
+ "shaarli/tmp"
+ ];
+
myServices.chatonsProperties.services = {
adminer = adminer.chatonsProperties;
dokuwiki = dokuwiki.chatonsProperties;
source = builtins.fetchGit {
url = "https://git.immae.eu/github/bastienwirtz/homer.git";
ref = "gitolite_local/local_changes";
- rev = "af6db21ee92824ddd9c4b9574018789619326ffc";
- narHash = "sha256-TAf2oIPu5ZfRbxahAjOxwQ/z/g82pXmLPU8LhwxRgXs";
+ rev = "f2f414a2e9b02d645acb49f62fdfcceb8eca7d19";
+ narHash = "sha256-WrAx4gLKOVpwHtLh57ZLoWaUnfohwYlIX/LrwORIbFU=";
};
yarnModules = yarn2nix-moretea.mkYarnModules rec {
nodejs = nodejs_16;
}
}
$con = pg_connect("");
- $result = pg_query_params($con, "WITH newsalt as (SELECT gen_random_bytes(4)) UPDATE ldap_users SET password = encode(digest( $1 || (SELECT * FROM newsalt), 'sha1'), 'hex'), mechanism = 'SSHA', salt = (SELECT * FROM newsalt) where login || '@' || realm = $2", array($newPassword, $user_realm));
+ $result = pg_query_params($con, "WITH newsalt as (SELECT gen_random_bytes(4)) UPDATE ldap_users SET password = encode(digest( convert_to($1, 'UTF8') || (SELECT * FROM newsalt), 'sha1'), 'hex'), mechanism = 'SSHA', salt = (SELECT * FROM newsalt) where login || '@' || realm = $2", array($newPassword, $user_realm));
if (!$result) {
$message[] = "Error when accessing database";
return false;
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-ptLDqa3BTCX2orio9YgGsOwYa5bsz2DWn6TrtR2B45w=",
+ "narHash": "sha256-S6sETV9+RccMB5LcH4vOZJiTdhLS3SRIjFRvEfjd9Ag=",
"path": "../../flakes/private/chatons",
"type": "path"
},
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_2": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_3": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_4": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_5": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-1sEwMNWSytfyn4Rh5gUJACwCNgaTLdMDkO9hEr5OB7M=",
+ "narHash": "sha256-tY5qk98NpdM4osbPYFeo6/pHiQQU4a4iKw2jCJP99q8=",
"path": "../../flakes/private/mail-relay",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
group = "naemon";
permissions = "0400";
text = ''
- export AWS_ACCESS_KEY_ID="${v.accessKeyId}"
- export AWS_SECRET_ACCESS_KEY="${v.secretAccessKey}"
+ export AWS_ACCESS_KEY_ID="${v.s3AccessKeyId}"
+ export AWS_SECRET_ACCESS_KEY="${v.s3SecretAccessKey}"
export BASE_URL="${v.remote "immae-eldiron"}"
'';
- }) config.myEnv.backup.remotes;
+ }) (lib.filterAttrs (k: v: v.remote_type == "s3") config.myEnv.backup.remotes);
services.naemon.extraConfig = ''
broker_module=${pkgs.naemon-livestatus}/lib/naemon-livestatus/livestatus.so ${config.services.naemon.runDir}/live
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
"environment_2": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
"environment_3": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-PicwNqwQaCKtN5zPpTfpSDRXbyn9xh8aHqoPnm9cFz8=",
+ "narHash": "sha256-F7GennKqLc6Cx3DuU6qSPUHmjvpfrrfOshor41vaCz4=",
"path": "../../flakes/private/monitoring",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
secrets.nixosModules.users-config-zoldene
./virtualisation.nix
./certificates.nix
+ ./synapse.nix
];
+ programs.ssh.package = pkgs.openssh;
services.openssh = {
settings.KbdInteractiveAuthentication = false;
hostKeys = [
};
};
- powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
+ powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
hardware.enableRedistributableFirmware = lib.mkDefault true;
system.activationScripts.createDatasets = {
"environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-etK0kcWYmiCmdex+9CjWWqn4q8EonDutUP0yFH+odrE=",
+ "narHash": "sha256-yHJid6Rpxa5pfKI81FfI0VZir9seZMHtLzjdvmt0FVw=",
"path": "../../mypackages",
"type": "path"
},
},
"nixpkgs_5": {
"locked": {
- "lastModified": 1708475490,
- "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=",
+ "lastModified": 1720031269,
+ "narHash": "sha256-rwz8NJZV+387rnWpTYcXaRNvzUSnnF9aHONoJIYmiUQ=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "0e74ca98a74bc7270d28838369593635a5db3260",
+ "rev": "9f4128e00b0ae8ec65918efeba59db998750ead6",
"type": "github"
},
"original": {
"private-environment": {
"locked": {
"lastModified": 1,
- "narHash": "sha256-VO82m/95IcX3xxJ63wcLh3hXzXDRFKUohYil/18pBSY=",
+ "narHash": "sha256-xrpwkilnPpT6TklQVoLrID8tWUZAH4PJ5XqhRHXGbvo=",
"path": "../../flakes/private/environment",
"type": "path"
},
},
"locked": {
"lastModified": 1,
- "narHash": "sha256-+s9C1mPCXRA44AC0Fg+B2uD6UiK0JfUA0F8fhceH0lQ=",
+ "narHash": "sha256-5cM87LAHjrWoZRc2QbM6Xu9klzMNBpREjz6sWqp+hFA=",
"path": "../../flakes/private/system",
"type": "path"
},
ingestion_burst_size_mb = 200;
per_stream_rate_limit = "100MB";
per_stream_rate_limit_burst = "200MB";
+ # Remove after 2024-07-08 see below
+ allow_structured_metadata = false;
};
schema_config.configs = [
index.prefix = "index_";
index.period = "24h";
}
+ {
+ from = "2024-07-08";
+ store = "tsdb";
+ object_store = "filesystem";
+ schema = "v13";
+ index.prefix = "index_";
+ index.period = "24h";
+ }
];
};
};
--- /dev/null
+{ lib, config, pkgs, name, ... }:
+{
+ config = {
+ security.acme.certs."${name}".extraDomainNames = ["synapse.immae.eu"];
+ services.nginx = {
+ virtualHosts = {
+ "synapse.immae.eu" = {
+ acmeRoot = config.security.acme.defaults.webroot;
+ useACMEHost = name;
+ forceSSL = true;
+
+ locations."~ ^/admin(?:/(.*))?$" = {
+ alias = let
+ synapse-admin = pkgs.fetchzip {
+ url = "https://github.com/Awesome-Technologies/synapse-admin/releases/download/0.10.1/synapse-admin-0.10.1.tar.gz";
+ sha256 = "sha256-M2AYNrnpNoDm20ZTH1OZBHVcjOrHAlqyq5iTQ/At/Xk=";
+ postFetch = ''
+ sed -i -e 's@"/assets@"./assets@g' $out/index.html
+ '';
+ };
+ in
+ "${synapse-admin}/$1";
+ };
+ locations."/sliding-sync-client/" = {
+ # some svg urls are hardcoded to /client :shrug:
+ alias = "${pkgs.matrix-sliding-sync.src}/client/";
+ tryFiles = "$uri $uri/ /sliding-sync-client/index.html";
+ };
+ locations."~ ^/_matrix/client/unstable/org.matrix.msc3575/sync" = {
+ proxyPass = "http://unix:/run/matrix-synapse/sliding_sync.sock:";
+ };
+ locations."~ ^(/_matrix|/_synapse/client|/_synapse/admin)" = {
+ proxyPass = "http://unix:/run/matrix-synapse/main_client_federation.sock:";
+ extraConfig = ''
+ client_max_body_size 50M;
+ '';
+ };
+ };
+ };
+ };
+
+ systemd.services.postgresql.postStart = lib.mkAfter ''
+ $PSQL -tAc "SELECT 1 FROM pg_database WHERE datname = 'matrix-synapse'" | grep -q 1 || $PSQL -tAc "CREATE DATABASE \"matrix-synapse\" LC_COLLATE='C' LC_CTYPE='C' TEMPLATE template0"
+ $PSQL -tAc "SELECT 1 FROM pg_database WHERE datname = 'matrix-sliding-sync'" | grep -q 1 || $PSQL -tAc "CREATE DATABASE \"matrix-sliding-sync\" LC_COLLATE='C' LC_CTYPE='C' TEMPLATE template0"
+ $PSQL -tAc "SELECT 1 FROM pg_roles WHERE rolname='matrix-synapse'" | grep -q 1 || $PSQL -tAc 'CREATE USER "matrix-synapse"'
+ $PSQL -tAc 'ALTER DATABASE "matrix-synapse" OWNER TO "matrix-synapse";'
+ $PSQL -tAc 'ALTER DATABASE "matrix-sliding-sync" OWNER TO "matrix-synapse";'
+ '';
+
+ disko.devices.zpool.zfast.datasets."root/persist/var/lib/matrix-sliding-sync" =
+ { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib/matrix-sliding-sync"; options.mountpoint = "legacy"; };
+ disko.devices.zpool.zfast.datasets."root/persist/var/lib/matrix-synapse" =
+ { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib/matrix-synapse"; options.mountpoint = "legacy"; };
+
+ environment.persistence."/persist/zfast".directories = [
+ {
+ directory = "/var/lib/matrix-synapse";
+ user = "matrix-synapse";
+ group = "matrix-synapse";
+ mode = "0700";
+ }
+ {
+ directory = "/var/lib/matrix-sliding-sync";
+ user = "matrix-synapse";
+ group = "matrix-synapse";
+ mode = "0700";
+ }
+ ];
+
+ users.users.matrix-synapse.extraGroups = [ "keys" ];
+ users.users.nginx.extraGroups = [ "matrix-synapse" ];
+
+ services.matrix-synapse = {
+ enable = true;
+ log.root.level = "WARNING";
+ plugins = [
+ config.services.matrix-synapse.package.plugins.matrix-synapse-ldap3
+ ];
+ extraConfigFiles = [
+ config.secrets.fullPaths."matrix/homeserver_secrets.yaml"
+ ];
+ settings.modules = [
+ {
+ module = "ldap_auth_provider.LdapAuthProviderModule";
+ config = {
+ enabled = true;
+ uri = "ldaps://${config.myEnv.tools.matrix.ldap.host}:636";
+ start_tls = false;
+ base = config.myEnv.tools.matrix.ldap.base;
+ attributes = {
+ uid = "uid";
+ mail = "mail";
+ name = "cn";
+ };
+ bind_dn = config.myEnv.tools.matrix.ldap.dn;
+ bind_password_file = config.secrets.fullPaths."matrix/ldap_password";
+ filter = config.myEnv.tools.matrix.ldap.filter;
+ };
+ }
+ ];
+ settings.server_name = "immae.eu";
+ settings.signing_key_path = config.secrets.fullPaths."matrix/signing.key";
+ settings.listeners = [
+ {
+ port = 8008;
+ bind_addresses = [ "127.0.0.1" ];
+ type = "http";
+ tls = false;
+ x_forwarded = true;
+ resources = [
+ {
+ names = [ "client" ];
+ compress = true;
+ }
+ ];
+ }
+ {
+ path = "/run/matrix-synapse/main_client_federation.sock";
+ resources = [
+ {
+ compress = true;
+ names = [ "client" ];
+ }
+ {
+ compress = false;
+ names = [ "federation" ];
+ }
+ ];
+ type = "http";
+ x_forwarded = true;
+ }
+ ];
+ };
+ services.matrix-sliding-sync = {
+ enable = true;
+ createDatabase = false;
+ settings.SYNCV3_SERVER = "/run/matrix-synapse/main_client_federation.sock";
+ settings.SYNCV3_BINDADDR = "/run/matrix-synapse/sliding_sync.sock";
+ environmentFile = config.secrets.fullPaths."matrix/sliding-sync";
+ };
+
+ systemd.services.matrix-synapse = {
+ after = [
+ "postgresql.service"
+ "persist-zfast-var-lib-matrix\\x2dsynapse.mount"
+ "var-lib-matrix\\x2dsynapse.mount"
+ ];
+ unitConfig = {
+ BindsTo = [
+ "var-lib-matrix\\x2dsynapse.mount"
+ "persist-zfast-var-lib-matrix\\x2dsynapse.mount"
+ ];
+ };
+ serviceConfig.SupplementaryGroups = [ "keys" ];
+ };
+
+ systemd.services.matrix-sliding-sync = {
+ serviceConfig = {
+ DynamicUser = lib.mkForce false;
+ User = "matrix-synapse";
+ Group = "matrix-synapse";
+ RuntimeDirectory = lib.mkForce "matrix-synapse";
+ SupplementaryGroups = [ "keys" ];
+ };
+ unitConfig = {
+ BindsTo = [
+ "persist-zfast-var-lib-matrix\\x2dsliding\\x2dsync.mount"
+ "var-lib-matrix\\x2dsliding\\x2dsync.mount"
+ ];
+ After = lib.mkForce [
+ "matrix-synapse.service"
+ "postgresql.service"
+ "var-lib-matrix\\x2dsliding\\x2dsync.mount"
+ "persist-zfast-var-lib-matrix\\x2dsliding\\x2dsync.mount"
+ ];
+ };
+ };
+ secrets.keys."matrix/ldap_password" = {
+ permissions = "0400";
+ user = "matrix-synapse";
+ group = "matrix-synapse";
+ text = config.myEnv.tools.matrix.ldap.password;
+ };
+ secrets.keys."matrix/signing.key" = {
+ permissions = "0400";
+ user = "matrix-synapse";
+ group = "matrix-synapse";
+ text = "{{ .matrix.signing_key }}";
+ };
+ secrets.keys."matrix/homeserver_secrets.yaml" = {
+ permissions = "0400";
+ user = "matrix-synapse";
+ group = "matrix-synapse";
+ # Beware, yaml keys are merged at top level, not deep
+ text = ''
+ password_config:
+ enabled: true
+ pepper: "{{ .matrix.password_pepper }}"
+ macaroon_secret_key: "{{ .matrix.macaroon_secret_key }}"
+ '';
+ };
+ secrets.keys."matrix/sliding-sync" = {
+ permissions = "0400";
+ user = "matrix-synapse";
+ group = "matrix-synapse";
+ text = ''
+ SYNCV3_SECRET={{ .matrix.sliding_sync_secret }}
+ '';
+ };
+ };
+}