l: add klem service

This commit is contained in:
lassulus 2020-07-04 06:15:53 +02:00
parent d5c59a8303
commit 0caacbdf42
2 changed files with 107 additions and 0 deletions

View File

@ -147,4 +147,36 @@ in {
krebs.xresources.enable = true;
lass.screenlock.enable = true;
lass.klem = {
kpaste.script = pkgs.writeDash "kpaste-wrapper" ''
${pkgs.kpaste}/bin/kpaste \
| ${pkgs.coreutils}/bin/tail -1 \
| ${pkgs.coreutils}/bin/tr -d '\r\n'
'';
go = {
target = "STRING";
script = "${pkgs.goify}/bin/goify";
};
"go.lassul.us" = {
target = "STRING";
script = pkgs.writeDash "go.lassul.us" ''
export GO_HOST='go.lassul.us'
${pkgs.goify}/bin/goify
'';
};
qrcode = {
target = "image";
script = pkgs.writeDash "zbar" ''
${pkgs.zbar}/bin/zbarimg -q -
'';
};
ocr = {
target = "image";
script = pkgs.writeDash "gocr" ''
${pkgs.netpbm}/bin/pngtopnm - \
| ${pkgs.gocr}/bin/gocr -
'';
};
};
}

75
lass/3modules/klem.nix Normal file
View File

@ -0,0 +1,75 @@
{ config, pkgs, ... }: with import <stockholm/lib>; let
cfg = config.lass.klem;
in {
options.lass.klem = mkOption {
default = {};
type = types.attrsOf (types.submodule ({ config, ...}: {
options = {
target = mkOption {
default = ".*";
description = ''
regex of valid targets
can be shown with xclip -selection clipboard -t TARGETS
the first hit is taken as target argument
'';
type = types.str;
};
script = mkOption {
description = ''
file to run if entry is selected
'';
type = types.path;
};
label = mkOption {
default = config._module.args.name;
description = ''
label to show in dmenu for this script
'';
type = types.str;
};
};
}));
};
config = let
klem = pkgs.writers.writeDashBin "klem" ''
set -x
labels=""
# match filetype against patterns
${concatMapStringsSep "\n" (script: ''
${pkgs.xclip}/bin/xclip -selection clipboard -target TARGETS -out \
| grep -q '${script.target}'
if [ $? -eq 0 ]; then
labels="$labels:${script.label}"
fi
'') (attrValues cfg)}
#remove empty line, feed into dmenu
script=$(echo "$labels" \
| ${pkgs.gnused}/bin/sed 's/^://;s/:/\n/g' \
| ${pkgs.dmenu}/bin/dmenu)
#run the chosen script
case $script in
${concatMapStringsSep "\n" (script: indent ''
${script.label})
target=$(${pkgs.xclip}/bin/xclip -selection clipboard -target TARGETS -out \
| ${pkgs.gnugrep}/bin/grep '${script.target}' \
| ${pkgs.gnugrep}/bin/grep -v TARGETS \
| ${pkgs.coreutils}/bin/head -1)
${pkgs.xclip}/bin/xclip -selection clipboard -target "$target" -out \
| ${script.script} \
| ${pkgs.xclip}/bin/xclip -selection clipboard -in
;;
'') (attrValues cfg)}
esac
'';
in mkIf (cfg != {}) {
environment.systemPackages = [ klem ];
nixpkgs.overlays = [
(self: super: {
klem = klem;
})
];
};
}