This commit is contained in:
parent
81d7598bd7
commit
6c7d9704bd
327
flake.lock
327
flake.lock
|
@ -3,10 +3,10 @@
|
||||||
"agenix": {
|
"agenix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"darwin": [
|
"darwin": [
|
||||||
"nix-darwin"
|
"darwin"
|
||||||
],
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixos"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
|
@ -23,13 +23,33 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"deploy-rs": {
|
"darwin": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixos"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1699437533,
|
||||||
|
"narHash": "sha256-lMoPz9c89CpPVuJ95OFFesM9JagCF0soGbQatj3ZhqM=",
|
||||||
|
"owner": "LnL7",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"rev": "eb2b9b64238349bd351561e32e260cac15db6f9a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "LnL7",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"deploy": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": [
|
"flake-compat": [
|
||||||
"flake-compat"
|
"flake-compat"
|
||||||
],
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixos"
|
||||||
],
|
],
|
||||||
"utils": "utils"
|
"utils": "utils"
|
||||||
},
|
},
|
||||||
|
@ -47,6 +67,68 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"devshell": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": [
|
||||||
|
"digga",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1671489820,
|
||||||
|
"narHash": "sha256-qoei5HDJ8psd1YUPD7DhbHdhLIT9L2nadscp4Qk37uk=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "devshell",
|
||||||
|
"rev": "5aa3a8039c68b4bf869327446590f4cdf90bb634",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "devshell",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"digga": {
|
||||||
|
"inputs": {
|
||||||
|
"darwin": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"deploy": [
|
||||||
|
"deploy"
|
||||||
|
],
|
||||||
|
"devshell": "devshell",
|
||||||
|
"flake-compat": [
|
||||||
|
"flake-compat"
|
||||||
|
],
|
||||||
|
"flake-utils": "flake-utils_2",
|
||||||
|
"flake-utils-plus": "flake-utils-plus",
|
||||||
|
"home-manager": [
|
||||||
|
"home"
|
||||||
|
],
|
||||||
|
"nixlib": [
|
||||||
|
"nixos"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixos"
|
||||||
|
],
|
||||||
|
"nixpkgs-unstable": "nixpkgs-unstable"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1674947971,
|
||||||
|
"narHash": "sha256-6gKqegJHs72jnfFP9g2sihl4fIZgtKgKuqU2rCkIdGY=",
|
||||||
|
"owner": "pub-solar",
|
||||||
|
"repo": "digga",
|
||||||
|
"rev": "2da608bd8afb48afef82c6b1b6d852a36094a497",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "pub-solar",
|
||||||
|
"ref": "fix/bootstrap-iso",
|
||||||
|
"repo": "digga",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"factorio-pr": {
|
"factorio-pr": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1676729025,
|
"lastModified": 1676729025,
|
||||||
|
@ -66,11 +148,11 @@
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1673956053,
|
"lastModified": 1696426674,
|
||||||
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
|
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
|
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -79,28 +161,78 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-parts": {
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1642700792,
|
||||||
|
"narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "846b2ae0fc4cc943637d3d1def4454213e203cba",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils-plus": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs-lib": "nixpkgs-lib"
|
"flake-utils": [
|
||||||
|
"digga",
|
||||||
|
"flake-utils"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1698882062,
|
"lastModified": 1654029967,
|
||||||
"narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=",
|
"narHash": "sha256-my3GQ3mQIw/1f6GPV1IhUZrcYQSWh0YJAMPNBjhXJDw=",
|
||||||
"owner": "hercules-ci",
|
"owner": "gytis-ivaskevicius",
|
||||||
"repo": "flake-parts",
|
"repo": "flake-utils-plus",
|
||||||
"rev": "8c9fa2545007b49a5db5f650ae91f227672c3877",
|
"rev": "6271cf3842ff9c8a9af9e3508c547f86bc77d199",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "hercules-ci",
|
"owner": "gytis-ivaskevicius",
|
||||||
"repo": "flake-parts",
|
"ref": "refs/pull/120/head",
|
||||||
|
"repo": "flake-utils-plus",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"home-manager": {
|
"flake-utils_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1667395993,
|
||||||
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fork": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1692960587,
|
||||||
|
"narHash": "sha256-39SKGdhn8jKKkdqhULbCvQOpdUPE9NNJpy5HTB++Jvg=",
|
||||||
|
"owner": "teutat3s",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "312709dd70684f52496580e533d58645526b1c90",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "teutat3s",
|
||||||
|
"ref": "nvfetcher-fix",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixos"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
|
@ -118,18 +250,18 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"master": {
|
"latest": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699660051,
|
"lastModified": 1699099776,
|
||||||
"narHash": "sha256-aAdBhxHIiD0Y2LGqidTMw2ywKofRza8RwVqQodnsZIA=",
|
"narHash": "sha256-X09iKJ27mGsGambGfkKzqvw5esP1L/Rf8H3u3fCqIiU=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "02f05fceedefc00f90ecf27bda9e94ed2318aa50",
|
"rev": "85f1ba3e51676fa8cc604a3d863d729026a6b8eb",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"ref": "master",
|
"ref": "nixos-unstable",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
@ -137,7 +269,7 @@
|
||||||
"musnix": {
|
"musnix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixos"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
|
@ -154,58 +286,7 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nix-darwin": {
|
"nixos": {
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1699569089,
|
|
||||||
"narHash": "sha256-MdOnyXrmMdVU9o7GpcbWKgehoK9L76ihp8rTikPcC1k=",
|
|
||||||
"owner": "lnl7",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"rev": "c8f385766ba076a096caa794309c40f89894d88a",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "lnl7",
|
|
||||||
"ref": "master",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixos-flake": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1698598244,
|
|
||||||
"narHash": "sha256-YbvPFt+9CbCiqnuS0dTx+P+W1YRCqzhLXen94sef3Kk=",
|
|
||||||
"owner": "srid",
|
|
||||||
"repo": "nixos-flake",
|
|
||||||
"rev": "f6b7757ad88483afca306c9f3bf387887fba7284",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "srid",
|
|
||||||
"repo": "nixos-flake",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixos-hardware": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1683965003,
|
|
||||||
"narHash": "sha256-DrzSdOnLv/yFBvS2FqmwBA2xIbN/Lny/WlxHyoLR9zE=",
|
|
||||||
"owner": "nixos",
|
|
||||||
"repo": "nixos-hardware",
|
|
||||||
"rev": "81cd886719e10d4822b2a6caa96e95d56cc915ef",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nixos",
|
|
||||||
"repo": "nixos-hardware",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699291058,
|
"lastModified": 1699291058,
|
||||||
"narHash": "sha256-5ggduoaAMPHUy4riL+OrlAZE14Kh7JWX4oLEs22ZqfU=",
|
"narHash": "sha256-5ggduoaAMPHUy4riL+OrlAZE14Kh7JWX4oLEs22ZqfU=",
|
||||||
|
@ -221,43 +302,22 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-hensoko": {
|
"nixos-hardware": {
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs_2"
|
|
||||||
},
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1666884246,
|
"lastModified": 1699159446,
|
||||||
"narHash": "sha256-nSiYCIlMiYodY7GPCFPMF6YHVS2RM/XQZwn2Zrhu2eU=",
|
"narHash": "sha256-cL63IjsbPl2otS7R4kdXbVOJOXYMpGw5KGZoWgdCuCM=",
|
||||||
"ref": "master",
|
"owner": "nixos",
|
||||||
"rev": "f1863fb8e3866c1559ca885e1b319ea82baecdbb",
|
"repo": "nixos-hardware",
|
||||||
"revCount": 23,
|
"rev": "627bc9b88256379578885a7028c9e791c29fb581",
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.b12f.io/hensoko/nixpkgs"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.b12f.io/hensoko/nixpkgs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs-lib": {
|
|
||||||
"locked": {
|
|
||||||
"dir": "lib",
|
|
||||||
"lastModified": 1698611440,
|
|
||||||
"narHash": "sha256-jPjHjrerhYDy3q9+s5EAsuhyhuknNfowY6yt6pjn9pc=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "0cbe9f69c234a7700596e943bfae7ef27a31b735",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"dir": "lib",
|
"owner": "nixos",
|
||||||
"owner": "NixOS",
|
"repo": "nixos-hardware",
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1654994491,
|
"lastModified": 1654994491,
|
||||||
"narHash": "sha256-HFu3HTFFFcZSKImuiki3q+MLvcc85hRgYvW+sXmH8LE=",
|
"narHash": "sha256-HFu3HTFFFcZSKImuiki3q+MLvcc85hRgYvW+sXmH8LE=",
|
||||||
|
@ -273,31 +333,31 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"nixpkgs-hensoko": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"agenix": "agenix",
|
"nixpkgs": "nixpkgs"
|
||||||
"deploy-rs": "deploy-rs",
|
},
|
||||||
"factorio-pr": "factorio-pr",
|
"locked": {
|
||||||
"flake-compat": "flake-compat",
|
"lastModified": 1666884246,
|
||||||
"flake-parts": "flake-parts",
|
"narHash": "sha256-nSiYCIlMiYodY7GPCFPMF6YHVS2RM/XQZwn2Zrhu2eU=",
|
||||||
"home-manager": "home-manager",
|
"ref": "master",
|
||||||
"master": "master",
|
"rev": "f1863fb8e3866c1559ca885e1b319ea82baecdbb",
|
||||||
"musnix": "musnix",
|
"revCount": 23,
|
||||||
"nix-darwin": "nix-darwin",
|
"type": "git",
|
||||||
"nixos-flake": "nixos-flake",
|
"url": "https://git.b12f.io/hensoko/nixpkgs"
|
||||||
"nixos-hardware": "nixos-hardware",
|
},
|
||||||
"nixpkgs": "nixpkgs",
|
"original": {
|
||||||
"nixpkgs-hensoko": "nixpkgs-hensoko",
|
"type": "git",
|
||||||
"unstable": "unstable"
|
"url": "https://git.b12f.io/hensoko/nixpkgs"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"unstable": {
|
"nixpkgs-unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699099776,
|
"lastModified": 1672791794,
|
||||||
"narHash": "sha256-X09iKJ27mGsGambGfkKzqvw5esP1L/Rf8H3u3fCqIiU=",
|
"narHash": "sha256-mqGPpGmwap0Wfsf3o2b6qHJW1w2kk/I6cGCGIU+3t6o=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "85f1ba3e51676fa8cc604a3d863d729026a6b8eb",
|
"rev": "9813adc7f7c0edd738c6bdd8431439688bb0cb3d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -307,6 +367,23 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"agenix": "agenix",
|
||||||
|
"darwin": "darwin",
|
||||||
|
"deploy": "deploy",
|
||||||
|
"digga": "digga",
|
||||||
|
"factorio-pr": "factorio-pr",
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"fork": "fork",
|
||||||
|
"home": "home",
|
||||||
|
"latest": "latest",
|
||||||
|
"musnix": "musnix",
|
||||||
|
"nixos": "nixos",
|
||||||
|
"nixos-hardware": "nixos-hardware",
|
||||||
|
"nixpkgs-hensoko": "nixpkgs-hensoko"
|
||||||
|
}
|
||||||
|
},
|
||||||
"utils": {
|
"utils": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1667395993,
|
"lastModified": 1667395993,
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
}: {
|
}: {
|
||||||
boot.loader.systemd-boot.enable = lib.mkForce false;
|
boot.loader.systemd-boot.enable = lib.mkForce false;
|
||||||
|
|
||||||
|
#pub-solar.concourse-server.enable = true;
|
||||||
|
|
||||||
time.timeZone = "Europe/Berlin";
|
time.timeZone = "Europe/Berlin";
|
||||||
|
|
||||||
services.openssh.ports = [2222];
|
services.openssh.ports = [2222];
|
||||||
|
|
40
hosts/chonk/garage.nix
Normal file
40
hosts/chonk/garage.nix
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
{ pkgs, config, lib, self, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
age.secrets.garage_rpc_token = {
|
||||||
|
file = "${self}/secrets/chonk_garage_rpc_secret.age";
|
||||||
|
owner = "garage";
|
||||||
|
group = "garage";
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.interfaces.wg0.allowedTCPPorts = [ 3900 3901 ];
|
||||||
|
|
||||||
|
users.groups.garage = {};
|
||||||
|
users.users.garage = {
|
||||||
|
group = "garage";
|
||||||
|
isSystemUser = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# overwrite dynamicuser
|
||||||
|
systemd.services.garage.serviceConfig = {
|
||||||
|
User = "garage";
|
||||||
|
Group = "garage";
|
||||||
|
DynamicUser = false;
|
||||||
|
StateDirectory = lib.mkForce null;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.garage = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.garage_0_8;
|
||||||
|
settings = {
|
||||||
|
replication_mode = "1";
|
||||||
|
rpc_bind_addr = "[::]:3901";
|
||||||
|
rpc_secret_file = config.age.secrets.garage_rpc_token.path;
|
||||||
|
s3_api = {
|
||||||
|
api_bind_addr = "[::]:3900";
|
||||||
|
s3_region = "garage";
|
||||||
|
root_domain = ".s3.gssws.de";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -8,30 +8,35 @@
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
boot.initrd.availableKernelModules = ["ehci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
|
boot.initrd.availableKernelModules = ["ehci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
|
||||||
boot.initrd.kernelModules = ["raid1"];
|
|
||||||
boot.kernelModules = ["kvm-intel"];
|
boot.kernelModules = ["kvm-intel"];
|
||||||
boot.extraModulePackages = [];
|
boot.extraModulePackages = [];
|
||||||
boot.extraModprobeConfig = "options kvm_intel nested=1";
|
boot.extraModprobeConfig = "options kvm_intel nested=1";
|
||||||
|
|
||||||
boot.initrd.luks.forceLuksSupportInInitrd = true;
|
boot.kernelPackages = pkgs.linuxPackages_6_1;
|
||||||
|
boot.kernelParams = [ "ip=80.244.242.2::80.244.242.1:255.255.255.248:chonk::off" ];
|
||||||
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
boot.loader.grub = {
|
||||||
|
enable = true;
|
||||||
boot.loader.grub.enable = true;
|
device = "/dev/disk/by-id/usb-SanDisk_Cruzer_Blade_03025429121421051300-0:0";
|
||||||
boot.loader.grub.device = "/dev/disk/by-id/usb-SanDisk_Cruzer_Blade_03025429121421051300-0:0";
|
|
||||||
|
|
||||||
boot.initrd.luks.devices."cryptroot" = {
|
|
||||||
device = "/dev/disk/by-uuid/9e13c8ea-96d3-45b1-85f4-d1a61233da6f";
|
|
||||||
#keyFile = "/dev/disk/by-id/usb-SanDisk_Cruzer_Blade_04020116120721075123-0:0-part1";
|
|
||||||
#fallbackToPassword = true;
|
|
||||||
#bypassWorkqueues = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
boot.initrd.network = {
|
boot.supportedFilesystems = [ "zfs" ];
|
||||||
|
|
||||||
|
boot.initrd = {
|
||||||
|
systemd.enable = true;
|
||||||
|
|
||||||
|
luks = {
|
||||||
|
forceLuksSupportInInitrd = true;
|
||||||
|
devices."cryptroot" = {
|
||||||
|
device = "/dev/disk/by-uuid/9e13c8ea-96d3-45b1-85f4-d1a61233da6f";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
network = {
|
||||||
enable = true;
|
enable = true;
|
||||||
ssh = {
|
ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
port = 22;
|
port = 2234;
|
||||||
authorizedKeys = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAqkqMYgncrnczcW/0PY+Z+FmNXXpgw6D9JWTTwiainy hensoko@hensoko-tp-work"];
|
authorizedKeys = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAqkqMYgncrnczcW/0PY+Z+FmNXXpgw6D9JWTTwiainy hensoko@hensoko-tp-work"];
|
||||||
hostKeys = [/etc/secrets/initrd/ssh_host_ed25519_key];
|
hostKeys = [/etc/secrets/initrd/ssh_host_ed25519_key];
|
||||||
};
|
};
|
||||||
|
@ -39,30 +44,30 @@
|
||||||
echo 'cryptsetup-askpass' >> /root/.profile
|
echo 'cryptsetup-askpass' >> /root/.profile
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
services.swraid = {
|
||||||
boot.initrd.systemd.enable = true;
|
|
||||||
|
|
||||||
boot.initrd.services.swraid = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
mdadmConf = ''
|
mdadmConf = ''
|
||||||
ARRAY /dev/md/0 metadata=1.2 name=data:0 UUID=1156202f:835af09b:2e05e02a:a1869d1c
|
ARRAY /dev/md/debian:0 metadata=1.2 name=debian:0 UUID=1156202f:835af09b:2e05e02a:a1869d1c
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
fileSystems."/" = {
|
fileSystems = {
|
||||||
|
"/" = {
|
||||||
device = "/dev/disk/by-label/root";
|
device = "/dev/disk/by-label/root";
|
||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/boot" = {
|
"/boot" = {
|
||||||
device = "/dev/disk/by-label/boot";
|
device = "/dev/disk/by-label/boot";
|
||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/mnt/internal" = {
|
"/mnt/internal" = {
|
||||||
device = "/dev/disk/by-uuid/3563f624-f8ed-4664-95d0-ca8b9db1c60a";
|
device = "/dev/disk/by-uuid/3563f624-f8ed-4664-95d0-ca8b9db1c60a";
|
||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
swapDevices = [
|
swapDevices = [
|
||||||
{device = "/dev/disk/by-label/swap";}
|
{device = "/dev/disk/by-label/swap";}
|
||||||
|
@ -78,6 +83,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
|
hostId = "c418ba82";
|
||||||
defaultGateway = {
|
defaultGateway = {
|
||||||
address = "80.244.242.1";
|
address = "80.244.242.1";
|
||||||
interface = "br0";
|
interface = "br0";
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
"data.gssws.de"
|
"data.gssws.de"
|
||||||
"mail.hosting.de"
|
"mail.hosting.de"
|
||||||
"blog.fefe.de"
|
"blog.fefe.de"
|
||||||
|
|
||||||
# hosting.de
|
# hosting.de
|
||||||
"ovh2.goekal.de"
|
"ovh2.goekal.de"
|
||||||
"83.151.16.16"
|
"83.151.16.16"
|
||||||
|
@ -59,6 +60,13 @@
|
||||||
"95.129.51.51"
|
"95.129.51.51"
|
||||||
"185.11.137.122"
|
"185.11.137.122"
|
||||||
"79.140.41.12"
|
"79.140.41.12"
|
||||||
|
|
||||||
|
# pub.solar
|
||||||
|
"pub.solar"
|
||||||
|
"git.pub.solar"
|
||||||
|
"auth.pub.solar"
|
||||||
|
"cloud.pub.solar"
|
||||||
|
"collabora.pub.solar"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
pub-solar.home-assistant = {
|
pub-solar.home-assistant = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
extraComponents = ["androidtv" "fritz" "fritzbox" "fritzbox_callmonitor" "met" "mqtt"];
|
extraComponents = ["androidtv" "brother" "ffmpeg" "fritz" "fritzbox" "fritzbox_callmonitor" "met" "mqtt" "zeroconf"];
|
||||||
extraPackages = python3Packages:
|
extraPackages = python3Packages:
|
||||||
with python3Packages; [
|
with python3Packages; [
|
||||||
# androidtv
|
# androidtv
|
||||||
|
@ -81,19 +81,16 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
default_config = {};
|
||||||
energy = {};
|
energy = {};
|
||||||
frontend = {};
|
|
||||||
history = {};
|
"automation ui" = "!include automations.yaml";
|
||||||
|
|
||||||
map = {};
|
map = {};
|
||||||
my = {};
|
|
||||||
mobile_app = {};
|
mobile_app = {};
|
||||||
network = {};
|
network = {};
|
||||||
notify = {};
|
notify = {};
|
||||||
person = {};
|
person = {};
|
||||||
ssdp = {};
|
|
||||||
sun = {};
|
|
||||||
system_health = {};
|
|
||||||
zeroconf = {};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,16 @@ in
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [ resticListenPort ];
|
networking.firewall.allowedTCPPorts = [ resticListenPort ];
|
||||||
|
|
||||||
|
systemd.mounts = [
|
||||||
|
{
|
||||||
|
what = "/dev/mapper/crypt-backup";
|
||||||
|
where = "/opt/backup/hdd";
|
||||||
|
type = "ext4";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.services."container@backup".unitConfig.RequiresMountsFor = ["/opt/backup/hdd"];
|
||||||
|
|
||||||
containers."backup" = {
|
containers."backup" = {
|
||||||
autoStart = true;
|
autoStart = true;
|
||||||
ephemeral = true;
|
ephemeral = true;
|
||||||
|
@ -52,26 +62,4 @@ in
|
||||||
system.stateVersion = "22.11";
|
system.stateVersion = "22.11";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#virtualisation.oci-containers = {
|
|
||||||
# backend = "docker";
|
|
||||||
# containers = {
|
|
||||||
# backup-ssh = {
|
|
||||||
# image = "linuxserver/openssh-server:arm64v8-latest";
|
|
||||||
# ports = [ "32222:2222" ];
|
|
||||||
#
|
|
||||||
# environment = {
|
|
||||||
# PUBLIC_KEY = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOTpA7OHfZhl1wsbvydLNMtMx4q64fz+ojIAZpVUJEMI root@cube";
|
|
||||||
# USER_NAME = "backup";
|
|
||||||
# TZ = "Europe/Berlin";
|
|
||||||
# PUID = "911";
|
|
||||||
# PGID = "911";
|
|
||||||
# };
|
|
||||||
#
|
|
||||||
# volumes = [
|
|
||||||
# "/opt/backup/hdd/restic:/data/hdd/restic"
|
|
||||||
# ];
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
#};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,9 @@
|
||||||
./backup.nix
|
./backup.nix
|
||||||
./home-controller.nix
|
./home-controller.nix
|
||||||
./paperless.nix
|
./paperless.nix
|
||||||
|
./owntone.nix
|
||||||
|
./jellyfin.nix
|
||||||
|
./photoprism.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
time.timeZone = "Europe/Berlin";
|
time.timeZone = "Europe/Berlin";
|
||||||
|
@ -18,13 +21,46 @@
|
||||||
boot.plymouth.enable = lib.mkForce false;
|
boot.plymouth.enable = lib.mkForce false;
|
||||||
pub-solar.nextcloud.enable = lib.mkForce false;
|
pub-solar.nextcloud.enable = lib.mkForce false;
|
||||||
|
|
||||||
networking.useDHCP = false;
|
networking = {
|
||||||
networking.interfaces.eth0.useDHCP = true;
|
vlans = {
|
||||||
networking.interfaces.wlan0.useDHCP = false;
|
vlan102 = {
|
||||||
|
id = 102;
|
||||||
|
interface = "eth0";
|
||||||
|
}; # iot vlan
|
||||||
|
vlan104 = {
|
||||||
|
id = 104;
|
||||||
|
interface = "eth0";
|
||||||
|
}; # media vlan
|
||||||
|
};
|
||||||
|
interfaces = {
|
||||||
|
eth0 = {
|
||||||
|
useDHCP = true;
|
||||||
|
mtu = 1460;
|
||||||
|
};
|
||||||
|
|
||||||
|
vlan102 = {
|
||||||
|
mtu = 1460;
|
||||||
|
ipv4.addresses = [{
|
||||||
|
address = "172.16.0.12";
|
||||||
|
prefixLength = 24;
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
|
||||||
|
vlan104 = {
|
||||||
|
mtu = 1460;
|
||||||
|
ipv4.addresses = [{
|
||||||
|
address = "10.42.0.12";
|
||||||
|
prefixLength = 24;
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
networking.networkmanager.enable = false;
|
networking.networkmanager.enable = false;
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [3689];
|
networking.firewall = {
|
||||||
networking.firewall.allowedUDPPorts = [1900];
|
allowedUDPPorts = [1900];
|
||||||
|
};
|
||||||
|
|
||||||
virtualisation.podman.enable = true;
|
virtualisation.podman.enable = true;
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = ["xhci_pci" "usbhid" "usb_storage" "uas"];
|
boot.initrd.availableKernelModules = ["xhci_pci" "usbhid" "usb_storage" "uas"];
|
||||||
boot.kernelPackages = pkgs.linuxPackages_6_1;
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
boot.kernelParams = ["usb-storage.quirks=2109:0716:ouw,174c:55aa:u,2109:2813:ouw,2109:0813:ouw"];
|
boot.kernelParams = ["usb-storage.quirks=2109:0716:ouw,174c:55aa:u,2109:2813:ouw,2109:0813:ouw"];
|
||||||
|
|
||||||
boot.loader = {
|
boot.loader = {
|
||||||
|
@ -52,6 +52,19 @@
|
||||||
{device = "/dev/disk/by-label/swap";}
|
{device = "/dev/disk/by-label/swap";}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
hardware = {
|
||||||
|
raspberry-pi."4".apply-overlays-dtmerge.enable = true;
|
||||||
|
deviceTree = {
|
||||||
|
enable = true;
|
||||||
|
filter = "*rpi-4-*.dtb";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
libraspberrypi
|
||||||
|
raspberrypi-eeprom
|
||||||
|
];
|
||||||
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
|
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
|
||||||
powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
|
powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
|
||||||
}
|
}
|
||||||
|
|
41
hosts/cox/jellyfin.nix
Normal file
41
hosts/cox/jellyfin.nix
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
#boot.kernelModules = [ "v4l2loopback" ];
|
||||||
|
#boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
|
||||||
|
|
||||||
|
systemd.mounts = [
|
||||||
|
{
|
||||||
|
what = "/dev/mapper/crypt-media";
|
||||||
|
where = "/opt/media";
|
||||||
|
type = "ext4";
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
what = "/dev/mapper/crypt-movies";
|
||||||
|
where = "/opt/media/media/video/movies";
|
||||||
|
type = "ext4";
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
what = "/dev/mapper/crypt-tvshows";
|
||||||
|
where = "/opt/media/media/video/tv-shows";
|
||||||
|
type = "ext4";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.services.jellyfin.unitConfig.RequiresMountsFor = [
|
||||||
|
"/opt/media"
|
||||||
|
"/opt/media/media/video/movies"
|
||||||
|
"/opt/media/media/video/tv-shows"
|
||||||
|
];
|
||||||
|
|
||||||
|
users.users.jellyfin.extraGroups = [ "video" ];
|
||||||
|
|
||||||
|
environment.systemPackages = [ pkgs.jellyfin-ffmpeg ];
|
||||||
|
|
||||||
|
services.jellyfin = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
};
|
||||||
|
}
|
37
hosts/cox/owntone.nix
Normal file
37
hosts/cox/owntone.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
owntoneConfigDir = "/opt/media/config/owntone";
|
||||||
|
owntoneMusicDir = "/opt/media/media";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
3688 # websocket
|
||||||
|
3689 # http
|
||||||
|
6600 # mpd
|
||||||
|
13988 # airplay
|
||||||
|
13989 # airplay
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.services."podman-owntone".unitConfig.RequiresMountsFor = [
|
||||||
|
owntoneConfigDir
|
||||||
|
owntoneMusicDir
|
||||||
|
];
|
||||||
|
|
||||||
|
virtualisation.oci-containers.containers."owntone" = {
|
||||||
|
image = "linuxserver/daapd";
|
||||||
|
autoStart = true;
|
||||||
|
extraOptions = ["--network=host"];
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
PUID = "1000";
|
||||||
|
PGID = "1000";
|
||||||
|
TZ = "Europe/Berlin";
|
||||||
|
};
|
||||||
|
|
||||||
|
volumes = [
|
||||||
|
"${owntoneConfigDir}:/config"
|
||||||
|
"${owntoneMusicDir}:/music"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
|
@ -3,6 +3,14 @@
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
|
systemd.mounts = [
|
||||||
|
{
|
||||||
|
what = "/dev/mapper/crypt-documents";
|
||||||
|
where = "/opt/documents";
|
||||||
|
type = "ext4";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
pub-solar.paperless = {
|
pub-solar.paperless = {
|
||||||
enable = true;
|
enable = true;
|
||||||
hostStateDir = "/opt/documents/paperless";
|
hostStateDir = "/opt/documents/paperless";
|
||||||
|
|
37
hosts/cox/photoprism.nix
Normal file
37
hosts/cox/photoprism.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
systemd.services.photoprism = {
|
||||||
|
unitConfig.RequiresMountsFor = [ "/opt/media/photoprism" ];
|
||||||
|
serviceConfig = {
|
||||||
|
DynamicUser = lib.mkForce false;
|
||||||
|
User = "photoprism";
|
||||||
|
Group = "photoprism";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx.virtualHosts."cox.lan".locations."/photoprism" = {
|
||||||
|
proxyPass = "http://127.0.0.1:18899";
|
||||||
|
proxyWebsockets = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
users.users.photoprism = {
|
||||||
|
group = "photoprism";
|
||||||
|
isSystemUser = true;
|
||||||
|
};
|
||||||
|
users.groups.photoprism = {};
|
||||||
|
|
||||||
|
services.photoprism = {
|
||||||
|
enable = true;
|
||||||
|
originalsPath = "/opt/media/photoprism/originals";
|
||||||
|
storagePath = "/opt/media/photoprism/data";
|
||||||
|
importPath = "/opt/media/photoprism/import";
|
||||||
|
port = 18899;
|
||||||
|
address = "127.0.0.1";
|
||||||
|
settings = {
|
||||||
|
PHOTOPRISM_DEFAULT_LOCALE = "de";
|
||||||
|
PHOTOPRISM_SITE_URL = "http://cox.lan/photoprism";
|
||||||
|
PHOTOPRISM_TRUSTED_PROXY = "127.0.0.1/8";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -13,7 +13,9 @@ python311.pkgs.buildPythonPackage rec {
|
||||||
pythonImportsCheck = [ "pytest" "flake8" ];
|
pythonImportsCheck = [ "pytest" "flake8" ];
|
||||||
|
|
||||||
propagatedBuildInputs = with python311.pkgs; [
|
propagatedBuildInputs = with python311.pkgs; [
|
||||||
pytest
|
aiodns
|
||||||
|
aiohttp
|
||||||
flake8
|
flake8
|
||||||
|
pytest
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
{ ... }:
|
{ ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
camIp = "10.0.42.31";
|
||||||
|
in
|
||||||
{
|
{
|
||||||
networking.firewall.allowedTCPPorts = [80 5000 8554 8555];
|
networking.firewall.allowedTCPPorts = [80 5000 8554 8555];
|
||||||
|
|
||||||
|
@ -8,11 +11,11 @@
|
||||||
# settings = {
|
# settings = {
|
||||||
# streams = {
|
# streams = {
|
||||||
# burgi_cam = [
|
# burgi_cam = [
|
||||||
# "rtsp://admin:XpkFk5Df912VWSwM@10.0.42.60:554/Streaming/Channels/101/?transportmode=unicast"
|
# "rtsp://admin:XpkFk5Df912VWSwM@${camIp}:554/Streaming/Channels/101/?transportmode=unicast"
|
||||||
# "ffmpeg:burgi_cam_sub#audio=opus"
|
# "ffmpeg:burgi_cam_sub#audio=opus"
|
||||||
# ];
|
# ];
|
||||||
# burgi_cam_sub = [
|
# burgi_cam_sub = [
|
||||||
# "rtsp://admin:XpkFk5Df912VWSwM@10.0.42.60:554/Streaming/Channels/102/?transportmode=unicast"
|
# "rtsp://admin:XpkFk5Df912VWSwM@${camIp}:554/Streaming/Channels/102/?transportmode=unicast"
|
||||||
# ];
|
# ];
|
||||||
# };
|
# };
|
||||||
# webrtc = {
|
# webrtc = {
|
||||||
|
@ -22,14 +25,14 @@
|
||||||
#};
|
#};
|
||||||
|
|
||||||
services.frigate = {
|
services.frigate = {
|
||||||
enable = true;
|
enable = false;
|
||||||
hostname = "frigate";
|
hostname = "frigate";
|
||||||
settings = {
|
settings = {
|
||||||
cameras.burgi = {
|
cameras.burgi = {
|
||||||
ffmpeg = {
|
ffmpeg = {
|
||||||
inputs = [
|
inputs = [
|
||||||
{
|
{
|
||||||
path = "rtsp://admin:XpkFk5Df912VWSwM@10.0.42.60:554/Streaming/Channels/101/?transportmode=unicast";
|
path = "rtsp://admin:XpkFk5Df912VWSwM@${camIp}:554/Streaming/Channels/101/?transportmode=unicast";
|
||||||
#path = "rtsp://127.0.0.1:8554/burgi_cam";
|
#path = "rtsp://127.0.0.1:8554/burgi_cam";
|
||||||
#input_args = "preset-rtsp-restream";
|
#input_args = "preset-rtsp-restream";
|
||||||
roles = [
|
roles = [
|
||||||
|
@ -38,7 +41,7 @@
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
path = "rtsp://admin:XpkFk5Df912VWSwM@10.0.42.60:554/Streaming/Channels/102/?transportmode=unicast";
|
path = "rtsp://admin:XpkFk5Df912VWSwM@${camIp}:554/Streaming/Channels/102/?transportmode=unicast";
|
||||||
#path = "rtsp://127.0.0.1:8554/burgi_cam_sub";
|
#path = "rtsp://127.0.0.1:8554/burgi_cam_sub";
|
||||||
#input_args = "preset-rtsp-restream";
|
#input_args = "preset-rtsp-restream";
|
||||||
roles = [
|
roles = [
|
||||||
|
|
|
@ -13,12 +13,7 @@
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = ["xhci_pci" "usbhid" "usb_storage" "uas"];
|
boot.initrd.availableKernelModules = ["xhci_pci" "usbhid" "usb_storage" "uas"];
|
||||||
boot.initrd.kernelModules = [];
|
|
||||||
boot.kernelModules = [];
|
|
||||||
boot.extraModulePackages = [];
|
|
||||||
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
boot.supportedFilesystems = [];
|
|
||||||
|
|
||||||
boot.loader.grub = {
|
boot.loader.grub = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
58
hosts/giggles/home-assistant-automation-helpers.nix
Normal file
58
hosts/giggles/home-assistant-automation-helpers.nix
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
{
|
||||||
|
action = rec {
|
||||||
|
callService = service: entity: {
|
||||||
|
service = service;
|
||||||
|
target.entity_id = entity;
|
||||||
|
};
|
||||||
|
|
||||||
|
delayed = f: delay: [
|
||||||
|
{delay.seconds = delay;}
|
||||||
|
(f)
|
||||||
|
];
|
||||||
|
|
||||||
|
turnOn = entity: callService "homeassistant.turn_on" entity;
|
||||||
|
turnOff = entity: callService "homeassistant.turn_off" entity;
|
||||||
|
};
|
||||||
|
|
||||||
|
condition = {
|
||||||
|
state = entity: state: {
|
||||||
|
condition = "state";
|
||||||
|
entity_id = entity;
|
||||||
|
state = state;
|
||||||
|
};
|
||||||
|
|
||||||
|
stateNot = entity: state: {
|
||||||
|
condition = "not";
|
||||||
|
conditions = [{
|
||||||
|
condition = "state";
|
||||||
|
entity_id = entity;
|
||||||
|
state = state;
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
trigger = {
|
||||||
|
state = entity: {
|
||||||
|
platform = "state";
|
||||||
|
entity_id = entity;
|
||||||
|
};
|
||||||
|
|
||||||
|
stateFrom = entity: stateFrom: {
|
||||||
|
platform = "state";
|
||||||
|
entity_id = entity;
|
||||||
|
from = stateFrom;
|
||||||
|
};
|
||||||
|
|
||||||
|
stateTo = entity: stateTo: {
|
||||||
|
platform = "state";
|
||||||
|
entity_id = entity;
|
||||||
|
to = stateTo;
|
||||||
|
};
|
||||||
|
|
||||||
|
stateNotTo = entity: stateNotTo: {
|
||||||
|
platform = "state";
|
||||||
|
entity_id = entity;
|
||||||
|
not_to = stateNotTo;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
26
hosts/giggles/home-assistant-customize-vacuum.nix
Normal file
26
hosts/giggles/home-assistant-customize-vacuum.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
let
|
||||||
|
mapSegments = [
|
||||||
|
{id = 1; name = "Hendrik";}
|
||||||
|
{id = 2; name = "Schlafzimmer";}
|
||||||
|
{id = 3; name = "Badezimmer";}
|
||||||
|
{id = 4; name = "Toilette";}
|
||||||
|
{id = 5; name = "Flur";}
|
||||||
|
{id = 6; name = "Vorratsraum";}
|
||||||
|
{id = 7; name = "Küche";}
|
||||||
|
{id = 8; name = "Caro";}
|
||||||
|
{id = 9; name = "Wohnzimmer";}
|
||||||
|
];
|
||||||
|
|
||||||
|
mkCustomize = id: [
|
||||||
|
{
|
||||||
|
name = "input_boolean.vacuum_segment_${toString id}";
|
||||||
|
value = {
|
||||||
|
room_id = id;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
mkCustomizes = ms: builtins.concatMap (s: (mkCustomize s.id)) ms;
|
||||||
|
|
||||||
|
in
|
||||||
|
builtins.listToAttrs (mkCustomizes mapSegments)
|
95
hosts/giggles/home-assistant-package-light.nix
Normal file
95
hosts/giggles/home-assistant-package-light.nix
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
let
|
||||||
|
helper = import ./home-assistant-automation-helpers.nix;
|
||||||
|
|
||||||
|
entityLightSleepingHoursNotBefore = "light_sleeping_hours_not_before";
|
||||||
|
entityLightSleepingHoursNotAfter = "light_sleeping_hours_not_after";
|
||||||
|
entityLightDarkHoursNotBefore = "light_dark_hours_not_before";
|
||||||
|
entityLightDarkHoursNotAfter = "light_dark_hours_not_after";
|
||||||
|
|
||||||
|
conditionalAutomation = slug: triggers: conditions: actions: {
|
||||||
|
alias = "Light: ${slug}";
|
||||||
|
id = "light_automation_${slug}";
|
||||||
|
trigger = triggers;
|
||||||
|
condition = conditions;
|
||||||
|
action = actions;
|
||||||
|
};
|
||||||
|
automation = slug: triggers: actions: (conditionalAutomation slug triggers [] actions);
|
||||||
|
|
||||||
|
lightOnOnMovement = room: opts: (conditionalAutomation
|
||||||
|
"${room}_movement_turn_on"
|
||||||
|
(map (e: helper.trigger.stateTo e "on") opts.triggers)
|
||||||
|
opts.conditions
|
||||||
|
(map (e: helper.action.turnOn e) opts.entities)
|
||||||
|
);
|
||||||
|
|
||||||
|
# switch off light when trigger entity switches to off and all given trigger
|
||||||
|
# entities are not in state "on" (prevents hassle with unavailable state)
|
||||||
|
lightOffAfterMovement = room: opts: (conditionalAutomation
|
||||||
|
"${room}_movement_turn_off"
|
||||||
|
(map (e: helper.trigger.stateTo e "off") opts.triggers)
|
||||||
|
(map (e: helper.condition.stateNot e "on") opts.triggers)
|
||||||
|
(map (e: helper.action.turnOff e) opts.entities)
|
||||||
|
);
|
||||||
|
|
||||||
|
outsideSleepingHoursCondition = [{
|
||||||
|
condition = "not";
|
||||||
|
conditions = [{
|
||||||
|
condition = "time";
|
||||||
|
after = "input_datetime.${entityLightSleepingHoursNotBefore}";
|
||||||
|
before = "input_datetime.${entityLightSleepingHoursNotAfter}";
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
withinDarkHoursCondition = [{
|
||||||
|
condition = "time";
|
||||||
|
after = "input_datetime.${entityLightDarkHoursNotBefore}";
|
||||||
|
before = "input_datetime.${entityLightDarkHoursNotAfter}";
|
||||||
|
}];
|
||||||
|
|
||||||
|
roomEntitiesMap = {
|
||||||
|
# should switch on when its dark outside but not when someone sleeps
|
||||||
|
flur = {
|
||||||
|
triggers = ["binary_sensor.pir_flur_1_occupancy" "binary_sensor.pir_flur_2_occupancy"];
|
||||||
|
entities = ["light.flur_deckenlicht"];
|
||||||
|
conditions = [] ++ withinDarkHoursCondition ++ outsideSleepingHoursCondition;
|
||||||
|
};
|
||||||
|
#kueche = {
|
||||||
|
# triggers = [];
|
||||||
|
# entites = [];
|
||||||
|
# conditions = [] ++ withinDarkHoursCondition;
|
||||||
|
#};
|
||||||
|
# should switch on every time
|
||||||
|
vorratsraum = {
|
||||||
|
triggers = ["binary_sensor.pir_vorratsraum_occupancy"];
|
||||||
|
entities = ["light.vorratsraum_deckenlicht"];
|
||||||
|
conditions = [];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
input_datetime = {
|
||||||
|
"${entityLightDarkHoursNotBefore}" = {
|
||||||
|
name = "TIME Light: Dark hours start not before";
|
||||||
|
has_date = false;
|
||||||
|
has_time = true;
|
||||||
|
};
|
||||||
|
"${entityLightDarkHoursNotAfter}" = {
|
||||||
|
name = "TIME Light: Dark hours start not after";
|
||||||
|
has_date = false;
|
||||||
|
has_time = true;
|
||||||
|
};
|
||||||
|
"${entityLightSleepingHoursNotBefore}" = {
|
||||||
|
name = "TIME Light: Sleeping hours start not before";
|
||||||
|
has_date = false;
|
||||||
|
has_time = true;
|
||||||
|
};
|
||||||
|
"${entityLightSleepingHoursNotAfter}" = {
|
||||||
|
name = "TIME Light: Sleeping hours start not after";
|
||||||
|
has_date = false;
|
||||||
|
has_time = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
automation = [] ++
|
||||||
|
(builtins.attrValues (builtins.mapAttrs (r: o: lightOnOnMovement r o) roomEntitiesMap)) ++
|
||||||
|
(builtins.attrValues (builtins.mapAttrs (r: o: lightOffAfterMovement r o) roomEntitiesMap));
|
||||||
|
}
|
67
hosts/giggles/home-assistant-package-vacuum.nix
Normal file
67
hosts/giggles/home-assistant-package-vacuum.nix
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
let
|
||||||
|
vacuumName = "IdenticalVeneratedCat";
|
||||||
|
entityVacuum = "vacuum.valetudo_identicalveneratedcat";
|
||||||
|
mapSegments = [
|
||||||
|
{id = 1; name = "Hendrik";}
|
||||||
|
{id = 2; name = "Schlafzimmer";}
|
||||||
|
{id = 3; name = "Badezimmer";}
|
||||||
|
{id = 4; name = "Toilette";}
|
||||||
|
{id = 5; name = "Flur";}
|
||||||
|
{id = 6; name = "Vorratsraum";}
|
||||||
|
{id = 7; name = "Küche";}
|
||||||
|
{id = 8; name = "Caro";}
|
||||||
|
{id = 9; name = "Wohnzimmer";}
|
||||||
|
];
|
||||||
|
|
||||||
|
mkBooleanHelper = id: name: [
|
||||||
|
{
|
||||||
|
name = "vacuum_segment_${toString id}";
|
||||||
|
value = {
|
||||||
|
name = name;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
mkBooleanHelpers = ms: builtins.concatMap (s: (mkBooleanHelper s.id s.name)) ms;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
input_boolean = builtins.listToAttrs (mkBooleanHelpers mapSegments);
|
||||||
|
|
||||||
|
group = {
|
||||||
|
vacuum_rooms = {
|
||||||
|
name = "Vacuum Rooms";
|
||||||
|
entities = builtins.concatMap (s: ["input_boolean.vacuum_segment_${toString s.id}"]) mapSegments;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
vacuum_clean_segments = {
|
||||||
|
mode = "single";
|
||||||
|
alias = "vacuum_clean_segments";
|
||||||
|
icon = "mdi:arrow-right";
|
||||||
|
sequence = [{
|
||||||
|
service = "script.turn_on";
|
||||||
|
target = {
|
||||||
|
entity_id = "script.vacuum_clean_segments_message";
|
||||||
|
};
|
||||||
|
data = {
|
||||||
|
variables = {
|
||||||
|
segments = "{{expand(\"group.vacuum_rooms\") | selectattr(\"state\",\"eq\",\"on\") | map(attribute=\"attributes.room_id\") | list | to_json}}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
|
||||||
|
vacuum_clean_segments_message = {
|
||||||
|
alias = "vacuum_clean_segments_message";
|
||||||
|
mode = "single";
|
||||||
|
sequence = [{
|
||||||
|
service = "mqtt.publish";
|
||||||
|
data = {
|
||||||
|
topic = "valetudo/${vacuumName}/MapSegmentationCapability/clean/set";
|
||||||
|
payload_template = ''{"segment_ids": {{segments}}}'';
|
||||||
|
};
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
246
hosts/giggles/home-assistant-package-wohnzimmer-tv.nix
Normal file
246
hosts/giggles/home-assistant-package-wohnzimmer-tv.nix
Normal file
|
@ -0,0 +1,246 @@
|
||||||
|
let
|
||||||
|
helper = import ./home-assistant-automation-helpers.nix;
|
||||||
|
|
||||||
|
entityMediaplayerFireTV = "media_player.wohnzimmer_firetv";
|
||||||
|
entityMediaplayerXBOX = "media_player.wohnzimmer_xbox";
|
||||||
|
entityMediaplayerZeppelin = "media_player.wohnzimmer_zeppelin";
|
||||||
|
|
||||||
|
entitySwitchTV = "switch.wohnzimmer_tv_steckdosenleiste_tv";
|
||||||
|
entitySwitchFireTV = "switch.wohnzimmer_tv_steckdosenleiste_firetv";
|
||||||
|
entitySwitchXBOX = "switch.wohnzimmer_tv_steckdosenleiste_xbox";
|
||||||
|
entitySwitchZeppelin = "switch.wohnzimmer_tv_steckdosenleiste_zeppelin";
|
||||||
|
|
||||||
|
entityActivitySelect = "wohnzimmer_tv_activity";
|
||||||
|
entityVolumeMute = "wohnzimmer_tv_volume_mute";
|
||||||
|
entityVolumeLevel = "wohnzimmer_tv_volume_level";
|
||||||
|
|
||||||
|
entityHarmonyActivitySelect = "select.wohnzimmer_harmony_activities";
|
||||||
|
|
||||||
|
activityOptionOff = "Aus";
|
||||||
|
activityOptionOffHarmony = "power_off";
|
||||||
|
activityOptionMusic = "Musik";
|
||||||
|
activityOptionFireTV = "FireTV";
|
||||||
|
activityOptionXBOX = "XBOX";
|
||||||
|
|
||||||
|
# because of tasmota
|
||||||
|
switchDelaySecondsZeppelin = 1;
|
||||||
|
switchDelaySecondsTV = 2;
|
||||||
|
switchDelaySecondsFireTV = 3;
|
||||||
|
switchDelaySecondsXBOXOn = 4;
|
||||||
|
switchDelaySecondsXBOXOff = 60; # because it needs longer to shut down
|
||||||
|
|
||||||
|
mkAutomationCondition = slug: triggers: conditions: actions: {
|
||||||
|
alias = "Wohnzimmer TV: ${slug}";
|
||||||
|
id = "wohnzimmer_tv_automation_${slug}";
|
||||||
|
trigger = triggers;
|
||||||
|
condition = conditions;
|
||||||
|
action = actions;
|
||||||
|
};
|
||||||
|
mkAutomation = slug: triggers: actions: (mkAutomationCondition slug triggers [] actions);
|
||||||
|
|
||||||
|
rokuButtonPressed = key: {
|
||||||
|
platform = "event";
|
||||||
|
event_type = "roku_command";
|
||||||
|
event_data = {
|
||||||
|
type = "keypress";
|
||||||
|
key = key;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mkRokuVolumeAutomation = key: action: mkAutomation
|
||||||
|
"roku_vol_${action}"
|
||||||
|
[(rokuButtonPressed key)]
|
||||||
|
[(helper.action.callService "input_number.${action}" "input_number.${entityVolumeLevel}")];
|
||||||
|
|
||||||
|
tvSelect = option: {
|
||||||
|
service = "input_select.select_option";
|
||||||
|
target.entity_id = "input_select.${entityActivitySelect}";
|
||||||
|
data.option = option;
|
||||||
|
};
|
||||||
|
|
||||||
|
harmonySelect = option: {
|
||||||
|
service = "select.select_option";
|
||||||
|
target.entity_id = entityHarmonyActivitySelect;
|
||||||
|
data.option = option;
|
||||||
|
};
|
||||||
|
|
||||||
|
tvChangedTo = stateTo: (helper.trigger.stateTo "input_select.${entityActivitySelect}" stateTo);
|
||||||
|
tvChangedNotTo = stateNotTo: (helper.trigger.stateNotTo "input_select.${entityActivitySelect}" stateNotTo);
|
||||||
|
|
||||||
|
harmonyChangedTo = stateTo: (helper.trigger.stateTo entityHarmonyActivitySelect stateTo);
|
||||||
|
harmonyChangedNotTo = stateNotTo: (helper.trigger.stateNotTo entityHarmonyActivitySelect stateNotTo);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
input_boolean = {
|
||||||
|
"${entityVolumeMute}" = {
|
||||||
|
name = "Wohnzimmer TV Mute";
|
||||||
|
icon = "mdi:volume-mute";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
input_number = {
|
||||||
|
"${entityVolumeLevel}" = {
|
||||||
|
name = "Wohnzimmer TV Lautstärke";
|
||||||
|
icon = "mdi:volume-high";
|
||||||
|
unit_of_measurement = "%";
|
||||||
|
min = "0.0";
|
||||||
|
max = "1.0";
|
||||||
|
step = "0.01";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
input_select = {
|
||||||
|
"${entityActivitySelect}" = {
|
||||||
|
name = "Wohnzimmer TV Aktivität";
|
||||||
|
options = [
|
||||||
|
activityOptionOff
|
||||||
|
activityOptionMusic
|
||||||
|
activityOptionFireTV
|
||||||
|
activityOptionXBOX
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
media_player = [
|
||||||
|
{
|
||||||
|
platform = "universal";
|
||||||
|
name = "Wohnzimmer TV Universal";
|
||||||
|
device_class = "tv";
|
||||||
|
unique_id = "media_player_universal_wohnzimmer_tv";
|
||||||
|
|
||||||
|
children = [
|
||||||
|
entityMediaplayerFireTV
|
||||||
|
entityMediaplayerXBOX
|
||||||
|
entityMediaplayerZeppelin
|
||||||
|
];
|
||||||
|
|
||||||
|
active_child_template = ''
|
||||||
|
{% if is_state('input_select.${entityActivitySelect}', '${activityOptionMusic}') %}
|
||||||
|
${entityMediaplayerZeppelin}
|
||||||
|
{% elif is_state('input_select.${entityActivitySelect}', '${activityOptionFireTV}') %}
|
||||||
|
${entityMediaplayerFireTV}
|
||||||
|
{% elif is_state('input_select.${entityActivitySelect}', '${activityOptionXBOX}') %}
|
||||||
|
${entityMediaplayerXBOX}
|
||||||
|
{% endif %}
|
||||||
|
'';
|
||||||
|
state_template = ''
|
||||||
|
{% if is_state('input_select.${entityActivitySelect}', '${activityOptionMusic}') %}
|
||||||
|
{{ states('${entityMediaplayerZeppelin}') }}
|
||||||
|
{% elif is_state('input_select.${entityActivitySelect}', '${activityOptionFireTV}') %}
|
||||||
|
{{ states('${entityMediaplayerFireTV}') }}
|
||||||
|
{% elif is_state('input_select.${entityActivitySelect}', '${activityOptionXBOX}') %}
|
||||||
|
{{ states('${entityMediaplayerXBOX}') }}
|
||||||
|
{% else %}
|
||||||
|
off
|
||||||
|
{% endif %}
|
||||||
|
'';
|
||||||
|
|
||||||
|
commands = {
|
||||||
|
turn_on = tvSelect activityOptionFireTV;
|
||||||
|
turn_off = tvSelect activityOptionOff;
|
||||||
|
volume_set = helper.action.callService "input_number.set_value" "input_number.${entityVolumeLevel}" // {data.value = "{{ volume_level }}";};
|
||||||
|
volume_up = helper.action.callService "input_number.increment" "input_number.${entityVolumeLevel}";
|
||||||
|
volume_down = helper.action.callService "input_number.decrement" "input_number.${entityVolumeLevel}";
|
||||||
|
volume_mute = helper.action.callService "input_boolean.toggle" "input_boolean.${entityVolumeMute}";
|
||||||
|
};
|
||||||
|
|
||||||
|
attributes = {
|
||||||
|
is_volume_muted = "input_boolean.${entityVolumeMute}";
|
||||||
|
volume_level = "input_number.${entityVolumeLevel}";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
automation = [
|
||||||
|
(mkRokuVolumeAutomation "Up" "increment")
|
||||||
|
(mkRokuVolumeAutomation "Down" "decrement")
|
||||||
|
(mkAutomation "roku_vol_mute" [(rokuButtonPressed "Right")] [(helper.action.callService "input_boolean.toggle" "input_boolean.${entityVolumeMute}")])
|
||||||
|
(mkAutomation "sync_off_to_harmony" [(tvChangedTo activityOptionOff)] [(harmonySelect activityOptionOffHarmony)])
|
||||||
|
(mkAutomation "sync_activity_to_harmony" [(tvChangedNotTo activityOptionOff)] [(harmonySelect "{{ trigger.to_state.state }}")])
|
||||||
|
(mkAutomation "sync_off_from_harmony" [(harmonyChangedTo activityOptionOffHarmony)] [(tvSelect activityOptionOff)])
|
||||||
|
(mkAutomation "sync_activity_from_harmony" [(harmonyChangedNotTo activityOptionOffHarmony)] [(tvSelect "{{ trigger.to_state.state }}")])
|
||||||
|
(
|
||||||
|
mkAutomationCondition
|
||||||
|
"set_speaker_volume"
|
||||||
|
[
|
||||||
|
(helper.trigger.state "input_number.${entityVolumeLevel}")
|
||||||
|
(helper.trigger.stateTo "input_boolean.${entityVolumeMute}" "off")
|
||||||
|
(helper.trigger.stateFrom entityMediaplayerZeppelin "unavailable")
|
||||||
|
]
|
||||||
|
[{
|
||||||
|
condition = "state";
|
||||||
|
entity_id = "input_boolean.${entityVolumeMute}";
|
||||||
|
state = "off";
|
||||||
|
}]
|
||||||
|
[(helper.action.callService "media_player.volume_set" entityMediaplayerZeppelin // {data.volume_level = "{{ states(\"input_number.${entityVolumeLevel}\") }}";})]
|
||||||
|
)
|
||||||
|
(
|
||||||
|
mkAutomation
|
||||||
|
"mute_speaker"
|
||||||
|
[(helper.trigger.stateTo "input_boolean.${entityVolumeMute}" "on")]
|
||||||
|
[(helper.action.callService "media_player.volume_set" entityMediaplayerZeppelin // {data.volume_level = "0";})]
|
||||||
|
)
|
||||||
|
(
|
||||||
|
mkAutomation
|
||||||
|
"switch_off_tv"
|
||||||
|
[
|
||||||
|
(tvChangedTo activityOptionOff)
|
||||||
|
(tvChangedTo activityOptionMusic)
|
||||||
|
]
|
||||||
|
(helper.action.delayed (helper.action.turnOff entitySwitchTV) switchDelaySecondsTV)
|
||||||
|
)
|
||||||
|
(
|
||||||
|
mkAutomation
|
||||||
|
"switch_off_firetv"
|
||||||
|
[
|
||||||
|
(tvChangedTo activityOptionOff)
|
||||||
|
(tvChangedTo activityOptionMusic)
|
||||||
|
(tvChangedTo activityOptionXBOX)
|
||||||
|
]
|
||||||
|
(helper.action.delayed (helper.action.turnOff entitySwitchFireTV) switchDelaySecondsFireTV)
|
||||||
|
)
|
||||||
|
(
|
||||||
|
mkAutomation
|
||||||
|
"switch_off_xbox"
|
||||||
|
[
|
||||||
|
(tvChangedTo activityOptionOff)
|
||||||
|
(tvChangedTo activityOptionMusic)
|
||||||
|
(tvChangedTo activityOptionFireTV)
|
||||||
|
]
|
||||||
|
(helper.action.delayed (helper.action.turnOff entitySwitchXBOX) switchDelaySecondsXBOXOff)
|
||||||
|
)
|
||||||
|
(
|
||||||
|
mkAutomation
|
||||||
|
"switch_off_zeppelin"
|
||||||
|
[(tvChangedTo activityOptionOff)]
|
||||||
|
(helper.action.delayed (helper.action.turnOff entitySwitchZeppelin) switchDelaySecondsZeppelin)
|
||||||
|
)
|
||||||
|
(
|
||||||
|
mkAutomation
|
||||||
|
"switch_on_tv"
|
||||||
|
[
|
||||||
|
(tvChangedTo activityOptionFireTV)
|
||||||
|
(tvChangedTo activityOptionXBOX)
|
||||||
|
]
|
||||||
|
(helper.action.delayed (helper.action.turnOn entitySwitchTV) switchDelaySecondsTV)
|
||||||
|
)
|
||||||
|
(
|
||||||
|
mkAutomation
|
||||||
|
"switch_on_firetv"
|
||||||
|
[(tvChangedTo activityOptionFireTV)]
|
||||||
|
(helper.action.delayed (helper.action.turnOn entitySwitchFireTV) switchDelaySecondsFireTV)
|
||||||
|
)
|
||||||
|
(
|
||||||
|
mkAutomation
|
||||||
|
"switch_on_xbox"
|
||||||
|
[(tvChangedTo activityOptionXBOX)]
|
||||||
|
(helper.action.delayed (helper.action.turnOn entitySwitchXBOX) switchDelaySecondsXBOXOn)
|
||||||
|
)
|
||||||
|
(
|
||||||
|
mkAutomation
|
||||||
|
"switch_on_zeppelin"
|
||||||
|
[(tvChangedNotTo activityOptionOff)]
|
||||||
|
(helper.action.delayed (helper.action.turnOn entitySwitchZeppelin) switchDelaySecondsZeppelin)
|
||||||
|
)
|
||||||
|
];
|
||||||
|
}
|
|
@ -4,6 +4,7 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
python3Packages,
|
python3Packages,
|
||||||
inputs,
|
inputs,
|
||||||
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
|
||||||
|
@ -18,6 +19,9 @@
|
||||||
|
|
||||||
users.users."hass".extraGroups = ["dialout"];
|
users.users."hass".extraGroups = ["dialout"];
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPortRanges = [{from = 40000; to = 41000;}];
|
||||||
|
networking.firewall.allowedUDPPortRanges = [{from = 40000; to = 41000;}];
|
||||||
|
|
||||||
pub-solar.home-assistant = {
|
pub-solar.home-assistant = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraComponents = [
|
extraComponents = [
|
||||||
|
@ -27,21 +31,30 @@
|
||||||
|
|
||||||
"apcupsd"
|
"apcupsd"
|
||||||
"androidtv"
|
"androidtv"
|
||||||
|
"androidtv_remote"
|
||||||
"cast"
|
"cast"
|
||||||
"esphome"
|
"esphome"
|
||||||
|
"emulated_hue"
|
||||||
|
"emulated_roku"
|
||||||
|
"harmony"
|
||||||
"homekit_controller"
|
"homekit_controller"
|
||||||
"icloud"
|
"icloud"
|
||||||
"ipp"
|
"ipp"
|
||||||
|
"jellyfin"
|
||||||
"luci"
|
"luci"
|
||||||
"met"
|
"met"
|
||||||
|
"nina"
|
||||||
"python_script"
|
"python_script"
|
||||||
|
"radio_browser"
|
||||||
"rpi_power"
|
"rpi_power"
|
||||||
"shopping_list"
|
"shopping_list"
|
||||||
"spotify"
|
"spotify"
|
||||||
"tasmota"
|
"tasmota"
|
||||||
"unifi"
|
"unifi"
|
||||||
"upnp"
|
"upnp"
|
||||||
|
"wyoming"
|
||||||
"vacuum"
|
"vacuum"
|
||||||
|
"xbox"
|
||||||
"xiaomi_aqara"
|
"xiaomi_aqara"
|
||||||
"xiaomi_miio"
|
"xiaomi_miio"
|
||||||
"zeroconf"
|
"zeroconf"
|
||||||
|
@ -59,14 +72,22 @@
|
||||||
# dwd
|
# dwd
|
||||||
dwdwfsapi
|
dwdwfsapi
|
||||||
|
|
||||||
|
# forecast_solar
|
||||||
|
(callPackage ./forecast-solar.nix {})
|
||||||
|
|
||||||
# hacs
|
# hacs
|
||||||
aiogithubapi
|
aiogithubapi
|
||||||
|
|
||||||
|
# owntone
|
||||||
|
pyatv
|
||||||
|
(callPackage ./pyforked-daapd.nix {})
|
||||||
|
|
||||||
# philips_airpurifier_coap
|
# philips_airpurifier_coap
|
||||||
(callPackage ./aioairctrl.nix {})
|
(callPackage ./aioairctrl.nix {})
|
||||||
|
|
||||||
# totop
|
# totp
|
||||||
pyotp
|
pyotp
|
||||||
|
pyqrcode
|
||||||
];
|
];
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
|
@ -86,7 +107,16 @@
|
||||||
|
|
||||||
external_url = "https://ha2.gssws.de";
|
external_url = "https://ha2.gssws.de";
|
||||||
internal_url = "http://192.168.42.11:8123";
|
internal_url = "http://192.168.42.11:8123";
|
||||||
|
|
||||||
|
packages = {
|
||||||
|
package_light = (import ./home-assistant-package-light.nix);
|
||||||
|
package_vacuum = (import ./home-assistant-package-vacuum.nix);
|
||||||
|
package_wohnzimmer_tv = (import ./home-assistant-package-wohnzimmer-tv.nix);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
customize = (import ./home-assistant-customize-vacuum.nix) // { };
|
||||||
|
};
|
||||||
|
|
||||||
http = {
|
http = {
|
||||||
ip_ban_enabled = false;
|
ip_ban_enabled = false;
|
||||||
use_x_forwarded_for = true;
|
use_x_forwarded_for = true;
|
||||||
|
@ -112,6 +142,31 @@
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
emulated_hue = {
|
||||||
|
host_ip = "172.16.0.11";
|
||||||
|
listen_port = 40000;
|
||||||
|
expose_by_default = false;
|
||||||
|
entities = {
|
||||||
|
"light.light_wohnzimmer_kugel_links" = {
|
||||||
|
name = "Kugel links";
|
||||||
|
};
|
||||||
|
"light.light_wohnzimmer_kugel_rechts" = {
|
||||||
|
name = "Kugel rechts";
|
||||||
|
};
|
||||||
|
"light.light_wohnzimmer_klemmlampe" = {
|
||||||
|
name = "Klemmlampe";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
emulated_roku = {
|
||||||
|
servers = [{
|
||||||
|
name = "Home Assistant";
|
||||||
|
host_ip = "172.16.0.11";
|
||||||
|
listen_port = 40001;
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
|
||||||
python_script = {};
|
python_script = {};
|
||||||
|
|
||||||
waste_collection_schedule = {
|
waste_collection_schedule = {
|
||||||
|
@ -133,7 +188,7 @@
|
||||||
name = "Home";
|
name = "Home";
|
||||||
latitude = "52.31501090166047";
|
latitude = "52.31501090166047";
|
||||||
longitude = "8.910633035293603";
|
longitude = "8.910633035293603";
|
||||||
radius = "30";
|
radius = "50";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "DKSB";
|
name = "DKSB";
|
||||||
|
|
|
@ -1,9 +1,110 @@
|
||||||
{...}: {
|
{...}:
|
||||||
|
|
||||||
|
let
|
||||||
|
vlan101Hosts = [
|
||||||
|
# switches
|
||||||
|
{mac = "28:80:88:72:ae:60"; ip = "10.0.42.15"; hostname = "sw-wohnung";} # statically configured
|
||||||
|
{mac = "28:87:ba:24:6a:2b"; ip = "10.0.42.16"; hostname = "sw-wohnzimmer";} # statically configured
|
||||||
|
|
||||||
|
# access points
|
||||||
|
{mac = "18:e8:29:c6:29:84"; ip = "10.0.42.21"; hostname = "ap-caro";}
|
||||||
|
{mac = "e4:38:83:e7:00:10"; ip = "10.0.42.22"; hostname = "ap-hendrik";}
|
||||||
|
{mac = "e4:38:83:e7:0a:c4"; ip = "10.0.42.23"; hostname = "ap-wohnzimmer";}
|
||||||
|
|
||||||
|
# security devices
|
||||||
|
{mac = "e0:ca:3c:7d:37:5b"; ip = "10.0.42.31"; hostname = "cam-wohnzimmer";}
|
||||||
|
];
|
||||||
|
|
||||||
|
vlan102Hosts = [
|
||||||
|
{mac = "38:1a:52:04:37:d8"; ip = "172.16.0.15"; hostname = "printer";}
|
||||||
|
|
||||||
|
{mac = "3c:e9:0e:87:d2:1c"; ip = "172.16.0.21"; hostname = "nspanel-hendrik";}
|
||||||
|
{mac = "3c:e9:0e:87:ef:d0"; ip = "172.16.0.22"; hostname = "nspanel-schlafzimmer";}
|
||||||
|
{mac = "98:0c:33:fe:3d:a8"; ip = "172.16.0.23"; hostname = "nuki-wohnung";}
|
||||||
|
{mac = "c8:5c:cc:5c:54:06"; ip = "172.16.0.24"; hostname = "presence-wohnzimmer";}
|
||||||
|
{mac = "c8:5c:cc:5c:28:7b"; ip = "172.16.0.25"; hostname = "presence-hendrik";}
|
||||||
|
{mac = "04:78:63:7f:0e:bb"; ip = "172.16.0.26"; hostname = "airpurifier-wohnzimmer";}
|
||||||
|
{mac = "48:e7:29:c1:a3:f0"; ip = "172.16.0.27"; hostname = "nspanel-caro";}
|
||||||
|
{mac = "5c:c5:63:eb:e8:b8"; ip = "172.16.0.28"; hostname = "poffertjes";}
|
||||||
|
{mac = "d0:ba:e4:e7:7d:d5"; ip = "172.16.0.29"; hostname = "airpurifier-hendrik";}
|
||||||
|
{mac = "98:f4:ab:f2:43:98"; ip = "172.16.0.30"; hostname = "shelly1-flur-deckenlicht";}
|
||||||
|
{mac = "a4:cf:12:ba:72:c1"; ip = "172.16.0.31"; hostname = "shelly25-abstellraum";}
|
||||||
|
{mac = "c8:2b:96:11:10:46"; ip = "172.16.0.32"; hostname = "shelly25-badezimmer";}
|
||||||
|
{mac = "24:62:ab:41:06:f2"; ip = "172.16.0.33"; hostname = "tasmota-tv-steckdosenleiste";}
|
||||||
|
{mac = "c8:db:26:0d:4f:f4"; ip = "172.16.0.34"; hostname = "harmonyhub-tv";}
|
||||||
|
];
|
||||||
|
|
||||||
|
vlan104Hosts = [
|
||||||
|
{mac = "30:58:90:1a:3b:ef"; ip = "10.42.0.21"; hostname = "box-hendrik";}
|
||||||
|
{mac = "30:58:90:19:b5:03"; ip = "10.42.0.22"; hostname = "box-schlafzimmer";}
|
||||||
|
{mac = "30:58:90:28:7e:30"; ip = "10.42.0.23"; hostname = "box-esstisch";}
|
||||||
|
|
||||||
|
{mac = "1c:53:f9:23:d7:c4"; ip = "10.42.0.31"; hostname = "nh-hendrik";}
|
||||||
|
{mac = "1c:53:f9:14:7b:65"; ip = "10.42.0.32"; hostname = "nh-kueche";}
|
||||||
|
{mac = "1c:53:f9:1c:9e:22"; ip = "10.42.0.33"; hostname = "nh-wohnzimmer";}
|
||||||
|
{mac = "20:1f:3b:96:9f:29"; ip = "10.42.0.34"; hostname = "nm-schlafzimmer";}
|
||||||
|
{mac = "6c:ad:f8:73:a0:94"; ip = "10.42.0.35"; hostname = "cc-wohnzimmer";}
|
||||||
|
{mac = "ec:66:d1:8a:79:71"; ip = "10.42.0.36"; hostname = "zeppelin-wohnzimmer";}
|
||||||
|
{mac = "c0:91:b9:1e:2b:80"; ip = "10.42.0.37"; hostname = "firetv-wohnzimmer";}
|
||||||
|
{mac = "cc:60:c8:14:26:2c"; ip = "10.42.0.38"; hostname = "xbox-wohnzimmer";}
|
||||||
|
];
|
||||||
|
|
||||||
|
mkDnsmasqHosts = hosts : map (h : "${h.mac},${h.hostname},${h.ip}") hosts;
|
||||||
|
|
||||||
|
mkKeaHosts = hosts : map (h : { hw-address = h.mac; ip-address = h.ip; }) hosts;
|
||||||
|
mkKeaOptions = router: dns: mtu:
|
||||||
|
[
|
||||||
|
{
|
||||||
|
name = "routers";
|
||||||
|
data = "${router}";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "domain-name-servers";
|
||||||
|
data = "${dns}";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "interface-mtu";
|
||||||
|
data = "${toString mtu}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
mkKeaSubnet = interface : subnet : pool : options : hosts : {
|
||||||
|
subnet = subnet;
|
||||||
|
interface = interface;
|
||||||
|
pools = [{ pool = pool; }];
|
||||||
|
option-data = mkKeaOptions options.router options.dns options.mtu;
|
||||||
|
reservations = mkKeaHosts hosts;
|
||||||
|
};
|
||||||
|
|
||||||
|
enableKea = true;
|
||||||
|
enableDnsmasq = false;
|
||||||
|
|
||||||
|
mtu = 1500;
|
||||||
|
in
|
||||||
|
{
|
||||||
networking.firewall.checkReversePath = false;
|
networking.firewall.checkReversePath = false;
|
||||||
networking.firewall.allowedUDPPorts = [67]; # allow dhcp request
|
networking.firewall.allowedUDPPorts = [67]; # allow dhcp request
|
||||||
|
|
||||||
|
services.kea.dhcp4 = {
|
||||||
|
enable = enableKea;
|
||||||
|
settings = {
|
||||||
|
authoritative = true;
|
||||||
|
interfaces-config = {
|
||||||
|
interfaces = ["vlan101" "vlan102" "vlan104"];
|
||||||
|
dhcp-socket-type = "raw";
|
||||||
|
};
|
||||||
|
valid-lifetime = 3600;
|
||||||
|
host-reservation-identifiers = [ "hw-address" ];
|
||||||
|
|
||||||
|
subnet4 = [
|
||||||
|
(mkKeaSubnet "vlan101" "10.0.42.0/24" "10.0.42.100 - 10.0.42.200" {router = "10.0.42.1"; dns = "10.0.42.1"; mtu = mtu;} vlan101Hosts)
|
||||||
|
(mkKeaSubnet "vlan102" "172.16.0.0/24" "172.16.0.100 - 172.16.0.200" {router = "172.16.0.1"; dns = "172.16.0.1"; mtu = mtu;} vlan102Hosts)
|
||||||
|
(mkKeaSubnet "vlan104" "10.42.0.0/24" "10.42.0.100 - 10.42.0.200" {router = "10.42.0.1"; dns = "10.42.0.1"; mtu = mtu;} vlan104Hosts)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
services.dnsmasq = {
|
services.dnsmasq = {
|
||||||
enable = true;
|
enable = enableDnsmasq;
|
||||||
settings = {
|
settings = {
|
||||||
interface = [
|
interface = [
|
||||||
"vlan101" # network
|
"vlan101" # network
|
||||||
|
@ -21,41 +122,9 @@
|
||||||
|
|
||||||
dhcp-authoritative = true;
|
dhcp-authoritative = true;
|
||||||
|
|
||||||
dhcp-host = [
|
dhcp-host = (mkDnsmasqHosts vlan101Hosts) ++
|
||||||
# vlan101
|
(mkDnsmasqHosts vlan102Hosts) ++
|
||||||
"18:e8:29:c6:29:84,ap-caro,10.0.42.21" # ap-caro
|
(mkDnsmasqHosts vlan104Hosts);
|
||||||
"e4:38:83:e7:00:10,ap-hendrik,10.0.42.22" # ap-hendrik
|
|
||||||
"e4:38:83:e7:0a:c4,ap-wohnzimmer,10.0.42.23" # ap-wohnzimmer
|
|
||||||
|
|
||||||
# vlan102
|
|
||||||
"38:1a:52:04:37:d8,printer,172.16.0.15" # printer
|
|
||||||
|
|
||||||
"3c:e9:0e:87:d2:1c,nspanel-hendrik,172.16.0.21" # nspanel_hendrik
|
|
||||||
"3c:e9:0e:87:ef:d0,nspanel-schlafzimmer,172.16.0.22" # nspanel_schlafzimmer
|
|
||||||
"98:0c:33:fe:3d:a8,nuki-wohnung,172.16.0.23" # nuki_wohnung
|
|
||||||
"c8:5c:cc:5c:54:06,presence-wohnzimmer,172.16.0.24" # presence_wohnzimmer
|
|
||||||
"c8:5c:cc:5c:28:7b,presence-hendrik,172.16.0.25" # presence_hendrik
|
|
||||||
"04:78:63:7f:0e:bb,airpurifier-wohnzimmer,172.16.0.26" # airpurifier_wohnzimmer
|
|
||||||
"48:e7:29:c1:a3:f0,nspanel-caro,172.16.0.27" # nspanel_caro
|
|
||||||
"5c:c5:63:eb:e8:b8,poffertjes,172.16.0.28" # poffertjes
|
|
||||||
"d0:ba:e4:e7:7d:d5,airpurifier-hendrik,172.16.0.29" # airpurifier_hendrik
|
|
||||||
"98:f4:ab:f2:43:98,shelly1-flur-deckenlicht,172.16.0.30" # shelly1 flur deckenlicht
|
|
||||||
"a4:cf:12:ba:72:c1,shelly25-abstellraum,172.16.0.31" # shelly25 abstellraum
|
|
||||||
"c8:2b:96:11:10:46,shelly25-badezimmer,172.16.0.32" # shelly25 badezimmer
|
|
||||||
"24:62:ab:41:06:f2,tasmota-tv-steckdosenleiste,172.16.0.33" # tasmota-tv-steckdosenleiste
|
|
||||||
|
|
||||||
# vlan104
|
|
||||||
"30:58:90:1a:3b:ef,box-hendrik,10.42.0.21" # box_hendrik
|
|
||||||
"30:58:90:19:b5:03,box-schlafzimmer,10.42.0.22" # box_schlafzimmer
|
|
||||||
"30:58:90:28:7e:30,box-esstisch,10.42.0.23" # box_esstisch
|
|
||||||
|
|
||||||
"1c:53:f9:23:d7:c4,nh-hendrik,10.42.0.31" # nh_hendrik
|
|
||||||
"1c:53:f9:14:7b:65,nh-kueche,10.42.0.32" # nh_kueche
|
|
||||||
"1c:53:f9:1c:9e:22,nh-wohnzimmer,10.42.0.33" # nh_wohnzimmer
|
|
||||||
"20:1f:3b:96:9f:29,nm-schlafzimmer,10.42.0.34" # nm_schlafzimmer
|
|
||||||
|
|
||||||
"6c:ad:f8:73:a0:94,cc-wohnzimmer,10.42.0.41" # cc_wohnzimmer
|
|
||||||
];
|
|
||||||
|
|
||||||
dhcp-range = [
|
dhcp-range = [
|
||||||
"vlan101,10.0.42.51,10.0.42.100"
|
"vlan101,10.0.42.51,10.0.42.100"
|
||||||
|
@ -65,7 +134,7 @@
|
||||||
|
|
||||||
dhcp-option = [
|
dhcp-option = [
|
||||||
"option:dns-server,1.1.1.1"
|
"option:dns-server,1.1.1.1"
|
||||||
"option:mtu,1460"
|
"option:mtu,${mtu}"
|
||||||
|
|
||||||
# vlan101
|
# vlan101
|
||||||
"vlan101,option:router,10.0.42.1"
|
"vlan101,option:router,10.0.42.1"
|
||||||
|
|
29
hosts/giggles/pyforked-daapd.nix
Normal file
29
hosts/giggles/pyforked-daapd.nix
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{ pkgs, python311 }:
|
||||||
|
|
||||||
|
let
|
||||||
|
pyLibrespotJava = python311.pkgs.buildPythonPackage rec {
|
||||||
|
pname = "pylibrespot-java";
|
||||||
|
version = "0.1.0";
|
||||||
|
src = pkgs.fetchPypi {
|
||||||
|
inherit pname version;
|
||||||
|
sha256 = "DbKPW3mB5IMhj0EqLhQpZ66wGjOGWxhaXM39IjkN/yA=";
|
||||||
|
};
|
||||||
|
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
python311.pkgs.aiohttp
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
python311.pkgs.buildPythonPackage rec {
|
||||||
|
pname = "pyforked-daapd";
|
||||||
|
version = "0.1.14";
|
||||||
|
src = pkgs.fetchPypi {
|
||||||
|
inherit pname version;
|
||||||
|
sha256 = "v1NOlwP8KtBsQiqwbx1y8p8lABEuEJdNhvR2kGzLxKs=";
|
||||||
|
};
|
||||||
|
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
pyLibrespotJava
|
||||||
|
python311.pkgs.aiohttp
|
||||||
|
];
|
||||||
|
}
|
27
hosts/giggles/pyforkeddappd.nix
Normal file
27
hosts/giggles/pyforkeddappd.nix
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{ pkgs, python311 }:
|
||||||
|
let
|
||||||
|
pycryptodomex = python311.pkgs.buildPythonPackage rec {
|
||||||
|
pname = "pycryptodomex";
|
||||||
|
version = "3.18.0";
|
||||||
|
src = pkgs.fetchPypi {
|
||||||
|
inherit pname version;
|
||||||
|
sha256 = "Pj7LX+l558G7ACflGDQKz37mBBXXkpXlJR0Txo3eV24=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
python311.pkgs.buildPythonPackage rec {
|
||||||
|
pname = "aioairctrl";
|
||||||
|
version = "0.2.4";
|
||||||
|
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "kongo09";
|
||||||
|
repo = "aioairctrl";
|
||||||
|
rev = "v${version}";
|
||||||
|
sha256 = "JBXh590wu85ig+LZCgG9S7y9uLOKednFJ/1UfDLz5Fo=";
|
||||||
|
};
|
||||||
|
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
python311.pkgs.aiocoap
|
||||||
|
pycryptodomex
|
||||||
|
];
|
||||||
|
}
|
|
@ -17,6 +17,10 @@
|
||||||
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
|
||||||
|
hardware.bluetooth.enable = true;
|
||||||
|
hardware.bluetooth.powerOnBoot = true;
|
||||||
|
services.blueman.enable = true;
|
||||||
|
|
||||||
boot.initrd.luks.devices."cryptroot" = {
|
boot.initrd.luks.devices."cryptroot" = {
|
||||||
device = "/dev/disk/by-uuid/cdc29f0f-5b18-4ee7-8d38-1f4bac80b1e6";
|
device = "/dev/disk/by-uuid/cdc29f0f-5b18-4ee7-8d38-1f4bac80b1e6";
|
||||||
allowDiscards = true;
|
allowDiscards = true;
|
||||||
|
|
63
modules/concourse-server/default.nix
Normal file
63
modules/concourse-server/default.nix
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
psCfg = config.pub-solar;
|
||||||
|
cfg = config.pub-solar.concourse-server;
|
||||||
|
in {
|
||||||
|
options.pub-solar.concourse-server = {
|
||||||
|
enable = mkOption {
|
||||||
|
description = "Concourse server";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
hostStateDir = mkOption {
|
||||||
|
description = "sets the state directory on host side";
|
||||||
|
default = "/srv/concourse-server/data";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
containers."concourse-server" = {
|
||||||
|
autoStart = true;
|
||||||
|
ephemeral = true;
|
||||||
|
bindMounts."/data" = {
|
||||||
|
hostPath = cfg.hostStateDir;
|
||||||
|
isReadOnly = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
nixpkgs.overlays = [ (self: super: {
|
||||||
|
concourse = self.pkgs.concourse;
|
||||||
|
}) ];
|
||||||
|
|
||||||
|
system.stateVersion = "23.05";
|
||||||
|
|
||||||
|
networking.firewall.enable = false;
|
||||||
|
|
||||||
|
services.postgresql = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.concourse-web = {
|
||||||
|
enable = true;
|
||||||
|
description = "concourse web";
|
||||||
|
unitConfig = {
|
||||||
|
Type = "simple";
|
||||||
|
};
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${pkgs.concourse}/bin/concourse";
|
||||||
|
};
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -20,9 +20,12 @@ in {
|
||||||
port = 8081;
|
port = 8081;
|
||||||
};
|
};
|
||||||
permit_join = false;
|
permit_join = false;
|
||||||
homeassistant = true;
|
homeassistant = {
|
||||||
|
legacy_entity_attributes = false;
|
||||||
|
};
|
||||||
availability = true;
|
availability = true;
|
||||||
advanced = {
|
advanced = {
|
||||||
|
legacy_api = false;
|
||||||
legacy_availability_payload = false;
|
legacy_availability_payload = false;
|
||||||
};
|
};
|
||||||
mqtt = {
|
mqtt = {
|
||||||
|
@ -34,6 +37,9 @@ in {
|
||||||
adapter = mkIf (cfg.adapter != null) cfg.adapter;
|
adapter = mkIf (cfg.adapter != null) cfg.adapter;
|
||||||
};
|
};
|
||||||
groups = "groups.yaml";
|
groups = "groups.yaml";
|
||||||
|
ota = {
|
||||||
|
zigbee_ota_override_index_location = "/var/lib/zigbee2mqtt/index.json";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
nix = {
|
nix = {
|
||||||
# Use default version alias for nix package
|
# Use default version alias for nix package
|
||||||
package = pkgs.nix;
|
package = pkgs.nix;
|
||||||
gc.automatic = true;
|
gc.automatic = lib.mkDefault false;
|
||||||
optimise.automatic = true;
|
optimise.automatic = true;
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
|
|
|
@ -7,7 +7,9 @@ with lib; let
|
||||||
psCfg = config.pub-solar;
|
psCfg = config.pub-solar;
|
||||||
cfg = config.pub-solar.paperless;
|
cfg = config.pub-solar.paperless;
|
||||||
in {
|
in {
|
||||||
config.containers."paperless" = mkIf cfg.enable {
|
systemd.services."container@paperless".unitConfig.RequiresMountsFor = [cfg.hostStateDir];
|
||||||
|
|
||||||
|
containers."paperless" = mkIf cfg.enable {
|
||||||
autoStart = true;
|
autoStart = true;
|
||||||
ephemeral = true;
|
ephemeral = true;
|
||||||
|
|
||||||
|
@ -96,6 +98,8 @@ in {
|
||||||
timerConfig.OnUnitActiveSec = "60min";
|
timerConfig.OnUnitActiveSec = "60min";
|
||||||
wantedBy = ["multi-user.target" "timers.target"];
|
wantedBy = ["multi-user.target" "timers.target"];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
system.stateVersion = "23.05";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,17 +30,16 @@ in {
|
||||||
home-manager = with pkgs;
|
home-manager = with pkgs;
|
||||||
pkgs.lib.setAttrByPath ["users" psCfg.user.name] {
|
pkgs.lib.setAttrByPath ["users" psCfg.user.name] {
|
||||||
home.packages = [
|
home.packages = [
|
||||||
watson
|
blesh
|
||||||
|
exa
|
||||||
|
jump
|
||||||
] ++ lib.optionals (!cfg.lite) [
|
] ++ lib.optionals (!cfg.lite) [
|
||||||
ack
|
ack
|
||||||
asciinema
|
asciinema
|
||||||
bat
|
bat
|
||||||
blesh
|
|
||||||
exa
|
|
||||||
fd
|
fd
|
||||||
gh
|
gh
|
||||||
glow
|
glow
|
||||||
jump
|
|
||||||
(nnn.overrideAttrs (o: {
|
(nnn.overrideAttrs (o: {
|
||||||
patches =
|
patches =
|
||||||
(o.patches or [])
|
(o.patches or [])
|
||||||
|
@ -53,6 +52,11 @@ in {
|
||||||
watson
|
watson
|
||||||
];
|
];
|
||||||
|
|
||||||
|
programs.starship = {
|
||||||
|
enable = true;
|
||||||
|
settings = import ./starship.toml.nix;
|
||||||
|
};
|
||||||
|
|
||||||
programs.bash = import ./bash {
|
programs.bash = import ./bash {
|
||||||
inherit config;
|
inherit config;
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
|
|
|
@ -4,12 +4,9 @@ channels: final: prev: {
|
||||||
inherit
|
inherit
|
||||||
(channels.latest)
|
(channels.latest)
|
||||||
nixd
|
nixd
|
||||||
|
appflowy
|
||||||
docker_24
|
docker_24
|
||||||
;
|
home-assistant
|
||||||
|
|
||||||
inherit
|
|
||||||
(channels.factorio-pr)
|
|
||||||
factorio
|
|
||||||
;
|
;
|
||||||
|
|
||||||
inherit
|
inherit
|
||||||
|
|
|
@ -1,230 +0,0 @@
|
||||||
{
|
|
||||||
"F-Sy-H": {
|
|
||||||
"cargoLocks": null,
|
|
||||||
"extract": null,
|
|
||||||
"name": "F-Sy-H",
|
|
||||||
"passthru": null,
|
|
||||||
"pinned": false,
|
|
||||||
"src": {
|
|
||||||
"deepClone": false,
|
|
||||||
"fetchSubmodules": false,
|
|
||||||
"leaveDotGit": false,
|
|
||||||
"name": null,
|
|
||||||
"owner": "z-shell",
|
|
||||||
"repo": "F-Sy-H",
|
|
||||||
"rev": "81315330ff4eb4bc13b03fe6ec5bbb6fee0f27ac",
|
|
||||||
"sha256": "sha256-2b/O/1SIhKgqHYjwy7yPCEb3EMXgkIvOk+FC4PbuQ8c=",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"version": "81315330ff4eb4bc13b03fe6ec5bbb6fee0f27ac"
|
|
||||||
},
|
|
||||||
"instant-nvim-nvfetcher": {
|
|
||||||
"cargoLocks": null,
|
|
||||||
"extract": null,
|
|
||||||
"name": "instant-nvim-nvfetcher",
|
|
||||||
"passthru": null,
|
|
||||||
"pinned": false,
|
|
||||||
"src": {
|
|
||||||
"deepClone": false,
|
|
||||||
"fetchSubmodules": false,
|
|
||||||
"leaveDotGit": false,
|
|
||||||
"name": null,
|
|
||||||
"owner": "jbyuki",
|
|
||||||
"repo": "instant.nvim",
|
|
||||||
"rev": "294b6d08143b3db8f9db7f606829270149e1a786",
|
|
||||||
"sha256": "sha256-DXJWji/NR8ZCxe014rD51v3EHJHMhRQeOoI3SsY8mR4=",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"version": "294b6d08143b3db8f9db7f606829270149e1a786"
|
|
||||||
},
|
|
||||||
"manix": {
|
|
||||||
"cargoLocks": null,
|
|
||||||
"extract": null,
|
|
||||||
"name": "manix",
|
|
||||||
"passthru": null,
|
|
||||||
"pinned": false,
|
|
||||||
"src": {
|
|
||||||
"deepClone": false,
|
|
||||||
"fetchSubmodules": false,
|
|
||||||
"leaveDotGit": false,
|
|
||||||
"name": null,
|
|
||||||
"owner": "mlvzk",
|
|
||||||
"repo": "manix",
|
|
||||||
"rev": "d08e7ca185445b929f097f8bfb1243a8ef3e10e4",
|
|
||||||
"sha256": "sha256-GqPuYscLhkR5E2HnSFV4R48hCWvtM3C++3zlJhiK/aw=",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"version": "d08e7ca185445b929f097f8bfb1243a8ef3e10e4"
|
|
||||||
},
|
|
||||||
"ohmyzsh": {
|
|
||||||
"cargoLocks": null,
|
|
||||||
"extract": null,
|
|
||||||
"name": "ohmyzsh",
|
|
||||||
"passthru": null,
|
|
||||||
"pinned": false,
|
|
||||||
"src": {
|
|
||||||
"deepClone": false,
|
|
||||||
"fetchSubmodules": false,
|
|
||||||
"leaveDotGit": false,
|
|
||||||
"name": null,
|
|
||||||
"owner": "ohmyzsh",
|
|
||||||
"repo": "ohmyzsh",
|
|
||||||
"rev": "4181e8a2cc936bc7b7a89d674bf261023159ed35",
|
|
||||||
"sha256": "sha256-kne/2ErEqUqBx1xzQrvk6scrhOZYJDlUnNOlx0MbqNQ=",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"version": "4181e8a2cc936bc7b7a89d674bf261023159ed35"
|
|
||||||
},
|
|
||||||
"powerlevel10k": {
|
|
||||||
"cargoLocks": null,
|
|
||||||
"extract": null,
|
|
||||||
"name": "powerlevel10k",
|
|
||||||
"passthru": null,
|
|
||||||
"pinned": false,
|
|
||||||
"src": {
|
|
||||||
"deepClone": false,
|
|
||||||
"fetchSubmodules": false,
|
|
||||||
"leaveDotGit": false,
|
|
||||||
"name": null,
|
|
||||||
"owner": "romkatv",
|
|
||||||
"repo": "powerlevel10k",
|
|
||||||
"rev": "35165798a83e2e4f2f0aa6c820e2f7fba23e0179",
|
|
||||||
"sha256": "sha256-tThgRiE0iZH84yTSGtNxfFemLocbg71McAKyT7YWG8U=",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"version": "35165798a83e2e4f2f0aa6c820e2f7fba23e0179"
|
|
||||||
},
|
|
||||||
"rnix-lsp-nvfetcher": {
|
|
||||||
"cargoLocks": null,
|
|
||||||
"extract": null,
|
|
||||||
"name": "rnix-lsp-nvfetcher",
|
|
||||||
"passthru": null,
|
|
||||||
"pinned": false,
|
|
||||||
"src": {
|
|
||||||
"deepClone": false,
|
|
||||||
"fetchSubmodules": false,
|
|
||||||
"leaveDotGit": false,
|
|
||||||
"name": null,
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "rnix-lsp",
|
|
||||||
"rev": "95d40673fe43642e2e1144341e86d0036abd95d9",
|
|
||||||
"sha256": "sha256-F0s0m62S5bHNVWNHLZD6SeHiLrsDx98VQbRjDyIu+qQ=",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"version": "95d40673fe43642e2e1144341e86d0036abd95d9"
|
|
||||||
},
|
|
||||||
"vim-apprentice-nvfetcher": {
|
|
||||||
"cargoLocks": null,
|
|
||||||
"extract": null,
|
|
||||||
"name": "vim-apprentice-nvfetcher",
|
|
||||||
"passthru": null,
|
|
||||||
"pinned": false,
|
|
||||||
"src": {
|
|
||||||
"deepClone": false,
|
|
||||||
"fetchSubmodules": false,
|
|
||||||
"leaveDotGit": false,
|
|
||||||
"name": null,
|
|
||||||
"owner": "romainl",
|
|
||||||
"repo": "Apprentice",
|
|
||||||
"rev": "9942d0bb0a5d82f7a24450b00051c1f2cc008659",
|
|
||||||
"sha256": "sha256-Xs+vTdnihNbBFPOKsW+NB40pqN9eaadqzc0DIeNoOFo=",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"version": "9942d0bb0a5d82f7a24450b00051c1f2cc008659"
|
|
||||||
},
|
|
||||||
"vim-beautify-nvfetcher": {
|
|
||||||
"cargoLocks": null,
|
|
||||||
"extract": null,
|
|
||||||
"name": "vim-beautify-nvfetcher",
|
|
||||||
"passthru": null,
|
|
||||||
"pinned": false,
|
|
||||||
"src": {
|
|
||||||
"deepClone": false,
|
|
||||||
"fetchSubmodules": false,
|
|
||||||
"leaveDotGit": false,
|
|
||||||
"name": null,
|
|
||||||
"owner": "zeekay",
|
|
||||||
"repo": "vim-beautify",
|
|
||||||
"rev": "e0691483927dc5a0c051433602397419f9628623",
|
|
||||||
"sha256": "sha256-QPTCl6KaGcAjTS5yVDov9yxmv0fDaFoPLMsrtVIG6GQ=",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"version": "e0691483927dc5a0c051433602397419f9628623"
|
|
||||||
},
|
|
||||||
"vim-caddyfile-nvfetcher": {
|
|
||||||
"cargoLocks": null,
|
|
||||||
"extract": null,
|
|
||||||
"name": "vim-caddyfile-nvfetcher",
|
|
||||||
"passthru": null,
|
|
||||||
"pinned": false,
|
|
||||||
"src": {
|
|
||||||
"deepClone": false,
|
|
||||||
"fetchSubmodules": false,
|
|
||||||
"leaveDotGit": false,
|
|
||||||
"name": null,
|
|
||||||
"owner": "isobit",
|
|
||||||
"repo": "vim-caddyfile",
|
|
||||||
"rev": "24fe0720551883e407cb70ae1d7c03f162d1d5a0",
|
|
||||||
"sha256": "sha256-rRYv3vnt31g7hNTxttTD6BWdv5JJ+ko3rPNyDUEOZ9o=",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"version": "24fe0720551883e407cb70ae1d7c03f162d1d5a0"
|
|
||||||
},
|
|
||||||
"vim-workspace-nvfetcher": {
|
|
||||||
"cargoLocks": null,
|
|
||||||
"extract": null,
|
|
||||||
"name": "vim-workspace-nvfetcher",
|
|
||||||
"passthru": null,
|
|
||||||
"pinned": false,
|
|
||||||
"src": {
|
|
||||||
"deepClone": false,
|
|
||||||
"fetchSubmodules": false,
|
|
||||||
"leaveDotGit": false,
|
|
||||||
"name": null,
|
|
||||||
"owner": "thaerkh",
|
|
||||||
"repo": "vim-workspace",
|
|
||||||
"rev": "c26b473f9b073f24bacecd38477f44c5cd1f5a62",
|
|
||||||
"sha256": "sha256-XV7opLyfkHIDO0+JJaO/x0za0gsHuklrzapTGdLHJmI=",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"version": "c26b473f9b073f24bacecd38477f44c5cd1f5a62"
|
|
||||||
},
|
|
||||||
"vimagit-nvfetcher": {
|
|
||||||
"cargoLocks": null,
|
|
||||||
"extract": null,
|
|
||||||
"name": "vimagit-nvfetcher",
|
|
||||||
"passthru": null,
|
|
||||||
"pinned": false,
|
|
||||||
"src": {
|
|
||||||
"deepClone": false,
|
|
||||||
"fetchSubmodules": false,
|
|
||||||
"leaveDotGit": false,
|
|
||||||
"name": null,
|
|
||||||
"owner": "jreybert",
|
|
||||||
"repo": "vimagit",
|
|
||||||
"rev": "308650ddc1e9a94e49fae0ea04bbc1c45f23d4c4",
|
|
||||||
"sha256": "sha256-fhazQQqyFaO0fdoeNI9nBshwTDhKNHH262H/QThtuO0=",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"version": "308650ddc1e9a94e49fae0ea04bbc1c45f23d4c4"
|
|
||||||
},
|
|
||||||
"zsh-nix-shell": {
|
|
||||||
"cargoLocks": null,
|
|
||||||
"extract": null,
|
|
||||||
"name": "zsh-nix-shell",
|
|
||||||
"passthru": null,
|
|
||||||
"pinned": false,
|
|
||||||
"src": {
|
|
||||||
"deepClone": false,
|
|
||||||
"fetchSubmodules": false,
|
|
||||||
"leaveDotGit": false,
|
|
||||||
"name": null,
|
|
||||||
"owner": "chisui",
|
|
||||||
"repo": "zsh-nix-shell",
|
|
||||||
"rev": "af6f8a266ea1875b9a3e86e14796cadbe1cfbf08",
|
|
||||||
"sha256": "sha256-BjgMhILEL/qdgfno4LR64LSB8n9pC9R+gG7IQWwgyfQ=",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"version": "af6f8a266ea1875b9a3e86e14796cadbe1cfbf08"
|
|
||||||
}
|
|
||||||
}
|
|
21
pkgs/concourse.nix
Normal file
21
pkgs/concourse.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
self:
|
||||||
|
with self;
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "concourse";
|
||||||
|
version = "7.10.0";
|
||||||
|
buildInputs = [
|
||||||
|
];
|
||||||
|
|
||||||
|
src = fetchTarball {
|
||||||
|
inherit version;
|
||||||
|
url = "https://github.com/concourse/concourse/releases/download/v${version}/concourse-${version}-linux-amd64.tgz";
|
||||||
|
sha256 = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
phases = ["installPhase"];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin/
|
||||||
|
cp concourse/bin/* $out/bin/
|
||||||
|
'';
|
||||||
|
}
|
|
@ -3,6 +3,7 @@ with final; {
|
||||||
# keep sources this first
|
# keep sources this first
|
||||||
sources = prev.callPackage (import ./_sources/generated.nix) {};
|
sources = prev.callPackage (import ./_sources/generated.nix) {};
|
||||||
# then, call packages with `final.callPackage`
|
# then, call packages with `final.callPackage`
|
||||||
|
concourse = import ./concourse.nix final;
|
||||||
import-gtk-settings = writeShellScriptBin "import-gtk-settings" (import ./import-gtk-settings.nix final);
|
import-gtk-settings = writeShellScriptBin "import-gtk-settings" (import ./import-gtk-settings.nix final);
|
||||||
lgcl = writeShellScriptBin "lgcl" (import ./lgcl.nix final);
|
lgcl = writeShellScriptBin "lgcl" (import ./lgcl.nix final);
|
||||||
mailto-mutt = writeShellScriptBin "mailto-mutt" (import ./mailto-mutt.nix final);
|
mailto-mutt = writeShellScriptBin "mailto-mutt" (import ./mailto-mutt.nix final);
|
||||||
|
|
13
secrets/chonk_garage_rpc_secret.age
Normal file
13
secrets/chonk_garage_rpc_secret.age
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 hPyiJw Ip6mcFDyrPdGZiXZp8J7bDruJSvTIElf8ligYZ70YG4
|
||||||
|
Hc4GfqP7pPaodrM7fmjNWI/eD8fa2FoS1VbhmTxOYjw
|
||||||
|
-> ssh-ed25519 YFSOsg XakKNGSkB1fsaWZvqblI9fmsTXofW5T29yrcvuWclBc
|
||||||
|
NksfMfA2D6GgfSoTQoj7BRXhf+sqLKVxFWljWg72XiQ
|
||||||
|
-> ssh-ed25519 iHV63A axHU3NCfQrxbQKlpL0D1uUCZ9ovKNnABYwzl2MPqhlw
|
||||||
|
AKVkfejM49H+kD7ZPB6gUOyhA4OeGgovFo9tvt1x4hc
|
||||||
|
-> ssh-ed25519 Oya/Zw U8OGXSvciVRupv1h5z/OjJbVQYMdQKW5H18S0U0rFhw
|
||||||
|
y2C5ZesGsbhx/KJhf/Km+x26yL7FJFl/dRPos3a6arU
|
||||||
|
-> cZ"-grease r2$$~# V=
|
||||||
|
v8RbfnzpQyQVco6u2TW/ijXnk9CWUrs4nPCi
|
||||||
|
--- dXdYdEVGow044KgF/hW+D8oPRrct/87hsntZQI+J4es
|
||||||
|
ö3ZzIAƒ<41>Il‡w¾6änuh«_—ÿ§–+;<3B>r«³ê®:˜äidD1ó‚þÏö<C38F>2«<32>©ÄLÛýã–<C3A3>Y–î¤àÜÎ~AšðLê»ø…”Çžƒ˜íTê<54>Ê
|
Binary file not shown.
|
@ -58,6 +58,8 @@ in {
|
||||||
"chonk_authelia_storage_encryption_key.age".publicKeys = users ++ [system_chonk];
|
"chonk_authelia_storage_encryption_key.age".publicKeys = users ++ [system_chonk];
|
||||||
"chonk_authelia_jwt_secret.age".publicKeys = users ++ [system_chonk];
|
"chonk_authelia_jwt_secret.age".publicKeys = users ++ [system_chonk];
|
||||||
|
|
||||||
|
"chonk_garage_rpc_secret.age".publicKeys = users ++ [system_chonk];
|
||||||
|
|
||||||
"home_controller_ringo_wireguard_key.age".publicKeys = users ++ [system_ringo];
|
"home_controller_ringo_wireguard_key.age".publicKeys = users ++ [system_ringo];
|
||||||
|
|
||||||
"home_controller_k3s_server_token.age".publicKeys = users ++ systems_home_controller;
|
"home_controller_k3s_server_token.age".publicKeys = users ++ systems_home_controller;
|
||||||
|
|
|
@ -48,7 +48,7 @@ in {
|
||||||
thunderbird
|
thunderbird
|
||||||
wdisplays
|
wdisplays
|
||||||
|
|
||||||
gnucash
|
appflowy
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue