+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
···
+104
-13
modules/home/apps/bore/default.nix
+104
-13
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]"···-${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: $subdomain โ localhost:$port [$proto_display]''${label:+ [$label]}"······labels=$(${pkgs.gum}/bin/gum choose --no-limit --header "Labels (select multiple):" "dev" "prod" "custom")···············+${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:7400/api/status 2>/dev/null || echo "{}")+remote_port=$(echo "$proxy_status" | ${pkgs.jq}/bin/jq -r ".tcp[] | select(.name == \"$proxy_name\") | .remoteAddr" 2>/dev/null | ${pkgs.gnugrep}/bin/grep -oP ':\K[0-9]+$' ||+echo "$proxy_status" | ${pkgs.jq}/bin/jq -r ".udp[] | select(.name == \"$proxy_name\") | .remoteAddr" 2>/dev/null | ${pkgs.gnugrep}/bin/grep -oP ':\K[0-9]+$')+"โ Tunnel established\n\n Local: localhost:$port\n Remote: ${cfg.serverAddr}:$remote_port\n Type: $protocol"
+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
-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
···