<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>cambriadaniele</title>
    <subtitle>Cambria Daniele&#x27;s personal website</subtitle>
    <link rel="self" type="application/atom+xml" href="https://cambriadaniele.com/old-website/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://cambriadaniele.com/old-website/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-04-12T00:00:00+00:00</updated>
    <id>https://cambriadaniele.com/old-website/atom.xml</id>
    <entry xml:lang="en">
        <title>Librechat setup</title>
        <published>2026-04-12T00:00:00+00:00</published>
        <updated>2026-04-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cambriadaniele.com/old-website/posts/programming/librechat/"/>
        <id>https://cambriadaniele.com/old-website/posts/programming/librechat/</id>
        
        <content type="html" xml:base="https://cambriadaniele.com/old-website/posts/programming/librechat/">&lt;p&gt;Everything I need to not forget.
Deployed to:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;librechat.cambriadaniele.com&quot;&gt;librechat.cambriadaniele.com&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re reading this, sorry, registration is deactivated.&lt;&#x2F;p&gt;
&lt;p&gt;Currently running: OpenAI, MiniMax, and Litellm endpoints on a $6&#x2F;mo DigitalOcean droplet (1 vCPU, 1GB RAM).&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ubuntu-docker-setup&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ubuntu-docker-setup&quot; aria-label=&quot;Anchor link for: ubuntu-docker-setup&quot;&gt;Ubuntu Docker Setup&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;deployment&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#deployment&quot; aria-label=&quot;Anchor link for: deployment&quot;&gt;Deployment&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;On Digital Ocean, choose a droplet with Docker already installed.
The $6&#x2F;month plan (1 vCPU, 1GB RAM) works fine but requires memory management.&lt;&#x2F;p&gt;
&lt;p&gt;Follow the &lt;a href=&quot;https:&#x2F;&#x2F;www.librechat.ai&#x2F;docs&#x2F;remote&#x2F;docker_linux&quot;&gt;official guide&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;To start the app container, run:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;docker compose up -d
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;To stop the container, run:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;docker compose down
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;configuration&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#configuration&quot; aria-label=&quot;Anchor link for: configuration&quot;&gt;Configuration&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;librechat-yaml&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#librechat-yaml&quot; aria-label=&quot;Anchor link for: librechat-yaml&quot;&gt;librechat.yaml&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Mount your configuration file into the container via &lt;code&gt;docker-compose.override.yml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yaml&quot; class=&quot;language-yaml &quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;services:
  api:
    volumes:
      - type: bind
        source: .&amp;#x2F;librechat.yaml
        target: &amp;#x2F;app&amp;#x2F;librechat.yaml
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The configuration defines all AI providers and models available to users.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;env-file&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#env-file&quot; aria-label=&quot;Anchor link for: env-file&quot;&gt;.env File&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Store all API keys in &lt;code&gt;.env&lt;&#x2F;code&gt;. Required keys:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;OPENAI_API_KEY=sk-...
MINIMAX_API_KEY=sk-cp-...
LITELLM_API_KEY=...
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;ai-providers&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ai-providers&quot; aria-label=&quot;Anchor link for: ai-providers&quot;&gt;AI Providers&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;openai-direct&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#openai-direct&quot; aria-label=&quot;Anchor link for: openai-direct&quot;&gt;OpenAI (Direct)&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Latest models: gpt-5.4, gpt-5.4-mini, gpt-5.4-nano, gpt-5.4-pro&lt;&#x2F;li&gt;
&lt;li&gt;Realtime models: gpt-realtime-mini, gpt-realtime-1.5&lt;&#x2F;li&gt;
&lt;li&gt;Vision: gpt-image-1-mini, gpt-image-1.5&lt;&#x2F;li&gt;
&lt;li&gt;Reasoning: o3-deep-research, o4-mini-deep-research&lt;&#x2F;li&gt;
&lt;li&gt;Legacy: gpt-4o, gpt-4o-mini&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Configure in &lt;code&gt;librechat.yaml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yaml&quot; class=&quot;language-yaml &quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;endpoints:
  openAI:
    apiKey: &amp;quot;${OPENAI_API_KEY}&amp;quot;
    models:
      default:
        - &amp;quot;gpt-5.4-nano&amp;quot;
        - &amp;quot;gpt-5.4-mini&amp;quot;
        - &amp;quot;gpt-5.4&amp;quot;
        - &amp;quot;gpt-5.4-pro&amp;quot;
        # ... etc
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;minimax&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#minimax&quot; aria-label=&quot;Anchor link for: minimax&quot;&gt;MiniMax&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Chinese AI provider with strong code understanding and reasoning.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yaml&quot; class=&quot;language-yaml &quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;custom:
  - name: &amp;quot;MiniMax&amp;quot;
    apiKey: &amp;quot;${MINIMAX_API_KEY}&amp;quot;
    baseURL: &amp;quot;https:&amp;#x2F;&amp;#x2F;api.minimax.io&amp;#x2F;v1&amp;quot;
    models:
      default:
        - &amp;quot;MiniMax-M2.7&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;litellm&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#litellm&quot; aria-label=&quot;Anchor link for: litellm&quot;&gt;Litellm&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Proxy endpoint for multiple providers. Currently configured with:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;OpenAI models via Litellm&lt;&#x2F;li&gt;
