+8
.github/workflows/deploy.yaml
+8
.github/workflows/deploy.yaml
···
-1
README.md
-1
README.md
···
+112
-26
flake.lock
+112
-26
flake.lock
·······································
·······································
+7
flake.nix
+7
flake.nix
·········
·········
+68
-2
machines/atalanta/home/default.nix
+68
-2
machines/atalanta/home/default.nix
······
+1
machines/atalanta/home-manager.nix
+1
machines/atalanta/home-manager.nix
+5
machines/ember/default.nix
+5
machines/ember/default.nix
-35
machines/john/default.nix
-35
machines/john/default.nix
···
···
-2
machines/moonlark/home/default.nix
-2
machines/moonlark/home/default.nix
+1
machines/moonlark/home-manager.nix
+1
machines/moonlark/home-manager.nix
+5
machines/nest/default.nix
+5
machines/nest/default.nix
+7
-2
machines/prattle/home/default.nix
+7
-2
machines/prattle/home/default.nix
+1
machines/prattle/home-manager.nix
+1
machines/prattle/home-manager.nix
+1
machines/tacyon/default.nix
+1
machines/tacyon/default.nix
+4
-2
machines/terebithia/home/default.nix
+4
-2
machines/terebithia/home/default.nix
+1
machines/terebithia/home-manager.nix
+1
machines/terebithia/home-manager.nix
+28
-4
modules/home/apps/bore/bore.1.md
+28
-4
modules/home/apps/bore/bore.1.md
······-**bore** is a tunneling service that uses frp (fast reverse proxy) to expose local services to the internet via bore.dunkirk.sh. It provides a simple CLI for creating and managing HTTP tunnels with optional labels and persistent configuration.······When running **bore** without arguments in a directory with bore.toml, you'll be prompted to choose between creating a new tunnel or using a saved configuration.
······+**bore** is a tunneling service that uses frp (fast reverse proxy) to expose local services to the internet via bore.dunkirk.sh. It provides a simple CLI for creating and managing HTTP, TCP, and UDP tunnels with optional labels and persistent configuration.······When running **bore** without arguments in a directory with bore.toml, you'll be prompted to choose between creating a new tunnel or using a saved configuration.
+7
-1
modules/home/apps/bore/completions/bore.bash
+7
-1
modules/home/apps/bore/completions/bore.bash
···
+1
modules/home/apps/bore/completions/bore.fish
+1
modules/home/apps/bore/completions/bore.fish
···
+2
modules/home/apps/bore/completions/bore.zsh
+2
modules/home/apps/bore/completions/bore.zsh
···
+195
-38
modules/home/apps/bore/default.nix
+195
-38
modules/home/apps/bore/default.nix
···-echo "$tunnels" | ${pkgs.jq}/bin/jq -r '.proxies[] | select(.status == "online" and .conf != null) | "\(.name) โ https://\(.conf.subdomain).${cfg.domain}"' | while read -r line; do······saved_names=$(${pkgs.gnugrep}/bin/grep '^\[' "$CONFIG_FILE" | ${pkgs.gnused}/bin/sed 's/^\[\(.*\)\]$/\1/')······-${pkgs.gum}/bin/gum style --foreground 35 "โ Loaded from bore.toml: $subdomain โ localhost:$port''${label:+ [$label]}"-${pkgs.gum}/bin/gum style --foreground 196 "Invalid subdomain (use only lowercase letters, numbers, and hyphens)"·········-if [ -f "$CONFIG_FILE" ] && ${pkgs.gnugrep}/bin/grep -q "^\[$subdomain\]" "$CONFIG_FILE"; then······${pkgs.gum}/bin/gum style --foreground 214 "Connecting to ${cfg.serverAddr}:${toString cfg.serverPort}..."
···+echo "$tunnels" | ${pkgs.jq}/bin/jq -r '.proxies[] | select(.status == "online" and .conf != null) | if .type == "http" then "\(.name) โ https://\(.conf.subdomain).${cfg.domain} [http]" elif .type == "tcp" then "\(.name) โ tcp://\(.conf.remotePort) โ localhost:\(.conf.localPort) [tcp]" elif .type == "udp" then "\(.name) โ udp://\(.conf.remotePort) โ localhost:\(.conf.localPort) [udp]" else "\(.name) [\(.type)]" end' | while read -r line; do···+${pkgs.gum}/bin/gum style --foreground 35 "โ $current_tunnel โ localhost:$port [$proto_display] [$label]"+${pkgs.gum}/bin/gum style --foreground 35 "โ $current_tunnel โ localhost:$port [$proto_display]"+${pkgs.gum}/bin/gum style --foreground 35 "โ $current_tunnel โ localhost:$port [$proto_display] [$label]"+${pkgs.gum}/bin/gum style --foreground 35 "โ $current_tunnel โ localhost:$port [$proto_display]"···saved_names=$(${pkgs.gnugrep}/bin/grep '^\[' "$CONFIG_FILE" | ${pkgs.gnused}/bin/sed 's/^\[\(.*\)\]$/\1/')······+${pkgs.gum}/bin/gum style --foreground 35 "โ Loaded from bore.toml: $tunnel_name โ localhost:$port [$proto_display]''${label:+ [$label]}"+${pkgs.gum}/bin/gum style --foreground 196 "Invalid subdomain (use only lowercase letters, numbers, and hyphens)"······+# Prompt for protocol if not provided via flag and not loaded from saved config and not already set+labels=$(${pkgs.gum}/bin/gum choose --no-limit --header "Labels (select multiple):" "dev" "prod" "custom")···+if [ -f "$CONFIG_FILE" ] && ${pkgs.gnugrep}/bin/grep -q "^\[$tunnel_name\]" "$CONFIG_FILE"; then······+admin_port=$(${pkgs.python3}/bin/python3 -c 'import socket; s=socket.socket(); s.bind(("", 0)); print(s.getsockname()[1]); s.close()')+${pkgs.gum}/bin/gum style --foreground 196 "Invalid protocol: $protocol (must be http, tcp, or udp)"${pkgs.gum}/bin/gum style --foreground 214 "Connecting to ${cfg.serverAddr}:${toString cfg.serverPort}..."+proxy_status=$(${pkgs.curl}/bin/curl -s http://127.0.0.1:$admin_port/api/status 2>/dev/null || echo "{}")+remote_addr=$(echo "$proxy_status" | ${pkgs.jq}/bin/jq -r ".tcp[]? | select(.name == \"$proxy_name\") | .remote_addr" 2>/dev/null)+remote_addr=$(echo "$proxy_status" | ${pkgs.jq}/bin/jq -r ".udp[]? | select(.name == \"$proxy_name\") | .remote_addr" 2>/dev/null)
+183
modules/home/apps/ssh.nix
+183
modules/home/apps/ssh.nix
···
···
-85
modules/home/apps/vscode.nix
-85
modules/home/apps/vscode.nix
···
···
-26
modules/home/system/nixpkgs.nix
-26
modules/home/system/nixpkgs.nix
···
···
+26
modules/home/system/nixpkgs.nix.disabled
+26
modules/home/system/nixpkgs.nix.disabled
···
···
+9
-2
modules/home/system/shell.nix
+9
-2
modules/home/system/shell.nix
·········
·········
+48
modules/nixos/services/bore/README.md
+48
modules/nixos/services/bore/README.md
···
···++Bore is a lightweight wrapper around `frp` which provides a dashboard and a nice `gum` based cli. It supports HTTP, TCP, and UDP tunneling. If you would like to run this in your own nix flake then simplify vendor this folder and `./modules/home/bore` and import the folders into the appropriate home manager and nixos configurations.+The secret file is just a oneline file with the key in it. If you do end up deploying this feel free to email me and let me know! I would love to hear about your setup!
+23
-7
modules/nixos/services/bore/bore.nix
+23
-7
modules/nixos/services/bore/bore.nix
············
············
+11
modules/nixos/services/bore/bore.toml.example
+11
modules/nixos/services/bore/bore.toml.example
+67
-12
modules/nixos/services/bore/dashboard.html
+67
-12
modules/nixos/services/bore/dashboard.html
············html += '<div style="color: #8b949e; font-size: 0.85rem; margin-bottom: 0.75rem;">recently disconnected</div>';-<span class="offline-tunnel-name">${displayName || 'unnamed'}${label ? ` [${label}]` : ''}</span><span class="offline-tunnel-stats">in: <span data-traffic-in="${proxy.name}">0 B</span> โข out: <span data-traffic-out="${proxy.name}">0 B</span></span>···-<span class="offline-tunnel-name">${displayName || 'unnamed'}${label ? ` [${label}]` : ''} โ ${url}</span><span class="offline-tunnel-stats">in: <span data-traffic-in="${proxy.name}">0 B</span> โข out: <span data-traffic-out="${proxy.name}">0 B</span></span>
·········+return `<span class="tunnel-label" style="color: ${style.color}; background: ${style.bgColor}; border-color: ${style.borderColor};">${trimmedLabel}</span>`;···html += '<div style="color: #8b949e; font-size: 0.85rem; margin-bottom: 0.75rem;">recently disconnected</div>';<span class="offline-tunnel-stats">in: <span data-traffic-in="${proxy.name}">0 B</span> โข out: <span data-traffic-out="${proxy.name}">0 B</span></span>···<span class="offline-tunnel-stats">in: <span data-traffic-in="${proxy.name}">0 B</span> โข out: <span data-traffic-out="${proxy.name}">0 B</span></span>
+48
packages/zmx.nix
+48
packages/zmx.nix
···
···