113 lines
3.3 KiB
Nix
113 lines
3.3 KiB
Nix
{
|
|
description = "Personal website";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
|
|
# Sub-projects: uncomment and replace URLs when ready
|
|
# project-a = {
|
|
# url = "path:/path/to/project-a";
|
|
# inputs.nixpkgs.follows = "nixpkgs";
|
|
# };
|
|
# project-b = {
|
|
# url = "path:/path/to/project-b";
|
|
# inputs.nixpkgs.follows = "nixpkgs";
|
|
# };
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-utils, ... } @ inputs:
|
|
flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" ] (system:
|
|
let
|
|
pkgs = import nixpkgs { inherit system; };
|
|
|
|
# Sub-project outputs — uncomment when inputs above are added
|
|
# subProjectA = inputs.project-a.packages.${system}.default;
|
|
# subProjectB = inputs.project-b.packages.${system}.default;
|
|
|
|
site = pkgs.stdenv.mkDerivation {
|
|
name = "personal-site";
|
|
src = pkgs.lib.cleanSource ./.;
|
|
|
|
nativeBuildInputs = [ pkgs.emacs-nox ];
|
|
|
|
buildPhase = ''
|
|
mkdir -p public
|
|
export HOME=$(mktemp -d)
|
|
emacs --batch --load ./build.el
|
|
'';
|
|
|
|
installPhase = ''
|
|
cp -r public/. $out/
|
|
|
|
# Sub-project integration: when adding a sub-project, add lines like:
|
|
# mkdir -p $out/project-a
|
|
# cp -r <subProjectA-store-path>/. $out/project-a/
|
|
'';
|
|
};
|
|
|
|
serve = pkgs.writeShellApplication {
|
|
name = "serve";
|
|
runtimeInputs = [ pkgs.python3 ];
|
|
text = ''
|
|
echo "Serving site at http://localhost:8080"
|
|
python -m http.server --bind 0.0.0.0 8080 -d ${site}
|
|
'';
|
|
};
|
|
|
|
tunnel = pkgs.writeShellApplication {
|
|
name = "tunnel";
|
|
runtimeInputs = [ pkgs.python3 pkgs.cloudflared pkgs.qrencode ];
|
|
text = ''
|
|
echo "Starting local server and Cloudflare tunnel..."
|
|
echo ""
|
|
|
|
echo "Starting local server on http://localhost:8080..."
|
|
python -m http.server --bind 0.0.0.0 8080 -d ${site} &
|
|
SERVER_PID=$!
|
|
|
|
sleep 2
|
|
|
|
echo ""
|
|
echo "Starting HTTPS tunnel..."
|
|
echo "Use the QR code below on your device:"
|
|
echo ""
|
|
|
|
cloudflared tunnel --url http://localhost:8080 2>&1 | \
|
|
while IFS= read -r line; do
|
|
echo "$line"
|
|
if echo "$line" | grep -q "https://.*trycloudflare.com"; then
|
|
URL=$(echo "$line" | grep -o "https://[^ ]*trycloudflare.com")
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "TUNNEL URL: $URL"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "QR Code:"
|
|
echo ""
|
|
qrencode -t ANSIUTF8 "$URL"
|
|
echo ""
|
|
fi
|
|
done
|
|
|
|
kill $SERVER_PID 2>/dev/null
|
|
'';
|
|
};
|
|
|
|
in {
|
|
packages.default = site;
|
|
|
|
apps = {
|
|
default = {
|
|
type = "app";
|
|
program = "${serve}/bin/serve";
|
|
};
|
|
tunnel = {
|
|
type = "app";
|
|
program = "${tunnel}/bin/tunnel";
|
|
};
|
|
};
|
|
}
|
|
);
|
|
}
|