Few more scripts
This commit is contained in:
parent
13eedd1a1c
commit
e17b945863
17
default.nix
17
default.nix
|
@ -1,7 +1,10 @@
|
|||
{ pkgs
|
||||
, scdoc
|
||||
, xclip
|
||||
, maim
|
||||
, stdenvNoCC
|
||||
, nushell
|
||||
, xdotool
|
||||
, ...
|
||||
}:
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
|
@ -10,6 +13,7 @@ stdenvNoCC.mkDerivation rec {
|
|||
src = ./src;
|
||||
nativeBuildInputs = with pkgs; [
|
||||
scdoc
|
||||
nushell
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
|
@ -18,11 +22,24 @@ stdenvNoCC.mkDerivation rec {
|
|||
done
|
||||
'';
|
||||
|
||||
preConfig = ''
|
||||
patchShebangs ./bin/*
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/{share/man/man1,bin,share/zsh/site-functions}
|
||||
cp bin/* $out/bin/
|
||||
cp completions/* $out/share/zsh/site-functions/
|
||||
cp *.1 $out/share/man/man1/
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
substituteInPlace $out/bin/* \
|
||||
--replace "xclip" "${xclip}/bin/xclip" \
|
||||
--replace "maim" "${maim}/bin/maim" \
|
||||
--replace "xdotool" "${xdotool}/bin/xdotool"
|
||||
'';
|
||||
|
||||
}
|
||||
|
|
43
src/bin/invyt
Executable file
43
src/bin/invyt
Executable file
|
@ -0,0 +1,43 @@
|
|||
#!/usr/bin/env nu
|
||||
|
||||
def parse_url [url: string] {
|
||||
let parsed_url = $url | url parse
|
||||
|
||||
let correct_string = ($parsed_url.path | grep -E "(playlist|watch)" | complete).exit_code
|
||||
|
||||
if ($correct_string == 0) {
|
||||
if $parsed_url.host != "youtube.com" {
|
||||
$url | str replace $parsed_url.host "youtube.com"
|
||||
} else {
|
||||
$url
|
||||
}
|
||||
} else {
|
||||
error make {
|
||||
msg: "Not a YouTube/Invidious/Piped URL"
|
||||
label: {
|
||||
text: "Expects a YouTube/Invidious/Piped URL"
|
||||
span: (metadata $url).span
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def main [ url: string
|
||||
, --copy(-c)
|
||||
] {
|
||||
|
||||
let $url = parse_url $url
|
||||
|
||||
match $copy {
|
||||
true => { $url | xclip -sel clip }
|
||||
false => $url
|
||||
}
|
||||
}
|
||||
|
||||
def "main download" [url: string] {
|
||||
yt-dlp --embed-chapters --embed-metadata --embed-subs (parse_url $url)
|
||||
}
|
||||
|
||||
def "main dl" [url: string] {
|
||||
yt-dlp --embed-chapters --embed-metadata --embed-subs (parse_url $url)
|
||||
}
|
91
src/bin/maim-utils
Executable file
91
src/bin/maim-utils
Executable file
|
@ -0,0 +1,91 @@
|
|||
#!/bin/sh
|
||||
# Copyright 2023 Marty Sluijtman <marty.wanderer@disroot.org>
|
||||
# Distributed under the terms of the GPLv3 license
|
||||
|
||||
savedir="${SCROTDIR:-$HOME/Pictures/Screenshots}"
|
||||
filename="$savedir/$(date -Iseconds)_maim.png"
|
||||
|
||||
# test whether the screenshot directory exists, if not, create it.
|
||||
[ -d $savedir ] || mkdir -p $savedir
|
||||
|
||||
fullscreen(){
|
||||
maim -ui root "$filename"
|
||||
notify-send 'Maim utils' "Shot entire screen and saved output to:\n\n$filename"
|
||||
}
|
||||
|
||||
selection(){
|
||||
maim -su "$filename"
|
||||
notify-send 'Maim utils' "Shot selection and saved output to:\n\n$filename\n\nBe aware that the selection process can be cancelled using any keypress and that this won't show up due to xclip eating the exit status."
|
||||
}
|
||||
|
||||
focus(){
|
||||
maim -ui "$(xdotool getactivewindow)" "$filename"
|
||||
notify-send 'Maim utils' "Shot focussed window and saved output to:\n\n$filename"
|
||||
}
|
||||
|
||||
clip_fullscreen(){
|
||||
maim -ui root | xclip -sel clip -t image/png
|
||||
notify-send 'Maim utils' "Shot entire screen and sent it to the clipboard."
|
||||
}
|
||||
|
||||
clip_selection(){
|
||||
maim -su | xclip -sel clip -t image/png
|
||||
notify-send 'Maim utils' "Shot selection and sent it to the clipboard.\nBe aware that the selection process can be cancelled using any keypress and that this won't show up due to xclip eating the exit status."
|
||||
}
|
||||
|
||||
clip_focus(){
|
||||
maim -ui "$(xdotool getactivewindow)" | xclip -sel clip -t image/png
|
||||
notify-send 'Maim utils' "Shot focussed window and sent it to the clipboard."
|
||||
}
|
||||
|
||||
fancy_clip(){
|
||||
# nicked straight from the maim README (https://github.com/naelstrof/maim#examples)
|
||||
maim -st 9999999 | convert - \( +clone -background black -shadow 80x3+5+5 \) +swap -background none -layers merge +repage PNG:- | xclip -sel clip -t image/png
|
||||
notify-send 'Maim utils' "Shot selection and sent it to the clipboard.\nBe aware that the selection process can be cancelled using any keypress and that this won't show up due to xclip eating the exit status."
|
||||
}
|
||||
|
||||
fancy(){
|
||||
# nicked straight from the maim README (https://github.com/naelstrof/maim#examples)
|
||||
maim -st 9999999 | convert - \( +clone -background black -shadow 80x3+5+5 \) +swap -background none -layers merge +repage "$filename"
|
||||
notify-send 'Maim utils' "Shot selection and sent it to the clipboard.\nBe aware that the selection process can be cancelled using any keypress and that this won't show up due to xclip eating the exit status."
|
||||
}
|
||||
|
||||
usage(){
|
||||
cat >&2 <<EOF
|
||||
Usage: maim-utils <screenshot-type>
|
||||
|
||||
fullscreen|full: take screenshot of entire screen
|
||||
|
||||
selection|sel: take screenshot of rectangular selection
|
||||
|
||||
focus: take screenshot of focussed window
|
||||
|
||||
clip-fullscreen|clip-full|full-clip: take screenshot of entire screen and
|
||||
output to clipboard
|
||||
|
||||
clip-selection|clip-sel|sel-clip: take screenshot of rectangular selection
|
||||
and output to clipboard
|
||||
|
||||
clip-focus|focus-clip: take screenshot of focussed window and output to
|
||||
clipboard
|
||||
|
||||
clip-selection|clip-sel|sel-clip: take screenshot of rectangular selection
|
||||
and output to clipboard and give it a facy dropshadow
|
||||
|
||||
open|show|screenshots: open screenshot directory
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
case $1 in
|
||||
sel|selection) selection;;
|
||||
sel-clip|clip-sel|clip-selection) clip_selection;;
|
||||
full|fullscreen) fullscreen;;
|
||||
full-clip|clip-full|clip-fullscreen) clip_fullscreen;;
|
||||
focus) focus;;
|
||||
clip-focus|focus-clip) clip_focus;;
|
||||
open|show|screenshots) xdg-open $savedir;;
|
||||
fancy) fancy;;
|
||||
fancy-clip) fancy_clip;;
|
||||
*) usage;;
|
||||
esac
|
5
src/bin/port
Executable file
5
src/bin/port
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env nu
|
||||
|
||||
def main [] {
|
||||
random int 0..65535
|
||||
}
|
32
src/bin/rimg
Executable file
32
src/bin/rimg
Executable file
|
@ -0,0 +1,32 @@
|
|||
#!/usr/bin/env nu
|
||||
|
||||
# Takes a Reddit IMaGe URL and either downloads its contents or opens it using kitty's icat kitten.
|
||||
def main [ --url(-u): string # Feed it the URL as parameter rather than from the clipboard
|
||||
, --download(-d) # Downloads the image rather than opening it in icat
|
||||
] {
|
||||
let clipboard = xclip -o
|
||||
let url = $url. | default $clipboard
|
||||
match ($url | str contains "reddit.com") {
|
||||
true => ($url | get_url)
|
||||
false => ("URL is not a valid Reddit URL"; exit 1)
|
||||
} | download_url $download
|
||||
}
|
||||
|
||||
|
||||
# Documentation for handle_url
|
||||
def download_url [download: bool] {
|
||||
let input = $in
|
||||
match $download {
|
||||
true => (wget $input)
|
||||
false => (kitten icat $input)
|
||||
}
|
||||
}
|
||||
|
||||
def get_url [] {
|
||||
let input = $in
|
||||
let decoded = $input | url decode
|
||||
match ($decoded | str contains "preview") {
|
||||
true => ( ($decoded | parse "{reddit}={imageUrl}?{params}").imageUrl.0 | str replace "preview" "i" )
|
||||
false => ($decoded | parse "{reddit}={imageUrl}").imageUrl.0
|
||||
}
|
||||
}
|
6
src/completions/_maim-utils
Normal file
6
src/completions/_maim-utils
Normal file
|
@ -0,0 +1,6 @@
|
|||
#compdef maim-utils _maim-utils
|
||||
|
||||
_arguments -C \
|
||||
"1: :(focus fullscreen selection clip-selection clip-fullscreen clip-focus show fancy fancy-clip)" \
|
||||
"*::args:->args"
|
||||
_arguments : $arguments
|
16
src/manpages/invyt.1.scd
Normal file
16
src/manpages/invyt.1.scd
Normal file
|
@ -0,0 +1,16 @@
|
|||
invyt(1)
|
||||
|
||||
# NAME
|
||||
|
||||
*invyt* - takes a not-quite-YouTube URL and turns it into one. Optionally it can
|
||||
also download the vidoe or playlist in question.
|
||||
|
||||
# TODO
|
||||
|
||||
The rest of this manpage:
|
||||
- flags
|
||||
- sub commands
|
||||
|
||||
# SEE ALSO
|
||||
|
||||
*yt-dlp(1)*
|
59
src/manpages/maim-utils.1.scd
Normal file
59
src/manpages/maim-utils.1.scd
Normal file
|
@ -0,0 +1,59 @@
|
|||
maim-utils(1)
|
||||
|
||||
# NAME
|
||||
|
||||
maim-utils - A few common screenshot options rolled into one script based on maim
|
||||
|
||||
# SYNOPSIS
|
||||
|
||||
*maim-utils* _<fullscreen|focus|selection|fancy>_
|
||||
|
||||
*maim-utils* _<clip-fullscreen|clip-focus|clip-selection|fancy-clip>_
|
||||
|
||||
# DESCRIPTION
|
||||
|
||||
I wrote around six scripts to take screenshots in various different ways a few
|
||||
years ago and at some point I got the idea to turn it into a single script.
|
||||
*maim-utils* is the result of that. It only took me a few years to finally get
|
||||
to it.
|
||||
|
||||
# CONFIGURATION
|
||||
|
||||
*maim-utils* saves it's screenshots to '*~/Pictures/Screenshots*' by default.
|
||||
This can be changed by setting the *$SCROTDIR* environment variable.
|
||||
|
||||
# COMMANDS
|
||||
|
||||
*fullscreen* and *full*
|
||||
Take a screenshot of the entire screen and save it to the screenshot
|
||||
directory.
|
||||
|
||||
*selection* and *sel*
|
||||
Take a screenshot based on a rectangular selection and save it to the
|
||||
screenshot directory.
|
||||
|
||||
*focus*
|
||||
Take a screenshot of the currently focussed window and save it to the
|
||||
screenshot directory.
|
||||
|
||||
*fancy*
|
||||
Take a screenshot of a window and add a fancy looking dropshadow effect
|
||||
using imagemagick.
|
||||
|
||||
*clip-fullscreen*, *clip-full* and *full-clip*
|
||||
Take a screenshot of the entire screen and write it to the clipboard.
|
||||
|
||||
*clip-focus* and *focus-clip*
|
||||
Take a screenshot of the currently focus window and write it to the
|
||||
clipboard.
|
||||
|
||||
*fancy-clip*
|
||||
Take a screenshot of a window, add a fancy looking dropshadow effect
|
||||
using imagemagick and write it to the clipboard.
|
||||
|
||||
*clip-selection*, *clip-sel* and *sel-clip*
|
||||
Take a screenshot based on a rectangular selection and write it to the
|
||||
clipboard.
|
||||
|
||||
*open*, *show* and *screenshots*
|
||||
Open the directory containing screenshots.
|
14
src/manpages/port.1.scd
Normal file
14
src/manpages/port.1.scd
Normal file
|
@ -0,0 +1,14 @@
|
|||
port(1)
|
||||
|
||||
# NAME
|
||||
|
||||
*port* - returns a valid port number.
|
||||
|
||||
Here the entire sourcecode:
|
||||
```
|
||||
def main [] {
|
||||
random int 0..65535
|
||||
}
|
||||
```
|
||||
|
||||
In fact, this manpage is longer than the script its about.
|
22
src/manpages/rimg.1.scd
Normal file
22
src/manpages/rimg.1.scd
Normal file
|
@ -0,0 +1,22 @@
|
|||
rimg(1)
|
||||
|
||||
# NAME & DESCRIPTION
|
||||
|
||||
*rimg* - takes a Reddit IMaGe URL and either downloads its contents or opens it
|
||||
using *kitty(1)*'s icat kitten.
|
||||
|
||||
By default it takes the URL from the clipboard using *xclip(1)*.
|
||||
|
||||
# OPTIONS
|
||||
|
||||
*--help -h*
|
||||
Print usage and exit
|
||||
|
||||
*--url -u*
|
||||
Feed it the URL as parameter rather than from the clipboard.
|
||||
|
||||
*--download -d*
|
||||
|
||||
# SEE ALSO
|
||||
|
||||
*kitty(1)* *xclip(1)* *wget(1)*
|
Loading…
Reference in a new issue