Compare commits

...

12 Commits

Author SHA1 Message Date
c74b861442 add joyous bash 2025-08-26 23:03:07 +02:00
599ccd2881 refactor makefile 2025-02-14 16:23:28 +01:00
b191a9e5d4 note speedy compiles 2024-12-09 01:39:47 +01:00
e98d4ffbac place arch install instructions 2024-12-09 01:27:18 +01:00
f067b0200b fix robocop 2024-12-09 00:30:18 +01:00
e2814b08e1 Added dependencies for Debian in README 2024-12-08 00:13:18 -05:00
2f33669330 update readme 2024-12-08 22:13:46 +01:00
cee27356f6 reconfigure makefile 2024-12-06 09:18:40 +01:00
f358103f79 dependency ladder example 2024-11-25 14:28:59 +01:00
4c51ade750 PS: more Makefiles 2024-11-18 18:03:49 +01:00
0d2d466dac typo 2024-11-17 14:19:28 +01:00
8cc2a71235 note python makefile 2024-11-17 14:19:28 +01:00
18 changed files with 495 additions and 82 deletions

1
.gitignore vendored
View File

@@ -1,4 +1,3 @@
*.pdf
*.epub
Makefile
*.xcf

19
Makefile Normal file
View File

@@ -0,0 +1,19 @@
help: ## Print the help message
$(info Make a single pdf by hitting the tab key a lot)
@awk 'BEGIN {FS = ":.*?## "} /^[0-9a-zA-Z._-]+:.*?## / {printf "\033[36m%s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST) | \
sort | \
column -s ':' -t
# Search should not include slides separated by '***', as those are for mdp, not pandoc.
markdown != find slides/ -maxdepth 2 -type f -name "*.md" -exec grep -LF '***' '{}' ';'
pdfs = $(patsubst %.md, %.pdf, $(markdown))
$(pdfs): %.pdf: %.md
pandoc -t beamer -V theme:Warsaw -i $< -o $@
.PHONY: pdfs
pdfs: $(pdfs) ## Generate all pdfs (try `make -j pdfs`)
.PHONY: clean
clean: ## Delete all pdfs
$(RM) $(pdfs)

View File

@@ -1,5 +1,20 @@
# Radionice
First run ./configure to generate a Makefile using folders in this directory
Usage: `make`
## Dependecies:
### For Debian:
```bash
sudo apt update
sudo apt install pandoc
sudo apt install tikzit
```
### For Arch:
```bash
pacman -Sy pandoc texlive-binextra texlive-pictures texlive-latexrecommended texlive-fontsrecommended
```
Then you can run make to generate pdf beamer slides

13
configure vendored
View File

@@ -1,13 +0,0 @@
#!/usr/bin/bash
FOLDERS=$(cd slides/ ; echo *)
rm -f Makefile
echo -n 'all:' >> Makefile
for i in $FOLDERS ; do echo -n " $i.pdf" >> Makefile ; done
echo "" >> Makefile
for i in $FOLDERS ; do echo -e "$i.pdf:\n\tpandoc -t beamer -V theme:Warsaw -i slides/$i/$i.md -o slides/$i/$i.pdf\n" >> Makefile ; done
echo -ne "clean:\n\trm -f" >> Makefile
for i in $FOLDERS; do echo -n " slides/$i/$i.pdf" >> Makefile ; done
echo "" >> Makefile

View File

