diff --git a/_sources/generated.json b/_sources/generated.json index ebf115a..e8ba227 100644 --- a/_sources/generated.json +++ b/_sources/generated.json @@ -1,34 +1,76 @@ { + "dcts-client-shipping": { + "cargoLock": null, + "date": null, + "extract": null, + "name": "dcts-client-shipping", + "passthru": null, + "pinned": false, + "src": { + "deepClone": false, + "fetchSubmodules": false, + "leaveDotGit": false, + "name": null, + "owner": "hackthedev", + "repo": "dcts-client-shipping", + "rev": "v2.5", + "sha256": "sha256-fmU/rUIyHV/+GSgDuot3mDaZrYmxfhF3RXSAwE6HqPU=", + "sparseCheckout": [], + "type": "github" + }, + "version": "v2.5" + }, + "mender-cli": { + "cargoLock": null, + "date": null, + "extract": null, + "name": "mender-cli", + "passthru": null, + "pinned": false, + "src": { + "deepClone": false, + "fetchSubmodules": false, + "leaveDotGit": false, + "name": null, + "owner": "mendersoftware", + "repo": "mender-cli", + "rev": "2.0.0", + "sha256": "sha256-jFWC1g/ebgMIqgBFgotBDwPcGNmAK3VsvfjiuRCN1ws=", + "sparseCheckout": [], + "type": "github" + }, + "version": "2.0.0" + }, "valheim.aaacrafting": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.aaacrafting", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-YcKuJKSuhOYZVRNTfp1fYW+STecRYn/IrNVdOeC+rIE=", + "sha256": "sha256-XdVVDXU/YfXHnpgjfDixFvRRIn+liunVSXqmGMLXGKY=", "type": "tarball", - "url": "https://thunderstore.io/package/download/Azumatt/AAA_Crafting/2.1.5/" + "url": "https://thunderstore.io/package/download/Azumatt/AAA_Crafting/2.1.6/" }, - "version": "2.1.5" + "version": "2.1.6" }, "valheim.architect": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.architect", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-osxAsTjTyVH2qG69vMxr3LH1p1Y+8g6acGHqbfdz8fs=", + "sha256": "sha256-tNlufmp8rMKBzcRWSp0o8FbtrPOpS5OZJACnG7N1Iqc=", "type": "tarball", - "url": "https://thunderstore.io/package/download/OdinPlus/OdinArchitect/1.6.4/" + "url": "https://thunderstore.io/package/download/OdinPlus/OdinArchitect/1.6.5/" }, - "version": "1.6.4" + "version": "1.6.5" }, "valheim.arearepair": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.arearepair", @@ -42,35 +84,35 @@ "version": "1.1.6" }, "valheim.autostore": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.autostore", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-h75EnPCQSXMrpDTNaxBHnG4hjYLzICYdU+sE0i/Hud4=", + "sha256": "sha256-ZSGQTxWtTBLrGU9oRPrXgLAauiwWVQQ2gv0Rzq7FHw4=", "type": "tarball", - "url": "https://thunderstore.io/package/download/Azumatt/AzuAutoStore/3.0.11/" + "url": "https://thunderstore.io/package/download/Azumatt/AzuAutoStore/3.0.14/" }, - "version": "3.0.11" + "version": "3.0.14" }, "valheim.backpacks": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.backpacks", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-xSfcLisLLPALx6l1Rtbt10YFUo112HV2I6BO/zCjr5w=", + "sha256": "sha256-ZHvN8J6DsRXRSzVZ3K12WSRtdKt40hMtzHMkYxl0ttU=", "type": "tarball", - "url": "https://thunderstore.io/package/download/Smoothbrain/Backpacks/1.3.6/" + "url": "https://thunderstore.io/package/download/Smoothbrain/Backpacks/1.3.8/" }, - "version": "1.3.6" + "version": "1.3.8" }, "valheim.betternetworking": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.betternetworking", @@ -84,7 +126,7 @@ "version": "2.3.2" }, "valheim.boneappetit": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.boneappetit", @@ -98,21 +140,21 @@ "version": "3.3.1" }, "valheim.campsite": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.campsite", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-hQzKXIVxbdq73E0NZlNX+aYLS5Mg6uczX8F8GKFUtec=", + "sha256": "sha256-vioZ7NoIWLfO0XlRCe/BEyRaouy1Kl+cPl0QXSyqjC8=", "type": "tarball", - "url": "https://thunderstore.io/package/download/OdinPlus/OdinCampsite/1.6.1/" + "url": "https://thunderstore.io/package/download/OdinPlus/OdinCampsite/1.6.3/" }, - "version": "1.6.1" + "version": "1.6.3" }, "valheim.cartography": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.cartography", @@ -126,21 +168,21 @@ "version": "3.1.1" }, "valheim.craftyboxes": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.craftyboxes", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-+EKD+kBj7JHrwDi/yMPus8MZRtBApX7bOqPRrA3iXoY=", + "sha256": "sha256-P7NucjydUf9TMJi8ObfTBA+WQsxKxeaM7N8N7mSDELY=", "type": "tarball", - "url": "https://thunderstore.io/package/download/Azumatt/AzuCraftyBoxes/1.8.12/" + "url": "https://thunderstore.io/package/download/Azumatt/AzuCraftyBoxes/1.8.14/" }, - "version": "1.8.12" + "version": "1.8.14" }, "valheim.customships": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.customships", @@ -154,21 +196,21 @@ "version": "0.4.1" }, "valheim.extendedinv": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.extendedinv", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-PDmlJw4hfMg1fqO/hPrT6Oss0Czci/Chvr+vz79m5JI=", + "sha256": "sha256-mua5nD0BLzkBFIfkfOIAUPQGlOP4sTQ9eqBqrJJJG3w=", "type": "tarball", - "url": "https://thunderstore.io/package/download/Azumatt/AzuExtendedPlayerInventory/2.2.2/" + "url": "https://thunderstore.io/package/download/Azumatt/AzuExtendedPlayerInventory/2.4.1/" }, - "version": "2.2.2" + "version": "2.4.1" }, "valheim.foodmove": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.foodmove", @@ -182,21 +224,21 @@ "version": "1.0.1" }, "valheim.jotunn": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.jotunn", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-AfiWmmoCsDtmvjTPw7AdiPYQZ055dTwq5GFvDD93e2M=", + "sha256": "sha256-6Qh5hcXM886OiOpcg73EU35kvnyvTtyJ1+7CSPzBsSA=", "type": "tarball", - "url": "https://thunderstore.io/package/download/ValheimModding/Jotunn/2.27.1/" + "url": "https://thunderstore.io/package/download/ValheimModding/Jotunn/2.28.0/" }, - "version": "2.27.1" + "version": "2.28.0" }, "valheim.jsondotnet": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.jsondotnet", @@ -210,7 +252,7 @@ "version": "13.0.4" }, "valheim.lazyvikings": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.lazyvikings", @@ -224,21 +266,21 @@ "version": "1.2.3" }, "valheim.mining": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.mining", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-SxQ+Z4T5Hg5w4X4+L++eArWZXhoXuarecKl6gdpcpNQ=", + "sha256": "sha256-zWSIDugJchxIfzAt9Ktc37L6ez09iK77pUowUWTndgE=", "type": "tarball", - "url": "https://thunderstore.io/package/download/Smoothbrain/Mining/1.1.5/" + "url": "https://thunderstore.io/package/download/Smoothbrain/Mining/1.1.6/" }, - "version": "1.1.5" + "version": "1.1.6" }, "valheim.missingpieces": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.missingpieces", @@ -252,7 +294,7 @@ "version": "2.2.2" }, "valheim.multiuserchest": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.multiuserchest", @@ -266,21 +308,21 @@ "version": "0.6.1" }, "valheim.planteasily": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.planteasily", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-HvjwiVBWs723LhHR7Xk6knugOU8eQewGiV+mZaAN5YU=", + "sha256": "sha256-A7WIMjNkkZoUD9xf5gswOv00/4j/NGkE+yD4gM+bAsY=", "type": "tarball", - "url": "https://thunderstore.io/package/download/Advize/PlantEasily/2.0.3/" + "url": "https://thunderstore.io/package/download/Advize/PlantEasily/2.1.0/" }, - "version": "2.0.3" + "version": "2.1.0" }, "valheim.quickteleport": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.quickteleport", @@ -294,21 +336,21 @@ "version": "1.1.0" }, "valheim.reclaim": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.reclaim", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-MnaJ7ulZdDemBrSzKnsgL0BN7UfRfRueFJRiL0iwjB8=", + "sha256": "sha256-MIWKc6cdibXbFXKdMDdNsj7a1L6+jAMzJvhm79JQn/E=", "type": "tarball", - "url": "https://thunderstore.io/package/download/Azumatt/Recycle_N_Reclaim/1.3.10/" + "url": "https://thunderstore.io/package/download/Azumatt/Recycle_N_Reclaim/1.4.0/" }, - "version": "1.3.10" + "version": "1.4.0" }, "valheim.savecrossbow": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.savecrossbow", @@ -322,7 +364,7 @@ "version": "1.0.2" }, "valheim.seedbed": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.seedbed", @@ -336,7 +378,7 @@ "version": "1.2.8" }, "valheim.servercharacters": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.servercharacters", @@ -350,7 +392,7 @@ "version": "1.4.16" }, "valheim.smoothsave": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.smoothsave", @@ -364,7 +406,7 @@ "version": "1.0.5" }, "valheim.spearfishing": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.spearfishing", @@ -378,21 +420,21 @@ "version": "1.0.4" }, "valheim.swim": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.swim", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-ZNGOZDwLqZ+AisdQKvSU2imqdCQ84jgzT38L1Fp4g4g=", + "sha256": "sha256-3BsC+cFLMtuW9pat5vTqHPt1Ak6fbXStaq6Kk9CdU3c=", "type": "tarball", - "url": "https://thunderstore.io/package/download/blacks7ar/VikingsDoSwim/1.4.0/" + "url": "https://thunderstore.io/package/download/blacks7ar/VikingsDoSwim/1.4.1/" }, - "version": "1.4.0" + "version": "1.4.1" }, "valheim.swimequip": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.swimequip", @@ -406,21 +448,21 @@ "version": "1.1.3" }, "valheim.targetportal": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "valheim.targetportal", "passthru": null, "pinned": false, "src": { - "sha256": "sha256-qjeihonPwlja7sCRyKhJL53fWX4w1qfuFoOA6FAA7mw=", + "sha256": "sha256-mW73PrH+AwZGTYk2zr2/MOTa5RsP5rDr/HKIeKqo9DI=", "type": "tarball", - "url": "https://thunderstore.io/package/download/Smoothbrain/TargetPortal/1.2.1/" + "url": "https://thunderstore.io/package/download/Smoothbrain/TargetPortal/1.2.3/" }, - "version": "1.2.1" + "version": "1.2.3" }, "vesktop.micfix": { - "cargoLocks": null, + "cargoLock": null, "date": null, "extract": null, "name": "vesktop.micfix", diff --git a/_sources/generated.nix b/_sources/generated.nix index 25ffeef..0c44cb5 100644 --- a/_sources/generated.nix +++ b/_sources/generated.nix @@ -1,20 +1,48 @@ # This file was generated by nvfetcher, please do not modify it manually. -{ fetchgit, fetchurl, fetchFromGitHub, dockerTools }: { + fetchgit, + fetchurl, + fetchFromGitHub, + dockerTools, +}: +{ + dcts-client-shipping = { + pname = "dcts-client-shipping"; + version = "v2.5"; + src = fetchFromGitHub { + owner = "hackthedev"; + repo = "dcts-client-shipping"; + rev = "v2.5"; + fetchSubmodules = false; + sha256 = "sha256-fmU/rUIyHV/+GSgDuot3mDaZrYmxfhF3RXSAwE6HqPU="; + }; + }; + mender-cli = { + pname = "mender-cli"; + version = "2.0.0"; + vendorHash = "sha256-vlcq9HGezJsorwsaVwvIKxi1pSoo4wTPmc6qCCVDdfI="; + src = fetchFromGitHub { + owner = "mendersoftware"; + repo = "mender-cli"; + rev = "2.0.0"; + fetchSubmodules = false; + sha256 = "sha256-jFWC1g/ebgMIqgBFgotBDwPcGNmAK3VsvfjiuRCN1ws="; + }; + }; "valheim.aaacrafting" = { pname = "valheim.aaacrafting"; - version = "2.1.5"; + version = "2.1.6"; src = fetchTarball { - url = "https://thunderstore.io/package/download/Azumatt/AAA_Crafting/2.1.5/"; - sha256 = "sha256-YcKuJKSuhOYZVRNTfp1fYW+STecRYn/IrNVdOeC+rIE="; + url = "https://thunderstore.io/package/download/Azumatt/AAA_Crafting/2.1.6/"; + sha256 = "sha256-XdVVDXU/YfXHnpgjfDixFvRRIn+liunVSXqmGMLXGKY="; }; }; "valheim.architect" = { pname = "valheim.architect"; - version = "1.6.4"; + version = "1.6.5"; src = fetchTarball { - url = "https://thunderstore.io/package/download/OdinPlus/OdinArchitect/1.6.4/"; - sha256 = "sha256-osxAsTjTyVH2qG69vMxr3LH1p1Y+8g6acGHqbfdz8fs="; + url = "https://thunderstore.io/package/download/OdinPlus/OdinArchitect/1.6.5/"; + sha256 = "sha256-tNlufmp8rMKBzcRWSp0o8FbtrPOpS5OZJACnG7N1Iqc="; }; }; "valheim.arearepair" = { @@ -27,18 +55,18 @@ }; "valheim.autostore" = { pname = "valheim.autostore"; - version = "3.0.11"; + version = "3.0.14"; src = fetchTarball { - url = "https://thunderstore.io/package/download/Azumatt/AzuAutoStore/3.0.11/"; - sha256 = "sha256-h75EnPCQSXMrpDTNaxBHnG4hjYLzICYdU+sE0i/Hud4="; + url = "https://thunderstore.io/package/download/Azumatt/AzuAutoStore/3.0.14/"; + sha256 = "sha256-ZSGQTxWtTBLrGU9oRPrXgLAauiwWVQQ2gv0Rzq7FHw4="; }; }; "valheim.backpacks" = { pname = "valheim.backpacks"; - version = "1.3.6"; + version = "1.3.8"; src = fetchTarball { - url = "https://thunderstore.io/package/download/Smoothbrain/Backpacks/1.3.6/"; - sha256 = "sha256-xSfcLisLLPALx6l1Rtbt10YFUo112HV2I6BO/zCjr5w="; + url = "https://thunderstore.io/package/download/Smoothbrain/Backpacks/1.3.8/"; + sha256 = "sha256-ZHvN8J6DsRXRSzVZ3K12WSRtdKt40hMtzHMkYxl0ttU="; }; }; "valheim.betternetworking" = { @@ -59,10 +87,10 @@ }; "valheim.campsite" = { pname = "valheim.campsite"; - version = "1.6.1"; + version = "1.6.3"; src = fetchTarball { - url = "https://thunderstore.io/package/download/OdinPlus/OdinCampsite/1.6.1/"; - sha256 = "sha256-hQzKXIVxbdq73E0NZlNX+aYLS5Mg6uczX8F8GKFUtec="; + url = "https://thunderstore.io/package/download/OdinPlus/OdinCampsite/1.6.3/"; + sha256 = "sha256-vioZ7NoIWLfO0XlRCe/BEyRaouy1Kl+cPl0QXSyqjC8="; }; }; "valheim.cartography" = { @@ -75,10 +103,10 @@ }; "valheim.craftyboxes" = { pname = "valheim.craftyboxes"; - version = "1.8.12"; + version = "1.8.14"; src = fetchTarball { - url = "https://thunderstore.io/package/download/Azumatt/AzuCraftyBoxes/1.8.12/"; - sha256 = "sha256-+EKD+kBj7JHrwDi/yMPus8MZRtBApX7bOqPRrA3iXoY="; + url = "https://thunderstore.io/package/download/Azumatt/AzuCraftyBoxes/1.8.14/"; + sha256 = "sha256-P7NucjydUf9TMJi8ObfTBA+WQsxKxeaM7N8N7mSDELY="; }; }; "valheim.customships" = { @@ -91,10 +119,10 @@ }; "valheim.extendedinv" = { pname = "valheim.extendedinv"; - version = "2.2.2"; + version = "2.4.1"; src = fetchTarball { - url = "https://thunderstore.io/package/download/Azumatt/AzuExtendedPlayerInventory/2.2.2/"; - sha256 = "sha256-PDmlJw4hfMg1fqO/hPrT6Oss0Czci/Chvr+vz79m5JI="; + url = "https://thunderstore.io/package/download/Azumatt/AzuExtendedPlayerInventory/2.4.1/"; + sha256 = "sha256-mua5nD0BLzkBFIfkfOIAUPQGlOP4sTQ9eqBqrJJJG3w="; }; }; "valheim.foodmove" = { @@ -107,10 +135,10 @@ }; "valheim.jotunn" = { pname = "valheim.jotunn"; - version = "2.27.1"; + version = "2.28.0"; src = fetchTarball { - url = "https://thunderstore.io/package/download/ValheimModding/Jotunn/2.27.1/"; - sha256 = "sha256-AfiWmmoCsDtmvjTPw7AdiPYQZ055dTwq5GFvDD93e2M="; + url = "https://thunderstore.io/package/download/ValheimModding/Jotunn/2.28.0/"; + sha256 = "sha256-6Qh5hcXM886OiOpcg73EU35kvnyvTtyJ1+7CSPzBsSA="; }; }; "valheim.jsondotnet" = { @@ -131,10 +159,10 @@ }; "valheim.mining" = { pname = "valheim.mining"; - version = "1.1.5"; + version = "1.1.6"; src = fetchTarball { - url = "https://thunderstore.io/package/download/Smoothbrain/Mining/1.1.5/"; - sha256 = "sha256-SxQ+Z4T5Hg5w4X4+L++eArWZXhoXuarecKl6gdpcpNQ="; + url = "https://thunderstore.io/package/download/Smoothbrain/Mining/1.1.6/"; + sha256 = "sha256-zWSIDugJchxIfzAt9Ktc37L6ez09iK77pUowUWTndgE="; }; }; "valheim.missingpieces" = { @@ -155,10 +183,10 @@ }; "valheim.planteasily" = { pname = "valheim.planteasily"; - version = "2.0.3"; + version = "2.1.0"; src = fetchTarball { - url = "https://thunderstore.io/package/download/Advize/PlantEasily/2.0.3/"; - sha256 = "sha256-HvjwiVBWs723LhHR7Xk6knugOU8eQewGiV+mZaAN5YU="; + url = "https://thunderstore.io/package/download/Advize/PlantEasily/2.1.0/"; + sha256 = "sha256-A7WIMjNkkZoUD9xf5gswOv00/4j/NGkE+yD4gM+bAsY="; }; }; "valheim.quickteleport" = { @@ -171,10 +199,10 @@ }; "valheim.reclaim" = { pname = "valheim.reclaim"; - version = "1.3.10"; + version = "1.4.0"; src = fetchTarball { - url = "https://thunderstore.io/package/download/Azumatt/Recycle_N_Reclaim/1.3.10/"; - sha256 = "sha256-MnaJ7ulZdDemBrSzKnsgL0BN7UfRfRueFJRiL0iwjB8="; + url = "https://thunderstore.io/package/download/Azumatt/Recycle_N_Reclaim/1.4.0/"; + sha256 = "sha256-MIWKc6cdibXbFXKdMDdNsj7a1L6+jAMzJvhm79JQn/E="; }; }; "valheim.savecrossbow" = { @@ -219,10 +247,10 @@ }; "valheim.swim" = { pname = "valheim.swim"; - version = "1.4.0"; + version = "1.4.1"; src = fetchTarball { - url = "https://thunderstore.io/package/download/blacks7ar/VikingsDoSwim/1.4.0/"; - sha256 = "sha256-ZNGOZDwLqZ+AisdQKvSU2imqdCQ84jgzT38L1Fp4g4g="; + url = "https://thunderstore.io/package/download/blacks7ar/VikingsDoSwim/1.4.1/"; + sha256 = "sha256-3BsC+cFLMtuW9pat5vTqHPt1Ak6fbXStaq6Kk9CdU3c="; }; }; "valheim.swimequip" = { @@ -235,10 +263,10 @@ }; "valheim.targetportal" = { pname = "valheim.targetportal"; - version = "1.2.1"; + version = "1.2.3"; src = fetchTarball { - url = "https://thunderstore.io/package/download/Smoothbrain/TargetPortal/1.2.1/"; - sha256 = "sha256-qjeihonPwlja7sCRyKhJL53fWX4w1qfuFoOA6FAA7mw="; + url = "https://thunderstore.io/package/download/Smoothbrain/TargetPortal/1.2.3/"; + sha256 = "sha256-mW73PrH+AwZGTYk2zr2/MOTa5RsP5rDr/HKIeKqo9DI="; }; }; "vesktop.micfix" = { diff --git a/flake.lock b/flake.lock index 5ed46c3..4575f05 100644 --- a/flake.lock +++ b/flake.lock @@ -233,11 +233,11 @@ ] }, "locked": { - "lastModified": 1773367248, - "narHash": "sha256-FFMc1uAwy2GYasd0rdNDVxKyAgzuoJH2M+GglBQbqf0=", + "lastModified": 1774210133, + "narHash": "sha256-yeiWCY9aAUUJ3ebMVjs0UZXRnT5x90MCtpbpOWiXrvM=", "owner": "nix-community", "repo": "home-manager", - "rev": "be0c641a6a5564caa33982faa1fe2c60d92131c7", + "rev": "c6fe2944ad9f2444b2d767c4a5edee7c166e8a95", "type": "github" }, "original": { @@ -275,11 +275,11 @@ ] }, "locked": { - "lastModified": 1772330611, - "narHash": "sha256-UZjPc/d5XRxvjDbk4veAO4XFdvx6BUum2l40V688Xq8=", + "lastModified": 1773422513, + "narHash": "sha256-MPjR48roW7CUMU6lu0+qQGqj92Kuh3paIulMWFZy+NQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "58fd7ff0eec2cda43e705c4c0585729ec471d400", + "rev": "ef12a9a2b0f77c8fa3dda1e7e494fca668909056", "type": "github" }, "original": { @@ -291,7 +291,9 @@ "impermanence": { "inputs": { "home-manager": "home-manager_2", - "nixpkgs": "nixpkgs" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { "lastModified": 1769548169, @@ -348,7 +350,9 @@ "inputs": { "flake-compat": "flake-compat", "nix-index-database": "nix-index-database", - "nixpkgs": "nixpkgs_2" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { "lastModified": 1771150922, @@ -405,7 +409,9 @@ "inputs": { "flake-compat": "flake-compat_2", "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_3" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { "lastModified": 1750164803, @@ -423,11 +429,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1768564909, - "narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=", + "lastModified": 1774106199, + "narHash": "sha256-US5Tda2sKmjrg2lNHQL3jRQ6p96cgfWh3J1QBliQ8Ws=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f", + "rev": "6c9a78c09ff4d6c21d0319114873508a6ec01655", "type": "github" }, "original": { @@ -437,70 +443,6 @@ "type": "github" } }, - "nixpkgs_2": { - "locked": { - "lastModified": 1771008912, - "narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "a82ccc39b39b621151d6732718e3e250109076fa", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1748929857, - "narHash": "sha256-lcZQ8RhsmhsK8u7LIFsJhsLh/pzR9yZ8yqpTzyGdj+Q=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "c2a03962b8e24e669fb37b7df10e7c79531ff1a4", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_4": { - "locked": { - "lastModified": 1773282481, - "narHash": "sha256-b/GV2ysM8mKHhinse2wz+uP37epUrSE+sAKXy/xvBY4=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "fe416aaedd397cacb33a610b33d60ff2b431b127", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_5": { - "locked": { - "lastModified": 1767767207, - "narHash": "sha256-Mj3d3PfwltLmukFal5i3fFt27L6NiKXdBezC1EBuZs4=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "5912c1772a44e31bf1c63c0390b90501e5026886", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nur": { "inputs": { "flake-parts": [ @@ -538,11 +480,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1773343795, - "narHash": "sha256-0+HEuOytpwyPt7i1jj6v2QJ+NXXisCYnL2XNwPBltvg=", + "lastModified": 1774224548, + "narHash": "sha256-g45WZAZHNc7wJBkK4IdB5dq0Bh0JE7G0gcY2H5DFi44=", "owner": "NotAShelf", "repo": "nvf", - "rev": "83b44eaf50b96bd5d06b1a56a3a51f1b2362db52", + "rev": "edfb73fa4ced576f587d259a70a513b4152f8cea", "type": "github" }, "original": { @@ -558,7 +500,7 @@ "nix-alien": "nix-alien", "nix-flatpak": "nix-flatpak", "nix-minecraft": "nix-minecraft", - "nixpkgs": "nixpkgs_4", + "nixpkgs": "nixpkgs", "nvf": "nvf", "sops-nix": "sops-nix", "stylix": "stylix", @@ -573,11 +515,11 @@ ] }, "locked": { - "lastModified": 1773096132, - "narHash": "sha256-M3zEnq9OElB7zqc+mjgPlByPm1O5t2fbUrH3t/Hm5Ag=", + "lastModified": 1774154798, + "narHash": "sha256-zsTuloDSdKf+PrI1MsWx5z/cyGEJ8P3eERtAfdP8Bmg=", "owner": "Mic92", "repo": "sops-nix", - "rev": "d1ff3b1034d5bab5d7d8086a7803c5a5968cd784", + "rev": "3e0d543e6ba6c0c48117a81614e90c6d8c425170", "type": "github" }, "original": { @@ -616,7 +558,9 @@ "firefox-gnome-theme": "firefox-gnome-theme", "flake-parts": "flake-parts_2", "gnome-shell": "gnome-shell", - "nixpkgs": "nixpkgs_5", + "nixpkgs": [ + "nixpkgs" + ], "nur": "nur", "systems": "systems_3", "tinted-foot": "tinted-foot", @@ -626,11 +570,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1772296853, - "narHash": "sha256-pAtzPsgHRKw/2Kv8HgAjSJg450FDldHPWsP3AKG/Xj0=", + "lastModified": 1774124764, + "narHash": "sha256-Poz9WTjiRlqZIf197CrMMJfTifZhrZpbHFv0eU1Nhtg=", "owner": "danth", "repo": "stylix", - "rev": "c4b8e80a1020e09a1f081ad0f98ce804a6e85acf", + "rev": "e31c79f571c5595a155f84b9d77ce53a84745494", "type": "github" }, "original": { @@ -794,11 +738,11 @@ ] }, "locked": { - "lastModified": 1773290887, - "narHash": "sha256-L1yMYmFffHfZNP+hKJGRBmrFKkn/VDhu7jEbVftBQuM=", + "lastModified": 1774242250, + "narHash": "sha256-pchbnY7KVnH26g4O3LZO8vpshInqNj937gAqlPob1Mk=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "9346698c4562819f61b4e5097151ec0b17729fab", + "rev": "f19c3e6683c2d2f3fcfcb88fb691931a104bc47c", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index a84ead5..bd3ff18 100644 --- a/flake.nix +++ b/flake.nix @@ -9,9 +9,13 @@ sops-nix.inputs.nixpkgs.follows = "nixpkgs"; impermanence.url = "github:nix-community/impermanence"; + impermanence.inputs.nixpkgs.follows = "nixpkgs"; stylix.url = "github:danth/stylix"; + stylix.inputs.nixpkgs.follows = "nixpkgs"; + nix-alien.url = "github:thiagokokada/nix-alien"; + nix-alien.inputs.nixpkgs.follows = "nixpkgs"; nvf = { url = "github:NotAShelf/nvf"; @@ -24,11 +28,14 @@ }; nix-minecraft.url = "git+https://codeberg.org/nix-astral/nix-minecraft.git"; + nix-minecraft.inputs.nixpkgs.follows = "nixpkgs"; + # nix-minecraft.url = "github:Infinidoge/nix-minecraft"; valheim-server.url = "github:kmjayadeep/valheim-server-flake"; valheim-server.inputs.nixpkgs.follows = "nixpkgs"; nix-flatpak.url = "github:gmodena/nix-flatpak?ref=latest"; + nix-flatpak.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = inputs @ { @@ -53,9 +60,10 @@ (builtins.readDir ./hosts)); nixosConfigs = builtins.listToAttrs (map (host: { - name = host; - value = utils.mkHost ./hosts/${host}/configuration.nix; - }) hosts); + name = host; + value = utils.mkHost ./hosts/${host}/configuration.nix; + }) + hosts); in { nixosConfigurations = nixosConfigs; @@ -65,12 +73,13 @@ # osConfig is injected so all modules using it continue to work. # Use: home-manager switch --flake '.#muon@' homeConfigurations = builtins.listToAttrs (map (host: { - name = "muon@${host}"; - value = utils.mkHome { - hostConfig = nixosConfigs.${host}; - homeFile = ./hosts/${host}/home.nix; - }; - }) hosts); + name = "muon@${host}"; + value = utils.mkHome { + hostConfig = nixosConfigs.${host}; + homeFile = ./hosts/${host}/home.nix; + }; + }) + hosts); colmena = { meta = { @@ -94,6 +103,11 @@ ./modules/nixos inputs.home-manager.nixosModules.default inputs.stylix.nixosModules.stylix + inputs.impermanence.nixosModules.impermanence + ]; + + home-manager.sharedModules = [ + inputs.stylix.homeManagerModules.stylix ]; }; diff --git a/hosts/muho/configuration.nix b/hosts/muho/configuration.nix index 3e41fbb..db9d631 100644 --- a/hosts/muho/configuration.nix +++ b/hosts/muho/configuration.nix @@ -50,9 +50,10 @@ in { mods.server.ntfy.enable = true; mods.server.lemmy.enable = true; mods.server.audio.enable = true; - mods.server.murmur.enable = true; + # mods.server.murmur.enable = true; mods.server.atuin.enable = true; - mods.server.seedbox.enable = true; + # mods.server.seedbox.enable = true; + mods.server.enshrouded.enable = true; mods.server.dash.enable = false; mods.server.nginx.ports.dash = 3009; diff --git a/hosts/muon/configuration.nix b/hosts/muon/configuration.nix index 5166155..5b19ff4 100644 --- a/hosts/muon/configuration.nix +++ b/hosts/muon/configuration.nix @@ -16,7 +16,6 @@ in { with pkgs; [ nix-alien r2modman - lutris godot rustdesk-flutter motion @@ -81,7 +80,15 @@ in { }; }; }; - networking.firewall.allowedTCPPorts = [ 80 ]; + networking.firewall.allowedTCPPorts = [80]; + + # Wildcard DNS: *.word.local -> 127.0.0.1 via NetworkManager's built-in dnsmasq + networking.networkmanager.dns = "dnsmasq"; + # Force resolv.conf to use local dnsmasq so wildcard DNS is actually queried + networking.resolvconf.useLocalResolver = true; + environment.etc."NetworkManager/dnsmasq.d/word-local.conf".text = '' + address=/.word.local/127.0.0.1 + ''; virtualisation.virtualbox.host.enable = true; users.extraGroups.vboxusers.members = ["user-with-access-to-virtualbox"]; diff --git a/hosts/mups/configuration.nix b/hosts/mups/configuration.nix index 99008dd..ad7dfcb 100644 --- a/hosts/mups/configuration.nix +++ b/hosts/mups/configuration.nix @@ -24,7 +24,7 @@ in { # Modules mods.desktop.enable = false; - mods.theme.enable = true; + mods.theme.enable = false; mods.theme.scheme = "woodland"; mods.theme.wallpaper = ./wallpaper.png; @@ -42,6 +42,16 @@ in { mods.server.wireguard.enable = true; mods.server.nginx.enable = true; + documentation = { + enable = false; + nixos.enable = false; + man.enable = false; + info.enable = false; + doc.enable = false; + }; + + i18n.supportedLocales = ["en_US.UTF-8/UTF-8"]; + # Use the GRUB 2 boot loader. boot.loader.grub.enable = true; boot.loader.grub.device = "/dev/vda"; diff --git a/hosts/mups/home.nix b/hosts/mups/home.nix index af78173..2f77ed0 100644 --- a/hosts/mups/home.nix +++ b/hosts/mups/home.nix @@ -1,8 +1,11 @@ -{ pkgs, lib, osConfig,... }: { +{ + pkgs, + lib, + osConfig, + ... +}: { # Modules mods.terminal.zsh.enable = true; - mods.terminal.development.enable = true; - mods.terminal.tools.enable = true; # Version of first install home.stateVersion = "24.05"; diff --git a/hosts/murk/configuration.nix b/hosts/murk/configuration.nix index c8332f3..9cfe2f8 100644 --- a/hosts/murk/configuration.nix +++ b/hosts/murk/configuration.nix @@ -37,7 +37,6 @@ in { pkgs.qmk pkgs.jq pkgs.wireguard-tools - pkgs.opencode ]; boot.binfmt = { diff --git a/hosts/murk/home.nix b/hosts/murk/home.nix index c10af30..d7d028e 100644 --- a/hosts/murk/home.nix +++ b/hosts/murk/home.nix @@ -46,7 +46,6 @@ in { go rainfrog tealdeer - (callPackage ./packages/mender-cli.nix {}) ] # Non-free 127.0.0.1 via NetworkManager's built-in dnsmasq - networking.networkmanager.dns = "dnsmasq"; - # Force resolv.conf to use local dnsmasq so wildcard DNS is actually queried - networking.resolvconf.useLocalResolver = true; - environment.etc."NetworkManager/dnsmasq.d/word-local.conf".text = '' - address=/.word.local/127.0.0.1 - ''; - # gateway = # "${pkgs.networkmanager}/bin/nmcli dev show ${interface} | ${pkgs.gnugrep}/bin/fgrep IP4.GATEWAY | ${pkgs.awk}/bin/awk {print $2}"; }; diff --git a/modules/nixos/server/gaming/default.nix b/modules/nixos/server/gaming/default.nix index 46b1c01..4c963c6 100644 --- a/modules/nixos/server/gaming/default.nix +++ b/modules/nixos/server/gaming/default.nix @@ -1,4 +1,9 @@ -{ pkgs, lib, config, ... }: { +{ + pkgs, + lib, + config, + ... +}: { options.mods.server.gaming = { enable = lib.mkEnableOption { default = false; @@ -6,7 +11,7 @@ }; }; - imports = [ ./astral.nix ./vrising.nix ./statech.nix ]; + imports = [./astral.nix ./vrising.nix ./statech.nix ./enshrouded.nix]; config = lib.mkIf config.mods.server.gaming.enable { mods.server.astral.enable = true; diff --git a/modules/nixos/server/gaming/enshrouded.nix b/modules/nixos/server/gaming/enshrouded.nix new file mode 100644 index 0000000..792403a --- /dev/null +++ b/modules/nixos/server/gaming/enshrouded.nix @@ -0,0 +1,117 @@ +# Auto-generated by compose2nix. +{ + config, + pkgs, + lib, + ... +}: let + cfg = config.mods.server.enshrouded; +in + with lib; { + options.mods.server.enshrouded = { + enable = mkEnableOption { + default = false; + description = "enables enshrouded containers"; + }; + }; + + config = mkIf cfg.enable { + # Runtime + virtualisation.docker = { + enable = true; + autoPrune.enable = true; + }; + virtualisation.oci-containers.backend = "docker"; + + networking.firewall.allowedUDPPorts = [15637]; + + # Containers + virtualisation.oci-containers.containers."enshrouded" = { + image = "mornedhels/enshrouded-server:dev-proton"; + environment = { + "PGID" = "4711"; + "PUID" = "4711"; + "SERVER_NAME" = "Blarch"; + "UPDATE_CRON" = "*/30 * * * *"; + "log_level" = "50"; + "SERVER_ROLE_1_NAME" = "Friends"; + "SERVER_ROLE_1_PASSWORD" = "Blarch157"; + "SERVER_ROLE_1_CAN_ACCESS_INVENTORIES" = "true"; + "SERVER_ROLE_1_CAN_EDIT_WORLD" = "true"; + "SERVER_ROLE_1_CAN_EDIT_BASE" = "true"; + "SERVER_ROLE_1_CAN_EXTEND_BASE" = "true"; + "SERVER_ROLE_1_RESERVED_SLOTS" = "6"; + }; + volumes = [ + "/home/muon/enshrouded-server/game:/opt/enshrouded:rw" + ]; + ports = [ + "15637:15637/udp" + ]; + log-driver = "journald"; + extraOptions = [ + "--hostname=enshrouded" + "--network-alias=enshrouded" + "--network=enshrouded_default" + ]; + }; + systemd.services."docker-enshrouded" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ + "docker-network-enshrouded_default.service" + ]; + requires = [ + "docker-network-enshrouded_default.service" + ]; + partOf = [ + "docker-compose-enshrouded-root.target" + ]; + wantedBy = [ + "docker-compose-enshrouded-root.target" + ]; + }; + + # Networks + systemd.services."docker-network-enshrouded_default" = { + path = [pkgs.docker]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStop = "docker network rm -f enshrouded_default"; + }; + script = '' + docker network inspect enshrouded_default || docker network create enshrouded_default + ''; + partOf = ["docker-compose-enshrouded-root.target"]; + wantedBy = ["docker-compose-enshrouded-root.target"]; + }; + + # Builds + systemd.services."docker-build-enshrouded" = { + path = [pkgs.docker pkgs.git]; + serviceConfig = { + Type = "oneshot"; + TimeoutSec = 300; + }; + script = '' + cd /home/muon/enshrouded-server + docker build -t mornedhels/enshrouded-server:dev-proton -f dockerfiles/proton.Dockerfile . + ''; + }; + + # Root service + # When started, this will automatically create all resources and start + # the containers. When stopped, this will teardown all resources. + systemd.targets."docker-compose-enshrouded-root" = { + unitConfig = { + Description = "Root target generated by compose2nix."; + }; + wantedBy = ["multi-user.target"]; + }; + }; + } diff --git a/nvfetcher.toml b/nvfetcher.toml index cbb695a..a10a48d 100644 --- a/nvfetcher.toml +++ b/nvfetcher.toml @@ -1,3 +1,8 @@ +# ["freetube"] +# src.git = "https://github.com/ddogfoodd/nixpkgs.git" +# src.branch = "update-freetube" +# fetch.git = "https://github.com/ddogfoodd/nixpkgs.git" + ["vesktop.micfix"] src.manual = "1.0.2" fetch.url = "https://codeberg.org/muon/gists/raw/branch/main/micfix.patch" @@ -152,3 +157,11 @@ src.webpage = "https://thunderstore.io/c/valheim/p/BentoG/MissingPieces/" src.regex = "v(\\d+\\.\\d+\\.\\d+)" fetch.tarball = "https://thunderstore.io/package/download/BentoG/MissingPieces/$ver/" +["mender-cli"] +src.github = "mendersoftware/mender-cli" +fetch.github = "mendersoftware/mender-cli" + +["dcts-client-shipping"] +src.github = "hackthedev/dcts-client-shipping" +fetch.github = "hackthedev/dcts-client-shipping" + diff --git a/pkgs/dcts-client-shipping/package.nix b/pkgs/dcts-client-shipping/package.nix new file mode 100644 index 0000000..6f7c640 --- /dev/null +++ b/pkgs/dcts-client-shipping/package.nix @@ -0,0 +1,120 @@ +{ + lib, + stdenv, + stdenvNoCC, + bun, + electron, + fetchFromGitHub, + makeWrapper, + makeBinaryWrapper, + makeDesktopItem, + copyDesktopItems, + sources, + writableTmpDirAsHomeHook, +}: + +stdenvNoCC.mkDerivation (finalAttrs: { + pname = "dcts-client-shipping"; + version = sources.dcts-client-shipping.version; + src = sources.dcts-client-shipping.src; + + node_modules = stdenvNoCC.mkDerivation { + pname = "${finalAttrs.pname}-node_modules"; + inherit (finalAttrs) version src; + + impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [ + "GIT_PROXY_COMMAND" + "SOCKS_SERVER" + ]; + + nativeBuildInputs = [ + bun + writableTmpDirAsHomeHook + ]; + + dontConfigure = true; + + buildPhase = '' + runHook preBuild + + cd electron + bun install \ + --cpu="*" \ + --frozen-lockfile \ + --ignore-scripts \ + --no-progress \ + --os="*" + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/electron + cp -R node_modules $out/electron/ + + runHook postInstall + ''; + + # NOTE: Required else we get errors that our fixed-output derivation references store paths + dontFixup = true; + + outputHash = "sha256-TwfxQeK1KkKY1n/735sTxcAQfR5hUrONJcWeIaM47SE="; + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + }; + + nativeBuildInputs = [ + bun + makeBinaryWrapper + copyDesktopItems + writableTmpDirAsHomeHook + ]; + + desktopItems = [ + (makeDesktopItem { + name = "dcts"; + desktopName = "DCTS"; + comment = "DCTS Desktop Client - Secure messaging"; + exec = "dcts"; + icon = "dcts"; + categories = [ "Network" "InstantMessaging" ]; + }) + ]; + + buildPhase = '' + runHook preBuild + + # Copy node_modules from the separate derivation + cp -R ${finalAttrs.node_modules}/electron/node_modules electron/ + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/lib/dcts + cp -R electron/* $out/lib/dcts/ + + # Create wrapper script + makeWrapper ${electron}/bin/electron $out/bin/dcts \ + --add-flags $out/lib/dcts \ + --set ELECTRON_OVERRIDE_DIST_PATH ${electron}/bin/ + + # Install icon + install -Dm644 electron/icon.png $out/share/icons/hicolor/256x256/apps/dcts.png + + runHook postInstall + ''; + + meta = { + description = "DCTS Desktop Client - Electron app for secure messaging"; + homepage = "https://github.com/hackthedev/dcts-client-shipping"; + license = lib.licenses.isc; + maintainers = [ ]; + platforms = lib.platforms.linux; + mainProgram = "dcts"; + }; +}) diff --git a/pkgs/nvft/README.md b/pkgs/nvft/README.md new file mode 100644 index 0000000..9c47691 --- /dev/null +++ b/pkgs/nvft/README.md @@ -0,0 +1,55 @@ +# nvft (nvfetcher + tools) + +A Nix package that combines nvfetcher source updates with automatic Go vendor hash calculation. + +## Usage + +```bash +# Enter the nix-shell (makes nvft available) +nix-shell + +# Run the updater +nvft +``` + +This will: +1. Save existing vendorHash and source hashes +2. Run `nvfetcher` to update all source versions and hashes in `_sources/generated.nix` +3. Restore saved vendorHash values +4. Check if source hash changed - if yes, recalculate vendorHash; if no, skip (fast!) +5. Update `vendorHash` in `_sources/generated.nix` only if needed + +## Configuration + +Go packages that need vendor hash updates are configured in the `GO_PACKAGES` array within the script. + +Currently configured packages: +- `mender-cli` -> `modules/home/terminal/hr/mender-cli.nix` + +To add more Go packages, edit `pkgs/nvft/default.nix` and add entries to the `GO_PACKAGES` array. + +## How it Works + +For each Go package: +1. Compares old vs new source hash to detect updates +2. If source unchanged, keeps existing vendorHash (fast) +3. If source changed, creates a temporary build with `lib.fakeHash` +4. Attempts to build, which fails with the correct hash +5. Extracts the correct hash from the error message +6. Updates `vendorHash` directly in `_sources/generated.nix` alongside the source information + +## Package Usage + +Go packages read vendorHash from the sources: + +```nix +let + src = sources.mender-cli; +in +buildGoModule { + inherit (src) pname version src vendorHash; + # ... rest of package +} +``` + +The vendorHash is stored in `_sources/generated.nix` alongside the version and source hash, keeping all auto-generated values in one place. diff --git a/pkgs/nvft/default.nix b/pkgs/nvft/default.nix new file mode 100644 index 0000000..0767c39 --- /dev/null +++ b/pkgs/nvft/default.nix @@ -0,0 +1,250 @@ +{ + lib, + writeShellApplication, + nvfetcher, + nix, + gnused, + coreutils, +}: +writeShellApplication { + name = "nvft"; + + runtimeInputs = [ + nvfetcher + nix + gnused + coreutils + ]; + + text = '' + set -euo pipefail + + # Determine the config directory + if [[ -n "''${NVFETCHER_CONFIG_DIR:-}" ]]; then + CONFIG_DIR="$NVFETCHER_CONFIG_DIR" + elif [[ -f "nvfetcher.toml" ]]; then + CONFIG_DIR="$(pwd)" + else + CONFIG_DIR="''${HOME}/.config/home" + fi + + if [[ ! -f "$CONFIG_DIR/nvfetcher.toml" ]]; then + echo "❌ Error: nvfetcher.toml not found in $CONFIG_DIR" + exit 1 + fi + + echo "🚀 Updating sources in $CONFIG_DIR" + echo "" + + SOURCES_FILE="$CONFIG_DIR/_sources/generated.nix" + + # Read Go packages from nvfetcher.toml that need vendorHash updates + declare -A GO_PACKAGES + # For now, hardcode the known Go packages + # TODO: Could parse nvfetcher.toml to auto-detect these + GO_PACKAGES["mender-cli"]="modules/home/terminal/hr/mender-cli.nix" + + # Step 0: Save existing hashes before nvfetcher wipes them + echo "💾 Saving existing hashes..." + declare -A SAVED_VENDOR_HASHES + declare -A SAVED_SOURCE_HASHES + + if [[ -f "$SOURCES_FILE" ]]; then + for source_name in "''${!GO_PACKAGES[@]}"; do + # Save vendorHash + saved_vendor=$(grep -A20 "^ $source_name = " "$SOURCES_FILE" | grep -oP 'vendorHash = "\K[^"]+' || echo "") + if [[ -n "$saved_vendor" ]]; then + SAVED_VENDOR_HASHES["$source_name"]="$saved_vendor" + echo " Saved $source_name vendorHash: $saved_vendor" + fi + + # Save source sha256 to detect if source changed + saved_source=$(grep -A20 "^ $source_name = " "$SOURCES_FILE" | grep -oP 'sha256 = "\K[^"]+' || echo "") + if [[ -n "$saved_source" ]]; then + SAVED_SOURCE_HASHES["$source_name"]="$saved_source" + echo " Saved $source_name sourceHash: $saved_source" + fi + done + fi + echo "" + + # Step 1: Run nvfetcher + echo "đŸ“Ļ Step 1: Running nvfetcher..." + cd "$CONFIG_DIR" + if nvfetcher; then + echo "" + echo "✅ nvfetcher completed" + echo "" + else + echo "" + echo "âš ī¸ nvfetcher had some errors, but continuing with vendor hash updates..." + echo "" + fi + + # Step 2: Restore saved vendorHash values + echo "đŸ“Ļ Step 2: Restoring saved vendorHash values..." + for source_name in "''${!SAVED_VENDOR_HASHES[@]}"; do + saved_hash="''${SAVED_VENDOR_HASHES[$source_name]}" + echo " Restoring $source_name: $saved_hash" + + # Add vendorHash back after version line using awk + awk -v source="$source_name" -v hash="$saved_hash" ' + /^ / && $0 ~ source" = " {in_block=1} + in_block && /version = / {print; print " vendorHash = \"" hash "\";"; next} + in_block && /^ };/ {in_block=0} + {print} + ' "$SOURCES_FILE" > "$SOURCES_FILE.tmp" && mv "$SOURCES_FILE.tmp" "$SOURCES_FILE" + done + echo "" + + # Step 3: Update Go vendor hashes + echo "đŸ“Ļ Step 3: Checking for Go packages that need vendor hash updates..." + + if [[ ! -f "$SOURCES_FILE" ]]; then + echo "❌ Error: Generated sources file not found at $SOURCES_FILE" + exit 1 + fi + + if [[ ''${#GO_PACKAGES[@]} -eq 0 ]]; then + echo "â„šī¸ No Go packages configured for vendor hash updates" + echo "" + echo "🎉 All updates complete!" + exit 0 + fi + + for source_name in "''${!GO_PACKAGES[@]}"; do + package_path="''${GO_PACKAGES[$source_name]}" + full_path="$CONFIG_DIR/$package_path" + + if [[ ! -f "$full_path" ]]; then + echo "âš ī¸ Package file not found: $full_path" + continue + fi + + echo "" + echo "đŸ“Ļ Processing $source_name..." + + # Check if vendorHash already exists in generated.nix + current_vendor=$(grep -A20 "^ $source_name = " "$SOURCES_FILE" | grep -oP 'vendorHash = "\K[^"]+' || echo "") + + if [[ -n "$current_vendor" ]]; then + echo " Current vendorHash: $current_vendor" + else + echo " No vendorHash found" + fi + + # Check if source hash changed (indicates version/source update) + new_source_hash=$(grep -A20 "^ $source_name = " "$SOURCES_FILE" | grep -oP 'sha256 = "\K[^"]+' || echo "") + old_source_hash="''${SAVED_SOURCE_HASHES[$source_name]:-}" + + if [[ -n "$old_source_hash" ]] && [[ "$old_source_hash" == "$new_source_hash" ]]; then + echo " Source unchanged (hash: ''${new_source_hash:0:16}...)" + echo " ✨ Skipping vendorHash recalculation" + continue + elif [[ -n "$old_source_hash" ]]; then + echo " Source changed!" + echo " Old: ''${old_source_hash:0:16}..." + echo " New: ''${new_source_hash:0:16}..." + echo " → Need to recalculate vendorHash" + else + echo " New package, calculating vendorHash..." + fi + + # Get version from generated sources + new_version=$(nix-instantiate --eval --strict --expr " + let pkgs = import {}; + sources = pkgs.callPackage $SOURCES_FILE {}; + in sources.''${source_name}.version + " 2>/dev/null | tr -d '"' || echo "") + + if [[ -z "$new_version" ]]; then + echo "âš ī¸ Could not determine version from generated sources" + continue + fi + + echo " Version: $new_version" + + # Create temporary build directory + temp_build=$(mktemp -d) + trap 'rm -rf "$temp_build"' EXIT + + # Copy necessary files + cp -r "$CONFIG_DIR/_sources" "$temp_build/" + cp "$full_path" "$temp_build/package.nix" + + # Create build expression + cat > "$temp_build/default.nix" << 'NIXEOF' + { pkgs ? import {} }: + let + sources = pkgs.callPackage ./_sources/generated.nix {}; + in + pkgs.callPackage ./package.nix { inherit sources; } + NIXEOF + + # Temporarily replace hash with fakeHash + # Replace both inherited vendorHash and explicit vendorHash assignments + sed -i 's|inherit (src) pname version src vendorHash|inherit (src) pname version src;\n vendorHash = lib.fakeHash|g' "$temp_build/package.nix" + sed -i 's|vendorHash = "[^"]*";|vendorHash = lib.fakeHash;|g' "$temp_build/package.nix" + + echo " Calculating correct vendor hash..." + + # Build and extract the correct hash from error message + vendor_hash=$(nix-build "$temp_build/default.nix" 2>&1 | \ + grep -oP 'got:\s+\K(sha256-[A-Za-z0-9+/=]+)' | \ + head -1 || echo "") + + if [[ -z "$vendor_hash" ]]; then + echo "âš ī¸ Could not calculate vendor hash" + echo " The package may have built successfully (current hash is correct)" + echo " Or there may be a build error unrelated to vendorHash" + continue + fi + + echo " New hash: $vendor_hash" + + # Update the generated.nix file to include vendorHash + # Find the entry and add/update vendorHash after version + if grep -q "^ $source_name = " "$SOURCES_FILE"; then + # Check if vendorHash already exists + if grep -A20 "^ $source_name = " "$SOURCES_FILE" | grep -q "vendorHash"; then + # Update existing vendorHash using awk for better multiline handling + awk -v source="$source_name" -v hash="$vendor_hash" ' + /^ / && $0 ~ source" = " {in_block=1} + in_block && /vendorHash = / {sub(/vendorHash = "[^"]*"/, "vendorHash = \"" hash "\"")} + in_block && /^ };/ {in_block=0} + {print} + ' "$SOURCES_FILE" > "$SOURCES_FILE.tmp" && mv "$SOURCES_FILE.tmp" "$SOURCES_FILE" + echo "✅ Updated vendorHash in generated.nix" + else + # Add vendorHash after version line using awk + awk -v source="$source_name" -v hash="$vendor_hash" ' + /^ / && $0 ~ source" = " {in_block=1} + in_block && /version = / {print; print " vendorHash = \"" hash "\";"; next} + in_block && /^ };/ {in_block=0} + {print} + ' "$SOURCES_FILE" > "$SOURCES_FILE.tmp" && mv "$SOURCES_FILE.tmp" "$SOURCES_FILE" + echo "✅ Added vendorHash to generated.nix" + fi + else + echo "âš ī¸ Could not find $source_name entry in generated.nix" + fi + done + + echo "" + echo "🎉 All updates complete!" + echo "" + echo "Summary:" + echo " - Source versions and hashes updated by nvfetcher" + echo " - Go vendor hashes recalculated and updated" + echo "" + echo "Next steps:" + echo " - Review changes: git diff" + echo " - Test build: home-manager switch or similar" + echo " - Commit if everything works" + ''; + + meta = { + description = "Update nvfetcher sources and Go vendor hashes"; + mainProgram = "nvft"; + }; +} diff --git a/shell.nix b/shell.nix index ffc8955..1da75bc 100644 --- a/shell.nix +++ b/shell.nix @@ -1,4 +1,8 @@ -{pkgs ? import {}, ...}: { +{pkgs ? import {}, ...}: +let + nvft = pkgs.callPackage ./pkgs/nvft {}; +in +{ default = pkgs.mkShell { NIX_CONFIG = "extra-experimental-features = nix-command flakes ca-derivations"; nativeBuildInputs = with pkgs; [ @@ -8,6 +12,7 @@ sops age nvfetcher + nvft ]; }; }