Single-page portfolio linking to other projects.
 
 
 
 
 
 
Go to file
Joshua Potter a0b45733bc Use check_origin for prod domains. 2024-05-18 12:16:55 -06:00
.githooks Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
assets Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
config Use check_origin for prod domains. 2024-05-18 12:16:55 -06:00
lib Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
priv Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
test Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
.envrc Initial commit. 2023-12-13 15:34:29 -07:00
.formatter.exs Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
.gitignore Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
README.md Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
default.nix Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
deps.nix Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
flake.lock Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
flake.nix Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
mix.exs Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00
mix.lock Migrate to simple Phoenix application. 2024-05-18 11:53:56 -06:00

README.md

Portfolio

This is my main personal website. It uses Elixir (version 1.15.7, Erlang/OTP 25) and the Phoenix (version 1.7.10) framework. direnv can be used to launch a dev shell upon entering this directory (refer to .envrc). Otherwise run via:

$ nix develop

Quickstart

Run the Phoenix setup command and then start the local server:

$ mix deps.get
$ mix assets.setup
$ mix phx.server

Blog

Blog posts exist under the nested blog_html/ directory. Markdown files are converted to HTML using pandoc (version 3.1.9). For example,

$ cd lib/portfolio_web/controllers/blog_html
$ pandoc \
>   --to=html \
>   --toc \
>   --template=template.html \
>   --output tagless_final_parsing.html.heex \
>   tagless_final_parsing.md

Styling is maintained within the blog.css file. This file is generated by copying the CSS made within a standalone invocation of pandoc. For example,

$ pandoc --standalone --output output.html --highlight-style=zenburn

Dependencies

Backend

Mix dependencies are packaged using mix2nix. After updating your mix.lock file, make sure to re-run the following:

$ mix2nix > deps.nix

As of now, mix2nix cannot handle git dependencies found inside the mix.lock file. If you have git dependencies, add them manually or use FODs.

Frontend

Frontend dependencies (i.e. assets found in the /assets folder) are packaged using node2nix. You can generate the relevant nix files for import using the following sequence of commands:

$ cd assets
$ rm -r node_modules  # If this directory exists.
$ node2nix -l

In the above, we must remove node_modules (if it exists). Otherwise the node packages will be included in the Nix build, influencing the outcome of node2nix. The above generates three files:

  • node-packages.nix
    • Captures the packages that can be deployed (including all its required dependencies)
  • node-env.nix
    • Contains build logic
  • default.nix
    • A composition expression allowing users to deploy the package. For an example of this deployment, refer to flake.nix

NOTE: Do not update the lock version used in assets. node2nix currently only supports lock versions 1 and 2.

Language Server

The elixir-ls LSP (version 0.17.10) and typescript-language-server (version 4.1.2) is included in this flake.

Formatting

Formatting depends on prettier (version 3.1.0) and the mix format task. A pre-commit hook is included in .githooks that can be used to format all *.exs?, *.jsx?, and *.tsx? files prior to commit. Install via:

$ git config --local core.hooksPath .githooks/

If running direnv, this hook is installed automatically when entering the directory.