This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

neoprism: remove mazegame and nixcon-quiz, nixcon is over

+1 -166
-42
flake.lock
··· 552 552 "type": "github" 553 553 } 554 554 }, 555 - "mazegame": { 556 - "inputs": { 557 - "nixpkgs": [ 558 - "nixpkgs" 559 - ] 560 - }, 561 - "locked": { 562 - "lastModified": 1790402647, 563 - "narHash": "sha256-2zOf4YQwkY8KnXCWfrAxS/wRtK8uHuarYV0n1M346H0=", 564 - "owner": "lassulus", 565 - "repo": "mazegame", 566 - "rev": "b4f5491b7abe92a35380796ada4c90b8c7f0fd8e", 567 - "type": "github" 568 - }, 569 - "original": { 570 - "owner": "lassulus", 571 - "repo": "mazegame", 572 - "type": "github" 573 - } 574 - }, 575 555 "nether": { 576 556 "inputs": { 577 557 "clan-core": [ ··· 712 692 "original": { 713 693 "type": "git", 714 694 "url": "https://cgit.krebsco.de/nix-writers" 715 - } 716 - }, 717 - "nixcon-quiz": { 718 - "inputs": { 719 - "nixpkgs": [ 720 - "nixpkgs" 721 - ] 722 - }, 723 - "locked": { 724 - "lastModified": 1790428779, 725 - "narHash": "sha256-FJaGc+Ez48FVKz827SjmI++Wphabu3Bi1lFAzWVhriM=", 726 - "owner": "lassulus", 727 - "repo": "nixcon-quiz", 728 - "rev": "e38f7ca4fb55031d2ebcf12f391b31394045522f", 729 - "type": "github" 730 - }, 731 - "original": { 732 - "owner": "lassulus", 733 - "repo": "nixcon-quiz", 734 - "type": "github" 735 695 } 736 696 }, 737 697 "nixos-facter": { ··· 964 924 "kartei": "kartei", 965 925 "le_menu": "le_menu", 966 926 "llm-agents": "llm-agents", 967 - "mazegame": "mazegame", 968 927 "nether": "nether", 969 928 "nix-darwin": "nix-darwin_2", 970 929 "nix-index-database": "nix-index-database", 971 930 "nix-rosetta-builder": "nix-rosetta-builder", 972 - "nixcon-quiz": "nixcon-quiz", 973 931 "nixos-facter": "nixos-facter", 974 932 "nixos-hardware": "nixos-hardware", 975 933 "nixos-mailserver": "nixos-mailserver",
-6
flake.nix
··· 105 105 sigexec.url = "git+https://git.geninf.io/Lassulus/sigexec"; 106 106 sigexec.inputs.nixpkgs.follows = "nixpkgs"; 107 107 108 - mazegame.url = "github:lassulus/mazegame"; 109 - mazegame.inputs.nixpkgs.follows = "nixpkgs"; 110 - 111 - nixcon-quiz.url = "github:lassulus/nixcon-quiz"; 112 - nixcon-quiz.inputs.nixpkgs.follows = "nixpkgs"; 113 - 114 108 }; 115 109 116 110 outputs =
-72
2configs/mazegame.nix
··· 1 - let 2 - domain = "maze.lassul.us"; 3 - port = 8772; 4 - in 5 - { self, config, ... }: 6 - { 7 - # mazegame: Windows 95 "Maze" screensaver you can play in a browser tab. The 8 - # exit is the NixOS snowflake. /watch is a spectator camera that follows a 9 - # random player and cuts to the next one after 2s without movement. 10 - imports = [ self.inputs.mazegame.nixosModules.default ]; 11 - 12 - services.mazegame = { 13 - enable = true; 14 - host = "127.0.0.1"; 15 - port = port; 16 - }; 17 - 18 - # One address may hold a household's worth of tabs and join at a human 19 - # pace. Without this a single host opened ~2500 sockets at once and churned 20 - # thousands more, and the thread-per-socket server ran out of tasks for 21 - # everyone else. 22 - services.nginx.appendHttpConfig = '' 23 - limit_conn_zone $binary_remote_addr zone=mazegame_conns:10m; 24 - limit_req_zone $binary_remote_addr zone=mazegame_joins:10m rate=2r/s; 25 - ''; 26 - 27 - services.nginx.virtualHosts.${domain} = { 28 - enableACME = true; 29 - forceSSL = true; 30 - # nginx hands out the client straight from the store — the very package 31 - # the service runs, so the page never lags the server. The game is a 32 - # single event loop: every .js it serves during a join burst is a tick it 33 - # is not spending on the world, and a crowd arriving costs six files each. 34 - root = config.services.mazegame.package.static; 35 - locations."/" = { 36 - index = "index.html"; 37 - tryFiles = "$uri $uri/ =404"; 38 - # Versions ride in the store path but the URLs never change, so let the 39 - # browser revalidate against the ETag rather than cache a stale client. 40 - # add_header does not inherit into the exact-match locations below. 41 - extraConfig = ''add_header Cache-Control "no-cache";''; 42 - }; 43 - locations."= /play" = { 44 - tryFiles = "/index.html =404"; 45 - extraConfig = ''add_header Cache-Control "no-cache";''; 46 - }; 47 - locations."= /watch" = { 48 - tryFiles = "/watch.html =404"; 49 - extraConfig = ''add_header Cache-Control "no-cache";''; 50 - }; 51 - 52 - # Player and watcher sockets stay open for as long as someone is in the 53 - # maze; players heartbeat every 3s, watchers every 3s, so the default 54 - # 60s read timeout would only bite on a wedged client, but a long window 55 - # keeps idle spectators connected. 56 - locations."/ws/" = { 57 - proxyPass = "http://127.0.0.1:${toString port}"; 58 - proxyWebsockets = true; 59 - extraConfig = '' 60 - proxy_read_timeout 1h; 61 - proxy_send_timeout 1h; 62 - limit_conn mazegame_conns 32; 63 - limit_req zone=mazegame_joins burst=30 nodelay; 64 - limit_conn_status 429; 65 - limit_req_status 429; 66 - ''; 67 - }; 68 - locations."/api/" = { 69 - proxyPass = "http://127.0.0.1:${toString port}"; 70 - }; 71 - }; 72 - }
-38
2configs/nixcon-quiz.nix
··· 1 - let 2 - domain = "quiz.nixcon.org"; 3 - port = 8773; 4 - in 5 - { self, ... }: 6 - { 7 - # nixcon-quiz: live multiplayer quiz for NixCon. Everyone answers the same 8 - # question against the same server clock; /spectate is the 16:9 screen for 9 - # the livestream with a QR code to join. 10 - # 11 - # The questions are not part of any repository (whoever reads them knows 12 - # every answer) and stay out of the world-readable store. Copy them over 13 - # after deploying; until then the service is skipped: 14 - # rsync -r --delete ~/src/nixcon-quiz/questions/ root@neoprism.r:/var/lib/nixcon-quiz/questions/ 15 - # ssh root@neoprism.r systemctl restart nixcon-quiz 16 - # Break slides for /spectate (PDF/PNG/JPEG/WebP, not in any repository 17 - # either) are picked up without a restart: 18 - # rsync -r --delete ~/src/nixcon-quiz/slides/ root@neoprism.r:/var/lib/nixcon-quiz/slides/ 19 - imports = [ self.inputs.nixcon-quiz.nixosModules.default ]; 20 - 21 - services.nixcon-quiz = { 22 - enable = true; 23 - host = "127.0.0.1"; 24 - inherit port domain; 25 - questionSeconds = 30; 26 - }; 27 - 28 - # No per-address limits on the event streams: the venue Wi-Fi puts every 29 - # phone at NixCon behind one public address, so a per-IP cap cuts off 30 - # everyone past the first few players. The quiz caps players itself. 31 - 32 - # The quiz's first home; old links and QR codes land on the new name. 33 - services.nginx.virtualHosts."quiz.lassul.us" = { 34 - enableACME = true; 35 - forceSSL = true; 36 - globalRedirect = domain; 37 - }; 38 - }
+1 -2
2configs/dns/lassul.us.zone
··· 1 - @ 3600 IN SOA lassul.us. ns1.lassul.us. 2026092800 7200 3600 86400 3600 1 + @ 3600 IN SOA lassul.us. ns1.lassul.us. 2026092801 7200 3600 86400 3600 2 2 3 3 ;;@ 3600 IN NS ns1 4 4 @ 3600 IN NS ns1 ··· 58 58 id IN CNAME neoprism 59 59 covibe IN CNAME neoprism 60 60 omni IN CNAME neoprism 61 - maze IN CNAME neoprism 62 61 where.is IN CNAME neoprism 63 62 parley IN CNAME neoprism 64 63
-6
machines/neoprism/config.nix
··· 119 119 # omnigent agent meta-harness (omni.lassul.us) 120 120 ../../2configs/omnigent.nix 121 121 122 - # browser maze game with spectator camera (maze.lassul.us) 123 - ../../2configs/mazegame.nix 124 - 125 - # live NixCon quiz with a livestream screen (quiz.nixcon.org) 126 - ../../2configs/nixcon-quiz.nix 127 - 128 122 # radicle public seed (radicle.lassul.us) 129 123 ../../2configs/radicle.lassul.us.nix 130 124 # radicle identity + node for this machine (/var/lib/rad)