ending notes
This commit is contained in:
		| @@ -10,314 +10,4 @@ colortheme: | |||||||
| - orchid | - orchid | ||||||
| --- | --- | ||||||
|  |  | ||||||
| # Intro | (presentation in presentation.md) | ||||||
|  |  | ||||||
| The fundamental problem: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| git submodule update --init soundscape |  | ||||||
| cargo build --release |  | ||||||
| install -pm755 target/release/tap /usr/local/bin/ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| *But you can't type this for run.* |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
| ## First Solution |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| #!/bin/sh |  | ||||||
| git submodule update --init soundscape |  | ||||||
| cargo build --release |  | ||||||
| install -pm755 target/release/tap /usr/local/bin/ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| At this point, every test takes 10 minutes. |  | ||||||
|  |  | ||||||
| ## Second Solution |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| #!/bin/sh |  | ||||||
| [ -f soundscape/.git ] || git submodule update --init soundscape |  | ||||||
| [ -f target/release/tap ] || cargo build --release |  | ||||||
| [ -f target/release/tap ] || \ |  | ||||||
|     install -pm755 target/release/tap /usr/local/bin/ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
| # Makefile Solutions |  | ||||||
|  |  | ||||||
| - input, process, output. |  | ||||||
| - automatic idempotence |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| INSTALL_DIR = /usr/local/bin |  | ||||||
|  |  | ||||||
| soundscape/.git: |  | ||||||
|     git submodule update --init soundscape |  | ||||||
|  |  | ||||||
| /usr/local/bin/tap: target/release/tap |  | ||||||
| 	install -pm755 target/release/tap $(INSTALL_DIR) |  | ||||||
|  |  | ||||||
| target/release/tap: src soundscape/.git |  | ||||||
| 	cargo build --release |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
| # The Three Sigils |  | ||||||
|  |  | ||||||
| Readable, but slow: |  | ||||||
|  |  | ||||||
| ```make fort_1 |  | ||||||
| forts/big_fort.txt: forts/short.txt forts/long.txt |  | ||||||
| 	cat forts/short.txt forts/long.txt > forts/big_fort.txt |  | ||||||
|  |  | ||||||
| forts/: |  | ||||||
| 	mkdir forts |  | ||||||
|  |  | ||||||
| forts/short.txt: forts/ |  | ||||||
| 	fortune -s > forts/short.txt |  | ||||||
|  |  | ||||||
| forts/long.txt: forts/ |  | ||||||
| 	fortune -l > forts/long.txt |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
| | Make this | From That | From These | |  | ||||||
| |:---------:|:---------:|:----------:| |  | ||||||
| |  `$@`     |  `$<`     |   `$^`     | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ```make fort_2 |  | ||||||
| forts/big_fort.txt: forts/short.txt forts/long.txt |  | ||||||
| 		cat $^ > $@ |  | ||||||
|  |  | ||||||
| forts/: README.md |  | ||||||
| 	mkdir $@ |  | ||||||
| forts/short.txt: forts/ |  | ||||||
| 	fortune -s > $@ |  | ||||||
| forts/long.txt: forts/ |  | ||||||
| 	fortune -l > $@ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
| # Gotcha: Directories |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ```make fort_2 |  | ||||||
| forts/big_fort.txt: forts/short.txt forts/long.txt |  | ||||||
| 		cat $^ > $@ |  | ||||||
|  |  | ||||||
| forts/: README.md |  | ||||||
| 	mkdir $@ |  | ||||||
| forts/short.txt: forts/ |  | ||||||
| 	fortune -s > $@ |  | ||||||
| forts/long.txt: forts/ |  | ||||||
| 	fortune -l > $@ |  | ||||||
|  |  | ||||||
| README.md: |  | ||||||
|     echo "Find the fortunes in the fort dir" > $@ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
| # Variables |  | ||||||
|  |  | ||||||
| ```make vars |  | ||||||
| include /etc/os-release |  | ||||||
| DAY != date +%d |  | ||||||
| MESSAGE != fortune -s |  | ||||||
|  |  | ||||||
| motd_$(DAY): |  | ||||||
| 	$(info Placing message:) |  | ||||||
| 	echo "Welcome to $(NAME)" > $@ |  | ||||||
| 	echo $(MESSAGE) >> $@ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ### Gotcha: Hanging Quotes |  | ||||||
|  |  | ||||||
| > echo "Welcome to "Arch Linux"" |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
| ## Add New Variables |  | ||||||
|  |  | ||||||
| ```make |  | ||||||
| make -f vars -e MESSAGE="Red alert, all hands on deck!" |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ### Gotcha: Quote, or Risk Escape |  | ||||||
|  |  | ||||||
| ```make |  | ||||||
| make -f vars -e MESSAGE="<h1> HTML Headers </h1>" |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
| # Gotcha: Variables from Shell |  | ||||||
|  |  | ||||||
| This works: |  | ||||||
|  |  | ||||||
| ```make |  | ||||||
| file: |  | ||||||
|     $(info Hello $(USER)) |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ...but not this: |  | ||||||
|  |  | ||||||
| ```make |  | ||||||
| file: |  | ||||||
|     user=bob |  | ||||||
|     echo $user |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| Nor this: |  | ||||||
|  |  | ||||||
| ```make |  | ||||||
| numbers: |  | ||||||
|     for x in 1 2 3 4 5; do |  | ||||||
|         echo $x |  | ||||||
|     done > $@ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| Nor this: |  | ||||||
|  |  | ||||||
| ```make |  | ||||||
| numbers: |  | ||||||
|     for x in 1 2 3 4 5; do echo $x ; done > $@ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
| ### Ugly Fixes are Ugly |  | ||||||
|  |  | ||||||
| This works, but don't. |  | ||||||
|  |  | ||||||
| ```make |  | ||||||
| file: |  | ||||||
| 	for x in 1 2 ;\ |  | ||||||
| 			do echo $$x ;\ |  | ||||||
| 	done > $@ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # Phonies, and the Problems with Lies |  | ||||||
|  |  | ||||||
| ## Clean |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ```make |  | ||||||
| .PHONY: clean |  | ||||||
| clean: |  | ||||||
|     git clean -fdX |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## Gotcha: Recompiling without Changes |  | ||||||
|  |  | ||||||
| ```make |  | ||||||
| CHECKER = command -v |  | ||||||
| .PHONY: check |  | ||||||
| check: |  | ||||||
| 	$(CHECKER) fortune >/dev/null |  | ||||||
| 	$(CHECKER) cowsay >/dev/null |  | ||||||
|  |  | ||||||
| file: check # Needs a '|' |  | ||||||
| 	fortune | cowsay > $@ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Non-Compiling Checks |  | ||||||
|  |  | ||||||
| - `make` -n |  | ||||||
| - *Gotcha*: shell output variables. |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # The Fourth Sigil: `%` |  | ||||||
|  |  | ||||||
| Create standardized rules with `%`. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ```make rules |  | ||||||
| CP = ln -f |  | ||||||
|  |  | ||||||
| output: pngs/ldap.png |  | ||||||
|  |  | ||||||
| jpgs/ldap.jpg: ../../ldap/ldap.jpg |  | ||||||
| 	mkdir -p $(dir $@) |  | ||||||
| 	$(CP) $< $@ |  | ||||||
|  |  | ||||||
| pngs/%.png: jpgs/%.jpg |  | ||||||
| 	mkdir -p $(dir $@) |  | ||||||
| 	$(info making $(@F) in $(@D)) |  | ||||||
| 	magick $< $@ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
| # Bling: makefile2graph |  | ||||||
|  |  | ||||||
| ```graph |  | ||||||
|  |  | ||||||
| ┌────────────────┐     ┌────────────────────┐ |  | ||||||
| │ forts/long.txt │ ◀── │       forts/       │ |  | ||||||
| └────────────────┘     └────────────────────┘ |  | ||||||
|   │                      │ |  | ||||||
|   │                      │ |  | ||||||
|   │                      ▼ |  | ||||||
|   │                    ┌────────────────────┐ |  | ||||||
|   │                    │  forts/short.txt   │ |  | ||||||
|   │                    └────────────────────┘ |  | ||||||
|   │                      │ |  | ||||||
|   │                      │ |  | ||||||
|   │                      ▼ |  | ||||||
|   │                    ┌────────────────────┐ |  | ||||||
|   └──────────────────▶ │ forts/big_fort.txt │ |  | ||||||
|                        └────────────────────┘ |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ### Gotcha: The Binary is Called `make2graph` |  | ||||||
|  |  | ||||||
| - Works with GUI tools maybe, IDK, I don't use Windows. |  | ||||||
| - Some systems can use `graph-easy`, but it's outdated. |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
| # Patsubst and Wildcards |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ```make pats |  | ||||||
| IMAGES = $(wildcard jpgs/*) |  | ||||||
| COL = $(patsubst jpgs/%,collection/%,$(IMAGES)) |  | ||||||
|  |  | ||||||
| .PHONY: show |  | ||||||
| show: |  | ||||||
| 	$(info IMAGES is $(IMAGES)) |  | ||||||
| 	$(info Col is $(COL)) |  | ||||||
|  |  | ||||||
| .PHONY: output |  | ||||||
| output: $(COL) |  | ||||||
|  |  | ||||||
| collection/%.jpg: jpgs/%.jpg |  | ||||||
| 	mkdir -p $(@D) |  | ||||||
| 	cp $< $@ |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| *** |  | ||||||
|  |  | ||||||
| # Use Cases |  | ||||||
|  |  | ||||||
| - Backups |  | ||||||
| - Making Websites |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										314
									
								
								slides/makefiles/presentation.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										314
									
								
								slides/makefiles/presentation.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,314 @@ | |||||||
|  | # Intro | ||||||
|  |  | ||||||
|  | The fundamental problem: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | git submodule update --init soundscape | ||||||
|  | cargo build --release | ||||||
|  | install -pm755 target/release/tap /usr/local/bin/ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *But you can't type this for run.* | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | ## First Solution | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | #!/bin/sh | ||||||
|  | git submodule update --init soundscape | ||||||
|  | cargo build --release | ||||||
|  | install -pm755 target/release/tap /usr/local/bin/ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | At this point, every test takes 10 minutes. | ||||||
|  |  | ||||||
|  | ## Second Solution | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | #!/bin/sh | ||||||
|  | [ -f soundscape/.git ] || git submodule update --init soundscape | ||||||
|  | [ -f target/release/tap ] || cargo build --release | ||||||
|  | [ -f target/release/tap ] || \ | ||||||
|  |     install -pm755 target/release/tap /usr/local/bin/ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | # Makefile Solutions | ||||||
|  |  | ||||||
|  | - input, process, output. | ||||||
|  | - automatic idempotence | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | INSTALL_DIR = /usr/local/bin | ||||||
|  |  | ||||||
|  | soundscape/.git: | ||||||
|  |     git submodule update --init soundscape | ||||||
|  |  | ||||||
|  | /usr/local/bin/tap: target/release/tap | ||||||
|  | 	install -pm755 target/release/tap $(INSTALL_DIR) | ||||||
|  |  | ||||||
|  | target/release/tap: src soundscape/.git | ||||||
|  | 	cargo build --release | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | # The Three Sigils | ||||||
|  |  | ||||||
|  | Readable, but slow: | ||||||
|  |  | ||||||
|  | ```make fort_1 | ||||||
|  | forts/big_fort.txt: forts/short.txt forts/long.txt | ||||||
|  | 	cat forts/short.txt forts/long.txt > forts/big_fort.txt | ||||||
|  |  | ||||||
|  | forts/: | ||||||
|  | 	mkdir forts | ||||||
|  |  | ||||||
|  | forts/short.txt: forts/ | ||||||
|  | 	fortune -s > forts/short.txt | ||||||
|  |  | ||||||
|  | forts/long.txt: forts/ | ||||||
|  | 	fortune -l > forts/long.txt | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | | Make this | From That | From These | | ||||||
|  | |:---------:|:---------:|:----------:| | ||||||
|  | |  `$@`     |  `$<`     |   `$^`     | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ```make fort_2 | ||||||
|  | forts/big_fort.txt: forts/short.txt forts/long.txt | ||||||
|  | 		cat $^ > $@ | ||||||
|  |  | ||||||
|  | forts/: README.md | ||||||
|  | 	mkdir $@ | ||||||
|  | forts/short.txt: forts/ | ||||||
|  | 	fortune -s > $@ | ||||||
|  | forts/long.txt: forts/ | ||||||
|  | 	fortune -l > $@ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | # Gotcha: Directories | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ```make fort_2 | ||||||
|  | forts/big_fort.txt: forts/short.txt forts/long.txt | ||||||
|  | 		cat $^ > $@ | ||||||
|  |  | ||||||
|  | forts/: README.md | ||||||
|  | 	mkdir $@ | ||||||
|  | forts/short.txt: forts/ | ||||||
|  | 	fortune -s > $@ | ||||||
|  | forts/long.txt: forts/ | ||||||
|  | 	fortune -l > $@ | ||||||
|  |  | ||||||
|  | README.md: | ||||||
|  |     echo "Find the fortunes in the fort dir" > $@ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | # Variables | ||||||
|  |  | ||||||
|  | ```make vars | ||||||
|  | include /etc/os-release | ||||||
|  | DAY != date +%d | ||||||
|  | MESSAGE != fortune -s | ||||||
|  |  | ||||||
|  | motd_$(DAY): | ||||||
|  | 	$(info Placing message:) | ||||||
|  | 	echo "Welcome to $(NAME)" > $@ | ||||||
|  | 	echo $(MESSAGE) >> $@ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Gotcha: Hanging Quotes | ||||||
|  |  | ||||||
|  | > echo "Welcome to "Arch Linux"" | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | ## Add New Variables | ||||||
|  |  | ||||||
|  | ```make | ||||||
|  | make -f vars -e MESSAGE="Red alert, all hands on deck!" | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Gotcha: Quote, or Risk Escape | ||||||
|  |  | ||||||
|  | ```make | ||||||
|  | make -f vars -e MESSAGE="<h1> HTML Headers </h1>" | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | # Gotcha: Variables from Shell | ||||||
|  |  | ||||||
|  | This works: | ||||||
|  |  | ||||||
|  | ```make | ||||||
|  | file: | ||||||
|  |     $(info Hello $(USER)) | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ...but not this: | ||||||
|  |  | ||||||
|  | ```make | ||||||
|  | file: | ||||||
|  |     user=bob | ||||||
|  |     echo $user | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Nor this: | ||||||
|  |  | ||||||
|  | ```make | ||||||
|  | numbers: | ||||||
|  |     for x in 1 2 3 4 5; do | ||||||
|  |         echo $x | ||||||
|  |     done > $@ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Nor this: | ||||||
|  |  | ||||||
|  | ```make | ||||||
|  | numbers: | ||||||
|  |     for x in 1 2 3 4 5; do echo $x ; done > $@ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | ### Ugly Fixes are Ugly | ||||||
|  |  | ||||||
|  | This works, but don't. | ||||||
|  |  | ||||||
|  | ```make | ||||||
|  | file: | ||||||
|  | 	for x in 1 2 ;\ | ||||||
|  | 			do echo $$x ;\ | ||||||
|  | 	done > $@ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Phonies, and the Problems with Lies | ||||||
|  |  | ||||||
|  | ## Clean | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ```make | ||||||
|  | .PHONY: clean | ||||||
|  | clean: | ||||||
|  |     git clean -fdX | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## Gotcha: Recompiling without Changes | ||||||
|  |  | ||||||
|  | ```make | ||||||
|  | CHECKER = command -v | ||||||
|  | .PHONY: check | ||||||
|  | check: | ||||||
|  | 	$(CHECKER) fortune >/dev/null | ||||||
|  | 	$(CHECKER) cowsay >/dev/null | ||||||
|  |  | ||||||
|  | file: check # Needs a '|' | ||||||
|  | 	fortune | cowsay > $@ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Non-Compiling Checks | ||||||
|  |  | ||||||
|  | - `make` -n | ||||||
|  | - *Gotcha*: shell output variables. | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # The Fourth Sigil: `%` | ||||||
|  |  | ||||||
|  | Create standardized rules with `%`. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ```make rules | ||||||
|  | CP = ln -f | ||||||
|  |  | ||||||
|  | output: pngs/ldap.png | ||||||
|  |  | ||||||
|  | jpgs/ldap.jpg: ../../ldap/ldap.jpg | ||||||
|  | 	mkdir -p $(dir $@) | ||||||
|  | 	$(CP) $< $@ | ||||||
|  |  | ||||||
|  | pngs/%.png: jpgs/%.jpg | ||||||
|  | 	mkdir -p $(dir $@) | ||||||
|  | 	$(info making $(@F) in $(@D)) | ||||||
|  | 	magick $< $@ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | # Bling: makefile2graph | ||||||
|  |  | ||||||
|  | ```graph | ||||||
|  |  | ||||||
|  | ┌────────────────┐     ┌────────────────────┐ | ||||||
|  | │ forts/long.txt │ ◀── │       forts/       │ | ||||||
|  | └────────────────┘     └────────────────────┘ | ||||||
|  |   │                      │ | ||||||
|  |   │                      │ | ||||||
|  |   │                      ▼ | ||||||
|  |   │                    ┌────────────────────┐ | ||||||
|  |   │                    │  forts/short.txt   │ | ||||||
|  |   │                    └────────────────────┘ | ||||||
|  |   │                      │ | ||||||
|  |   │                      │ | ||||||
|  |   │                      ▼ | ||||||
|  |   │                    ┌────────────────────┐ | ||||||
|  |   └──────────────────▶ │ forts/big_fort.txt │ | ||||||
|  |                        └────────────────────┘ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Gotcha: The Binary is Called `make2graph` | ||||||
|  |  | ||||||
|  | - Works with GUI tools maybe, IDK, I don't use Windows. | ||||||
|  | - Some systems can use `graph-easy`, but it's outdated. | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | # Patsubst and Wildcards | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ```make pats | ||||||
|  | IMAGES = $(wildcard jpgs/*) | ||||||
|  | COL = $(patsubst jpgs/%,collection/%,$(IMAGES)) | ||||||
|  |  | ||||||
|  | .PHONY: show | ||||||
|  | show: | ||||||
|  | 	$(info IMAGES is $(IMAGES)) | ||||||
|  | 	$(info Col is $(COL)) | ||||||
|  |  | ||||||
|  | .PHONY: output | ||||||
|  | output: $(COL) | ||||||
|  |  | ||||||
|  | collection/%.jpg: jpgs/%.jpg | ||||||
|  | 	mkdir -p $(@D) | ||||||
|  | 	cp $< $@ | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | # Use Cases | ||||||
|  |  | ||||||
|  | - Backups | ||||||
|  | - Making Websites | ||||||
|  |     * `git clone https://gitlab.com/bindrpg/blag` | ||||||
|  | - `NOT installations` | ||||||
|  |     - ...but maybe installations? | ||||||
|  | - Setting | ||||||
		Reference in New Issue
	
	Block a user