atproto pastebin service: https://plonk.li
1{ 2 inputs = { 3 nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; 4 }; 5 6 outputs = { 7 self, 8 nixpkgs, 9 }: let 10 supportedSystems = ["x86_64-linux" "aarch64-linux" "aarch64-darwin"]; 11 forAllSystems = nixpkgs.lib.genAttrs supportedSystems; 12 nixpkgsFor = forAllSystems (system: 13 import nixpkgs { 14 inherit system; 15 overlays = [self.overlays.default]; 16 }); 17 in { 18 overlays.default = final: prev: let 19 pname = "plonk"; 20 version = "0.1.0"; 21 in { 22 plonk = with final; 23 buildNpmPackage { 24 inherit pname version; 25 src = ./.; 26 packageJson = ./package.json; 27 buildPhase = "npm run build"; 28 npmDepsHash = "sha256-qGCbaFAHd/s9hOTWMjHCam6Kf6pU6IWPybfwYh0sOwc="; 29 }; 30 }; 31 32 packages = forAllSystems (system: { 33 inherit (nixpkgsFor."${system}") plonk; 34 }); 35 36 defaultPackage = forAllSystems (system: nixpkgsFor."${system}".plonk); 37 38 devShell = forAllSystems (system: let 39 pkgs = nixpkgsFor."${system}"; 40 in 41 pkgs.mkShell { 42 nativeBuildInputs = [ 43 pkgs.nodejs 44 pkgs.biome 45 pkgs.typescript 46 pkgs.nodePackages.typescript-language-server 47 ]; 48 }); 49 50 formatter = forAllSystems (system: nixpkgsFor."${system}".alejandra); 51 52 nixosModules.default = { 53 config, 54 pkgs, 55 lib, 56 ... 57 }: 58 with lib; { 59 options = { 60 services.plonk = { 61 enable = mkOption { 62 type = types.bool; 63 default = false; 64 description = "Enable plonk"; 65 }; 66 port = mkOption { 67 type = types.int; 68 default = 3000; 69 description = "Port to run plonk on"; 70 }; 71 cookie_secret = mkOption { 72 type = types.string; 73 default = "00000000000000000000000000000000"; 74 description = "Cookie secret"; 75 }; 76 }; 77 }; 78 79 config = mkIf config.services.plonk.enable { 80 nixpkgs.overlays = [self.overlays.default]; 81 systemd.services.plonk = { 82 description = "plonk service"; 83 wantedBy = ["multi-user.target"]; 84 85 serviceConfig = { 86 ListenStream = "0.0.0.0:${toString config.services.plonk.port}"; 87 ExecStart = "${pkgs.plonk}/bin/plonk"; 88 Restart = "always"; 89 }; 90 91 environment = { 92 PLONK_PORT = "${toString config.services.plonk.port}"; 93 PLONK_NODE_ENV = "production"; 94 PLONK_HOST = "localhost"; 95 PLONK_PUBLIC_URL = "plonk.li"; 96 PLONK_DB_PATH = "plonk.db"; 97 PLONK_COOKIE_SECRET = config.services.plonk.cookie_secret; 98 }; 99 }; 100 }; 101 }; 102 }; 103}