1
0
mirror of https://github.com/kmein/niveum synced 2026-03-16 18:21:07 +01:00
Files
niveum/packages/scripts/default.nix

409 lines
12 KiB
Nix
Raw Normal View History

2020-04-10 16:18:20 +02:00
{ pkgs, lib, ... }:
2020-04-09 16:56:47 +02:00
let
2021-12-01 17:38:47 +01:00
nur = import <niveum/submodules/nur-packages> {};
2020-06-10 17:37:25 +02:00
kpaste = pkgs.callPackage <stockholm/krebs/5pkgs/simple/kpaste> { };
wrapScript = { packages ? [ ], name, script }:
pkgs.writers.writeDashBin name ''
PATH=$PATH:${
lib.makeBinPath (packages ++ [ pkgs.coreutils pkgs.findutils ])
}
${script} "$@"
'';
2020-04-15 20:39:37 +02:00
voidrice = pkgs.fetchFromGitHub {
owner = "LukeSmithxyz";
repo = "voidrice";
2020-08-28 15:21:34 +02:00
rev = "0582b495937117d899ce8ef715a89c6cc25a36cf";
sha256 = "0c4hkny4zkknlimc9yi9ljss2cws4zn8lzd8ip9b8mfsm094dlfl";
2020-04-15 20:39:37 +02:00
};
2020-07-11 20:43:19 +02:00
in rec {
2021-12-10 19:42:52 +01:00
auc = pkgs.callPackage ./auc.nix {};
2020-04-15 00:10:30 +02:00
instaget = wrapScript {
packages = [ pkgs.jq pkgs.curl pkgs.gnugrep ];
script = ./instaget.sh;
2020-04-09 16:56:47 +02:00
name = "instaget";
};
2021-02-14 11:21:30 +01:00
infschmv = pkgs.writers.writeDashBin "InfSchMV" ''
${pkgs.curl}/bin/curl -sSL https://www.berlin.de/corona/massnahmen/verordnung/ \
| ${pkgs.pup}/bin/pup .textile \
| ${pkgs.pandoc}/bin/pandoc -f html -t man -s \
| ${pkgs.man}/bin/man -l -
'';
trans =
let
script = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/soimort/translate-shell/gh-pages/trans.awk";
sha256 = "178r8d27bry1mzd1g8x2svp4w469hwv7nnxnmnsinx974skjx0jb";
};
in pkgs.writers.writeDashBin "trans" ''
${pkgs.gawk}/bin/gawk -f ${script} -- "$@"
'';
dns-sledgehammer = pkgs.writers.writeDashBin "dns-sledgehammer" ''
${pkgs.coreutils}/bin/printf '%s\n' 'nameserver 1.1.1.1' 'options edns0' > /etc/resolv.conf
'';
much-scripts = let
much-current-query = wrapScript {
packages = [ pkgs.curl ];
name = "much-current-query";
script = ./much-current-query.sh;
};
mail-send = wrapScript {
packages = [ pkgs.notmuch pkgs.msmtp pkgs.jq ];
name = "mail-send";
script = ./mail-send.sh;
};
mail-reply = wrapScript {
packages = [ much-current-query pkgs.notmuch pkgs.gnused pkgs.jq ];
name = "mail-reply";
script = ./mail-reply.sh;
};
mail-kill = wrapScript {
name = "mail-kill";
script = ./mail-kill.sh;
packages = [ pkgs.notmuch ];
};
in pkgs.symlinkJoin {
name = "much-scripts";
paths = [ mail-send much-current-query mail-reply mail-kill ];
};
showkeys-toggle = pkgs.writers.writeDashBin "showkeys-toggle" ''
if ${pkgs.procps}/bin/pgrep screenkey; then
exec ${pkgs.procps}/bin/pkill screenkey
else
exec ${pkgs.screenkey}/bin/screenkey
fi
'';
2021-09-23 21:25:50 +02:00
qrpaste = pkgs.writers.writeDashBin "qrpaste" ''
file="$(${pkgs.mktemp}/bin/mktemp qrpasteXXX.png --tmpdir)"
${pkgs.qrencode}/bin/qrencode "$(${pkgs.xclip}/bin/xclip -selection clipboard -out)" -o "$file"
${pkgs.sxiv}/bin/sxiv "$file" ; rm "$file"
'';
2020-10-28 20:27:05 +01:00
interdimensional-cable =
let nimaid-github-io = pkgs.fetchFromGitHub {
owner = "nimaid";
repo = "nimaid.github.io";
rev = "9cb4ede215be6bb01bd2df1ef3e9689cc8c4eb9e";
sha256 = "1g47cj5an7xgmhpc09m7qim5j9rspqxvnzfy90cnlvz4pg8hil96";
};
in pkgs.writeShellScriptBin "interdimensional-cable" ''
2020-10-28 20:27:05 +01:00
export PATH=${lib.makeBinPath [ pkgs.mpv pkgs.jq pkgs.gnused ]}
mpv --shuffle --playlist=<(jq -r '.videos[]' ${nimaid-github-io}/tv/interdimensional_database.json | sed 's#^#https://youtu.be/#')
'';
2020-07-11 20:43:19 +02:00
tag = wrapScript {
2021-12-01 17:38:47 +01:00
packages = [ pkgs.vorbisTools pkgs.python3Packages.eyeD3 nur.opustags ];
2020-07-11 20:43:19 +02:00
script = "${voidrice}/.local/bin/tag";
name = "tag";
};
2021-04-07 09:45:36 +02:00
meteo = wrapScript {
packages = [ pkgs.jq pkgs.curl pkgs.xdotool pkgs.sxiv pkgs.gnused ];
script = ./meteo.sh;
name = "meteo";
};
2021-11-12 20:06:02 +01:00
kirciuoklis = wrapScript {
packages = [ pkgs.curl pkgs.jq ];
script = ./kirciuoklis.sh;
name = "kirciuoklis";
};
2020-07-11 20:43:19 +02:00
booksplit = wrapScript {
2021-04-26 11:20:34 +02:00
packages = [ pkgs.ffmpeg tag pkgs.glibc.bin ];
2020-07-11 20:43:19 +02:00
script = "${voidrice}/.local/bin/booksplit";
name = "booksplit";
};
2020-04-15 00:10:30 +02:00
n = wrapScript {
script = ./n.sh;
2020-04-09 16:56:47 +02:00
name = "n";
};
2020-04-15 00:10:30 +02:00
dirmir = wrapScript {
2020-04-09 16:56:47 +02:00
name = "dirmir";
2020-04-15 00:10:30 +02:00
script = ./dirmir.sh;
2020-04-09 16:56:47 +02:00
};
2021-02-04 18:40:11 +01:00
liddel-scott-jones = wrapScript {
name = "lsj";
script = ./liddel-scott-jones.sh;
packages = [ pkgs.curl pkgs.pup betacode pkgs.gnused pkgs.pandoc pkgs.man ];
};
2021-11-07 13:12:11 +01:00
sanskrit-dictionary = pkgs.writers.writeDashBin "sa" ''
set -efu
usage() {
echo "usage: [OUTPUT=deva|roman] $0 mw|mwe|boet|bopp|apte|boro TERM"
2021-11-07 13:12:11 +01:00
exit 1
}
[ $# -eq 2 ] || usage
case $1 in
mw) id=MWScan;;
mwe) id=MWEScan;;
bopp) id=BOPScan;;
boet) id=PWGScan;;
apte) id=AEScan;;
boro) id=BORScan;;
*) usage;;
esac
shift
input="$*"
${pkgs.curl}/bin/curl -sSL "https://www.sanskrit-lexicon.uni-koeln.de/scans/$id/2020/web/webtc/getword.php?key=$input&filter=''${OUTPUT-roman}&accent=yes&transLit=hk" \
2021-11-07 13:12:11 +01:00
| ${pkgs.pandoc}/bin/pandoc --standalone --variable=title:"$input" --from=html --to=man \
| ${pkgs.gnused}/bin/sed 's/\s\+\([:.,;]\)/\1/g;s/\s\+/ /g' \
| ${pkgs.man}/bin/man --local-file --pager="${pkgs.bat}/bin/bat -p" -
'';
2021-02-04 18:40:11 +01:00
playlist = import ./pls.nix { inherit pkgs; };
mpv-tv = import ./mpv-tv.nix { inherit pkgs lib; };
2020-04-15 00:10:30 +02:00
favicon = wrapScript {
packages = [ pkgs.imagemagick ];
2020-04-09 16:56:47 +02:00
name = "favicon";
2020-04-15 00:10:30 +02:00
script = ./favicon.sh;
2020-04-09 16:56:47 +02:00
};
2021-11-15 18:43:34 +01:00
closest = pkgs.writers.writeDashBin "closest" ''
${pkgs.writers.writeHaskellBin "closest" {
libraries = with pkgs.haskellPackages; [ parallel optparse-applicative edit-distance ];
ghcArgs = ["-O3" "-threaded" ];
} (builtins.readFile ./distance.hs)}/bin/closest +RTS -N4 -RTS --dictionary ${pkgs.fetchurl {
url = "https://gist.github.com/MarvinJWendt/2f4f4154b8ae218600eb091a5706b5f4/raw/36b70dd6be330aa61cd4d4cdfda6234dcb0b8784/wordlist-german.txt";
sha256 = "0vr4lmlckgvj4s8sk502sknq9pf3297rvasj5sqqm05zzbdgpppj";
}} "$@"
'';
2021-11-19 08:09:08 +01:00
horoscope = pkgs.callPackage ./horoscope {};
2020-04-15 00:10:30 +02:00
genius = wrapScript {
packages = [ pkgs.curl pkgs.gnused pkgs.pandoc ];
2020-04-09 16:56:47 +02:00
name = "genius";
2020-04-15 00:10:30 +02:00
script = ./genius.sh;
2020-04-09 16:56:47 +02:00
};
2020-04-15 00:10:30 +02:00
literature-quote = wrapScript {
packages = [ pkgs.xsv pkgs.curl pkgs.gnused ];
2020-04-09 16:56:47 +02:00
name = "literature-quote";
2020-04-15 00:10:30 +02:00
script = ./literature-quote.sh;
2020-04-09 16:56:47 +02:00
};
2020-04-15 00:10:30 +02:00
man-pdf = wrapScript {
packages = [ pkgs.man pkgs.ghostscript ];
2020-04-09 16:56:47 +02:00
name = "man-pdf";
2020-04-15 00:10:30 +02:00
script = ./man-pdf.sh;
2020-04-09 16:56:47 +02:00
};
2020-04-15 00:10:30 +02:00
odyssey = wrapScript {
packages = [ pkgs.curl pkgs.xmlstarlet ];
2020-04-09 16:56:47 +02:00
name = "odyssey";
2020-04-15 00:10:30 +02:00
script = ./odyssey.sh;
2020-04-09 16:56:47 +02:00
};
2020-04-15 00:10:30 +02:00
tolino-screensaver = wrapScript {
packages = [ pkgs.imagemagick ];
2020-04-09 16:56:47 +02:00
name = "tolino-screensaver";
2020-04-15 00:10:30 +02:00
script = ./tolino-screensaver.sh;
2020-04-09 16:56:47 +02:00
};
2020-04-15 00:10:30 +02:00
wttr = wrapScript {
packages = [ pkgs.curl ];
2020-04-09 16:56:47 +02:00
name = "wttr";
2020-04-15 00:10:30 +02:00
script = ./wttr.sh;
2020-04-09 16:56:47 +02:00
};
2020-04-15 00:10:30 +02:00
vg = wrapScript {
packages = [ pkgs.ripgrep pkgs.fzf pkgs.gawk ];
2020-04-09 16:56:47 +02:00
name = "vg";
2020-04-15 00:10:30 +02:00
script = ./vg.sh;
2020-04-09 16:56:47 +02:00
};
2020-09-09 09:35:50 +02:00
dmenurandr = wrapScript {
packages = [ pkgs.dmenu pkgs.gnugrep pkgs.gnused pkgs.xorg.xrandr pkgs.gawk pkgs.libnotify pkgs.arandr ];
name = "dmenurandr";
script = ./dmenurandr.sh;
};
2020-09-14 18:25:51 +02:00
dmenubluetooth = wrapScript {
packages = [ pkgs.bluez5 pkgs.dmenu pkgs.libnotify ];
name = "dmenubluetooth";
script = ./dmenubluetooth.sh;
};
2020-04-15 00:10:30 +02:00
fkill = wrapScript {
packages = [ pkgs.procps pkgs.gawk pkgs.gnused pkgs.fzf pkgs.bash ];
script = ./fkill.sh;
2020-04-09 16:56:47 +02:00
name = "fkill";
};
2020-04-15 00:10:30 +02:00
nix-git = wrapScript {
packages = [ pkgs.nix-prefetch-git pkgs.jq ];
script = ./nix-git.sh;
2020-04-09 18:15:41 +02:00
name = "nix-git";
};
2020-04-15 20:39:37 +02:00
linkhandler = wrapScript {
2020-06-10 17:37:25 +02:00
packages =
[ pkgs.utillinux pkgs.mpv pkgs.curl pkgs.gnused pkgs.sxiv pkgs.ts ];
2020-04-15 20:39:37 +02:00
script = "${voidrice}/.local/bin/linkhandler";
name = "linkhandler";
};
mansplain = wrapScript {
packages = [ pkgs.man pkgs.zathura pkgs.dmenu pkgs.gnused ];
script = ./mansplain.sh;
name = "mansplain";
};
2020-04-15 00:10:30 +02:00
notetags = wrapScript {
script = ./notetags.sh;
2020-04-09 19:30:35 +02:00
name = "notetags";
};
2020-04-15 00:10:30 +02:00
fzfmenu = wrapScript {
script = ./fzfmenu.sh;
2020-04-10 14:53:16 +02:00
name = "fzfmenu";
packages = [ pkgs.st pkgs.fzf pkgs.dash pkgs.bash ];
2020-04-10 14:53:16 +02:00
};
swallow = wrapScript {
script = ./swallow.sh;
name = "swallow";
packages = [ pkgs.xdo ];
};
ipa = wrapScript {
script = ./ipa.py;
name = "ipa";
packages = [ pkgs.python3 ];
};
default-gateway = pkgs.writers.writeDashBin "default-gateway" ''
${pkgs.iproute}/bin/ip -json route | ${pkgs.jq}/bin/jq --raw-output '.[0].gateway'
'';
betacode = pkgs.writers.writePython3Bin "betacode" {
2021-12-01 17:38:47 +01:00
libraries = [ nur.python3Packages.betacode ];
} ''
import betacode.conv
import sys
sys.stdout.write(betacode.conv.beta_to_uni(sys.stdin.read()))
'';
2021-06-01 22:41:59 +02:00
devanagari = pkgs.callPackage ../devanagari {};
2020-12-16 22:25:04 +01:00
2020-07-11 20:43:19 +02:00
manual-sort = pkgs.writers.writeHaskellBin "manual-sort" {} ''
{-# LANGUAGE LambdaCase #-}
import Data.Char (toLower)
import System.Environment (getArgs)
import System.IO (BufferMode(NoBuffering), hSetBuffering, stdout)
insertionSortM :: Monad f => (a -> a -> f Ordering) -> [a] -> f [a]
insertionSortM cmp = foldr ((=<<) . insertByM cmp) (pure [])
where
insertByM cmp x = \case
[] -> pure [x]
yys@(y : ys) -> cmp x y >>= \case
GT -> (y :) <$> insertByM cmp x ys
_ -> pure (x : yys)
ask :: Show a => a -> a -> IO Ordering
ask a b = do
putStr (show a ++ " > " ++ show b ++ "? (y/n) ")
map toLower <$> getLine >>= \case
'y' : _ -> return GT
_ -> return LT
main :: IO ()
main = do
hSetBuffering stdout NoBuffering
argv <- getArgs
sorted <- insertionSortM ask argv
mapM_ (\(place, thing) -> putStrLn (show place ++ ". " ++ show thing)) $ zip [1 ..] (reverse sorted)
'';
2020-05-24 10:08:13 +02:00
scrot-dmenu = wrapScript {
script = ./scrot-dmenu.sh;
name = "dmenu-scrot";
packages = [ pkgs.xclip pkgs.scrot kpaste pkgs.libnotify pkgs.dmenu ];
};
2021-03-04 18:54:48 +01:00
unicodmenu = pkgs.callPackage ./unicodmenu.nix { };
2021-04-01 11:00:28 +02:00
mpv-radio =
let
streams = import <niveum/lib/streams.nix> {
di-fm-key = lib.strings.fileContents <secrets/di.fm/key>;
};
streams-tsv = pkgs.writeText "streams.tsv" (lib.concatMapStringsSep "\n" ({ desc ? "", stream, station, ... }: "${station}\t${desc}\t${stream}") streams);
in pkgs.writers.writeDashBin "mpv-radio" ''
2021-05-21 08:25:19 +02:00
exec ${pkgs.mpv}/bin/mpv --force-window=yes "$(${pkgs.dmenu}/bin/dmenu -i -l 5 < ${streams-tsv} | ${pkgs.coreutils}/bin/cut -f3)"
2021-04-01 11:00:28 +02:00
'';
2021-03-11 10:26:19 +01:00
rfc = wrapScript {
script = ./rfc.sh;
name = "rfc";
packages = [ pkgs.curl pkgs.pup pkgs.gnused pkgs.gawk pkgs.gnugrep pkgs.fzf ];
};
2021-03-04 18:54:48 +01:00
2021-09-16 16:06:10 +02:00
new-mac = wrapScript {
script = ./new-mac.sh;
name = "new-mac";
packages = [ pkgs.gnused pkgs.openssl pkgs.jq pkgs.iproute2 ];
};
2020-06-10 17:37:25 +02:00
bvg = pkgs.callPackage ./bvg.nix { };
nav = pkgs.callPackage ./nav.nix { };
k-lock = pkgs.callPackage ./k-lock.nix { };
menu-calc = pkgs.writers.writeDashBin "=" ''
# https://github.com/onespaceman/menu-calc
answer=$(echo "$@" | ${pkgs.pari}/bin/gp -q | ${pkgs.gnused}/bin/sed '/\./ s/\.\{0,1\}0\{1,\}$//')
action=$(printf "copy\nclear" | ${pkgs.dmenu}/bin/dmenu -p "= $answer")
case $action in
"clear") $0 ;;
"copy") printf %s "$answer" | ${pkgs.xclip}/bin/xclip -selection clipboard;;
"") ;;
*) $0 "$answer $action" ;;
esac
'';
2021-05-13 21:34:16 +02:00
# ref https://tex.stackexchange.com/a/502542
scanned = pkgs.writers.writeDashBin "scanned" ''
[ $# -eq 1 -a -f "$1" -a -r "$1" ] || exit 1
${pkgs.imagemagick}/bin/convert -density 150 "$1" -colorspace gray -linear-stretch 3.5%x10% -blur 0x0.5 -attenuate 0.25 +noise Gaussian "scanned-$1"
'';
nix-index-update = pkgs.writers.writeDashBin "nix-index-update" ''
mkdir -p $HOME/.cache/nix-index
tag=$(git -c 'versionsort.suffix=-' \
ls-remote \
--exit-code \
--refs \
--tags \
--sort='v:refname' \
https://github.com/Mic92/nix-index-database \
| awk 'END {match($2, /([^/]+)$/, m); print m[0]}')
curl -L "https://github.com/Mic92/nix-index-database/releases/download/$tag/files" -o $XDG_RUNTIME_DIR/files-$tag
mv $XDG_RUNTIME_DIR/files-$tag $HOME/.cache/nix-index/files
'';
2021-12-01 17:38:47 +01:00
} // nur