diff --git a/flake.nix b/flake.nix index 1a3f68d..6310432 100644 --- a/flake.nix +++ b/flake.nix @@ -281,7 +281,11 @@ }; }; in { - packages = flake-utils.lib.flattenTree { + packages = let + writePython311Script = + pkgs.writers.makePythonWriter pkgs.python311 pkgs.python311Packages + pkgs.buildPackages.python311Packages; + in flake-utils.lib.flattenTree { discordWayland = pkgs.callPackage ./packages/discord/default.nix rec { pname = "discord-electron"; binaryName = "DiscordCanary"; @@ -297,6 +301,19 @@ swayimg = pkgs.callPackage ./packages/swayimg/default.nix { }; hyprland-autoname-workspaces = pkgs.callPackage ./packages/workspace-renamer/default.nix { }; + shortcuts = let + script = writePython311Script "shortcuts" { } + (builtins.readFile ./scripts/shortcuts/shortcuts.py); + in pkgs.stdenv.mkDerivation { + name = "shortcuts"; + src = ./shortcuts; + installPhase = '' + mkdir -p $out/bin + ln -s ${script} $out/bin/shortcuts + mkdir -p $out/shortcuts + cp -r * $out/shortcuts + ''; + }; }; }); } diff --git a/scripts/shortcuts/shortcuts.py b/scripts/shortcuts/shortcuts.py new file mode 100755 index 0000000..88912d6 --- /dev/null +++ b/scripts/shortcuts/shortcuts.py @@ -0,0 +1,68 @@ +# https://blog.stigok.com/2019/11/05/packing-python-script-binary-nicely-in-nixos.html + +import argparse +import tomllib +import os +import subprocess +import sys +from pathlib import Path + + +def parse_directory(directory): + dictionary = {} + for entry in os.listdir(directory): + path = directory / entry + if path.is_dir(): + dictionary[entry] = parse_directory(path) + else: + dictionary[entry] = path + return dictionary + + +def merge(dict1, dict2): + for key in iter(dict2): + if key in dict1: + if isinstance(dict1[key], dict) and isinstance(dict2[key], dict): + merge(dict1[key], dict2[key]) + else: + dict1[key] = dict2[key] + else: + dict1[key] = dict2[key] + + +parser = argparse.ArgumentParser(prog='shortcuts.py', + description="shortcut dispatcher") +parser.add_argument('config') + +args = parser.parse_args() + +data = "" +with open(args.config, 'rb') as f: + data = tomllib.load(f) + +dicts = [] +for dir in data["directories"]: + path = Path(dir).expanduser() + if path.exists(): + dicts.append(parse_directory(path)) + +res = {} +for d in dicts: + merge(res, d) + +while isinstance(res, dict): + items = '\n'.join(sorted(res)) + proc = subprocess.Popen(data["picker_command"], + shell=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE) + proc.stdin.write(str.encode(items)) + outs, errs = proc.communicate() + outs = outs.decode().strip() + res = res[outs] + +proc = subprocess.Popen(res, + stdin=sys.stdin.buffer, + stdout=sys.stdout.buffer, + stderr=sys.stderr.buffer) +proc.wait() diff --git a/shortcuts/vmware/1440p b/shortcuts/vmware/1440p new file mode 100755 index 0000000..e209db8 --- /dev/null +++ b/shortcuts/vmware/1440p @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +sleep 3 & +echo "Hello" +wait