Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

170 lines
5.3KB

  1. {
  2. description = "OpenGardenCloud";
  3. inputs = {
  4. nixpkgs.url = "nixpkgs/nixos-25.11";
  5. sops-nix = {
  6. url = "github:Mic92/sops-nix";
  7. inputs.nixpkgs.follows = "nixpkgs";
  8. };
  9. openldap-server = {
  10. url = "./services/openldap/";
  11. inputs.nixpkgs.follows = "nixpkgs";
  12. };
  13. nginx-server = {
  14. url = "./services/nginx/";
  15. inputs.nixpkgs.follows = "nixpkgs";
  16. };
  17. nextcloud-server = {
  18. url = "./services/nextcloud/";
  19. inputs.nixpkgs.follows = "nixpkgs";
  20. };
  21. mail-server = {
  22. url = "./services/mail/";
  23. inputs.nixpkgs.follows = "nixpkgs";
  24. };
  25. gitea-server = {
  26. url = "./services/gitea/";
  27. inputs.nixpkgs.follows = "nixpkgs";
  28. };
  29. immich-server = {
  30. url = "./services/immich/";
  31. inputs.nixpkgs.follows = "nixpkgs";
  32. };
  33. };
  34. outputs = {
  35. self, nixpkgs, sops-nix,
  36. openldap-server, nginx-server, nextcloud-server, mail-server, gitea-server, immich-server, ...
  37. }: {
  38. # Re-export individual modules
  39. nixosModules = {
  40. openldap = openldap-server.nixosModules.openldap;
  41. nginx = nginx-server.nixosModules.nginx;
  42. nextcloud = nextcloud-server.nixosModules.nextcloud;
  43. mail = mail-server.nixosModules.mail;
  44. gitea = gitea-server.nixosModules.gitea;
  45. immich = immich-server.nixosModules.immich;
  46. };
  47. # Convenience module: imports all service modules + sets default config
  48. nixosModules.ogc = {config, lib, ...}:
  49. let
  50. cfg = config.ogc;
  51. in {
  52. imports = [
  53. openldap-server.nixosModules.openldap
  54. nginx-server.nixosModules.nextcloud
  55. nextcloud-server.nixosModules.nextcloud
  56. mail-server.nixosModules.mail
  57. gitea-server.nixosModules.gitea
  58. immich-server.nixosModules.immich
  59. sops-nix.nixosModules.sops
  60. ];
  61. options.ogc = {
  62. organization = lib.mkOption {type = lib.types.str;};
  63. extension = lib.mkOption {type = lib.types.str;};
  64. domain = lib.mkOption {type = lib.types.str;};
  65. };
  66. config = {
  67. networking.firewall = {
  68. enable = true;
  69. allowedTCPPorts = [ 80 443 2022 ];
  70. #allowedUDPPortRanges = [
  71. #{ from = 4000; to = 4007; }
  72. #];
  73. };
  74. ogc = {
  75. organization = lib.mkDefault "opengardencloud";
  76. extension = lib.mkDefault "com";
  77. domain = lib.mkDefault "opengardencloud.com";
  78. };
  79. sops = {
  80. defaultSopsFile = ./secrets/ogc.yaml;
  81. # This will automatically import SSH keys as age keys
  82. age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
  83. # This is using an age key that is expected to already be in the filesystem
  84. age.keyFile = "~/.config/sops/age/keys.txt";
  85. # This will generate a new key if the key specified above does not exist
  86. age.generateKey = true;
  87. secrets."openldap/admin" = {};
  88. secrets."openldap/nextcloud" = {};
  89. secrets."openldap/mail" = {};
  90. secrets."openldap/gitea" = {};
  91. secrets."openldap/hauk" = {};
  92. secrets."nextcloud/admin" = {};
  93. };
  94. # ── Default configuration for OpenLDAP ─────────────────────
  95. # All values use mkDefault so any machine flake can override them.
  96. openldap = {
  97. enable = lib.mkDefault true;
  98. #enable = false;
  99. organization = lib.mkDefault cfg.organization;
  100. extension = lib.mkDefault cfg.extension;
  101. domain = lib.mkDefault cfg.domain;
  102. urlList = lib.mkDefault [ "ldap:///" "ldapi:///" ];
  103. adminPasswordFile = lib.mkDefault "/run/secrets/openldap/admin";
  104. services = {
  105. nextcloud = {
  106. uid = lib.mkDefault "nextcloud";
  107. passwordFile = lib.mkDefault "/run/secrets/openldap/nextcloud";
  108. };
  109. mail = {
  110. uid = lib.mkDefault "mail";
  111. passwordFile = lib.mkDefault "/run/secrets/openldap/mail";
  112. };
  113. gitea = {
  114. uid = lib.mkDefault "gitea";
  115. passwordFile = lib.mkDefault "/run/secrets/openldap/gitea";
  116. };
  117. hauk = {
  118. uid = lib.mkDefault "hauk";
  119. passwordFile = lib.mkDefault "/run/secrets/openldap/hauk";
  120. };
  121. };
  122. };
  123. # Nginx
  124. nginx = {
  125. enable = lib.mkDefault true;
  126. };
  127. # Nextcloud
  128. nextcloud = {
  129. enable = lib.mkDefault true;
  130. adminPasswordFile = lib.mkDefault "/run/secrets/nextcloud/admin";
  131. domain = lib.mkDefault cfg.domain;
  132. hostName = lib.mkDefault "nextcloud";
  133. port = lib.mkDefault 8080;
  134. };
  135. mail = {
  136. enable = lib.mkDefault true;
  137. domain = lib.mkDefault cfg.domain;
  138. fqdn = lib.mkDefault "mail.${cfg.domain}";
  139. };
  140. gitea = {
  141. enable = lib.mkDefault true;
  142. hostName = lib.mkDefault "gitea";
  143. sshPort = lib.mkDefault 2022;
  144. httpPort = lib.mkDefault 2080;
  145. };
  146. # TODO: OpenLDAP
  147. immich = {
  148. enable = lib.mkDefault false;
  149. hostName = lib.mkDefault "immich";
  150. port = lib.mkDefault 543;
  151. };
  152. };
  153. };
  154. nixosModules.default = self.nixosModules.ogc;
  155. };
  156. }