&lt;li&gt;Anthropic Claude&lt;&#x2F;li&gt;
&lt;li&gt;Google Gemini&lt;&#x2F;li&gt;
&lt;li&gt;Local models (Llama, Mistral, etc.)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-lang=&quot;yaml&quot; class=&quot;language-yaml &quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;- name: &amp;quot;Litellm&amp;quot;
  apiKey: &amp;quot;${LITELLM_API_KEY}&amp;quot;
  baseURL: &amp;quot;https:&amp;#x2F;&amp;#x2F;litellm.sph-prod.ethz.ch&amp;#x2F;v1&amp;quot;
  models:
    default:
      - &amp;quot;openai&amp;#x2F;gpt-5.4-mini&amp;quot;
      - &amp;quot;anthropic&amp;#x2F;claude-sonnet-4-5&amp;quot;
      - &amp;quot;gemini&amp;#x2F;gemini-1&amp;quot;
      # ... etc
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;memory-management&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#memory-management&quot; aria-label=&quot;Anchor link for: memory-management&quot;&gt;Memory Management&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;On 1GB droplet, set realistic memory limits in &lt;code&gt;docker-compose.override.yml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yaml&quot; class=&quot;language-yaml &quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;services:
  api:
    deploy:
      resources:
        limits:
          memory: 550M
        reservations:
          memory: 400M

  mongodb:
    deploy:
      resources:
        limits:
          memory: 250M
        reservations:
          memory: 200M

  meilisearch:
    deploy:
      resources:
        limits:
          memory: 100M

  rag_api:
    deploy:
      resources:
        limits:
          memory: 80M

  vectordb:
    deploy:
      resources:
        limits:
          memory: 70M
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;health-checks&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#health-checks&quot; aria-label=&quot;Anchor link for: health-checks&quot;&gt;Health Checks&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Add health checks to auto-restart crashed containers:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yaml&quot; class=&quot;language-yaml &quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;services:
  api:
    healthcheck:
      test:
        [
          &amp;quot;CMD-SHELL&amp;quot;,
          &amp;quot;wget --quiet --tries=1 --spider http:&amp;#x2F;&amp;#x2F;127.0.0.1:3080&amp;#x2F; || exit 1&amp;quot;,
        ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;manual-update-instructions-for-forked-repo-with-upstream&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#manual-update-instructions-for-forked-repo-with-upstream&quot; aria-label=&quot;Anchor link for: manual-update-instructions-for-forked-repo-with-upstream&quot;&gt;Manual Update Instructions (For Forked Repo with Upstream)&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Fetch latest changes from the original repo.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;git fetch upstream
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Update the local &lt;code&gt;main&lt;&#x2F;code&gt; branch&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;git checkout main
git merge upstream&amp;#x2F;main
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Rebase your custom branch onto the updated &lt;code&gt;main&lt;&#x2F;code&gt; branch to incorporate the latest changes.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;git checkout librechat-domain
git rebase main
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If conflicts occur (e.g., in &lt;code&gt;nginx.conf&lt;&#x2F;code&gt;):&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;# Resolve conflicts manually, then:
git add client&amp;#x2F;nginx.conf
git rebase --continue
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Push updates to your forked repository. Use &lt;code&gt;--force-with-lease&lt;&#x2F;code&gt; to avoid overwriting changes.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;git push origin main
git push --force-with-lease origin librechat-domain
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;updating-docker-containers&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#updating-docker-containers&quot; aria-label=&quot;Anchor link for: updating-docker-containers&quot;&gt;Updating Docker Containers&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Stop containers (no data loss):&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;docker compose down
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Pull latest images:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;docker compose pull
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Start LibreChat:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;docker compose up -d
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Verify the update:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;docker ps  # Check containers are running
curl -I http:&amp;#x2F;&amp;#x2F;localhost:80  # Or the domain
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you get 502 errors after restart, NGINX may need to pick up new container IPs:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;docker restart LibreChat-NGINX
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Cheatsheet</title>
        <published>2026-01-09T00:00:00+00:00</published>
        <updated>2026-01-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cambriadaniele.com/old-website/uni/mathinfo/cheatsheet/"/>
        <id>https://cambriadaniele.com/old-website/uni/mathinfo/cheatsheet/</id>
        
        <content type="html" xml:base="https://cambriadaniele.com/old-website/uni/mathinfo/cheatsheet/">&lt;p&gt;This cheatsheet is a work in progress.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;cambriadaniele.com&#x2F;227-0434-10L&#x2F;cheatsheet-exam.pdf&quot;&gt;Download the PDF (Exam version)&lt;&#x2F;a&gt;
&lt;a href=&quot;https:&#x2F;&#x2F;cambriadaniele.com&#x2F;227-0434-10L&#x2F;cheatsheet-study.pdf&quot;&gt;Download the PDF (study version)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Cheatsheet</title>
        <published>2026-01-09T00:00:00+00:00</published>
        <updated>2026-01-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cambriadaniele.com/old-website/uni/mathstats/cheatsheet/"/>
        <id>https://cambriadaniele.com/old-website/uni/mathstats/cheatsheet/</id>
        
        <content type="html" xml:base="https://cambriadaniele.com/old-website/uni/mathstats/cheatsheet/">&lt;p&gt;This cheatsheet is a work in progress.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;cambriadaniele.com&#x2F;401-3621-00L&#x2F;cheatsheet.pdf&quot;&gt;Download the PDF&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Setup of TeXpresso for Neovim</title>
        <published>2025-05-19T00:00:00+00:00</published>
        <updated>2025-05-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cambriadaniele.com/old-website/posts/programming/texpresso/"/>
        <id>https://cambriadaniele.com/old-website/posts/programming/texpresso/</id>
        
        <content type="html" xml:base="https://cambriadaniele.com/old-website/posts/programming/texpresso/">&lt;p&gt;Everything I need to not forget.
This is my basic configuration for TeXpresso on Neovim, specifically Lazyvim.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;video-example&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#video-example&quot; aria-label=&quot;Anchor link for: video-example&quot;&gt;Video Example&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;From the TeXpresso &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;let-def&#x2F;texpresso&quot;&gt;repository&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;video width=&quot;628&quot; height=&quot;205&quot; controls&gt;
  &lt;source src=&quot;&#x2F;videos&#x2F;texpresso.mp4&quot; type=&quot;video&#x2F;mp4&quot;&gt;
  Your browser does not support the video tag.
&lt;&#x2F;video&gt;
&lt;h1 id=&quot;setup&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#setup&quot; aria-label=&quot;Anchor link for: setup&quot;&gt;Setup&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;installation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#installation&quot; aria-label=&quot;Anchor link for: installation&quot;&gt;Installation&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Follow these &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;let-def&#x2F;texpresso&#x2F;blob&#x2F;main&#x2F;INSTALL.md&quot;&gt;instructions&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;configuration&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#configuration&quot; aria-label=&quot;Anchor link for: configuration&quot;&gt;Configuration&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;In &lt;code&gt;~&#x2F;.config&#x2F;nvim&#x2F;lua&#x2F;plugins&#x2F;texpresso.lua&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lua&quot; class=&quot;language-lua &quot;&gt;&lt;code class=&quot;language-lua&quot; data-lang=&quot;lua&quot;&gt;return {
  {
    &amp;quot;let-def&amp;#x2F;texpresso.vim&amp;quot;,
    ft = &amp;quot;tex&amp;quot;, -- load only for TeX files for efficiency
    config = function()
      -- Set the custom path to your texpresso binary
      require(&amp;quot;texpresso&amp;quot;).texpresso_path = &amp;quot;&amp;#x2F;home&amp;#x2F;yourname&amp;#x2F;dev&amp;#x2F;texpresso&amp;#x2F;texpresso&amp;quot;
    end,
  }
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;In &lt;code&gt;~&#x2F;.config&#x2F;nvim&#x2F;lua&#x2F;config&#x2F;keymamps.lua&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lua&quot; class=&quot;language-lua &quot;&gt;&lt;code class=&quot;language-lua&quot; data-lang=&quot;lua&quot;&gt;vim.keymap.set(
  &amp;quot;n&amp;quot;,
  &amp;quot;&amp;lt;leader&amp;gt;öt&amp;quot;, -- Or whatever you may want to use as a keymap
  &amp;quot;:TeXpresso %&amp;lt;CR&amp;gt;&amp;quot;,
  vim.tbl_extend(&amp;quot;force&amp;quot;, opts, { desc = &amp;quot;Run TeXpresso on current file&amp;quot; })
)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;controls&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#controls&quot; aria-label=&quot;Anchor link for: controls&quot;&gt;Controls&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;keyboard-controls&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#keyboard-controls&quot; aria-label=&quot;Anchor link for: keyboard-controls&quot;&gt;Keyboard controls:&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;←, →: change page&lt;&#x2F;li&gt;
&lt;li&gt;↑, ↓: move within the page&lt;&#x2F;li&gt;
&lt;li&gt;p (for &quot;page&quot;): switch between &quot;fit-to-page&quot; and &quot;fit-to-width&quot; zoom modes&lt;&#x2F;li&gt;
&lt;li&gt;c (&quot;crop&quot;): crop borders&lt;&#x2F;li&gt;
&lt;li&gt;q (&quot;quit&quot;): quit&lt;&#x2F;li&gt;
&lt;li&gt;i (&quot;invert&quot;): dark mode&lt;&#x2F;li&gt;
&lt;li&gt;I : toggle theming&lt;&#x2F;li&gt;
&lt;li&gt;t (&quot;top&quot;): toggle stay-on-top (keeping TeXpresso above the editor window)&lt;&#x2F;li&gt;
&lt;li&gt;b (&quot;border&quot;): toggle window borders&lt;&#x2F;li&gt;
&lt;li&gt;F5: start fullscreen presentation (leave with ESC)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;mouse-controls&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#mouse-controls&quot; aria-label=&quot;Anchor link for: mouse-controls&quot;&gt;Mouse controls:&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;click: select text in window (TODO: move Emacs buffer with SyncTeX)&lt;&#x2F;li&gt;
&lt;li&gt;control+click: pan page&lt;&#x2F;li&gt;
&lt;li&gt;wheel: scroll page&lt;&#x2F;li&gt;
&lt;li&gt;control+wheel: zoom&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Setup of AI tools for Neovim</title>
        <published>2025-05-14T00:00:00+00:00</published>
        <updated>2025-05-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cambriadaniele.com/old-website/posts/programming/ai-tools/"/>
        <id>https://cambriadaniele.com/old-website/posts/programming/ai-tools/</id>
        
        <content type="html" xml:base="https://cambriadaniele.com/old-website/posts/programming/ai-tools/">&lt;p&gt;Everything I need to not forget.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;codecompanion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#codecompanion&quot; aria-label=&quot;Anchor link for: codecompanion&quot;&gt;CodeCompanion&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;configuration&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#configuration&quot; aria-label=&quot;Anchor link for: configuration&quot;&gt;Configuration&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Standard Lazy.nvim configuration, with some extra options.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lua&quot; class=&quot;language-lua &quot;&gt;&lt;code class=&quot;language-lua&quot; data-lang=&quot;lua&quot;&gt;{
  &amp;quot;olimorris&amp;#x2F;codecompanion.nvim&amp;quot;,
  opts = {
    adapters = {
      deepseek = function()
        return require(&amp;quot;codecompanion.adapters&amp;quot;).extend(&amp;quot;deepseek&amp;quot;, {
          env = {
            api_key = &amp;quot;KEY&amp;quot;, -- At the moment I left it hardcoded, but you can use vim.env.KEY or vim.fn.getenv(&amp;quot;KEY&amp;quot;) to get the key from the environment
          },
          schema = {
            model = {
              default = &amp;quot;deepseek-chat&amp;quot;,
            },
          },
        })
      end,
    },
    display = {
      action_palette = {
        -- width = 95,
        -- height = 10,
        prompt = &amp;quot;Prompt &amp;quot;, -- Prompt used for interactive LLM calls
        provider = &amp;quot;default&amp;quot;, -- Can be &amp;quot;default&amp;quot;, &amp;quot;telescope&amp;quot;, &amp;quot;mini_pick&amp;quot; or &amp;quot;snacks&amp;quot;. If not specified, the plugin will autodetect installed providers.
        opts = {
          show_default_actions = true, -- Show the default actions in the action palette?
          show_default_prompt_library = true, -- Show the default prompt library in the action palette?
        },
      },
    },
    strategies = {
      chat = {
        -- adapter = &amp;quot;deepseek&amp;quot;,
        -- adapter = &amp;quot;anthropic&amp;quot;,
      },
      inline = {
        -- adapter = &amp;quot;copilot&amp;quot;,
      },
      cmd = {
        -- adapter = &amp;quot;deepseek&amp;quot;,
      },
    },
    extensions = {
      history = {
        enabled = true,
        opts = {
          -- Keymap to open history from chat buffer (default: gh)
          keymap = &amp;quot;gh&amp;quot;,
          -- Automatically generate titles for new chats
          auto_generate_title = true,
          ---On exiting and entering neovim, loads the last chat on opening chat
          continue_last_chat = false,
          ---When chat is cleared with `gx` delete the chat from history
          delete_on_clearing_chat = false,
          -- Picker interface (&amp;quot;telescope&amp;quot; or &amp;quot;snacks&amp;quot; or &amp;quot;default&amp;quot;)
          picker = &amp;quot;telescope&amp;quot;,
          ---Enable detailed logging for history extension
          enable_logging = false,
          ---Directory path to save the chats
          dir_to_save = vim.fn.stdpath(&amp;quot;data&amp;quot;) .. &amp;quot;&amp;#x2F;codecompanion-history&amp;quot;,
          -- Save all chats by default
          auto_save = true,
          -- Keymap to save the current chat manually
          save_chat_keymap = &amp;quot;sc&amp;quot;,
        },
      },
      vectorcode = {
        opts = {
          add_tool = true,
        },
      },
    },
  },
  dependencies = {
    &amp;quot;nvim-lua&amp;#x2F;plenary.nvim&amp;quot;,
    &amp;quot;nvim-treesitter&amp;#x2F;nvim-treesitter&amp;quot;,
    &amp;quot;ravitemer&amp;#x2F;codecompanion-history.nvim&amp;quot;,
  },
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;extensions&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#extensions&quot; aria-label=&quot;Anchor link for: extensions&quot;&gt;Extensions&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;history&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#history&quot; aria-label=&quot;Anchor link for: history&quot;&gt;History&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Just install the plugin:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lua&quot; class=&quot;language-lua &quot;&gt;&lt;code class=&quot;language-lua&quot; data-lang=&quot;lua&quot;&gt;{
    &amp;quot;olimorris&amp;#x2F;codecompanion.nvim&amp;quot;,
    dependencies = {
        --other plugins
        &amp;quot;ravitemer&amp;#x2F;codecompanion-history.nvim&amp;quot;
    }
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And add it to the extensions as shown above.
While in the CodeCompanion chat, use &lt;code&gt;gh&lt;&#x2F;code&gt; to open the history, and &lt;code&gt;sc&lt;&#x2F;code&gt; to save the current chat.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;vectorcode&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vectorcode&quot; aria-label=&quot;Anchor link for: vectorcode&quot;&gt;VectorCode&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Configuration is needed. First install pipx. Then install the package:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;pipx install vectorcode
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then, &lt;code&gt;cd&lt;&#x2F;code&gt; into your code and run &lt;code&gt;vectorcode init&lt;&#x2F;code&gt; to initialize the vector database.
Finally, run:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;vectorcode vectorise src&amp;#x2F;**&amp;#x2F;*.py
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Also install the plugin:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lua&quot; class=&quot;language-lua &quot;&gt;&lt;code class=&quot;language-lua&quot; data-lang=&quot;lua&quot;&gt;{
  &amp;quot;Davidyz&amp;#x2F;VectorCode&amp;quot;,
  version = &amp;quot;*&amp;quot;, -- optional, depending on whether you&amp;#x27;re on nightly or release
  build = &amp;quot;pipx upgrade vectorcode&amp;quot;, -- optional but recommended. This keeps your CLI up-to-date.
  dependencies = { &amp;quot;nvim-lua&amp;#x2F;plenary.nvim&amp;quot; },
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;To grant the LLM access to your indexed codebases, simply mention the &lt;code&gt;@vectorcode&lt;&#x2F;code&gt; tool in the chat buffer. The LLM can then query any projects indexed by VectorCode (verifiable via &lt;code&gt;vectorcode ls&lt;&#x2F;code&gt; in the terminal) to retrieve relevant context for your prompts.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Digital Ocean Droplet setup</title>
        <published>2025-04-05T00:00:00+00:00</published>
        <updated>2025-04-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cambriadaniele.com/old-website/posts/programming/droplet-setup/"/>
        <id>https://cambriadaniele.com/old-website/posts/programming/droplet-setup/</id>
        
        <content type="html" xml:base="https://cambriadaniele.com/old-website/posts/programming/droplet-setup/">&lt;p&gt;Everything I need to not forget.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;digital-ocean&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#digital-ocean&quot; aria-label=&quot;Anchor link for: digital-ocean&quot;&gt;Digital Ocean&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;droplet-creation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#droplet-creation&quot; aria-label=&quot;Anchor link for: droplet-creation&quot;&gt;Droplet Creation&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Create a Droplet &lt;em&gt;with Docker already installed&lt;&#x2F;em&gt;. Add an ssh key to the droplet, during creation already.&lt;&#x2F;p&gt;
&lt;p&gt;To authenticate:
Go to GitHub → Settings → Developer Settings → Personal Access Tokens (Classic)
Create a token with repo permissions.
Configure git to use the token for authentication:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;git config --global credential.helper store
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And then clone a repository, and enter the username and PAT.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;neovim-lazyvim&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#neovim-lazyvim&quot; aria-label=&quot;Anchor link for: neovim-lazyvim&quot;&gt;Neovim, Lazyvim&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;curl -LO https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;neovim&amp;#x2F;neovim&amp;#x2F;releases&amp;#x2F;latest&amp;#x2F;download&amp;#x2F;nvim-linux-x86_64.appimage
chmod u+x nvim-linux-x86_64.appimage
.&amp;#x2F;nvim-linux-x86_64.appimage

mkdir -p &amp;#x2F;opt&amp;#x2F;nvim
mv nvim-linux-x86_64.appimage &amp;#x2F;opt&amp;#x2F;nvim&amp;#x2F;nvim
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;nano ~&amp;#x2F;.bashrc
# Add this:
export PATH=&amp;quot;$PATH:&amp;#x2F;opt&amp;#x2F;nvim&amp;quot;
# Save with CtrlO and close with CtrlX
source ~&amp;#x2F;.bashrc
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;mv ~&amp;#x2F;.config&amp;#x2F;nvim{,.bak}
git clone https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;LazyVim&amp;#x2F;starter ~&amp;#x2F;.config&amp;#x2F;nvim
rm -rf ~&amp;#x2F;.config&amp;#x2F;nvim&amp;#x2F;.git
nvim
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;github-actions&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#github-actions&quot; aria-label=&quot;Anchor link for: github-actions&quot;&gt;Github Actions&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;secrets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#secrets&quot; aria-label=&quot;Anchor link for: secrets&quot;&gt;Secrets&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Go to &lt;code&gt;Settings -&amp;gt; Secrets and variables -&amp;gt; Actions -&amp;gt; New repository secret&lt;&#x2F;code&gt;, and add the following secrets:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;DIGITAL_OCEAN_DROPLET_IP&lt;&#x2F;li&gt;
&lt;li&gt;DIGITALOCEAN_SSH_PRIVATE_KEY&lt;&#x2F;li&gt;
&lt;li&gt;DIGITALOCEAN_SSH_USER (root for personal use, otherwise create a new user)&lt;&#x2F;li&gt;
&lt;li&gt;SSH_PASSWORD (If the local ssh key is password protected, otherwise leave it empty)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;action&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#action&quot; aria-label=&quot;Anchor link for: action&quot;&gt;Action&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Whenever something gets pushed to main, it gets pulled to opt&#x2F;thesis in the droplet.
I used this action for some containers I was running for data-scraping for my thesis, hence the directory name.
It then builds and gets the compose containers up, with environment variable PRODUCTION_ENV = True.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yml&quot; class=&quot;language-yml &quot;&gt;&lt;code class=&quot;language-yml&quot; data-lang=&quot;yml&quot;&gt;name: Deploy to DigitalOcean

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions&amp;#x2F;checkout@v4

      - name: Deploy via SSH
        uses: appleboy&amp;#x2F;ssh-action@v1.0.0
        with:
          host: ${{ secrets.DIGITALOCEAN_DROPLET_IP }}
          username: ${{ secrets.DIGITALOCEAN_SSH_USER }}
          key: ${{ secrets.DIGITALOCEAN_SSH_PRIVATE_KEY }}
          passphrase: ${{ secrets.SSH_PASSWORD }}
          script: |
            cd &amp;#x2F;opt&amp;#x2F;thesis
            git pull origin main
            PRODUCTION_ENV=True docker compose up -d --build
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Summary</title>
        <published>2024-10-19T00:00:00+00:00</published>
        <updated>2024-10-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cambriadaniele.com/old-website/uni/sta110/summary/"/>
        <id>https://cambriadaniele.com/old-website/uni/sta110/summary/</id>
        
        <content type="html" xml:base="https://cambriadaniele.com/old-website/uni/sta110/summary/">&lt;p&gt;This summary is a work in progress. As the course has already finished, I don&#x27;t know if I will ever complete it.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;cambriadaniele.com&#x2F;STA110&#x2F;main.pdf&quot;&gt;Download the PDF&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Website setup</title>
        <published>2024-10-18T00:00:00+00:00</published>
        <updated>2024-10-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cambriadaniele.com/old-website/posts/programming/zola-setup/"/>
        <id>https://cambriadaniele.com/old-website/posts/programming/zola-setup/</id>
        
        <content type="html" xml:base="https://cambriadaniele.com/old-website/posts/programming/zola-setup/">&lt;p&gt;Everything I need to not forget.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zola&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#zola&quot; aria-label=&quot;Anchor link for: zola&quot;&gt;Zola&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;themes&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#themes&quot; aria-label=&quot;Anchor link for: themes&quot;&gt;Themes&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;After choosing a theme:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;zola init mysite
git init  
git submodule add https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;username&amp;#x2F;theme_name.git themes&amp;#x2F;theme_name
&lt;mark&gt;git submodule update --init --recursive   #very important
&lt;&#x2F;mark&gt;&lt;mark&gt;git submodule update --remote --merge     #very important
&lt;&#x2F;mark&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then create&#x2F;import some content, copy the templates and eventually the rest.
Check if it runs with&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;zola serve 
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If using a custom domain, add a &lt;code&gt;CNAME&lt;&#x2F;code&gt; file to &lt;code&gt;static&#x2F;&lt;&#x2F;code&gt;, with the domain name written inside.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;github&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#github&quot; aria-label=&quot;Anchor link for: github&quot;&gt;Github&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;repository&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#repository&quot; aria-label=&quot;Anchor link for: repository&quot;&gt;Repository&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;To serve a site at &lt;code&gt;username.github.io&lt;&#x2F;code&gt;, name the repository &lt;code&gt;&amp;lt;username&amp;gt;.github.io&lt;&#x2F;code&gt;,
(otherwise GitHub will append the repository name to the URL, e.g.: &lt;code&gt;username.github.io&#x2F;repositoryname&lt;&#x2F;code&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;In the repository setting, activate &lt;code&gt;Actions -&amp;gt; General -&amp;gt; Workflow permissions -&amp;gt; Read and write permissions&lt;&#x2F;code&gt;,
otherwise the Github Action trying to build the website will fail.&lt;&#x2F;p&gt;
&lt;p&gt;Once the repository has been created, stage and commit the local changes, add the remote origin and push the changes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;github-actions&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#github-actions&quot; aria-label=&quot;Anchor link for: github-actions&quot;&gt;Github Actions&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Go to &lt;code&gt;Actions -&amp;gt; new workflow -&amp;gt; setup a workflow yourself&lt;&#x2F;code&gt;, and create a &lt;code&gt;.yml&lt;&#x2F;code&gt; file:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yml&quot; class=&quot;language-yml &quot;&gt;&lt;code class=&quot;language-yml&quot; data-lang=&quot;yml&quot;&gt;on: push
name: Build and deploy GH Pages
jobs:
  build:
    runs-on: ubuntu-latest
    if: github.ref == &amp;#x27;refs&amp;#x2F;heads&amp;#x2F;main&amp;#x27;
    steps:
      - name: checkout
        uses: actions&amp;#x2F;checkout@v4
      - name: build_and_deploy
        uses: shalzz&amp;#x2F;zola-deploy-action@v0.19.2
        env:
          # Target branch
          PAGES_BRANCH: gh-pages
          # Provide personal access token
          TOKEN: ${{ secrets.GITHUB_TOKEN }}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Commit and push the changes, wait for the job to terminate, and as soon as the gh-pages branch has been created,
go to &lt;code&gt;Settings -&amp;gt; Pages -&amp;gt; Deploy from branch -&amp;gt; gh-pages&lt;&#x2F;code&gt;, and also check if the custom domain has been correctly
setup.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Problem Set 1</title>
        <published>2022-01-01T00:00:00+00:00</published>
        <updated>2022-05-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cambriadaniele.com/old-website/uni/sta222/problem-set-1/"/>
        <id>https://cambriadaniele.com/old-website/uni/sta222/problem-set-1/</id>
        
        <content type="html" xml:base="https://cambriadaniele.com/old-website/uni/sta222/problem-set-1/">&lt;h3 id=&quot;documentation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#documentation&quot; aria-label=&quot;Anchor link for: documentation&quot;&gt;Documentation&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;The documentation for simple_turing_machine can be found &lt;a href=&quot;https:&#x2F;&#x2F;cambriadaniele.com&#x2F;STA222&#x2F;simple_turing_machine&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
