Compare commits
4 Commits
a966a47714
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
| b9db20d45c | |||
| d8f2392f80 | |||
| be9f5bccf6 | |||
| 27c8db6b29 |
Generated
+168
-153
@@ -20,11 +20,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787400831,
|
||||
"narHash": "sha256-H3MEkFDZf+UH+QrVgW8TdKrssPFltF8fBg/rh0J1zIc=",
|
||||
"lastModified": 1791041429,
|
||||
"narHash": "sha256-Y/Q4JtMo6nHB6XS1LPSfK7Y4AnuNl9jci/5sCps1MRc=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "aquamarine",
|
||||
"rev": "7ce889cb78b97979b83a4648509fc3ef405c3286",
|
||||
"rev": "52ea11f06dd492f34b3cc0b39a9c805beecafcff",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -40,17 +40,17 @@
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779123398,
|
||||
"narHash": "sha256-8KYQSisso0bn8Z/S3+lunu3sFsMGhf2QXKu+yEWOP7k=",
|
||||
"owner": "LichHunter",
|
||||
"repo": "backlog",
|
||||
"rev": "59507ca9f242950d45d2a6e4d3c10385869344ca",
|
||||
"type": "github"
|
||||
"lastModified": 1787939266,
|
||||
"narHash": "sha256-daj/t7zeuD8XObNPyR1MAw5SziY8t031oenYC5lsyBY=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "41d18d88aaba1146d09cbe1decd60dcadb8e192e",
|
||||
"revCount": 33,
|
||||
"type": "git",
|
||||
"url": "https://gitea.susano-homelab.duckdns.org/fujin/backlog.git"
|
||||
},
|
||||
"original": {
|
||||
"owner": "LichHunter",
|
||||
"repo": "backlog",
|
||||
"type": "github"
|
||||
"type": "git",
|
||||
"url": "https://gitea.susano-homelab.duckdns.org/fujin/backlog.git"
|
||||
}
|
||||
},
|
||||
"base16": {
|
||||
@@ -127,11 +127,11 @@
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787524125,
|
||||
"narHash": "sha256-P48TOQdIbB0PKMn4FTk6X0utbf0LemNlJ+bFcSbveGA=",
|
||||
"lastModified": 1791505570,
|
||||
"narHash": "sha256-2yRQ87dNTVr1kauBR6PTlfw7hnm90MAL0ObpA05xOTU=",
|
||||
"owner": "9001",
|
||||
"repo": "copyparty",
|
||||
"rev": "9de090265f8d063056320f41d984830839017a2f",
|
||||
"rev": "0dc1cb329120743ca85599ba3fba24849f137677",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -147,11 +147,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1781152676,
|
||||
"narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=",
|
||||
"lastModified": 1789770686,
|
||||
"narHash": "sha256-uZkBR7yHdIKUFB5SZdfgh1qkGfI3XmYmI/lTiquxbck=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1",
|
||||
"rev": "725ea35e410ad83be4931d1bff7e090eacaf3563",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -166,11 +166,11 @@
|
||||
"nixpkgs-stable": "nixpkgs-stable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787564076,
|
||||
"narHash": "sha256-yITCfZXd+Reb3PZ/B9JxG8X4LkkF2hsF6p6uxbJVLf4=",
|
||||
"lastModified": 1791694748,
|
||||
"narHash": "sha256-EuKPk2ArrYaFRw5zfSOtuR3qJDONkU+tKSUIQHpK0nA=",
|
||||
"owner": "nix-community",
|
||||
"repo": "emacs-overlay",
|
||||
"rev": "b205eac5a0b18e797ed9efbba3572137dbc8c2a4",
|
||||
"rev": "383b1adaf66e95ef5976068ebc3d55ec13009b7b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -233,11 +233,11 @@
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777988971,
|
||||
"narHash": "sha256-qIoWPDs+0/8JecyYgE3gpKQxW/4bLW/gp45vow9ioCQ=",
|
||||
"lastModified": 1787559586,
|
||||
"narHash": "sha256-onL0VLf9vPllmT0H/OlURIU5r5t5WIEl7t4tVNKT0Nw=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "0678d8986be1661af6bb555f3489f2fdfc31f6ff",
|
||||
"rev": "9d0d87172c374f89da73c1cfe6d81ae62feac1f1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -337,15 +337,14 @@
|
||||
"git-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"gitignore": "gitignore",
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776796298,
|
||||
"narHash": "sha256-PcRvlWayisPSjd0UcRQbhG8Oqw78AcPE6x872cPRHN8=",
|
||||
"lastModified": 1787424939,
|
||||
"narHash": "sha256-O2tBn84NNuHrnqNVxx/XqsXwfYvS1YwBh+7CBnbCYsk=",
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "3cfd774b0a530725a077e17354fbdb87ea1c4aad",
|
||||
"rev": "809414f0cdadf82cf11b06c2b29ba9b3168b3297",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -354,28 +353,6 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"gitignore": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"backlog",
|
||||
"git-hooks",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1709087332,
|
||||
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "gitignore.nix",
|
||||
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "gitignore.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"gnome-shell": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
@@ -424,11 +401,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1786719456,
|
||||
"narHash": "sha256-B74DLQs/VjlqyhnnX3tguWwghqJHWSJX30TKZuAljIg=",
|
||||
"lastModified": 1790819692,
|
||||
"narHash": "sha256-rvubAPbh3QCliic3sAK+CXTrPCGgJstY52OTs/5H1J4=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "83b7606dcf44abe3a94b86e8bb2b3355d22e8797",
|
||||
"rev": "c8ecc29e5175452bee4a2aa1ba2383856d795338",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -481,6 +458,38 @@
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1791066858,
|
||||
"narHash": "sha256-hLh6ALHrGpgYm8viWCo1pO+ErC22YDGdAvVPcfYsXA8=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprgraphics",
|
||||
"rev": "80c7d00f2236732853e390019ff8d79d17fa3612",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprgraphics",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprgraphics_2": {
|
||||
"inputs": {
|
||||
"hyprutils": [
|
||||
"hyprland",
|
||||
"xdph",
|
||||
"hyprutils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprland",
|
||||
"xdph",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprland",
|
||||
"xdph",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1786464367,
|
||||
"narHash": "sha256-k58p4wbzIXWyRWrW84pP8tD+iaZSSYiiM+fr0Auk4oU=",
|
||||
@@ -503,6 +512,7 @@
|
||||
"hyprland-guiutils": "hyprland-guiutils",
|
||||
"hyprland-protocols": "hyprland-protocols",
|
||||
"hyprlang": "hyprlang",
|
||||
"hyprtoolkit": "hyprtoolkit",
|
||||
"hyprutils": "hyprutils",
|
||||
"hyprwayland-scanner": "hyprwayland-scanner",
|
||||
"hyprwire": "hyprwire",
|
||||
@@ -512,11 +522,11 @@
|
||||
"xdph": "xdph"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787505664,
|
||||
"narHash": "sha256-ds9J1/RBDzgSFtb20+MbXS/v8xA7TLRh7YSnD6cWSgY=",
|
||||
"lastModified": 1791545463,
|
||||
"narHash": "sha256-EuTde/DbLBZ0nm8Ctj4Il3M5SKsWAKeDITvUuatu5+g=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "951ab550e7ea050e4b871f99faf87d99c601c44a",
|
||||
"revCount": 7763,
|
||||
"rev": "663b29b846e4bad17cfa29941f6d2fbb6b61f139",
|
||||
"revCount": 7901,
|
||||
"type": "git",
|
||||
"url": "https://github.com/hyprwm/Hyprland"
|
||||
},
|
||||
@@ -539,7 +549,10 @@
|
||||
"hyprland",
|
||||
"hyprlang"
|
||||
],
|
||||
"hyprtoolkit": "hyprtoolkit",
|
||||
"hyprtoolkit": [
|
||||
"hyprland",
|
||||
"hyprtoolkit"
|
||||
],
|
||||
"hyprutils": [
|
||||
"hyprland",
|
||||
"hyprutils"
|
||||
@@ -588,11 +601,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787505272,
|
||||
"narHash": "sha256-QlwOFpistZmkBdIrCBya3ooLOIFL6E3zYRID5LmuNQ8=",
|
||||
"lastModified": 1791378645,
|
||||
"narHash": "sha256-9Eix+ZUcI9IUklrtJAD9l/nTcS/Byz7fi94Y3InxS2Y=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-plugins",
|
||||
"rev": "2b41ad87ba68226472b8a811c3f580a1eabb10bb",
|
||||
"rev": "428bfcd1c9ee34965400bb359349f518140c9920",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -613,11 +626,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772460177,
|
||||
"narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=",
|
||||
"lastModified": 1789475883,
|
||||
"narHash": "sha256-YRFLrPESYitsDYqQKquOFg8OWNI7tHKwPnTrTZWXxWY=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-protocols",
|
||||
"rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
|
||||
"rev": "cc9a8fd253bdc00f48a967ecf4828211ef08751f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -659,46 +672,39 @@
|
||||
"inputs": {
|
||||
"aquamarine": [
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"aquamarine"
|
||||
],
|
||||
"hyprgraphics": [
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"hyprgraphics"
|
||||
],
|
||||
"hyprlang": [
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"hyprlang"
|
||||
],
|
||||
"hyprutils": [
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"hyprutils"
|
||||
],
|
||||
"hyprwayland-scanner": [
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"hyprwayland-scanner"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"hyprland",
|
||||
"hyprland-guiutils",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785930473,
|
||||
"narHash": "sha256-DitTu625BhEYpZjtjxtGpjrEJwPwW+X/+jJvhSZNSJM=",
|
||||
"lastModified": 1789562890,
|
||||
"narHash": "sha256-LFzeVJkDMQLjCpi55S9oc3N/wMrW2RCS1ShPL+1HB78=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprtoolkit",
|
||||
"rev": "af515b69dfbe366dc7873aa1475cb2f4db3ebad7",
|
||||
"rev": "b3f2d0e725e4eaf804af7e529cb69bbed43d1a04",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -719,11 +725,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1786903207,
|
||||
"narHash": "sha256-QTwMqLLONRhv9iz6CVeuX6BqQNQCIqI8hL/cPYlR/24=",
|
||||
"lastModified": 1789968180,
|
||||
"narHash": "sha256-YGRfhw+fJW7oKW3IspoceD34jeokN1KXNxKU6APlFH4=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprutils",
|
||||
"rev": "6cf50415e06dc6bd9f1252f1b745eac6b4a1cc39",
|
||||
"rev": "95983ee836ff205e615bba67d1f67098e1231941",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -791,11 +797,11 @@
|
||||
"nixpkgs": "nixpkgs_6"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1786487950,
|
||||
"narHash": "sha256-tCHT7ZL4Fen/Y8Nv3c6iRdPx+1ZceUbGwREWPcZlQ3w=",
|
||||
"lastModified": 1791490285,
|
||||
"narHash": "sha256-JPu+WSXX4TaQnue+UKGMmv2YYCbM5t9Bwwm0fp6lJXc=",
|
||||
"owner": "Lxtharia",
|
||||
"repo": "minegrub-theme",
|
||||
"rev": "3b718d508ba847615e64738aa2cf622f441475bf",
|
||||
"rev": "cdd067ebc31ac59e24ae3c99e5b0f05a18eb8a1d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -826,11 +832,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787561191,
|
||||
"narHash": "sha256-ElEaGbFamk06FQs6n/03YgLILamaL45/8urc2KPnMf0=",
|
||||
"lastModified": 1791190188,
|
||||
"narHash": "sha256-d+5+d7r62PZcHc4UFA5HkjxnzBDfVIixsdJX+dwQsyI=",
|
||||
"owner": "Mic92",
|
||||
"repo": "nix-ld",
|
||||
"rev": "8b71f7b53ecfa20cfbfb76d9427e43b851cb8bd6",
|
||||
"rev": "2ba7201c2db8a49b9bd745d240430282f67bbe39",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -880,11 +886,11 @@
|
||||
"nixpkgs": "nixpkgs_7"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787144466,
|
||||
"narHash": "sha256-HHfv2/HkNSKbbSyU9iD/g8lbP6r4tl33sSw1W4rXCk0=",
|
||||
"lastModified": 1791373788,
|
||||
"narHash": "sha256-c3oMt0QoE+4yiRk6u1m2L9ogjaUw0uTGn9yk808KkgE=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "0471accf8d0a8210b31d947497d179ecc99e0021",
|
||||
"rev": "4bc63156b109ee7b4103e3ec30565c8c92bde435",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -896,11 +902,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1770073757,
|
||||
"narHash": "sha256-Vy+G+F+3E/Tl+GMNgiHl9Pah2DgShmIUBJXmbiQPHbI=",
|
||||
"lastModified": 1782918843,
|
||||
"narHash": "sha256-ETYnV9U7Sr+A45dohzZdfCZKOss4qrTkO+wgNZNvEc0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "47472570b1e607482890801aeaf29bfb749884f6",
|
||||
"rev": "e8273b29fe1390ec8d4603f2477357555291432e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -912,11 +918,11 @@
|
||||
},
|
||||
"nixpkgs-lib": {
|
||||
"locked": {
|
||||
"lastModified": 1777168982,
|
||||
"narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=",
|
||||
"lastModified": 1785031560,
|
||||
"narHash": "sha256-OmshNvn2vupOFpYinLUu+1Dnpu4n7Q5N3ggGVNHpkUI=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14",
|
||||
"rev": "0e79af5e3d4dcfcd676ab5ba3f95d2e3352e078c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -942,11 +948,11 @@
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1787414105,
|
||||
"narHash": "sha256-WncT27+3BOkgTaJZLnCsf3LcYf9RXMuR9ONSN4rzQ7s=",
|
||||
"lastModified": 1791426274,
|
||||
"narHash": "sha256-MWhktfFtFE8Jl7bf9Pkp7TR5MSdYCjCswSo0Gkb4ywc=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a9e6d84f9c2f9012f5fe7d964a7851352300e61a",
|
||||
"rev": "7c8764b7c7b09b34f632464276218ef9090eaa11",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -958,11 +964,11 @@
|
||||
},
|
||||
"nixpkgs_10": {
|
||||
"locked": {
|
||||
"lastModified": 1786599213,
|
||||
"narHash": "sha256-yNJd40f11EzXBjSByCB7IPpeFFAdeoSKKM67dGkfFoU=",
|
||||
"lastModified": 1790689126,
|
||||
"narHash": "sha256-ilerN1WLSvF+HMjziC/Wv99J5y02maDH+6hZPwsORKg=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "0e251e24a4f24e036a084b6b4b2d2491af4167f4",
|
||||
"rev": "b4fd65b198c599cbe814fcb9f42d25d021595ec9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -974,11 +980,11 @@
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1778093112,
|
||||
"narHash": "sha256-18rT4EfMrtYVMQX7AMAEsnv5KhCryLxGolmJ+v+vZdM=",
|
||||
"lastModified": 1787921194,
|
||||
"narHash": "sha256-BgYCc3Gn0MuVOj8XpkisNIiTJ5XXFoQ3Ngs0SkVSiOg=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "cf9db9282552bb3f2743fc9ed3852d239692089a",
|
||||
"rev": "0525b37d4207b34aafae53206e7aac1fdf80dbac",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1004,11 +1010,11 @@
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"locked": {
|
||||
"lastModified": 1787360063,
|
||||
"narHash": "sha256-dt4WdcvsA8/RCe+VZZwqU0X+XMM3wBbGCWA0/sFWzGo=",
|
||||
"lastModified": 1791594108,
|
||||
"narHash": "sha256-XK4KceonkwD8LuMAt/vNrz982mXJM5jeHAxMwsUXXAQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "2c423e03bbafcff28bfadc6781a4a8257f205cb5",
|
||||
"rev": "6510408d147d8c5e6d76043e899e9251756f6a75",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1020,11 +1026,11 @@
|
||||
},
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1787360063,
|
||||
"narHash": "sha256-dt4WdcvsA8/RCe+VZZwqU0X+XMM3wBbGCWA0/sFWzGo=",
|
||||
"lastModified": 1791048980,
|
||||
"narHash": "sha256-KgItSKML8Xvte0B7/uGnBDsYzSnnKHcOaiUbgWBXLXw=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "2c423e03bbafcff28bfadc6781a4a8257f205cb5",
|
||||
"rev": "a7868a727837f3c09cee2ce0ca671c76b1589fed",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1052,11 +1058,11 @@
|
||||
},
|
||||
"nixpkgs_7": {
|
||||
"locked": {
|
||||
"lastModified": 1767892417,
|
||||
"narHash": "sha256-8bW3q88CEg2u4hSP66Vf4lpbLonHz7hqDNBMcCY7E9U=",
|
||||
"rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba",
|
||||
"lastModified": 1789546076,
|
||||
"narHash": "sha256-vWkSk5bbfTqdtMoSgD9FshACO8JCvXTFi+3cqEp0mH0=",
|
||||
"rev": "b1b875982b17dabde9b4a37f3e229e74913e6db3",
|
||||
"type": "tarball",
|
||||
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre924538.3497aa5c9457/nixexprs.tar.xz"
|
||||
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.11pre1074753.b1b875982b17/nixexprs.tar.xz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
@@ -1081,11 +1087,11 @@
|
||||
},
|
||||
"nixpkgs_9": {
|
||||
"locked": {
|
||||
"lastModified": 1775036866,
|
||||
"narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=",
|
||||
"lastModified": 1789149629,
|
||||
"narHash": "sha256-H6GwaZzZf+4npqv0tph94w9tZddSjFjmQrVsW0z78uk=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "6201e203d09599479a3b3450ed24fa81537ebc4e",
|
||||
"rev": "eaad089433ca2bb662274377d33df3d0e51ef28b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1102,11 +1108,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787540539,
|
||||
"narHash": "sha256-q6ewgZm6eAgdHWIaOV+dwR5/x711AfDUsao3nQ/CdyA=",
|
||||
"lastModified": 1791701131,
|
||||
"narHash": "sha256-mBCtcZPGgBLfEYxFvBRsc0KeDz0JtN2BMhcIWGoMk94=",
|
||||
"owner": "noctalia-dev",
|
||||
"repo": "noctalia",
|
||||
"rev": "a4324409f4f07001d33fbf902be49377ee6b62e2",
|
||||
"rev": "45084cf764f08c1f00e0c7e7432732f225105b7e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1149,11 +1155,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1784288435,
|
||||
"narHash": "sha256-ReRHaLgr/uVqdD8afFSn+myXIfpHeOhP0yYe0TJqAA8=",
|
||||
"lastModified": 1790500375,
|
||||
"narHash": "sha256-XN3sDtn8TU9hAc9xqZ+SqRB/HHm2wjxM6aSWYLJU+oo=",
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "43b3c1ab9d40fb1dbb008f451988a91e375825e9",
|
||||
"rev": "a0e4241b51206fbcbf52fd322eb5f0cd80f153c4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1178,11 +1184,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773870109,
|
||||
"narHash": "sha256-ZoTdqZP03DcdoyxvpFHCAek4bkPUTUPUF3oCCgc3dP4=",
|
||||
"lastModified": 1788149501,
|
||||
"narHash": "sha256-XKJP4KvhawV3pyVfraX3sflz05Rp7KP74gRt6QqKjNE=",
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "build-system-pkgs",
|
||||
"rev": "b6e74f433b02fa4b8a7965ee24680f4867e2926f",
|
||||
"rev": "150839ac67b5a34db56a55e8f6b7099a4e7878ab",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1199,11 +1205,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775439158,
|
||||
"narHash": "sha256-NHY9SJNU019n+8NCabBDtmuzRFeE2gZlYKHowp9bV24=",
|
||||
"lastModified": 1788394333,
|
||||
"narHash": "sha256-xYOP0Xym1eVGUaHFx+eJEaycFGoiCbst3fZf0xFHP78=",
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "pyproject.nix",
|
||||
"rev": "fb6b728260f3f32761367e9fd1e1a25b4245bcd0",
|
||||
"rev": "6a8a7881d75b6f98967e7b8069f4ead331384301",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1244,11 +1250,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1786629091,
|
||||
"narHash": "sha256-gkig4nPi1CWc4Z50GBsjE4ygSE7hMpl/TwID2an2Cck=",
|
||||
"lastModified": 1791710405,
|
||||
"narHash": "sha256-mVD4XIc5JkqMW2K04IkFUzHgHmyJZlzw5ktfgMDCbKU=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "a8627b21b9107c5711c96b84f32a9a4b3d45295f",
|
||||
"rev": "ee48786c6f9160d2c1a084aac841f68195b8420c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1265,11 +1271,11 @@
|
||||
"nix-filter": "nix-filter"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787489216,
|
||||
"narHash": "sha256-VE1o0B6GPHrwmYANfGIEm/hDz2u4IhG0Gdj+ZkEV2uY=",
|
||||
"lastModified": 1790431438,
|
||||
"narHash": "sha256-D0pKfzVlRz8VnLIZVaPtr2d+LHYspICllgIz+oQlw98=",
|
||||
"owner": "zjeffer",
|
||||
"repo": "split-monitor-workspaces",
|
||||
"rev": "47b22971e3a21d228882ca1e2509fdac26f2d5b2",
|
||||
"rev": "f26d624c2638d0661f3e0352a634650bfd08296d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1298,11 +1304,11 @@
|
||||
"tinted-zed": "tinted-zed"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787175104,
|
||||
"narHash": "sha256-tzNjlb0loxeWlipvxSNAUUihloeTZoyGFhEen87yM9k=",
|
||||
"lastModified": 1791574276,
|
||||
"narHash": "sha256-UMnLnZ3JlA7UTBNNNx1rNsXYoPP/cirXLCKGiQ/yDx8=",
|
||||
"owner": "nix-community",
|
||||
"repo": "stylix",
|
||||
"rev": "a9e5a76a1b75b137f266e4f445e1eaba82e9783e",
|
||||
"rev": "2856c4c6a845b9bec98828ef197abe176e4806bb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1366,11 +1372,11 @@
|
||||
"uv2nix": "uv2nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776248910,
|
||||
"narHash": "sha256-MrwY8D48uZMTI/D6TEBmG1osklyAlqdtYeH+1cBeRNU=",
|
||||
"lastModified": 1791196392,
|
||||
"narHash": "sha256-BQ2f4gEtc2An1t9xac66C+ZIPEopJotoH2OhNcm5eLg=",
|
||||
"owner": "LichHunter",
|
||||
"repo": "thefuck",
|
||||
"rev": "7cac5ac8709dade676264af51afbe7a4d3c84582",
|
||||
"rev": "7a102bb398407e57aaf64f4e5123f47256b11c04",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1445,11 +1451,11 @@
|
||||
},
|
||||
"unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1787498568,
|
||||
"narHash": "sha256-9i/VTdusq/+NM/tz+J1Re+ojkMB8MBf0QshnYfzHz30=",
|
||||
"lastModified": 1791594108,
|
||||
"narHash": "sha256-XK4KceonkwD8LuMAt/vNrz982mXJM5jeHAxMwsUXXAQ=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "56c02bc00adcf003215cc4bd996d6efaf4cff188",
|
||||
"rev": "6510408d147d8c5e6d76043e899e9251756f6a75",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1466,11 +1472,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787540599,
|
||||
"narHash": "sha256-MHwk52ty3NsLhq9a1IbIfBJZlCUJIdiUYFo52JLK9hY=",
|
||||
"lastModified": 1791642191,
|
||||
"narHash": "sha256-0bK0A59rVUn1SRZzo4cNi4VSqAe7vR1gL2/MZl53Frw=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "03f4cd46bc1dd4f3a96da778d2ce9f7ce39dd450",
|
||||
"rev": "c58f54c733a7894d84fa2fdff26cc12088c4b78c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1492,11 +1498,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775386139,
|
||||
"narHash": "sha256-n82p7WF+dYxf5r01pXlqbk8CAF7xX0Tk7wAcmMjkuhc=",
|
||||
"lastModified": 1788001239,
|
||||
"narHash": "sha256-AELmsXPI546MhbC/ZXC7WRUkCz7d4rqKTHUmliIgPpI=",
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "uv2nix",
|
||||
"rev": "3cffcee173635d553e213d11418690b5290ff1c9",
|
||||
"rev": "7f9c6b613d2e749e54854b1d60ab6a2192db889e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1525,6 +1531,11 @@
|
||||
},
|
||||
"xdph": {
|
||||
"inputs": {
|
||||
"aquamarine": [
|
||||
"hyprland",
|
||||
"aquamarine"
|
||||
],
|
||||
"hyprgraphics": "hyprgraphics_2",
|
||||
"hyprland-protocols": [
|
||||
"hyprland",
|
||||
"hyprland-protocols"
|
||||
@@ -1533,6 +1544,10 @@
|
||||
"hyprland",
|
||||
"hyprlang"
|
||||
],
|
||||
"hyprtoolkit": [
|
||||
"hyprland",
|
||||
"hyprtoolkit"
|
||||
],
|
||||
"hyprutils": [
|
||||
"hyprland",
|
||||
"hyprutils"
|
||||
@@ -1551,11 +1566,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1786988229,
|
||||
"narHash": "sha256-frEFLVRj8xXvBBDs44IRiqHo6R2PxsRpluygL7abjjI=",
|
||||
"lastModified": 1790080407,
|
||||
"narHash": "sha256-uKM+FAvcllYFcHoh4LEmyB0CGLaT3dMOjK4dxXyIIgc=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"rev": "59d429bf45aed4e2209043c0c36565ad8e2859a5",
|
||||
"rev": "e87ae7823e7bf0601385220c69b5a3b245123fc5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1570,11 +1585,11 @@
|
||||
"nixpkgs": "nixpkgs_10"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787540616,
|
||||
"narHash": "sha256-c+dIgStaq3qNaQxhAiiXY3upNTIdn7tCcqPnwsmKTmY=",
|
||||
"lastModified": 1791629930,
|
||||
"narHash": "sha256-djG2tdpl/U+8eUmlozsRTRoU2yIvh8r1z8qj8gB/qWM=",
|
||||
"owner": "0xc000022070",
|
||||
"repo": "zen-browser-flake",
|
||||
"rev": "51df7b8cbb0fcba14a9b159531ef48d0cd69dde9",
|
||||
"rev": "1fd1ee43a0fd0bff17a8ba07e2a281406a92991f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
|
||||
thefuck.url = "github:LichHunter/thefuck";
|
||||
|
||||
backlog.url = "github:LichHunter/backlog";
|
||||
backlog.url = "git+https://gitea.susano-homelab.duckdns.org/fujin/backlog.git";
|
||||
|
||||
noctalia = {
|
||||
url = "github:noctalia-dev/noctalia";
|
||||
@@ -213,19 +213,35 @@
|
||||
"fujin";
|
||||
};
|
||||
|
||||
packages.x86_64-linux = {
|
||||
nixos-lxc = (nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
./machines/builder
|
||||
({ modulesPath, ... }: {
|
||||
imports = [ (modulesPath + "/virtualisation/proxmox-lxc.nix") ];
|
||||
})
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
packages.x86_64-linux =
|
||||
let
|
||||
builderSystem = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
./machines/builder
|
||||
({ modulesPath, ... }: {
|
||||
imports = [ (modulesPath + "/virtualisation/proxmox-lxc.nix") ];
|
||||
})
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
};
|
||||
};
|
||||
}).config.system.build.image;
|
||||
in {
|
||||
# pve-build keys template identity on this output's outPath: the
|
||||
# store-path hash (covers nixpkgs pin + builder config) becomes the
|
||||
# template filename on PVE. overrideAttrs only names the derivation
|
||||
# so the filename reads <hash>-nixos-lxc-builder.tar.xz instead of
|
||||
# <hash>-tarball.tar.xz.
|
||||
nixos-lxc = builderSystem.config.system.build.image.overrideAttrs (_: {
|
||||
name = "nixos-lxc-builder";
|
||||
});
|
||||
|
||||
# Toplevel the builder image boots. pve-build compares it against
|
||||
# /run/current-system inside a running disposable to detect clones
|
||||
# of stale templates (pct config drops the ostemplate field after
|
||||
# creation, so it cannot be used for this).
|
||||
nixos-lxc-toplevel = builderSystem.config.system.build.toplevel;
|
||||
|
||||
izanami-proxmox = nixos-generators.nixosGenerate {
|
||||
system = "x86_64-linux";
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ in {
|
||||
nix = {
|
||||
settings = {
|
||||
# Enable flakes and new 'nix' command
|
||||
experimental-features = "nix-command flakes";
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
# Opinionated: disable global registry
|
||||
flake-registry = "";
|
||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||
|
||||
@@ -19,7 +19,7 @@ in {
|
||||
nix = {
|
||||
settings = {
|
||||
# Enable flakes and new 'nix' command
|
||||
experimental-features = "nix-command flakes";
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
# Opinionated: disable global registry
|
||||
flake-registry = "";
|
||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||
|
||||
@@ -26,7 +26,7 @@ in {
|
||||
nix = {
|
||||
settings = {
|
||||
# Enable flakes and new 'nix' command
|
||||
experimental-features = "nix-command flakes";
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
# Opinionated: disable global registry
|
||||
flake-registry = "";
|
||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||
|
||||
@@ -33,7 +33,7 @@ in
|
||||
nix = {
|
||||
settings = {
|
||||
# Enable flakes and new 'nix' command
|
||||
experimental-features = "nix-command flakes";
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
# Opinionated: disable global registry
|
||||
flake-registry = "";
|
||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||
|
||||
@@ -41,7 +41,7 @@ in {
|
||||
|
||||
nix = {
|
||||
settings = {
|
||||
experimental-features = "nix-command flakes";
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
flake-registry = "";
|
||||
nix-path = config.nix.nixPath;
|
||||
|
||||
|
||||
@@ -66,9 +66,11 @@
|
||||
};
|
||||
|
||||
networking = {
|
||||
# OPNsense (192.168.100.1) runs Unbound with the homelab.lan overrides;
|
||||
# the old 192.168.1.x Pi-hole/router are gone and returned NXDOMAIN for
|
||||
# the local zone. 1.1.1.1 stays as a fallback if the firewall is down.
|
||||
nameservers = [
|
||||
"192.168.1.2" # PyHole
|
||||
"192.168.1.1" # Router
|
||||
"192.168.100.1" # OPNsense Unbound
|
||||
"1.1.1.1"
|
||||
];
|
||||
dhcpcd.extraConfig = ''
|
||||
|
||||
@@ -152,6 +152,7 @@
|
||||
wl-clipboard
|
||||
#cloudflared
|
||||
kdePackages.okular #pdf tool
|
||||
kdePackages.gwenview # image viewer
|
||||
#nextcloud-client
|
||||
|
||||
#music
|
||||
|
||||
@@ -26,7 +26,7 @@ in {
|
||||
nix = {
|
||||
settings = {
|
||||
# Enable flakes and new 'nix' command
|
||||
experimental-features = "nix-command flakes";
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
# Opinionated: disable global registry
|
||||
flake-registry = "";
|
||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||
|
||||
@@ -33,7 +33,7 @@ in {
|
||||
nix = {
|
||||
settings = {
|
||||
# Enable flakes and new 'nix' command
|
||||
experimental-features = "nix-command flakes";
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
# Opinionated: disable global registry
|
||||
flake-registry = "";
|
||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||
|
||||
@@ -51,7 +51,7 @@ in {
|
||||
nix = {
|
||||
settings = {
|
||||
# Enable flakes and new 'nix' command
|
||||
experimental-features = "nix-command flakes";
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
# Opinionated: disable global registry
|
||||
flake-registry = "";
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ in
|
||||
nix = {
|
||||
settings = {
|
||||
# Enable flakes and new 'nix' command
|
||||
experimental-features = "nix-command flakes";
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
# Opinionated: disable global registry
|
||||
flake-registry = "";
|
||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||
|
||||
@@ -42,7 +42,7 @@ in
|
||||
nix = {
|
||||
settings = {
|
||||
# Enable flakes and new 'nix' command
|
||||
experimental-features = "nix-command flakes";
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
# Opinionated: disable global registry
|
||||
flake-registry = "";
|
||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||
|
||||
@@ -18,7 +18,7 @@ in {
|
||||
## Emacs itself
|
||||
binutils # native-comp needs 'as', provided by this
|
||||
# 28.2 + native-comp
|
||||
((emacsPackagesFor emacs30).emacsWithPackages (epkgs: [
|
||||
((emacsPackagesFor emacs).emacsWithPackages (epkgs: [
|
||||
epkgs.vterm
|
||||
epkgs.treesit-grammars.with-all-grammars
|
||||
epkgs.mu4e
|
||||
@@ -39,7 +39,7 @@ in {
|
||||
|
||||
## Module dependencies
|
||||
# :checkers spell
|
||||
(aspellWithDicts (ds: with ds; [ en en-computers en-science ]))
|
||||
(aspellWithDicts (ds: with ds; [ en ]))
|
||||
# :tools editorconfig
|
||||
editorconfig-core-c # per-project style config
|
||||
# :tools lookup & :lang org +roam
|
||||
|
||||
+101
-61
@@ -8,8 +8,8 @@
|
||||
#
|
||||
# Stage Step command Effect
|
||||
# ------ ------------------------- --------------------------------------
|
||||
# 1 check-image Read-only: is a NixOS LXC ostemplate on PVE?
|
||||
# deploy-image Idempotent: build+upload if missing, no-op if present.
|
||||
# 1 check-image Read-only: is the ostemplate matching the current flake on PVE?
|
||||
# deploy-image Idempotent: build+upload if missing/stale, no-op if current.
|
||||
# update-image Force: rebuild locally + replace on PVE.
|
||||
# 2 start-builder deploy-image + clone a fresh CT under a free
|
||||
# VMID + start it + wait for DHCP.
|
||||
@@ -90,6 +90,7 @@ PVE_BRIDGE="${PVE_BRIDGE:-vmbr0}" # network bridge
|
||||
VMID_START="${VMID_START:-9999}" # scan downward from here for a free VMID
|
||||
VMID_FLOOR="${VMID_FLOOR:-100}" # lowest VMID to consider (PVE minimum)
|
||||
TEMPLATE_OUTPUT="${TEMPLATE_OUTPUT:-nixos-lxc}" # flake output to build
|
||||
TEMPLATE_TOPLEVEL_OUTPUT="${TEMPLATE_TOPLEVEL_OUTPUT:-nixos-lxc-toplevel}" # flake output a disposable must be running
|
||||
CT_HOSTNAME_PREFIX="${CT_HOSTNAME_PREFIX:-nixos-builder}" # disposables' hostname prefix
|
||||
BUILD_SSH_USER="${BUILD_SSH_USER:-builder}" # user nixos-rebuild SSHes as on the CT
|
||||
CT_BOOT_TIMEOUT="${CT_BOOT_TIMEOUT:-120}" # seconds to wait for DHCP lease
|
||||
@@ -244,9 +245,9 @@ Composite commands (chain all stages):
|
||||
+ destroy-builder. Disposable destroyed on success.
|
||||
|
||||
Step commands (run one stage — VMID auto-discovered from PVE if omitted):
|
||||
check-image Read-only: exit 0 if a NixOS LXC ostemplate is on PVE, 1 if not.
|
||||
deploy-image Idempotent: build+upload if missing, no-op if present.
|
||||
update-image Force: rebuild .$TEMPLATE_OUTPUT locally + replace on PVE.
|
||||
check-image Read-only: exit 0 if the ostemplate matching the current flake is on PVE.
|
||||
deploy-image Idempotent: build+upload if missing/stale, no-op if current.
|
||||
update-image Force: rebuild .$TEMPLATE_OUTPUT + upload. Old templates are kept.
|
||||
start-builder deploy-image + clone a fresh CT + start.
|
||||
build-on [VMID] Build closure on an existing disposable.
|
||||
activate <test|switch|boot>
|
||||
@@ -279,7 +280,8 @@ Options:
|
||||
Environment:
|
||||
PVE_HOST, PVE_STORAGE, PVE_ROOTFS_STORAGE, PVE_BRIDGE,
|
||||
VMID_START, VMID_FLOOR, BUILD_SSH_USER,
|
||||
CT_BOOT_TIMEOUT, CT_ROOTFS_GIB, TEMPLATE_OUTPUT, CT_HOSTNAME_PREFIX
|
||||
CT_BOOT_TIMEOUT, CT_ROOTFS_GIB, TEMPLATE_OUTPUT, TEMPLATE_TOPLEVEL_OUTPUT,
|
||||
CT_HOSTNAME_PREFIX
|
||||
|
||||
Examples:
|
||||
# Full happy path — build + activate susano permanently, auto-destroy CT.
|
||||
@@ -481,17 +483,33 @@ resolve_vmid() {
|
||||
## ---------------------------------------------------------------------------
|
||||
# Stage 1: image management (check / deploy / update).
|
||||
# All three operate on the NixOS LXC ostemplate stored in PVE's
|
||||
# /var/lib/vz/template/cache/. The "latest" template is whichever
|
||||
# nixos-lxc-*.tar.xz sorts last alphabetically (matches the helpers below).
|
||||
# /var/lib/vz/template/cache/.
|
||||
#
|
||||
# Template identity: .$TEMPLATE_OUTPUT's store path is evaluated (no build);
|
||||
# its basename embeds the full derivation hash — nixpkgs pin AND NixOS
|
||||
# config — and becomes the uploaded filename. Matching against PVE is exact:
|
||||
# a template matches the current flake iff its name equals the evaluated
|
||||
# one. This catches both "missing" and "stale" images. (The previous
|
||||
# "alphabetically last nixos*lxc*.tar.xz" pick was wrong: unstable version
|
||||
# strings like 26.05pre-git sort above dated stable ones like 25.05.2026…,
|
||||
# so a stale image could win over the current one.)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Echo the storage-relative path of the newest nixos-lxc template on PVE, or
|
||||
# empty if none. Read-only.
|
||||
find_template_on_pve() {
|
||||
debug "find_template_on_pve: pveam list $PVE_STORAGE"
|
||||
pve pveam list "$PVE_STORAGE" 2>/dev/null \
|
||||
| awk '/nixos.*lxc.*\.tar\.xz/ {print $1}' \
|
||||
| sort | tail -n1 || true
|
||||
# Evaluate the image derivation's store path WITHOUT building it, and derive
|
||||
# the canonical template filename from it. Sets TEMPLATE_FILENAME and
|
||||
# OSTEMPLATE. Because the store-path hash covers the flake lock and the
|
||||
# whole NixOS config, any edit to machines/builder/ or nixpkgs pin bump
|
||||
# changes the filename — "same name, older build" becomes impossible.
|
||||
resolve_template_identity() {
|
||||
step "Evaluating .$TEMPLATE_OUTPUT image identity (nix eval, no build) ..."
|
||||
local out_path
|
||||
out_path=$(cd "$FLAKE_ROOT" && nix eval --raw ".#$TEMPLATE_OUTPUT.outPath") \
|
||||
|| die "Failed to eval .$TEMPLATE_OUTPUT.outPath — is the flake evaluable?"
|
||||
TEMPLATE_FILENAME="$(basename "$out_path").tar.xz"
|
||||
OSTEMPLATE="$PVE_STORAGE:vztmpl/$TEMPLATE_FILENAME"
|
||||
debug "image outPath: $out_path"
|
||||
debug "template on PVE: $OSTEMPLATE"
|
||||
ok "Current flake image: $TEMPLATE_FILENAME"
|
||||
}
|
||||
|
||||
# Build .$TEMPLATE_OUTPUT locally and scp the tarball to PVE's template cache.
|
||||
@@ -505,80 +523,60 @@ build_and_upload_image() {
|
||||
|| die "nix build .$TEMPLATE_OUTPUT produced no output path."
|
||||
log " nix output: $result_dir"
|
||||
|
||||
# nixos-generators proxmox-lxc format lays the file under result/tarball/*.tar.xz
|
||||
# Identity first, so the upload target is the canonical hash-embedded
|
||||
# filename even when called without a prior check_image (update-image).
|
||||
resolve_template_identity
|
||||
|
||||
# nixos-generators / proxmox-lxc image lays the file under result/tarball/*.tar.xz
|
||||
local tarball
|
||||
tarball=$(find "$result_dir/tarball" -maxdepth 1 -type f -name '*.tar.xz' -print -quit | head -n1)
|
||||
[[ -n "$tarball" ]] \
|
||||
|| die "No .tar.xz found under $result_dir/tarball/. Did nixos-generators output layout change?"
|
||||
local tname; tname=$(basename "$tarball")
|
||||
|| die "No .tar.xz found under $result_dir/tarball/. Did the image output layout change?"
|
||||
debug "tarball path: $tarball"
|
||||
debug "tarball name: $tname"
|
||||
ok "Built image: $tname"
|
||||
ok "Built image: $(basename "$tarball")"
|
||||
|
||||
step "Uploading to $PVE_HOST:/var/lib/vz/template/cache/ ..."
|
||||
local size_human
|
||||
size_human=$(du -h "$tarball" | cut -f1)
|
||||
log " scp $tarball ($size_human) -> $PVE_HOST:/var/lib/vz/template/cache/$tname"
|
||||
pve_scp "$tarball" "$PVE_HOST:/var/lib/vz/template/cache/$tname"
|
||||
|
||||
OSTEMPLATE="$PVE_STORAGE:vztmpl/$tname"
|
||||
log " scp $tarball ($size_human) -> $PVE_HOST:/var/lib/vz/template/cache/$TEMPLATE_FILENAME"
|
||||
pve_scp "$tarball" "$PVE_HOST:/var/lib/vz/template/cache/$TEMPLATE_FILENAME"
|
||||
}
|
||||
|
||||
# Remove old nixos-lxc templates from PVE, keeping $1. Must be called after
|
||||
# the new image is uploaded so a build/upload failure leaves the previous
|
||||
# template intact.
|
||||
purge_old_templates_on_pve() {
|
||||
local keep="${1:-}"
|
||||
step "Purging old nixos-lxc templates from $PVE_HOST (keeping ${keep:-none}) ..."
|
||||
local all
|
||||
all=$(pve pveam list "$PVE_STORAGE" 2>/dev/null \
|
||||
| awk '/nixos.*lxc.*\.tar\.xz/ {print $1}' || true)
|
||||
local removed=0
|
||||
while IFS= read -r t; do
|
||||
[[ -n "$t" ]] || continue
|
||||
if [[ -n "$keep" && "$t" == "$keep" ]]; then
|
||||
debug "keeping: $t"
|
||||
continue
|
||||
fi
|
||||
local filename="${t##*/}"
|
||||
log " removing: $t"
|
||||
pve rm -f "/var/lib/vz/template/cache/$filename" 2>/dev/null || true
|
||||
removed=$((removed + 1))
|
||||
done <<<"$all"
|
||||
ok "Purged $removed old template(s)"
|
||||
}
|
||||
|
||||
# Read-only check. Sets OSTEMPLATE and returns 0 if a template exists;
|
||||
# clears OSTEMPLATE and returns 1 if missing.
|
||||
# Read-only check. Sets OSTEMPLATE and returns 0 if the template matching
|
||||
# the CURRENT flake build is on PVE; clears OSTEMPLATE and returns 1 if it
|
||||
# is missing or stale (a differently-named nixos-lxc template may exist).
|
||||
check_image() {
|
||||
step "Checking for nixos-lxc ostemplate on $PVE_HOST (storage: $PVE_STORAGE) ..."
|
||||
resolve_template_identity
|
||||
step "Checking for $OSTEMPLATE on $PVE_HOST (storage: $PVE_STORAGE) ..."
|
||||
local existing
|
||||
existing=$(find_template_on_pve)
|
||||
existing=$(pve pveam list "$PVE_STORAGE" 2>/dev/null | awk -v t="$OSTEMPLATE" '$1 == t {print $1}')
|
||||
if [[ -n "$existing" ]]; then
|
||||
OSTEMPLATE="$existing"
|
||||
ok "Image present: $OSTEMPLATE"
|
||||
ok "Image present (matches current flake build): $OSTEMPLATE"
|
||||
return 0
|
||||
fi
|
||||
OSTEMPLATE=""
|
||||
warn "No nixos-lxc ostemplate found."
|
||||
warn "No template matching the current flake build on $PVE_HOST."
|
||||
return 1
|
||||
}
|
||||
|
||||
# Idempotent deploy: build + upload only if no template exists.
|
||||
# Idempotent deploy: ensure PVE holds the template matching the CURRENT
|
||||
# flake build. No-op when it matches; build + upload otherwise. Historical
|
||||
# templates are deliberately left in place — other tooling (e.g. the
|
||||
# terraform handler) may pin containers to them.
|
||||
deploy_image() {
|
||||
if check_image; then
|
||||
log "Nothing to do — image already on PVE."
|
||||
log "Nothing to do — image on PVE matches current flake build."
|
||||
return
|
||||
fi
|
||||
build_and_upload_image
|
||||
ok "Image deployed: $OSTEMPLATE"
|
||||
}
|
||||
|
||||
# Force update: build + upload first, then purge old. If the build or upload
|
||||
# fails, the previous template remains on PVE.
|
||||
# Force update: rebuild + upload even if the current template is present.
|
||||
# Old templates are never deleted (terraform may pin them); prune manually
|
||||
# with `pveam remove` if really desired.
|
||||
update_image() {
|
||||
build_and_upload_image
|
||||
purge_old_templates_on_pve "$OSTEMPLATE"
|
||||
ok "Image updated: $OSTEMPLATE"
|
||||
}
|
||||
|
||||
@@ -640,11 +638,27 @@ create_and_start_ct() {
|
||||
# Echo the current IPv4 of a running container's eth0, or empty if unavailable.
|
||||
get_ct_ip() {
|
||||
local vmid="$1"
|
||||
pve pct exec "$vmid" -- ip -j -4 addr show eth0 2>/dev/null \
|
||||
# NixOS containers have no standard /bin|/sbin — lxc-attach needs the
|
||||
# full path or exec fails with "No such file or directory".
|
||||
pve pct exec "$vmid" -- /run/current-system/sw/bin/ip -j -4 addr show eth0 2>/dev/null \
|
||||
| jq -r '.[0].addr_info[]? | select(.scope=="global") | .local' 2>/dev/null \
|
||||
| head -n1 || true
|
||||
}
|
||||
|
||||
# Echo the NixOS toplevel a running disposable actually booted, or empty.
|
||||
# pct config drops the ostemplate field after creation, so the container's
|
||||
# own /run/current-system is the only reliable record of what it runs.
|
||||
ct_toplevel() {
|
||||
local vmid="$1"
|
||||
pve pct exec "$vmid" -- /run/current-system/sw/bin/readlink /run/current-system 2>/dev/null || true
|
||||
}
|
||||
|
||||
# Echo the toplevel the current flake's builder image boots, or empty on
|
||||
# eval failure (callers treat empty as "cannot tell, skip the check").
|
||||
expected_toplevel() {
|
||||
(cd "$FLAKE_ROOT" && nix eval --raw ".#$TEMPLATE_TOPLEVEL_OUTPUT.outPath" 2>/dev/null) || true
|
||||
}
|
||||
|
||||
# Wait for a disposable to become SSH-reachable via its hostname. Echos the
|
||||
# hostname on success (so the caller can pass it to do_build / probe_ssh).
|
||||
# We deliberately do NOT use the IP here — the script's contract is that
|
||||
@@ -832,6 +846,21 @@ cmd_composite() {
|
||||
step "Container $vmid is stopped — starting ..."
|
||||
pve pct start "$vmid"
|
||||
fi
|
||||
|
||||
local running_top want_top
|
||||
running_top=$(ct_toplevel "$vmid")
|
||||
want_top=$(expected_toplevel)
|
||||
if [[ -n "$running_top" && -n "$want_top" && "$running_top" != "$want_top" ]]; then
|
||||
warn "Disposable $vmid runs a stale image:"
|
||||
warn " running: $running_top"
|
||||
warn " current: $want_top"
|
||||
step "Destroying $vmid and recreating from current image ..."
|
||||
pve pct destroy "$vmid" --purge --force
|
||||
vmid=$(find_free_vmid)
|
||||
hostname="$CT_HOSTNAME_PREFIX-$vmid"
|
||||
log "Created fresh disposable: $hostname"
|
||||
create_and_start_ct "$vmid"
|
||||
fi
|
||||
fi
|
||||
|
||||
hostname=$(wait_for_ready "$vmid")
|
||||
@@ -867,6 +896,7 @@ cmd_composite() {
|
||||
# ---------------------------------------------------------------------------
|
||||
cmd_check_image() {
|
||||
require ssh "drive PVE"
|
||||
require nix "evaluate the image identity"
|
||||
require_pve
|
||||
phase "check-image — read-only probe of ostemplate on PVE"
|
||||
if check_image; then
|
||||
@@ -970,6 +1000,16 @@ cmd_build_on() {
|
||||
die "Start it on PVE first ('pct start $vmid') or pick another VMID."
|
||||
fi
|
||||
|
||||
# Guard: a disposable cloned from a stale template boots without
|
||||
# sshd/networkd config and hangs the build — refuse instead of hanging.
|
||||
local running_top want_top
|
||||
running_top=$(ct_toplevel "$vmid")
|
||||
want_top=$(expected_toplevel)
|
||||
if [[ -n "$running_top" && -n "$want_top" && "$running_top" != "$want_top" ]]; then
|
||||
fail "Disposable $vmid runs a stale image: $running_top"
|
||||
die "Current flake boots: $want_top — recreate with: $0 destroy-builder $vmid && $0 start-builder"
|
||||
fi
|
||||
|
||||
probe_ssh "$hostname" || { print_debug_info "$vmid" "$hostname"; die "Aborting build-on."; }
|
||||
|
||||
do_build "$vmid" "$hostname" && rc=0 || rc=$?
|
||||
|
||||
Reference in New Issue
Block a user