Add basic services necessary for running projects
diff --git a/modules/caddy.nix b/modules/caddy.nix
new file mode 100644
index 0000000..44a5a29
--- /dev/null
+++ b/modules/caddy.nix
@@ -0,0 +1,4 @@
+{ config, pkgs, ... }: {
+  services.caddy.enable = true;
+  services.caddy.extraConfig = builtins.readFile ./caddy/Caddyfile;
+}
diff --git a/modules/caddy/Caddyfile b/modules/caddy/Caddyfile
new file mode 100644
index 0000000..e333b94
--- /dev/null
+++ b/modules/caddy/Caddyfile
@@ -0,0 +1,20 @@
+
+http://api.clicks.codes {
+    handle_path /nucleus {
+        reverse_proxy http://127.0.0.1:10000 {
+          trusted_proxies 192.168.81.136
+        }
+    }
+}
+
+http://clicks.codes {
+    reverse_proxy http://127.0.0.1:3000 {
+      trusted_proxies 192.168.81.136
+    }
+}
+
+http://www.clicks.codes {
+    redir https://clicks.codes{uri} {
+      trusted_proxies 192.168.81.136
+    }
+}
diff --git a/modules/fuck.nix b/modules/fuck.nix
new file mode 100644
index 0000000..bb5810f
--- /dev/null
+++ b/modules/fuck.nix
@@ -0,0 +1,5 @@
+{ config, pkgs, ... }: {
+    programs.thefuck.enable=true;
+    programs.thefuck.alias="fuck";
+}
+
diff --git a/modules/git.nix b/modules/git.nix
new file mode 100644
index 0000000..26e2928
--- /dev/null
+++ b/modules/git.nix
@@ -0,0 +1,56 @@
+{ config, pkgs, ... }: {
+  environment.systemPackages = with pkgs; [ gh git ];
+
+  services.gitea = {
+    enable = true;
+    rootUrl = "https://git.clicks.codes/";
+    httpPort = 6064;
+    settings.mailer = {
+      ENABLED = true;
+      FROM = "git@clicks.codes";
+      PROTOCOL = "smtps";
+      SMTP_ADDR = "smtp.coded.codes";
+      SMTP_PORT = "465";
+      USER = "git@clicks.codes";
+      PASSWD = "ilIfASM@U5Z4XOEoH99gA8jPvGiOiEdx";
+      HELO_HOSTNAME = "git.clicks.codes";
+    };
+    settings.service = {
+      REGISTER_EMAIL_CONFIG = false;
+      ENABLE_NOTIFY_MAIL = false;
+      DISABLE_REGISTRATION = true;
+      ENABLE_CAPTCHA = false;
+      REQUIRE_SIGNIN_VIEW = false;
+      DEFAULT_KEEP_EMAIL_PRIVATE = false;
+      DEFAULT_ENABLE_TIMETRACKING = true;
+    };
+    settings.server = {
+      SSH_DOMAIN = "ssh.clicks.codes";
+      DOMAIN = "localhost";
+      DISABLE_SSH = false;
+      OFFLINE_MODE = false;
+    };
+    settings.openid.ENABLE_OPENID_SIGNIN = true;
+    settings.log = {
+      MODE = "console";
+      LEVEL = "Info";
+      ROUTER = "console";
+    };
+    settings.repository = {
+      ENABLE_PUSH_CREATE_USER = true;
+      ENABLE_PUSH_CREATE_ORG = true;
+    };
+    settings."repository.pull-request".DEFAULT_MERGE_STYLE = "merge";
+    settings."repository.signing".DEFAULT_TRUST_MODEL = "committer";
+    settings.security = {
+      INSTALL_LOCK = true;
+      PASSWORD_HASH_ALGO = "pbkdf2";
+    };
+    settings.indexer = {
+      REPO_INDEXER_ENABLED = true;
+      UPDATE_BUFFER_LEN = 20;
+      MAX_FILE_SIZE = 1048576;
+    };
+    settings.session.PROVIDER = "file";
+  };
+}
diff --git a/modules/mongodb.nix b/modules/mongodb.nix
index 26570f1..b694468 100644
--- a/modules/mongodb.nix
+++ b/modules/mongodb.nix
@@ -1,7 +1,8 @@
 { config, pkgs, ... }: {
-  environment.systemPackages = [ pkgs.mongosh ];
+  environment.systemPackages = [ pkgs.mongosh pkgs.mongodb-tools ];
   services.mongodb.enable = true;
   services.mongodb.enableAuth = true;
-  services.mongodb.initialRootPassword = "fYhw&%6frpcL9zcJ5p^b^tquP0kyVE9hehoLY4lY2zUUzbIjEyDPhAIMe2M";
+  services.mongodb.bind_ip = "0.0.0.0";
+  services.mongodb.initialRootPassword = "changeme";
   services.mongodb.package = pkgs.mongodb-6_0;
 }
diff --git a/modules/node.nix b/modules/node.nix
new file mode 100644
index 0000000..d5f832f
--- /dev/null
+++ b/modules/node.nix
@@ -0,0 +1,8 @@
+{ config, pkgs, ... }: {
+  environment.systemPackages = with pkgs; [
+    nodejs-19_x
+    nodePackages.typescript
+    yarn
+    nodePackages.pm2
+  ];
+}