{ 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 /. $out/project-a/ ''; }; serve = pkgs.writeShellApplication { name = "serve"; runtimeInputs = [ pkgs.python3 pkgs.psmisc ]; text = '' fuser -k 8080/tcp 2>/dev/null || true 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 ''; }; new-post = pkgs.writeShellApplication { name = "new-post"; runtimeInputs = [ pkgs.coreutils pkgs.gnused ]; text = '' if [ $# -eq 0 ]; then echo "Usage: new-post \"Post Title\"" exit 1 fi title="$*" slug=$(echo "$title" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/-\+/-/g' | sed 's/^-//;s/-$//') date=$(date +%Y-%m-%d) filename="content/blog/''${date}-''${slug}.org" mkdir -p content/blog cat > "$filename" <