From 9620ca8ca32d987ee6d4f5e182219dc84123d472 Mon Sep 17 00:00:00 2001 From: Andrea Ciceri Date: Sun, 9 Jun 2024 09:08:17 +0200 Subject: [PATCH] Things --- flake.lock | 418 ++++++++++++++++++-------- flake.nix | 1 + hmModules/hyprland/default.nix | 5 +- hmModules/zmkbatx/default.nix | 22 ++ hosts/default.nix | 1 + hosts/kirk/default.nix | 1 + hosts/picard/default.nix | 1 + hosts/sisko/default.nix | 1 + modules/cloudflare-dyndns/default.nix | 1 + modules/docker/default.nix | 3 +- modules/immich/default.nix | 284 ++++++++++++----- modules/immich/env | 5 + modules/rock5b-proxy/default.nix | 12 + 13 files changed, 546 insertions(+), 209 deletions(-) create mode 100644 hmModules/zmkbatx/default.nix create mode 100644 modules/immich/env diff --git a/flake.lock b/flake.lock index 984c858..e004543 100644 --- a/flake.lock +++ b/flake.lock @@ -21,17 +21,40 @@ "type": "github" } }, + "arion": { + "inputs": { + "flake-parts": "flake-parts", + "haskell-flake": "haskell-flake", + "hercules-ci-effects": "hercules-ci-effects", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1717555938, + "narHash": "sha256-sVsJ48fKnIylxXbAIsdTJixkUxA8p2WvYRlyfo0KQos=", + "owner": "hercules-ci", + "repo": "arion", + "rev": "c24c185e67f093298a081900b49ca18716077dec", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "arion", + "type": "github" + } + }, "ccrEmacs": { "inputs": { "emacs-overlay": "emacs-overlay", "extra-package-agenix-el": "extra-package-agenix-el", "extra-package-combobulate": "extra-package-combobulate", "extra-package-copilot": "extra-package-copilot", + "extra-package-gptel": "extra-package-gptel", "extra-package-indent-bars": "extra-package-indent-bars", + "extra-package-meow-tree-sitter": "extra-package-meow-tree-sitter", "extra-package-nix-ts-mode": "extra-package-nix-ts-mode", "extra-package-notmuch-notify": "extra-package-notmuch-notify", - "flake-parts": "flake-parts", - "hercules-ci-effects": "hercules-ci-effects", + "flake-parts": "flake-parts_3", + "hercules-ci-effects": "hercules-ci-effects_2", "nixpkgs": [ "ccrEmacs", "emacs-overlay", @@ -39,11 +62,11 @@ ] }, "locked": { - "lastModified": 1717093617, - "narHash": "sha256-zpw6Ur5TqZYGYwBLOrte9iCrDVm5Pu4vGzKcUQEe9yA=", + "lastModified": 1717454527, + "narHash": "sha256-KGaaRoFqX1NqezntI9+UjXl5rxPAgo19yc0sShTaX44=", "ref": "refs/heads/master", - "rev": "4995f3359120cc7dd03264d040a68077bc6923c2", - "revCount": 185, + "rev": "c31fac25cbff26580b5252cde7e96a5364c71b28", + "revCount": 187, "type": "git", "url": "https://git.aciceri.dev/aciceri/emacs.git" }, @@ -81,11 +104,11 @@ ] }, "locked": { - "lastModified": 1717032306, - "narHash": "sha256-s3Sis+M1qTSVIehHrEKBzHBpqprIFJli5V6WojkJnYE=", + "lastModified": 1717637172, + "narHash": "sha256-geTO9YL1V9zYGxupuZvKFWxh6II9sH2bjI1dmEVhVYQ=", "owner": "nix-community", "repo": "disko", - "rev": "8ea5bcccc03111bdedaeaae9380dfab61e9deb33", + "rev": "713aa3df481782719aed4d8c20ad31a9effe3564", "type": "github" }, "original": { @@ -96,16 +119,16 @@ }, "dream2nix": { "inputs": { - "nixpkgs": "nixpkgs_4", + "nixpkgs": "nixpkgs_5", "purescript-overlay": "purescript-overlay", "pyproject-nix": "pyproject-nix" }, "locked": { - "lastModified": 1717007857, - "narHash": "sha256-t6xfbAYZThN0vfGCjc+LilP/ge3XGwcOv93Q/EUVtpk=", + "lastModified": 1717698889, + "narHash": "sha256-swGwCk6dYho//Dj/cwHRhRNmlA3AzDzvju9qQSKDD7E=", "owner": "nix-community", "repo": "dream2nix", - "rev": "d1b56f7a62f9a0719b24d385cbf1c424e56343dd", + "rev": "fe259847bc936ca53897313ee893847f5da1980c", "type": "github" }, "original": { @@ -117,7 +140,7 @@ "emacs-overlay": { "inputs": { "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_3", "nixpkgs-stable": "nixpkgs-stable" }, "locked": { @@ -182,6 +205,22 @@ "type": "github" } }, + "extra-package-gptel": { + "flake": false, + "locked": { + "lastModified": 1716768306, + "narHash": "sha256-7tgBSPZDxW0RDUqJpJn9849iS4yeQtchNPk7CSbblk0=", + "owner": "karthink", + "repo": "gptel", + "rev": "c0603cb973d160f3e450a0dec49dc5ae948f614c", + "type": "github" + }, + "original": { + "owner": "karthink", + "repo": "gptel", + "type": "github" + } + }, "extra-package-indent-bars": { "flake": false, "locked": { @@ -198,6 +237,22 @@ "type": "github" } }, + "extra-package-meow-tree-sitter": { + "flake": false, + "locked": { + "lastModified": 1717451530, + "narHash": "sha256-hke2CGOY8x43snrr6bDY+SnQjgRLSMcmWfA1oItXAeE=", + "owner": "skissue", + "repo": "meow-tree-sitter", + "rev": "c23a499abac797b64bc458f370237a1d6b140a2e", + "type": "github" + }, + "original": { + "owner": "skissue", + "repo": "meow-tree-sitter", + "type": "github" + } + }, "extra-package-nix-ts-mode": { "flake": false, "locked": { @@ -264,6 +319,84 @@ } }, "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "arion", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1717285511, + "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_10": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_5" + }, + "locked": { + "lastModified": 1714606777, + "narHash": "sha256-bMkNmAXLj8iyTvxaaD/StcLSadbj1chPcJOjtuVnLmA=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "4d34ce6412bc450b1d4208c953dc97c7fc764f1a", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_11": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_6" + }, + "locked": { + "lastModified": 1678379998, + "narHash": "sha256-TZdfNqftHhDuIFwBcN9MUThx5sQXCTeZk9je5byPKRw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "c13d60b89adea3dc20704c045ec4d50dd964d447", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "arion", + "hercules-ci-effects", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-parts_3": { "inputs": { "nixpkgs-lib": "nixpkgs-lib" }, @@ -281,7 +414,7 @@ "type": "github" } }, - "flake-parts_2": { + "flake-parts_4": { "inputs": { "nixpkgs-lib": [ "ccrEmacs", @@ -302,7 +435,7 @@ "type": "indirect" } }, - "flake-parts_3": { + "flake-parts_5": { "inputs": { "nixpkgs-lib": [ "hercules-ci-agent", @@ -323,7 +456,7 @@ "type": "github" } }, - "flake-parts_4": { + "flake-parts_6": { "inputs": { "nixpkgs-lib": [ "hercules-ci-effects", @@ -343,7 +476,7 @@ "type": "indirect" } }, - "flake-parts_5": { + "flake-parts_7": { "inputs": { "nixpkgs-lib": "nixpkgs-lib_3" }, @@ -361,7 +494,7 @@ "type": "github" } }, - "flake-parts_6": { + "flake-parts_8": { "inputs": { "nixpkgs-lib": "nixpkgs-lib_4" }, @@ -379,7 +512,7 @@ "type": "github" } }, - "flake-parts_7": { + "flake-parts_9": { "inputs": { "nixpkgs-lib": [ "nixThePlanet", @@ -400,42 +533,6 @@ "type": "indirect" } }, - "flake-parts_8": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib_5" - }, - "locked": { - "lastModified": 1714606777, - "narHash": "sha256-bMkNmAXLj8iyTvxaaD/StcLSadbj1chPcJOjtuVnLmA=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "4d34ce6412bc450b1d4208c953dc97c7fc764f1a", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_9": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib_6" - }, - "locked": { - "lastModified": 1678379998, - "narHash": "sha256-TZdfNqftHhDuIFwBcN9MUThx5sQXCTeZk9je5byPKRw=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "c13d60b89adea3dc20704c045ec4d50dd964d447", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, "flake-root": { "locked": { "lastModified": 1713493429, @@ -492,11 +589,11 @@ "nixpkgs-lib": "nixpkgs-lib_2" }, "locked": { - "lastModified": 1715865404, - "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=", + "lastModified": 1717285511, + "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9", + "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8", "type": "github" }, "original": { @@ -542,6 +639,22 @@ } }, "haskell-flake": { + "locked": { + "lastModified": 1675296942, + "narHash": "sha256-u1X1sblozi5qYEcLp1hxcyo8FfDHnRUVX3dJ/tW19jY=", + "owner": "srid", + "repo": "haskell-flake", + "rev": "c2cafce9d57bfca41794dc3b99c593155006c71e", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "0.1.0", + "repo": "haskell-flake", + "type": "github" + } + }, + "haskell-flake_2": { "locked": { "lastModified": 1684780604, "narHash": "sha256-2uMZsewmRn7rRtAnnQNw1lj0uZBMh4m6Cs/7dV5YF08=", @@ -559,9 +672,9 @@ }, "hercules-ci-agent": { "inputs": { - "flake-parts": "flake-parts_3", - "haskell-flake": "haskell-flake", - "nixpkgs": "nixpkgs_5" + "flake-parts": "flake-parts_5", + "haskell-flake": "haskell-flake_2", + "nixpkgs": "nixpkgs_6" }, "locked": { "lastModified": 1716205561, @@ -580,7 +693,10 @@ "hercules-ci-effects": { "inputs": { "flake-parts": "flake-parts_2", - "nixpkgs": "nixpkgs_3" + "nixpkgs": [ + "arion", + "nixpkgs" + ] }, "locked": { "lastModified": 1713898448, @@ -599,7 +715,7 @@ "hercules-ci-effects_2": { "inputs": { "flake-parts": "flake-parts_4", - "nixpkgs": "nixpkgs_6" + "nixpkgs": "nixpkgs_4" }, "locked": { "lastModified": 1713898448, @@ -617,8 +733,27 @@ }, "hercules-ci-effects_3": { "inputs": { - "flake-parts": "flake-parts_7", - "nixpkgs": "nixpkgs_8" + "flake-parts": "flake-parts_6", + "nixpkgs": "nixpkgs_7" + }, + "locked": { + "lastModified": 1713898448, + "narHash": "sha256-6q6ojsp/Z9P2goqnxyfCSzFOD92T3Uobmj8oVAicUOs=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "c0302ec12d569532a6b6bd218f698bc402e93adc", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hercules-ci-effects_4": { + "inputs": { + "flake-parts": "flake-parts_9", + "nixpkgs": "nixpkgs_9" }, "locked": { "lastModified": 1701009247, @@ -683,11 +818,11 @@ ] }, "locked": { - "lastModified": 1717052710, - "narHash": "sha256-LRhOxzXmOza5SymhOgnEzA8EAQp+94kkeUYWKKpLJ/U=", + "lastModified": 1717525419, + "narHash": "sha256-5z2422pzWnPXHgq2ms8lcCfttM0dz+hg+x1pCcNkAws=", "owner": "nix-community", "repo": "home-manager", - "rev": "29c69d9a466e41d46fd3a7a9d0591ef9c113c2ae", + "rev": "a7117efb3725e6197dd95424136f79147aa35e5b", "type": "github" }, "original": { @@ -737,11 +872,11 @@ "lix": { "flake": false, "locked": { - "lastModified": 1717081103, - "narHash": "sha256-4hrY8lIK6boX0xe6LN+OFpsmOAITl0Iam17FC8Kjslk=", + "lastModified": 1717712512, + "narHash": "sha256-7FN+kCa3+nb3eLnbmw0Hp96zxzXkofb379OZxEA0pAE=", "ref": "refs/heads/main", - "rev": "c161687b5fa6e7604e99ee5df2e73388952baafb", - "revCount": 15698, + "rev": "ec768df0046659e75974919f5923661a29ff52c9", + "revCount": 15735, "type": "git", "url": "https://git@git.lix.systems/lix-project/lix" }, @@ -762,11 +897,11 @@ ] }, "locked": { - "lastModified": 1717036776, - "narHash": "sha256-joKTxvywYlKspGGKOIXho6oRbggOPyayEqAyuZCavO0=", + "lastModified": 1717647344, + "narHash": "sha256-m8XYt8NU2T4gvkien7H7LFGXHhSA5z4tHOeuXQ3DJi4=", "ref": "refs/heads/main", - "rev": "b4b38e6b5fe18da9464f291ae5fbf2ea9acb9ccb", - "revCount": 86, + "rev": "4e25f1ab68f2270f9cff59216056c21073db0164", + "revCount": 87, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -793,7 +928,7 @@ }, "nix-fast-build": { "inputs": { - "flake-parts": "flake-parts_5", + "flake-parts": "flake-parts_7", "nixpkgs": [ "nixpkgsUnstable" ], @@ -840,7 +975,7 @@ "inputs": { "home-manager": "home-manager_2", "nix-formatter-pack": "nix-formatter-pack", - "nixpkgs": "nixpkgs_7", + "nixpkgs": "nixpkgs_8", "nixpkgs-docs": "nixpkgs-docs", "nixpkgs-for-bootstrap": "nixpkgs-for-bootstrap", "nmd": "nmd_2" @@ -881,8 +1016,8 @@ }, "nixThePlanet": { "inputs": { - "flake-parts": "flake-parts_6", - "hercules-ci-effects": "hercules-ci-effects_3", + "flake-parts": "flake-parts_8", + "hercules-ci-effects": "hercules-ci-effects_4", "nixpkgs": [ "nixpkgsUnstable" ], @@ -905,16 +1040,16 @@ }, "nixd": { "inputs": { - "flake-parts": "flake-parts_8", + "flake-parts": "flake-parts_10", "flake-root": "flake-root", - "nixpkgs": "nixpkgs_9" + "nixpkgs": "nixpkgs_10" }, "locked": { - "lastModified": 1716987714, - "narHash": "sha256-FglBDXCnvPihd3Uw1YNQKIcGasWPFwV26FrhMFfGc7o=", + "lastModified": 1717293270, + "narHash": "sha256-twDibXDWwmySk6C/hFUpeBewB5heSyCDDHWOAeRSp40=", "owner": "nix-community", "repo": "nixd", - "rev": "2d37fb2ce35e432d4b4a23f12d74ec7078eb32f4", + "rev": "be5ad5ec113595e2900e6391a08cf0e4784a9cfe", "type": "github" }, "original": { @@ -925,11 +1060,11 @@ }, "nixosHardware": { "locked": { - "lastModified": 1716987116, - "narHash": "sha256-uuEkErFVsFdg2K0cKbNQ9JlFSAm/xYqPr4rbPLI91Y8=", + "lastModified": 1717574423, + "narHash": "sha256-cz3P5MZffAHwL2IQaNzsqUBsJS+u0J/AAwArHMAcCa0=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "8251761f93d6f5b91cee45ac09edb6e382641009", + "rev": "d6c6cf6f5fead4057d8fb2d5f30aa8ac1727f177", "type": "github" }, "original": { @@ -1022,14 +1157,14 @@ }, "nixpkgs-lib_2": { "locked": { - "lastModified": 1714640452, - "narHash": "sha256-QBx10+k6JWz6u7VsohfSw8g8hjdBZEf8CFzXH1/1Z94=", + "lastModified": 1717284937, + "narHash": "sha256-lIbdfCsf8LMFloheeE6N31+BMIeixqyQWbSr2vk79EQ=", "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz" + "url": "https://github.com/NixOS/nixpkgs/archive/eb9ceca17df2ea50a250b6b27f7bf6ab0186f198.tar.gz" }, "original": { "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/50eb7ecf4cd0a5756d7275c8ba36790e5bd53e33.tar.gz" + "url": "https://github.com/NixOS/nixpkgs/archive/eb9ceca17df2ea50a250b6b27f7bf6ab0186f198.tar.gz" } }, "nixpkgs-lib_3": { @@ -1116,11 +1251,11 @@ }, "nixpkgsStable": { "locked": { - "lastModified": 1716633019, - "narHash": "sha256-xim1b5/HZYbWaZKyI7cn9TJCM6ewNVZnesRr00mXeS4=", + "lastModified": 1717530100, + "narHash": "sha256-b4Dn+PnrZoVZ/BoR9JN2fTxXxplJrAsdSUIePf4Cacs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9d29cd266cebf80234c98dd0b87256b6be0af44e", + "rev": "a2e1d0414259a144ebdc048408a807e69e0565af", "type": "github" }, "original": { @@ -1132,11 +1267,11 @@ }, "nixpkgsUnstable": { "locked": { - "lastModified": 1716948383, - "narHash": "sha256-SzDKxseEcHR5KzPXLwsemyTR/kaM9whxeiJohbL04rs=", + "lastModified": 1717602782, + "narHash": "sha256-pL9jeus5QpX5R+9rsp3hhZ+uplVHscNJh8n8VpqscM0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ad57eef4ef0659193044870c731987a6df5cf56b", + "rev": "e8057b67ebf307f01bdcc8fba94d94f75039d1f6", "type": "github" }, "original": { @@ -1163,6 +1298,22 @@ } }, "nixpkgs_10": { + "locked": { + "lastModified": 1714562304, + "narHash": "sha256-Mr3U37Rh6tH0FbaDFu0aZDwk9mPAe7ASaqDOGgLqqLU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bcd44e224fd68ce7d269b4f44d24c2220fd821e7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { "locked": { "lastModified": 1678470307, "narHash": "sha256-OEeMUr3ueLIXyW/OaFUX5jUdimyQwMg/7e+/Q0gC/QE=", @@ -1179,6 +1330,22 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1717196966, + "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { "locked": { "lastModified": 1714253743, "narHash": "sha256-mdTQw2XlariysyScCv2tTE45QSU9v/ezLcHJ22f0Nxc=", @@ -1194,7 +1361,7 @@ "type": "github" } }, - "nixpkgs_3": { + "nixpkgs_4": { "locked": { "lastModified": 1713714899, "narHash": "sha256-+z/XjO3QJs5rLE5UOf015gdVauVRQd2vZtsFkaXBq2Y=", @@ -1210,13 +1377,13 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_5": { "locked": { - "lastModified": 1716914467, - "narHash": "sha256-KkT6YM/yNQqirtYj/frn6RRakliB8RDvGqVGGaNhdcU=", + "lastModified": 1717646450, + "narHash": "sha256-KE+UmfSVk5PG8jdKdclPVcMrUB8yVZHbsjo7ZT1Bm3c=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4a3fc4cf736b7d2d288d7a8bf775ac8d4c0920b4", + "rev": "818dbe2f96df233d2041739d6079bb616d3e5597", "type": "github" }, "original": { @@ -1226,7 +1393,7 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_6": { "locked": { "lastModified": 1715534503, "narHash": "sha256-5ZSVkFadZbFP1THataCaSf0JH2cAH3S29hU9rrxTEqk=", @@ -1242,7 +1409,7 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_7": { "locked": { "lastModified": 1713714899, "narHash": "sha256-+z/XjO3QJs5rLE5UOf015gdVauVRQd2vZtsFkaXBq2Y=", @@ -1258,7 +1425,7 @@ "type": "github" } }, - "nixpkgs_7": { + "nixpkgs_8": { "locked": { "lastModified": 1708172716, "narHash": "sha256-3M94oln0b61m3dUmLyECCA9hYAHXZEszM4saE3CmQO4=", @@ -1273,7 +1440,7 @@ "type": "github" } }, - "nixpkgs_8": { + "nixpkgs_9": { "locked": { "lastModified": 1697723726, "narHash": "sha256-SaTWPkI8a5xSHX/rrKzUe+/uVNy6zCGMXgoeMb7T9rg=", @@ -1289,22 +1456,6 @@ "type": "github" } }, - "nixpkgs_9": { - "locked": { - "lastModified": 1714562304, - "narHash": "sha256-Mr3U37Rh6tH0FbaDFu0aZDwk9mPAe7ASaqDOGgLqqLU=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "bcd44e224fd68ce7d269b4f44d24c2220fd821e7", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nmd": { "flake": false, "locked": { @@ -1419,11 +1570,11 @@ ] }, "locked": { - "lastModified": 1716213921, - "narHash": "sha256-xrsYFST8ij4QWaV6HEokCUNIZLjjLP1bYC60K8XiBVA=", + "lastModified": 1717664902, + "narHash": "sha256-7XfBuLULizXjXfBYy/VV+SpYMHreNRHk9nKMsm1bgb4=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "0e8fcc54b842ad8428c9e705cb5994eaf05c26a0", + "rev": "cc4d466cb1254af050ff7bdf47f6d404a7c646d1", "type": "github" }, "original": { @@ -1474,9 +1625,9 @@ "rock5b": { "inputs": { "fan-control": "fan-control", - "flake-parts": "flake-parts_9", + "flake-parts": "flake-parts_11", "kernel-src": "kernel-src", - "nixpkgs": "nixpkgs_10", + "nixpkgs": "nixpkgs_11", "nixpkgs-kernel": "nixpkgs-kernel", "panfork": "panfork", "tow-boot": "tow-boot", @@ -1499,12 +1650,13 @@ "root": { "inputs": { "agenix": "agenix", + "arion": "arion", "ccrEmacs": "ccrEmacs", "disko": "disko", "dream2nix": "dream2nix", "flakeParts": "flakeParts", "hercules-ci-agent": "hercules-ci-agent", - "hercules-ci-effects": "hercules-ci-effects_2", + "hercules-ci-effects": "hercules-ci-effects_3", "homeManager": "homeManager", "homeManagerGitWorkspace": "homeManagerGitWorkspace", "lix": "lix", @@ -1674,11 +1826,11 @@ ] }, "locked": { - "lastModified": 1717078125, - "narHash": "sha256-V68CsekhPCF6Oz84t2FHY5jin4smKrmsS208Xw057zs=", + "lastModified": 1717278143, + "narHash": "sha256-u10aDdYrpiGOLoxzY/mJ9llST9yO8Q7K/UlROoNxzDw=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "52b66cade760e93276146eb057122b8011ab9057", + "rev": "3eb96ca1ae9edf792a8e0963cc92fddfa5a87706", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 946d223..3f4cc1d 100644 --- a/flake.nix +++ b/flake.nix @@ -66,6 +66,7 @@ url = "github:NixOS/mobile-nixos"; flake = false; }; + arion.url = "github:hercules-ci/arion"; }; outputs = inputs @ {flakeParts, ...}: diff --git a/hmModules/hyprland/default.nix b/hmModules/hyprland/default.nix index d944654..c973adf 100644 --- a/hmModules/hyprland/default.nix +++ b/hmModules/hyprland/default.nix @@ -26,8 +26,9 @@ in { ../waybar ../swayidle ../gammastep - ../wezterm + # ../wezterm ../wayvnc + ../swaync ../foot ]; @@ -108,7 +109,7 @@ in { windowrulev2 = float, title:^(floating)$ bind = $mod, b, exec, firefox - bind = $mod, t, exec, ${lib.getExe config.programs.wezterm.package} + bind = $mod, t, exec, foot bind = $mod, RETURN, exec, emacsclient -c --eval "(ccr/start-eshell)" bind = $mod, x, exec, emacsclient -c bind = $mod SHIFT, n, exec, emacsclient --eval '(ccr/org-capture "n")' -c -F '((name . "floating"))' diff --git a/hmModules/zmkbatx/default.nix b/hmModules/zmkbatx/default.nix new file mode 100644 index 0000000..3c6b6ec --- /dev/null +++ b/hmModules/zmkbatx/default.nix @@ -0,0 +1,22 @@ +{ + pkgs, + lib, + ... +}: { + home.packages = [pkgs.zmkBATx]; + + systemd.user.services.zmkBATx = { + Install.WantedBy = ["graphical-session.target"]; + + Unit = { + Description = "zmkBATx"; + PartOf = ["graphical-session.target"]; + }; + + Service = { + ExecStart = lib.getExe pkgs.zmkBATx; + Restart = "on-failure"; + RestartSec = 3; + }; + }; +} diff --git a/hosts/default.nix b/hosts/default.nix index ded8674..c42de37 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -159,6 +159,7 @@ }; extraModules = with inputs; [ disko.nixosModules.disko + arion.nixosModules.arion # lix-module.nixosModules.default # inputs.hercules-ci-agent.nixosModules.agent-service; # rock5b.nixosModules.default diff --git a/hosts/kirk/default.nix b/hosts/kirk/default.nix index 98d65c3..dc8c107 100644 --- a/hosts/kirk/default.nix +++ b/hosts/kirk/default.nix @@ -32,6 +32,7 @@ "syncthing" "mount-rock5b" "adb" + "calibre" ] ++ [ ./disko.nix diff --git a/hosts/picard/default.nix b/hosts/picard/default.nix index 6f840ed..ad5af03 100644 --- a/hosts/picard/default.nix +++ b/hosts/picard/default.nix @@ -55,6 +55,7 @@ "helix" "shell" "element" + "zmkbatx" "emacs" "firefox" "gpg" diff --git a/hosts/sisko/default.nix b/hosts/sisko/default.nix index 78d5d88..cdb4d00 100644 --- a/hosts/sisko/default.nix +++ b/hosts/sisko/default.nix @@ -28,6 +28,7 @@ # "matrix" "forgejo" # "jellyfin" + "immich" ] ++ [ ./disko.nix diff --git a/modules/cloudflare-dyndns/default.nix b/modules/cloudflare-dyndns/default.nix index a0f8443..0e6be46 100644 --- a/modules/cloudflare-dyndns/default.nix +++ b/modules/cloudflare-dyndns/default.nix @@ -15,6 +15,7 @@ "matrix.aciceri.dev" "syncv3.matrix.aciceri.dev" "jellyfin.aciceri.dev" + "photos.aciceri.dev" ]; apiTokenFile = config.age.secrets.cloudflare-dyndns-api-token.path; }; diff --git a/modules/docker/default.nix b/modules/docker/default.nix index 70feed8..b49ba1d 100644 --- a/modules/docker/default.nix +++ b/modules/docker/default.nix @@ -4,8 +4,7 @@ ... }: { virtualisation.podman.enable = true; - virtualisation.docker.enable = true; - users.users.${config.ccr.username}.extraGroups = ["docker"]; + # virtualisation.docker.enable = true; environment.systemPackages = with pkgs; [ docker-compose podman-compose diff --git a/modules/immich/default.nix b/modules/immich/default.nix index c632f0d..54e0a9f 100644 --- a/modules/immich/default.nix +++ b/modules/immich/default.nix @@ -1,81 +1,221 @@ -{ - config, - fleetFlake, - pkgs, - lib, - ... -}: let - typesenseApiKeyFile = pkgs.writeText "typesense-api-key" "12318551487654187654"; # api key not ime, stolen from upstram PR - pkgsImmich = fleetFlake.inputs.nixpkgsImmich.legacyPackages.${pkgs.system}.extend (final: prev: { - python = prev.python.override { - packageOverrides = final: prev: { - insightface = prev.insightface.overrideAttrs (_: { - pythonCatchConflictsPhase = ""; - }); - }; - }; - }); +# { lib, pkgs, config, ... }: +# let +# immichRoot = "/mnt/hd/immich"; +# immichData = "${immichRoot}/data"; +# # immichVersion = "v1.105.1"; +# immichVersion = "v1.105.1"; +# sharedEnv = { +# # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables +# # The location where your uploaded files are stored +# UPLOAD_LOCATION="./library"; +# DB_DATA_LOCATION="./postgres"; +# IMMICH_VERSION=immichVersion; +# DB_PASSWORD="postgres"; +# DB_USERNAME="postgres"; +# DB_DATABASE_NAME="immich"; +# DB_HOSTNAME="postgres"; +# REDIS_HOSTNAME = "redis"; +# }; +# postgresRoot = "${immichRoot}/pgsql"; +# machineLearning = "${immichRoot}/ml-cache"; +# in { +# systemd.tmpfiles.rules = [ +# "d ${immichRoot} 770 ccr wheel" +# "d ${immichData} 770 ccr wheel" +# "d ${postgresRoot} 770 ccr wheel" +# "d ${machineLearning} 770 ccr wheel" +# ]; +# virtualisation.docker.enable = lib.mkForce false; +# virtualisation.podman.enable = lib.mkForce true; +# virtualisation.podman.dockerSocket.enable = lib.mkForce true; +# virtualisation.podman.defaultNetwork.settings.dns_enabled = lib.mkForce true; +# networking.firewall.interfaces."podman+".allowedUDPPorts = [53 5353]; +# environment.systemPackages = [ +# pkgs.arion +# ]; +# virtualisation.arion = { +# backend = lib.mkForce "podman-socket"; +# projects.immich = { +# serviceName = "immich"; +# settings = { +# project.name = "immich"; +# networks.default = { +# name = "immich"; +# }; +# services = { +# "server" = { +# service = { +# image = "ghcr.io/immich-app/immich-server:${immichVersion}"; +# container_name = "server"; +# command = ["start.sh" "immich"]; +# environment = sharedEnv // { +# # NODE_ENV = "production"; +# }; +# ports = [ +# "2283:3001" +# ]; +# volumes = [ +# "${immichData}:/usr/src/app/upload:rw" +# "/etc/localtime:/etc/localtime:ro" +# ]; +# depends_on = ["redis" "postgres"]; +# restart = "always"; +# }; +# }; +# "microservices" = { +# service = { +# image = "ghcr.io/immich-app/immich-server:${immichVersion}"; +# container_name = "microservices"; +# command = ["start.sh" "microservices"]; +# environment = sharedEnv; +# volumes = ["${immichData}:/usr/src/app/upload:rw"]; +# depends_on = ["redis" "postgres"]; +# restart = "always"; +# }; +# }; +# "machine_learning" = { +# service = { +# image = "ghcr.io/immich-app/immich-machine-learning:${immichVersion}"; +# container_name = "machine_learning"; +# volumes = [ +# "${machineLearning}:/cache" +# ]; +# restart = "always"; +# environment = sharedEnv // { +# # NODE_ENV = "production"; +# }; +# }; +# }; +# "redis" = { +# service = { +# image = "docker.io/redis:6.2-alpine"; +# container_name = "redis"; +# restart = "always"; +# tmpfs = ["/data"]; +# }; +# }; +# "postgres" = { +# service = { +# image = "docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0"; +# container_name = "postgres"; +# volumes = [ +# "${postgresRoot}:/var/lib/postgresql/data" +# ]; +# restart = "always"; +# environment = { +# POSTGRES_PASSWORD = sharedEnv.DB_PASSWORD; +# POSTGRES_USER = sharedEnv.DB_USERNAME; +# POSTGRES_DB = sharedEnv.DB_DATABASE_NAME; +# POSTGRES_INITDB_ARGS = "--data-checksums"; +# }; +# }; +# }; +# }; +# }; +# }; +# }; +# } +{config, ...}: let + immichHost = "immich.example.com"; # TODO: put your immich domain name here + + immichRoot = "/mnt/hd/immich"; # TODO: Tweak these to your desired storage locations + immichPhotos = "${immichRoot}/photos"; + immichAppdataRoot = "${immichRoot}/appdata"; + immichVersion = "release"; + # immichExternalVolume1 = "/tank/BackupData/Google Photos/someone@example.com"; # TODO: if external volumes are desired + + postgresRoot = "${immichAppdataRoot}/pgsql"; + postgresPassword = "immich"; # TODO: put a random password here + postgresUser = "immich"; + postgresDb = "immich"; in { - imports = ["${fleetFlake.inputs.nixpkgsImmich}/nixos/modules/services/web-apps/immich.nix"]; + # The primary source for this configuration is the recommended docker-compose installation of immich from + # https://immich.app/docs/install/docker-compose, which linkes to: + # - https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml + # - https://github.com/immich-app/immich/releases/latest/download/example.env + # and has been transposed into nixos configuration here. Those upstream files should probably be checked + # for serious changes if there are any upgrade problems here. + # + # After initial deployment, these in-process configurations need to be done: + # - create an admin user by accessing the site + # - login with the admin user + # - set the "Machine Learning Settings" > "URL" to http://immich_machine_learning:3003 - services.immich = { - package = pkgsImmich.immich; - enable = true; - server.mediaDir = "/mnt/hd/immich"; - server.typesense.apiKeyFile = typesenseApiKeyFile; + virtualisation.oci-containers.containers.immich_server = { + image = "ghcr.io/immich-app/immich-server:${immichVersion}"; + ports = ["127.0.0.1:2283:3001"]; + extraOptions = [ + "--pull=newer" + # Force DNS resolution to only be the podman dnsname name server; by default podman provides a resolv.conf + # that includes both this server and the upstream system server, causing resolutions of other pod names + # to be inconsistent. + "--dns=10.88.0.1" + ]; + cmd = ["start.sh" "immich"]; + environment = { + IMMICH_VERSION = immichVersion; + DB_HOSTNAME = "immich_postgres"; + DB_USERNAME = postgresUser; + DB_DATABASE_NAME = postgresDb; + DB_PASSWORD = postgresPassword; + REDIS_HOSTNAME = "immich_redis"; + }; + volumes = [ + "${immichPhotos}:/usr/src/app/upload" + "/etc/localtime:/etc/localtime:ro" + # "${immichExternalVolume1}:${immichExternalVolume1}:ro" + ]; }; - services.typesense = { - enable = true; - # In a real setup you should generate an api key for immich - # and not use the admin key! - apiKeyFile = typesenseApiKeyFile; - settings.server.api-address = "127.0.0.1"; + virtualisation.oci-containers.containers.immich_microservices = { + image = "ghcr.io/immich-app/immich-server:${immichVersion}"; + extraOptions = [ + "--pull=newer" + # Force DNS resolution to only be the podman dnsname name server; by default podman provides a resolv.conf + # that includes both this server and the upstream system server, causing resolutions of other pod names + # to be inconsistent. + "--dns=10.88.0.1" + ]; + cmd = ["start.sh" "microservices"]; + environment = { + IMMICH_VERSION = immichVersion; + DB_HOSTNAME = "immich_postgres"; + DB_USERNAME = postgresUser; + DB_DATABASE_NAME = postgresDb; + DB_PASSWORD = postgresPassword; + REDIS_HOSTNAME = "immich_redis"; + }; + volumes = [ + "${immichPhotos}:/usr/src/app/upload" + "/etc/localtime:/etc/localtime:ro" + # "${immichExternalVolume}1:${immichExternalVolume1}:ro" + ]; }; - systemd.tmpfiles.rules = [ - "d /mnt/hd/immich 770 immich immich" - ]; + virtualisation.oci-containers.containers.immich_machine_learning = { + image = "ghcr.io/immich-app/immich-machine-learning:${immichVersion}"; + extraOptions = ["--pull=newer"]; + environment = { + IMMICH_VERSION = immichVersion; + }; + volumes = [ + "${immichAppdataRoot}/model-cache:/cache" + ]; + }; - # networking.firewall.allowedTCPPorts = [8080]; - # virtualisation.oci-containers.containers.immich = { - # image = "ghcr.io/imagegenius/immich:latest"; - # extraOptions = ["--network=host"]; - # volumes = [ - # "/mnt/immich/photos:/photos" - # "/mnt/immich/config:/config" - # ]; - # environment = { - # PUID=builtins.toString config.users.users.ccr.uid; - # PGID=builtins.toString config.users.groups.wheel.gid; - # TZ="Europe/Rome"; - # DB_HOSTNAME="localhost"; - # DB_USERNAME="postgres"; - # DB_PASSWORD="postgres"; - # DB_DATABASE_NAME="immich"; - # DB_PORT="54320"; - # REDIS_HOSTNAME="localhost"; - # DISABLE_MACHINE_LEARNING="false"; - # DISABLE_TYPESENSE="false"; - # }; - # }; + virtualisation.oci-containers.containers.immich_redis = { + image = "redis:6.2-alpine@sha256:80cc8518800438c684a53ed829c621c94afd1087aaeb59b0d4343ed3e7bcf6c5"; + }; - # virtualisation.oci-containers.containers.immich-redis = { - # image = "redis"; - # extraOptions = ["--network=host"]; - # }; - - # virtualisation.oci-containers.containers.immich-postgres = { - # image = "postgres:14"; - # extraOptions = ["--network=host"]; - # environment = { - # POSTGRES_USER = "postgres"; - # POSTGRES_PASSWORD = "postgres"; - # POSTGRES_DB = "immich"; - # PGPORT = "54320"; - # }; - # volumes = [ - # "/mnt/immich/postgres:/var/lib/postgresql/data" - # ]; - # }; + virtualisation.oci-containers.containers.immich_postgres = { + image = "tensorchord/pgvecto-rs:pg14-v0.1.11"; + environment = { + POSTGRES_PASSWORD = postgresPassword; + POSTGRES_USER = postgresUser; + POSTGRES_DB = postgresDb; + }; + volumes = [ + "${postgresRoot}:/var/lib/postgresql/data" + ]; + }; } diff --git a/modules/immich/env b/modules/immich/env new file mode 100644 index 0000000..5c8b109 --- /dev/null +++ b/modules/immich/env @@ -0,0 +1,5 @@ +PUBLIC_LOGIN_PAGE_MESSAGE= + +IMMICH_WEB_URL=http://immich-web:3000 +IMMICH_SERVER_URL=http://immich-server:3001 +IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003 \ No newline at end of file diff --git a/modules/rock5b-proxy/default.nix b/modules/rock5b-proxy/default.nix index 38416f0..1906a71 100644 --- a/modules/rock5b-proxy/default.nix +++ b/modules/rock5b-proxy/default.nix @@ -35,6 +35,18 @@ proxyPass = "http://localhost:${builtins.toString config.services.invidious.port}"; }; }; + "photos.aciceri.dev" = { + extraConfig = '' + client_max_body_size 50000M; + ''; + forceSSL = true; + enableACME = true; + locations."/" = { + proxyPass = "http://localhost:2283"; + proxyWebsockets = true; + }; + }; + # "jellyfin.aciceri.dev" = { # forceSSL = true; # enableACME = true;