l: add klem service
This commit is contained in:
parent
d5c59a8303
commit
0caacbdf42
@ -147,4 +147,36 @@ in {
|
|||||||
|
|
||||||
krebs.xresources.enable = true;
|
krebs.xresources.enable = true;
|
||||||
lass.screenlock.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