nixos/captive-browser: make it work without a fixed interface

nixpkgs-fmt makes this a lot noisier than it has to be
This commit is contained in:
Peter Hoeg 2020-10-02 12:50:27 +08:00
parent 21a6759463
commit 04e9e9e510

View File

@ -1,7 +1,6 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib; with lib;
let let
cfg = config.programs.captive-browser; cfg = config.programs.captive-browser;
in in
@ -27,14 +26,16 @@ in
# the options below are the same as in "captive-browser.toml" # the options below are the same as in "captive-browser.toml"
browser = mkOption { browser = mkOption {
type = types.str; type = types.str;
default = concatStringsSep " " [ "${pkgs.chromium}/bin/chromium" default = concatStringsSep " " [
"--user-data-dir=\${XDG_DATA_HOME:-$HOME/.local/share}/chromium-captive" ''${pkgs.chromium}/bin/chromium''
''--user-data-dir=''${XDG_DATA_HOME:-$HOME/.local/share}/chromium-captive''
''--proxy-server="socks5://$PROXY"'' ''--proxy-server="socks5://$PROXY"''
''--host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE localhost"'' ''--host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE localhost"''
"--no-first-run" ''--no-first-run''
"--new-window" ''--new-window''
"--incognito" ''--incognito''
"http://cache.nixos.org/" ''-no-default-browser-check''
''http://cache.nixos.org/''
]; ];
description = '' description = ''
The shell (/bin/sh) command executed once the proxy starts. The shell (/bin/sh) command executed once the proxy starts.
@ -81,17 +82,21 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
programs.captive-browser.dhcp-dns = mkOptionDefault ( programs.captive-browser.dhcp-dns =
let
iface = prefix:
optionalString cfg.bindInterface (concatStringsSep " " (map escapeShellArg [ prefix cfg.interface ]));
in
mkOptionDefault (
if config.networking.networkmanager.enable then if config.networking.networkmanager.enable then
"${pkgs.networkmanager}/bin/nmcli dev show ${escapeShellArg cfg.interface} | ${pkgs.gnugrep}/bin/fgrep IP4.DNS" "${pkgs.networkmanager}/bin/nmcli dev show ${iface ""} | ${pkgs.gnugrep}/bin/fgrep IP4.DNS"
else if config.networking.dhcpcd.enable then else if config.networking.dhcpcd.enable then
"${pkgs.dhcpcd}/bin/dhcpcd -U ${escapeShellArg cfg.interface} | ${pkgs.gnugrep}/bin/fgrep domain_name_servers" "${pkgs.dhcpcd}/bin/dhcpcd ${iface "-U"} | ${pkgs.gnugrep}/bin/fgrep domain_name_servers"
else if config.networking.useNetworkd then else if config.networking.useNetworkd then
"${cfg.package}/bin/systemd-networkd-dns ${escapeShellArg cfg.interface}" "${cfg.package}/bin/systemd-networkd-dns ${iface ""}"
else else
"${config.security.wrapperDir}/udhcpc --quit --now -f -i ${escapeShellArg cfg.interface} -O dns --script ${ "${config.security.wrapperDir}/udhcpc --quit --now -f ${iface "-i"} -O dns --script ${
pkgs.writeScript "udhcp-script" '' pkgs.writeShellScript "udhcp-script" ''
#!/bin/sh
if [ "$1" = bound ]; then if [ "$1" = bound ]; then
echo "$dns" echo "$dns"
fi fi
@ -105,8 +110,7 @@ in
security.wrappers.captive-browser = { security.wrappers.captive-browser = {
capabilities = "cap_net_raw+p"; capabilities = "cap_net_raw+p";
source = pkgs.writeScript "captive-browser" '' source = pkgs.writeShellScript "captive-browser" ''
#!${pkgs.bash}/bin/bash
export XDG_CONFIG_HOME=${pkgs.writeTextDir "captive-browser.toml" '' export XDG_CONFIG_HOME=${pkgs.writeTextDir "captive-browser.toml" ''
browser = """${cfg.browser}""" browser = """${cfg.browser}"""
dhcp-dns = """${cfg.dhcp-dns}""" dhcp-dns = """${cfg.dhcp-dns}"""