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

chore(packages): reorganize scripts

This commit is contained in:
Kierán Meinhardt
2020-04-09 16:56:47 +02:00
parent 4abc0f4221
commit c6c621baf1
26 changed files with 230 additions and 189 deletions

View File

@@ -1,19 +1,95 @@
{ pkgs, ... }:
let
makeScript = { propagatedBuildInputs ? [], name, src }: pkgs.stdenv.mkDerivation {
inherit name src propagatedBuildInputs;
phases = [ "installPhase" ];
installPhase = ''
mkdir -p $out/bin
install $src $out/bin/${name}
'';
};
in
{
instaget = makeScript {
propagatedBuildInputs = [ pkgs.jq pkgs.curl pkgs.gnugrep ];
src = ./instaget.sh;
name = "instaget";
};
n = makeScript {
src = ./n.sh;
name = "n";
};
dirmir = makeScript {
name = "dirmir";
src = ./dirmir.sh;
};
favicon = makeScript {
propagatedBuildInputs = [ pkgs.imagemagick ];
name = "favicon";
src = ./favicon.sh;
};
genius = makeScript {
propagatedBuildInputs = [ pkgs.curl pkgs.gnused pkgs.pandoc ];
name = "genius";
src = ./genius.sh;
};
literature-quote = makeScript {
propagatedBuildInputs = [ pkgs.xsv pkgs.curl pkgs.gnused ];
name = "literature-quote";
src = ./literature-quote.sh;
};
man-pdf = makeScript {
propagatedBuildInputs = [ pkgs.man pkgs.ghostscript ];
name = "man-pdf";
src = ./man-pdf.sh;
};
odyssey = makeScript {
propagatedBuildInputs = [ pkgs.curl pkgs.xmlstarlet ];
name = "odyssey";
src = ./odyssey.sh;
};
tolino-screensaver = makeScript {
propagatedBuildInputs = [ pkgs.imagemagick ];
name = "tolino-screensaver";
src = ./tolino-screensaver.sh;
};
wttr = makeScript {
propagatedBuildInputs = [ pkgs.curl ];
name = "wttr";
src = ./wttr.sh;
};
vf = makeScript {
propagatedBuildInputs = [ pkgs.fd pkgs.fzf ];
name = "vf";
src = ./vf.sh;
};
vg = makeScript {
propagatedBuildInputs = [ pkgs.ripgrep pkgs.fzf pkgs.gawk ];
name = "vg";
src = ./vg.sh;
};
fkill = makeScript {
propagatedBuildInputs = [ pkgs.procps pkgs.gawk pkgs.gnused pkgs.fzf ];
src = ./fkill.sh;
name = "fkill";
};
bvg = pkgs.callPackage ./bvg.nix {};
daybook = pkgs.callPackage ./daybook.nix {};
depp = pkgs.callPackage ./depp.nix {};
dirmir = pkgs.callPackage ./dirmir.nix {};
favicon = pkgs.callPackage ./favicon.nix {};
genius = pkgs.callPackage ./genius.nix {};
instaget = pkgs.callPackage ./instaget.nix {};
literature-quote = pkgs.callPackage ./literature-quote.nix {};
man-pdf = pkgs.callPackage ./man-pdf.nix {};
n = pkgs.callPackage ./n.nix {};
nav = pkgs.callPackage ./nav.nix {};
odyssey = pkgs.callPackage ./odyssey.nix {};
tolino-screensaver = pkgs.callPackage ./tolino-screensaver.nix {};
wttr = pkgs.callPackage ./wttr.nix {};
slide =
let slide-package = pkgs.fetchFromGitHub {
owner = "kmein";
@@ -22,12 +98,4 @@
sha256 = "0skcp3va9v4hmxy5ramghpz53gnyxv10wsacgmc2jr0v1wrqlzbh";
};
in pkgs.callPackage slide-package {};
mnemosyne =
let mnemosyne-package = pkgs.fetchFromGitHub {
repo = "mnemosyne";
owner = "kmein";
rev = "6bfa13c88db176af80be90840ff03573d67d679f";
sha256 = "1rimv5c5q9602y501hbkgkfbimqnmdkcr5hp1434q06gcazhjhca";
};
in pkgs.haskellPackages.callPackage mnemosyne-package {};
}

