+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.+**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
···
+174
-39
modules/home/apps/bore/default.nix
+174
-39
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+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: $subdomain โ localhost:$port''${label:+ [$label]}"+${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)"+${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 setlabels=$(${pkgs.gum}/bin/gum choose --no-limit --header "Labels (select multiple):" "dev" "prod" "custom")······-if [ -f "$CONFIG_FILE" ] && ${pkgs.gnugrep}/bin/grep -q "^\[$subdomain\]" "$CONFIG_FILE"; then+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)
+17
-1
modules/nixos/services/bore/README.md
+17
-1
modules/nixos/services/bore/README.md
···-Bore is a lightweight wrapper around `frp` which provides a dashboard and a nice `gum` based cli. 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.+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.···
+23
-2
modules/nixos/services/bore/bore.nix
+23
-2
modules/nixos/services/bore/bore.nix
·········
+11
modules/nixos/services/bore/bore.toml.example
+11
modules/nixos/services/bore/bore.toml.example
···