]> Untitled Git - monorepo.git/commitdiff
Add vps capabilities
authorPreston Pan <ret2pop@gmail.com>
Thu, 13 Feb 2025 08:29:25 +0000 (00:29 -0800)
committerPreston Pan <ret2pop@gmail.com>
Thu, 13 Feb 2025 08:29:25 +0000 (00:29 -0800)
17 files changed:
agenda.org
config/emacs.el
config/nix.org
journal/20250211.org
nix/modules/cgit.nix [new file with mode: 0644]
nix/modules/conduit.nix [new file with mode: 0644]
nix/modules/configuration.nix
nix/modules/git-daemon.nix
nix/modules/gitweb.nix [new file with mode: 0644]
nix/modules/home/user.nix
nix/modules/home/zsh.nix
nix/modules/nginx.nix
nix/modules/ssh.nix
nix/systems/installer/default.nix
nix/systems/spontaneity/default.nix
resume.pdf
resume.tex

index 19714dc049545b11b545df1af3e2a66a859d3e70..e45fe76d53b46cac920c8c7469997e298ed60bfb 100644 (file)
@@ -19,14 +19,8 @@ project, it can be referenced here.
 
 * Tasks
 These are general life tasks that I need to do, which don't depend on a specific time or date.
-** TODO [#B] ToughNix
-I need to work on my monorepo flake which builds all my systems, and should accommodate future
-systems and also should be relatively abstractable (i.e. identifiers tied to me should be easily
-removed from the flake).
-*** TODO [#B] Migration
+** TODO [#B] NixOS VPS Migration
 Migrate all my services to NixOS.
-** TODO [#B] CSS
-I need to update my CSS for my website to look better.
 ** TODO [#B] Nullring
 Update the nullring to be in org mode, and also include a couple more sites.
 ** TODO [#B] Umami
@@ -48,12 +42,17 @@ I want to make an analogue computer.
 * Scheduled tasks
 These are one-time tasks that are scheduled at a particular date, and that don't require regular
 schedules.
+** TODO [#A] Clean House
+I need to clean my house very soon.
 ** Friends
 These are tasks related to seeing my friends. There will be tasks listed here when I schedule
 something.
 * Habits
 These are some habits I want to track. They are repeated according to a calendar schedule in
 general.
+** TODO Run
+SCHEDULED: <2025-02-11 Tue .+1d>
+I want to be able to run or bike every day so that I get my exercise in.
 ** TODO Stretch
 SCHEDULED: <2025-02-12 Wed .+1d>
 :PROPERTIES:
index 787b8d94e0a97ad8be5571a43ff947537bb096da..f71897fccf947a10df33301584442537a9a361cd 100644 (file)
   (org-latex-preview-image-directory (expand-file-name "~/.cache/ltximg/") "don't use weird cache location")
   (org-preview-latex-image-directory (expand-file-name "~/.cache/ltximg/") "don't use weird cache location")
   (TeX-PDF-mode t)
-  (org-latex-compiler "xelatex")
+  (org-latex-compiler "xelatex" "Use latex as default")
   (org-latex-pdf-process '("xelatex -interaction=nonstopmode -output-directory=%o %f") "set xelatex as default")
   (TeX-engine 'xetex "set xelatex as default engine")
   (preview-default-option-list '("displaymath" "textmath" "graphics") "preview latex")
index 718fd8b729e9760df3c8f1985da5aa26856c1a56..d19cebedaed05451764665e6cb0161a7349084dc 100644 (file)
@@ -354,18 +354,18 @@ underlying interface and it breaks significantly less often.
 ** SSH
 My SSH daemon configuration.
 #+begin_src nix :tangle ../nix/modules/ssh.nix
-{ config, ... }:
-{
-  services.openssh = {
-    enable = true;
-    settings = {
-      PasswordAuthentication = true;
-      AllowUsers = [ config.monorepo.vars.userName ];
-      PermitRootLogin = "prohibit-password";
-      KbdInteractiveAuthentication = false;
+  { config, lib, ... }:
+  {
+    services.openssh = {
+      enable = true;
+      settings = {
+        PasswordAuthentication = lib.mkDefault (! config.monorepo.profiles.server.enable);
+        AllowUsers = [ config.monorepo.vars.userName "root" "git" ];
+        PermitRootLogin = "yes";
+        KbdInteractiveAuthentication = false;
+      };
     };
-  };
-}
+  }
 #+end_src
 ** Tor
 This is my tor configuration, used for my cryptocurrency wallets and whatever else I want
@@ -462,7 +462,6 @@ Use postfix as an smtps server.
     services.gitDaemon = {
       enable = lib.mkDefault config.monorepo.profiles.server.enable;
       exportAll = true;
-      listenAddress = "0.0.0.0";
       basePath = "/srv/git";
     };
   }
@@ -473,7 +472,7 @@ Use postfix as an smtps server.
   {
     services.nginx = {
       enable = lib.mkDefault config.monorepo.profiles.server.enable;
-
+      user = "nginx";
       # Use recommended settings
       recommendedGzipSettings = true;
       recommendedOptimisation = true;
@@ -481,42 +480,88 @@ Use postfix as an smtps server.
       recommendedTlsSettings = true;
 
       # Only allow PFS-enabled ciphers with AES256
-      sslCiphers = "AES256+EECDH:AES256+EDH:!aNULL";
+      sslCiphers = "AES256+EECDH:AES256+EDH:!aNULL";
 
-      appendHttpConfig = ''
-    # Add HSTS header with preloading to HTTPS requests.
-    # Adding this header to HTTP requests is discouraged
-    map $scheme $hsts_header {
-       https   "max-age=31536000; includeSubdomains; preload";
-    }
-    add_header Strict-Transport-Security $hsts_header;
-
-    # Enable CSP for your services.
-    #add_header Content-Security-Policy "script-src 'self'; object-src 'none'; base-uri 'none';" always;
-
-    # Minimize information leaked to other domains
-    add_header 'Referrer-Policy' 'origin-when-cross-origin';
-
-    # Disable embedding as a frame
-    add_header X-Frame-Options DENY;
+      appendHttpConfig = '''';
 
-    # Prevent injection of code in other mime types (XSS Attacks)
-    add_header X-Content-Type-Options nosniff;
-
-    # This might create errors
-    proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
-  '';
+      gitweb = {
+        enable = true;
+        virtualHost = "ret2pop.net";
+      };
 
       virtualHosts = {
-           "ret2pop.nullring.xyz" = {
-             # addSSL = true;
-             # enableACME = true;
-             root = "/home/preston/ret2pop-website/";
+        "matrix.ret2pop.net" = {
+          enableACME = true;
+          forceSSL = true;
+          listen = [
+            {
+              addr = "0.0.0.0";
+              port = 443;
+              ssl = true;
+            }
+            {
+              addr = "[::]";
+              port = 443;
+              ssl = true;
+            }          {
+              addr = "0.0.0.0";
+              port = 8448;
+              ssl = true;
+            }
+            {
+              addr = "[::]";
+              port = 8448;
+              ssl = true;
+            }
+          ];
+          locations."/_matrix/" = {
+            proxyPass = "http://127.0.0.1:6167";
+            extraConfig = ''
+              proxy_set_header Host $host;
+              proxy_buffers 32 16k;
+              proxy_read_timeout 5m;
+            '';
+          };
+
+          extraConfig = ''
+            merge_slashes off;
+          '';
+        };
+           "ret2pop.net" = {
+          serverName = "ret2pop.net";
+             root = "/var/www/ret2pop-website/";
+             addSSL = true;
+             enableACME = true;
            };
       };
     };
   }
 #+end_src
+** Git Web Interface
+#+begin_src nix :tangle ../nix/modules/gitweb.nix
+  { lib, config, ... }:
+  {
+    services.gitweb = {
+      gitwebTheme = true;
+      projectroot = "/srv/git/";
+    };
+  }
+#+end_src
+** Conduit
+#+begin_src nix :tangle ../nix/modules/conduit.nix
+  { config, lib, ... }:
+  {
+    services.matrix-conduit = {
+      enable = lib.mkDefault config.monorepo.profiles.server.enable;
+      # random comment
+      settings.global = {
+        server_name = "matrix.ret2pop.net";
+        address = "0.0.0.0";
+        port = 6167;
+      };
+    };
+  }
+#+end_src
 ** Nvidia
 #+begin_src nix :tangle ../nix/modules/nvidia.nix
   { config, lib, pkgs, ... }:
@@ -574,6 +619,8 @@ because they enhance security.
       ./dovecot.nix
       ./ollama.nix
       ./i2pd.nix
+      ./gitweb.nix
+      ./conduit.nix
     ];
 
     documentation = {
@@ -801,6 +848,10 @@ because they enhance security.
     };
 
     security = {
+      acme = {
+        acceptTerms = true;
+        defaults.email = "ret2pop@gmail.com";
+      };
       apparmor = {
          enable = true;
          killUnconfinedConfinables = true;
@@ -840,16 +891,39 @@ because they enhance security.
       config.common.default = "*";
     };
 
+    environment.etc."gitconfig".text = ''
+    [init]
+    defaultBranch = main
+    '';
+    environment.extraInit = ''
+    umask 0022
+    '';
     environment.systemPackages = with pkgs; [
       restic
       sbctl
       git
       vim
       curl
+      nmap
+      (writeShellScriptBin "new-repo"
+        ''
+    #!/bin/bash
+    cd /srv/git
+    git init --bare "$1"
+    vim "$1/description"
+    chown -R git:git "$1"
+    ''
+      )
     ];
 
-    users.groups.git = {};
+    users.groups.nginx = lib.mkDefault {};
+    users.groups.git = lib.mkDefault {};
     users.users = {
+      nginx.group = "nginx";
+      nginx.isSystemUser = lib.mkDefault true;
+      nginx.extraGroups = [
+        "acme"
+      ];
       root.openssh.authorizedKeys.keys = [
         "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICts6+MQiMwpA+DfFQxjIN214Jn0pCw/2BDvOzPhR/H2 preston@continuity-dell"
       ];
@@ -859,8 +933,14 @@ because they enhance security.
          home = "/srv/git";
          shell = "${pkgs.git}/bin/git-shell";
         group = "git";
+        openssh.authorizedKeys.keys = [
+          "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICts6+MQiMwpA+DfFQxjIN214Jn0pCw/2BDvOzPhR/H2 preston@continuity-dell"
+        ];
       };
       "${config.monorepo.vars.userName}" = {
+        openssh.authorizedKeys.keys = [
+          "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICts6+MQiMwpA+DfFQxjIN214Jn0pCw/2BDvOzPhR/H2 preston@continuity-dell"
+        ];
          initialPassword = "${config.monorepo.vars.userName}";
          isNormalUser = true;
          description = config.monorepo.vars.fullName;
@@ -874,7 +954,12 @@ because they enhance security.
       "olm-3.2.16"
     ];
 
-    nix.settings.experimental-features = "nix-command flakes";
+    nix = {
+      settings = {
+        experimental-features = "nix-command flakes";
+        trusted-users = [ "@wheel" ];
+      };
+    };
     time.timeZone = config.monorepo.vars.timeZone;
     i18n.defaultLocale = "en_CA.UTF-8";
     system.stateVersion = "24.11";
@@ -2486,7 +2571,7 @@ standard.
     programs.zsh = {
       enable = true;
       initExtra = ''
-      umask 0077
+      umask 0022
       export EXTRA_CCFLAGS="-I/usr/include"
       source ${pkgs.zsh-vi-mode}/share/zsh-vi-mode/zsh-vi-mode.plugin.zsh
       export QT_QPA_PLATFORM="wayland"
@@ -2618,7 +2703,8 @@ for these configurations.
         (writeShellScriptBin "remote-build"
           ''
   #!/bin/bash
-  nixos-rebuild --target-host "$1" switch --flake .#spontaneity
+  cd ~/monorepo/nix
+  nixos-rebuild --use-remote-sudo --target-host "$1" switch --flake .#spontaneity
   ''
         )
         (writeShellScriptBin "install-vps"
@@ -2755,6 +2841,10 @@ Spontaneity is my VPS instance.
         grub.enable = true;
       };
     };
+    config.networking.firewall.allowedTCPPorts = [
+      80
+      443
+    ];
   }
 #+end_src
 *** Home
@@ -2806,7 +2896,7 @@ This contains the installation script I use to install my systems.
       enable = true;
       ports = [ 22 ];
       settings = {
-        PasswordAuthentication = true;
+        PasswordAuthentication = false;
         AllowUsers = null;
         UseDns = true;
         PermitRootLogin = lib.mkForce "prohibit-password";
index 37a9a414e8048adcae4aad316aa0e79934ad64b3..481fc5ddf603f329dea4d27db218501224340444 100644 (file)
@@ -12,3 +12,9 @@ Today I wrote most of my resume, which is published to html and LaTeX
 outputs automatically. This was a kind of miserable task but I did it
 anyways. I'm going to maybe try to write some form of javascript CDN
 for my NullRing webring so that I'm not manually updating everything.
+** 05:40 
+My agenda is also working pretty well. I think I often look to my
+org-agenda as my source of truth now, and that's really been helping
+with keeping track of things.
+** 18:17 
+Today I'm showing my brother the monorepo and its abilites.
diff --git a/nix/modules/cgit.nix b/nix/modules/cgit.nix
new file mode 100644 (file)
index 0000000..cfb9158
--- /dev/null
@@ -0,0 +1,6 @@
+{ config, lib, ... }:
+{
+  services.cgit = {
+    enable = true;
+  };
+}
diff --git a/nix/modules/conduit.nix b/nix/modules/conduit.nix
new file mode 100644 (file)
index 0000000..954e5fc
--- /dev/null
@@ -0,0 +1,12 @@
+{ config, lib, ... }:
+{
+  services.matrix-conduit = {
+    enable = lib.mkDefault config.monorepo.profiles.server.enable;
+    # random comment
+    settings.global = {
+      server_name = "matrix.ret2pop.net";
+      address = "0.0.0.0";
+      port = 6167;
+    };
+  };
+}
index 6f8f31432129aa269d591ee6e2ff501205e29ad5..bd37c7743e58e185ee81ef56c9c6f0f8c74f960d 100644 (file)
@@ -14,6 +14,8 @@
     ./dovecot.nix
     ./ollama.nix
     ./i2pd.nix
+    ./gitweb.nix
+    ./conduit.nix
   ];
 
   documentation = {
   };
 
   security = {
+    acme = {
+      acceptTerms = true;
+      defaults.email = "ret2pop@gmail.com";
+    };
     apparmor = {
          enable = true;
          killUnconfinedConfinables = true;
     config.common.default = "*";
   };
 
+  environment.etc."gitconfig".text = ''
+  [init]
+  defaultBranch = main
+  '';
+  environment.extraInit = ''
+  umask 0022
+  '';
   environment.systemPackages = with pkgs; [
     restic
     sbctl
     git
     vim
     curl
+    nmap
+    (writeShellScriptBin "new-repo"
+      ''
+  #!/bin/bash
+  cd /srv/git
+  git init --bare "$1"
+  vim "$1/description"
+  chown -R git:git "$1"
+  ''
+    )
   ];
 
-  users.groups.git = {};
+  users.groups.nginx = lib.mkDefault {};
+  users.groups.git = lib.mkDefault {};
   users.users = {
+    nginx.group = "nginx";
+    nginx.isSystemUser = lib.mkDefault true;
+    nginx.extraGroups = [
+      "acme"
+    ];
     root.openssh.authorizedKeys.keys = [
       "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICts6+MQiMwpA+DfFQxjIN214Jn0pCw/2BDvOzPhR/H2 preston@continuity-dell"
     ];
          home = "/srv/git";
          shell = "${pkgs.git}/bin/git-shell";
       group = "git";
+      openssh.authorizedKeys.keys = [
+        "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICts6+MQiMwpA+DfFQxjIN214Jn0pCw/2BDvOzPhR/H2 preston@continuity-dell"
+      ];
     };
     "${config.monorepo.vars.userName}" = {
+      openssh.authorizedKeys.keys = [
+        "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICts6+MQiMwpA+DfFQxjIN214Jn0pCw/2BDvOzPhR/H2 preston@continuity-dell"
+      ];
          initialPassword = "${config.monorepo.vars.userName}";
          isNormalUser = true;
          description = config.monorepo.vars.fullName;
     "olm-3.2.16"
   ];
 
-  nix.settings.experimental-features = "nix-command flakes";
+  nix = {
+    settings = {
+      experimental-features = "nix-command flakes";
+      trusted-users = [ "@wheel" ];
+    };
+  };
   time.timeZone = config.monorepo.vars.timeZone;
   i18n.defaultLocale = "en_CA.UTF-8";
   system.stateVersion = "24.11";
index e71356e85b39a7334b0c4f697c0704c0387ccdd7..e5e219293be6fa91651c54670c335e170bdfdb76 100644 (file)
@@ -3,7 +3,6 @@
   services.gitDaemon = {
     enable = lib.mkDefault config.monorepo.profiles.server.enable;
     exportAll = true;
-    listenAddress = "0.0.0.0";
     basePath = "/srv/git";
   };
 }
diff --git a/nix/modules/gitweb.nix b/nix/modules/gitweb.nix
new file mode 100644 (file)
index 0000000..51cff87
--- /dev/null
@@ -0,0 +1,7 @@
+{ lib, config, ... }:
+{
+  services.gitweb = {
+    gitwebTheme = true;
+    projectroot = "/srv/git/";
+  };
+}
index 85b6a7053a6c0241e6f2eb768bdd474e4b83dede..7872d53c58ed832f52b2afd6eb167d226ade9826 100644 (file)
@@ -65,7 +65,8 @@
       (writeShellScriptBin "remote-build"
         ''
 #!/bin/bash
-nixos-rebuild --target-host "$1" switch --flake .#spontaneity
+cd ~/monorepo/nix
+nixos-rebuild --use-remote-sudo --target-host "$1" switch --flake .#spontaneity
 ''
       )
       (writeShellScriptBin "install-vps"
index fc041e9e891562c83045e417900288a7ffb75500..0c5bcedd0415fb0a970fa32ebe0a89cb5651482b 100644 (file)
@@ -3,7 +3,7 @@
   programs.zsh = {
     enable = true;
     initExtra = ''
-    umask 0077
+    umask 0022
     export EXTRA_CCFLAGS="-I/usr/include"
     source ${pkgs.zsh-vi-mode}/share/zsh-vi-mode/zsh-vi-mode.plugin.zsh
     export QT_QPA_PLATFORM="wayland"
index 18becfe1e67863cdc2369e428b4f24f5f4251744..af2d42fd85bf1ffa05a27216e230fd02ea96d0a8 100644 (file)
@@ -2,7 +2,7 @@
 {
   services.nginx = {
     enable = lib.mkDefault config.monorepo.profiles.server.enable;
-
+    user = "nginx";
     # Use recommended settings
     recommendedGzipSettings = true;
     recommendedOptimisation = true;
     recommendedTlsSettings = true;
 
     # Only allow PFS-enabled ciphers with AES256
-    sslCiphers = "AES256+EECDH:AES256+EDH:!aNULL";
-
-    appendHttpConfig = ''
-  # Add HSTS header with preloading to HTTPS requests.
-  # Adding this header to HTTP requests is discouraged
-  map $scheme $hsts_header {
-       https   "max-age=31536000; includeSubdomains; preload";
-  }
-  add_header Strict-Transport-Security $hsts_header;
-
-  # Enable CSP for your services.
-  #add_header Content-Security-Policy "script-src 'self'; object-src 'none'; base-uri 'none';" always;
-
-  # Minimize information leaked to other domains
-  add_header 'Referrer-Policy' 'origin-when-cross-origin';
+    # sslCiphers = "AES256+EECDH:AES256+EDH:!aNULL";
 
-  # Disable embedding as a frame
-  add_header X-Frame-Options DENY;
+    appendHttpConfig = '''';
 
-  # Prevent injection of code in other mime types (XSS Attacks)
-  add_header X-Content-Type-Options nosniff;
-
-  # This might create errors
-  proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
-'';
+    gitweb = {
+      enable = true;
+      virtualHost = "ret2pop.net";
+    };
 
     virtualHosts = {
-           "ret2pop.nullring.xyz" = {
-             # addSSL = true;
-             # enableACME = true;
-             root = "/home/preston/ret2pop-website/";
+      "matrix.ret2pop.net" = {
+        enableACME = true;
+        forceSSL = true;
+        listen = [
+          {
+            addr = "0.0.0.0";
+            port = 443;
+            ssl = true;
+          }
+          {
+            addr = "[::]";
+            port = 443;
+            ssl = true;
+          }          {
+            addr = "0.0.0.0";
+            port = 8448;
+            ssl = true;
+          }
+          {
+            addr = "[::]";
+            port = 8448;
+            ssl = true;
+          }
+        ];
+        locations."/_matrix/" = {
+          proxyPass = "http://127.0.0.1:6167";
+          extraConfig = ''
+            proxy_set_header Host $host;
+            proxy_buffers 32 16k;
+            proxy_read_timeout 5m;
+          '';
+        };
+
+        extraConfig = ''
+          merge_slashes off;
+        '';
+      };
+           "ret2pop.net" = {
+        serverName = "ret2pop.net";
+             root = "/var/www/ret2pop-website/";
+             addSSL = true;
+             enableACME = true;
            };
     };
   };
index 5c705c9779d1445fd01f52fc42e29a2ba057e3f4..076ee470b2b9cc4c0056dda6a979bcb62916fb7a 100644 (file)
@@ -1,11 +1,11 @@
-{ config, ... }:
+{ config, lib, ... }:
 {
   services.openssh = {
     enable = true;
     settings = {
-      PasswordAuthentication = true;
-      AllowUsers = [ config.monorepo.vars.userName ];
-      PermitRootLogin = "prohibit-password";
+      PasswordAuthentication = lib.mkDefault (! config.monorepo.profiles.server.enable);
+      AllowUsers = [ config.monorepo.vars.userName "root" "git" ];
+      PermitRootLogin = "yes";
       KbdInteractiveAuthentication = false;
     };
   };
index d3d16933b2b9bef6aadbe1e68d891c5de5f53a5e..90a58db2ae5490ef4fed6d1d24078b3baf7c68d4 100644 (file)
@@ -21,7 +21,7 @@ in
     enable = true;
     ports = [ 22 ];
     settings = {
-      PasswordAuthentication = true;
+      PasswordAuthentication = false;
       AllowUsers = null;
       UseDns = true;
       PermitRootLogin = lib.mkForce "prohibit-password";
index df3dc6b4704831d9664bf4dcea60bf5e943eca0d..a40c53a18bda08b6b1d5eab563dccbd3c567856d 100644 (file)
@@ -17,4 +17,8 @@
       grub.enable = true;
     };
   };
+  config.networking.firewall.allowedTCPPorts = [
+    80
+    443
+  ];
 }
index c8d7f420c984d1c02b87e0a43be2a4391bc825e6..5e674f878c0ce450ca6596707896c1a8ec63e1d0 100644 (file)
Binary files a/resume.pdf and b/resume.pdf differ
index 50eeed0c63edb59d922f77970dc9a40c0d50ee35..8ec1d1b7fdb184b48631ba4493fa1c5d550df8dc 100644 (file)
@@ -1,4 +1,4 @@
-% Created 2025-02-11 Tue 03:12
+% Created 2025-02-11 Tue 18:22
 % Intended LaTeX compiler: xelatex
 \documentclass[10pt,letterpaper]{article}
 \usepackage[rm]{roboto}
 \usepackage{microtype}
 \sloppy
 \date{}
-\title{Preston's Resume}
+\title{My Resume}
 \begin{document}
 
-\section*{Resume -- Preston Pan}
-\label{sec:org2a32c6c}
+\section*{Introduction}
+\label{sec:orgfe25a86}
+This is the HTML form of my resume. There is a \href{resume.pdf}{pdf form} of my resume as well, if that's what you want.
+I'm excited to hear from you!
+\section*{Preston Pan}
+\label{sec:org6d476f9}
 \begin{minipage}[t]{0.47\textwidth}
 \subsection*{CONTACT}
-\label{sec:org846763a}
+\label{sec:org2a864bf}
 \begin{itemize}
 \item 📧 \textbf{\textbf{Email:}} ret2pop@gmail.com
 \item 📍 \textbf{\textbf{Location:}} Vancouver, BC, Canada
@@ -51,7 +55,7 @@
 \item 🖥️ \textbf{\textbf{GitHub:}} \href{https://github.com/ret2pop}{https://github.com/ret2pop}
 \end{itemize}
 \subsection*{SKILLS}
-\label{sec:orgdecc8d6}
+\label{sec:org2892f13}
 \begin{itemize}
 \item \textbf{\textbf{Programming:}} Python, Solidity, Rust, C, x86-64 Assembly, Shell
 \item \textbf{\textbf{DevOps:}} Docker, Kubernetes, NixOS, declarative configurations
@@ -62,9 +66,9 @@
 
 \vfill
 \subsection*{EXPERIENCE}
-\label{sec:orge5307a0}
+\label{sec:org6ef9801}
 \subsubsection*{\textbf{Software Engineer} - LayerZero Labs}
-\label{sec:orged9d799}
+\label{sec:org8ea673e}
 \begin{itemize}
 \item Shipped production-ready smart contract code as part of a world-class blockchain engineering team.
 \item Discovered and fixed critical vulnerabilities in TON and Aptos blockchain code, preventing potential losses of millions.
 \hfill
 \begin{minipage}[t]{0.47\textwidth}
 \subsection*{PROJECTS}
-\label{sec:org9cd42b8}
+\label{sec:orge82cd19}
 \subsubsection*{Stem}
-\label{sec:orgef7a6a4}
+\label{sec:orgfb19df5}
 \begin{itemize}
 \item Designed a stack-based programming language, written entirely in C.
 \item Reached \#1 on HackerNews; led to an offer at LayerZero.
 \end{itemize}
 \subsubsection*{Cognition}
-\label{sec:orga262a78}
+\label{sec:org4df69fe}
 \begin{itemize}
 \item Engineered a stack-based programming language featuring advanced metaprogramming capabilities.
 \item Another blog post that reached \#1 on HackerNews
 \end{itemize}
 \subsubsection*{NoExcess}
-\label{sec:org6fefc71}
+\label{sec:org93f1121}
 \begin{itemize}
 \item Developed a Lisp-like programming language with scoping, written in C.
 \end{itemize}
 \subsubsection*{Server/Website}
-\label{sec:org73f6fd4}
+\label{sec:orga313b21}
 \begin{itemize}
 \item Maintains a website/server with a blog and mindmap — runs a webring (\href{https://nullring.xyz}{nullring.xyz}).
 \end{itemize}
 \subsubsection*{Snake3}
-\label{sec:orgb89d92d}
+\label{sec:org49e5353}
 \begin{itemize}
 \item Created a threaded, multiplayer snake game in C.
 \item Available at \href{https://git.aberrantflux.xyz/snake3.git}{https://git.aberrantflux.xyz/snake3.git}
 \end{itemize}
 \subsection*{INTERESTS}
-\label{sec:org844b368}
+\label{sec:org1f6da6e}
 \begin{itemize}
 \item Cryptography, decentralized governance, Economic systems
 \item low-level programming, compiler design
 
 \vfill
 \subsection*{Let's Connect}
-\label{sec:org863f885}
+\label{sec:orgc9f3fcc}
 I'm open to opportunities in low level programming, blockchain, and cryptography. Feel free to reach out via email or Linkedin!
 \end{minipage}
 \end{document}