Compare commits
9 Commits
37d6977223
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| acd16ebc14 | |||
| b9db20d45c | |||
| d8f2392f80 | |||
| be9f5bccf6 | |||
| 27c8db6b29 | |||
| a966a47714 | |||
| c2d2c62364 | |||
| 9eed9f81d4 | |||
| b471966e8a |
Generated
+160
-173
@@ -20,11 +20,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785877886,
|
"lastModified": 1791041429,
|
||||||
"narHash": "sha256-H2CrAlJD9FsUbSEIhPVK3IyVjnK0vSxPruBef17GcBs=",
|
"narHash": "sha256-Y/Q4JtMo6nHB6XS1LPSfK7Y4AnuNl9jci/5sCps1MRc=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "aquamarine",
|
"repo": "aquamarine",
|
||||||
"rev": "1a10fe26a9f7d989c359e6a9ea61aa2e44d06c36",
|
"rev": "52ea11f06dd492f34b3cc0b39a9c805beecafcff",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -40,17 +40,17 @@
|
|||||||
"nixpkgs": "nixpkgs_2"
|
"nixpkgs": "nixpkgs_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1779123398,
|
"lastModified": 1787939266,
|
||||||
"narHash": "sha256-8KYQSisso0bn8Z/S3+lunu3sFsMGhf2QXKu+yEWOP7k=",
|
"narHash": "sha256-daj/t7zeuD8XObNPyR1MAw5SziY8t031oenYC5lsyBY=",
|
||||||
"owner": "LichHunter",
|
"ref": "refs/heads/main",
|
||||||
"repo": "backlog",
|
"rev": "41d18d88aaba1146d09cbe1decd60dcadb8e192e",
|
||||||
"rev": "59507ca9f242950d45d2a6e4d3c10385869344ca",
|
"revCount": 33,
|
||||||
"type": "github"
|
"type": "git",
|
||||||
|
"url": "https://gitea.susano-homelab.duckdns.org/fujin/backlog.git"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "LichHunter",
|
"type": "git",
|
||||||
"repo": "backlog",
|
"url": "https://gitea.susano-homelab.duckdns.org/fujin/backlog.git"
|
||||||
"type": "github"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"base16": {
|
"base16": {
|
||||||
@@ -127,11 +127,11 @@
|
|||||||
"nixpkgs": "nixpkgs_3"
|
"nixpkgs": "nixpkgs_3"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786054218,
|
"lastModified": 1792020613,
|
||||||
"narHash": "sha256-frbTEfqt6fAOcQ4Xk9o1cR5Eq//XhlmqS+3M86ZH1hY=",
|
"narHash": "sha256-31skutSMYGBAvGK5vs6wPGXAV4s0ietf1doMynL9FfI=",
|
||||||
"owner": "9001",
|
"owner": "9001",
|
||||||
"repo": "copyparty",
|
"repo": "copyparty",
|
||||||
"rev": "fbcb7733071560bac490ca60b0bb982a00bbe343",
|
"rev": "8b4593c9a286791eb5dc40862fa24198cea4def7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -147,11 +147,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1781152676,
|
"lastModified": 1789770686,
|
||||||
"narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=",
|
"narHash": "sha256-uZkBR7yHdIKUFB5SZdfgh1qkGfI3XmYmI/lTiquxbck=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "disko",
|
"repo": "disko",
|
||||||
"rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1",
|
"rev": "725ea35e410ad83be4931d1bff7e090eacaf3563",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -166,11 +166,11 @@
|
|||||||
"nixpkgs-stable": "nixpkgs-stable"
|
"nixpkgs-stable": "nixpkgs-stable"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786356557,
|
"lastModified": 1792072733,
|
||||||
"narHash": "sha256-d3FqeM5bfyCvMmdygrQ+stj0MKq/T8O1+NdIHMsspzs=",
|
"narHash": "sha256-Q+c4fV/OShePs5FdPldh00mywqU0Wl1y8zF8ss07aRM=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "emacs-overlay",
|
"repo": "emacs-overlay",
|
||||||
"rev": "c450874f05714ba7229a4c4e7b9a80da1dafc3c2",
|
"rev": "08c72b09663805de26057dfed80b7153846336ca",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -233,11 +233,11 @@
|
|||||||
"nixpkgs-lib": "nixpkgs-lib"
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1777988971,
|
"lastModified": 1787559586,
|
||||||
"narHash": "sha256-qIoWPDs+0/8JecyYgE3gpKQxW/4bLW/gp45vow9ioCQ=",
|
"narHash": "sha256-onL0VLf9vPllmT0H/OlURIU5r5t5WIEl7t4tVNKT0Nw=",
|
||||||
"owner": "hercules-ci",
|
"owner": "hercules-ci",
|
||||||
"repo": "flake-parts",
|
"repo": "flake-parts",
|
||||||
"rev": "0678d8986be1661af6bb555f3489f2fdfc31f6ff",
|
"rev": "9d0d87172c374f89da73c1cfe6d81ae62feac1f1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -337,15 +337,14 @@
|
|||||||
"git-hooks": {
|
"git-hooks": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat",
|
"flake-compat": "flake-compat",
|
||||||
"gitignore": "gitignore",
|
|
||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1776796298,
|
"lastModified": 1787424939,
|
||||||
"narHash": "sha256-PcRvlWayisPSjd0UcRQbhG8Oqw78AcPE6x872cPRHN8=",
|
"narHash": "sha256-O2tBn84NNuHrnqNVxx/XqsXwfYvS1YwBh+7CBnbCYsk=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "git-hooks.nix",
|
"repo": "git-hooks.nix",
|
||||||
"rev": "3cfd774b0a530725a077e17354fbdb87ea1c4aad",
|
"rev": "809414f0cdadf82cf11b06c2b29ba9b3168b3297",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -354,28 +353,6 @@
|
|||||||
"type": "github"
|
"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": {
|
"gnome-shell": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
@@ -424,11 +401,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785531816,
|
"lastModified": 1790819692,
|
||||||
"narHash": "sha256-vkMnV0JIyw+g/NmcfoajlGaAO+9a0ezia+FZohQJrik=",
|
"narHash": "sha256-rvubAPbh3QCliic3sAK+CXTrPCGgJstY52OTs/5H1J4=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "bf9ce9fec78f95f374e8dd3b503863a3ec128ebe",
|
"rev": "c8ecc29e5175452bee4a2aa1ba2383856d795338",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -453,11 +430,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1776511930,
|
"lastModified": 1786464181,
|
||||||
"narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=",
|
"narHash": "sha256-2alOMkLjXANh7unkZnYnCF2K2rApZaOLMoQ3o+VX2CY=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprcursor",
|
"repo": "hyprcursor",
|
||||||
"rev": "39435900785d0c560c6ae8777d29f28617d031ef",
|
"rev": "e4ed7c08123df5af460a0a70961380cbfb872f76",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -482,11 +459,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785855875,
|
"lastModified": 1791066858,
|
||||||
"narHash": "sha256-dpW3UKG2NTboxxYGzOX4nZiH8YI++CpgosHmVaquOEI=",
|
"narHash": "sha256-hLh6ALHrGpgYm8viWCo1pO+ErC22YDGdAvVPcfYsXA8=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprgraphics",
|
"repo": "hyprgraphics",
|
||||||
"rev": "8699c38f0e4a1ca3bfc84f84ba020509ced1f133",
|
"rev": "80c7d00f2236732853e390019ff8d79d17fa3612",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -503,6 +480,7 @@
|
|||||||
"hyprland-guiutils": "hyprland-guiutils",
|
"hyprland-guiutils": "hyprland-guiutils",
|
||||||
"hyprland-protocols": "hyprland-protocols",
|
"hyprland-protocols": "hyprland-protocols",
|
||||||
"hyprlang": "hyprlang",
|
"hyprlang": "hyprlang",
|
||||||
|
"hyprtoolkit": "hyprtoolkit",
|
||||||
"hyprutils": "hyprutils",
|
"hyprutils": "hyprutils",
|
||||||
"hyprwayland-scanner": "hyprwayland-scanner",
|
"hyprwayland-scanner": "hyprwayland-scanner",
|
||||||
"hyprwire": "hyprwire",
|
"hyprwire": "hyprwire",
|
||||||
@@ -512,11 +490,11 @@
|
|||||||
"xdph": "xdph"
|
"xdph": "xdph"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786298417,
|
"lastModified": 1792003461,
|
||||||
"narHash": "sha256-nJZCCA1YXQqnLQSNVrtY+IxK0pnVLV5qJSw79axtpCo=",
|
"narHash": "sha256-sqWBYgjkJd5xTJKd9Jz/SbtrJfY3eTqxyqn1xfH6O00=",
|
||||||
"ref": "refs/heads/main",
|
"ref": "refs/heads/main",
|
||||||
"rev": "f7daeb7f79d48745a2894367e9e73229ac162abe",
|
"rev": "e2ad066c9ffd45ddfbe4dc76d2de16b382fbe3eb",
|
||||||
"revCount": 7721,
|
"revCount": 7911,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/hyprwm/Hyprland"
|
"url": "https://github.com/hyprwm/Hyprland"
|
||||||
},
|
},
|
||||||
@@ -539,7 +517,10 @@
|
|||||||
"hyprland",
|
"hyprland",
|
||||||
"hyprlang"
|
"hyprlang"
|
||||||
],
|
],
|
||||||
"hyprtoolkit": "hyprtoolkit",
|
"hyprtoolkit": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprtoolkit"
|
||||||
|
],
|
||||||
"hyprutils": [
|
"hyprutils": [
|
||||||
"hyprland",
|
"hyprland",
|
||||||
"hyprutils"
|
"hyprutils"
|
||||||
@@ -558,11 +539,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784533903,
|
"lastModified": 1791805511,
|
||||||
"narHash": "sha256-Ee78BRFi+MrmgHmmW+2dZUEI1R3cssEzza0ar3fsNX8=",
|
"narHash": "sha256-p7R3xnbJf6MqvgWAmR86PkHUba97Fotm8RR16tYDF9I=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprland-guiutils",
|
"repo": "hyprland-guiutils",
|
||||||
"rev": "a16ad89ed5fb4192c966018a80c652de8d96f748",
|
"rev": "204f39d6c7a4aca7042587d4638e19cdeccf63bc",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -588,11 +569,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786227627,
|
"lastModified": 1791378645,
|
||||||
"narHash": "sha256-bc4jNVx0agB40xwxJ0r7hAAk5tk5Lm0uKtwP5rNyvZQ=",
|
"narHash": "sha256-9Eix+ZUcI9IUklrtJAD9l/nTcS/Byz7fi94Y3InxS2Y=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprland-plugins",
|
"repo": "hyprland-plugins",
|
||||||
"rev": "faf5ef1bd5916051ed3252463697dd2ae479f629",
|
"rev": "428bfcd1c9ee34965400bb359349f518140c9920",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -613,11 +594,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1772460177,
|
"lastModified": 1791277361,
|
||||||
"narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=",
|
"narHash": "sha256-+dv/mMnrw+uBgY+WW3KpoKQ8Nl3bVLS3lknXsbJ03zQ=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprland-protocols",
|
"repo": "hyprland-protocols",
|
||||||
"rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
|
"rev": "4c27ba9ce104782bf718aabf59df3f503afe7caa",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -642,11 +623,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1777320127,
|
"lastModified": 1786464129,
|
||||||
"narHash": "sha256-Qu+Wf2Bp5qUjyn2YpZNq8a7JyzTGowhT1knrwE38a9U=",
|
"narHash": "sha256-339AkTlpMYSIvFuG0rnR+8Yg4/AZKeJalshJavlnKfg=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprlang",
|
"repo": "hyprlang",
|
||||||
"rev": "090117506ddc3d7f26e650ff344d378c2ec329cc",
|
"rev": "9508458be316a0d70d37ebed1ab725ccd10411ff",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -659,46 +640,39 @@
|
|||||||
"inputs": {
|
"inputs": {
|
||||||
"aquamarine": [
|
"aquamarine": [
|
||||||
"hyprland",
|
"hyprland",
|
||||||
"hyprland-guiutils",
|
|
||||||
"aquamarine"
|
"aquamarine"
|
||||||
],
|
],
|
||||||
"hyprgraphics": [
|
"hyprgraphics": [
|
||||||
"hyprland",
|
"hyprland",
|
||||||
"hyprland-guiutils",
|
|
||||||
"hyprgraphics"
|
"hyprgraphics"
|
||||||
],
|
],
|
||||||
"hyprlang": [
|
"hyprlang": [
|
||||||
"hyprland",
|
"hyprland",
|
||||||
"hyprland-guiutils",
|
|
||||||
"hyprlang"
|
"hyprlang"
|
||||||
],
|
],
|
||||||
"hyprutils": [
|
"hyprutils": [
|
||||||
"hyprland",
|
"hyprland",
|
||||||
"hyprland-guiutils",
|
|
||||||
"hyprutils"
|
"hyprutils"
|
||||||
],
|
],
|
||||||
"hyprwayland-scanner": [
|
"hyprwayland-scanner": [
|
||||||
"hyprland",
|
"hyprland",
|
||||||
"hyprland-guiutils",
|
|
||||||
"hyprwayland-scanner"
|
"hyprwayland-scanner"
|
||||||
],
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"hyprland",
|
"hyprland",
|
||||||
"hyprland-guiutils",
|
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
],
|
],
|
||||||
"systems": [
|
"systems": [
|
||||||
"hyprland",
|
"hyprland",
|
||||||
"hyprland-guiutils",
|
|
||||||
"systems"
|
"systems"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1782554491,
|
"lastModified": 1791849226,
|
||||||
"narHash": "sha256-+p3MlyN/nqRefcf2IckPlGRUn9+hielqpS9XClbLleM=",
|
"narHash": "sha256-q9Kgz/ZSo6ftVliPGQuRZYWYp3eK4vggO0IR6LcsWl0=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprtoolkit",
|
"repo": "hyprtoolkit",
|
||||||
"rev": "bdba25ced39ea39ab004a8f31593ba0b0ff1ca35",
|
"rev": "2907e0d1f8a3a540737a0e738acc40d48ad7ba0d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -719,11 +693,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785843795,
|
"lastModified": 1789968180,
|
||||||
"narHash": "sha256-DFc543bQN94Kt+RsD3Hiu7qCA1uKdqaFJKPMjzANKGU=",
|
"narHash": "sha256-YGRfhw+fJW7oKW3IspoceD34jeokN1KXNxKU6APlFH4=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprutils",
|
"repo": "hyprutils",
|
||||||
"rev": "5a7b8cf221914ce4714407950e4ffbdddcd8b66f",
|
"rev": "95983ee836ff205e615bba67d1f67098e1231941",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -744,11 +718,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1777159683,
|
"lastModified": 1786464033,
|
||||||
"narHash": "sha256-Jxixw6wZphUp+nHYxOKUYSckL17QMBx2d5Zp0rJHr1g=",
|
"narHash": "sha256-QM8Qe4/L8lpdVN4bgwahmi+jyyc4fisseDMe4afcDxA=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprwayland-scanner",
|
"repo": "hyprwayland-scanner",
|
||||||
"rev": "b8632713a6beaf28b56f2a7b0ab2fb7088dbb404",
|
"rev": "62e62c1ca23da17612c6890d4ad2064f575643db",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -773,11 +747,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784465130,
|
"lastModified": 1786464294,
|
||||||
"narHash": "sha256-ak5fWEmWZyax8trkV4aphdvjrbUiSyl6qS+y5GwBS7Y=",
|
"narHash": "sha256-ZQsZ2WvBdkboCIyh8LStDPdAIARmxzn0XMNxxoOhjPE=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprwire",
|
"repo": "hyprwire",
|
||||||
"rev": "7d935bb54674aa0fbd327d2a6888bd0630079ed0",
|
"rev": "4ce7cd6b6128c1ac41caf23c58a30a26b327f9dd",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -791,11 +765,11 @@
|
|||||||
"nixpkgs": "nixpkgs_6"
|
"nixpkgs": "nixpkgs_6"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1783209925,
|
"lastModified": 1791490285,
|
||||||
"narHash": "sha256-NO94JBjSI4jHPaSxXhaZDv3oT7lKpoCzLxjAbWdSjwc=",
|
"narHash": "sha256-JPu+WSXX4TaQnue+UKGMmv2YYCbM5t9Bwwm0fp6lJXc=",
|
||||||
"owner": "Lxtharia",
|
"owner": "Lxtharia",
|
||||||
"repo": "minegrub-theme",
|
"repo": "minegrub-theme",
|
||||||
"rev": "d0aec4523e1800c3196227dc420d326891292508",
|
"rev": "cdd067ebc31ac59e24ae3c99e5b0f05a18eb8a1d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -826,11 +800,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785141927,
|
"lastModified": 1791190188,
|
||||||
"narHash": "sha256-vaPZJgjFL13DlDZcO25XNuAfsOPQm2i9Jmg42dj4wj4=",
|
"narHash": "sha256-d+5+d7r62PZcHc4UFA5HkjxnzBDfVIixsdJX+dwQsyI=",
|
||||||
"owner": "Mic92",
|
"owner": "Mic92",
|
||||||
"repo": "nix-ld",
|
"repo": "nix-ld",
|
||||||
"rev": "1267405dbb13b1b664445ff3654da3a33ee272e4",
|
"rev": "2ba7201c2db8a49b9bd745d240430282f67bbe39",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -880,11 +854,11 @@
|
|||||||
"nixpkgs": "nixpkgs_7"
|
"nixpkgs": "nixpkgs_7"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785232496,
|
"lastModified": 1791721963,
|
||||||
"narHash": "sha256-65EQYIRRpTdpH8lUiB6Mvo5uBkG60aBIzAJuALfx+O0=",
|
"narHash": "sha256-BYhx89XJltnRyQeuDKHVL5eSqbbfAcOKuDts7QRsrxQ=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixos-hardware",
|
"repo": "nixos-hardware",
|
||||||
"rev": "2e790b0a6be8ec2b76174ac0931b8ff11919ec98",
|
"rev": "60a624466c08787ee8303393b7d4752d1826f14f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -896,11 +870,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1770073757,
|
"lastModified": 1782918843,
|
||||||
"narHash": "sha256-Vy+G+F+3E/Tl+GMNgiHl9Pah2DgShmIUBJXmbiQPHbI=",
|
"narHash": "sha256-ETYnV9U7Sr+A45dohzZdfCZKOss4qrTkO+wgNZNvEc0=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "47472570b1e607482890801aeaf29bfb749884f6",
|
"rev": "e8273b29fe1390ec8d4603f2477357555291432e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -912,11 +886,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-lib": {
|
"nixpkgs-lib": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1777168982,
|
"lastModified": 1785031560,
|
||||||
"narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=",
|
"narHash": "sha256-OmshNvn2vupOFpYinLUu+1Dnpu4n7Q5N3ggGVNHpkUI=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixpkgs.lib",
|
"repo": "nixpkgs.lib",
|
||||||
"rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14",
|
"rev": "0e79af5e3d4dcfcd676ab5ba3f95d2e3352e078c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -942,11 +916,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-stable": {
|
"nixpkgs-stable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786201459,
|
"lastModified": 1791883866,
|
||||||
"narHash": "sha256-CiOTEjmwAmG2AWnaIno9YaCJJmpca2FXPhMAsnrolCg=",
|
"narHash": "sha256-yvkDdToRZ4IgPc9tSBzzCYJvTLf8n5eE3rgUkpCuD5A=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "8b8c811c7c2541c30382c5de7ed26be055569c60",
|
"rev": "a033e66ab94a6bedf2c3d58d93a36319d3cbbbaf",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -958,11 +932,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_10": {
|
"nixpkgs_10": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785454630,
|
"lastModified": 1790689126,
|
||||||
"narHash": "sha256-LQy14TZp77TwbQf40gg1V3jo8FwJG0jGDkAH+zRHqg8=",
|
"narHash": "sha256-ilerN1WLSvF+HMjziC/Wv99J5y02maDH+6hZPwsORKg=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "1559d3daa3ecc813a650b79375ea61b6741b8746",
|
"rev": "b4fd65b198c599cbe814fcb9f42d25d021595ec9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -974,11 +948,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778093112,
|
"lastModified": 1787921194,
|
||||||
"narHash": "sha256-18rT4EfMrtYVMQX7AMAEsnv5KhCryLxGolmJ+v+vZdM=",
|
"narHash": "sha256-BgYCc3Gn0MuVOj8XpkisNIiTJ5XXFoQ3Ngs0SkVSiOg=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "cf9db9282552bb3f2743fc9ed3852d239692089a",
|
"rev": "0525b37d4207b34aafae53206e7aac1fdf80dbac",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1004,11 +978,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_4": {
|
"nixpkgs_4": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786106723,
|
"lastModified": 1791956154,
|
||||||
"narHash": "sha256-zDSUbpoeo/9ZmD2+wXnzxoo1+uhL8vxc0b8yuYMKYq0=",
|
"narHash": "sha256-jBYGPi4udQ9uo4KQp9m2J0546nJVQitG15gvZSaVVAs=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238",
|
"rev": "55bfb4d7437bd4e09ab7cba58a43bd68eb310044",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1020,11 +994,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_5": {
|
"nixpkgs_5": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786106723,
|
"lastModified": 1791734076,
|
||||||
"narHash": "sha256-zDSUbpoeo/9ZmD2+wXnzxoo1+uhL8vxc0b8yuYMKYq0=",
|
"narHash": "sha256-i5qk1kLiit98rRbh1AXmWBNT9QXC/y4l5Wk/u5EdpDQ=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238",
|
"rev": "7fd4004d0511991fff3a0524856a9be09e28c5f0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1052,11 +1026,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_7": {
|
"nixpkgs_7": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1767892417,
|
"lastModified": 1789546076,
|
||||||
"narHash": "sha256-8bW3q88CEg2u4hSP66Vf4lpbLonHz7hqDNBMcCY7E9U=",
|
"narHash": "sha256-vWkSk5bbfTqdtMoSgD9FshACO8JCvXTFi+3cqEp0mH0=",
|
||||||
"rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba",
|
"rev": "b1b875982b17dabde9b4a37f3e229e74913e6db3",
|
||||||
"type": "tarball",
|
"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": {
|
"original": {
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
@@ -1081,11 +1055,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_9": {
|
"nixpkgs_9": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775036866,
|
"lastModified": 1789149629,
|
||||||
"narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=",
|
"narHash": "sha256-H6GwaZzZf+4npqv0tph94w9tZddSjFjmQrVsW0z78uk=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "6201e203d09599479a3b3450ed24fa81537ebc4e",
|
"rev": "eaad089433ca2bb662274377d33df3d0e51ef28b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1102,11 +1076,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786338498,
|
"lastModified": 1792070304,
|
||||||
"narHash": "sha256-qy3Cheg/FQ9ZaBPTIgdq4IkmkNtC6XBpmtC8nT+wU/Y=",
|
"narHash": "sha256-gCF1P9r0UzPah0fqBTg2nVuxuuNnRxnYYHklvq8VKZI=",
|
||||||
"owner": "noctalia-dev",
|
"owner": "noctalia-dev",
|
||||||
"repo": "noctalia",
|
"repo": "noctalia",
|
||||||
"rev": "45e721ba0fb47d6efc00ca47e156237954037c99",
|
"rev": "a33122c4208a385e19c9a252e65e2751b2c44fbb",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1149,11 +1123,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784288435,
|
"lastModified": 1791909798,
|
||||||
"narHash": "sha256-ReRHaLgr/uVqdD8afFSn+myXIfpHeOhP0yYe0TJqAA8=",
|
"narHash": "sha256-VAhpCOmrun/KXimYfR8NM88bciKCui7CqHHhThSzgag=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "git-hooks.nix",
|
"repo": "git-hooks.nix",
|
||||||
"rev": "43b3c1ab9d40fb1dbb008f451988a91e375825e9",
|
"rev": "1ba1dbfe28738c9a71c266be6efa5b89e75491a9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1178,11 +1152,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1773870109,
|
"lastModified": 1788149501,
|
||||||
"narHash": "sha256-ZoTdqZP03DcdoyxvpFHCAek4bkPUTUPUF3oCCgc3dP4=",
|
"narHash": "sha256-XKJP4KvhawV3pyVfraX3sflz05Rp7KP74gRt6QqKjNE=",
|
||||||
"owner": "pyproject-nix",
|
"owner": "pyproject-nix",
|
||||||
"repo": "build-system-pkgs",
|
"repo": "build-system-pkgs",
|
||||||
"rev": "b6e74f433b02fa4b8a7965ee24680f4867e2926f",
|
"rev": "150839ac67b5a34db56a55e8f6b7099a4e7878ab",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1199,11 +1173,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775439158,
|
"lastModified": 1788394333,
|
||||||
"narHash": "sha256-NHY9SJNU019n+8NCabBDtmuzRFeE2gZlYKHowp9bV24=",
|
"narHash": "sha256-xYOP0Xym1eVGUaHFx+eJEaycFGoiCbst3fZf0xFHP78=",
|
||||||
"owner": "pyproject-nix",
|
"owner": "pyproject-nix",
|
||||||
"repo": "pyproject.nix",
|
"repo": "pyproject.nix",
|
||||||
"rev": "fb6b728260f3f32761367e9fd1e1a25b4245bcd0",
|
"rev": "6a8a7881d75b6f98967e7b8069f4ead331384301",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1244,11 +1218,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1783174389,
|
"lastModified": 1792056300,
|
||||||
"narHash": "sha256-aCWC8ngycU7OdJrU2+Je3qf+1a2ykuBvpPhZT/9tXMc=",
|
"narHash": "sha256-YU1LjDe1o2Ymg5zEiCHbmMXLkDCtxHQRiVqZ3nC5GGk=",
|
||||||
"owner": "Mic92",
|
"owner": "Mic92",
|
||||||
"repo": "sops-nix",
|
"repo": "sops-nix",
|
||||||
"rev": "f1406619a3884cd5c47992a70b8b35c9c0fcb4c9",
|
"rev": "44931708c62937c2b1bf7953902989fa5bb9ee1b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1265,11 +1239,11 @@
|
|||||||
"nix-filter": "nix-filter"
|
"nix-filter": "nix-filter"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786046605,
|
"lastModified": 1790431438,
|
||||||
"narHash": "sha256-+ROT5vBruI7d0B2RKbpl2dT76Zf90urrOxfrhzfaVr4=",
|
"narHash": "sha256-D0pKfzVlRz8VnLIZVaPtr2d+LHYspICllgIz+oQlw98=",
|
||||||
"owner": "zjeffer",
|
"owner": "zjeffer",
|
||||||
"repo": "split-monitor-workspaces",
|
"repo": "split-monitor-workspaces",
|
||||||
"rev": "3c2020a1f574aaec17ffe39e73468b73643990e3",
|
"rev": "f26d624c2638d0661f3e0352a634650bfd08296d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1298,15 +1272,16 @@
|
|||||||
"tinted-zed": "tinted-zed"
|
"tinted-zed": "tinted-zed"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786216702,
|
"lastModified": 1790322631,
|
||||||
"narHash": "sha256-fOOmw9tUYeqWVnK2w2NiuMTmGIbluj8xiBFTTFDCcEE=",
|
"narHash": "sha256-/EDdHSkJwOQUNDdlLXhC1FyMuERiL/fkPAF/LWZy+HY=",
|
||||||
"owner": "nix-community",
|
"owner": "Azd325",
|
||||||
"repo": "stylix",
|
"repo": "stylix",
|
||||||
"rev": "b67debfd2db1eb1f0fd8740b950f598bbaf74b8f",
|
"rev": "a1198612edba320a39c5cc5c4ab30dbee6fd66ea",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"owner": "Azd325",
|
||||||
|
"ref": "rofi-settings-font",
|
||||||
"repo": "stylix",
|
"repo": "stylix",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -1366,11 +1341,11 @@
|
|||||||
"uv2nix": "uv2nix"
|
"uv2nix": "uv2nix"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1776248910,
|
"lastModified": 1791196392,
|
||||||
"narHash": "sha256-MrwY8D48uZMTI/D6TEBmG1osklyAlqdtYeH+1cBeRNU=",
|
"narHash": "sha256-BQ2f4gEtc2An1t9xac66C+ZIPEopJotoH2OhNcm5eLg=",
|
||||||
"owner": "LichHunter",
|
"owner": "LichHunter",
|
||||||
"repo": "thefuck",
|
"repo": "thefuck",
|
||||||
"rev": "7cac5ac8709dade676264af51afbe7a4d3c84582",
|
"rev": "7a102bb398407e57aaf64f4e5123f47256b11c04",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1445,11 +1420,11 @@
|
|||||||
},
|
},
|
||||||
"unstable": {
|
"unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786106723,
|
"lastModified": 1791956154,
|
||||||
"narHash": "sha256-zDSUbpoeo/9ZmD2+wXnzxoo1+uhL8vxc0b8yuYMKYq0=",
|
"narHash": "sha256-jBYGPi4udQ9uo4KQp9m2J0546nJVQitG15gvZSaVVAs=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238",
|
"rev": "55bfb4d7437bd4e09ab7cba58a43bd68eb310044",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1466,11 +1441,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786356609,
|
"lastModified": 1792082440,
|
||||||
"narHash": "sha256-ou8fYz5w9yhXC8YbvvExybFIa19MyW5G/8dEPqa90hM=",
|
"narHash": "sha256-TppYgfBkqAs4IaO3AV+t4zlH9FZIL/AdJFI+PagXwVw=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "c30c7955cec30d664a9baced6bc0112e263d4647",
|
"rev": "6d9c00bad9a3c763f842c2b08193e5844bdcedfa",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1492,11 +1467,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775386139,
|
"lastModified": 1788001239,
|
||||||
"narHash": "sha256-n82p7WF+dYxf5r01pXlqbk8CAF7xX0Tk7wAcmMjkuhc=",
|
"narHash": "sha256-AELmsXPI546MhbC/ZXC7WRUkCz7d4rqKTHUmliIgPpI=",
|
||||||
"owner": "pyproject-nix",
|
"owner": "pyproject-nix",
|
||||||
"repo": "uv2nix",
|
"repo": "uv2nix",
|
||||||
"rev": "3cffcee173635d553e213d11418690b5290ff1c9",
|
"rev": "7f9c6b613d2e749e54854b1d60ab6a2192db889e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1525,6 +1500,14 @@
|
|||||||
},
|
},
|
||||||
"xdph": {
|
"xdph": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"aquamarine": [
|
||||||
|
"hyprland",
|
||||||
|
"aquamarine"
|
||||||
|
],
|
||||||
|
"hyprgraphics": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprgraphics"
|
||||||
|
],
|
||||||
"hyprland-protocols": [
|
"hyprland-protocols": [
|
||||||
"hyprland",
|
"hyprland",
|
||||||
"hyprland-protocols"
|
"hyprland-protocols"
|
||||||
@@ -1533,6 +1516,10 @@
|
|||||||
"hyprland",
|
"hyprland",
|
||||||
"hyprlang"
|
"hyprlang"
|
||||||
],
|
],
|
||||||
|
"hyprtoolkit": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprtoolkit"
|
||||||
|
],
|
||||||
"hyprutils": [
|
"hyprutils": [
|
||||||
"hyprland",
|
"hyprland",
|
||||||
"hyprutils"
|
"hyprutils"
|
||||||
@@ -1551,11 +1538,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786032767,
|
"lastModified": 1791822904,
|
||||||
"narHash": "sha256-C5K27sF/jaQe1BgB1/575r01oTAvw6mrDWPS1qUl6X0=",
|
"narHash": "sha256-gsxPblA9YV+By4SxXWkj2HGGk7MKGxiNj/T9bU4q31U=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "xdg-desktop-portal-hyprland",
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
"rev": "688feb3d88404598f12440a668136e74044391de",
|
"rev": "0121b2e3f85c7ebf6280173f1054f7e5606262d1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1570,11 +1557,11 @@
|
|||||||
"nixpkgs": "nixpkgs_10"
|
"nixpkgs": "nixpkgs_10"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786347712,
|
"lastModified": 1792047775,
|
||||||
"narHash": "sha256-yH+jWXH2TVd5h3J5KoZiE8/4O4HqoggfB0zl9uVj39w=",
|
"narHash": "sha256-Ks46+ZukSOvdgmextucbLykzpAmygNZ2I+HWxCe03ok=",
|
||||||
"owner": "0xc000022070",
|
"owner": "0xc000022070",
|
||||||
"repo": "zen-browser-flake",
|
"repo": "zen-browser-flake",
|
||||||
"rev": "945efbc704b7f8c1731a922aabbc5d95edc9eb74",
|
"rev": "9342d127aa8c585e82f3f57ddb25800fd546029f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
@@ -41,7 +41,11 @@
|
|||||||
emacs-overlay.url = "github:nix-community/emacs-overlay/master";
|
emacs-overlay.url = "github:nix-community/emacs-overlay/master";
|
||||||
|
|
||||||
stylix = {
|
stylix = {
|
||||||
url = "github:nix-community/stylix";
|
# TODO: revert to github:nix-community/stylix once
|
||||||
|
# https://github.com/nix-community/stylix/pull/2501 is merged;
|
||||||
|
# stylix master still sets `programs.rofi.font`, which
|
||||||
|
# home-manager renamed to `programs.rofi.settings.font`.
|
||||||
|
url = "github:Azd325/stylix/rofi-settings-font";
|
||||||
inputs.nixpkgs.follows = "unstable";
|
inputs.nixpkgs.follows = "unstable";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -70,7 +74,7 @@
|
|||||||
|
|
||||||
thefuck.url = "github:LichHunter/thefuck";
|
thefuck.url = "github:LichHunter/thefuck";
|
||||||
|
|
||||||
backlog.url = "github:LichHunter/backlog";
|
backlog.url = "git+https://gitea.susano-homelab.duckdns.org/fujin/backlog.git";
|
||||||
|
|
||||||
noctalia = {
|
noctalia = {
|
||||||
url = "github:noctalia-dev/noctalia";
|
url = "github:noctalia-dev/noctalia";
|
||||||
@@ -213,19 +217,35 @@
|
|||||||
"fujin";
|
"fujin";
|
||||||
};
|
};
|
||||||
|
|
||||||
packages.x86_64-linux = {
|
packages.x86_64-linux =
|
||||||
nixos-lxc = (nixpkgs.lib.nixosSystem {
|
let
|
||||||
system = "x86_64-linux";
|
builderSystem = nixpkgs.lib.nixosSystem {
|
||||||
modules = [
|
system = "x86_64-linux";
|
||||||
./machines/builder
|
modules = [
|
||||||
({ modulesPath, ... }: {
|
./machines/builder
|
||||||
imports = [ (modulesPath + "/virtualisation/proxmox-lxc.nix") ];
|
({ modulesPath, ... }: {
|
||||||
})
|
imports = [ (modulesPath + "/virtualisation/proxmox-lxc.nix") ];
|
||||||
];
|
})
|
||||||
specialArgs = {
|
];
|
||||||
inherit inputs;
|
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 {
|
izanami-proxmox = nixos-generators.nixosGenerate {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ in
|
|||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
programs.noctalia = {
|
programs.noctalia = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = inputs.noctalia.packages.${pkgs.system}.default;
|
package = inputs.noctalia.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
||||||
systemd.enable = true;
|
systemd.enable = true;
|
||||||
|
|
||||||
customPalettes.stylix = {
|
customPalettes.stylix = {
|
||||||
@@ -107,7 +107,7 @@ in
|
|||||||
|
|
||||||
widget = {
|
widget = {
|
||||||
clock = {
|
clock = {
|
||||||
format = "{:%H:%M}";
|
format = "{:%a %d %b, %H:%M}";
|
||||||
tooltip_format = "{:%A, %B %d, %Y}";
|
tooltip_format = "{:%A, %B %d, %Y}";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -121,7 +121,7 @@ in
|
|||||||
|
|
||||||
ram = {
|
ram = {
|
||||||
type = "sysmon";
|
type = "sysmon";
|
||||||
stat = "memory_usage";
|
stat = "ram_pct";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Microphone — named volume widget with input device
|
# Microphone — named volume widget with input device
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ in {
|
|||||||
options.dov.browser.zen.enable = mkEnableOption "zen config";
|
options.dov.browser.zen.enable = mkEnableOption "zen config";
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.packages = with pkgs; [
|
home.packages = [
|
||||||
inputs.zen-browser.packages."${system}".default
|
inputs.zen-browser.packages."${pkgs.stdenv.hostPlatform.system}".default
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -215,6 +215,7 @@ in {
|
|||||||
stylix = {
|
stylix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
autoEnable = true;
|
autoEnable = true;
|
||||||
|
overlays.enable = false;
|
||||||
# Base scheme/polarity; overridable per specialisation below.
|
# Base scheme/polarity; overridable per specialisation below.
|
||||||
base16Scheme = mkDefault themeVariants.${baseVariant}.scheme;
|
base16Scheme = mkDefault themeVariants.${baseVariant}.scheme;
|
||||||
polarity = mkDefault themeVariants.${baseVariant}.polarity;
|
polarity = mkDefault themeVariants.${baseVariant}.polarity;
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ in {
|
|||||||
nix = {
|
nix = {
|
||||||
settings = {
|
settings = {
|
||||||
# Enable flakes and new 'nix' command
|
# Enable flakes and new 'nix' command
|
||||||
experimental-features = "nix-command flakes";
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
# Opinionated: disable global registry
|
# Opinionated: disable global registry
|
||||||
flake-registry = "";
|
flake-registry = "";
|
||||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ in {
|
|||||||
nix = {
|
nix = {
|
||||||
settings = {
|
settings = {
|
||||||
# Enable flakes and new 'nix' command
|
# Enable flakes and new 'nix' command
|
||||||
experimental-features = "nix-command flakes";
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
# Opinionated: disable global registry
|
# Opinionated: disable global registry
|
||||||
flake-registry = "";
|
flake-registry = "";
|
||||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ in {
|
|||||||
nix = {
|
nix = {
|
||||||
settings = {
|
settings = {
|
||||||
# Enable flakes and new 'nix' command
|
# Enable flakes and new 'nix' command
|
||||||
experimental-features = "nix-command flakes";
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
# Opinionated: disable global registry
|
# Opinionated: disable global registry
|
||||||
flake-registry = "";
|
flake-registry = "";
|
||||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ in
|
|||||||
nix = {
|
nix = {
|
||||||
settings = {
|
settings = {
|
||||||
# Enable flakes and new 'nix' command
|
# Enable flakes and new 'nix' command
|
||||||
experimental-features = "nix-command flakes";
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
# Opinionated: disable global registry
|
# Opinionated: disable global registry
|
||||||
flake-registry = "";
|
flake-registry = "";
|
||||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ in {
|
|||||||
|
|
||||||
nix = {
|
nix = {
|
||||||
settings = {
|
settings = {
|
||||||
experimental-features = "nix-command flakes";
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
flake-registry = "";
|
flake-registry = "";
|
||||||
nix-path = config.nix.nixPath;
|
nix-path = config.nix.nixPath;
|
||||||
|
|
||||||
|
|||||||
@@ -66,9 +66,11 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
networking = {
|
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 = [
|
nameservers = [
|
||||||
"192.168.1.2" # PyHole
|
"192.168.100.1" # OPNsense Unbound
|
||||||
"192.168.1.1" # Router
|
|
||||||
"1.1.1.1"
|
"1.1.1.1"
|
||||||
];
|
];
|
||||||
dhcpcd.extraConfig = ''
|
dhcpcd.extraConfig = ''
|
||||||
@@ -112,6 +114,12 @@
|
|||||||
|
|
||||||
dov = {
|
dov = {
|
||||||
development.emacs.enable = true;
|
development.emacs.enable = true;
|
||||||
|
development.qoder = {
|
||||||
|
enable = false;
|
||||||
|
version = "1.19.2";
|
||||||
|
hash = "sha256-/P3UStsRHKKWC1xET9SL23E0CUPxQ5DkmWFco+dH37A="; # nix store prefetch-file --json https://download.qoder.com/release/latest/qoder_amd64.deb | jq -r .hash
|
||||||
|
};
|
||||||
|
development.android.enable = true;
|
||||||
|
|
||||||
virtualisation.docker.enable = true;
|
virtualisation.docker.enable = true;
|
||||||
virtualisation.incus.enable = true;
|
virtualisation.incus.enable = true;
|
||||||
@@ -138,7 +146,6 @@
|
|||||||
# option exists for fujin's home configuration.
|
# option exists for fujin's home configuration.
|
||||||
sharedModules = [
|
sharedModules = [
|
||||||
inputs.stylix.homeModules.stylix
|
inputs.stylix.homeModules.stylix
|
||||||
inputs.noctalia.homeModules.default
|
|
||||||
];
|
];
|
||||||
|
|
||||||
users."${username}" = { imports = [ ./home.nix ] ++ extraHomeModules; };
|
users."${username}" = { imports = [ ./home.nix ] ++ extraHomeModules; };
|
||||||
|
|||||||
@@ -42,6 +42,12 @@
|
|||||||
;; change `org-directory'. It must be set before org loads!
|
;; change `org-directory'. It must be set before org loads!
|
||||||
(setq org-directory "~/org/")
|
(setq org-directory "~/org/")
|
||||||
|
|
||||||
|
;; Use bash, not nu, for non-interactive subprocesses (compile, shell-command,
|
||||||
|
;; lsp-mode installers). Nu doesn't unescape Emacs's POSIX-style backslash
|
||||||
|
;; escaping, which corrupts args like -Djdt.download.url=...?...=... .
|
||||||
|
;; vterm keeps using nu (see vterm-shell below).
|
||||||
|
(setq shell-file-name "/run/current-system/sw/bin/bash")
|
||||||
|
|
||||||
|
|
||||||
;; Whenever you reconfigure a package, make sure to wrap your config in an
|
;; Whenever you reconfigure a package, make sure to wrap your config in an
|
||||||
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
|
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
|
||||||
|
|||||||
@@ -152,13 +152,14 @@
|
|||||||
wl-clipboard
|
wl-clipboard
|
||||||
#cloudflared
|
#cloudflared
|
||||||
kdePackages.okular #pdf tool
|
kdePackages.okular #pdf tool
|
||||||
|
kdePackages.gwenview # image viewer
|
||||||
#nextcloud-client
|
#nextcloud-client
|
||||||
|
|
||||||
#music
|
#music
|
||||||
#mpd
|
#mpd
|
||||||
#mpv
|
#mpv
|
||||||
#mpc-cli
|
#mpc-cli
|
||||||
] ++ [ inputs.thefuck.packages.${pkgs.system}.default ];
|
] ++ [ inputs.thefuck.packages.${pkgs.stdenv.hostPlatform.system}.default ];
|
||||||
|
|
||||||
# Stylix theming is driven by `dov.dynamic-theme` (hm-modules/theme),
|
# Stylix theming is driven by `dov.dynamic-theme` (hm-modules/theme),
|
||||||
# which sets `enable`, `base16Scheme` and `polarity` + specialisations.
|
# which sets `enable`, `base16Scheme` and `polarity` + specialisations.
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ in {
|
|||||||
nix = {
|
nix = {
|
||||||
settings = {
|
settings = {
|
||||||
# Enable flakes and new 'nix' command
|
# Enable flakes and new 'nix' command
|
||||||
experimental-features = "nix-command flakes";
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
# Opinionated: disable global registry
|
# Opinionated: disable global registry
|
||||||
flake-registry = "";
|
flake-registry = "";
|
||||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ in {
|
|||||||
nix = {
|
nix = {
|
||||||
settings = {
|
settings = {
|
||||||
# Enable flakes and new 'nix' command
|
# Enable flakes and new 'nix' command
|
||||||
experimental-features = "nix-command flakes";
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
# Opinionated: disable global registry
|
# Opinionated: disable global registry
|
||||||
flake-registry = "";
|
flake-registry = "";
|
||||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ in {
|
|||||||
nix = {
|
nix = {
|
||||||
settings = {
|
settings = {
|
||||||
# Enable flakes and new 'nix' command
|
# Enable flakes and new 'nix' command
|
||||||
experimental-features = "nix-command flakes";
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
# Opinionated: disable global registry
|
# Opinionated: disable global registry
|
||||||
flake-registry = "";
|
flake-registry = "";
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ in
|
|||||||
nix = {
|
nix = {
|
||||||
settings = {
|
settings = {
|
||||||
# Enable flakes and new 'nix' command
|
# Enable flakes and new 'nix' command
|
||||||
experimental-features = "nix-command flakes";
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
# Opinionated: disable global registry
|
# Opinionated: disable global registry
|
||||||
flake-registry = "";
|
flake-registry = "";
|
||||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ in
|
|||||||
nix = {
|
nix = {
|
||||||
settings = {
|
settings = {
|
||||||
# Enable flakes and new 'nix' command
|
# Enable flakes and new 'nix' command
|
||||||
experimental-features = "nix-command flakes";
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
# Opinionated: disable global registry
|
# Opinionated: disable global registry
|
||||||
flake-registry = "";
|
flake-registry = "";
|
||||||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
username,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.dov.development.android;
|
||||||
|
|
||||||
|
mtk-udev-rules = pkgs.writeTextFile {
|
||||||
|
name = "mtk-udev-rules";
|
||||||
|
destination = "/etc/udev/rules.d/60-mtk.rules";
|
||||||
|
text = ''
|
||||||
|
# MediaTek BROM (0003), Preloader VCOM (2000/2001), META (6000)
|
||||||
|
SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", MODE="0666", TAG+="uaccess"
|
||||||
|
# Oppo/Realme fastboot + adb
|
||||||
|
SUBSYSTEM=="usb", ATTR{idVendor}=="22d9", MODE="0666", TAG+="uaccess"
|
||||||
|
|
||||||
|
# keep ModemManager's hands off the preloader port
|
||||||
|
SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
SUBSYSTEM=="tty", ATTRS{idVendor}=="0e8d", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.dov.development.android = {
|
||||||
|
enable = lib.mkEnableOption "Android and MediaTek flashing tools";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
android-tools
|
||||||
|
mtkclient
|
||||||
|
usbutils
|
||||||
|
];
|
||||||
|
|
||||||
|
users.users.${username}.extraGroups = [ "dialout" ];
|
||||||
|
|
||||||
|
services.udev.packages = [ mtk-udev-rules ];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -4,5 +4,7 @@
|
|||||||
imports = [
|
imports = [
|
||||||
./nix-vscode-server
|
./nix-vscode-server
|
||||||
./emacs
|
./emacs
|
||||||
|
./qoder
|
||||||
|
./android
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ in {
|
|||||||
## Emacs itself
|
## Emacs itself
|
||||||
binutils # native-comp needs 'as', provided by this
|
binutils # native-comp needs 'as', provided by this
|
||||||
# 28.2 + native-comp
|
# 28.2 + native-comp
|
||||||
((emacsPackagesFor emacs30).emacsWithPackages (epkgs: [
|
((emacsPackagesFor emacs).emacsWithPackages (epkgs: [
|
||||||
epkgs.vterm
|
epkgs.vterm
|
||||||
epkgs.treesit-grammars.with-all-grammars
|
epkgs.treesit-grammars.with-all-grammars
|
||||||
epkgs.mu4e
|
epkgs.mu4e
|
||||||
@@ -39,13 +39,13 @@ in {
|
|||||||
|
|
||||||
## Module dependencies
|
## Module dependencies
|
||||||
# :checkers spell
|
# :checkers spell
|
||||||
(aspellWithDicts (ds: with ds; [ en en-computers en-science ]))
|
(aspellWithDicts (ds: with ds; [ en ]))
|
||||||
# :tools editorconfig
|
# :tools editorconfig
|
||||||
editorconfig-core-c # per-project style config
|
editorconfig-core-c # per-project style config
|
||||||
# :tools lookup & :lang org +roam
|
# :tools lookup & :lang org +roam
|
||||||
sqlite
|
sqlite
|
||||||
# :lang latex & :lang org (latex previews)
|
# :lang latex & :lang org (latex previews)
|
||||||
texlive.combined.scheme-medium
|
texliveMedium
|
||||||
# :lang nix
|
# :lang nix
|
||||||
nixfmt
|
nixfmt
|
||||||
#nixd
|
#nixd
|
||||||
|
|||||||
@@ -0,0 +1,92 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.dov.development.qoder;
|
||||||
|
qoder = pkgs.callPackage ./package.nix {
|
||||||
|
inherit (cfg)
|
||||||
|
version
|
||||||
|
url
|
||||||
|
hash
|
||||||
|
extraFlags
|
||||||
|
;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.dov.development.qoder = {
|
||||||
|
enable = mkEnableOption "Qoder IDE (unfree, repackaged from the upstream .deb)";
|
||||||
|
|
||||||
|
version = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "1.19.2";
|
||||||
|
description = ''
|
||||||
|
Label only — upstream publishes a rolling "latest" URL, so this is
|
||||||
|
just what the store path is called. Bump it together with `hash`.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
url = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "https://download.qoder.com/release/latest/qoder_amd64.deb";
|
||||||
|
description = "Upstream .deb to repackage.";
|
||||||
|
};
|
||||||
|
|
||||||
|
hash = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "";
|
||||||
|
example = "sha256-0000000000000000000000000000000000000000000=";
|
||||||
|
description = ''
|
||||||
|
SRI hash of the .deb. Refresh whenever upstream ships a new build:
|
||||||
|
nix store prefetch-file --json <url> | jq -r .hash
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
extraFlags = mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [ ];
|
||||||
|
example = [ "--disable-gpu-sandbox" ];
|
||||||
|
description = "Extra Electron/Chromium flags appended to the wrapper.";
|
||||||
|
};
|
||||||
|
|
||||||
|
keyring = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = true;
|
||||||
|
description = ''
|
||||||
|
Enable gnome-keyring. Qoder is wrapped with
|
||||||
|
--password-store=gnome-libsecret; without a running secret service
|
||||||
|
the sign-in token is lost on every restart.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable (mkMerge [
|
||||||
|
{
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion = cfg.hash != "";
|
||||||
|
message = ''
|
||||||
|
dov.development.qoder.hash is empty. Prefetch the .deb first:
|
||||||
|
nix store prefetch-file --json ${cfg.url} | jq -r .hash
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.systemPackages = [ qoder ];
|
||||||
|
}
|
||||||
|
|
||||||
|
(mkIf cfg.keyring {
|
||||||
|
services.gnome.gnome-keyring.enable = true;
|
||||||
|
|
||||||
|
# gnome-keyring enables gcr-ssh-agent by default, which asserts against
|
||||||
|
# programs.ssh.startAgent from dov.yubikey. We only want the secret
|
||||||
|
# service here — SSH keys stay with the OpenSSH agent.
|
||||||
|
services.gnome.gcr-ssh-agent.enable = false;
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
}
|
||||||
@@ -0,0 +1,204 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
fetchurl,
|
||||||
|
autoPatchelfHook,
|
||||||
|
makeWrapper,
|
||||||
|
wrapGAppsHook3,
|
||||||
|
zstd,
|
||||||
|
|
||||||
|
alsa-lib,
|
||||||
|
at-spi2-atk,
|
||||||
|
at-spi2-core,
|
||||||
|
atk,
|
||||||
|
cairo,
|
||||||
|
cups,
|
||||||
|
dbus,
|
||||||
|
expat,
|
||||||
|
fontconfig,
|
||||||
|
freetype,
|
||||||
|
gdk-pixbuf,
|
||||||
|
glib,
|
||||||
|
gtk3,
|
||||||
|
krb5,
|
||||||
|
libdrm,
|
||||||
|
libgbm,
|
||||||
|
libglvnd,
|
||||||
|
libnotify,
|
||||||
|
libsecret,
|
||||||
|
libuuid,
|
||||||
|
libxkbcommon,
|
||||||
|
nspr,
|
||||||
|
nss,
|
||||||
|
pango,
|
||||||
|
systemd,
|
||||||
|
zlib,
|
||||||
|
|
||||||
|
libx11,
|
||||||
|
libxcb,
|
||||||
|
libxcomposite,
|
||||||
|
libxcursor,
|
||||||
|
libxdamage,
|
||||||
|
libxext,
|
||||||
|
libxfixes,
|
||||||
|
libxi,
|
||||||
|
libxkbfile,
|
||||||
|
libxrandr,
|
||||||
|
libxrender,
|
||||||
|
libxscrnsaver,
|
||||||
|
libxshmfence,
|
||||||
|
libxtst,
|
||||||
|
|
||||||
|
version,
|
||||||
|
url,
|
||||||
|
hash,
|
||||||
|
passwordStore ? "gnome-libsecret",
|
||||||
|
extraFlags ? [ ],
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
runtimeLibs = [
|
||||||
|
alsa-lib
|
||||||
|
at-spi2-atk
|
||||||
|
at-spi2-core
|
||||||
|
atk
|
||||||
|
cairo
|
||||||
|
cups
|
||||||
|
dbus
|
||||||
|
expat
|
||||||
|
fontconfig
|
||||||
|
freetype
|
||||||
|
gdk-pixbuf
|
||||||
|
glib
|
||||||
|
gtk3
|
||||||
|
krb5
|
||||||
|
libdrm
|
||||||
|
libgbm
|
||||||
|
libglvnd
|
||||||
|
libnotify
|
||||||
|
libsecret
|
||||||
|
libuuid
|
||||||
|
libxkbcommon
|
||||||
|
nspr
|
||||||
|
nss
|
||||||
|
pango
|
||||||
|
zlib
|
||||||
|
(lib.getLib systemd)
|
||||||
|
|
||||||
|
libx11
|
||||||
|
libxcb
|
||||||
|
libxcomposite
|
||||||
|
libxcursor
|
||||||
|
libxdamage
|
||||||
|
libxext
|
||||||
|
libxfixes
|
||||||
|
libxi
|
||||||
|
libxkbfile
|
||||||
|
libxrandr
|
||||||
|
libxrender
|
||||||
|
libxscrnsaver
|
||||||
|
libxshmfence
|
||||||
|
libxtst
|
||||||
|
];
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
|
pname = "qoder";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
inherit url hash;
|
||||||
|
name = "qoder-${version}_amd64.deb";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
autoPatchelfHook
|
||||||
|
makeWrapper
|
||||||
|
wrapGAppsHook3
|
||||||
|
zstd
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = runtimeLibs;
|
||||||
|
|
||||||
|
# dlopen'ed at runtime, so autoPatchelf can't see them in the ELF headers
|
||||||
|
runtimeDependencies = [
|
||||||
|
(lib.getLib systemd)
|
||||||
|
libglvnd
|
||||||
|
libgbm
|
||||||
|
];
|
||||||
|
|
||||||
|
dontConfigure = true;
|
||||||
|
dontBuild = true;
|
||||||
|
dontWrapGApps = true; # wrapped by hand in preFixup
|
||||||
|
|
||||||
|
# `ar` comes from stdenv. --no-same-permissions keeps the setuid bit on
|
||||||
|
# chrome-sandbox from blowing up the build inside the nix sandbox.
|
||||||
|
unpackPhase = ''
|
||||||
|
runHook preUnpack
|
||||||
|
ar x $src
|
||||||
|
tar -xf data.tar.* --no-same-permissions --no-same-owner
|
||||||
|
runHook postUnpack
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
mkdir -p $out/share/qoder $out/bin
|
||||||
|
|
||||||
|
if [ -d usr/share/qoder ]; then
|
||||||
|
cp -r usr/share/qoder/. $out/share/qoder/
|
||||||
|
elif [ -d opt/Qoder ]; then
|
||||||
|
cp -r opt/Qoder/. $out/share/qoder/
|
||||||
|
elif [ -d opt/qoder ]; then
|
||||||
|
cp -r opt/qoder/. $out/share/qoder/
|
||||||
|
else
|
||||||
|
echo "unexpected .deb layout:" >&2
|
||||||
|
find . -maxdepth 3 -type d >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for d in applications icons pixmaps; do
|
||||||
|
if [ -d "usr/share/$d" ]; then
|
||||||
|
mkdir -p "$out/share/$d"
|
||||||
|
cp -r "usr/share/$d/." "$out/share/$d/"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Store paths can never be setuid — drop the helper, use --no-sandbox.
|
||||||
|
rm -f $out/share/qoder/chrome-sandbox
|
||||||
|
|
||||||
|
if [ ! -x $out/share/qoder/qoder ]; then
|
||||||
|
echo "main binary not where expected:" >&2
|
||||||
|
ls $out/share/qoder >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for f in $out/share/applications/*.desktop; do
|
||||||
|
[ -e "$f" ] || continue
|
||||||
|
substituteInPlace "$f" \
|
||||||
|
--replace-quiet "/usr/share/qoder/qoder" "$out/bin/qoder" \
|
||||||
|
--replace-quiet "/opt/Qoder/qoder" "$out/bin/qoder" \
|
||||||
|
--replace-quiet "/opt/qoder/qoder" "$out/bin/qoder"
|
||||||
|
done
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
# preFixup, not installPhase: gappsWrapperArgs is only populated by then.
|
||||||
|
preFixup = ''
|
||||||
|
makeWrapper $out/share/qoder/qoder $out/bin/qoder \
|
||||||
|
"''${gappsWrapperArgs[@]}" \
|
||||||
|
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath runtimeLibs}" \
|
||||||
|
--set-default NIXOS_OZONE_WL 1 \
|
||||||
|
--add-flags "--no-sandbox" \
|
||||||
|
--add-flags "--password-store=${passwordStore}" \
|
||||||
|
${lib.optionalString (extraFlags != [ ]) ''--add-flags "${lib.escapeShellArgs extraFlags}"''}
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "Qoder — agentic coding IDE, repackaged from the upstream .deb";
|
||||||
|
homepage = "https://qoder.com";
|
||||||
|
license = lib.licenses.unfree;
|
||||||
|
sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
|
||||||
|
platforms = [ "x86_64-linux" ];
|
||||||
|
mainProgram = "qoder";
|
||||||
|
};
|
||||||
|
})
|
||||||
+101
-61
@@ -8,8 +8,8 @@
|
|||||||
#
|
#
|
||||||
# Stage Step command Effect
|
# Stage Step command Effect
|
||||||
# ------ ------------------------- --------------------------------------
|
# ------ ------------------------- --------------------------------------
|
||||||
# 1 check-image Read-only: is a NixOS LXC ostemplate on PVE?
|
# 1 check-image Read-only: is the ostemplate matching the current flake on PVE?
|
||||||
# deploy-image Idempotent: build+upload if missing, no-op if present.
|
# deploy-image Idempotent: build+upload if missing/stale, no-op if current.
|
||||||
# update-image Force: rebuild locally + replace on PVE.
|
# update-image Force: rebuild locally + replace on PVE.
|
||||||
# 2 start-builder deploy-image + clone a fresh CT under a free
|
# 2 start-builder deploy-image + clone a fresh CT under a free
|
||||||
# VMID + start it + wait for DHCP.
|
# 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_START="${VMID_START:-9999}" # scan downward from here for a free VMID
|
||||||
VMID_FLOOR="${VMID_FLOOR:-100}" # lowest VMID to consider (PVE minimum)
|
VMID_FLOOR="${VMID_FLOOR:-100}" # lowest VMID to consider (PVE minimum)
|
||||||
TEMPLATE_OUTPUT="${TEMPLATE_OUTPUT:-nixos-lxc}" # flake output to build
|
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
|
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
|
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
|
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.
|
+ destroy-builder. Disposable destroyed on success.
|
||||||
|
|
||||||
Step commands (run one stage — VMID auto-discovered from PVE if omitted):
|
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.
|
check-image Read-only: exit 0 if the ostemplate matching the current flake is on PVE.
|
||||||
deploy-image Idempotent: build+upload if missing, no-op if present.
|
deploy-image Idempotent: build+upload if missing/stale, no-op if current.
|
||||||
update-image Force: rebuild .$TEMPLATE_OUTPUT locally + replace on PVE.
|
update-image Force: rebuild .$TEMPLATE_OUTPUT + upload. Old templates are kept.
|
||||||
start-builder deploy-image + clone a fresh CT + start.
|
start-builder deploy-image + clone a fresh CT + start.
|
||||||
build-on [VMID] Build closure on an existing disposable.
|
build-on [VMID] Build closure on an existing disposable.
|
||||||
activate <test|switch|boot>
|
activate <test|switch|boot>
|
||||||
@@ -279,7 +280,8 @@ Options:
|
|||||||
Environment:
|
Environment:
|
||||||
PVE_HOST, PVE_STORAGE, PVE_ROOTFS_STORAGE, PVE_BRIDGE,
|
PVE_HOST, PVE_STORAGE, PVE_ROOTFS_STORAGE, PVE_BRIDGE,
|
||||||
VMID_START, VMID_FLOOR, BUILD_SSH_USER,
|
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:
|
Examples:
|
||||||
# Full happy path — build + activate susano permanently, auto-destroy CT.
|
# Full happy path — build + activate susano permanently, auto-destroy CT.
|
||||||
@@ -481,17 +483,33 @@ resolve_vmid() {
|
|||||||
## ---------------------------------------------------------------------------
|
## ---------------------------------------------------------------------------
|
||||||
# Stage 1: image management (check / deploy / update).
|
# Stage 1: image management (check / deploy / update).
|
||||||
# All three operate on the NixOS LXC ostemplate stored in PVE's
|
# All three operate on the NixOS LXC ostemplate stored in PVE's
|
||||||
# /var/lib/vz/template/cache/. The "latest" template is whichever
|
# /var/lib/vz/template/cache/.
|
||||||
# nixos-lxc-*.tar.xz sorts last alphabetically (matches the helpers below).
|
#
|
||||||
|
# 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
|
# Evaluate the image derivation's store path WITHOUT building it, and derive
|
||||||
# empty if none. Read-only.
|
# the canonical template filename from it. Sets TEMPLATE_FILENAME and
|
||||||
find_template_on_pve() {
|
# OSTEMPLATE. Because the store-path hash covers the flake lock and the
|
||||||
debug "find_template_on_pve: pveam list $PVE_STORAGE"
|
# whole NixOS config, any edit to machines/builder/ or nixpkgs pin bump
|
||||||
pve pveam list "$PVE_STORAGE" 2>/dev/null \
|
# changes the filename — "same name, older build" becomes impossible.
|
||||||
| awk '/nixos.*lxc.*\.tar\.xz/ {print $1}' \
|
resolve_template_identity() {
|
||||||
| sort | tail -n1 || true
|
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.
|
# 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."
|
|| die "nix build .$TEMPLATE_OUTPUT produced no output path."
|
||||||
log " nix output: $result_dir"
|
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
|
local tarball
|
||||||
tarball=$(find "$result_dir/tarball" -maxdepth 1 -type f -name '*.tar.xz' -print -quit | head -n1)
|
tarball=$(find "$result_dir/tarball" -maxdepth 1 -type f -name '*.tar.xz' -print -quit | head -n1)
|
||||||
[[ -n "$tarball" ]] \
|
[[ -n "$tarball" ]] \
|
||||||
|| die "No .tar.xz found under $result_dir/tarball/. Did nixos-generators output layout change?"
|
|| die "No .tar.xz found under $result_dir/tarball/. Did the image output layout change?"
|
||||||
local tname; tname=$(basename "$tarball")
|
|
||||||
debug "tarball path: $tarball"
|
debug "tarball path: $tarball"
|
||||||
debug "tarball name: $tname"
|
ok "Built image: $(basename "$tarball")"
|
||||||
ok "Built image: $tname"
|
|
||||||
|
|
||||||
step "Uploading to $PVE_HOST:/var/lib/vz/template/cache/ ..."
|
step "Uploading to $PVE_HOST:/var/lib/vz/template/cache/ ..."
|
||||||
local size_human
|
local size_human
|
||||||
size_human=$(du -h "$tarball" | cut -f1)
|
size_human=$(du -h "$tarball" | cut -f1)
|
||||||
log " scp $tarball ($size_human) -> $PVE_HOST:/var/lib/vz/template/cache/$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/$tname"
|
pve_scp "$tarball" "$PVE_HOST:/var/lib/vz/template/cache/$TEMPLATE_FILENAME"
|
||||||
|
|
||||||
OSTEMPLATE="$PVE_STORAGE:vztmpl/$tname"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Remove old nixos-lxc templates from PVE, keeping $1. Must be called after
|
# Read-only check. Sets OSTEMPLATE and returns 0 if the template matching
|
||||||
# the new image is uploaded so a build/upload failure leaves the previous
|
# the CURRENT flake build is on PVE; clears OSTEMPLATE and returns 1 if it
|
||||||
# template intact.
|
# is missing or stale (a differently-named nixos-lxc template may exist).
|
||||||
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.
|
|
||||||
check_image() {
|
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
|
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
|
if [[ -n "$existing" ]]; then
|
||||||
OSTEMPLATE="$existing"
|
ok "Image present (matches current flake build): $OSTEMPLATE"
|
||||||
ok "Image present: $OSTEMPLATE"
|
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
OSTEMPLATE=""
|
OSTEMPLATE=""
|
||||||
warn "No nixos-lxc ostemplate found."
|
warn "No template matching the current flake build on $PVE_HOST."
|
||||||
return 1
|
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() {
|
deploy_image() {
|
||||||
if check_image; then
|
if check_image; then
|
||||||
log "Nothing to do — image already on PVE."
|
log "Nothing to do — image on PVE matches current flake build."
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
build_and_upload_image
|
build_and_upload_image
|
||||||
ok "Image deployed: $OSTEMPLATE"
|
ok "Image deployed: $OSTEMPLATE"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Force update: build + upload first, then purge old. If the build or upload
|
# Force update: rebuild + upload even if the current template is present.
|
||||||
# fails, the previous template remains on PVE.
|
# Old templates are never deleted (terraform may pin them); prune manually
|
||||||
|
# with `pveam remove` if really desired.
|
||||||
update_image() {
|
update_image() {
|
||||||
build_and_upload_image
|
build_and_upload_image
|
||||||
purge_old_templates_on_pve "$OSTEMPLATE"
|
|
||||||
ok "Image updated: $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.
|
# Echo the current IPv4 of a running container's eth0, or empty if unavailable.
|
||||||
get_ct_ip() {
|
get_ct_ip() {
|
||||||
local vmid="$1"
|
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 \
|
| jq -r '.[0].addr_info[]? | select(.scope=="global") | .local' 2>/dev/null \
|
||||||
| head -n1 || true
|
| 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
|
# 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).
|
# 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
|
# 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 ..."
|
step "Container $vmid is stopped — starting ..."
|
||||||
pve pct start "$vmid"
|
pve pct start "$vmid"
|
||||||
fi
|
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
|
fi
|
||||||
|
|
||||||
hostname=$(wait_for_ready "$vmid")
|
hostname=$(wait_for_ready "$vmid")
|
||||||
@@ -867,6 +896,7 @@ cmd_composite() {
|
|||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
cmd_check_image() {
|
cmd_check_image() {
|
||||||
require ssh "drive PVE"
|
require ssh "drive PVE"
|
||||||
|
require nix "evaluate the image identity"
|
||||||
require_pve
|
require_pve
|
||||||
phase "check-image — read-only probe of ostemplate on PVE"
|
phase "check-image — read-only probe of ostemplate on PVE"
|
||||||
if check_image; then
|
if check_image; then
|
||||||
@@ -970,6 +1000,16 @@ cmd_build_on() {
|
|||||||
die "Start it on PVE first ('pct start $vmid') or pick another VMID."
|
die "Start it on PVE first ('pct start $vmid') or pick another VMID."
|
||||||
fi
|
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."; }
|
probe_ssh "$hostname" || { print_debug_info "$vmid" "$hostname"; die "Aborting build-on."; }
|
||||||
|
|
||||||
do_build "$vmid" "$hostname" && rc=0 || rc=$?
|
do_build "$vmid" "$hostname" && rc=0 || rc=$?
|
||||||
|
|||||||
Reference in New Issue
Block a user