View File

@@ -1,27 +0,0 @@
{ writers, coreutils, findutils }:
let name = "dirmir";
in writers.writeDashBin name ''
export PATH=$PATH:${coreutils}/bin:${findutils}/bin
SOURCE="$1"
TARGET="$2"
if [ ! -d "$SOURCE" ] || [ $# -ne 2 ]; then
echo >/dev/stderr "Usage: ${name} SOURCE TARGET"
exit 1
fi
if [ -e "$TARGET" ]; then
echo >/dev/stderr "$TARGET" already exists. Please use a different name.
exit 1
fi
for entry in $(find "$SOURCE"); do
if [ -d "$entry" ]; then
mkdir -p "$TARGET/$entry"
else
# create a file with the same permissions as $entry
install -m "$(stat -c %a "$entry")" /dev/null "$TARGET/$entry"
fi
done
''

22
packages/scripts/dirmir.sh Executable file
View File

@@ -0,0 +1,22 @@
#!/bin/sh
SOURCE="$1"
TARGET="$2"
if [ ! -d "$SOURCE" ] || [ $# -ne 2 ]; then
echo >/dev/stderr "Usage: dirmir SOURCE TARGET"
exit 1
fi
if [ -e "$TARGET" ]; then
echo >/dev/stderr "$TARGET" already exists. Please use a different name.
exit 1
fi
find "$SOURCE" | while read -r entry; do
if [ -d "$entry" ]; then
mkdir -p "$TARGET/$entry"
else
# create a file with the same permissions as $entry
install -m "$(stat -c %a "$entry")" /dev/null "$TARGET/$entry"
fi
done

View File

@@ -1,4 +0,0 @@
{ imagemagick, writers }:
writers.writeDashBin "favicon" ''
${imagemagick}/bin/convert "$1" -define icon:auto-resize=64,48,32,16 "''${2-favicon.ico}"
''

2
packages/scripts/favicon.sh Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/sh
convert "$1" -define icon:auto-resize=64,48,32,16 "${2-favicon.ico}"

12
packages/scripts/fkill.sh Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
if [ "$UID" != "0" ]; then
pid=$(ps -f -u "$UID" | sed 1d | fzf -m | awk '{print $2}')
else
pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}')
fi
if [ "x$pid" != "x" ]
then
echo "$pid" | xargs kill "-${1:-9}"
fi

View File

@@ -1,22 +0,0 @@
{ writeShellScriptBin, gnused, curl, pandoc }:
writeShellScriptBin "genius" ''
test $# -eq 2 || (
echo "usage: $0 <artist> <song>"
exit 1
)
normalize() {
tr -d -c '0-9A-Za-z ' | tr ' ' - | tr '[:upper:]' '[:lower:]'
}
ARTIST=$(echo "$1" | normalize | ${gnused}/bin/sed 's/./\U&/')
TITLE=$(echo "$2" | normalize)
GENIUS_URL="https://genius.com/$ARTIST-$TITLE-lyrics"
${curl}/bin/curl -s "$GENIUS_URL" \
| ${gnused}/bin/sed -ne '/class="lyrics"/,/<\/p>/p' \
| ${pandoc}/bin/pandoc -f html -s -t plain \
| ${gnused}/bin/sed 's/^_/\x1b[3m/g;s/_$/\x1b[0m/g;s/^\[/\n\x1b\[1m\[/g;s/\]$/\]\x1b[0m/g'
printf "\n(source: $GENIUS_URL)\n" >/dev/stderr
''

