l: add klem service
This commit is contained in:
parent
d5c59a8303
commit
0caacbdf42
@ -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
75
lass/3modules/klem.nix
Normal 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;
|
||||
})
|
||||
];
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user