Compare changes

Choose any two refs to compare.

+1
.gitignore
···
# balls
result
+
result-*
.direnv/
*.qcow2
+142 -155
flake.lock
···
{
"nodes": {
+
"actor-typeahead-src": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1762835797,
+
"narHash": "sha256-heizoWUKDdar6ymfZTnj3ytcEv/L4d4fzSmtr0HlXsQ=",
+
"ref": "refs/heads/main",
+
"rev": "677fe7f743050a4e7f09d4a6f87bbf1325a06f6b",
+
"revCount": 6,
+
"type": "git",
+
"url": "https://tangled.org/@jakelazaroff.com/actor-typeahead"
+
},
+
"original": {
+
"type": "git",
+
"url": "https://tangled.org/@jakelazaroff.com/actor-typeahead"
+
}
+
},
"arion": {
"inputs": {
"flake-parts": "flake-parts",
···
]
},
"locked": {
-
"lastModified": 1759632323,
-
"narHash": "sha256-TzLTfXxhOkR/8oOoVEAYQWb81ADGHdKsQXGicC7kR+M=",
+
"lastModified": 1765839957,
+
"narHash": "sha256-c2k30kehMWLEQpO41OhyDruj1S7RsyBlgx4yHlXKVa4=",
"owner": "hercules-ci",
"repo": "arion",
-
"rev": "24658a03be2d1a6e1e02c01524775d960a82309c",
+
"rev": "9ff7acc2c00a40ecf24894592ea5019439bb9e13",
"type": "github"
},
"original": {
···
"nixpkgs": "nixpkgs"
},
"locked": {
-
"lastModified": 1754766435,
-
"narHash": "sha256-DT8CQoqV2haX+Fo16WXAt9gKCSXOZH9ZfnV++Br+qcM=",
+
"lastModified": 1763111355,
+
"narHash": "sha256-iUTS8wV7tCo7A456Ro6ZOJ6Bbk0V5Is3zPd+BmJHJ/Q=",
"owner": "catppuccin",
"repo": "nix",
-
"rev": "e339d6d822fa81c39d1ab89694b4ee2cfc830c9a",
+
"rev": "5375a9d80c4b2a835c7203920f997f3ea4224423",
"type": "github"
},
"original": {
···
},
"crane": {
"locked": {
-
"lastModified": 1731098351,
-
"narHash": "sha256-HQkYvKvaLQqNa10KEFGgWHfMAbWBfFp+4cAgkut+NNE=",
+
"lastModified": 1765145449,
+
"narHash": "sha256-aBVHGWWRzSpfL++LubA0CwOOQ64WNLegrYHwsVuVN7A=",
"owner": "ipetkov",
"repo": "crane",
-
"rev": "ef80ead953c1b28316cc3f8613904edc2eb90c28",
+
"rev": "69f538cdce5955fcd47abfed4395dc6d5194c1c5",
"type": "github"
},
"original": {
···
"flake-compat": {
"flake": false,
"locked": {
-
"lastModified": 1747046372,
-
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
+
"lastModified": 1761588595,
+
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
"owner": "edolstra",
"repo": "flake-compat",
-
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
+
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
"type": "github"
},
"original": {
···
"flake-compat_2": {
"flake": false,
"locked": {
-
"lastModified": 1696426674,
-
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+
"lastModified": 1761588595,
+
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
"owner": "edolstra",
"repo": "flake-compat",
-
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
"type": "github"
},
"original": {
···
]
},
"locked": {
-
"lastModified": 1759362264,
-
"narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=",
+
"lastModified": 1763759067,
+
"narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=",
"owner": "hercules-ci",
"repo": "flake-parts",
-
"rev": "758cf7296bee11f1706a574c77d072b8a7baa881",
+
"rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0",
"type": "github"
},
"original": {
···
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": [
-
"lanzaboote",
-
"nixpkgs"
-
]
-
},
-
"locked": {
-
"lastModified": 1730504689,
-
"narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=",
-
"owner": "hercules-ci",
-
"repo": "flake-parts",
-
"rev": "506278e768c2a08bec68eb62932193e341f55c90",
-
"type": "github"
-
},
-
"original": {
-
"owner": "hercules-ci",
-
"repo": "flake-parts",
-
"type": "github"
-
}
-
},
-
"flake-parts_3": {
-
"inputs": {
-
"nixpkgs-lib": [
"mystia",
"nix-update-soopy",
"nixpkgs"
···
"systems": "systems_2"
},
"locked": {
-
"lastModified": 1694529238,
-
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
+
"lastModified": 1731533236,
+
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
-
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
+
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
···
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
+
"home-manager": "home-manager",
"nixpkgs": "nixpkgs_2",
"zig": "zig",
"zon2nix": "zon2nix"
},
"locked": {
-
"lastModified": 1761906757,
-
"narHash": "sha256-0Ri4u46+cRONAs1SlvLLh5+haPigGXDikvvmcWcYpzg=",
+
"lastModified": 1767049078,
+
"narHash": "sha256-BZ62cvoAvq74l82PB3gqTgg+ltz47FViC0N3RbWYxys=",
"owner": "ghostty-org",
"repo": "ghostty",
-
"rev": "b043623bb25ca5fad5e836b856a3592d6b232193",
+
"rev": "1fa6641a6adf3936f6c8c81e14b5821d2de1a81b",
"type": "github"
},
"original": {
···
"inputs": {
"nixpkgs": [
"lanzaboote",
-
"pre-commit-hooks-nix",
+
"pre-commit",
"nixpkgs"
]
},
···
]
},
"locked": {
-
"lastModified": 1754078208,
-
"narHash": "sha256-YVoIFDCDpYuU3riaDEJ3xiGdPOtsx4sR5eTzHTytPV8=",
+
"lastModified": 1763982521,
+
"narHash": "sha256-ur4QIAHwgFc0vXiaxn5No/FuZicxBr2p0gmT54xZkUQ=",
"owner": "nix-community",
"repo": "gomod2nix",
-
"rev": "7f963246a71626c7fc70b431a315c4388a0c95cf",
+
"rev": "02e63a239d6eabd595db56852535992c898eba72",
"type": "github"
},
"original": {
···
"home-manager": {
"inputs": {
"nixpkgs": [
+
"ghostty",
"nixpkgs"
]
},
"locked": {
-
"lastModified": 1758463745,
-
"narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=",
+
"lastModified": 1755776884,
+
"narHash": "sha256-CPM7zm6csUx7vSfKvzMDIjepEJv1u/usmaT7zydzbuI=",
"owner": "nix-community",
"repo": "home-manager",
-
"rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3",
+
"rev": "4fb695d10890e9fc6a19deadf85ff79ffb78da86",
"type": "github"
},
"original": {
···
"type": "github"
}
},
+
"home-manager_2": {
+
"inputs": {
+
"nixpkgs": [
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1767024057,
+
"narHash": "sha256-B1aycRjMRvb6QOGbnqDhiDzZwMebj5jxZ5qyJzaKvpI=",
+
"owner": "nix-community",
+
"repo": "home-manager",
+
"rev": "34578a2fdfce4257ce5f5baf6e7efbd4e4e252b1",
+
"type": "github"
+
},
+
"original": {
+
"owner": "nix-community",
+
"ref": "release-25.11",
+
"repo": "home-manager",
+
"type": "github"
+
}
+
},
"htmx-src": {
"flake": false,
"locked": {
···
"inputs": {
"nix": "nix",
"nix-eval-jobs": "nix-eval-jobs",
-
"nixpkgs": "nixpkgs_4"
+
"nixpkgs": "nixpkgs_3"
},
"locked": {
-
"lastModified": 1760595422,
-
"narHash": "sha256-JMC6cX8dk5MwZSHQ8O3nrYaqXcGHi2xciBgfI45Z/KE=",
+
"lastModified": 1764105837,
+
"narHash": "sha256-odn4JAamENIUa+KfWCDi1BxM02TOmvhxyEdFLZrV+/4=",
"owner": "NixOS",
"repo": "hydra",
-
"rev": "0414ae64ebeea4ca0121515bdff42d7a3869862b",
+
"rev": "34ff66a460c21ee69d840c8c896d067405ba4a3e",
"type": "github"
},
"original": {
···
"lastModified": 1731402384,
"narHash": "sha256-OwUmrPfEehLDz0fl2ChYLK8FQM2p0G1+EMrGsYEq+6g=",
"type": "tarball",
-
"url": "https://github.com/IBM/plex/releases/download/@ibm/plex-mono@1.1.0/ibm-plex-mono.zip"
+
"url": "https://github.com/IBM/plex/releases/download/@ibm%2Fplex-mono@1.1.0/ibm-plex-mono.zip"
},
"original": {
"type": "tarball",
-
"url": "https://github.com/IBM/plex/releases/download/@ibm/plex-mono@1.1.0/ibm-plex-mono.zip"
+
"url": "https://github.com/IBM/plex/releases/download/@ibm%2Fplex-mono@1.1.0/ibm-plex-mono.zip"
}
},
"indigo": {
···
"lanzaboote": {
"inputs": {
"crane": "crane",
-
"flake-compat": "flake-compat_2",
-
"flake-parts": "flake-parts_2",
"nixpkgs": [
"nixpkgs"
],
-
"pre-commit-hooks-nix": "pre-commit-hooks-nix",
+
"pre-commit": "pre-commit",
"rust-overlay": "rust-overlay"
},
"locked": {
-
"lastModified": 1737639419,
-
"narHash": "sha256-AEEDktApTEZ5PZXNDkry2YV2k6t0dTgLPEmAZbnigXU=",
+
"lastModified": 1765382359,
+
"narHash": "sha256-RJmgVDzjRI18BWVogG6wpsl1UCuV6ui8qr4DJ1LfWZ8=",
"owner": "nix-community",
"repo": "lanzaboote",
-
"rev": "a65905a09e2c43ff63be8c0e86a93712361f871e",
+
"rev": "e8c096ade12ec9130ff931b0f0e25d2f1bc63607",
"type": "github"
},
"original": {
"owner": "nix-community",
-
"ref": "v0.4.2",
+
"ref": "v1.0.0",
"repo": "lanzaboote",
"type": "github"
}
···
"inputs": {
"flake-compat": "flake-compat_3",
"nix-update-soopy": "nix-update-soopy",
-
"nixpkgs": "nixpkgs_5",
+
"nixpkgs": "nixpkgs_4",
"treefmt-nix": "treefmt-nix_2"
},
"locked": {
-
"lastModified": 1761897752,
-
"narHash": "sha256-Djjrcq5aO5qWEo1Czxl5njvbBtvx6YV+P4FuPEcTKas=",
+
"lastModified": 1765558006,
+
"narHash": "sha256-8o8J6YJgx7ZLZJfXlKL/upDyGuRFoTOTKeaLT4ZgUHw=",
"owner": "soopyc",
"repo": "mystia",
-
"rev": "1728bcfd650f2bb944e39cbf87fe204ddcd01008",
+
"rev": "5b177c1b32e2f671c1b4b92f0d71ec2a6a55fa9a",
"type": "github"
},
"original": {
···
]
},
"locked": {
-
"lastModified": 1761451000,
-
"narHash": "sha256-qBJL6xEIjqYq9zOcG2vf2nPTeVBppNJzvO0LuQWMwMo=",
+
"lastModified": 1765267181,
+
"narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
"owner": "nix-community",
"repo": "nix-index-database",
-
"rev": "ed6b293161b378a7368cda38659eb8d3d9a0dac4",
+
"rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
"type": "github"
},
"original": {
···
},
"nix-update-soopy": {
"inputs": {
-
"flake-parts": "flake-parts_3",
+
"flake-parts": "flake-parts_2",
"nixpkgs": [
"mystia",
"nixpkgs"
···
},
"nixos-hardware": {
"locked": {
-
"lastModified": 1760427889,
-
"narHash": "sha256-OqvmnwlfTU+/EoU8kJSPWitQuHBzswAPrxshw9duKi4=",
+
"lastModified": 1767105924,
+
"narHash": "sha256-Sr2uqrc5VVFm5zIqJw87MtB2skLcIQGMywmtjFecWn0=",
"owner": "soopyc",
"repo": "nixos-hardware",
-
"rev": "782e18a837d51d2035815a128a242f587e3bbd60",
+
"rev": "cd2b93bdcf720c6b68522eafd5aa1347a25a41b0",
"type": "github"
},
"original": {
···
"type": "github"
}
},
-
"nixpkgs-stable": {
-
"locked": {
-
"lastModified": 1730741070,
-
"narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=",
-
"owner": "NixOS",
-
"repo": "nixpkgs",
-
"rev": "d063c1dd113c91ab27959ba540c0d9753409edf3",
-
"type": "github"
-
},
-
"original": {
-
"owner": "NixOS",
-
"ref": "nixos-24.05",
-
"repo": "nixpkgs",
-
"type": "github"
-
}
-
},
"nixpkgs_2": {
"locked": {
-
"lastModified": 315532800,
-
"narHash": "sha256-sV6pJNzFkiPc6j9Bi9JuHBnWdVhtKB/mHgVmMPvDFlk=",
-
"rev": "82c2e0d6dde50b17ae366d2aa36f224dc19af469",
+
"lastModified": 1763191728,
+
"narHash": "sha256-gI9PpaoX4/f28HkjcTbFVpFhtOxSDtOEdFaHZrdETe0=",
+
"rev": "1d4c88323ac36805d09657d13a5273aea1b34f0c",
"type": "tarball",
-
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre877938.82c2e0d6dde5/nixexprs.tar.xz"
+
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre896415.1d4c88323ac3/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
···
},
"nixpkgs_3": {
"locked": {
-
"lastModified": 1758360447,
-
"narHash": "sha256-XDY3A83bclygHDtesRoaRTafUd80Q30D/Daf9KSG6bs=",
-
"rev": "8eaee110344796db060382e15d3af0a9fc396e0e",
-
"type": "tarball",
-
"url": "https://releases.nixos.org/nixos/unstable/nixos-25.11pre864002.8eaee1103447/nixexprs.tar.xz"
-
},
-
"original": {
-
"type": "tarball",
-
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
-
}
-
},
-
"nixpkgs_4": {
-
"locked": {
-
"lastModified": 1759652726,
-
"narHash": "sha256-2VjnimOYDRb3DZHyQ2WH2KCouFqYm9h0Rr007Al/WSA=",
+
"lastModified": 1764020296,
+
"narHash": "sha256-6zddwDs2n+n01l+1TG6PlyokDdXzu/oBmEejcH5L5+A=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "06b2985f0cc9eb4318bf607168f4b15af1e5e81d",
+
"rev": "a320ce8e6e2cc6b4397eef214d202a50a4583829",
"type": "github"
},
"original": {
"owner": "NixOS",
-
"ref": "nixos-25.05-small",
+
"ref": "nixos-25.11-small",
"repo": "nixpkgs",
"type": "github"
}
},
-
"nixpkgs_5": {
+
"nixpkgs_4": {
"locked": {
-
"lastModified": 1761672384,
-
"narHash": "sha256-o9KF3DJL7g7iYMZq9SWgfS1BFlNbsm6xplRjVlOCkXI=",
+
"lastModified": 1763966396,
+
"narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "08dacfca559e1d7da38f3cf05f1f45ee9bfd213c",
+
"rev": "5ae3b07d8d6527c42f17c876e404993199144b6a",
"type": "github"
},
"original": {
···
"type": "indirect"
}
},
-
"nixpkgs_6": {
+
"nixpkgs_5": {
"locked": {
-
"lastModified": 1761818262,
-
"narHash": "sha256-4/MWuMWJCL2C7VTSwQKB8PdYRdd6klqikxDm2FTkU+0=",
-
"rev": "daf6dc47aa4b44791372d6139ab7b25269184d55",
+
"lastModified": 1766885793,
+
"narHash": "sha256-3wE9FvGp15AXnwNsGH8gs+i/j/25EBvIoJapquYvB6I=",
+
"rev": "9ef261221d1e72399f2036786498d78c38185c46",
"type": "tarball",
-
"url": "https://releases.nixos.org/nixos/25.05/nixos-25.05.811874.daf6dc47aa4b/nixexprs.tar.xz"
+
"url": "https://releases.nixos.org/nixos/25.11/nixos-25.11.2679.9ef261221d1e/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
-
"url": "https://nixpkgs.dev/channel/nixos-25.05"
+
"url": "https://nixpkgs.dev/channel/nixos-25.11"
}
},
-
"pre-commit-hooks-nix": {
+
"pre-commit": {
"inputs": {
-
"flake-compat": [
-
"lanzaboote",
-
"flake-compat"
-
],
+
"flake-compat": "flake-compat_2",
"gitignore": "gitignore",
"nixpkgs": [
"lanzaboote",
"nixpkgs"
-
],
-
"nixpkgs-stable": "nixpkgs-stable"
+
]
},
"locked": {
-
"lastModified": 1731363552,
-
"narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=",
+
"lastModified": 1765016596,
+
"narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
-
"rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0",
+
"rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c",
"type": "github"
},
"original": {
···
"arion": "arion",
"catppuccin": "catppuccin",
"ghostty": "ghostty",
-
"home-manager": "home-manager",
+
"home-manager": "home-manager_2",
"hydra": "hydra",
"knotserver-module": "knotserver-module",
"lanzaboote": "lanzaboote",
"mystia": "mystia",
"nix-index-database": "nix-index-database",
"nixos-hardware": "nixos-hardware",
-
"nixpkgs": "nixpkgs_6",
+
"nixpkgs": "nixpkgs_5",
"sops-nix": "sops-nix",
"tangled-core": "tangled-core",
"treefmt-nix": "treefmt-nix_3",
···
]
},
"locked": {
-
"lastModified": 1731897198,
-
"narHash": "sha256-Ou7vLETSKwmE/HRQz4cImXXJBr/k9gp4J4z/PF8LzTE=",
+
"lastModified": 1765075567,
+
"narHash": "sha256-KFDCdQcHJ0hE3Nt5Gm5enRIhmtEifAjpxgUQ3mzSJpA=",
"owner": "oxalica",
"repo": "rust-overlay",
-
"rev": "0be641045af6d8666c11c2c40e45ffc9667839b5",
+
"rev": "769156779b41e8787a46ca3d7d76443aaf68be6f",
"type": "github"
},
"original": {
···
]
},
"locked": {
-
"lastModified": 1760998189,
-
"narHash": "sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY=",
+
"lastModified": 1766894905,
+
"narHash": "sha256-pn8AxxfajqyR/Dmr1wnZYdUXHgM3u6z9x0Z1Ijmz2UQ=",
"owner": "Mic92",
"repo": "sops-nix",
-
"rev": "5a7d18b5c55642df5c432aadb757140edfeb70b3",
+
"rev": "61b39c7b657081c2adc91b75dd3ad8a91d6f07a7",
"type": "github"
},
"original": {
···
},
"tangled-core": {
"inputs": {
+
"actor-typeahead-src": "actor-typeahead-src",
"flake-compat": "flake-compat_4",
"gomod2nix": "gomod2nix",
"htmx-src": "htmx-src",
···
"sqlite-lib-src": "sqlite-lib-src"
},
"locked": {
-
"lastModified": 1761836436,
-
"narHash": "sha256-5yN4yHrNbAlrEdOGXF9dgfagplcP9lvlO5uyG6+GpCo=",
+
"lastModified": 1767063361,
+
"narHash": "sha256-MyxjxAfOw6LgPGbv/m/am5E080jtc+FunlYFu5HIVUU=",
"ref": "refs/heads/master",
-
"rev": "a59a052b422ae49b270190c67757cd0353b1b632",
-
"revCount": 1579,
+
"rev": "4bdc9dfe9bb5ed8f5dfea30b9a45bc93b1430535",
+
"revCount": 1779,
"type": "git",
"url": "https://tangled.org/@tangled.sh/core"
},
···
]
},
"locked": {
-
"lastModified": 1761311587,
-
"narHash": "sha256-Msq86cR5SjozQGCnC6H8C+0cD4rnx91BPltZ9KK613Y=",
+
"lastModified": 1762938485,
+
"narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=",
"owner": "numtide",
"repo": "treefmt-nix",
-
"rev": "2eddae033e4e74bf581c2d1dfa101f9033dbd2dc",
+
"rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4",
"type": "github"
},
"original": {
···
]
},
"locked": {
-
"lastModified": 1761311587,
-
"narHash": "sha256-Msq86cR5SjozQGCnC6H8C+0cD4rnx91BPltZ9KK613Y=",
+
"lastModified": 1767086983,
+
"narHash": "sha256-l4c8HQkgsB15BUZI1SHLAZHQ7822iIkJtOsdIuXIO4s=",
"owner": "numtide",
"repo": "treefmt-nix",
-
"rev": "2eddae033e4e74bf581c2d1dfa101f9033dbd2dc",
+
"rev": "c9eb5bb179067ddced348aca023a3fbf8b5832c5",
"type": "github"
},
"original": {
···
]
},
"locked": {
-
"lastModified": 1760401936,
-
"narHash": "sha256-/zj5GYO5PKhBWGzbHbqT+ehY8EghuABdQ2WGfCwZpCQ=",
+
"lastModified": 1763295135,
+
"narHash": "sha256-sGv/NHCmEnJivguGwB5w8LRmVqr1P72OjS+NzcJsssE=",
"owner": "mitchellh",
"repo": "zig-overlay",
-
"rev": "365085b6652259753b598d43b723858184980bbe",
+
"rev": "64f8b42cfc615b2cf99144adf2b7728c7847c72a",
"type": "github"
},
"original": {
···
},
"zon2nix": {
"inputs": {
-
"nixpkgs": "nixpkgs_3"
+
"nixpkgs": [
+
"ghostty",
+
"nixpkgs"
+
]
},
"locked": {
"lastModified": 1758405547,
+4 -4
flake.nix
···
inputs = {
mystia.url = "github:soopyc/mystia";
# nixpkgs.follows = "mystia/nixpkgs";
-
nixpkgs.url = "https://nixpkgs.dev/channel/nixos-25.05";
+
nixpkgs.url = "https://nixpkgs.dev/channel/nixos-25.11";
nixos-hardware.url = "github:soopyc/nixos-hardware/apple-t2-updates";
-
catppuccin.url = "github:catppuccin/nix/release-25.05";
+
catppuccin.url = "github:catppuccin/nix/release-25.05"; # TODO
hydra.url = "github:NixOS/hydra";
ghostty.url = "github:ghostty-org/ghostty";
···
home-manager = {
# sync with nixpkgs!
-
url = "github:nix-community/home-manager/release-25.05";
+
url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs";
};
···
};
lanzaboote = {
-
url = "github:nix-community/lanzaboote/v0.4.2";
+
url = "github:nix-community/lanzaboote/v1.0.0";
inputs.nixpkgs.follows = "nixpkgs";
};
-2
global/gensokyo/presets/nginx.nix
···
{
lib,
-
pkgs,
config,
...
}:
···
services.nginx = {
enable = lib.mkDefault true;
enableReload = lib.mkDefault true;
-
package = lib.mkDefault pkgs.nginxQuic;
statusPage = true;
+1 -2
global/gui/browser.nix
···
{
-
pkgs,
lib,
config,
...
···
lib.mkIf config.gensokyo.traits.gui {
programs.firefox = {
enable = true;
-
package = pkgs.firefox-devedition;
+
# package = pkgs.firefox-devedition;
};
}
+7 -7
global/gui/dm.nix
···
{
config,
lib,
-
pkgs,
+
# pkgs,
...
}:
lib.mkIf config.gensokyo.traits.gui {
···
enable = true;
autoNumlock = true;
wayland.enable = true;
-
theme = "catppuccin-frappe";
+
# theme = "catppuccin-frappe";
};
-
environment.systemPackages = [
-
(pkgs.catppuccin-sddm.override {
-
flavor = "frappe";
-
})
-
];
+
# environment.systemPackages = [
+
# (pkgs.catppuccin-sddm.override {
+
# flavor = "frappe";
+
# })
+
# ];
}
+11 -10
global/gui/fonts.nix
···
pkgs,
lib,
config,
-
inputs,
+
# inputs,
...
}:
lib.mkIf config.gensokyo.traits.gui {
-
fonts.packages = [
-
pkgs.nerd-fonts.hurmit
-
pkgs.nerd-fonts.fira-mono
+
fonts.packages = with pkgs; [
+
nerd-fonts.hurmit
+
nerd-fonts.fira-mono
-
pkgs.cozette
-
pkgs.fira-code
-
pkgs.noto-fonts
-
pkgs.noto-fonts-cjk-sans
-
pkgs.noto-fonts-emoji-blob-bin
+
cozette
+
fira-code
+
noto-fonts
+
noto-fonts-cjk-sans
+
noto-fonts-emoji-blob-bin
-
inputs.mystia.packages.${pkgs.system}.nishiki-teki
+
last-resort
+
# inputs.mystia.packages.${pkgs.system}.nishiki-teki
];
fonts.fontconfig = {
+4
global/gui/input.nix
···
];
};
};
+
+
environment.systemPackages = [
+
pkgs.showmethekey
+
];
}
+6 -5
global/gui/packages.nix
···
...
}:
lib.mkIf config.gensokyo.traits.gui {
-
environment.systemPackages = [
-
pkgs.vlc
-
pkgs.flameshot
-
pkgs.libnotify
-
pkgs.thunderbird
+
environment.systemPackages = with pkgs; [
+
vlc
+
flameshot
+
libnotify
+
thunderbird
+
inputs.ghostty.packages.${pkgs.system}.default
];
}
+2
global/gui/wine.nix
···
pkgs.wineWowPackages.full
pkgs.winetricks
+
pkgs.umu-launcher
+
(pkgs.bottles.override {
removeWarningPopup = true;
})
+5 -4
global/overlays/default.nix
···
-
inputs: [
-
# we can probably live without an overlay?
-
# inputs.mystia.overlays.default
-
]
+
_: [ ]
+
# inputs: [
+
# # we can probably live without an overlay?
+
# # inputs.mystia.overlays.default
+
# ]
+1 -1
global/programs/misc.nix
···
file
ripgrep
ack
-
du-dust
+
dust
parallel
cryptsetup
borgbackup
+8
global/programs/networking.nix
···
{
lib,
config,
+
pkgs,
...
}:
lib.mkMerge [
···
(lib.mkIf config.gensokyo.traits.portable {
networking.networkmanager.wifi.backend = "wpa_supplicant";
+
})
+
+
# TODO: maybe we should move these to /global/gui?
+
(lib.mkIf config.gensokyo.traits.gui {
+
networking.networkmanager.plugins = with pkgs; [
+
networkmanager-openconnect
+
];
})
(lib.mkIf (!config.gensokyo.traits.sensitive) {
+2
global/programs/nix/config.nix
···
max-jobs = "auto";
auto-optimise-store = true;
download-buffer-size = 268435456; # 256 MiB
+
+
trace-import-from-derivation = true;
};
nix.gc = {
+1
global/programs/scm.nix
···
push.autoSetupRemote = true;
gpg.ssh.allowedSignersFile = pkgs.writeText "soopyc.allowedsigners" ''
me@soopy.moe namespaces="git" ${builtins.readFile ../../creds/ssh/auth}
+
git@soopy.moe namespaces="git" ${builtins.readFile ../../creds/ssh/auth}
'';
rebase.autoStash = true;
+2 -1
global/programs/security/crypto.nix
···
{
environment.systemPackages = with pkgs; [
gnupg
-
pinentry
+
pinentry-curses
+
pinentry-qt
opensc
rage
+1 -1
global/programs/security/kanidm.nix
···
{
services.kanidm = {
enableClient = true;
-
package = pkgs.kanidm_1_7;
+
package = pkgs.kanidm_1_8;
clientSettings = {
uri = "https://serenity.mist-nessie.ts.net";
};
+7 -1
global/programs/shells.nix
···
-
{ pkgs, ... }:
+
{ pkgs, lib, ... }:
{
users.defaultUserShell = pkgs.zsh;
programs.zsh = {
···
programs.direnv = {
enable = true;
nix-direnv.enable = true;
+
};
+
+
programs.pay-respects = {
+
enable = true;
+
alias = "fuck";
+
aiIntegration = lib.mkForce false;
};
# conflicts with comma
+3
global/programs/ssh.nix
···
ConnectTimeout 5
''; # if things exceed 5 seconds to connect something has gone wrong. Fail fast to not wait.
};
+
+
# i did not consent to having this automatically enabled
+
services.gnome.gcr-ssh-agent.enable = false;
}
+2 -2
systems/koumakan/certificates/default.nix
···
-
{ ... }:
{
imports = [
./global.nix
-
./postgresql.nix
+
# ./postgresql.nix
./fediverse.nix
./bsky-pds.nix
./breezewiki.nix
+
./garage-s3.nix
];
}
+10
systems/koumakan/certificates/garage-s3.nix
···
+
{
+
# Certificate for garage domains
+
security.acme.certs."s3.soopy.moe" = {
+
group = "nginx";
+
extraDomainNames = [
+
"*.s3.soopy.moe"
+
"*.s3web.soopy.moe"
+
];
+
};
+
}
+2
systems/koumakan/certificates/postgresql.nix
···
+
# WARN: unused. see default.nix
+
{ config, ... }:
{
# PostgreSQL only certificate
+20
systems/koumakan/networking/firewall.nix
···
from = 50000;
to = 50100;
}
+
+
# minecraft
+
{
+
from = 25560;
+
to = 25599;
+
}
];
allowedUDPPorts = [
443 # https over quic (http3)
+
];
+
+
allowedUDPPortRanges = [
+
# more minecraft
+
{
+
from = 25560;
+
to = 25599;
+
}
+
+
# plasmo voice
+
{
+
from = 55111;
+
to = 55199;
+
}
];
};
+16 -20
systems/koumakan/services/databases/postgresql.nix
···
host all all ::1/128 scram-sha-256
'';
-
settings =
-
let
-
credsDir = "/run/credentials/postgresql.service";
-
in
-
{
-
listen_addresses = pkgs.lib.mkForce "*";
-
max_connections = 200;
-
password_encryption = "scram-sha-256";
+
settings = {
+
listen_addresses = pkgs.lib.mkForce "*";
+
max_connections = 200;
+
password_encryption = "scram-sha-256";
-
log_line_prefix = "%m [%p] %h ";
-
ssl = "on";
-
ssl_cert_file = "${credsDir}/cert.pem";
-
ssl_key_file = "${credsDir}/key.pem";
+
log_line_prefix = "%m [%p] %h ";
+
# ssl = "on";
+
# ssl_cert_file = "${credsDir}/cert.pem";
+
# ssl_key_file = "${credsDir}/key.pem";
-
log_hostname = true;
-
datestyle = "iso, dmy";
-
log_timezone = "Asia/Hong_Kong";
-
timezone = "Asia/Hong_Kong";
-
default_text_search_config = "pg_catalog.english";
+
log_hostname = true;
+
datestyle = "iso, dmy";
+
log_timezone = "Asia/Hong_Kong";
+
timezone = "Asia/Hong_Kong";
+
default_text_search_config = "pg_catalog.english";
-
max_wal_size = "2GB";
-
min_wal_size = "80MB";
-
};
+
max_wal_size = "2GB";
+
min_wal_size = "80MB";
+
};
};
users.users.postgres.useDefaultShell = lib.mkForce false;
+1 -1
systems/koumakan/services/proxies/default.nix
···
-
{ ... }:
{
imports = [
./nitter.nix
./searxng.nix
./minio.nix
+
./nginx-stream.nix
];
}
+44
systems/koumakan/services/proxies/nginx-stream.nix
···
+
{
+
systemd.tmpfiles.settings."nginx-stream-log"."/var/log/nginx/stream"."d" = {
+
user = "nginx";
+
group = "nginx";
+
mode = "0750";
+
};
+
# NOTE: this doesn't work properly atm, we cba setting up routing stuff right now.
+
# systemd.services.nginx.serviceConfig = {
+
# # needed for transparent proxying
+
# CapabilityBoundingSet = ["CAP_NET_RAW"];
+
# AmbientCapabilities = ["CAP_NET_RAW"];
+
# };
+
+
services.nginx.streamConfig = ''
+
resolver 100.100.100.100;
+
# proxy_bind $remote_addr transparent;
+
proxy_connect_timeout 1s;
+
proxy_timeout 30s;
+
+
log_format basic_stream '$remote_addr [$time_local] '
+
'$protocol $status $bytes_sent $bytes_received '
+
'$session_time';
+
+
error_log /var/log/nginx/stream/error.log;
+
access_log /var/log/nginx/stream/access.log basic_stream;
+
+
# data
+
server {
+
listen 25565-25599 reuseport;
+
proxy_pass renko.mist-nessie.ts.net:$server_port;
+
}
+
+
# query sockets
+
server {
+
listen 25565-25599 udp reuseport;
+
proxy_pass renko.mist-nessie.ts.net:$server_port;
+
}
+
# voice
+
server {
+
listen 55111-55199 udp reuseport;
+
proxy_pass renko.mist-nessie.ts.net:$server_port;
+
}
+
'';
+
}
+2 -1
systems/koumakan/services/proxies/searxng.nix
···
services.searx = {
enable = true;
-
runInUwsgi = true;
environmentFile = secrets.getTemplate "searxng.env";
redisCreateLocally = true;
+
+
configureUwsgi = true;
uwsgiConfig = {
http = "/run/searx/searxng.sock";
chmod-socket = "660";
+3 -2
systems/koumakan/services/scm/forgejo.nix
···
ENABLE_NOTIFY_MAIL = true;
REGISTER_EMAIL_CONFIRM = true;
-
DISABLE_REGISTRATION = false;
+
DISABLE_REGISTRATION = false; # need to be false to enable any sort of reg.
+
ENABLE_INTERNAL_SIGNIN = true; # we have gatekeeper setup now and working, this can be turned off.
ALLOW_ONLY_EXTERNAL_REGISTRATION = true;
ENABLE_CAPTCHA = true;
···
# Logging {{{
log = {
ROOT_PATH = "/var/log/forgejo/";
-
"logger.router.MODE" = "";
+
LOGGER_ROUTER_MODE = "";
};
# }}}
-7
systems/koumakan/services/scm/tangled-knot.nix
···
{
_utils,
-
config,
...
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "tangled";
-
secrets = [ "knot/key" ];
-
};
-
in
{
services.tangled-knotserver = {
enable = true;
+20 -2
systems/koumakan/services/security/pocket-id.nix
···
{
_utils,
config,
-
# lib,
...
}:
let
···
enable = true;
settings = {
-
PUBLIC_APP_URL = "https://gatekeeper.soopy.moe";
+
APP_URL = "https://gatekeeper.soopy.moe";
+
HOST = "127.0.0.1";
TRUST_PROXY = true;
PORT = "31411";
KEYS_STORAGE = "database";
···
services.nginx.virtualHosts."gatekeeper.soopy.moe" = _utils.mkSimpleProxy {
port = 31411;
+
+
extraConfig.locations."= /humans.txt" = _utils.mkNginxFile {
+
filename = "humans.txt";
+
content = ''
+
/* Credits */
+
Login Background: https://www.pixiv.net/artworks/122054405
+
You: for using our services
+
+
/* People */
+
Administrator: soopyc
+
Contact: https://soopy.moe/about
+
+
/* Service */
+
Software: Pocket ID
+
Deployed-With: NixOS
+
Security: https://soopy.moe/.well-known/security.txt
+
'';
+
};
};
}
+11 -9
systems/koumakan/services/storage/garage.nix
···
isSystemUser = true;
group = "garage";
};
-
groups.garage = {};
+
groups.garage = { };
};
services.garage = {
···
# this is needed because garage apparently still doesn't support anon access via path based api, so this is more like a hack than anything atm.
s3_web = {
bind_addr = "[::1]:39939";
-
root_domain = "root.invalid";
+
root_domain = ".s3web.soopy.moe";
};
rpc_bind_addr = "100.100.16.16:39931";
···
Group = config.users.groups.garage.name;
Restart = "on-failure";
StateDirectory = lib.mkForce null; # this somehow breaks mounting dirs into /var/lib; systemd complains about id-mapped mount: device or resource busy
-
# ReadWritePaths = [
-
# "/var/lib/garage"
-
# "/var/lib/garage/data"
-
# "/var/lib/garage/meta"
-
# "/var/lib/garage/snapshots"
-
# ];
};
services.nginx.virtualHosts.".s3.soopy.moe" = _utils.mkSimpleProxy {
port = 39930;
extraConfig = {
+
useACMEHost = "s3.soopy.moe";
extraConfig = ''
client_max_body_size 32G;
proxy_max_temp_file_size 0;
···
};
};
-
services.nginx.virtualHosts."cache.soopy.moe" = _utils.mkSimpleProxy {
+
services.nginx.virtualHosts."*.s3web.soopy.moe" = _utils.mkSimpleProxy {
port = 39939;
+
extraConfig.useACMEHost = "s3.soopy.moe";
};
systemd.services.vmagent.serviceConfig.LoadCredential = [
···
# https://docs.victoriametrics.com/sd_configs/#scrape_configs
# hard coding because we can't use %{ENV_VAR} syntax (yet) when checking.
bearer_token_file = "/run/credentials/vmagent.service/garage_token";
+
};
+
+
##################### NAMED BUCKETS WITH WEB HOSTING ###########################
+
+
services.nginx.virtualHosts."cache.soopy.moe" = _utils.mkSimpleProxy {
+
port = 39939;
};
}
+7
systems/koumakan/services/storage/zipline.nix
···
DATASOURCE_S3_REGION = "ap-east-1";
DATASOURCE_S3_ENDPOINT = "https://s3.soopy.moe";
DATASOURCE_S3_FORCE_PATH_STYLE = "true";
+
+
FEATURES_OAUTH_REGISTRATION = "true";
};
};
···
extraConfig.extraConfig = ''
client_max_body_size 100M;
'';
+
};
+
+
systemd.services.zipline.serviceConfig = {
+
Restart = "on-failure";
+
RestartSec = "10s";
};
}
+1 -19
systems/renko/configuration.nix
···
];
networking.firewall = {
-
allowedTCPPorts = [ 59153 ];
-
allowedTCPPortRanges = [
-
{
-
from = 25560;
-
to = 25570;
-
}
-
];
-
allowedUDPPortRanges = [
-
{
-
from = 25560;
-
to = 25570;
-
}
-
-
# plasmo voice
-
{
-
from = 55111;
-
to = 55199;
-
}
-
];
+
allowedTCPPorts = [ 59153 5515 ];
};
# muh unfree software!!!!!!!!!!!!!!!!!!
+1 -1
systems/renko/services/forgejo-runner.nix
···
imports = lib.singleton secrets.generate;
services.gitea-actions-runner = {
-
package = pkgs.forgejo-actions-runner;
+
package = pkgs.forgejo-runner;
instances.default = {
enable = true;
name = "renko-default";
+10
systems/satori/configuration.nix
···
pkgs.prismlauncher
];
+
# TODO: make this a trait
+
virtualisation.docker = {
+
enable = true;
+
storageDriver = "btrfs";
+
};
+
+
users.groups.docker.members = [
+
"cassie"
+
];
+
zramSwap.enable = true;
# muh unfree software!!!!!!!!!!!!!!!!!!
+4 -2
users/cassie/default.nix
···
-
{ ... }:
{
users.users.cassie = {
isNormalUser = true;
-
extraGroups = [ "wheel" ];
+
extraGroups = [
+
"wheel"
+
"dialout" # esp programming
+
];
openssh = {
authorizedKeys.keyFiles = [ ../../creds/ssh/users/cassie ];
};
+16 -14
users/cassie/home/dev/git.nix
···
programs.git = lib.mkMerge [
{
enable = true;
-
userName = "Sophie Cheung";
-
userEmail = "me@soopy.moe";
-
# difftastic.enable = true;
-
# delta.enable = true;
-
diff-so-fancy = {
-
enable = true;
-
stripLeadingSymbols = false;
+
settings = {
+
user.name = "Sophie Cheung";
+
user.email = "git@soopy.moe";
};
}
(lib.mkIf traits.gui {
-
signing = {
-
signByDefault = true;
-
key = inputs.self + "/creds/ssh/auth";
-
};
-
-
extraConfig = {
+
settings = {
gpg.format = "ssh";
+
commit.gpgSign = true;
+
tag.gpgSign = true;
+
+
user.signingKey = inputs.self + "/creds/ssh/auth";
};
})
];
+
programs.diff-so-fancy = {
+
enable = true;
+
enableGitIntegration = true;
+
+
settings.stripLeadingSymbols = false;
+
};
+
home.shellAliases = {
# redo previous commit when something explodes, like my key died or something
-
gcmm = "git commit -eF .git/COMMIT_EDITMSG";
+
gcmm = "git commit -eF .git/COMMIT_EDITMSG"; # FIXME: strip the thing after ------ 8< ------
};
}
+11 -2
users/cassie/home/dev/ssh.nix
···
{
programs.ssh = {
enable = true;
-
hashKnownHosts = true;
-
forwardAgent = true;
+
enableDefaultConfig = false; # silent warning
matchBlocks = {
# most intuitive design /s
···
user = "forgejo";
identitiesOnly = true;
identityFile = "~/.ssh/id_minecraft_backup";
+
};
+
+
"*" = {
+
forwardAgent = true;
+
compression = false;
+
serverAliveInterval = 0;
+
serverAliveCountMax = 3;
+
hashKnownHosts = true;
+
userKnownHostsFile = "~/.ssh/known_hosts";
+
# visualHostKey = true; # if this doesn't work im moving to hjem
};
};