Compare commits

...
63 Commits
Author SHA1 Message Date
Lumpiasty bbc498b857 update nixos 2026-09-11 01:23:10 +02:00
Lumpiasty 6ed62f94db gate homebrew improt by darwin check to fix building on linux 2026-09-11 01:22:57 +02:00
Lumpiasty 93df208274 Move macbook config under hosts 2026-09-06 01:42:18 +02:00
Lumpiasty 9bccabf712 install steam using brew on macos 2026-09-06 01:40:40 +02:00
Lumpiasty 129b9ae365 Install steam from brew on macos 2026-09-06 01:40:04 +02:00
Lumpiasty 7ed37b3b75 update nixos 2026-09-06 00:53:48 +02:00
Lumpiasty ba0c0d55ce Patch ntfsplus kernel module to support nowindows_names 2026-09-06 00:16:05 +02:00
Lumpiasty cbf9cc29ca remove reference to non-existant config.lumpiastyHome.linux 2026-09-05 00:33:39 +02:00
Lumpiasty f9d95837f5 fix applications in spotlight 2026-09-03 22:14:17 +02:00
Lumpiasty cddf1860d2 fix ssh controlpath on macos 2026-09-03 21:41:39 +02:00
Lumpiasty 8298f90315 resolve evaluation issues on nix-darwin 2026-09-03 21:41:39 +02:00
Lumpiasty 930c7b6018 Separate out linux specific home-manager stuff 2026-09-03 21:41:39 +02:00
Lumpiasty 99df214e10 mark macbook as pc 2026-09-03 21:41:39 +02:00
Lumpiasty d90315fe68 remove redundant easyeffects package 2026-09-03 21:41:39 +02:00
Lumpiasty 936ef1a7e0 remove librewolf overlay 2026-09-03 21:27:48 +02:00
Lumpiasty dcb32fe35d remove conflicting username and add home location 2026-08-31 01:15:16 +02:00
Lumpiasty 7e2a3d894d import home config alongside home-manager modules 2026-08-31 01:09:36 +02:00
Lumpiasty 461323c58f comment out flatpak options in home-manager 2026-08-31 00:59:12 +02:00
Lumpiasty 814daf2bfe guard import of plasma-manager options by enablePlasma 2026-08-31 00:56:30 +02:00
Lumpiasty bfecd4fadf Enable home manager on darwin 2026-08-31 00:50:44 +02:00
Lumpiasty 4e8aea6a24 Refactor options.nix as separate file 2026-08-31 00:43:07 +02:00
Lumpiasty a4d8971a77 first building revision of nix-darwin 2026-08-28 02:01:57 +02:00
Lumpiasty c97f728a01 parametrize ventoy-qt5 version in permittedInsecurePackages 2026-08-25 00:01:31 +02:00
Lumpiasty cc39b11599 update nixos 2026-08-24 23:53:10 +02:00
Lumpiasty bfa8f5c118 update nixos 2026-08-24 23:49:59 +02:00
Lumpiasty fc7a88814a nixos update 2026-08-09 23:19:49 +02:00
Lumpiasty d07be06293 add user to cdrom group 2026-07-25 19:38:49 +02:00
Lumpiasty dd446c742e Remove ntfsplus module 2026-07-25 19:35:02 +02:00
Lumpiasty be49c9858d remove python-lsp-server 2026-07-25 19:24:46 +02:00
Lumpiasty 26370a3d19 remove patool workaround 2026-07-25 18:45:57 +02:00
Lumpiasty 0e8cd39223 update networkmanager to 1.58.0 2026-07-25 18:44:11 +02:00
Lumpiasty 7b02a1d7f6 remove kde gear 2026-07-25 18:38:55 +02:00
Lumpiasty bc72ae3d99 remove oh-my-pi 2026-07-25 18:34:46 +02:00
Lumpiasty bb6388a338 update upstream renamed package 2026-07-25 18:30:23 +02:00
Lumpiasty ab184e2005 update nixos 2026-07-25 18:16:31 +02:00
Lumpiasty 42f554b371 exclude kdev-python due to build failure 2026-07-20 01:56:22 +02:00
Lumpiasty 1a75b67cc8 exclude calligra due to build failure 2026-07-20 01:52:49 +02:00
Lumpiasty b7fa5d89c5 remove workaround for fixed openldap issue 2026-07-20 01:44:18 +02:00
Lumpiasty 3dbd5ca53b work around build failure of python.patool 2026-07-20 01:43:31 +02:00
Lumpiasty e572b6af0d disable optimised easyeffects binaries on acer 2026-07-20 01:02:04 +02:00
Lumpiasty ca8b285c17 comment out caveman 2026-07-20 00:31:32 +02:00
Lumpiasty 504ff35644 update nixos 2026-07-20 00:25:46 +02:00
Lumpiasty 1c59901eb1 update NetworkManager to 1.58-rc1 2026-07-05 16:24:39 +02:00
Lumpiasty b49bbadd4f use native networkmanager option for enabling clat 2026-07-05 16:14:05 +02:00
Lumpiasty 71f061ba1b enable ipv6-mostly on gaming-pc 2026-07-05 15:43:27 +02:00
Lumpiasty 2acb835705 configure peerix 2026-07-05 15:25:36 +02:00
Lumpiasty 9c5d806d25 remove "dependency injection" from peerix 2026-07-05 14:30:04 +02:00
Lumpiasty c9c6ba7f56 disable scx on acer 2026-07-05 13:46:48 +02:00
Lumpiasty 1ade2f5b2f nixos update 2026-07-04 21:54:34 +02:00
Lumpiasty 647de63008 add vscodium python extensions 2026-07-04 21:53:58 +02:00
Lumpiasty 548ef68ad4 update lanzaboote 2026-06-25 01:14:32 +02:00
Lumpiasty 7ad79d5bb3 use cachyos kernel on gaming-pc 2026-06-25 00:05:05 +02:00
Lumpiasty 0194ac2c30 add fhs bash for stubborn projects 2026-06-22 15:49:26 +02:00
Lumpiasty 65253db075 chore: add update script for opencode-antigravity-auth 2026-06-21 00:26:53 +02:00
Lumpiasty 1fe875d727 chore: pin bun.lock for opencode-antigravity-auth to prevent hash mismatches 2026-06-21 00:25:21 +02:00
Lumpiasty 4b9a980cb4 update acer-wmi-ext 2026-06-21 00:17:00 +02:00
Lumpiasty ad969a2079 use bore-lto-zen4 variant of kernel on acer 2026-06-20 23:33:40 +02:00
Lumpiasty 120ecb1feb chore: add cachyos binary cache 2026-06-20 01:12:28 +02:00
Lumpiasty 5b2b451002 Use librewolf from nixpkgs 26.05 2026-06-20 00:48:01 +02:00
Lumpiasty a6af72b1ae feat: use cachyos kernel on acer host 2026-06-19 22:10:32 +02:00
Lumpiasty e02099e022 update nixos 2026-06-19 19:00:53 +02:00
Lumpiasty 4ab575a73b add antigravity provider for opencode 2026-06-19 18:06:47 +02:00
Lumpiasty 708d132730 Enable 464CLAT on acer 2026-06-13 02:45:21 +02:00
46 changed files with 1370 additions and 825 deletions
Generated
+190 -104
View File
@@ -7,11 +7,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1779728104, "lastModified": 1781993196,
"narHash": "sha256-Apxb4B9JWPyV1RUqXkaPRACwulRwHZmaZQ674Rr+Sn0=", "narHash": "sha256-YbTz6evdnAOsD/DUiOxI7ufoNr6pR/m23cFJZvNx120=",
"owner": "Lumpiasty", "owner": "Lumpiasty",
"repo": "acer-wmi-ext", "repo": "acer-wmi-ext",
"rev": "5fc3299fef7ece6e0f646ba1ad1d3a22a788df2f", "rev": "5c3e1bd054bed8c86b568551a6184f0c230a52d0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -31,11 +31,11 @@
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
}, },
"locked": { "locked": {
"lastModified": 1778446047, "lastModified": 1784665499,
"narHash": "sha256-oQvcadh2BCkrog+SGrG6YffKJrveYpjj3TdQJWaKhaM=", "narHash": "sha256-9BMxlTxCCDAeoNLtb1a/st7udtTIJep+wpUzquA29VU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "bun2nix", "repo": "bun2nix",
"rev": "f2bc12af1a6369648aac41041ceeaa0b866599c6", "rev": "0f2a1f0b6f42cebe3b149bf62d38754c5e0e9729",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -61,17 +61,17 @@
}, },
"claude-code": { "claude-code": {
"inputs": { "inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ],
"systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1780258891, "lastModified": 1789074092,
"narHash": "sha256-KURy7kHE9TZG2wrQX0xaKScWp3JqEx7cYxboCJO/KPU=", "narHash": "sha256-QCXTUbd4FuwOHO7LgJws78YTRcco4xgR8RoYgKLvd9w=",
"owner": "sadjow", "owner": "sadjow",
"repo": "claude-code-nix", "repo": "claude-code-nix",
"rev": "e65e7eca7efe776d0bf5f53e317d33b3ff973623", "rev": "1f88b393ac054378c393f914dc83d08a6ef5daeb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -83,11 +83,11 @@
}, },
"crane": { "crane": {
"locked": { "locked": {
"lastModified": 1765145449, "lastModified": 1781825982,
"narHash": "sha256-aBVHGWWRzSpfL++LubA0CwOOQ64WNLegrYHwsVuVN7A=", "narHash": "sha256-SlXKwIRIhrOSAcTjCB3ftPLzJWZStQIPS7J1FlZPnKk=",
"owner": "ipetkov", "owner": "ipetkov",
"repo": "crane", "repo": "crane",
"rev": "69f538cdce5955fcd47abfed4395dc6d5194c1c5", "rev": "469fd08d0bcf6926321fa973c6777fbc87785dd7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -114,20 +114,36 @@
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1761588595, "lastModified": 1767039857,
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "edolstra", "owner": "NixOS",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "edolstra", "owner": "NixOS",
"repo": "flake-compat", "repo": "flake-compat",
"type": "github" "type": "github"
} }
}, },
"flake-compat_2": { "flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_3": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1627913399, "lastModified": 1627913399,
@@ -151,11 +167,29 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1777988971, "lastModified": 1782949081,
"narHash": "sha256-qIoWPDs+0/8JecyYgE3gpKQxW/4bLW/gp45vow9ioCQ=", "narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "0678d8986be1661af6bb555f3489f2fdfc31f6ff", "rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1788450739,
"narHash": "sha256-glZLQlzIn1fXH6PazR2iUmTo7kzzyYSshrWhLS9TqCU=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "31729ca8cbdb4fa927b34e5f4353e6a83f39e993",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -165,24 +199,6 @@
} }
}, },
"flake-utils": { "flake-utils": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"locked": { "locked": {
"lastModified": 1634851050, "lastModified": 1634851050,
"narHash": "sha256-N83GlSGPJJdcqhUxSCS/WwW5pksYf3VP1M13cDRTSVA=", "narHash": "sha256-N83GlSGPJJdcqhUxSCS/WwW5pksYf3VP1M13cDRTSVA=",
@@ -226,11 +242,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1780099287, "lastModified": 1789071706,
"narHash": "sha256-efIPwVGtIWIjWcznhaop6XN6HxnOL8800hF6CBNvlqQ=", "narHash": "sha256-S+oyh2YSP9V5bSjWbbK0N7GxdxxMwgBfUOtUdVcAWc4=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "7d8127d308c3fb9664f7e643eec944be74ebb37d", "rev": "150f9ce4ddd41544ea42eb9d6043a75bd615fa24",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -240,6 +256,26 @@
"type": "github" "type": "github"
} }
}, },
"homebrew": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1785271058,
"narHash": "sha256-xVisL04Gt6LsGa1cGCLHhTED7iEykgl7krPyzAm2ZQg=",
"owner": "koalalorenzo",
"repo": "home-manager-brew",
"rev": "795f9aed8ddce24b3cae3b75598e6861e7d72d10",
"type": "github"
},
"original": {
"owner": "koalalorenzo",
"repo": "home-manager-brew",
"type": "github"
}
},
"lanzaboote": { "lanzaboote": {
"inputs": { "inputs": {
"crane": "crane", "crane": "crane",
@@ -250,33 +286,58 @@
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1765382359, "lastModified": 1782141370,
"narHash": "sha256-RJmgVDzjRI18BWVogG6wpsl1UCuV6ui8qr4DJ1LfWZ8=", "narHash": "sha256-hqijVSEETttmo8Okql9/LG0Ua34hdciKW1a5zzlj8mU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "lanzaboote", "repo": "lanzaboote",
"rev": "e8c096ade12ec9130ff931b0f0e25d2f1bc63607", "rev": "7c9a54a7f87b4539ddbd8bda09a8a5f5f9361aa9",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "v1.0.0", "ref": "v1.1.0",
"repo": "lanzaboote", "repo": "lanzaboote",
"type": "github" "type": "github"
} }
}, },
"linux-ntfs": { "nix-cachyos-kernel": {
"flake": false, "inputs": {
"flake-compat": "flake-compat_2",
"flake-parts": "flake-parts_2",
"nixpkgs": "nixpkgs"
},
"locked": { "locked": {
"lastModified": 1779240458, "lastModified": 1789070668,
"narHash": "sha256-wAK9GX2au7bCw2pQB2cYJp1U9bOuS44bKKlLgBURD5c=", "narHash": "sha256-Zel41jsQnKlZQHBFndBoRCJ3WfJCXknV2jL0GJbLy9k=",
"owner": "namjaejeon", "owner": "xddxdd",
"repo": "linux-ntfs", "repo": "nix-cachyos-kernel",
"rev": "5893a4b30e4a821348ab158f594f2c3c9409694e", "rev": "b8538a38adfd2a443aa0f8f3d506c29161f71f5f",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "namjaejeon", "owner": "xddxdd",
"repo": "linux-ntfs", "repo": "nix-cachyos-kernel",
"type": "github"
}
},
"nix-darwin": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1786845137,
"narHash": "sha256-oQFip+v0luP8NIxJzmiW4Wu8bILsbFWom5l0zonl8hQ=",
"owner": "nix-darwin",
"repo": "nix-darwin",
"rev": "4cff07de74b50e64bdd68cd4e722ab5b6b35ee48",
"type": "github"
},
"original": {
"owner": "nix-darwin",
"ref": "master",
"repo": "nix-darwin",
"type": "github" "type": "github"
} }
}, },
@@ -303,11 +364,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1780319273, "lastModified": 1789063032,
"narHash": "sha256-U+H0zgXVtFMz1mwVTvn5ATOweYU9LpFsbwpUT3TT4SM=", "narHash": "sha256-QHJcFCNEf7gqOzwClCIyAnU24Q2OUQS9WJTduZgnkxs=",
"owner": "sudosubin", "owner": "sudosubin",
"repo": "nix-skills", "repo": "nix-skills",
"rev": "97a2deb0d9194b9dbe9725b1b076f2ee854e3973", "rev": "f3305681ea01e147fc65fa16d55df81fab28c6f7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -346,11 +407,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1780310866, "lastModified": 1788942796,
"narHash": "sha256-fPBRVf6A5xlACYcOI59shGrjURuvwu0lRsDoSCEXt/I=", "narHash": "sha256-CLoJCCRi9sogsyGXYn8rOCWBLKAntfKUB9Rli/YXgEY=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "4ed851c979641e28597a05086332d75cdc9e395f", "rev": "83bbc895120516d6e86885a188c04beced6535d9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -362,20 +423,35 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1779560665, "lastModified": 1789034407,
"narHash": "sha256-tpyBcxPpcQb8ukyNF7DoCwfSY3VPsxHoYwj00Cayv5o=", "narHash": "sha256-7X4GZ0KK5qHF9lppR9IlfXShYGcxxw1Kcjj8m5+19H0=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "64c08a7ca051951c8eae34e3e3cb1e202fe36786", "rev": "3824e02a19d7dccf95c30aa1cab8c857323d2201",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixos-unstable", "ref": "nixos-unstable-small",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs-lib": {
"locked": {
"lastModified": 1788057806,
"narHash": "sha256-DTQSMxzDWmT0zhguthvegnVkn7CFqGCv4IHCzk5ZUpM=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "596e2e3940e09b2abbeb03f75fa1828c57fcd72c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs-linuxeol": { "nixpkgs-linuxeol": {
"locked": { "locked": {
"lastModified": 1776914381, "lastModified": 1776914381,
@@ -392,34 +468,42 @@
"type": "github" "type": "github"
} }
}, },
"ntfsplus": { "nixpkgs_2": {
"inputs": {
"linux-ntfs": "linux-ntfs",
"nixpkgs": [
"nixpkgs"
]
},
"locked": { "locked": {
"lastModified": 1774317576, "lastModified": 1789006805,
"narHash": "sha256-HSDFaDLvfS/NqJlXbHh9135DEpqH6JrNuWqbu3YPcTg=", "narHash": "sha256-xB8mKMOx1IA9vTDNLmJZ6n4wCMq/cuWBBOzGCRnqxrU=",
"owner": "cmspam", "owner": "NixOS",
"repo": "ntfsplus-flake", "repo": "nixpkgs",
"rev": "e22d1bcbac31b4e6484d32c503396e8184650215", "rev": "8ce4ef6cb6f871616146b9fe26d2a5ae594e94fe",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "cmspam", "owner": "NixOS",
"repo": "ntfsplus-flake", "ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_3": {
"locked": {
"lastModified": 1771207753,
"narHash": "sha256-b9uG8yN50DRQ6A7JdZBfzq718ryYrlmGgqkRm9OOwCE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d1c15b7d5806069da59e819999d70e1cec0760bf",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixpkgs-unstable",
"type": "indirect"
}
},
"peerix": { "peerix": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_3",
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils",
"nixpkgs": [ "nixpkgs": "nixpkgs_3"
"nixpkgs"
]
}, },
"locked": { "locked": {
"lastModified": 1773939829, "lastModified": 1773939829,
@@ -445,11 +529,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1775856943, "lastModified": 1785762349,
"narHash": "sha256-b7Mp7P+q2Md5AGt4rjHfMcBykzMumFTen10ST++AuTU=", "narHash": "sha256-jZhZkzAwc7f3exzcTDJWP2WCAchCv0iNC3UF/QsahdQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "plasma-manager", "repo": "plasma-manager",
"rev": "a524a6160e6df89f7673ba293cf7d78b559eb1a5", "rev": "a19a2a029fa180911bd89c554dca1616e10f4c1d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -468,11 +552,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1765016596, "lastModified": 1781733627,
"narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=", "narHash": "sha256-U3yTuGBnmXvXoQI3qkpfEDsn9RovQPAjN7ndRco+3u0=",
"owner": "cachix", "owner": "cachix",
"repo": "pre-commit-hooks.nix", "repo": "pre-commit-hooks.nix",
"rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c", "rev": "3bbec39bc90eadfa031e6f3b77272f3f60803e39",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -487,14 +571,16 @@
"bun2nix": "bun2nix", "bun2nix": "bun2nix",
"claude-code": "claude-code", "claude-code": "claude-code",
"home-manager": "home-manager", "home-manager": "home-manager",
"homebrew": "homebrew",
"lanzaboote": "lanzaboote", "lanzaboote": "lanzaboote",
"nix-cachyos-kernel": "nix-cachyos-kernel",
"nix-darwin": "nix-darwin",
"nix-flatpak": "nix-flatpak", "nix-flatpak": "nix-flatpak",
"nix-skills": "nix-skills", "nix-skills": "nix-skills",
"nix-sweep": "nix-sweep", "nix-sweep": "nix-sweep",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs_2",
"nixpkgs-linuxeol": "nixpkgs-linuxeol", "nixpkgs-linuxeol": "nixpkgs-linuxeol",
"ntfsplus": "ntfsplus",
"peerix": "peerix", "peerix": "peerix",
"plasma-manager": "plasma-manager" "plasma-manager": "plasma-manager"
} }
@@ -507,11 +593,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1765075567, "lastModified": 1782012058,
"narHash": "sha256-KFDCdQcHJ0hE3Nt5Gm5enRIhmtEifAjpxgUQ3mzSJpA=", "narHash": "sha256-9mWUnReOUXfKjZuJAL/bAFH3LUyECTRtXgSNVjRw3UY=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "769156779b41e8787a46ca3d7d76443aaf68be6f", "rev": "8534567325bd8a8d2928e6afd81e0a87d19efd3c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -522,16 +608,16 @@
}, },
"systems": { "systems": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1776166891,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-bI8yrEGjrohR5hkQox7UrxDH7XqrYMwI8SL/LrJ1+S8=",
"owner": "nix-systems", "owner": "nix-systems",
"repo": "default", "repo": "triplet",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "rev": "6de7bc09397911ce03636afbcf6118745ab2cda0",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-systems", "owner": "nix-systems",
"repo": "default", "repo": "triplet",
"type": "github" "type": "github"
} }
}, },
@@ -558,11 +644,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1775636079, "lastModified": 1784369104,
"narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=", "narHash": "sha256-47cxbcZODibHv3rELFQ9vZly0vUNkND/atn/U7HLeb0=",
"owner": "numtide", "owner": "numtide",
"repo": "treefmt-nix", "repo": "treefmt-nix",
"rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba", "rev": "df3c0640565d04a0261253cdd89fce78ec50168a",
"type": "github" "type": "github"
}, },
"original": { "original": {
+45 -7
View File
@@ -1,6 +1,17 @@
{ {
description = "NixOS flake"; description = "NixOS flake";
nixConfig = {
extra-substituters = [
"https://claude-code.cachix.org"
"https://attic.xuyh0120.win/lantian"
];
extra-trusted-public-keys = [
"claude-code.cachix.org-1:YeXf2aNu7UTX8Vwrze0za1WEDS+4DuI2kVeWEE4fsRk="
"lantian:EeAUQ+W+6r7EtwnmYjeVwx5kOGEBpjlBfPlzGlTNvHc="
];
};
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nixpkgs-linuxeol.url = "github:NixOS/nixpkgs/162f04bf3dd222187388bc990a8678170d594419"; nixpkgs-linuxeol.url = "github:NixOS/nixpkgs/162f04bf3dd222187388bc990a8678170d594419";
@@ -19,7 +30,7 @@
inputs.home-manager.follows = "home-manager"; inputs.home-manager.follows = "home-manager";
}; };
lanzaboote = { lanzaboote = {
url = "github:nix-community/lanzaboote/v1.0.0"; url = "github:nix-community/lanzaboote/v1.1.0";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
claude-code = { claude-code = {
@@ -32,27 +43,31 @@
}; };
peerix = { peerix = {
url = "git+ssh://git@gitea.lumpiasty.xyz/Lumpiasty/peerix.git"; # fork of github:sophronesis/peerix url = "git+ssh://git@gitea.lumpiasty.xyz/Lumpiasty/peerix.git"; # fork of github:sophronesis/peerix
inputs.nixpkgs.follows = "nixpkgs";
}; };
acer-wmi-ext = { acer-wmi-ext = {
url = "github:Lumpiasty/acer-wmi-ext/main"; url = "github:Lumpiasty/acer-wmi-ext/main";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
ntfsplus = {
url = "github:cmspam/ntfsplus-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-skills = { nix-skills = {
url = "github:sudosubin/nix-skills"; url = "github:sudosubin/nix-skills";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nix-cachyos-kernel.url = "github:xddxdd/nix-cachyos-kernel";
bun2nix = { bun2nix = {
url = "github:nix-community/bun2nix"; url = "github:nix-community/bun2nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nix-darwin = {
url = "github:nix-darwin/nix-darwin/master";
inputs.nixpkgs.follows = "nixpkgs";
};
homebrew = {
url = "github:koalalorenzo/home-manager-brew";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = { self, nixos-hardware, ... }@inputs: outputs = { self, nixos-hardware, nix-darwin, ... }@inputs:
{ {
nixosConfigurations = nixosConfigurations =
let let
@@ -63,5 +78,28 @@
acer = mkNixosSystem {} hosts/acer.nix; acer = mkNixosSystem {} hosts/acer.nix;
gaming-pc = mkNixosSystem {} hosts/gaming-pc.nix; gaming-pc = mkNixosSystem {} hosts/gaming-pc.nix;
}; };
darwinConfigurations."MacBook-Pro-Macbook" = nix-darwin.lib.darwinSystem {
modules = [
((import ./hosts/macbook.nix) self)
inputs.home-manager.darwinModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.verbose = true;
home-manager.users.macbookpro = { ... }: {
imports = [
./home-modules
./users/user/home.nix
inputs.homebrew.homeManagerModules.default
];
lumpiastyHome.macos = true;
};
nixpkgs.overlays = [
inputs.claude-code.overlays.default
inputs.nix-skills.overlays.default
] ++ (import ./overlays/pkgs.nix { bun2nix = inputs.bun2nix; });
}
];
};
}; };
} }
+10 -1
View File
@@ -1,11 +1,20 @@
{ flake, pkgs, lib, ... }: { flake, pkgs, lib, osConfig ? null, ... }:
{ {
options.lumpiastyHome.macos = lib.mkEnableOption "Macos specific things";
imports = [ imports = [
./gpg.nix ./gpg.nix
./pc.nix ./pc.nix
./dev.nix ./dev.nix
./gaming.nix ./gaming.nix
./fhsBash.nix
./linux.nix
] ++ lib.optionals (osConfig ? system.defaults) [
# Can't use config.lumpiastyHome.macos here — imports are evaluated before config,
# causing infinite recursion. osConfig ? system.defaults detects nix-darwin.
./macos.nix
] ++ lib.optionals (osConfig.lumpiasty.enablePlasma) [
./plasma.nix ./plasma.nix
]; ];
} }
+22 -24
View File
@@ -34,17 +34,13 @@
programs.vscodium = { programs.vscodium = {
enable = true; enable = true;
package = assert pkgs.vscodium.version == "1.116.02821"; (pkgs.vscodium.overrideAttrs rec { profiles.default.extensions = with pkgs.vscode-extensions; [
version = "1.121.03429"; mkhl.direnv
src = pkgs.fetchurl { jnoortheen.nix-ide
url = "https://github.com/VSCodium/vscodium/releases/download/${version}/VSCodium-linux-x64-${version}.tar.gz"; hashicorp.hcl
hash = "sha256-LJsGc11MH6zlcJNfSWjTWPn2Jp9dkjeBPQuCXH1woUM="; ms-python.python
}; ms-python.vscode-python-envs
}); ms-python.debugpy
profiles.default.extensions = with pkgs; [
vscode-extensions.mkhl.direnv
vscode-extensions.jnoortheen.nix-ide
vscode-extensions.hashicorp.hcl
]; ];
argvSettings = { argvSettings = {
# https://github.com/microsoft/vscode/issues/262065#issue-3328712020 # https://github.com/microsoft/vscode/issues/262065#issue-3328712020
@@ -66,8 +62,6 @@
}; };
home.packages = with pkgs; [ home.packages = with pkgs; [
python312
python312Packages.python-lsp-server
nil nil
kubectl kubectl
kubectx kubectx
@@ -79,30 +73,34 @@
docker docker
docker-buildx docker-buildx
proton-vpn proton-vpn
wl-clipboard
devenv devenv
dig dig
whois whois
mtr mtr
traceroute
nodejs_24 nodejs_24
codex codex
claude-code claude-code
oh-my-pi
winbox4 winbox4
amdgpu_top
dua dua
]; ];
# Inject the opencode-claude-auth plugin into the user's opencode.json without # Inject opencode auth plugins into the user's opencode.json without
# overwriting it — replaces any stale store path for this plugin and adds if absent. # overwriting it — replaces any stale store path for each plugin and adds if absent.
home.activation.opencodeClaudeAuth = lib.hm.dag.entryAfter [ "writeBoundary" ] '' # NOTE: opencode-antigravity-auth authenticates against Google's Antigravity
# backend (where consumer AI Pro/Ultra quota moved after the June 18 2026
# Gemini CLI/Code Assist OAuth shutdown). Using it violates Google's ToS and
# may get the Google account banned — accepted risk, see the plugin README.
home.activation.opencodePlugins = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
cfg="$HOME/.config/opencode/opencode.json" cfg="$HOME/.config/opencode/opencode.json"
mkdir -p "$(dirname "$cfg")" mkdir -p "$(dirname "$cfg")"
[ -f "$cfg" ] || echo '{}' > "$cfg" [ -f "$cfg" ] || echo '{}' > "$cfg"
tmp=$(mktemp) tmp=$(mktemp)
${pkgs.jq}/bin/jq --arg path "file://${pkgs.opencode-claude-auth}" ' ${pkgs.jq}/bin/jq \
.plugin = ((.plugin // []) | map(select(test("opencode-claude-auth") | not)) + [$path]) --arg claude "file://${pkgs.opencode-claude-auth}" \
--arg antigravity "file://${pkgs.opencode-antigravity-auth}" '
.plugin = ((.plugin // [])
| map(select((test("opencode-claude-auth") or test("opencode-gemini-auth") or test("opencode-antigravity-auth")) | not))
+ [$claude, $antigravity])
' "$cfg" > "$tmp" && mv "$tmp" "$cfg" ' "$cfg" > "$tmp" && mv "$tmp" "$cfg"
''; '';
@@ -119,7 +117,7 @@
User = "root"; User = "root";
ControlMaster = "auto"; ControlMaster = "auto";
ControlPersist = "3600"; ControlPersist = "3600";
ControlPath = "/run/user/%i/ssh-socket-%r@%h:%p"; ControlPath = lib.mkIf config.lumpiastyHome.linux "/run/user/%i/ssh-socket-%r@%h:%p";
ServerAliveInterval = 20; ServerAliveInterval = 20;
}; };
@@ -161,7 +159,7 @@
'' ''
); );
skills = with pkgs.skills; { skills = with pkgs.skills; {
caveman = majiayu000."claude-skill-registry".caveman + "/"; # caveman = majiayu000."claude-skill-registry".caveman + "/";
}; };
}; };
}; };
+15
View File
@@ -0,0 +1,15 @@
{ config, lib, pkgs, osConfig, ... }:
{
options.lumpiastyHome.fhs = lib.mkEnableOption "FHS bash wrapper";
config = lib.mkIf (config.lumpiastyHome.fhs) {
home.packages = [
(pkgs.buildFHSEnv {
name = "fhs";
targetPkgs = p: [];
runScript = "bash";
})
];
};
}
+7 -6
View File
@@ -7,7 +7,7 @@
services.gpg-agent = { services.gpg-agent = {
enable = true; enable = true;
enableSshSupport = true; enableSshSupport = true;
pinentry.package = pkgs.pinentry-qt; pinentry.package = lib.mkIf config.lumpiastyHome.linux pkgs.pinentry-qt;
extraConfig = '' extraConfig = ''
listen-backlog 256 listen-backlog 256
''; '';
@@ -15,11 +15,12 @@
programs.gpg.enable = true; programs.gpg.enable = true;
programs.git.signing = { programs.git.signing =
format = "openpgp"; lib.mkIf config.lumpiastyHome.linux { # TODO: on macos too
key = "EA287B39E5F69945"; format = "openpgp";
signByDefault = true; key = "EA287B39E5F69945";
}; signByDefault = true;
};
programs.bash.enable = lib.mkDefault true; programs.bash.enable = lib.mkDefault true;
}; };
+29
View File
@@ -0,0 +1,29 @@
{ config, lib, pkgs, osConfig, ... }:
{
options.lumpiastyHome.linux = lib.mkEnableOption "Linux specific things";
config = lib.mkIf config.lumpiastyHome.linux {
services.easyeffects.enable = true;
systemd.user.services.easyeffects.Service = lib.mkIf osConfig.lumpiasty.audioRt.cpuPartitioning {
# Move easyeffects into audio.slice (defined in modules/desktop/audio-rt.nix)
# which has AllowedCPUs=<audioCpus> — pins all DSP work to the reserved cores.
Slice = "audio.slice";
};
programs.chromium.enable = true;
programs.chromium.package = pkgs.ungoogled-chromium;
home.packages = with pkgs; (lib.optionals config.lumpiastyHome.dev [
wl-clipboard
traceroute
amdgpu_top
] ++ lib.optionals config.lumpiastyHome.linux [
pass-wayland
libreoffice-qt-stable
vlc
gimp
ventoy-full-qt
teamspeak6-client
]);
};
}
+33
View File
@@ -0,0 +1,33 @@
{ config, lib, pkgs, osConfig, ... }:
let
brewPath = config.homebrew.brewPath;
in {
config = lib.mkIf config.lumpiastyHome.macos {
targets.darwin.copyApps.enable = true;
targets.darwin.linkApps.enable = false;
homebrew = {
enable = true;
brewInstall = true;
update = true;
upgrade = true;
cleanup = true;
casks = [
"steam"
];
};
home.activation.homebrewInstall = lib.mkForce (
lib.hm.dag.entryAfter ["installPackages" "linkGeneration" "createGpgHomedir"] (
if config.homebrew.brewInstall then ''
if [ ! -f "${brewPath}" ]; then
echo "Homebrew not found (${brewPath}), installing..."
export PATH="${pkgs.curl}/bin:${pkgs.bash}/bin:${pkgs.coreutils}/bin:${pkgs.gnugrep}/bin:${pkgs.gnused}/bin:$PATH"
${pkgs.bash}/bin/bash -c "$(${pkgs.curl}/bin/curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
'' else ""
)
);
};
}
+7 -23
View File
@@ -8,38 +8,22 @@
vesktop vesktop
# Manual update, not yet in nixpkgs as for now # Manual update, not yet in nixpkgs as for now
spotify spotify
pass-wayland
teamspeak6-client
easyeffects
libreoffice-qt6-fresh
vlc
inkscape inkscape
qtpass qtpass
signal-desktop signal-desktop
transmission_4-qt6 transmission_4-qt
thunderbird thunderbird
pwgen pwgen
siyuan siyuan
gimp
ventoy-full-qt
]; ];
programs.librewolf.enable = true; programs.librewolf.enable = true;
services.easyeffects.enable = true;
systemd.user.services.easyeffects.Service = lib.mkIf osConfig.lumpiasty.audioRt.cpuPartitioning {
# Move easyeffects into audio.slice (defined in modules/desktop/audio-rt.nix)
# which has AllowedCPUs=<audioCpus> — pins all DSP work to the reserved cores.
Slice = "audio.slice";
};
programs.chromium.enable = true; # services.flatpak.remotes = [{
programs.chromium.package = pkgs.ungoogled-chromium; # name = "flathub"; location = "https://dl.flathub.org/repo/flathub.flatpakrepo";
# }];
services.flatpak.remotes = [{ # services.flatpak.packages = [
name = "flathub"; location = "https://dl.flathub.org/repo/flathub.flatpakrepo"; # # "org.onlyoffice.desktopeditors"
}]; # ];
services.flatpak.packages = [
# "org.onlyoffice.desktopeditors"
];
# Vesktop settings # Vesktop settings
# Nope, TODO # Nope, TODO
+13 -4
View File
@@ -1,4 +1,4 @@
{ lib, pkgs, nixpkgs-linuxeol, ... }: { config, lib, pkgs, nixpkgs-linuxeol, ... }:
rec { rec {
# Identity # Identity
@@ -23,8 +23,8 @@ rec {
# Kernel # Kernel
# boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; # boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
boot.kernelPackages = pkgs.linuxKernel.packages.linux_7_0; boot.kernelPackages = pkgs.cachyosKernels.linuxPackages-cachyos-bore-lto-zen4;
boot.zfs.package = pkgs.zfs_2_4; boot.zfs.package = config.boot.kernelPackages.zfs_cachyos;
# Swap # Swap
swapDevices = [ swapDevices = [
@@ -71,7 +71,12 @@ rec {
amdCpu = true; amdCpu = true;
noMitigations = false; noMitigations = false;
enablePulseaudio = true; enablePulseaudio = true;
audioRt.enable = true; audioRt = {
enable = true;
cpuPartitioning = false;
performanceGovernor = false;
optimisedBinaries = false;
};
sshd = true; sshd = true;
users.user = true; users.user = true;
# users.drugi = true; # users.drugi = true;
@@ -89,6 +94,8 @@ rec {
laptop = true; laptop = true;
gaming = true; gaming = true;
enableTailscale = true; enableTailscale = true;
ipv6Mostly = true;
scx = false;
}; };
virtualisation.vmVariant = { virtualisation.vmVariant = {
@@ -158,6 +165,8 @@ rec {
}; };
}; };
programs.wireshark.enable = true;
# This value determines the NixOS release from which the default # This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions # settings for stateful data, like file locations and database versions
+3 -3
View File
@@ -53,7 +53,7 @@
# Kernel # Kernel
# boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; # boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
boot.kernelPackages = pkgs.linuxKernel.packages.linux_7_0; boot.kernelPackages = pkgs.cachyosKernels.linuxPackages-cachyos-bore-lto-x86_64-v3;
# Swap # Swap
zramSwap = { zramSwap = {
@@ -102,8 +102,6 @@
}; };
}; };
# Use ntfs-plus instead driver
services.ntfsplus.enable = true;
# Force disable ntfs-3g driver # Force disable ntfs-3g driver
boot.supportedFilesystems.ntfs = lib.mkForce false; boot.supportedFilesystems.ntfs = lib.mkForce false;
@@ -119,6 +117,8 @@
gaming = true; gaming = true;
# users.drugi = true; # users.drugi = true;
enableTailscale = true; enableTailscale = true;
scx = true;
ipv6Mostly = true;
}; };
virtualisation.vmVariant = { virtualisation.vmVariant = {
+36
View File
@@ -0,0 +1,36 @@
self: { pkgs, ... }: {
imports = [ ../modules/options.nix ];
# List packages installed in system profile. To search by name, run:
# $ nix-env -qaP | grep wget
environment.systemPackages = with pkgs; [
vim
curl
git
];
# Necessary for using flakes on this system.
nix.settings.experimental-features = "nix-command flakes";
# Enable alternative shell support in nix-darwin.
# programs.fish.enable = true;
# Set Git commit hash for darwin-version.
system.configurationRevision = self.rev or self.dirtyRev or null;
# Used for backwards compatibility, please read the changelog before changing.
# $ darwin-rebuild changelog
system.stateVersion = 6;
# The platform the configuration will be used on.
nixpkgs.hostPlatform = "aarch64-darwin";
users.users.macbookpro = {
home = "/Users/macbookpro";
};
lumpiasty.pc = true;
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
}
+1
View File
@@ -9,5 +9,6 @@ lib.mkIf condition (
../home-modules ../home-modules
home home
]; ];
lumpiastyHome.linux = true;
} }
) )
+10 -4
View File
@@ -9,10 +9,10 @@
nix-sweep, nix-sweep,
peerix, peerix,
acer-wmi-ext, acer-wmi-ext,
ntfsplus,
nix-skills, nix-skills,
nixpkgs-linuxeol, nixpkgs-linuxeol,
bun2nix, bun2nix,
nix-cachyos-kernel,
... ...
}: }:
hardwareConfig: hostConfig: hardwareConfig: hostConfig:
@@ -24,7 +24,6 @@ nixpkgs.lib.nixosSystem {
inherit plasma-manager; inherit plasma-manager;
inherit acer-wmi-ext; inherit acer-wmi-ext;
inherit nixpkgs-linuxeol; inherit nixpkgs-linuxeol;
inherit ntfsplus;
}; };
modules = [ modules = [
{ {
@@ -32,10 +31,17 @@ nixpkgs.lib.nixosSystem {
claude-code.overlays.default claude-code.overlays.default
acer-wmi-ext.overlays.default acer-wmi-ext.overlays.default
nix-skills.overlays.default nix-skills.overlays.default
nix-cachyos-kernel.overlays.pinned
] ++ (import ../overlays/pkgs.nix { inherit bun2nix; }); ] ++ (import ../overlays/pkgs.nix { inherit bun2nix; });
nix.settings = { nix.settings = {
substituters = [ "https://claude-code.cachix.org" ]; substituters = [
trusted-public-keys = [ "claude-code.cachix.org-1:YeXf2aNu7UTX8Vwrze0za1WEDS+4DuI2kVeWEE4fsRk=" ]; "https://claude-code.cachix.org"
"https://attic.xuyh0120.win/lantian"
];
trusted-public-keys = [
"claude-code.cachix.org-1:YeXf2aNu7UTX8Vwrze0za1WEDS+4DuI2kVeWEE4fsRk="
"lantian:EeAUQ+W+6r7EtwnmYjeVwx5kOGEBpjlBfPlzGlTNvHc="
];
}; };
} }
lanzaboote.nixosModules.lanzaboote lanzaboote.nixosModules.lanzaboote
+4 -2
View File
@@ -2,21 +2,23 @@
{ {
imports = [ imports = [
./options.nix
hardware/intel-cpu.nix hardware/intel-cpu.nix
hardware/amd-cpu.nix hardware/amd-cpu.nix
hardware/no-mitigations.nix hardware/no-mitigations.nix
hardware/acer-undervolt.nix hardware/acer-undervolt.nix
system/ntfsplus.nix
system/roles.nix
system/nixpkgs.nix system/nixpkgs.nix
system/location.nix system/location.nix
system/shell.nix system/shell.nix
system/users.nix system/users.nix
system/ssh.nix system/ssh.nix
system/gaming.nix system/gaming.nix
system/ipv6-mostly.nix
system/nix.nix system/nix.nix
system/zfs.nix system/zfs.nix
system/ntfsplus.nix
desktop/plasma.nix desktop/plasma.nix
desktop/touchpad.nix desktop/touchpad.nix
+9 -73
View File
@@ -38,72 +38,7 @@ let
in in
{ { config = lib.mkMerge [
options.lumpiasty.audioRt = {
enable = lib.mkEnableOption "Audio RT scheduling and CPU isolation";
audioCpus = lib.mkOption {
type = lib.types.str;
default = "12-15";
description = "CPU list reserved for audio services (systemd cpuset syntax).";
};
nonAudioCpus = lib.mkOption {
type = lib.types.str;
default = "0-11";
description = "CPU list for everything else.";
};
# ------ Individual optimization toggles ------
cpuPartitioning = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Cgroup-based CPU partitioning via dedicated audio.slice and
restricted app/session/background slices.
'';
};
rtLimits = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Raise rlimits (RTPRIO=95, MEMLOCK=infinity) for the audio group
so PipeWire's module-rt can set SCHED_FIFO 88 directly instead
of going through RTKit's priority-10 ceiling.
'';
};
performanceGovernor = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Keep cpufreq governor `performance` on the audio cores so they
stay boosted regardless of measured utilization.
'';
};
ananicy = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Run ananicy-cpp with a rule that pins easyeffects to nice -12 so
its non-RT DSP threads get scheduler preference under load.
'';
};
optimisedBinaries = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
description = ''
Rebuild easyeffects and its DSP dependencies with -march=znver4 -O3
(and LTO for cmake builds, target-cpu for rust builds).
'';
};
};
config = lib.mkMerge [
# --- Optimised binary builds --------------------------------------------- # --- Optimised binary builds ---------------------------------------------
(lib.mkIf (cfg.enable && cfg.optimisedBinaries) { (lib.mkIf (cfg.enable && cfg.optimisedBinaries) {
@@ -139,10 +74,10 @@ in
{ domain = "@audio"; type = "-"; item = "memlock"; value = "unlimited"; } { domain = "@audio"; type = "-"; item = "memlock"; value = "unlimited"; }
{ domain = "@audio"; type = "-"; item = "nice"; value = "-20"; } { domain = "@audio"; type = "-"; item = "nice"; value = "-20"; }
]; ];
systemd.user.extraConfig = '' systemd.user.settings.Manager = {
DefaultLimitRTPRIO=95 DefaultLimitRTPRIO = 95;
DefaultLimitMEMLOCK=infinity DefaultLimitMEMLOCK = "infinity";
''; };
}) })
# --- CPU partitioning (cgroup-based) ------------------------------------ # --- CPU partitioning (cgroup-based) ------------------------------------
@@ -159,9 +94,9 @@ in
# so cores get clamped at minimum frequency. # so cores get clamped at minimum frequency.
# - No rcu_nocbs= : microsecond-scale jitter is irrelevant at 21ms quantum. # - No rcu_nocbs= : microsecond-scale jitter is irrelevant at 21ms quantum.
(lib.mkIf (cfg.enable && cfg.cpuPartitioning) { (lib.mkIf (cfg.enable && cfg.cpuPartitioning) {
systemd.user.extraConfig = '' systemd.user.settings.Manager = {
CPUAffinity=${cfg.nonAudioCpus} CPUAffinity = cfg.nonAudioCpus;
''; };
systemd.settings.Manager.CPUAffinity = cfg.nonAudioCpus; systemd.settings.Manager.CPUAffinity = cfg.nonAudioCpus;
# Delegate the cpuset controller to user managers so user-level slices # Delegate the cpuset controller to user managers so user-level slices
@@ -223,6 +158,7 @@ in
services.ananicy = { services.ananicy = {
enable = true; enable = true;
package = pkgs.ananicy-cpp; package = pkgs.ananicy-cpp;
rulesProvider = pkgs.ananicy-cpp;
extraRules = [ extraRules = [
{ name = "easyeffects"; type = "Audio"; nice = -12; } { name = "easyeffects"; type = "Audio"; nice = -12; }
]; ];
-2
View File
@@ -1,8 +1,6 @@
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
options.lumpiasty.enableGnome = lib.mkEnableOption "Enable Gnome desktop";
config = lib.mkIf config.lumpiasty.enableGnome { config = lib.mkIf config.lumpiasty.enableGnome {
# Enable the X11 windowing system. # Enable the X11 windowing system.
services.xserver.enable = true; services.xserver.enable = true;
+1 -30
View File
@@ -1,8 +1,6 @@
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
options.lumpiasty.enablePlasma = lib.mkEnableOption "Enable Plasma6 desktop";
config = lib.mkIf config.lumpiasty.enablePlasma { config = lib.mkIf config.lumpiasty.enablePlasma {
# Enable the X11 windowing system. # Enable the X11 windowing system.
services.xserver.enable = true; services.xserver.enable = true;
@@ -33,34 +31,7 @@
# Use wayland in electron apps # Use wayland in electron apps
environment.sessionVariables.NIXOS_OZONE_WL = "1"; environment.sessionVariables.NIXOS_OZONE_WL = "1";
environment.systemPackages = environment.systemPackages = [
(lib.pipe (builtins.attrValues pkgs.kdePackages.gear) [
(builtins.filter (pkg: !pkg.meta.broken))
# Exclude neochat and itinerary due to known vulnerabilities
(builtins.filter (pkg: pkg.pname != "neochat"))
(builtins.filter (pkg: pkg.pname != "itinerary"))
# Exclude angelfish due to build failure
(builtins.filter (pkg: pkg.pname != "angelfish"))
# Exclude step due to build failure
(builtins.filter (pkg: pkg.pname != "step"))
# Exclude plasma-vault due to build failure
(builtins.filter (pkg: pkg.pname != "plasma-vault"))
# Exclude kalzium due to build failure
(builtins.filter (pkg: pkg.pname != "kalzium"))
# Exclude audiocd-kio due to build failure
(builtins.filter (pkg: pkg.pname != "audiocd-kio"))
# Exclude audiotube due to build failure
(builtins.filter (pkg: pkg.pname != "audiotube"))
# Exclude plasma-mobile
(builtins.filter (pkg: pkg.pname != "plasma-mobile"))
]) ++ [
# Printing support in Plasma settings # Printing support in Plasma settings
pkgs.system-config-printer pkgs.system-config-printer
]; ];
-2
View File
@@ -2,8 +2,6 @@
{ {
options.lumpiasty.enablePulseaudio = lib.mkEnableOption "Enable Plasma6 desktop";
config = lib.mkIf config.lumpiasty.enablePulseaudio { config = lib.mkIf config.lumpiasty.enablePulseaudio {
# Enable sound with pipewire. Dont forget after 24.05 # Enable sound with pipewire. Dont forget after 24.05
services.pulseaudio.enable = false; services.pulseaudio.enable = false;
-2
View File
@@ -1,8 +1,6 @@
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
options.lumpiasty.enableTailscale = lib.mkEnableOption "Enable Tailscale VPN";
config = lib.mkIf config.lumpiasty.enableTailscale { config = lib.mkIf config.lumpiasty.enableTailscale {
services.tailscale = { services.tailscale = {
enable = true; enable = true;
+3 -174
View File
@@ -1,177 +1,6 @@
{ config, lib, pkgs, modulesPath, ... }: { ... }:
# Touch pad configuration interface # Touch pad configuration interface.
# Options are declared in ./options.nix; config is applied by home-modules/plasma.nix.
let
scrollMethods = {
twoFingers = "twoFingers";
touchPadEdges = "touchPadEdges";
};
rightClickMethods = {
bottomRight = "bottomRight";
twoFingers = "twoFingers";
};
accelerationProfiles = {
none = "none";
default = "default";
};
in
{ {
# Copy of https://github.com/nix-community/plasma-manager/blob/trunk/modules/input.nix#L69
options.lumpiasty.touchPad = {
enable = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable the touchpad.
'';
};
name = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
example = "PNP0C50:00 0911:5288 Touchpad";
description = ''
The name of the touchpad.
This can be found by looking at the `Name` attribute in the section in
the `/proc/bus/input/devices` path belonging to the touchpad.
'';
};
vendorId = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
example = "0911";
description = ''
The vendor ID of the touchpad.
This can be found by looking at the `Vendor` attribute in the section in
the `/proc/bus/input/devices` path belonging to the touchpad.
'';
};
productId = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
example = "5288";
description = ''
The product ID of the touchpad.
This can be found by looking at the `Product` attribute in the section in
the `/proc/bus/input/devices` path belonging to the touchpad.
'';
};
disableWhileTyping = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to disable the touchpad while typing.
'';
};
leftHanded = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = false;
description = ''
Whether to swap the left and right buttons.
'';
};
middleButtonEmulation = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = false;
description = ''
Whether to enable middle mouse click emulation by pressing the left and right buttons at the same time.
Activating this increases the click latency by 50ms.
'';
};
pointerSpeed = lib.mkOption {
type = with lib.types; nullOr (numbers.between (-1) 1);
default = null;
example = "0";
description = ''
How fast the pointer moves.
'';
};
accelerationProfile = lib.mkOption {
type = with lib.types; nullOr (enum (builtins.attrNames accelerationProfiles));
default = null;
example = "none";
description = "Set the touchpad acceleration profile.";
apply = profile: if (profile == null) then null else accelerationProfiles."${profile}";
};
naturalScroll = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable natural scrolling for the touchpad.
'';
};
tapToClick = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable tap-to-click for the touchpad.
'';
};
tapAndDrag = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable tap-and-drag for the touchpad.
'';
};
tapDragLock = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable the tap-and-drag lock for the touchpad.
'';
};
scrollMethod = lib.mkOption {
type = with lib.types; nullOr (enum (builtins.attrNames scrollMethods));
default = null;
example = "touchPadEdges";
description = ''
Configure how scrolling is performed on the touchpad.
'';
apply = method: if (method == null) then null else scrollMethods."${method}";
};
scrollSpeed = lib.mkOption {
type = with lib.types; nullOr (numbers.between 0.1 20);
default = null;
example = 0.1;
description = ''
Configure the scrolling speed of the touchpad. Lower is slower.
If unset, KDE Plasma will default to 0.3.
'';
};
rightClickMethod = lib.mkOption {
type = with lib.types; nullOr (enum (builtins.attrNames rightClickMethods));
default = null;
example = "twoFingers";
description = ''
Configure how right-clicking is performed on the touchpad.
'';
apply = method: if (method == null) then null else rightClickMethods."${method}";
};
twoFingerTap = lib.mkOption {
type =
with lib.types;
nullOr (enum [
"rightClick"
"middleClick"
]);
default = null;
example = "twoFingers";
description = ''
Configure what a two-finger tap maps to on the touchpad.
'';
apply = v: if (v == null) then null else (v == "middleClick");
};
};
} }
-2
View File
@@ -18,8 +18,6 @@
# persist values across boot / resume. # persist values across boot / resume.
{ {
options.lumpiasty.acerUndervolt = lib.mkEnableOption "ryzenadj + ryzen_smu tooling for Acer 8845HS";
config = lib.mkIf config.lumpiasty.acerUndervolt { config = lib.mkIf config.lumpiasty.acerUndervolt {
boot.kernelModules = [ "ryzen_smu" ]; boot.kernelModules = [ "ryzen_smu" ];
boot.extraModulePackages = [ config.boot.kernelPackages.ryzen-smu ]; boot.extraModulePackages = [ config.boot.kernelPackages.ryzen-smu ];
-2
View File
@@ -1,8 +1,6 @@
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
options.lumpiasty.amdCpu = lib.mkEnableOption "Enable amd CPU";
config = lib.mkIf config.lumpiasty.amdCpu { config = lib.mkIf config.lumpiasty.amdCpu {
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = true; hardware.cpu.amd.updateMicrocode = true;
-2
View File
@@ -1,8 +1,6 @@
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
options.lumpiasty.intelCpu = lib.mkEnableOption "Enable intel CPU";
config = lib.mkIf config.lumpiasty.intelCpu { config = lib.mkIf config.lumpiasty.intelCpu {
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
# hardware.cpu.intel.updateMicrocode = true; # hardware.cpu.intel.updateMicrocode = true;
-2
View File
@@ -1,8 +1,6 @@
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
options.lumpiasty.noMitigations = lib.mkEnableOption "Disable mitigations";
config = lib.mkIf config.lumpiasty.noMitigations { config = lib.mkIf config.lumpiasty.noMitigations {
boot.kernelParams = [ boot.kernelParams = [
"mitigations=off" "mitigations=off"
+258
View File
@@ -0,0 +1,258 @@
{ config, lib, ... }:
let
scrollMethods = {
twoFingers = "twoFingers";
touchPadEdges = "touchPadEdges";
};
rightClickMethods = {
bottomRight = "bottomRight";
twoFingers = "twoFingers";
};
accelerationProfiles = {
none = "none";
default = "default";
};
in
{
options.lumpiasty = {
pc = lib.mkEnableOption "Enable options specific to personal computers";
laptop = lib.mkEnableOption "Enable options specific to laptops";
intelCpu = lib.mkEnableOption "Enable intel CPU";
amdCpu = lib.mkEnableOption "Enable amd CPU";
noMitigations = lib.mkEnableOption "Disable mitigations";
acerUndervolt = lib.mkEnableOption "ryzenadj + ryzen_smu tooling for Acer 8845HS";
enablePlasma = lib.mkEnableOption "Enable Plasma6 desktop";
enableGnome = lib.mkEnableOption "Enable Gnome desktop";
enablePulseaudio = lib.mkEnableOption "Enable Pulseaudio/Pipewire";
enableTailscale = lib.mkEnableOption "Enable Tailscale VPN";
sshd = lib.mkEnableOption "Enable OpenSSH server";
gaming = lib.mkEnableOption "Enable options specific to gaming computers";
scx = lib.mkEnableOption "Enable sched-ext";
ipv6Mostly = lib.mkEnableOption "Enable IPv6-mostly (RFC 8925 + CLAT/464XLAT) support in NetworkManager";
users = {
user = lib.mkEnableOption "Create user \"user\"";
drugi = lib.mkEnableOption "Create user \"drugi\"";
};
touchPad = {
enable = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable the touchpad.
'';
};
name = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
example = "PNP0C50:00 0911:5288 Touchpad";
description = ''
The name of the touchpad.
This can be found by looking at the `Name` attribute in the section in
the `/proc/bus/input/devices` path belonging to the touchpad.
'';
};
vendorId = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
example = "0911";
description = ''
The vendor ID of the touchpad.
This can be found by looking at the `Vendor` attribute in the section in
the `/proc/bus/input/devices` path belonging to the touchpad.
'';
};
productId = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
example = "5288";
description = ''
The product ID of the touchpad.
This can be found by looking at the `Product` attribute in the section in
the `/proc/bus/input/devices` path belonging to the touchpad.
'';
};
disableWhileTyping = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to disable the touchpad while typing.
'';
};
leftHanded = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = false;
description = ''
Whether to swap the left and right buttons.
'';
};
middleButtonEmulation = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = false;
description = ''
Whether to enable middle mouse click emulation by pressing the left and right buttons at the same time.
Activating this increases the click latency by 50ms.
'';
};
pointerSpeed = lib.mkOption {
type = with lib.types; nullOr (numbers.between (-1) 1);
default = null;
example = "0";
description = ''
How fast the pointer moves.
'';
};
accelerationProfile = lib.mkOption {
type = with lib.types; nullOr (enum (builtins.attrNames accelerationProfiles));
default = null;
example = "none";
description = "Set the touchpad acceleration profile.";
apply = profile: if (profile == null) then null else accelerationProfiles."${profile}";
};
naturalScroll = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable natural scrolling for the touchpad.
'';
};
tapToClick = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable tap-to-click for the touchpad.
'';
};
tapAndDrag = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable tap-and-drag for the touchpad.
'';
};
tapDragLock = lib.mkOption {
type = with lib.types; nullOr bool;
default = null;
example = true;
description = ''
Whether to enable the tap-and-drag lock for the touchpad.
'';
};
scrollMethod = lib.mkOption {
type = with lib.types; nullOr (enum (builtins.attrNames scrollMethods));
default = null;
example = "touchPadEdges";
description = ''
Configure how scrolling is performed on the touchpad.
'';
apply = method: if (method == null) then null else scrollMethods."${method}";
};
scrollSpeed = lib.mkOption {
type = with lib.types; nullOr (numbers.between 0.1 20);
default = null;
example = 0.1;
description = ''
Configure the scrolling speed of the touchpad. Lower is slower.
If unset, KDE Plasma will default to 0.3.
'';
};
rightClickMethod = lib.mkOption {
type = with lib.types; nullOr (enum (builtins.attrNames rightClickMethods));
default = null;
example = "twoFingers";
description = ''
Configure how right-clicking is performed on the touchpad.
'';
apply = method: if (method == null) then null else rightClickMethods."${method}";
};
twoFingerTap = lib.mkOption {
type =
with lib.types;
nullOr (enum [
"rightClick"
"middleClick"
]);
default = null;
example = "twoFingers";
description = ''
Configure what a two-finger tap maps to on the touchpad.
'';
apply = v: if (v == null) then null else (v == "middleClick");
};
};
audioRt = {
enable = lib.mkEnableOption "Audio RT scheduling and CPU isolation";
audioCpus = lib.mkOption {
type = lib.types.str;
default = "12-15";
description = "CPU list reserved for audio services (systemd cpuset syntax).";
};
nonAudioCpus = lib.mkOption {
type = lib.types.str;
default = "0-11";
description = "CPU list for everything else.";
};
cpuPartitioning = lib.mkOption {
type = lib.types.bool;
default = config.lumpiasty.audioRt.enable;
description = ''
Cgroup-based CPU partitioning via dedicated audio.slice and
restricted app/session/background slices.
'';
};
rtLimits = lib.mkOption {
type = lib.types.bool;
default = config.lumpiasty.audioRt.enable;
description = ''
Raise rlimits (RTPRIO=95, MEMLOCK=infinity) for the audio group
so PipeWire's module-rt can set SCHED_FIFO 88 directly instead
of going through RTKit's priority-10 ceiling.
'';
};
performanceGovernor = lib.mkOption {
type = lib.types.bool;
default = config.lumpiasty.audioRt.enable;
description = ''
Keep cpufreq governor `performance` on the audio cores so they
stay boosted regardless of measured utilization.
'';
};
ananicy = lib.mkOption {
type = lib.types.bool;
default = config.lumpiasty.audioRt.enable;
description = ''
Run ananicy-cpp with a rule that pins easyeffects to nice -12 so
its non-RT DSP threads get scheduler preference under load.
'';
};
optimisedBinaries = lib.mkOption {
type = lib.types.bool;
default = config.lumpiasty.audioRt.enable;
description = ''
Rebuild easyeffects and its DSP dependencies with -march=znver4 -O3
(and LTO for cmake builds, target-cpu for rust builds).
'';
};
};
};
}
+1 -3
View File
@@ -1,7 +1,5 @@
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
options.lumpiasty.gaming = lib.mkEnableOption "Enable options specific to gaming computers";
config = lib.mkIf config.lumpiasty.gaming { config = lib.mkIf config.lumpiasty.gaming {
# https://github.com/NixOS/nixpkgs/blob/10e687235226880ed5e9f33f1ffa71fe60f2638a/nixos/modules/programs/steam.nix # https://github.com/NixOS/nixpkgs/blob/10e687235226880ed5e9f33f1ffa71fe60f2638a/nixos/modules/programs/steam.nix
hardware.graphics = { hardware.graphics = {
@@ -32,7 +30,7 @@
}; };
services.scx = { services.scx = {
enable = true; enable = config.lumpiasty.scx;
scheduler = "scx_cosmos"; scheduler = "scx_cosmos";
}; };
}; };
+23
View File
@@ -0,0 +1,23 @@
{ config, lib, pkgs, ... }:
# IPv6-mostly support via NetworkManager (RFC 8925 + RFC 6877 / 464XLAT).
# Requires NetworkManager >= 1.58 (pkgs.networkmanager-clat in practice).
# Sets ipv4.clat=auto and ipv4.dhcp-ipv6-only-preferred=auto as connection
# defaults, mirroring the Fedora 45 change:
# https://fedoraproject.org/wiki/Changes/IPv6-Mostly_Support_In_NetworkManager
{
config = lib.mkIf config.lumpiasty.ipv6Mostly {
# Use the patched NM build with CLAT support, without replacing pkgs.networkmanager
# globally (which would cascade rebuilds across the entire system closure).
networking.networkmanager.package = pkgs.networkmanager-clat;
# Drop a conf.d snippet that sets connection-level defaults.
networking.networkmanager.settings.connection = {
# IPv6-mostly: automatically enable CLAT (464XLAT) and DHCPv4 option 108
# when the network advertises PREF64 and/or option 108 (RFC 8925).
# On networks without these, behaviour is unchanged (native IPv4 proceeds).
"ipv4.clat" = "auto";
"ipv4.dhcp-ipv6-only-preferred" = "auto";
};
};
}
+19 -1
View File
@@ -27,6 +27,24 @@ in
services.peerix = { services.peerix = {
enable = true; enable = true;
trackerUrl = null; # Use LAN mode instead of Iroh
# Use an empty string (not null) to use the modern unified app
# but with the internet tracker internally disabled.
trackerUrl = "''";
# Explicitly enable UDP broadcast discovery for your local network
lanDiscovery = true;
# Disable the upstream cache.nixos.org checks so you can share ALL packages
noFilter = true;
noVerify = true;
# Configure signing so Nix doesn't reject your custom unsigned packages
privateKeyFile = "/etc/cache-priv-key.pem";
# Add the public key contents from `cache-pub-key.pem`
# (If you used different keys on each machine, you can pass a list of strings
# directly to nix.settings.extra-trusted-public-keys instead)
publicKey = "my-lan-cache:SVN4NaqHJKxdAbWZ6wUtklmKkBUrACPg8oihH/mlp4Y=";
}; };
} }
+2 -2
View File
@@ -4,8 +4,8 @@
# Allow unfree packages # Allow unfree packages
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
# Ventoy has some blobs making it insecure
nixpkgs.config.permittedInsecurePackages = [ nixpkgs.config.permittedInsecurePackages = [
"ventoy-qt5-1.1.12" # Ventoy has some blobs making it insecure
"ventoy-qt5-${pkgs.ventoy.version}"
]; ];
} }
@@ -1,16 +1,6 @@
From 8b5c5d23c1218a996a1d6780ca56853454813418 Mon Sep 17 00:00:00 2001 diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c
From: Lumpiasty <arek.dzski@gmail.com> --- a/fs/ntfs/super.c
Date: Thu, 7 May 2026 01:50:05 +0200 +++ b/fs/ntfs/super.c
Subject: [PATCH 1/2] fix windows_names option
---
super.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/super.c b/super.c
index 875fb5a..49ad898 100644
--- a/super.c
+++ b/super.c
@@ -91,7 +91,7 @@ static const struct fs_parameter_spec ntfs_parameters[] = { @@ -91,7 +91,7 @@ static const struct fs_parameter_spec ntfs_parameters[] = {
fsparam_flag("sys_immutable", Opt_sys_immutable), fsparam_flag("sys_immutable", Opt_sys_immutable),
fsparam_flag("nohidden", Opt_nohidden), fsparam_flag("nohidden", Opt_nohidden),
@@ -20,6 +10,4 @@ index 875fb5a..49ad898 100644
fsparam_flag("acl", Opt_acl), fsparam_flag("acl", Opt_acl),
fsparam_flag("discard", Opt_discard), fsparam_flag("discard", Opt_discard),
fsparam_flag("sparse", Opt_sparse), fsparam_flag("sparse", Opt_sparse),
--
2.53.0
@@ -1,16 +1,6 @@
From 7fbf82056e26d99bfa4d5aab87ce287cd8c8cbef Mon Sep 17 00:00:00 2001 diff --git a/fs/ntfs/namei.c b/fs/ntfs/namei.c
From: Lumpiasty <arek.dzski@gmail.com> --- a/fs/ntfs/namei.c
Date: Thu, 7 May 2026 01:56:33 +0200 +++ b/fs/ntfs/namei.c
Subject: [PATCH 2/2] gate bad character check by windows_names
---
namei.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/namei.c b/namei.c
index 9e937d1..7369943 100644
--- a/namei.c
+++ b/namei.c
@@ -61,12 +61,12 @@ static int ntfs_check_bad_windows_name(struct ntfs_volume *vol, @@ -61,12 +61,12 @@ static int ntfs_check_bad_windows_name(struct ntfs_volume *vol,
const __le16 *wc, const __le16 *wc,
unsigned int wc_len) unsigned int wc_len)
@@ -27,6 +17,4 @@ index 9e937d1..7369943 100644
/* Check for trailing space or dot. */ /* Check for trailing space or dot. */
if (wc_len > 0 && if (wc_len > 0 &&
(wc[wc_len - 1] == cpu_to_le16(' ') || (wc[wc_len - 1] == cpu_to_le16(' ') ||
--
2.53.0
+9 -74
View File
@@ -1,78 +1,13 @@
{ config, pkgs, lib, ntfsplus, ... }: { config, lib, pkgs, ... }:
# Builds and loads the ntfsplus kernel driver (github:namjaejeon/linux-ntfs),
# a maintained out-of-tree NTFS driver for Linux 6.1+.
#
# The upstream driver is used as-is, with two local patches applied on top
# (see ntfsplus-patches/). This avoids maintaining a fork that would need
# rebasing on every upstream update — patches are plain files that apply
# cleanly regardless of upstream churn.
#
# The ntfsplus flake's nixosModule is NOT used directly. It builds the kernel
# module as a `let` binding inside the module closure — not exposed as a
# package in its flake outputs — so there is nothing in pkgs to override.
# Replicating the module here is the only way to substitute a patched source.
#
# The ntfsplus flake (github:cmspam/ntfsplus-flake) is reused only for:
# - its linux-ntfs source input (ntfsplus.inputs.linux-ntfs)
# - its bundled Makefile (${ntfsplus}/Makefile)
# The flake ships its own Makefile because the upstream repo's Makefile
# has an ifneq KERNELRELEASE guard that breaks the out-of-tree nix build.
#
# The derivation is built inside this module (not via an overlay) so that
# config.boot.kernelPackages.kernel resolves to whatever kernel the host
# declares, with no extra indirection or per-host maintenance.
#
# ntfsplus is passed in via specialArgs in lib/mkNixosSystem.nix.
let
cfg = config.services.ntfsplus;
patchedSrc = pkgs.applyPatches {
name = "linux-ntfs-patched";
src = ntfsplus.inputs.linux-ntfs;
patches = [
# fsparam_flag → fsparam_bool so windows_names=0/1 is accepted as a
# mount option rather than being treated as a bare flag.
./ntfsplus-patches/0001-fix-windows_names-option.patch
# Gate the bad-character check behind NVolCheckWindowsNames so that
# the check only runs when windows_names is actually enabled.
./ntfsplus-patches/0002-gate-bad-character-check-by-windows_names.patch
];
};
ntfsplus-mod = pkgs.stdenv.mkDerivation {
pname = "ntfsplus-module";
version = ntfsplus.inputs.linux-ntfs.shortRev or ntfsplus.inputs.linux-ntfs.rev;
src = patchedSrc;
nativeBuildInputs = config.boot.kernelPackages.kernel.moduleBuildDependencies;
preBuild = "cp ${ntfsplus}/Makefile Makefile";
makeFlags = [
"KDIR=${config.boot.kernelPackages.kernel.dev}/lib/modules/${config.boot.kernelPackages.kernel.modDirVersion}/build"
"KVERSION=${config.boot.kernelPackages.kernel.modDirVersion}"
"CONFIG_NTFS_FS_POSIX_ACL=y"
];
installPhase = ''
mkdir -p $out/lib/modules/${config.boot.kernelPackages.kernel.modDirVersion}/extra
cp ntfs.ko $out/lib/modules/${config.boot.kernelPackages.kernel.modDirVersion}/extra/
'';
};
in
{ {
options.services.ntfsplus = { boot.extraModulePackages = [
enable = lib.mkEnableOption "ntfsplus kernel driver and utilities"; ((pkgs.callPackage ../../pkgs/ntfs/package.nix { kernel = config.boot.kernelPackages.kernel; }).overrideAttrs {
}; patches = [
./ntfsplus-patches/0001-fix-windows_names-option.patch
config = lib.mkIf cfg.enable { ./ntfsplus-patches/0002-gate-bad-character-check-by-windows_names.patch
boot.extraModulePackages = [ ntfsplus-mod ]; ];
boot.kernelModules = [ "ntfs" ]; })
boot.extraModprobeConfig = '' ];
alias fs-ntfs ntfs
alias ntfsplus ntfs
'';
services.udev.extraRules = ''
SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="ntfs", ENV{ID_FS_TYPE}="ntfs"
'';
environment.systemPackages = [ pkgs.ntfsprogs-plus ];
};
} }
-6
View File
@@ -1,6 +0,0 @@
{config, lib, pkgs, modulesPath, ... }:
{
options.lumpiasty.pc = lib.mkEnableOption "Enable options specific to personal computers";
options.lumpiasty.laptop = lib.mkEnableOption "Enable options specific to laptops";
}
-2
View File
@@ -1,8 +1,6 @@
{ config, lib, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
options.lumpiasty.sshd = lib.mkEnableOption "Enable intel CPU";
config = lib.mkIf config.lumpiasty.sshd { config = lib.mkIf config.lumpiasty.sshd {
services.openssh = { services.openssh = {
enable = true; enable = true;
+1 -7
View File
@@ -10,12 +10,6 @@ let
mkUser = import ../../lib/mkUser.nix { inherit lib; }; mkUser = import ../../lib/mkUser.nix { inherit lib; };
in in
{ {
options.lumpiasty.users = {
user = lib.mkEnableOption "Create user \"user\"";
drugi = lib.mkEnableOption "Create user \"drugi\"";
};
config = { config = {
# Install system-wide docker because rootless causes issues with binfmt # Install system-wide docker because rootless causes issues with binfmt
virtualisation.docker.enable = config.lumpiasty.pc; virtualisation.docker.enable = config.lumpiasty.pc;
@@ -69,7 +63,7 @@ in
users.users.user = lib.mkMerge [ users.users.user = lib.mkMerge [
(mkUser cfg.user ../../users/user/config.nix) (mkUser cfg.user ../../users/user/config.nix)
{ {
extraGroups = lib.mkIf config.lumpiasty.pc [ "docker" "libvirtd" ]; extraGroups = lib.mkIf config.lumpiasty.pc [ "docker" "libvirtd" "cdrom" ];
} }
]; ];
home-manager.users.user = mkHome cfg.user ../../users/user/home.nix; home-manager.users.user = mkHome cfg.user ../../users/user/home.nix;
+8 -6
View File
@@ -3,12 +3,14 @@
[ [
bun2nix.overlays.default bun2nix.overlays.default
(final: prev: { (final: prev: {
oh-my-pi = final.callPackage ../pkgs/oh-my-pi { inherit (final) bun2nix; };
opencode-claude-auth = prev.callPackage ../pkgs/opencode-claude-auth { }; opencode-claude-auth = prev.callPackage ../pkgs/opencode-claude-auth { };
# Build failure 08.05.2026 opencode-antigravity-auth = final.callPackage ../pkgs/opencode-antigravity-auth { inherit (final) bun2nix; };
# https://github.com/NixOS/nixpkgs/issues/513245#issuecomment-4320293674 # NetworkManager 1.57.4-dev: adds ipv4.clat (CLAT/464XLAT) needed for IPv6-mostly.
openldap = prev.openldap.overrideAttrs { # Used via networking.networkmanager.package — does not replace pkgs.networkmanager globally.
doCheck = !prev.stdenv.hostPlatform.isi686; # Remove once nixpkgs ships networkmanager >= 1.58 stable.
}; networkmanager-clat = assert final.lib.assertMsg
(final.lib.versionOlder prev.networkmanager.version "1.59")
"nixpkgs now ships NetworkManager ${prev.networkmanager.version} >= 1.59 remove the override in overlays/pkgs.nix and pkgs/networkmanager-dev/ if the patches are no longer needed";
prev.callPackage ../pkgs/networkmanager-dev/package.nix { };
}) })
] ]
@@ -0,0 +1,14 @@
--- a/src/core/nm-l3cfg.c 2026-06-13 01:43:36.576149959 +0200
+++ b/src/core/nm-l3cfg.c 2026-06-13 01:43:46.979332451 +0200
@@ -4261,6 +4261,11 @@
* draft-ietf-v6ops-claton-14 Section 7 */
nm_l3_config_data_iter_ip6_address_for_each (&iter, l3cd, &ip6_entry) {
if (ip6_entry->addr_source == NM_IP_CONFIG_SOURCE_NDISC && ip6_entry->plen == 64) {
+ /* RFC 6724 rule 3: avoid deprecated addresses. Skip prefixes
+ * advertised with a zero preferred lifetime, they are being
+ * phased out and must not be used for new communication. */
+ if (ip6_entry->lifetime != 0 && ip6_entry->preferred == 0)
+ continue;
if (_clat_prefix_is_better(best_prefix, ip6_entry, &pref64))
best_prefix = ip6_entry;
}
+15
View File
@@ -0,0 +1,15 @@
# NetworkManager 1.57.4-dev — development snapshot with ipv4.clat (CLAT/464XLAT) support.
# Required for IPv6-mostly / RFC 8925 + RFC 6877 on NixOS until 1.58 stable lands in nixpkgs.
# Remove this override once nixpkgs ships networkmanager >= 1.58.
{
networkmanager
}:
networkmanager.overrideAttrs (old: {
patches = old.patches ++ [
# CLAT prefix selection ignores RFC 6724 rule 3 (avoid deprecated addresses):
# a deprecated prefix (preferred lifetime 0) can win the selection and break
# CLAT with an unroutable source address. Report upstream, then drop this.
./clat-skip-deprecated-prefixes.patch
];
})
+38
View File
@@ -0,0 +1,38 @@
{ pkgs
, lib
, kernel ? pkgs.linuxPackages_latest.kernel
}:
pkgs.stdenv.mkDerivation {
pname = "ntfs-kernel-module";
inherit (kernel) src version postPatch nativeBuildInputs;
kernel_dev = kernel.dev;
kernelVersion = kernel.modDirVersion;
modulePath = "fs/ntfs";
buildPhase = ''
BUILT_KERNEL=$kernel_dev/lib/modules/$kernelVersion/build
cp $BUILT_KERNEL/Module.symvers .
cp $BUILT_KERNEL/.config .
cp $kernel_dev/vmlinux .
make "-j$NIX_BUILD_CORES" modules_prepare
make "-j$NIX_BUILD_CORES" M=$modulePath modules
'';
installPhase = ''
make \
INSTALL_MOD_PATH="$out" \
XZ="xz -T$NIX_BUILD_CORES" \
M="$modulePath" \
modules_install
'';
meta = {
description = "NTFS kernel module";
license = lib.licenses.gpl3;
};
}
-221
View File
@@ -1,221 +0,0 @@
{ bun2nix, fetchFromGitHub, fetchurl, fetchzip, runCommand, python3, pkgs, stdenv, ... }:
# NOTE: This derivation works around two open bun2nix bugs. Remove the
# workarounds and simplify once they are fixed upstream.
#
# Bug 1 — missing .npm manifest cache files
# https://github.com/nix-community/bun2nix/issues/77
#
# bun's install cache requires two kinds of entries per package:
# - the extracted package directory (e.g. handlebars@4.7.9@@@1/)
# - a hashed .npm manifest file (e.g. 02dd05ab1686ff3a.npm)
# bun2nix only provides the former. bun therefore fetches the manifest from
# the registry during the "Resolving" phase, which fails in the Nix sandbox.
#
# Workaround: pass --offline to bun install. This tells bun to skip manifest
# fetches and trust the lockfile for resolution instead.
#
# Bug 2 — catalog: specifiers still trigger network resolution with --offline
# https://github.com/nix-community/bun2nix/issues/77 (same thread)
#
# bun2nix's bunResolveCatalogRefs rewrites "catalog:" specifiers in
# package.json to the version *range* from the catalog table (e.g. "^1.3.14")
# rather than the exact pinned version from bun.lock's packages section.
# Even with --offline, bun reads the catalog table from bun.lock and tries to
# resolve those ranges, hitting the network.
#
# Workaround: the Python script below pre-processes the source before the
# build. It pins every dep in every workspace package.json to the exact
# version from bun.lock's packages section (so no ranges remain for bun to
# resolve), and strips the catalog/catalogs keys from bun.lock entirely.
#
# bun.lock is JSONC (trailing-comma JSON) so we parse it with Python's stdlib
# json after stripping trailing commas with a regex.
#
# Additionally, oh-my-pi's bun.lock was generated with bun >=1.3.14 which uses
# a different Wyhash seed for cache keys than nixpkgs's bun 1.3.13. Bumping bun
# globally breaks other packages (e.g. opencode), so instead we patch the
# generated wrapper script in postInstall to reference bun 1.3.14 directly.
# Hashes from https://github.com/NixOS/nixpkgs/pull/519796
let
version = "15.2.1";
# bun 1.3.14 — needed for correct cache key hashes; scoped to this package.
bun_1_3_14 = pkgs.bun.overrideAttrs (_: {
version = "1.3.14";
src =
let
sources = {
"aarch64-darwin" = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v1.3.14/bun-darwin-aarch64.zip";
hash = "sha256-2LliIYKK1vl6x6wKt+lYcjQa92MAHogD6CZ2UsJlJiA=";
};
"aarch64-linux" = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v1.3.14/bun-linux-aarch64.zip";
hash = "sha256-on/7Y6gxA3WDbg1vZorhf6jY0YuIw3yCHGUzGXOhmjs=";
};
"x86_64-darwin" = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v1.3.14/bun-darwin-x64-baseline.zip";
hash = "sha256-PjWtb1OXGpg0v55nhuKt9ytfGSHMmpxf3gc9KXKUQHY=";
};
"x86_64-linux" = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v1.3.14/bun-linux-x64.zip";
hash = "sha256-lR7iruhV8IWVruxiJSJqKY0/6oOj3NZGXAnLzN9+hI8=";
};
};
in
sources.${stdenv.hostPlatform.system} or (throw "bun 1.3.14 not available for ${stdenv.hostPlatform.system}");
});
src = fetchFromGitHub {
owner = "can1357";
repo = "oh-my-pi";
rev = "v${version}";
hash = "sha256-fztQJrhDG5ZbTlgqoHA96eCgwYm5WIna3mAPlCDWYLM=";
};
# The workspace source for @oh-my-pi/pi-natives has no pre-built .node
# binaries — those only exist in the npm tarball. Fetch it so we can copy
# the platform binaries into packages/natives/native/ before the build.
piNativesTarball = fetchzip {
url = "https://registry.npmjs.org/@oh-my-pi/pi-natives/-/pi-natives-${version}.tgz";
hash = "sha256-mEEnvTNxWFVSs1An61K83sSjUJ5bz4yrluwZvz1+6fg=";
stripRoot = false;
};
srcWithBunNix = runCommand "oh-my-pi-src" {
nativeBuildInputs = [ bun2nix bun_1_3_14 python3 ];
} ''
cp -r ${src} $out
chmod -R u+w $out
# Copy pre-built .node binaries from the npm tarball into the workspace
# source so the runtime can load the native addon without building Rust.
cp ${piNativesTarball}/package/native/*.node $out/packages/natives/native/
bun2nix --lock-file $out/bun.lock --output-file $out/bun.nix
python3 - "$out" << 'EOF'
import sys, re, json, os
root = sys.argv[1]
lock_path = os.path.join(root, "bun.lock")
raw = open(lock_path).read()
lock = json.loads(re.sub(r',(\s*[}\]])', r'\1', raw))
packages = lock.get("packages", {})
catalog = lock.get("catalog", {})
catalogs = lock.get("catalogs", {})
# Build name -> exact resolved version from the packages section.
resolved = {}
for name, entry in packages.items():
if isinstance(entry, list) and entry and isinstance(entry[0], str):
spec = entry[0]
if spec.startswith(name + "@"):
resolved[name] = spec[len(name) + 1:]
def pin(name, spec):
"""Pin a dep specifier to its exact resolved version from bun.lock."""
if not isinstance(spec, str):
return spec
# catalog: specifiers resolve via catalog table then pinned version.
if spec.startswith("catalog:"):
cname = spec[len("catalog:"):]
table = catalog if cname == "" else catalogs.get(cname, {})
rv = resolved.get(name)
cv = table.get(name)
if isinstance(rv, str) and rv.startswith("workspace:"):
return "workspace:*"
if isinstance(rv, str):
return rv
if isinstance(cv, str):
return cv
return spec
# Any npm version range pin to exact resolved version.
if not spec.startswith(("workspace:", "file:", "link:", "git", "http", "/")):
rv = resolved.get(name)
if isinstance(rv, str) and rv.startswith("workspace:"):
return "workspace:*"
if isinstance(rv, str):
return rv
return spec
sections = ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"]
def rewrite(holder):
for sec in sections:
deps = holder.get(sec)
if isinstance(deps, dict):
for name in list(deps):
deps[name] = pin(name, deps[name])
# Rewrite bun.lock workspaces and drop the catalog tables.
for ws in lock.get("workspaces", {}).values():
rewrite(ws)
lock.pop("catalog", None)
lock.pop("catalogs", None)
open(lock_path, "w").write(json.dumps(lock, indent=2) + "\n")
# Rewrite each workspace package.json (root "" included).
for ws_dir in lock.get("workspaces", {}):
pkg_path = os.path.join(root, ws_dir, "package.json")
if not os.path.exists(pkg_path):
continue
pkg = json.loads(open(pkg_path).read())
rewrite(pkg)
open(pkg_path, "w").write(json.dumps(pkg, indent=2) + "\n")
EOF
'';
in
(bun2nix.writeBunApplication {
pname = "omp";
inherit version;
src = srcWithBunNix;
# oh-my-pi requires bun >=1.3.14 at runtime. writeBunApplication prepends
# pkgs.bun (1.3.13) to PATH in the startup script, so we use an absolute
# path to bun 1.3.14 instead of relying on PATH resolution.
#
# writeBunApplication's installPhase does `cd $out/share/$pname` before
# exec, so $PWD is always the store path. OLDPWD is set by bash's cd to the
# user's original directory. We cd back so omp's process.cwd() is correct,
# and use an absolute path to the entry point so bun resolves modules from
# the store regardless of cwd.
# At this point the wrapper has already done `cd $out/share/omp`, so $PWD
# is the store package dir and OLDPWD is the user's original directory.
# Capture the store dir, cd back to the user's dir so omp's process.cwd()
# is correct, then exec bun with an absolute path so module resolution
# still works from the store.
startScript = ''
_omp_pkg="$PWD"
cd "''${OLDPWD:-$PWD}"
exec ${bun_1_3_14}/bin/bun run "$_omp_pkg/packages/coding-agent/src/cli.ts" "$@"
'';
dontUseBunBuild = true;
dontUseBunCheck = true;
# --offline: workaround for Bug 1 above (missing .npm manifest cache files).
bunInstallFlags = [ "--offline" "--linker=isolated" "--ignore-scripts" ];
# Generate the docs index embedded into the binary at build time.
# The prepack script reads docs/**/*.md and emits docs-index.generated.ts.
postBunNodeModulesInstallPhase = ''
${bun_1_3_14}/bin/bun run packages/coding-agent/scripts/generate-docs-index.ts
'';
bunDeps = bun2nix.fetchBunDeps {
bunNix = "${srcWithBunNix}/bun.nix";
};
meta = {
description = "AI coding agent for the terminal batteries included";
homepage = "https://omp.sh";
mainProgram = "omp";
};
})
+433
View File
@@ -0,0 +1,433 @@
{
"lockfileVersion": 1,
"configVersion": 1,
"workspaces": {
"": {
"name": "opencode-antigravity-auth",
"dependencies": {
"@openauthjs/openauth": "^0.4.3",
"@opencode-ai/plugin": "^0.15.30",
"proper-lockfile": "^4.1.2",
"xdg-basedir": "^5.1.0",
"zod": "^4.0.0",
},
"devDependencies": {
"@types/node": "^24.10.1",
"@types/proper-lockfile": "^4.1.4",
"@vitest/coverage-v8": "^3.0.0",
"@vitest/ui": "^3.0.0",
"typescript": "^5.0.0",
"vitest": "^3.0.0",
"zod-to-json-schema": "^3.25.1",
},
"peerDependencies": {
"typescript": "^5",
},
},
},
"packages": {
"@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="],
"@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="],
"@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="],
"@babel/parser": ["@babel/parser@7.29.7", "", { "dependencies": { "@babel/types": "^7.29.7" }, "bin": "./bin/babel-parser.js" }, "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg=="],
"@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="],
"@bcoe/v8-coverage": ["@bcoe/v8-coverage@1.0.2", "", {}, "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA=="],
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.7", "", { "os": "aix", "cpu": "ppc64" }, "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg=="],
"@esbuild/android-arm": ["@esbuild/android-arm@0.27.7", "", { "os": "android", "cpu": "arm" }, "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ=="],
"@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.7", "", { "os": "android", "cpu": "arm64" }, "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ=="],
"@esbuild/android-x64": ["@esbuild/android-x64@0.27.7", "", { "os": "android", "cpu": "x64" }, "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg=="],
"@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw=="],
"@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ=="],
"@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.7", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w=="],
"@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.7", "", { "os": "freebsd", "cpu": "x64" }, "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ=="],
"@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.7", "", { "os": "linux", "cpu": "arm" }, "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA=="],
"@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A=="],
"@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.7", "", { "os": "linux", "cpu": "ia32" }, "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg=="],
"@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q=="],
"@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw=="],
"@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.7", "", { "os": "linux", "cpu": "ppc64" }, "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ=="],
"@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ=="],
"@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.7", "", { "os": "linux", "cpu": "s390x" }, "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw=="],
"@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.7", "", { "os": "linux", "cpu": "x64" }, "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA=="],
"@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w=="],
"@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.7", "", { "os": "none", "cpu": "x64" }, "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw=="],
"@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.7", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A=="],
"@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.7", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg=="],
"@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw=="],
"@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.7", "", { "os": "sunos", "cpu": "x64" }, "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA=="],
"@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA=="],
"@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.7", "", { "os": "win32", "cpu": "ia32" }, "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw=="],
"@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.7", "", { "os": "win32", "cpu": "x64" }, "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg=="],
"@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="],
"@istanbuljs/schema": ["@istanbuljs/schema@0.1.6", "", {}, "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw=="],
"@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
"@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
"@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
"@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
"@openauthjs/openauth": ["@openauthjs/openauth@0.4.3", "", { "dependencies": { "@standard-schema/spec": "1.0.0-beta.3", "aws4fetch": "1.0.20", "jose": "5.9.6" }, "peerDependencies": { "arctic": "^2.2.2", "hono": "^4.0.0" } }, "sha512-RlnjqvHzqcbFVymEwhlUEuac4utA5h4nhSK/i2szZuQmxTIqbGUxZ+nM+avM+VV4Ing+/ZaNLKILoXS3yrkOOw=="],
"@opencode-ai/plugin": ["@opencode-ai/plugin@0.15.31", "", { "dependencies": { "@opencode-ai/sdk": "0.15.31", "zod": "4.1.8" } }, "sha512-htKKCq9Htljf7vX5ANLDB7bU7TeJYrl8LP2CQUtCAguKUpVvpj5tiZ+edlCdhGFEqlpSp+pkiTEY5LCv1muowg=="],
"@opencode-ai/sdk": ["@opencode-ai/sdk@0.15.31", "", {}, "sha512-95HWBiNKQnwsubkR2E7QhBD/CH9yteZGrviWar0aKHWu8/RjWw9m7Znbv8DI+y6i2dMwBBcGQ8LJ7x0abzys4A=="],
"@oslojs/asn1": ["@oslojs/asn1@1.0.0", "", { "dependencies": { "@oslojs/binary": "1.0.0" } }, "sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA=="],
"@oslojs/binary": ["@oslojs/binary@1.0.0", "", {}, "sha512-9RCU6OwXU6p67H4NODbuxv2S3eenuQ4/WFLrsq+K/k682xrznH5EVWA7N4VFk9VYVcbFtKqur5YQQZc0ySGhsQ=="],
"@oslojs/crypto": ["@oslojs/crypto@1.0.1", "", { "dependencies": { "@oslojs/asn1": "1.0.0", "@oslojs/binary": "1.0.0" } }, "sha512-7n08G8nWjAr/Yu3vu9zzrd0L9XnrJfpMioQcvCMxBIiF5orECHe5/3J0jmXRVvgfqMm/+4oxlQ+Sq39COYLcNQ=="],
"@oslojs/encoding": ["@oslojs/encoding@1.1.0", "", {}, "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="],
"@oslojs/jwt": ["@oslojs/jwt@0.2.0", "", { "dependencies": { "@oslojs/encoding": "0.4.1" } }, "sha512-bLE7BtHrURedCn4Mco3ma9L4Y1GR2SMBuIvjWr7rmQ4/W/4Jy70TIAgZ+0nIlk0xHz1vNP8x8DCns45Sb2XRbg=="],
"@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="],
"@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="],
"@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.62.2", "", { "os": "android", "cpu": "arm" }, "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg=="],
"@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.62.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw=="],
"@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.62.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A=="],
"@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.62.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA=="],
"@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.62.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw=="],
"@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.62.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg=="],
"@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.62.2", "", { "os": "linux", "cpu": "arm" }, "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg=="],
"@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.62.2", "", { "os": "linux", "cpu": "arm" }, "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA=="],
"@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.62.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA=="],
"@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.62.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ=="],
"@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.62.2", "", { "os": "linux", "cpu": "none" }, "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg=="],
"@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.62.2", "", { "os": "linux", "cpu": "none" }, "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ=="],
"@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.62.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A=="],
"@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.62.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w=="],
"@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.62.2", "", { "os": "linux", "cpu": "none" }, "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg=="],
"@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.62.2", "", { "os": "linux", "cpu": "none" }, "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q=="],
"@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.62.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg=="],
"@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.62.2", "", { "os": "linux", "cpu": "x64" }, "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A=="],
"@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.62.2", "", { "os": "linux", "cpu": "x64" }, "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg=="],
"@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.62.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg=="],
"@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.62.2", "", { "os": "none", "cpu": "arm64" }, "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA=="],
"@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.62.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg=="],
"@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.62.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q=="],
"@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.62.2", "", { "os": "win32", "cpu": "x64" }, "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg=="],
"@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.62.2", "", { "os": "win32", "cpu": "x64" }, "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA=="],
"@standard-schema/spec": ["@standard-schema/spec@1.0.0-beta.3", "", {}, "sha512-0ifF3BjA1E8SY9C+nUew8RefNOIq0cDlYALPty4rhUm8Rrl6tCM8hBT4bhGhx7I7iXD0uAgt50lgo8dD73ACMw=="],
"@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="],
"@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="],
"@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="],
"@types/node": ["@types/node@24.13.2", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA=="],
"@types/proper-lockfile": ["@types/proper-lockfile@4.1.4", "", { "dependencies": { "@types/retry": "*" } }, "sha512-uo2ABllncSqg9F1D4nugVl9v93RmjxF6LJzQLMLDdPaXCUIDPeOJ21Gbqi43xNKzBi/WQ0Q0dICqufzQbMjipQ=="],
"@types/retry": ["@types/retry@0.12.5", "", {}, "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw=="],
"@vitest/coverage-v8": ["@vitest/coverage-v8@3.2.6", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^1.0.2", "ast-v8-to-istanbul": "^0.3.3", "debug": "^4.4.1", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", "magic-string": "^0.30.17", "magicast": "^0.3.5", "std-env": "^3.9.0", "test-exclude": "^7.0.1", "tinyrainbow": "^2.0.0" }, "peerDependencies": { "@vitest/browser": "3.2.6", "vitest": "3.2.6" }, "optionalPeers": ["@vitest/browser"] }, "sha512-LsAdmUapA0qSN306d8+zOyawM0hFm2m2Hg9IwVNIKBm+qJV8cijiq2c+gxKZcB1HCfIWAy+0qEZDCUQA58A1cw=="],
"@vitest/expect": ["@vitest/expect@3.2.6", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.6", "@vitest/utils": "3.2.6", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ=="],
"@vitest/mocker": ["@vitest/mocker@3.2.6", "", { "dependencies": { "@vitest/spy": "3.2.6", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "optionalPeers": ["msw", "vite"] }, "sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw=="],
"@vitest/pretty-format": ["@vitest/pretty-format@3.2.6", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA=="],
"@vitest/runner": ["@vitest/runner@3.2.6", "", { "dependencies": { "@vitest/utils": "3.2.6", "pathe": "^2.0.3", "strip-literal": "^3.0.0" } }, "sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q=="],
"@vitest/snapshot": ["@vitest/snapshot@3.2.6", "", { "dependencies": { "@vitest/pretty-format": "3.2.6", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw=="],
"@vitest/spy": ["@vitest/spy@3.2.6", "", { "dependencies": { "tinyspy": "^4.0.3" } }, "sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg=="],
"@vitest/ui": ["@vitest/ui@3.2.6", "", { "dependencies": { "@vitest/utils": "3.2.6", "fflate": "^0.8.2", "flatted": "^3.3.3", "pathe": "^2.0.3", "sirv": "^3.0.1", "tinyglobby": "^0.2.14", "tinyrainbow": "^2.0.0" }, "peerDependencies": { "vitest": "3.2.6" } }, "sha512-mATfG3zVdhobE9U1rIpvtYD3DGuSSxqZ3Aj/8ityGqKXy8YDJ9BoAjZmAz6dZ1IZ1xI5V+MerkCczvVa+3QK9Q=="],
"@vitest/utils": ["@vitest/utils@3.2.6", "", { "dependencies": { "@vitest/pretty-format": "3.2.6", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, "sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg=="],
"ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
"ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
"arctic": ["arctic@2.3.4", "", { "dependencies": { "@oslojs/crypto": "1.0.1", "@oslojs/encoding": "1.1.0", "@oslojs/jwt": "0.2.0" } }, "sha512-+p30BOWsctZp+CVYCt7oAean/hWGW42sH5LAcRQX56ttEkFJWbzXBhmSpibbzwSJkRrotmsA+oAoJoVsU0f5xA=="],
"assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="],
"ast-v8-to-istanbul": ["ast-v8-to-istanbul@0.3.12", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "estree-walker": "^3.0.3", "js-tokens": "^10.0.0" } }, "sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g=="],
"aws4fetch": ["aws4fetch@1.0.20", "", {}, "sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g=="],
"balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="],
"brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="],
"cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="],
"chai": ["chai@5.3.3", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw=="],
"check-error": ["check-error@2.1.3", "", {}, "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA=="],
"color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
"color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
"debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
"deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="],
"eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="],
"emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="],
"es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="],
"esbuild": ["esbuild@0.27.7", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.7", "@esbuild/android-arm": "0.27.7", "@esbuild/android-arm64": "0.27.7", "@esbuild/android-x64": "0.27.7", "@esbuild/darwin-arm64": "0.27.7", "@esbuild/darwin-x64": "0.27.7", "@esbuild/freebsd-arm64": "0.27.7", "@esbuild/freebsd-x64": "0.27.7", "@esbuild/linux-arm": "0.27.7", "@esbuild/linux-arm64": "0.27.7", "@esbuild/linux-ia32": "0.27.7", "@esbuild/linux-loong64": "0.27.7", "@esbuild/linux-mips64el": "0.27.7", "@esbuild/linux-ppc64": "0.27.7", "@esbuild/linux-riscv64": "0.27.7", "@esbuild/linux-s390x": "0.27.7", "@esbuild/linux-x64": "0.27.7", "@esbuild/netbsd-arm64": "0.27.7", "@esbuild/netbsd-x64": "0.27.7", "@esbuild/openbsd-arm64": "0.27.7", "@esbuild/openbsd-x64": "0.27.7", "@esbuild/openharmony-arm64": "0.27.7", "@esbuild/sunos-x64": "0.27.7", "@esbuild/win32-arm64": "0.27.7", "@esbuild/win32-ia32": "0.27.7", "@esbuild/win32-x64": "0.27.7" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w=="],
"estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="],
"expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="],
"fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
"fflate": ["fflate@0.8.3", "", {}, "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA=="],
"flatted": ["flatted@3.4.2", "", {}, "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA=="],
"foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="],
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
"glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="],
"graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
"has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
"hono": ["hono@4.12.26", "", {}, "sha512-uyZtpnYxM9CmQ7QsQknM4zN8EftNqhON1qYeIKM0Se67CCEe2c44xyGURwB0axX2fBDu1dqHrHAc1hmNT8ITkw=="],
"html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="],
"is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
"isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
"istanbul-lib-coverage": ["istanbul-lib-coverage@3.2.2", "", {}, "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg=="],
"istanbul-lib-report": ["istanbul-lib-report@3.0.1", "", { "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" } }, "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw=="],
"istanbul-lib-source-maps": ["istanbul-lib-source-maps@5.0.6", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0" } }, "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A=="],
"istanbul-reports": ["istanbul-reports@3.2.0", "", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA=="],
"jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="],
"jose": ["jose@5.9.6", "", {}, "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="],
"js-tokens": ["js-tokens@10.0.0", "", {}, "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q=="],
"loupe": ["loupe@3.2.1", "", {}, "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ=="],
"lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
"magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
"magicast": ["magicast@0.3.5", "", { "dependencies": { "@babel/parser": "^7.25.4", "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ=="],
"make-dir": ["make-dir@4.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw=="],
"minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="],
"minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="],
"mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="],
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
"nanoid": ["nanoid@3.3.14", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-U9kYi5bpVMEI31yC8iw4bJJp0avcHXA0W8/wNfLfnvJYzihQo2ZRPYPvpAAd570HAcCBjCTN7vnr+v4StKl1IQ=="],
"package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="],
"path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
"path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="],
"pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="],
"pathval": ["pathval@2.0.1", "", {}, "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ=="],
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
"picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="],
"postcss": ["postcss@8.5.15", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A=="],
"proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="],
"retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="],
"rollup": ["rollup@4.62.2", "", { "dependencies": { "@types/estree": "1.0.9" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.62.2", "@rollup/rollup-android-arm64": "4.62.2", "@rollup/rollup-darwin-arm64": "4.62.2", "@rollup/rollup-darwin-x64": "4.62.2", "@rollup/rollup-freebsd-arm64": "4.62.2", "@rollup/rollup-freebsd-x64": "4.62.2", "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", "@rollup/rollup-linux-arm-musleabihf": "4.62.2", "@rollup/rollup-linux-arm64-gnu": "4.62.2", "@rollup/rollup-linux-arm64-musl": "4.62.2", "@rollup/rollup-linux-loong64-gnu": "4.62.2", "@rollup/rollup-linux-loong64-musl": "4.62.2", "@rollup/rollup-linux-ppc64-gnu": "4.62.2", "@rollup/rollup-linux-ppc64-musl": "4.62.2", "@rollup/rollup-linux-riscv64-gnu": "4.62.2", "@rollup/rollup-linux-riscv64-musl": "4.62.2", "@rollup/rollup-linux-s390x-gnu": "4.62.2", "@rollup/rollup-linux-x64-gnu": "4.62.2", "@rollup/rollup-linux-x64-musl": "4.62.2", "@rollup/rollup-openbsd-x64": "4.62.2", "@rollup/rollup-openharmony-arm64": "4.62.2", "@rollup/rollup-win32-arm64-msvc": "4.62.2", "@rollup/rollup-win32-ia32-msvc": "4.62.2", "@rollup/rollup-win32-x64-gnu": "4.62.2", "@rollup/rollup-win32-x64-msvc": "4.62.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA=="],
"semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="],
"shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
"shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
"siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="],
"signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="],
"sirv": ["sirv@3.0.2", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g=="],
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
"stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="],
"std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="],
"string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="],
"string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
"strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="],
"strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
"strip-literal": ["strip-literal@3.1.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg=="],
"supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
"test-exclude": ["test-exclude@7.0.2", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^10.4.1", "minimatch": "^10.2.2" } }, "sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw=="],
"tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="],
"tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="],
"tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="],
"tinypool": ["tinypool@1.1.1", "", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="],
"tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="],
"tinyspy": ["tinyspy@4.0.4", "", {}, "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q=="],
"totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="],
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
"undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="],
"vite": ["vite@7.3.5", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww=="],
"vite-node": ["vite-node@3.2.4", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg=="],
"vitest": ["vitest@3.2.6", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.6", "@vitest/mocker": "3.2.6", "@vitest/pretty-format": "^3.2.6", "@vitest/runner": "3.2.6", "@vitest/snapshot": "3.2.6", "@vitest/spy": "3.2.6", "@vitest/utils": "3.2.6", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.6", "@vitest/ui": "3.2.6", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw=="],
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
"why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="],
"wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="],
"wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
"xdg-basedir": ["xdg-basedir@5.1.0", "", {}, "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ=="],
"zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
"zod-to-json-schema": ["zod-to-json-schema@3.25.2", "", { "peerDependencies": { "zod": "^3.25.28 || ^4" } }, "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA=="],
"@opencode-ai/plugin/zod": ["zod@4.1.8", "", {}, "sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ=="],
"@oslojs/jwt/@oslojs/encoding": ["@oslojs/encoding@0.4.1", "", {}, "sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q=="],
"foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
"glob/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="],
"string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
"string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
"strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
"strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="],
"wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
"wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
"wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
"glob/minimatch/brace-expansion": ["brace-expansion@2.1.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA=="],
"string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
"wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
"wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
"glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
}
}
@@ -0,0 +1,67 @@
{ stdenv, fetchurl, runCommand, bun2nix }:
# opencode-antigravity-auth ships only `dist/` in its npm tarball and relies on
# runtime `dependencies` (@opencode-ai/plugin, @openauthjs/openauth, zod, ...).
# opencode loads it via a file:// path and does NOT install those deps, so the
# tarball-only approach fails at load time with "Cannot find module
# '@opencode-ai/plugin'". We therefore vendor node_modules with bun2nix.
#
# Since the NPM tarball doesn't ship a lockfile, we commit a generated bun.lock
# into the NixOS configuration repository to ensure fully deterministic builds.
# To update dependencies, run `bun install --lockfile-only` manually on the unpacked tarball.
let
version = "1.6.0";
src = fetchurl {
url = "https://registry.npmjs.org/opencode-antigravity-auth/-/opencode-antigravity-auth-${version}.tgz";
hash = "sha256-bLoDjJHuHczxKbslyZSm4zKg5FhdRLdUteKXFmqVlHQ=";
};
# Derive a source tree containing the committed bun.lock and a bun.nix
# generated from it. Fully offline — no network needed here.
srcWithBunNix = runCommand "opencode-antigravity-auth-src" {
nativeBuildInputs = [ bun2nix ];
} ''
mkdir -p $out
# The npm tarball unpacks to a top-level `package/` directory.
tar xzf ${src} --strip-components=1 -C $out
chmod -R u+w $out
cp ${./bun.lock} $out/bun.lock
bun2nix --lock-file $out/bun.lock --output-file $out/bun.nix
'';
in
stdenv.mkDerivation {
pname = "opencode-antigravity-auth";
inherit version;
src = srcWithBunNix;
nativeBuildInputs = [ bun2nix.hook ];
# The bun cache (symlink farm) built from the generated bun.nix. The hook
# copies this into a writable BUN_INSTALL_CACHE_DIR and runs `bun install
# --offline` against it to materialize node_modules with no network.
bunDeps = bun2nix.fetchBunDeps {
bunNix = "${srcWithBunNix}/bun.nix";
};
# This is a plugin (a library directory), not an app: skip bun build/check.
dontUseBunBuild = true;
dontUseBunCheck = true;
dontRunLifecycleScripts = true;
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r dist package.json node_modules $out/
[ -f README.md ] && cp README.md $out/ || true
[ -f LICENSE ] && cp LICENSE $out/ || true
runHook postInstall
'';
dontFixup = true;
}
+35
View File
@@ -0,0 +1,35 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl jq bun nix-prefetch
set -euo pipefail
cd "$(dirname "$0")"
echo "Fetching latest version info from npm..."
LATEST_VERSION=$(curl -s "https://registry.npmjs.org/opencode-antigravity-auth/latest" | jq -r .version)
echo "Latest version is: $LATEST_VERSION"
URL="https://registry.npmjs.org/opencode-antigravity-auth/-/opencode-antigravity-auth-${LATEST_VERSION}.tgz"
echo "Fetching tarball to calculate hash..."
# nix-prefetch-url outputs base32 sha256; convert to SRI
HASH=$(nix hash convert --to sri --hash-algo sha256 $(nix-prefetch-url $URL 2>/dev/null))
echo "New tarball hash: $HASH"
echo "Updating default.nix..."
sed -i "s/version = \".*\";/version = \"$LATEST_VERSION\";/" default.nix
sed -i "s|hash = \"sha256-.*\";|hash = \"$HASH\";|" default.nix
echo "Generating new bun.lock..."
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT
curl -sL "$URL" | tar xz -C "$TMPDIR"
pushd "$TMPDIR/package" > /dev/null
bun install --lockfile-only --no-progress
popd > /dev/null
cp "$TMPDIR/package/bun.lock" ./bun.lock
echo "Update complete! Remember to commit the changes:"
echo " git add default.nix bun.lock"
-2
View File
@@ -18,8 +18,6 @@
kubernetes-helm kubernetes-helm
xonsh xonsh
gnumake gnumake
python312
python312Packages.python-lsp-server
nil nil
docker docker
docker-buildx docker-buildx
+2 -1
View File
@@ -1,13 +1,14 @@
{ config, pkgs, osConfig, ... }: { config, pkgs, osConfig, ... }:
{ {
home.username = "user"; # home.username = "user";
lumpiastyHome = { lumpiastyHome = {
gpg = osConfig.lumpiasty.pc; gpg = osConfig.lumpiasty.pc;
enablePcApps = osConfig.lumpiasty.pc; enablePcApps = osConfig.lumpiasty.pc;
dev = osConfig.lumpiasty.pc; dev = osConfig.lumpiasty.pc;
gaming = osConfig.lumpiasty.gaming; gaming = osConfig.lumpiasty.gaming;
fhs = osConfig.lumpiasty.pc && config.lumpiastyHome.linux;
}; };
home.stateVersion = "24.05"; home.stateVersion = "24.05";