diff --git a/Makefile b/Makefile index a4fd400..2951f5b 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,8 @@ EDITOR ?= vi FZF != command -v sk || command -v fzy || command -v fzf || \ { echo install a fuzzy finder && exit 1 ;} +spill_contents = sed -e '1,/---/d' + help: ## Print the help message @awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z._-]+:.*?## / {printf "\033[36m%s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST) | \ sort | \ @@ -11,31 +13,38 @@ help: ## Print the help message articles != find * -type f -name "*.md" -categories != ls -d */ +dirs != ls -d */ +categories = $(patsubst %/, %, $(dirs)) -databases = $(patsubst %/, .dbs/%.rec, $(categories)) +databases = $(patsubst %, .dbs/%.rec, $(categories)) default += $(databases) -$(databases): .dbs/%.rec: %/ | .dbs/ +$(foreach dir, $(categories), \ + $(eval .dbs/$(dir).rec: $(wildcard $(dir)/*)) \ + ) + +$(databases): .dbs/%.rec: %/ $(info making $(@F)) - mkdir -p $(@D) + @mkdir -p $(@D) for entry in $(shell find $< -type f -name "*.md") ; do \ sed -n '2,/^---$$/ {/^---$$/d; p}' "$$entry" |\ sed -e 's/\[ //' -e 's/ \]//' |\ tr -d '"' ;\ printf "wordcount: %s\n" "$$(wc -w < $$entry)" ;\ printf "file: %s\n\n" "$$entry" ;\ - done >> $@ + done > $@ for entry in $(shell find $< -type f -name "*.md"); do \ recset $@ -e "file = '$${entry}'" -f wordcount --set-add="$$(wc -w < $${entry})" ;\ + recset $@ -e "file = '$${entry}'" -f content --set-add="$$($(spill_contents) $${entry})" ;\ done db.rec: $(databases) printf '%s\n' '%rec: guide' > $@ + printf '%s\n' '%key: title' >> $@ printf '%s\n' '%type: wordcount int' >> $@ printf '%s\n\n' '%sort: title' >> $@ - cat $^ >> $@ + recsel $^ >> $@ recsel $@ -e "requires != ''" -CR title,requires |\ while read title requires; do \ IFS=', ' && for provider in $$requires; do \ diff --git a/README.md b/README.md index be392c1..69c814d 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ recsel db.rec -q gpg recsel db.rec -e "title = 'ssh'" recsel db.rec -e "title ~ 'ssh'" recsel db.rec -e "title ~ 'bash'" -R title,wordcount +recsel db.rec -m 1 -P content | less -R ``` # Style diff --git a/basics/kernel.md b/basics/kernel.md deleted file mode 100644 index 3989904..0000000 --- a/basics/kernel.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: "kernel" -tags: [ "Basics" ] ---- -## Living Space - -Kernel modules live in lib/modules/$(uname -r) - -## Change - -Load them with - -```bash -sudo modprobe ath9k -``` - -Or remove one with - -```bash -sudo modprove uvcvideo -``` - -The PC's irritating speaker beep can be really annoying. Disable it with: - -```bash -sudo modprobe -r pcspeaker -``` - -Permanently disable a module by blacklisting it in `/etc/modprobe.d`: - -```bash -echo 'blacklist pcspkr' > /etc/modprobe.d/*nobeep*.conf -``` - diff --git a/data/base_16.md b/data/base_16.md index b283c4c..5580b2f 100644 --- a/data/base_16.md +++ b/data/base_16.md @@ -1,6 +1,6 @@ --- title: "Base 16" -tags: [ "Data" ] +tags: [ "data" ] --- ```bash diff --git a/data/calcurse.md b/data/calcurse.md index afebbfc..9b6c0f6 100644 --- a/data/calcurse.md +++ b/data/calcurse.md @@ -5,5 +5,10 @@ tags: [ "data", "calendar", "daylight savings" ] ## Setup -The UK government keeps an ics file with clock, [here](https://www.gov.uk/when-do-the-clocks-change/united-kingdom.ics). +The UK government keeps an `ics` file with clock. + +```sh +wget https://www.gov.uk/when-do-the-clocks-change/united-kingdom.ics +calcurse -i united-kingdom.ics +``` diff --git a/data/email.md b/data/email.md index fbcbc57..3124dc9 100644 --- a/data/email.md +++ b/data/email.md @@ -9,10 +9,10 @@ Install `opensmtpd` (or similar), then `ncat` or `nc` or `netcat` (this mysterio Start the `opensmtpd` service, then use netcat to speak with the mail-daemon: - -``` +```sh nc localhost 25 ``` + The computer should respond with code `220`, which means 'I am listening'. > 220 hex ESMTP OpenSMTPD @@ -40,7 +40,7 @@ Tell the mail daemon who you are in this format. Then tell it who you're sending to. -``` +```sh RCPT TO: ``` @@ -67,7 +67,7 @@ You will find the email under `/var/spool` or `/var/mail` or similar. If unsure, just take a part of your email, like `FRAGMENT="turn off server please"`, then `grep` for it: - ```bash + ```sh sudo grep -r $FRAGMENT /var/spool/* ``` diff --git a/data/exiftool.md b/data/exiftool.md index 6040c4e..2f27df8 100644 --- a/data/exiftool.md +++ b/data/exiftool.md @@ -1,17 +1,17 @@ --- title: "exiftool" -tags: [ "Metadata" ] +tags: [ "metadata", "exifdata" ] --- -Find metadata. +Find metadata: -```bash -exiftool image.jpg +```sh +exiftool "$file".jpg ``` -Find info on all images in current directory. +Find info on all `.png` images in current directory. -```bash +```sh exiftool -ext .png . ``` @@ -19,22 +19,14 @@ You can make this recurring with the -r switch. And overwrite all metadata: -```bash +```sh exiftool -all= -overwrite_original -ext jpg . ``` (NB: This does not work on pdf data. See [here](pdf_erasure.md) for erasing all pdf data) Or just GPS data: -```bash +```sh exiftool -gps:all= *.jpg ``` -You can also use the imagemagick tool: - -```bash -identify -verbose -``` - - - diff --git a/data/git/git-lfs.md b/data/git/git-lfs.md index 604eca5..55bcb12 100644 --- a/data/git/git-lfs.md +++ b/data/git/git-lfs.md @@ -1,24 +1,72 @@ --- title: "git-lfs" -tags: [ "data" ] +tags: [ "data", "git" ] --- -Install, and add with +Git Large File Storage ('LFS') needs to change your `~/.gitconfig` to check out those binary files: -```bash +```sh +cat ~/.gitconfig git lfs install +cat ~/.gitconfig ``` -Then track some filetype with: +Then track some filetypes with: -```bash -git lfs track "\*.ttf" +```sh +cd $git_repository +ext=ttf +git lfs track "*.$ext" ``` Or a directory with: -```bash +```sh git lfs track "images/" ``` -All changes require adding `.gitattributes`. +Track the changes to `.gitattributes`: + +```sh +git status +git add .gitattributes +git commit -m "add $ext to lfs" +``` + +## Bash Completion + +If bash completion does not work, you'll have to add it: + +```sh +git lfs completion bash | sudo tee /usr/share/bash-completion/completions/git-lfs +``` + +## Trouble Shooting + +You have some file "$FILE".png, which has some problem. + +Check the filetype: + +```sh +file "$FILE".png +``` + +This should say the type is 'image'. +If it says the type is 'text', then this file is really just a reminder to `git-lfs` to check out that file. + +Check `git-lfs` is expecting that file: + +```sh +git lfs status +git lfs ls-files +``` + +...then try these commands, and check the filetype again: + +```sh +git lfs fetch --all +git lfs fsck +git lfs checkout +git lfs status +``` + diff --git a/data/git/subtree.md b/data/git/subtree.md index b467954..e44e888 100644 --- a/data/git/subtree.md +++ b/data/git/subtree.md @@ -1,5 +1,5 @@ --- -title: "git" +title: "git subtree" tags: [ "data", "git", "subtree" ] --- diff --git a/data/gpg.md b/data/gpg.md index 3f0bd28..2e489b6 100644 --- a/data/gpg.md +++ b/data/gpg.md @@ -1,6 +1,6 @@ --- title: "gpg" -tags: [ "data", "GPG" ] +tags: [ "data", "gpg" ] --- - [Setup](gpg/basics.md) diff --git a/data/gpg/extras.md b/data/gpg/extras.md index 981af5b..542d195 100644 --- a/data/gpg/extras.md +++ b/data/gpg/extras.md @@ -1,5 +1,5 @@ --- -title: "gpg" +title: "gpg with vim" tags: [ "vim", "data", "GPG" ] requires: [ "GPG Basics", "vim basics" ] --- diff --git a/data/groff.md b/data/groff.md index 452ffc3..3601617 100644 --- a/data/groff.md +++ b/data/groff.md @@ -1,6 +1,6 @@ --- title: "groff" -tags: [ "Data" ] +tags: [ "data", "logic" ] --- # Basic Documents diff --git a/data/khard.md b/data/khard.md index 9c9fa59..d113fa5 100644 --- a/data/khard.md +++ b/data/khard.md @@ -4,57 +4,49 @@ tags: [ "Data" ] --- Get the basic config: -```bash +```sh mkdir ~/.config/khard ``` -```bash +```sh cp /usr/share/doc/khard/examples/khard/khard.conf.example ~/.config/khard.conf ``` Short list -```bash +```sh khard list ``` Longer list -```bash +```sh khard show ``` Show from addressbook 'work' -```bash +```sh khard list -a work ``` Make a new contact in address book 'family' -```bash +```sh khard new -a family ``` -```bash +```sh khard edit grampa ``` -```bash +```sh khard remove bob ``` Move contact 'nina' from 'work' to 'home' address book. -```bash +```sh khard move -a home nina -A work ``` -## Advanced - -Merge: - -```bash -khard merge [-a source_abook] [-u uid|search terms [search terms ...]] [-A target_abook] [-U target_uid|-t target_search_terms] -``` - diff --git a/data/pass.md b/data/pass.md index c10a847..8aca8da 100644 --- a/data/pass.md +++ b/data/pass.md @@ -1,42 +1,42 @@ --- title: "pass" tags: [ "data" ] +requires: "GPG Basics" --- -[Video instructions](https://www.hooktube.com/watch?v=hlRQTj1D9LA) Setup [gpg](./gpg.md) keys. Show your gpg secret it: -```bash +```sh gpg --list-secret-keys ``` Then use the id number under `sec` to make a pass repo: -```bash +```sh KEY="$(gpg --list-secret-keys | grep -m 1 -A1 '^sec' | tail -n 1)" ``` -```bash +```sh pass init $KEY ``` To add a basic password, e.g. for `$WEBSITE`: -```bash +```sh pass $WEBSITE ``` To insert a multiline password, e.g. with a login name: -```bash +```sh pass add -m $WEBSITE ``` Remove a password: -```bash +```sh pass rm $WEBSITE ``` diff --git a/data/pdf-to-txt.md b/data/pdf-to-txt.md index 2367cef..ecdfb04 100644 --- a/data/pdf-to-txt.md +++ b/data/pdf-to-txt.md @@ -2,7 +2,8 @@ title: "pdf to txt" tags: [ "data", "pdf", "ocr" ] --- -How to translate pdf book images to text (results are very poor, and will need lots of corrections). + +How to translate pdfs to text (results are very poor, and will need lots of corrections). ## Dependencies @@ -17,8 +18,8 @@ pdftoppm -png *file*.pdf test ``` ```bash -for x in \*png; do - tesseract -l eng "$x" - >> *out*.txt +for x in *png; do + tesseract -l eng "$x" - >> out.txt done ``` diff --git a/data/recfiles.md b/data/recfiles.md index 3e0e1e0..5c78bb0 100644 --- a/data/recfiles.md +++ b/data/recfiles.md @@ -44,6 +44,9 @@ recset -f "$new_field" --delete $database - [Extended example](recfiles/extended.md) - [Playing with board games data](recfiles/Board_Games.md) +- [Playing with IP addresses](recfiles/IP_ASN.md) +- [Manage LaTeX Bibliographies](recfiles/bibliography.md) +- [Fixes](recfiles/recfixes.md) # Resources diff --git a/data/recfiles/IP_ASN.md b/data/recfiles/IP_ASN.md new file mode 100644 index 0000000..fafbe9b --- /dev/null +++ b/data/recfiles/IP_ASN.md @@ -0,0 +1,16 @@ +--- +title: "IP Addresses with Recfiles" +tags: [ "data", "recfiles", "games" ] +requires: "Recfiles" +--- + +## Download the Database + +Download the csv data, and separate the ipv4 data from the ipv6. + +```sh +curl -Lo ips.zip 'https://www.kaggle.com/api/v1/datasets/download/ipinfo/ipinfo-country-asn' +unzip -p ips.zip country_asn.csv | csv2rec | recsel -e "start_ip ~ '\.'" > ipv4.rec +unzip -p ips.zip country_asn.csv | csv2rec | recsel -e "start_ip ~ '::'" > ipv6.rec +``` + diff --git a/data/recfiles/bibliography.md b/data/recfiles/bibliography.md new file mode 100644 index 0000000..b15c046 --- /dev/null +++ b/data/recfiles/bibliography.md @@ -0,0 +1,121 @@ +--- +title: "Recfile Bibliography for TeX" +tags: [ "data", "database", "recfiles", "tex" ] +requires: [ "Recfiles", "TeX", "Makefile" ] +--- + +Store your bibliography in a `recfile` database, then extract any part with `make`. + +For example, you could store books like this in `bibliography.rec`: + +```recfile +%rec: book +%key: slug + +slug: thinkingexperience +author: H. H. Price +title: Thinking and Experience +year: 1953 +publisher: Harvard University Press, Cambridge + +slug: inventingrightwrong +author: John Leslie Mackie +title: Inventing Right and Wrong +year: 1997 +publisher: Penguin Books, England + +``` + +Run `make book` to extract `book.bib`, ready for LaTeX to use: + +```bib +@book{thinkingexperience, + author = {H. H. Price}, + title = {Thinking and Experience}, + year = {1953}, + publisher = {Harvard University Press, Cambridge}, +} + +@book{inventingrightwrong, + author = {John Leslie Mackie}, + title = {Inventing Right and Wrong}, + year = {1997}, + publisher = {Penguin Books, England}, +} +``` + +The `makefile` syntax is just a few lines (though admittedly employs some garbled shell-crud): + +```make +bibs != grep -Po '%rec: \K.*' bibliography.rec +bibfiles = $(patsubst %, %.bib, $(bibs)) + +$(bibfiles): %.bib: bibliography.rec + recsel $< -t $(basename $@) |\ + sed 's/slug: \(.*\)/@$(basename $@){\1,/g' |\ + sed 's/^\(\b.*\b\): \(.*\)/ \1 = {\2},/gI' |\ + sed 's/^$$/}\n/g' > $@ + echo '}' >> $@ +``` + +Here's a longer `bibliography.rec` file, which can also produce `article.bib`: + +```recfile +%rec: book +%key: slug +%type: year int +%constraint: year > -2000 +%sort: year month + +slug: thinkingexperience +author: H. H. Price +title: Thinking and Experience +year: 1953 +publisher: Harvard University Press, Cambridge + +slug: inventingrightwrong +author: John Leslie Mackie +title: Inventing Right and Wrong +year: 1997 +publisher: Penguin Books, England + +slug: metaphysicscontemporaryintro +author: Michael J. Loux +title: Metaphysics: A Contemporary Introduction +year: 1998 +publisher: Routledge, London + +slug: pluralityworlds +author: David Lewis +title: On the Plurality of Worlds +publisher: Blackwell Publishing, Oxford +year: 2001 + +%rec: article +%key: slug +%sort: year month + +slug: genuinerealisttheory +author: John Divers +title: A Genuine Realist Theory of Advanced Modalizing +year: 1999 +pages: 217–240 +month: april +journaltitle: Mind +uri: https://academic.oup.com/mind/article-abstract/108/430/217/975258?redirectedFrom=fulltext +volume: 108 +publisher: Harvard University Press, Cambridge + +slug: twokindsmentalrealism +author: Tam\'{a}s Demeter +title: Two Kinds of Mental Realism +year: 2009 +pages: 40:59-71 +uri: https://www.researchgate.net/profile/Tamas_Demeter2/publication/41554923_Two_Kinds_of_Mental_Realism/links/0deec53247f5a4ae21000000.pdf +month: august +journaltitle: Journal for General Philosophy of Science +volume: 30 +publisher: Harvard University Press, Cambridge + +``` + diff --git a/data/recfiles/recfixes.md b/data/recfiles/recfixes.md new file mode 100644 index 0000000..fa01b65 --- /dev/null +++ b/data/recfiles/recfixes.md @@ -0,0 +1,33 @@ +--- +title: "Recfixes" +tags: [ "data", "recfiles" ] +requires: "Recfiles" +--- + +Sometimes `recsel` chokes on a large query, and you need to break the query into chunks with a pipe. + +This Kickstarter file has 374,853 records. +Here's the chonky query: + +```sh +recsel kick.rec -e "Category = 'Games'" -p "Subcategory,Avg(Goal)" -G Subcategory +``` + +It breaks down like this: + +| Chunk | Meaning | +|:-----------------------------:|:---------------------------------------------:| +| `recsel kick.rec` | Select records from `kick.rec` | +| `-e "Category = 'Games'"` | Select only records where Category = 'Games' | +| `-p "Subcategory,Avg(Goal)"` | Print the Subcategory and average goal | +| `-G "Subcategory"` | Group by subcategory | + +Two ways to break the query apart: + +```sh +recsel kick.rec -e "Category = 'Games'" | recsel -p "Subcategory,Avg(Goal)" -G "Subcategory" + +recsel kick.rec -e "Category = 'Games'" > games.rec +recsel games.rec -p "Subcategory" -G "Subcategory" +``` + diff --git a/distros/arch/gpu.md b/distros/arch/gpu.md index 33b7e94..72dade5 100644 --- a/distros/arch/gpu.md +++ b/distros/arch/gpu.md @@ -1,6 +1,6 @@ --- -title: "fonts" -tags: [ "distros" ] +title: "Ach Linux GPU Setup" +tags: [ "arch", "GPU" ] --- # Step 1: Multilib @@ -60,4 +60,3 @@ You should see 'true' here. ```bash sudo pacman -S --needed lib32-mesa vulkan-radeon lib32-vulkan-radeon vulkan-icd-loader lib32-vulkan-icd-loader xf86-video-amdgpu ``` - diff --git a/hardware/keyboard.md b/hardware/keyboard.md index b4a6a88..f81c3d8 100644 --- a/hardware/keyboard.md +++ b/hardware/keyboard.md @@ -9,7 +9,7 @@ This works everywhere, including in a bare-ass tty. Select a keymap, and create a new custom map. -```bash +```sh su root basemap=/usr/share/kbd/keymaps/i386/qwerty/pl1.map.gz @@ -22,7 +22,7 @@ gunzip -c $basemap | \ Tell the system to use this keymap at startup by naming it in the `rc.conf` file: -```bash +```sh echo "KEYMAP=$newmap" >> /etc/rc.conf cat /etc/rc.conf @@ -33,24 +33,24 @@ reboot Set layout to British English. -```bash +```sh setxkbmap -layout gb ``` Or Polish with: -```bash +```sh setxkbmap -layout pl ``` | Language | short | -|:--------|:------| -| Polish | pl | -| Serbian | rs | +|:---------|:------| +| Polish | `pl` | +| Serbian | `rs` | Set 'alt + shift', as the command which cycles through the British English, Polish and Serbian keyboard layout. -```bash +```sh setxkbmap -layout gb,pl,rs -option grp:alt_shift_toggle ``` diff --git a/networking/wifi.md b/networking/wifi.md index 86481c2..5cf28cd 100644 --- a/networking/wifi.md +++ b/networking/wifi.md @@ -1,7 +1,8 @@ --- -title: "wifi" +title: "network" tags: [ "Networking" ] --- + # Netstat Stuff Stats on local net usage within domain. diff --git a/networking/wireguard.md b/networking/wireguard.md index 68987c7..ef87eb0 100644 --- a/networking/wireguard.md +++ b/networking/wireguard.md @@ -1,6 +1,6 @@ --- title: "wireguard" -tags: [ "Networking", "VPN" ] +tags: [ "networking", "VPN" ] ---