From 1e4a5aa09c1c8f43722c9c260f011398799a8e8f Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Wed, 6 Mar 2024 06:29:24 -0800 Subject: 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. --- packages/ipconverter/default.nix | 29 +++++++++++++++++++++++++++++ packages/ipconverter/ipconverter.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 packages/ipconverter/default.nix create mode 100755 packages/ipconverter/ipconverter.py (limited to 'packages/ipconverter') 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) -- cgit 1.4.1