20
packages/scripts/genius.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/sh
test "$#" -eq 2 || (
echo "usage: $0 <artist> <song>"
exit 1
)
normalize() {
tr -d -c '0-9A-Za-z ' | tr ' ' - | tr '[:upper:]' '[:lower:]'
}
ARTIST=$(echo "$1" | normalize | sed 's/./\U&/')
TITLE=$(echo "$2" | normalize)
GENIUS_URL="https://genius.com/$ARTIST-$TITLE-lyrics"
curl -s "$GENIUS_URL" \
| sed -ne '/class="lyrics"/,/<\/p>/p' \
| pandoc -f html -s -t plain \
| sed 's/^_/\x1b[3m/g;s/_$/\x1b[0m/g;s/^\[/\n\x1b\[1m\[/g;s/\]$/\]\x1b[0m/g'
printf "\n%s\n" "$GENIUS_URL" >/dev/stderr

View File

@@ -1,13 +1,21 @@
{ writeShellScriptBin, wget, curl, jq }:
writeShellScriptBin "instaget" ''
for url in "$@"; do
${curl}/bin/curl -s "$url" \
json="$(${curl}/bin/curl -s "$url" \
| grep display_url \
| grep -o '{.*}' \
| grep -o '{.*}')"
echo "$json"
| ${jq}/bin/jq -r '
.entry_data.PostPage
| .[].graphql.shortcode_media.edge_sidecar_to_children.edges
| .[].node.display_url' \
| xargs ${wget}/bin/wget
echo "$json"
| ${jq}/bin/jq -r '
.entry_data.PostPage
| .[].graphql.shortcode_media.display_url' \
| xargs ${wget}/bin/wget
done
''

19
packages/scripts/instaget.sh Executable file
View File

@@ -0,0 +1,19 @@
#!/bin/sh
for url in "$@"; do
json="$(curl -s "$url" \
| grep display_url \
| grep -o '{.*}')"
echo "$json" \
| jq -r '
.entry_data.PostPage
| .[].graphql.shortcode_media.edge_sidecar_to_children.edges
| .[].node.display_url' \
| xargs wget
echo "$json" \
| jq -r '
.entry_data.PostPage
| .[].graphql.shortcode_media.display_url' \
| xargs wget
done

View File