@@ -1,62 +0,0 @@
---
title:
- The Extended Mind and Licensing
author:
- Malin
theme:
- Warsaw
colortheme:
- orchid
---
# History
- Started with Clark and Chalmers
- [Chalmers at Ted](https://yt.artemislena.eu/watch?v=ksasPjrYFTg)
## Cyborg Manifesto
Or maybe Donna Haraway?
# Original Extended Minds
- Notebooks
- Counting on fingers
- Fil-o-fax
# Electronic Extended Minds
- Phones
- Computers
- Google?
- Note-apps?
# Intuition Pumps
- Proprioception and teeth
- The feeling of loss over theft
- Second brains
# Requirements
- 'to-hand'
- Repetition
- Locus
> Do you know where they live?
# Counter Requirements
> Skin and bone
Does *Ghost in the Shell* count?
# The Point and the Future
![robocop](robocop_valuse.png)
# End Notes
> Can you code in the sand?

View File

@@ -54,7 +54,7 @@ Does *Ghost in the Shell* count?
# The Point and the Future
![robocop](robocop_valuse.png)
![robocop](slides/extended_minds/robocop_values.png)
# End Notes

View File

Before

Width:  |  Height:  |  Size: 358 KiB

After

Width:  |  Height:  |  Size: 358 KiB

View File

@@ -0,0 +1,243 @@
# Shut Up!
```sh
echo blacklist pcspkr > /etc/modprobe.d/nobeep.conf
```
---
# Standard Visuals
- `cbonsai`
- `asciiquarium`
- `top`
* `ZH4W`
## Another Monday!
- `cal --reform julian`
## Weather
```sh
curl wttr.in
curl -s wttr.in/Београд
curl wttr.in/Moon
```
# `ls`
`ls -X`
---
# vim
- blog!
- seriously, just write
---
# `watch`
## Watch Differences
- `watch -d stat "$file"`
- `watch -d ip a`
## With Makefiles
```sh
watch --chgexit ping -c 1 dmz.rs && sleep 3 && unison -batch pir
```
## Check Progress
```sh
watch 'ls **/*.pdf | column'
```
---
# Watch Shell Scripts
```sh
watch -e ./script.sh
```
---
# Slow Down
```sh
function slow(){
ff=/tmp/bashpipe_$(date +%s)
mkfifo $ff 2>/dev/null
( cat $ff | perl -We 'use Time::HiRes;$|++;while(read(STDIN,$c,1)){Time::HiRes::usleep(15000);print $c;}' )& exec &> $ff
}
```
## Safety?
- no
## `htop`?
- no
## `speedtest`?
- **YES**
```
---
# Notes
```sh
alias no='$EDITOR .no.md'
function n(){
[ -z "$1" ] && cat .no.md || echo $@ >> .no.md
}
```
---
# URL Decoding
```bash
urldecode(){ : "${*//+/ }"; echo -e "${_//%/\\x}"; }
```
---
# Send Text
```sh
function sendtext(){
[ -f "$1" ] && \
cat "$1" | nc termbin.com 9999 || \
echo "$($1)" | nc termbin.com 9999
}
```
---
# Readline
Put this in `.inputrc`.
```text
set editing-mode vi
set keymap vi
```
---
# More Readline vi
```text
set editing-mode vi
set show-mode-in-prompt on
set vi-ins-mode-string " "
set vi-cmd-mode-string " "
set keymap vi
```
---
# More Readline
```text
set match-hidden-files off
set show-all-if-ambiguous on
set show-all-if-unmodified on
set colored-stats on
"\C- ": shell-expand-line
"\C-x": glob-expand-word
Control-g: "g\n"
Control-y: "| ccze\n"
Control-o: "\C-u lfcd\n\C-u"
Control-l: "\C-u clear -x && ls\n"
```
---
# Synchronization
## Syncthing
- 'Just works'
## Unison
- Fuck haskell
- But actually it's good
---
# `column`
```sh
column -ts: -H PW,GID,shell -N User,PW,UID,GID,Description,Home,shell /etc/passwd
```
##
```sh
column -J -ts: -H PW,GID,shell -N User,PW,UID,GID,Description,Home,shell /etc/passwd | jq -r .table.[].user
```
---
# Aliases
## b
```sh
b ()
{
eval "cd $(for d in $(seq 1 $1);
do
printf ../;
done)"
}
```
---
# `eval`
- Don't
---
# Clear Downloads
```sh
rm -rf ~/Downloads/*
echo "tmpfs $HOME/Downloads tmpfs defaults,size=1G 0 0" | sudo tee -a /etc/fstab
sudo systemctl daemon-reload # Only for systemd
sudo mount -a
mount | tail -1
```
# The Best: `yes`
- `yes`
- `yes no`

View File

@@ -0,0 +1,119 @@
# Generalizing Makefiles for All Occasions
- Rules are bad,
- standards are good,
- habits are better.
***
# General Standards
- `make help`
- `make check`
- `sudo make install`
**NB:** we separate `make` from `make install` so that the files are not build with the user `root` as the owner.
***
# Service Standards
- `make backup.tgz`
- `make install`
## Service Backups in Two Files
- `configs`: configuration files, all tracked in git.
- `store`: passwords and binary files, not tracked in git.
## New Abilities Unlocked
- Open Access Administration.
- Sharing admin configs with hacker spaces.
***
## BEHOLD: The Everything Makefile
***
```make
CONFIGS = $(patsubst /%,%,$(shell cat configs))
STORE = $(patsubst /%,%,$(shell cat store))
CP = mkdir -p $(dir $@) && cp -a
IGNORE_FILE = $(shell test -d .git/info && echo .git/info/exclude || echo .gitignore)
GIT_COMMIT = git commit -m"add $@" --no-gpg-sign --no-signoff
SELECTOR != command -v sk || command -v fzy || command -f fzf
.PHONY: all
all: init backup.tgz $(IGNORE_FILE)
backup.tgz: $(CONFIGS) $(STORE)
tar czf $@ $^
$(IGNORE_FILE): store
echo $(STORE) backup.tgz | tr ' ' '\n' > $@
.PHONY: init
init: configs store
configs store:
while con="$$(find /var /etc/ /sys/ -maxdepth 2 -mindepth 1 -type f 2>/dev/null | $(SELECTOR) -p "Select files for $@\nPress Ctrl+d once done")"; do \
echo "$$con"; \
done > $@
$(CONFIGS): %: /%
$(CP) $< $@
git add $@
$(GIT_COMMIT)
$(info made git commit for $@)
$(STORE): %: /%
$(CP) $< $@
clean:
$(RM) -r $(CONFIGS) $(STORE) backup.tgz
```
***
## Example: Soft Serve Makefile
<br>
The `configs` file:
```
/etc/soft-serve.conf
/var/lib/soft-serve/data/config.yaml
/var/lib/soft-serve/data/file
/etc/nginx/sites-enabled/soft.dmz.rs
/etc/nginx/sites-available/soft.dmz.rs
```
<br>
The `store` file:
```
/var/lib/soft-serve/data/lfs
/var/lib/soft-serve/data/repo
/var/lib/soft-serve/data/soft
/etc/letsencrypt/archive/soft
/etc/letsencrypt/live/soft.dm
/var/lib/soft-serve/data/ssh/
```
***
# Other Build Systems
> "*What if I want to use this other thing, instead of a makefile?"
***
# Other Build Systems (Sans Heresy)
> "*What if I want to use this other thing, instead of a makefile?"
- Easy: just use a Makefile.
```make
[ ... ]
public/: src/
python build_pages.py
```

View File

@@ -0,0 +1,34 @@
CONFIGS = $(patsubst /%,%,$(shell cat configs))
STORE = $(patsubst /%,%,$(shell cat store))
CP = mkdir -p $(dir $@) && cp -a
IGNORE_FILE = $(shell test -d .git/info && echo .git/info/exclude || echo .gitignore)
GIT_COMMIT = git commit -m"add $@" --no-gpg-sign --no-signoff
SELECTOR != command -v sk || command -v fzy || command -f fzf
.PHONY: all
all: init backup.tgz $(IGNORE_FILE)
backup.tgz: $(CONFIGS) $(STORE)
tar czf $@ $^
$(IGNORE_FILE): store
echo $(STORE) backup.tgz | tr ' ' '\n' > $@
.PHONY: init
init: configs store
configs store:
while con="$$(find /var /etc/ /sys/ -maxdepth 2 -mindepth 1 -type f 2>/dev/null | $(SELECTOR) -p "Select files for $@\nPress Ctrl+d once done")"; do \
echo "$$con"; \
done > $@
$(CONFIGS): %: /%
$(CP) $< $@
git add $@
$(GIT_COMMIT)
$(info made git commit for $@)
$(STORE): %: /%
$(CP) $< $@
clean:
$(RM) -r $(CONFIGS) $(STORE) backup.tgz

View File

@@ -0,0 +1 @@
*

View File

@@ -0,0 +1,16 @@
MONTHS != date +%B && date -d '1 month' +%B
IP != dig +short myip.opendns.com @resolver1.opendns.com
CITY != curl -s http://api.db-ip.com/v2/free/$(IP) | grep city | cut -d: -f2 | tr -d '"'
TITLES = $(MONTHS)
TITLES += $(CITY)
BOOKS = $(patsubst %,Books/%.md,$(TITLES))
$(BOOKS):
@mkdir -p $(@D)
fortune -l > $@
progs += $(BOOKS)
dross += Books/

View File

@@ -0,0 +1,10 @@
cows = $(patsubst Forts/fortune_%.md,Cows/cow-%.txt,$(wildcard Forts/fortune_*.md))
$(cows): Cows/cow-%.txt: Forts/fortune_%.md
@mkdir -p $(@D)
cat $< | cowsay > $@
progs += forts
progs += $(cows)
dross += Cows/

View File

@@ -0,0 +1,11 @@
fnums != seq 8 | sort -R | head -2
forts = $(patsubst %,Forts/fortune_%.md,$(fnums))
$(forts):
@mkdir -p $(@D)
fortune -s > $@
progs += $(forts)
dross += Forts/

View File

@@ -0,0 +1,14 @@
filter = $(shell cowsay -l | sort -R | head -1)
zoo = $(patsubst Forts/fortune_%.md,Zoo/animal-%.md,$(forts))
$(zoo): Zoo/animal-%.md: Forts/fortune_%.md
@mkdir -p $(@D)
echo '```' > $@
cat $< | cowsay -f $(filter) >> $@
echo '```' >> $@
progs += forts
progs += $(zoo)
dross += Zoo/

View File

@@ -2,8 +2,14 @@
forts/big_fort.txt: forts/short.txt forts/long.txt
cat $^ > $@
forts/:
mkdir $@
README.md:
echo "For an example makefile for python" > $@
echo "check out the nd6 dice-roller at" >> $@
echo "ssh -p 2222 soft.dmz.rs -t nd6" >> $@
forts/: README.md
mkdir -p $@
forts/short.txt: forts/
fortune -s > $@

View File

@@ -0,0 +1 @@
../PS/omni_makefile

View File

@@ -8,7 +8,7 @@ cargo build --release
install -pm755 target/release/tap /usr/local/bin/
```
*But you can't type this for run.*
*But you can't type this for each run.*
***