···
{ config, lib, pkgs, ... }:
cfg = config.programs.captive-browser;
···
# the options below are the same as in "captive-browser.toml"
30
-
default = concatStringsSep " " [ "${pkgs.chromium}/bin/chromium"
31
-
"--user-data-dir=\${XDG_DATA_HOME:-$HOME/.local/share}/chromium-captive"
32
-
''--proxy-server="socks5://$PROXY"''
33
-
''--host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE localhost"''
37
-
"http://cache.nixos.org/"
29
+
default = concatStringsSep " " [
30
+
''${pkgs.chromium}/bin/chromium''
31
+
''--user-data-dir=''${XDG_DATA_HOME:-$HOME/.local/share}/chromium-captive''
32
+
''--proxy-server="socks5://$PROXY"''
33
+
''--host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE localhost"''
37
+
''-no-default-browser-check''
38
+
''http://cache.nixos.org/''
The shell (/bin/sh) command executed once the proxy starts.
When browser exits, the proxy exits. An extra env var PROXY is available.
···
config = mkIf cfg.enable {
84
-
programs.captive-browser.dhcp-dns = mkOptionDefault (
85
-
if config.networking.networkmanager.enable then
86
-
"${pkgs.networkmanager}/bin/nmcli dev show ${escapeShellArg cfg.interface} | ${pkgs.gnugrep}/bin/fgrep IP4.DNS"
87
-
else if config.networking.dhcpcd.enable then
88
-
"${pkgs.dhcpcd}/bin/dhcpcd -U ${escapeShellArg cfg.interface} | ${pkgs.gnugrep}/bin/fgrep domain_name_servers"
89
-
else if config.networking.useNetworkd then
90
-
"${cfg.package}/bin/systemd-networkd-dns ${escapeShellArg cfg.interface}"
92
-
"${config.security.wrapperDir}/udhcpc --quit --now -f -i ${escapeShellArg cfg.interface} -O dns --script ${
93
-
pkgs.writeScript "udhcp-script" ''
95
-
if [ "$1" = bound ]; then
85
+
programs.captive-browser.dhcp-dns =
88
+
optionalString cfg.bindInterface (concatStringsSep " " (map escapeShellArg [ prefix cfg.interface ]));
91
+
if config.networking.networkmanager.enable then
92
+
"${pkgs.networkmanager}/bin/nmcli dev show ${iface ""} | ${pkgs.gnugrep}/bin/fgrep IP4.DNS"
93
+
else if config.networking.dhcpcd.enable then
94
+
"${pkgs.dhcpcd}/bin/dhcpcd ${iface "-U"} | ${pkgs.gnugrep}/bin/fgrep domain_name_servers"
95
+
else if config.networking.useNetworkd then
96
+
"${cfg.package}/bin/systemd-networkd-dns ${iface ""}"
98
+
"${config.security.wrapperDir}/udhcpc --quit --now -f ${iface "-i"} -O dns --script ${
99
+
pkgs.writeShellScript "udhcp-script" ''
100
+
if [ "$1" = bound ]; then
security.wrappers.udhcpc = {
102
-
capabilities = "cap_net_raw+p";
103
-
source = "${pkgs.busybox}/bin/udhcpc";
107
+
capabilities = "cap_net_raw+p";
108
+
source = "${pkgs.busybox}/bin/udhcpc";
security.wrappers.captive-browser = {
107
-
capabilities = "cap_net_raw+p";
108
-
source = pkgs.writeScript "captive-browser" ''
109
-
#!${pkgs.bash}/bin/bash
110
-
export XDG_CONFIG_HOME=${pkgs.writeTextDir "captive-browser.toml" ''
111
-
browser = """${cfg.browser}"""
112
-
dhcp-dns = """${cfg.dhcp-dns}"""
113
-
socks5-addr = """${cfg.socks5-addr}"""
114
-
${optionalString cfg.bindInterface ''
115
-
bind-device = """${cfg.interface}"""
118
-
exec ${cfg.package}/bin/captive-browser
112
+
capabilities = "cap_net_raw+p";
113
+
source = pkgs.writeShellScript "captive-browser" ''
114
+
export XDG_CONFIG_HOME=${pkgs.writeTextDir "captive-browser.toml" ''
115
+
browser = """${cfg.browser}"""
116
+
dhcp-dns = """${cfg.dhcp-dns}"""
117
+
socks5-addr = """${cfg.socks5-addr}"""
118
+
${optionalString cfg.bindInterface ''
119
+
bind-device = """${cfg.interface}"""
122
+
exec ${cfg.package}/bin/captive-browser