@@ -1,12 +0,0 @@
{ writeShellScriptBin, curl, xsv, gnused }:
writeShellScriptBin "literature-quote" ''
ROW=$(${curl}/bin/curl -Ls http://kmein.github.io/logotheca/quotes.csv | shuf -n1)
(
printf '%s\n\n %s: _%s_, %s\n' \
"$(echo "$ROW" | ${xsv}/bin/xsv select 4)" \
"$(echo "$ROW" | ${xsv}/bin/xsv select 1)" \
"$(echo "$ROW" | ${xsv}/bin/xsv select 2)" \
"$(echo "$ROW" | ${xsv}/bin/xsv select 3 | tr : ,)"
) | ${gnused}/bin/sed 's/ | /\n/g;s/ || /\n\n/g;s/"\(.*\)"/\1/'
''

View File

@@ -0,0 +1,10 @@
#!/bin/sh
ROW=$(curl -Ls http://kmein.github.io/logotheca/quotes.csv | shuf -n1)
(
printf '%s\n\n— %s: _%s_, %s\n' \
"$(echo "$ROW" | xsv select 4)" \
"$(echo "$ROW" | xsv select 1)" \
"$(echo "$ROW" | xsv select 2)" \
"$(echo "$ROW" | xsv select 3 | tr : ,)"
) | sed 's/ | /\n/g;s/ || /\n\n/g;s/"\(.*\)"/\1/'

View File

@@ -1,17 +0,0 @@
{ writeShellScriptBin, ghostscript, man }:
let
name = "man-pdf";
in writeShellScriptBin name ''
if [ $# -eq 1 ]; then
man_entry="$1"
elif [ $# -eq 2 ]; then
man_page="$1"
man_entry="$2"
else
echo >/dev/stderr "Usage: ${name} [MAN-PAGE] ENTRY"
exit 1
fi
echo "${man}/bin/man "''${man_page:-}" "$man_entry" | ${ghostscript}/bin/ps2pdf - "$man_entry.pdf""
${man}/bin/man "''${man_page:-}" "$man_entry" | ${ghostscript}/bin/ps2pdf - "$man_entry.pdf"
''

12
packages/scripts/man-pdf.sh Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/sh
if [ "$#" -eq 1 ]; then
man_entry="$1"
elif [ $# -eq 2 ]; then
man_page="$1"
man_entry="$2"
else
echo >/dev/stderr "Usage: $0 [MAN-PAGE] ENTRY"
exit 1
fi
man "${man_page:-}" "$man_entry" | ps2pdf - "$man_entry.pdf"

2
packages/scripts/n.sh Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/sh
nix-shell -p "$1" --run "${2:-$1}"

View File

@@ -1,23 +0,0 @@
{ token, writers, python3Packages, ... }:
writers.writePython3 "nachtischsatan-bot" { libraries = [ python3Packages.python-telegram-bot ]; } ''
import random
import time
from telegram.ext import Updater, MessageHandler
from telegram.ext.filters import Filters
def flubber(bot, update):
time.sleep(random.randrange(4000) / 1000)
update.message.reply_text("*flubberflubber*")
updater = Updater(
'${token}'
)
updater.dispatcher.add_handler(MessageHandler(Filters.all, flubber))
updater.start_polling()
updater.idle()
''

View File

@@ -1,11 +0,0 @@
{ xmlstarlet, curl, writeShellScriptBin }:
writeShellScriptBin "odyssey" ''
if [ $# -eq 1 ] && (echo "$1" | grep -Eq '[0-9]+\.[0-9]+'); then
${curl}/bin/curl -Gs http://www.perseus.tufts.edu/hopper/CTS \
-d request=GetPassage \
-d "urn=urn:cts:greekLit:tlg0012.tlg002:$1" \
| ${xmlstarlet}/bin/xmlstarlet sel -t -v 'cts:GetPassage//tei:div'
else
echo you must supply BOOK.VERSE
fi
''

9
packages/scripts/odyssey.sh Executable file
View File

@@ -0,0 +1,9 @@
#!/bin/sh
if [ "$#" -eq 1 ] && (echo "$1" | grep -Eq '[0-9]+\.[0-9]+'); then
curl -Gs http://www.perseus.tufts.edu/hopper/CTS \
-d request=GetPassage \
-d "urn=urn:cts:greekLit:tlg0012.tlg002:$1" \
| xmlstarlet sel -t -v 'cts:GetPassage//tei:div'
else
echo you must supply BOOK.VERSE
fi

View File

@@ -1,11 +0,0 @@
{ writers, imagemagick }:
writers.writeDashBin "tolino-screensaver" ''
source_image="$1"
if [ -e "$source_image" ]; then
${imagemagick}/bin/convert -type Grayscale -resize 758x1024 "$source_image" "suspend.jpg"
else
echo >/dev/stderr "$1 must exist."
exit 1
fi
''

View File

@@ -0,0 +1,9 @@
#!/bin/sh
source_image="$1"
if [ -e "$source_image" ]; then
convert -type Grayscale -resize 758x1024 "$source_image" "suspend.jpg"
else
echo >/dev/stderr "$1 must exist."
exit 1
fi

4
packages/scripts/vf.sh Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/sh
fd -t f -H -I \
| fzf -m --preview="bat {}" \
| xargs -ro -d "\n" "$EDITOR" 2>&-

7
packages/scripts/vg.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
file="$(rg "$@" | fzf -0 -1 | awk -F: '{print $1}')"
if [[ -n $file ]]
then
${EDITOR:-vim} "$file"
fi

View File

@@ -1,4 +0,0 @@
{ writeShellScriptBin, curl }:
writeShellScriptBin "wttr" ''
${curl}/bin/curl -s -H "Accept-Language: ''${LANG%_*}" --compressed "wttr.in/''${1-}?0"
''

2
packages/scripts/wttr.sh Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/sh
curl -s -H "Accept-Language: ${LANG%_*}" --compressed "wttr.in/${1-}?0"