1
0

grist.nix 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. { lib
  2. , pkgs
  3. , outputs
  4. , ...
  5. }:
  6. let
  7. dataDir = "/var/lib/grist";
  8. in
  9. {
  10. imports = [
  11. # TODO: auto-import via `outputs.modules.nixos`
  12. outputs.modules.global.nix-config
  13. ];
  14. systemd.services.grist = {
  15. description = "Grist Core Spreadsheet Server";
  16. wantedBy = [ "multi-user.target" ];
  17. after = [ "network.target" ];
  18. environment = {
  19. APP_HOME_URL = "https://grist.odin.t5.st";
  20. GRIST_ORG_IN_PATH = "true";
  21. GRIST_HOST = "0.0.0.0";
  22. GRIST_SINGLE_PORT = "true";
  23. GRIST_SERVE_SAME_ORIGIN = "true";
  24. GRIST_INST_DIR = "${dataDir}";
  25. GRIST_DATA_DIR = "${dataDir}/docs";
  26. GRIST_SANDBOX_FLAVOR = "unsandboxed";
  27. GRIST_SESSION_COOKIE = "grist_core";
  28. GRIST_DEFAULT_EMAIL = "[email protected]";
  29. GRIST_TELEMETRY_LEVEL = "off";
  30. GRIST_ALLOW_AUTOMATIC_VERSION_CHECKING = "false";
  31. NODE_OPTIONS = "--no-deprecation";
  32. NODE_ENV = "production";
  33. TYPEORM_DATABASE = "${dataDir}/home.sqlite3";
  34. };
  35. serviceConfig = {
  36. ExecStart = "${lib.getExe pkgs.grist-core}";
  37. DynamicUser = true;
  38. StateDirectory = "grist";
  39. StateDirectoryMode = "0700";
  40. WorkingDirectory = dataDir;
  41. Restart = "always";
  42. ReadWritePaths = [ dataDir ];
  43. ProtectSystem = "strict";
  44. ProtectHome = true;
  45. PrivateTmp = true;
  46. NoNewPrivileges = true;
  47. RestrictSUIDSGID = true;
  48. };
  49. preStart = ''
  50. mkdir -p ${dataDir}/docs
  51. '';
  52. };
  53. networking = {
  54. firewall.allowedTCPPorts = [ 8484 ];
  55. interfaces.eth0 = {
  56. ipv4.addresses = [
  57. {
  58. address = "192.168.1.2";
  59. prefixLength = 24;
  60. }
  61. ];
  62. };
  63. defaultGateway = "192.168.1.1";
  64. nameservers = [ "8.8.8.8" ];
  65. useDHCP = false;
  66. };
  67. boot.isContainer = true;
  68. system.stateVersion = "25.05";
  69. }