diff --git a/configs/default.nix b/configs/default.nix index fb65295..6a9ec79 100644 --- a/configs/default.nix +++ b/configs/default.nix @@ -122,7 +122,6 @@ in gfs-fonts = super.callPackage { scardanelli = config.networking.hostName == "scardanelli"; }; - fzf-wrappers = super.callPackage {}; }) ]; }; @@ -187,8 +186,10 @@ in take = pkgs.writers.writeDash "take" '' mkdir "$1" && cd "$1" ''; + cf = pkgs.writers.writeDash "cf" '' + cd $HOME && cd "$(${pkgs.fd}/bin/fd -t d | ${pkgs.fzf}/bin/fzf --preview="${pkgs.tree}/bin/tree -L 1 {}" --bind="space:toggle-preview" --preview-window=hidden)" + ''; in { - "ix.io" = "${pkgs.curl}/bin/curl -F 'f:1=<-' ix.io"; cat = "${pkgs.bat}/bin/bat --style=plain"; chromium-incognito = "chromium --user-data-dir=$(mktemp -d /tmp/chr.XXXXXX) --no-first-run --incognito"; pbcopy = "${pkgs.xclip}/bin/xclip -selection clipboard -in"; @@ -208,6 +209,7 @@ in take = "source ${take}"; tmux = "${pkgs.tmux}/bin/tmux -2"; tree = "${pkgs.exa}/bin/exa --tree"; + cf = "source ${cf}"; wcd = "source ${wcd}"; weechat = "${pkgs.openssh}/bin/ssh kmein@prism.r -t tmux attach"; where = "source ${where}"; diff --git a/packages/fzf-wrappers.nix b/packages/fzf-wrappers.nix deleted file mode 100644 index c8f508b..0000000 --- a/packages/fzf-wrappers.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ lib, fzf, writers, findutils, procps, gnused, gawk, ripgrep, symlinkJoin }: -let - wrappers.fe = writers.writeBashBin "fe" '' - export PATH=$PATH:${fzf}/bin - - IFS=$'\n' files=($(fzf-tmux --query="$1" --multi --select-1 --exit-0)) - [[ -n "$files" ]] && ''${EDITOR:-vim} "''${files[@]}" - ''; - wrappers.fkill = writers.writeDashBin "fkill" '' - export PATH=$PATH:${procps}/bin:${gawk}/bin:${gnused}/bin:${fzf}/bin:${findutils}/bin - - 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 - ''; - wrappers.vg = writers.writeBashBin "vg" '' - export PATH=$PATH:${ripgrep}/bin:${fzf}/bin:${gawk}/bin - - file="$(rg "$@" | fzf -0 -1 | awk -F: '{print $1}')" - - if [[ -n $file ]] - then - ''${EDITOR:-vim} "$file" - fi - ''; -in symlinkJoin { - name = "fzf-wrappers"; - paths = lib.attrVals wrappers; -} diff --git a/packages/scripts/default.nix b/packages/scripts/default.nix index 8ab5dcc..9a5fd13 100644 --- a/packages/scripts/default.nix +++ b/packages/scripts/default.nix @@ -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 {}; } diff --git a/packages/scripts/dirmir.nix b/packages/scripts/dirmir.nix deleted file mode 100644 index 0a8f446..0000000 --- a/packages/scripts/dirmir.nix +++ /dev/null @@ -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 -'' diff --git a/packages/scripts/dirmir.sh b/packages/scripts/dirmir.sh new file mode 100755 index 0000000..28b2832 --- /dev/null +++ b/packages/scripts/dirmir.sh @@ -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 diff --git a/packages/scripts/favicon.nix b/packages/scripts/favicon.nix deleted file mode 100644 index 92c69bd..0000000 --- a/packages/scripts/favicon.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ imagemagick, writers }: -writers.writeDashBin "favicon" '' - ${imagemagick}/bin/convert "$1" -define icon:auto-resize=64,48,32,16 "''${2-favicon.ico}" -'' diff --git a/packages/scripts/favicon.sh b/packages/scripts/favicon.sh new file mode 100755 index 0000000..032f3e7 --- /dev/null +++ b/packages/scripts/favicon.sh @@ -0,0 +1,2 @@ +#!/bin/sh +convert "$1" -define icon:auto-resize=64,48,32,16 "${2-favicon.ico}" diff --git a/packages/scripts/fkill.sh b/packages/scripts/fkill.sh new file mode 100755 index 0000000..d8d58d8 --- /dev/null +++ b/packages/scripts/fkill.sh @@ -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 diff --git a/packages/scripts/genius.nix b/packages/scripts/genius.nix deleted file mode 100644 index 32f7a4d..0000000 --- a/packages/scripts/genius.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ writeShellScriptBin, gnused, curl, pandoc }: -writeShellScriptBin "genius" '' - test $# -eq 2 || ( - echo "usage: $0 " - 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 -'' diff --git a/packages/scripts/genius.sh b/packages/scripts/genius.sh new file mode 100755 index 0000000..8efcd85 --- /dev/null +++ b/packages/scripts/genius.sh @@ -0,0 +1,20 @@ +#!/bin/sh +test "$#" -eq 2 || ( + echo "usage: $0 " + 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 diff --git a/packages/scripts/instaget.nix b/packages/scripts/instaget.nix index 9bd1566..5209728 100644 --- a/packages/scripts/instaget.nix +++ b/packages/scripts/instaget.nix @@ -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 '' diff --git a/packages/scripts/instaget.sh b/packages/scripts/instaget.sh new file mode 100755 index 0000000..19a4ab1 --- /dev/null +++ b/packages/scripts/instaget.sh @@ -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 diff --git a/packages/scripts/literature-quote.nix b/packages/scripts/literature-quote.nix deleted file mode 100644 index d2c3a0a..0000000 --- a/packages/scripts/literature-quote.nix +++ /dev/null @@ -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/' -'' diff --git a/packages/scripts/literature-quote.sh b/packages/scripts/literature-quote.sh new file mode 100755 index 0000000..8530255 --- /dev/null +++ b/packages/scripts/literature-quote.sh @@ -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/' diff --git a/packages/scripts/man-pdf.nix b/packages/scripts/man-pdf.nix deleted file mode 100644 index b7b578e..0000000 --- a/packages/scripts/man-pdf.nix +++ /dev/null @@ -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" -'' diff --git a/packages/scripts/man-pdf.sh b/packages/scripts/man-pdf.sh new file mode 100755 index 0000000..5992d4a --- /dev/null +++ b/packages/scripts/man-pdf.sh @@ -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" diff --git a/packages/scripts/n.sh b/packages/scripts/n.sh new file mode 100755 index 0000000..7353c31 --- /dev/null +++ b/packages/scripts/n.sh @@ -0,0 +1,2 @@ +#!/bin/sh +nix-shell -p "$1" --run "${2:-$1}" diff --git a/packages/scripts/nachtischsatan-bot.nix b/packages/scripts/nachtischsatan-bot.nix deleted file mode 100644 index d36ad71..0000000 --- a/packages/scripts/nachtischsatan-bot.nix +++ /dev/null @@ -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() -'' diff --git a/packages/scripts/odyssey.nix b/packages/scripts/odyssey.nix deleted file mode 100644 index 4aea977..0000000 --- a/packages/scripts/odyssey.nix +++ /dev/null @@ -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 -'' diff --git a/packages/scripts/odyssey.sh b/packages/scripts/odyssey.sh new file mode 100755 index 0000000..45c9e9e --- /dev/null +++ b/packages/scripts/odyssey.sh @@ -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 diff --git a/packages/scripts/tolino-screensaver.nix b/packages/scripts/tolino-screensaver.nix deleted file mode 100644 index 0b4606f..0000000 --- a/packages/scripts/tolino-screensaver.nix +++ /dev/null @@ -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 -'' diff --git a/packages/scripts/tolino-screensaver.sh b/packages/scripts/tolino-screensaver.sh new file mode 100755 index 0000000..fd89374 --- /dev/null +++ b/packages/scripts/tolino-screensaver.sh @@ -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 diff --git a/packages/scripts/vf.sh b/packages/scripts/vf.sh new file mode 100755 index 0000000..5210415 --- /dev/null +++ b/packages/scripts/vf.sh @@ -0,0 +1,4 @@ +#!/bin/sh +fd -t f -H -I \ + | fzf -m --preview="bat {}" \ + | xargs -ro -d "\n" "$EDITOR" 2>&- diff --git a/packages/scripts/vg.sh b/packages/scripts/vg.sh new file mode 100755 index 0000000..22387fc --- /dev/null +++ b/packages/scripts/vg.sh @@ -0,0 +1,7 @@ +#!/bin/bash +file="$(rg "$@" | fzf -0 -1 | awk -F: '{print $1}')" + +if [[ -n $file ]] +then + ${EDITOR:-vim} "$file" +fi diff --git a/packages/scripts/wttr.nix b/packages/scripts/wttr.nix deleted file mode 100644 index 4dcfe27..0000000 --- a/packages/scripts/wttr.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ writeShellScriptBin, curl }: -writeShellScriptBin "wttr" '' - ${curl}/bin/curl -s -H "Accept-Language: ''${LANG%_*}" --compressed "wttr.in/''${1-}?0" -'' diff --git a/packages/scripts/wttr.sh b/packages/scripts/wttr.sh new file mode 100755 index 0000000..9ea7084 --- /dev/null +++ b/packages/scripts/wttr.sh @@ -0,0 +1,2 @@ +#!/bin/sh +curl -s -H "Accept-Language: ${LANG%_*}" --compressed "wttr.in/${1-}?0"