115 lines
2.9 KiB
Nix
115 lines
2.9 KiB
Nix
{
|
|
lib,
|
|
stdenv,
|
|
fetchFromGitHub,
|
|
makeWrapper,
|
|
|
|
# --- Runtime Dependencies ---
|
|
bash,
|
|
procps,
|
|
iproute2,
|
|
dnsmasq,
|
|
iptables,
|
|
coreutils,
|
|
flock,
|
|
gawk,
|
|
getopt,
|
|
gnugrep,
|
|
gnused,
|
|
which,
|
|
# `nmcli` is not required for create_ap.
|
|
# Use NetworkManager by default because it is very likely already present
|
|
useNetworkManager ? true,
|
|
networkmanager,
|
|
|
|
# --- WiFi Hotspot Dependencies ---
|
|
useWifiDependencies ? true,
|
|
hostapd,
|
|
iw,
|
|
# You only need this if 'iw' can not recognize your adapter.
|
|
useWirelessTools ? true,
|
|
wirelesstools, # for iwconfig
|
|
# To fall back to haveged if entropy is low.
|
|
# Defaulting to false because not having it does not break things.
|
|
# If it is really needed, warnings will be logged to journal.
|
|
useHaveged ? false,
|
|
haveged,
|
|
# You only need this if you wish to show WiFi QR codes in terminal
|
|
useQrencode ? true,
|
|
qrencode,
|
|
}:
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "linux-router";
|
|
version = "0.8.1";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "garywill";
|
|
repo = "linux-router";
|
|
tag = version;
|
|
hash = "sha256-tBrHuZKTf+7ABmE4FVYT9ny62CBa2A7va7OOFUsKJtM=";
|
|
};
|
|
|
|
nativeBuildInputs = [
|
|
makeWrapper
|
|
];
|
|
|
|
dontBuild = true;
|
|
|
|
installPhase =
|
|
let
|
|
binPath = lib.makeBinPath (
|
|
[
|
|
procps
|
|
iproute2
|
|
getopt
|
|
bash
|
|
dnsmasq
|
|
iptables
|
|
coreutils
|
|
which
|
|
flock
|
|
gnugrep
|
|
gnused
|
|
gawk
|
|
]
|
|
++ lib.optional useNetworkManager networkmanager
|
|
++ lib.optional useWifiDependencies hostapd
|
|
++ lib.optional useWifiDependencies iw
|
|
++ lib.optional (useWifiDependencies && useWirelessTools) wirelesstools
|
|
++ lib.optional (useWifiDependencies && useHaveged) haveged
|
|
++ lib.optional (useWifiDependencies && useQrencode) qrencode
|
|
);
|
|
in
|
|
''
|
|
mkdir -p $out/bin/ $out/.bin-wrapped
|
|
mv lnxrouter $out/.bin-wrapped/lnxrouter
|
|
makeWrapper $out/.bin-wrapped/lnxrouter $out/bin/lnxrouter --prefix PATH : ${binPath}
|
|
'';
|
|
|
|
meta = {
|
|
homepage = "https://github.com/garywill/linux-router";
|
|
description = "Set Linux as router / Wifi hotspot / proxy in one command";
|
|
longDescription = ''
|
|
Features:
|
|
|
|
- Create a NATed sub-network
|
|
- Provide Internet
|
|
- DHCP server and RA
|
|
- DNS server
|
|
- IPv6 (behind NATed LAN, like IPv4)
|
|
- Creating Wifi hotspot:
|
|
- Channel selecting
|
|
- Choose encryptions: WPA2/WPA, WPA2, WPA, No encryption
|
|
- Create AP on the same interface you are getting Internet (require same channel)
|
|
- Transparent proxy (redsocks)
|
|
- DNS proxy
|
|
- Compatible with NetworkManager (automatically set interface as unmanaged)
|
|
'';
|
|
changelog = "https://github.com/garywill/linux-router/releases/tag/${version}";
|
|
license = lib.licenses.lgpl21Only;
|
|
platforms = lib.platforms.linux;
|
|
mainProgram = "lnxrouter";
|
|
};
|
|
}
|