about summary refs log tree commit diff
path: root/packages/ipconverter
diff options
context:
space:
mode:
authorFranck Cuny <franck@fcuny.net>2024-03-06 06:29:24 -0800
committerFranck Cuny <franck@fcuny.net>2024-03-06 06:29:24 -0800
commit1e4a5aa09c1c8f43722c9c260f011398799a8e8f (patch)
treecd73e0fb8ba53bd21cee6ccf2dcc85639bbbb93f /packages/ipconverter
parentset correct git email in the profiles (diff)
downloadworld-1e4a5aa09c1c8f43722c9c260f011398799a8e8f.tar.gz
rename `tools` to `packages` to follow convention
The convention is to use `pkgs` or `packages` for overlays and
definition of custom packages. Since I'm already using `pkg` for go,
I prefer to use `packages` for my scripts.
Diffstat (limited to 'packages/ipconverter')
-rw-r--r--packages/ipconverter/default.nix29
-rwxr-xr-xpackages/ipconverter/ipconverter.py32
2 files changed, 61 insertions, 0 deletions
diff --git a/packages/ipconverter/default.nix b/packages/ipconverter/default.nix
new file mode 100644
index 0000000..4580396
--- /dev/null
+++ b/packages/ipconverter/default.nix
@@ -0,0 +1,29 @@
+{ lib, python3, stdenvNoCC, pkgs }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "ipconverter";
+  version = "0.1.0";
+
+  src = ./ipconverter.py;
+
+  buildInputs = with pkgs; [ python3 ];
+  propagatedBuildInputs = with pkgs; [ python3 ];
+
+  dontUnpack = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $src $out/bin/${pname}
+    chmod a+x $out/bin/${pname}
+    ln -s $out/bin/${pname} $out/bin/ip2int
+    ln -s $out/bin/${pname} $out/bin/int2ip
+  '';
+
+  meta = with lib; {
+    description = "Helper script to convert an IP address to an integer.";
+    license = with licenses; [ mit ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ fcuny ];
+  };
+}
diff --git a/packages/ipconverter/ipconverter.py b/packages/ipconverter/ipconverter.py
new file mode 100755
index 0000000..6b01d5d
--- /dev/null
+++ b/packages/ipconverter/ipconverter.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python3
+
+import argparse
+import ipaddress
+import sys
+
+argp = argparse.ArgumentParser()
+argp.add_argument("infile", nargs="?", type=argparse.FileType("r"), default=sys.stdin)
+args = argp.parse_args()
+
+# read the input, filter out commented lines and remove new line characters
+string_ips = [
+    ip
+    for line in args.infile.readlines()
+    if (ip := line.strip()) and not ip.startswith("#")
+]
+
+# convert entries to int if the string is a numeric value
+ips = list(map(lambda n: int(n) if n.isnumeric() else n, string_ips))
+
+
+def conv(n):
+    """helper function to convert based on the name of the program"""
+    return int(n) if argp.prog == "ip2int" else str(n)
+
+
+for ip in ips:
+    try:
+        r = conv(ipaddress.ip_address(ip))
+        print(f"{ip:15} → {r:15}")
+    except Exception as e:
+        print(f"error: {e}", file=sys.stderr)