summaryrefslogtreecommitdiffstats
path: root/lass/5pkgs
diff options
context:
space:
mode:
Diffstat (limited to 'lass/5pkgs')
-rw-r--r--lass/5pkgs/autowifi/autowifi.py228
-rw-r--r--lass/5pkgs/autowifi/default.nix1
-rw-r--r--lass/5pkgs/bank/default.nix14
-rw-r--r--lass/5pkgs/custom/xmonad-lass/default.nix15
-rw-r--r--lass/5pkgs/default.nix16
-rw-r--r--lass/5pkgs/otpmenu/default.nix10
6 files changed, 262 insertions, 22 deletions
diff --git a/lass/5pkgs/autowifi/autowifi.py b/lass/5pkgs/autowifi/autowifi.py
new file mode 100644
index 000000000..fa3d007e7
--- /dev/null
+++ b/lass/5pkgs/autowifi/autowifi.py
@@ -0,0 +1,228 @@
+import subprocess
+import time
+import urllib.request
+import logging
+import argparse
+import socket
+import struct
+import signal
+import os
+
+wifiDB = ''
+logger = logging.getLogger()
+got_signal = False
+
+
+def signal_handler(signum, frame):
+ global got_signal
+ got_signal = True
+
+
+def get_default_gateway() -> str:
+ """Read the default gateway directly from /proc."""
+ with open("/proc/net/route") as fh:
+ for line in fh:
+ fields = line.strip().split()
+ if fields[1] != '00000000' or not int(fields[3], 16) & 2:
+ continue
+
+ return socket.inet_ntoa(struct.pack("<L", int(fields[2], 16)))
+
+
+def connect(ssid, psk=None):
+ subprocess.run(
+ ["nmcli", "connection", "delete", "autowifi"],
+ stdout=subprocess.PIPE,
+ )
+ logging.info('connecting to %s', ssid)
+ if psk is None:
+ subprocess.run(
+ [
+ "nmcli",
+ "device",
+ "wifi",
+ "connect",
+ ssid,
+ "name",
+ "autowifi",
+ ],
+ stdout=subprocess.PIPE,
+ )
+ else:
+ subprocess.run(
+ [
+ "nmcli",
+ "device",
+ "wifi",
+ "connect",
+ ssid,
+ "name",
+ "autowifi",
+ "password",
+ psk,
+ ],
+ stdout=subprocess.PIPE,
+ )
+ time.sleep(5)
+
+
+def scan():
+ logging.debug('scanning wifis')
+ wifis_raw = subprocess.check_output([
+ "nmcli",
+ "-t",
+ "device",
+ "wifi",
+ "list",
+ "--rescan",
+ "yes",
+ ])
+ wifis_list = wifis_raw.split(b'\n')
+ logging.debug('scanning wifis finished')
+ wifis = []
+ for line in wifis_list:
+ logging.debug(line)
+ ls = line.split(b':')
+ if len(ls) == 8:
+ wifis.append({
+ "ssid": ls[1],
+ "signal": int(ls[5]),
+ "crypto": ls[7]
+ })
+ return wifis
+
+
+def get_known_wifis():
+ wifis_lines = []
+ with open(wifiDB) as f:
+ wifis_lines = f.read().splitlines()
+ wifis = []
+ for line in wifis_lines:
+ ls = line.split('/')
+ wifis.append({"ssid": ls[0].encode(), "psk": ls[1].encode()})
+ return wifis
+
+
+def check_network():
+ logging.debug('checking network')
+
+ global got_signal
+ if got_signal:
+ logging.info('got disconnect signal')
+ got_signal = False
+ return False
+ else:
+ gateway = get_default_gateway()
+ if gateway:
+ response = subprocess.run(
+ [
+ 'ping',
+ '-q',
+ '-c',
+ '1',
+ gateway,
+ ],
+ stdout=subprocess.PIPE,
+ )
+ if response.returncode == 0:
+ logging.debug('host %s is up', gateway)
+ return True
+ else:
+ logging.debug('host %s is down', gateway)
+ return False
+ else:
+ logging.debug('no gateway')
+ return False
+
+
+def check_internet():
+ logging.debug('checking internet')
+
+ try:
+ with open('./dummy_internet') as f:
+ dummy_content = f.read()
+ if dummy_content == 'xxx\n':
+ return True
+ beacon = urllib.request.urlopen('http://krebsco.de/secret')
+ except Exception as e: # noqa
+ logging.debug(e)
+ logging.info('no internet exc')
+ return False
+ if beacon.read() == b'1337\n':
+ return True
+ logging.info('no internet oh')
+ return False
+
+
+def is_wifi_open(wifi):
+ if wifi['crypto'] == b'':
+ return True
+ else:
+ return False
+
+
+def is_wifi_seen(wifi, seen_wifis):
+ for seen_wifi in seen_wifis:
+ if seen_wifi["ssid"] == wifi["ssid"]:
+ return True
+ return False
+
+
+def main():
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument(
+ '-c', '--config',
+ dest='config',
+ help='wifi config file to use',
+ default='/etc/wifis',
+ )
+
+ parser.add_argument(
+ '-l', '--loglevel',
+ dest='loglevel',
+ help='loglevel to use',
+ default=logging.INFO,
+ )
+
+ parser.add_argument(
+ '-p', '--pidfile',
+ dest='pidfile',
+ help='file to write the pid to',
+ default=None,
+ )
+
+ args = parser.parse_args()
+
+ global wifiDB
+ wifiDB = args.config
+ logger.setLevel(args.loglevel)
+
+ signal.signal(signal.SIGUSR1, signal_handler)
+
+ if args.pidfile:
+ with open(args.pidfile, 'w+') as f:
+ f.write(str(os.getpid()))
+
+ while True:
+ if not check_network():
+ wifis = scan()
+ known_wifis = get_known_wifis()
+ known_seen_wifis = [
+ wifi for wifi in known_wifis if is_wifi_seen(wifi, wifis)
+ ]
+ for wifi in known_seen_wifis:
+ connect(wifi['ssid'], wifi['psk'])
+ if check_network():
+ break
+ open_wifis = filter(is_wifi_open, wifis)
+ for wifi in open_wifis:
+ connect(wifi['ssid'])
+
+ if check_network():
+ break
+ time.sleep(10)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/lass/5pkgs/autowifi/default.nix b/lass/5pkgs/autowifi/default.nix
new file mode 100644
index 000000000..d565a6bb6
--- /dev/null
+++ b/lass/5pkgs/autowifi/default.nix
@@ -0,0 +1 @@
+pkgs.writers.writePython3Bin "autowifi" {} ./autowifi.py
diff --git a/lass/5pkgs/bank/default.nix b/lass/5pkgs/bank/default.nix
new file mode 100644
index 000000000..9f3a44d79
--- /dev/null
+++ b/lass/5pkgs/bank/default.nix
@@ -0,0 +1,14 @@
+{ writeDashBin, coreutils, pass, hledger, diffutils }:
+
+writeDashBin "bank" ''
+ tmp=$(mktemp)
+ ${pass}/bin/pass show hledger > $tmp
+ ${hledger}/bin/hledger --file=$tmp "$@"
+ ${pass}/bin/pass show hledger | if ${diffutils}/bin/diff $tmp -; then
+ exit 0
+ else
+ ${coreutils}/bin/cat $tmp | ${pass}/bin/pass insert -m hledger
+ fi
+ ${coreutils}/bin/rm $tmp
+''
+
diff --git a/lass/5pkgs/custom/xmonad-lass/default.nix b/lass/5pkgs/custom/xmonad-lass/default.nix
index 9d6f8e00c..c0aef513f 100644
--- a/lass/5pkgs/custom/xmonad-lass/default.nix
+++ b/lass/5pkgs/custom/xmonad-lass/default.nix
@@ -109,6 +109,7 @@ myKeyMap =
[ ("M4-<F11>", spawn "${config.lass.screenlock.command}")
, ("M4-C-p", spawn "${pkgs.scrot}/bin/scrot ~/public_html/scrot.png")
, ("M4-p", spawn "${pkgs.pass}/bin/passmenu --type")
+ , ("M4-S-p", spawn "${pkgs.otpmenu}/bin/otpmenu")
, ("M4-o", spawn "${pkgs.brain}/bin/brainmenu --type")
, ("M4-i", spawn "${pkgs.dpass}/bin/dpassmenu --type")
, ("M4-z", spawn "${pkgs.emot-menu}/bin/emoticons")
@@ -116,8 +117,8 @@ myKeyMap =
, ("<XF86AudioMute>", spawn "${pkgs.pulseaudioLight.out}/bin/pactl -- set-sink-mute @DEFAULT_SINK@ toggle")
, ("<XF86AudioRaiseVolume>", spawn "${pkgs.pulseaudioLight.out}/bin/pactl -- set-sink-volume @DEFAULT_SINK@ +4%")
, ("<XF86AudioLowerVolume>", spawn "${pkgs.pulseaudioLight.out}/bin/pactl -- set-sink-volume @DEFAULT_SINK@ -4%")
- , ("<XF86MonBrightnessDown>", spawn "${pkgs.xorg.xbacklight}/bin/xbacklight -time 0 -dec 1%")
- , ("<XF86MonBrightnessUp>", spawn "${pkgs.xorg.xbacklight}/bin/xbacklight -time 0 -inc 1")
+ , ("<XF86MonBrightnessDown>", spawn "${pkgs.acpilight}/bin/xbacklight -time 0 -dec 1")
+ , ("<XF86MonBrightnessUp>", spawn "${pkgs.acpilight}/bin/xbacklight -time 0 -inc 1")
, ("<XF86Launch1>", gridselectWorkspace gridConfig W.view)
, ("M4-C-k", spawn "${pkgs.xorg.xkill}/bin/xkill")
@@ -158,15 +159,15 @@ myKeyMap =
${pkgs.xclip}/bin/xclip -o | ${pkgs.xdotool}/bin/xdotool type -f -
''}")
- , ("M4-<F5>", spawn "${pkgs.xorg.xbacklight}/bin/xbacklight -set 1")
- , ("M4-<F6>", spawn "${pkgs.xorg.xbacklight}/bin/xbacklight -set 10")
- , ("M4-<F7>", spawn "${pkgs.xorg.xbacklight}/bin/xbacklight -set 33")
- , ("M4-<F8>", spawn "${pkgs.xorg.xbacklight}/bin/xbacklight -set 100")
+ , ("M4-<F5>", spawn "${pkgs.acpilight}/bin/xbacklight -set 1")
+ , ("M4-<F6>", spawn "${pkgs.acpilight}/bin/xbacklight -set 10")
+ , ("M4-<F7>", spawn "${pkgs.acpilight}/bin/xbacklight -set 33")
+ , ("M4-<F8>", spawn "${pkgs.acpilight}/bin/xbacklight -set 100")
, ("M4-<F9>", spawn "${pkgs.redshift}/bin/redshift -O 4000 -g 0.9:0.8:0.8")
, ("M4-<F10>", spawn "${pkgs.redshift}/bin/redshift -x")
- , ("<Pause>", spawn "${pkgs.xcalib}/bin/xcalib -invert -alter")
+ , ("M4-u", spawn "${pkgs.xcalib}/bin/xcalib -invert -alter")
, ("M4-s", spawn "${pkgs.knav}/bin/knav")
, ("<Print>", spawn "${pkgs.flameshot-once}/bin/flameshot-once")
diff --git a/lass/5pkgs/default.nix b/lass/5pkgs/default.nix
index fd6a555d4..e4208f1c1 100644
--- a/lass/5pkgs/default.nix
+++ b/lass/5pkgs/default.nix
@@ -19,20 +19,6 @@ self: super: let
mapAttrs (name: _: path + "/${name}")
(filterAttrs (_: eq "directory") (readDir path));
-in {
- bank = self.writeDashBin "bank" ''
- tmp=$(mktemp)
- ${self.pass}/bin/pass show hledger > $tmp
- ${self.hledger}/bin/hledger --file=$tmp "$@"
- ${self.pass}/bin/pass show hledger | if ${self.diffutils}/bin/diff $tmp -; then
- exit 0
- else
- ${self.coreutils}/bin/cat $tmp | ${self.pass}/bin/pass insert -m hledger
- fi
- ${self.coreutils}/bin/rm $tmp
- '';
-}
-
-// mapAttrs (_: flip callPackage {})
+in mapAttrs (_: flip callPackage {})
(filterAttrs (_: dir: pathExists (dir + "/default.nix"))
(subdirsOf ./.))
diff --git a/lass/5pkgs/otpmenu/default.nix b/lass/5pkgs/otpmenu/default.nix
new file mode 100644
index 000000000..fe6d5b94c
--- /dev/null
+++ b/lass/5pkgs/otpmenu/default.nix
@@ -0,0 +1,10 @@
+{ pkgs }:
+pkgs.writeDashBin "otpmenu" ''
+x=$(${pkgs.pass}/bin/pass git ls-files '*/otp.gpg' \
+ | ${pkgs.gnused}/bin/sed 's:/otp\.gpg$::' \
+ | ${pkgs.dmenu}/bin/dmenu
+)
+
+otp=$(${(pkgs.pass.withExtensions (ext: [ ext.pass-otp ]))}/bin/pass otp code "$x/otp")
+printf %s "$otp" | ${pkgs.xdotool}/bin/xdotool type -f -
+''