Massaging the current vimwiki pages into md suitable for the new hugo setup

This commit is contained in:
David Thurstenson 2021-09-25 23:58:15 -05:00
parent e254a287c0
commit 3322916ce8
36 changed files with 514 additions and 581 deletions

5
content/about/_index.md Normal file
View File

@ -0,0 +1,5 @@
---
title: "About"
description: "Contact info, portfolio, etc"
draft: false
---

19
content/about/contact.md Normal file
View File

@ -0,0 +1,19 @@
---
title: "Contact Info"
date: 2021-9-25
draft: false
---
Listed in order of reliability:
| Email | thurstylark@gmail.com |
| Matrix | @thurstylark:thurstylark.com |
| IRC libera.chat^1^ | thurstylark |
| IRC oftc.net^1^ | thurstylark |
| Discord | Thurstylark#0472 |
| Signal | (ask for number via Matrix) |
| Twitter | @thurstylark |
1: ~~Since the formation of libera.chat, my presence on freenode.net is purely to squat on my account and nicks so they may not be misused.~~ Never mind, [Freenode decided to shit the bed even harder](https://www.reddit.com/r/irc/comments/o01tmv/freenode_wipes_old_database_and_starts_over/), so I no longer have a presence there. Please use libera.chat or oftc.net instead.

View File

@ -0,0 +1,19 @@
---
title: "Portfolio"
date: 2021-9-25
draft: false
---
## Where can I find your work?
- [wiki.thurstylark.com](https://wiki.thurstylark.com)
- [git.thurstylark.com](https://git.thurstylark.com)
- [Github](https://github.com/thurstylark)
- [Twitch](https://twitch.tv/thurstylark)
- [YouTube](https://www.youtube.com/channel/UCJwFowK8HKYcgD7GVYiz8jA)
## Anything Else?
Probably not, but I go by Thurstylark everywhere, so get to googlin'!

16
content/about/resume.md Normal file
View File

@ -0,0 +1,16 @@
---
title: "Resume"
date: 2021-9-25
draft: false
---
## Resume 403: Forbidden
Hi,
Thanks for visiting, but I have decided against providing a traditional resume at this time.
For examples of my work, feel free to take a look at my [Portfolio](../portfolio/). Of special note is my [Twitch channel](https://twitch.tv/thurstylark), where you can watch me work out loud, in real-time. These resources will do a much better job of communicating my abilities than any work history document ever could.
If you require additional information that isn't covered by the above resources, please reach out to me using one of the methods listed on the [Contact Info](../contact/) page.

View File

@ -1,92 +0,0 @@
# Formatting Cheat Sheet
# Header1
## Header2
### Header3
-bold* -- bold text
_italic_ -- italic text
~~strikeout~~ -- strikeout text
`code without syntax`
super^script^
sub,,script,,
[wiki link](wiki link.md) -- wiki link
[description](wiki link) -- wiki link with description
## Lists
- bullet list item 1
- bullet list item 2
- bullet list item 3
- bullet list item 4
- bullet list item 5
- bullet list item 6
- bullet list item 7
- bullet list item 8
- bullet list item 9
1. numbered list item 1
2. numbered list item 2
a) numbered list item 3
b) numbered list item 4
- [ ] Unchecked item 1
- [X] Checked item 2
## Definitions
Term 1:: Definition 1
Term 2::
:: Definition 2
:: Definition 3
## Tables
| Column 1 | Column 2 | Column 3 |
|-----------------------|----------------------------------------------------------------------------------|----------|
| Data 1 | Data 2 | Data 3 |
| this takes rows below | this takes the next collumn as well and will not wrap this text to the next line | > |
| \/ | Data 5 | > |
| Data 4 | | |
## Preformatted Text
Without syntax highlighting
```
Here is some text
there is some text
```
With syntax highlighting
```prettyprint lang-python linenums >
def hello(world):
for x in range(10):
print("Hello {0} number {1}".format(world, x))
```
## Blockquotes
Text that starts with 4 or more spaces is a Blockquote.
It won't be highlighted in Vim, but will be styled
on the HTML site.
## Comments
A line that starts with `%%` won't show up in the HTML page
<!-- This is a comment and will be skipped when rendering to HTML -->
## Horizontal line
----

View File

@ -1,14 +0,0 @@
---
title: "Contact Info"
description: ""
author: "Thurstylark"
date: 2021-9-25
draft: true
---
| Service | |
|----------------|-----------------------|
| Email | thurstylark@gmail.com |
| IRC (Freenode) | thurstylark |
| Twitter | @thurstylark |

View File

@ -1,44 +1,41 @@
--- ---
title: "Bashrc" title: "Bashrc"
description: "Details about my shell configuration" description: "Details about how I configure my shell"
author: "Thurstylark" author: "Thurstylark"
date: 2021-09-25 date: 2021-9-25
draft: false draft: false
--- ---
# Bashrc
Source: https://git.thurstylark.com/vcsh/bashrc.git Source: https://git.thurstylark.com/vcsh/bashrc.git
## Profile ## Profile
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bash_profile
Bash chooses which dotfile to source based on how it gets run. If starting from a login shell, `~/.bash_profile` will get sourced, but if there's not a command in there to source your `~/.bashrc`, you may find yourself having to `exec bash` after starting bash. This can be fixed by adding the following line to your `~/.bash_profile`: Bash chooses which dotfile to source based on how it gets run. If starting from a login shell, `~/.bash_profile` will get sourced, but if there's not a command in there to source your `~/.bashrc`, you may find yourself having to `exec bash` after starting bash. This can be fixed by adding the following line to your `~/.bash_profile`:
```prettyprint ```
[ -f ~/.bashrc ]( -f ~/.bashrc .md) && . ~/.bashrc [ -f ~/.bashrc ]( -f ~/.bashrc .md) && . ~/.bashrc
``` ```
I also use `~/.bash_profile` for setting numlock while in a tty: I also use `~/.bash_profile` for setting numlock while in a tty:
```prettyprint ```
case $(tty) in /dev/tty[0-9]*) case $(tty) in /dev/tty[0-9]*)
setleds -D +num * (numlock for X is set in ~/.xinitrc) setleds -D +num * (numlock for X is set in ~/.xinitrc)
;; ;;
esac esac
``` ```
The last thing of note in my `~/.bash_profile` is a warning:
```prettyprint
- Temporary fix for a systemd bug related to systemd --user timers that run on login
[ -z "$DBUS_SESSION_BUS_ADDRESS" ]( -z "$DBUS_SESSION_BUS_ADDRESS" .md) && printf "%bWARNING: \$DBUS_SESSION_BUS_ADDRESS is unset! %b\n" "$(tput bold)$(tput setab 1)" "$(tput sgr0)"
```
---- ----
## Main bashrc ## Main bashrc
Things started getting a little too expansive, so I split off relevant sections into their own files. Now all my individual utilities have their own file, making troubleshooting and adding functionality much easier. You can find info for each file and what it does in its own section on this page. https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc
Things started getting a little too expansive for a single file, so I split off relevant sections into their own files. Now all my individual utilities have their own file, making troubleshooting and adding functionality much easier. You can find info for each file and what it does in its own section on this page.
### General config ### General config
@ -46,22 +43,22 @@ I'm not going in to detail about every line, but I'll hilight the important part
First off, if we're not running bash interactively, there's no use for any of the rest of this, so just skip it. First off, if we're not running bash interactively, there's no use for any of the rest of this, so just skip it.
```prettyprint ```
- If not running interactively, don't do anything - If not running interactively, don't do anything
[ $- != *i* ]( $- != *i* .md) && return [ $- != *i* ]( $- != *i* .md) && return
``` ```
Another cool option is actually built in to bash: If you call for a directory without any command before it, just `cd` into that directory. Another cool option is actually built in to bash: If you call for a directory without any command before it, just `cd` into that directory.
```prettyprint ```
- If a directory is given without any command, CD into it. - If a directory is given without any command, CD into it.
shopt -s autocd shopt -s autocd
``` ```
This is where all the other utilities, aliases, and functions get pulled in. Anything in `~/.bashrc.d/` ending in `.sh` will get pulled in. This is where all the other utilities, aliases, and functions get pulled in. Anything in `~/.bashrc.d/` ending in `.bash` will get pulled in.
```prettyprint ```
for f in ~/.bashrc.d/*.sh; do source "$f"; done for f in ~/.bashrc.d/*.bash; do source "$f"; done
``` ```
This also removes the need for the local bashrc sourcing that I [had in this file previously](https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc?id=30c53ca7224b583ed5068038b697653810e3b94b#n45). If that functionality is needed, simply make a new script in `~/.bashrc.d/` and don't track it with `vcsh`. This also removes the need for the local bashrc sourcing that I [had in this file previously](https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc?id=30c53ca7224b583ed5068038b697653810e3b94b#n45). If that functionality is needed, simply make a new script in `~/.bashrc.d/` and don't track it with `vcsh`.
@ -72,274 +69,158 @@ Ordering can be done by adding numbers to the beginning of filenames. For exampl
## Prompt ## Prompt
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/prompt.sh https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/12-prompt.bash
I originally built my prompt using http://bashrcgenerator.com and, while it's a nice tool for visually building a prompt, it has several limitations on what you're able to create with it. But more importantly to me, it generates a rediculously long string, defines and resets color for every single character, uses both a color and bold escape sequence to use light/bright colors, mixes raw escape sequences and subshells running tput, and as a result is utterly unreadable and unmaintainable. I originally built my prompt using http://bashrcgenerator.com and, while it's a nice tool for visually building a prompt, it has several limitations on what you're able to create with it. But more importantly to me, it generates a rediculously long string, defines and resets color for every single character, uses both a color and bold escape sequence to use light/bright colors, mixes raw escape sequences and subshells running tput, and as a result is utterly unreadable and unmaintainable.
So, I replaced it: So, I replaced it with my own setup that generates the needed color codes on the fly to improve readability. I intentionally put everything in a function and call it immediately so I may use local vars for the color definitions. I didn't really want to leave them around just in case.
```prettyprint I'm not completely happy with this solution because it causes each of the tput subshells to execute each time the prompt is printed. I would like to change this to quash the extra output this causes when using `bash -x`, but I would also like to find a solution that minimizes so many subshells just for a prompt, but avoid hard-coding colors so it can be general enough to support any env in which it may be used.
promptsetup() {
- Color definitions for prompt
local fg_brightred='\[$(tput setaf 9)\]'
local fg_blue='\[$(tput setaf 4)\]'
local fg_magenta='\[$(tput setaf 13)\]'
local fg_cyan='\[$(tput setaf 6)\]'
local fg_brightcyan='\[$(tput setaf 14)\]'
local fg_green='\[$(tput setaf 2)\]'
local reset='\[$(tput sgr0)\]'
local hostname='\h'
local mixin
- [hh:mm][username@hostname pwd]$ ----
- Remotely, hostname is red. ## Environment
[ -n "$SSH_CLIENT" ] && hostname="${fg_brightred}\h${reset}"
- If in a python venv, add venv name in green. https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/11-env.bash
[ -n "$VIRTUAL_ENV" ] && mixin=" ${fg_green}$(basename "$VIRTUAL_ENV")${reset}"
- If in a vcsh repo env, add repo name in magenta. Here is where I set a few environment variables that are useful in one way or another, such as `HISTCONTROL`, `EDITOR`, `LS_COLORS`, and `LIBVIRT_DEFAULT_URI`.
[ -n "$VCSH_REPO_NAME" ] && mixin=" ${fg_magenta}$VCSH_REPO_NAME${reset}"
PS1="${fg_blue}[\A]${fg_cyan}[${fg_brightcyan}\u${fg_cyan}@${hostname}${mixin} ${fg_cyan}\W]${reset}\$ "
}
promptsetup
```
I intentionally put everything in a function and call it immediately so I may use local vars for the color definitions. I didn't really want to leave them around just in case.
---- ----
## Aliases ## Aliases
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/alias.sh https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/10-alias.bash
Most of these are just creature comforts and fairly self-explanitory: Most of these are simple creature comforts and are commented with sufficient explanation.
```prettyprint ----
##* ALIASES ###
- Colorize all `ls` output: ## Pkgfile as `command_not_found_handle()`
alias ls='ls -AF --color=auto'
- Map "la" to `ls -la` https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/pkgfile.bash
alias la='ls -laFh --color=auto'
- Colorize `grep` output This sets up `bash`'s `command_not_found_handle()` functionality so that when a command cannot be found in `PATH`, it will use `pkgfile` to check for that command in its databases, which are derived from the [same databases](https://wiki.archlinux.org/title/Pacman#Search_for_a_package_that_contains_a_specific_file) that `pacman -F` uses.
alias grep='grep --color=auto'
- Change layout of lsblk to include FSTYPE and remove MAJ:MIN, RM, and RO collumns. To keep these databases updated, `pkgfile` ships [a systemd timer](https://wiki.archlinux.org/title/Pkgfile#Automatic_updates) that runs the update command daily.
alias lsblk='lsblk -o NAME,FSTYPE,SIZE,TYPE,MOUNTPOINT'
- Always use sudo when using nmap.
alias nmap='sudo -E nmap'
- Switch $TERM temporarily (for logging into machines that don't have tmux-256color terminfo)
alias screenterm='TERM=screen-256color'
```
---- ----
## Colored man Pages ## Colored man Pages
Some color changes in `man` are almost essential for readability for me, so here's how I achieve that: https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/colored-man-pages.bash
```prettyprint Some color changes in `man` are almost essential for readability for me, so I define my own.
- Enables colored Man pages:
man() {
env LESS_TERMCAP_mb=$'\E[01;31m' \
LESS_TERMCAP_md=$'\E[01;38;5;74m' \
LESS_TERMCAP_me=$'\E[0m' \
LESS_TERMCAP_se=$'\E[0m' \
LESS_TERMCAP_so=$'\E[38;5;246m' \
LESS_TERMCAP_ue=$'\E[0m' \
LESS_TERMCAP_us=$'\E[04;38;5;146m' \
man "$@"
}
```
This can also be done for any similar program that uses `less` as its pager. This can be replicated for any similar program that uses `less` as its pager.
----
## Get Dell Service Tag
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/getdst.sh
I work with Dell machines a lot, and when dealing with hardware problems, it's nice to have the service tag handy. Lucky for me, the service tag is easily retrieveable using `dmidecode(1)`, so I made a function for it.
```prettyprint
getdst() {
if [ "$1" = "-l" ]( "$1" = "-l" .md); then
printf "http://www.dell.com/support/home/us/en/04/product-support/servicetag/%s/configuration\n" "$(getdst)"
else
sudo dmidecode -s system-serial-number
fi
}
```
As an added bonus, the `-l` option will print the url for that product's support page.
---- ----
## Screenshot ## Screenshot
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/shot.sh https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/shot.bash
This function wraps `maim(1)` and `fb(1)` to simplify my most used options. It uses maim to capture either the full screen, the active window, or a mouse selection to a file, or directly to a pastebin. `shot()` used to be much more complicated, but after moving to sway, I found that I couldn't be arsed to reimplement all of its former functionality. It turned out that the majority of the time, I want to select a region, and put it on stdout to be dealt with how I please. If I find that full-screen or all-screen screenshots are more useful to me in the future, I'll cross that bridge when I come to it.
```prettyprint
shot() {
- Usage: shot XY
local destdir="$HOME/Pictures/screenshots"
local fname
local pb="fb"
local paste msgt msgd opts
fname="shot-$(date +%F-%T).png"
if [ -z "$1" ]; then
printf "
Usage: shot XY
X: Target
Y: Destination
Valid Targets:
w Active Window
a All displays
s Mouse Selection
Valid Destinations:
f Save to file (defined in function)
p Upload to a pastebin (defined in function)
"
return
fi
- X: What to capture
case ${1:0:1} in
- Active window
w) printf "Focus target window now...\n"
opts="-i $(xdotool getactivewindow)"
msgt="active window"
;;
- All
a) msgt="all displays"
;;
- Mouse selection
s) opts="-s --noopengl"
msgt="mouse selection"
;;
-) printf "Invalid target: %s\n" "${1:0:1}"
return
;;
esac
- Y: Where to put the result
case ${1:1:1} in
- Save to file
f) msgd="file: $destdir/$fname"
;;
- Post to a pastebin
p) destdir=$destdir/pasted
msgd="pastebin"
paste=1;;
-) printf "Invalid destination: %s\n" "${1:1:1}"
return
;;
esac
- Make sure destination directory will exist
[ ! -d "$destdir" ]( ! -d "$destdir" .md) && mkdir -p "$destdir"
local fpath="${destdir}/${fname}"
- If target is active window, give a 5 second countdown before running maim
[ "$msgt" = "active window" ]( "$msgt" = "active window" .md) && countdown 5
maim "$opts" "$fpath"
printf "Captured %s -> %s\n" "$msgt" "$msgd"
- If destination is a pastebin, do the needful
[ "$paste" ]( "$paste" .md) && $pb "$fpath"
}
```
This probably isn't the most robust solution, but it works pretty well. Patches welcome.
---- ----
## Countdown ## Countdown
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/countdown.sh https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/countdown.bash
Found this little function when I wanted to add functionality to `shot()`. It takes an integer as an argument, then counts down that number of seconds visually. Found this little function when I wanted to add functionality to `shot()`. It takes an integer as an argument, then counts down that number of seconds visually.
```prettyprint I no longer use `countdown()` from `shot()` directly, but sometimes will in some sort of pipeline in tandem with it. I found that I want that flexibility out in the open for me to use instead of packed behind a bespoke ui for little benefit.
countdown() {
if [ -z "$1" ]; then
printf "
countdown: Count down while printing progress on the terminal
Usage: countdown <seconds>
"
fi
local secs="$1"
while [ "$secs" -gt 0 ]; do
echo -ne "$secs\033[0K\r"
sleep 1
: $((secs--))
done
}
```
This probably isn't the sanest or safest solution to the problem, but it gets the job done. Patches welcome.
---- ----
## FontFind ## cmdcopy
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/fontfind.sh https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/cmdcopy.bash
Sometimes you just need to figure out what font provides a specific character. This function provides that solution: This tool runs the specified command, capturing `stdout` and `stderr`, adds the specified command to the beginning of the output, and sends the result to stdout. The output of this command should be suitable to pipe directly into a paste service such as [ix.io](http://ix.io) when seeking support via IRC or other text-based method.
```prettyprint ----
fontfind() {
if [ ${#1} -gt 1 ]( -z $1 |); then ## fbc
printf "E: only one character accepted"
fi https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/fbc.bash
local glyph=$1
FC_DEBUG=4 pango-view -qt "$glyph" 2>&1 | awk -F \" '/family: / { m = $2 } END { print m }' In a similar vein to `cmdcopy()`, this tool runs the specified command, pipes `stdout` and `stderr` directly to [fb-client](https://git.server-speed.net/users/flo/fb/), and sets the specified command as the name of the paste using `-n`.
}
```
---- ----
## Vactivate ## Vactivate
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/vactivate.sh https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/vactivate.bash
I started needing more than one python virtualenv, and I wanted easy access to my own specific file structure. Additionally, I wanted the ability to deactivate the venv like I would exit a child shell. This is the solution that I came up with: I started needing more than one python virtualenv, and I wanted easy access to my own specific file structure. Additionally, I wanted the ability to deactivate the venv like I would exit a child shell. This is the solution that I came up with.
```prettyprint A caveat to this is that the prompt modification that venv usually applies is not available using this method. If a prompt modification is desired, it needs to be taken care of elsewhere. I take care of it in my prompt setup detailed [here](https://wiki.thurstylark.com/Bashrc.html#Bashrc-Prompt).
vactivate() {
local path=~/.venv/$1
if [ ! -d $path ]( ! -d $path .md); then ----
python -m venv $path --prompt "venv: $1"
fi
source $path/bin/activate; bash; deactivate
}
```
A caveat to this is that the prompt modification that venv usually applies is not available using this method. If a prompt modification is desired, it needs to be taken care of elsewhere. I take care of it in my prompt setup detailed [here](https://wiki.thurstylark.com/Bashrc.html#Prompt). ## FontFind
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/fontfind.bash
Sometimes you just need to figure out what font provides a specific character. This function provides that solution.
----
## Resolve IP Addresses to MAC Addresses with `arping`
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/arpresolve.bash
This utility comes in handy when I just want a MAC address as a string without having to dig through `nmap` output for it.
Unfortunately not all devices are cooperative to this method, so ymmv.
----
## Get Dell Service Tag
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/getdst.bash
I work with Dell machines a lot, and when dealing with hardware problems, it's nice to have the service tag handy. Lucky for me, the service tag is easily retrieveable using `dmidecode(1)`, so I made a function for it.
As an added bonus, the `-l` option will print the url for that product's support page.
----
## `sing()` and `note2freq()`
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/sing.bash
I was having trouble writing music scripts for the pcspkr because all the examples that I could find only used frequency numbers as arguments to `beep`, and it was difficult to map frequency numbers to musical note letters in the process of making my own tunes. `note2freq()` solves this issue by taking a musical note in the form of `<letter>[accidental]<octave>`, where:
- `<letter>` is one of `A` through `G`
- `[accidental]` is one of:
- `b` for flat
- `s` for sharp
- omitted for a natural note
- `<octave>` is `1` through `7`
`sing()` takes a list of notes in this same form along with note length in ms, uses `note2freq()` to translate each one to a frequency number and constructs a string of arguments that `beep` can use to play the entire tune in one go.
Both of these in tandem make beep tune writing way easier.
----
## Triumph
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/triumph.bash
This function is both an example of how `sing()` is used, as well as a tool in its own right.
I wanted a script that played a tune after a long-running script, but play different tunes based on the exit code of the preceding command. This was my cute Portal-themed implementation of that idea.
Proper tune selection depends on `triumph()` being able to read the exit code from the previous command. For example, for usage in a one-liner script, use something similar to `<targetcmd>; triumph`. Avoid using `||` or `&&` in place of the `;`.
---- ----
## Weechat ## Weechat
https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/weechat.sh https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc.d/weechat.bash
See: [Weechat](Weechat.md). See: [Weechat](eechat.md).

View File

@ -1,4 +1,12 @@
# Chrome Search Shortcuts ---
title: "Browser search bar shortcuts"
description: "Macros for the speedy searching"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
| Service | Trigger | URL | Description | | Service | Trigger | URL | Description |
|-----------------------------|---------|-----------------------------------------------------------------------------|-------------------------------------------------------| |-----------------------------|---------|-----------------------------------------------------------------------------|-------------------------------------------------------|

View File

@ -1,31 +1,37 @@
# SSH ---
title: "OpenSSH"
description: "Creature comfort configs for SSH"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
----
## User-Specific Client Config ## User-Specific Client Config
Most directives that can be set in the system-wide client configuration can be set by each user in `~/.ssh/config`. This snippit contains a collection of my most used options: Most directives that can be set in the system-wide client configuration can be set by each user in `~/.ssh/config`. This snippit contains a collection of my most used options:
```prettyprint ```
SendEnv LC_* * Send all LC env vars to the host SendEnv LC_* # Send all LC env vars to the host
AddKeysToAgent yes * If asked to unlock a password-protected private AddKeysToAgent yes # If asked to unlock a password-protected private
- key, automatically add that key to the ssh-agent # key, automatically add that key to the ssh-agent
- so you no longer need to reenter the password # so you no longer need to reenter the password
- again this session # again this session
- Example Host Definition # Example Host Definition
Host foo * Arbitrary String. Use this definition by running `ssh foo` Host foo # Arbitrary String. Use this definition by running `ssh foo`
HostName foo.bar.com * Actual DNS Hostname or IP address of the server HostName foo.bar.com # Actual DNS Hostname or IP address of the server
Port 12345 * Port number to connect to Port 12345 # Port number to connect to
User thurstylark * Username on the server to connect as User thurstylark # Username on the server to connect as
IdentityFile ~/.ssh/id_rsa * Private key to use for authentication IdentityFile ~/.ssh/id_rsa # Private key to use for authentication
ServerAliveInterval 300 * Interval in seconds before a keepalive packet is sent to the server ServerAliveInterval 300 # Interval in seconds before a keepalive packet is sent to the server
ServerAliveCountMax 3 * Declare the connection dead after no response to this many keepalive packets ServerAliveCountMax 3 # Declare the connection dead after no response to this many keepalive packets
HostKeyAlgorithms ssh-dss * Use ssh-dss for host-key algorithm checking (ssh-dss is insecure. Use something else) HostKeyAlgorithms ssh-dss # Use ssh-dss for host-key algorithm checking (ssh-dss is insecure. Use something else)
KexAlgorithms +kex * Add 'kex' to the list of Key Exchange Algorithms available for use. KexAlgorithms +kex # Add 'kex' to the list of Key Exchange Algorithms available for use.
StrictHostKeyChecking no * Turn off Strict Host Key Checking for only this host (insecure) StrictHostKeyChecking no # Turn off Strict Host Key Checking for only this host (insecure)
UserKnownHostsFile /dev/null * Discard this hosts host key instead of storing in ~/.ssh/known_hosts (not recommended) UserKnownHostsFile /dev/null # Discard this hosts host key instead of storing in ~/.ssh/known_hosts (not recommended)
VisualHostKey yes * Always use randomart in place of host key sums VisualHostKey yes # Always use randomart in place of host key sums
``` ```
### Directive Notes ### Directive Notes
@ -48,7 +54,7 @@ User-specific ssh configs make it stupid easy to create several keys for several
For example: Github allows you to push to your remote repositories over ssh by adding a public key to your account. Ideally, you should create a keypair for this specific purpose, and name it something like 'github'. Then you can add something like this to your `~/.ssh/config`: For example: Github allows you to push to your remote repositories over ssh by adding a public key to your account. Ideally, you should create a keypair for this specific purpose, and name it something like 'github'. Then you can add something like this to your `~/.ssh/config`:
```prettyprint ```
host github.com host github.com
IdentityFile ~/.ssh/github IdentityFile ~/.ssh/github
``` ```
@ -64,11 +70,3 @@ The `ServerAliveInterval` option sends a keepalive packet if no data has been re
Additionally, the `ServerAliveCountMax` option specifies the number of keepalive packets that may be sent without a response before ssh terminates the connection. By default this is set to `3`, but if your connection is unreliable, you can set this higher to give your server a better chance at responding the next time a keepalive packet is sent. Additionally, the `ServerAliveCountMax` option specifies the number of keepalive packets that may be sent without a response before ssh terminates the connection. By default this is set to `3`, but if your connection is unreliable, you can set this higher to give your server a better chance at responding the next time a keepalive packet is sent.
It is important to note that messages sent by the `TTYKeepAlive` option are not sent through the encrypted channel and can be spoofed, but the "server alive" messages are sent through the encrypted channel and cannot be spoofed. Do not use `TTYKeepAlive` messages for determining the quality or security of a connection! See `ssh-config(5)` for more info. It is important to note that messages sent by the `TTYKeepAlive` option are not sent through the encrypted channel and can be spoofed, but the "server alive" messages are sent through the encrypted channel and cannot be spoofed. Do not use `TTYKeepAlive` messages for determining the quality or security of a connection! See `ssh-config(5)` for more info.
----
## SSH Host Configuration
### Google Authenticator

View File

@ -1,32 +0,0 @@
# Thurstylark's Knowledge Base
Half brain dump, half documentation practice.
### Projects
- [Vimwiki](Vimwiki.md) -- This very wiki, and how it's hosted
- [Cgit](Cgit.md) -- Configuration and hosting of https://git.thurstylark.com/
### Configuration/Dotfiles
- [Bashrc](Bashrc.md)
- [SSH](SSH.md)
- [Chrome Search Shortcuts](Chrome Search Shortcuts.md)
### Reference
- [Thurstylark-VPS](Thurstylark-VPS.md) -- All the services and little tweaks unique to my VPS
- [LetsEncrypt](LetsEncrypt.md) -- Usage of certbot, and relevant info for Apache configuration
- [Keyboard Mapping](Keyboard Mapping.md) -- Changing keyboard mapping at the hwdb level
- [Password-Store setup](Password-Store setup.md)
- [Formatting Cheat Sheet](Formatting Cheat Sheet.md)
### Misc.
- [Links Of Infamy](Links Of Infamy.md) -- A link dump of things I find truly amazing
- [Stupid Crestron Quirks](Stupid Crestron Quirks.md) -- Crestron can be stupid. Here are some examples
- [Ramblings](Ramblings.md) -- Non-technical musings, rants, or other such tomfoolery
- [Archive](Archive.md) -- Pages that aren't of much active use, but worth keeping around
### [Contact Info](contact)

View File

@ -1,4 +1,11 @@
# Serving Audiobooks as an RSS Feed ---
title: "Audiobook RSS Feed"
description: "When you want to serve audiobooks like podcasts"
author: "Thurstylark"
date: 2021-9-25
draft: true
---
I want to serve my library of audiobooks as an RSS feed so that I can use my favorite podcast app as the player. I want to serve my library of audiobooks as an RSS feed so that I can use my favorite podcast app as the player.

View File

@ -1,4 +1,11 @@
# Automated Android App Builds ---
title: "Automating Android App Builds"
description: "Back when I thought I'd be using AsteroidOS all the time"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
Goal: Get a compiled apk of [AsteroidOS Sync](https://github.com/asteroidos/AsteroidOSSync) from the latest git commit. Goal: Get a compiled apk of [AsteroidOS Sync](https://github.com/asteroidos/AsteroidOSSync) from the latest git commit.
@ -28,14 +35,14 @@ This will boot the container and leave you at a login prompt. For Arch, root wil
Next, we need to automate bringing the new container up with a systemd service. Easiest way to get a service ready for a systemd-nspawn is to use the existing systemd-nspawn@.service, and tweak it for this specific use. To get a copy of this unit and start editing it right away, run `systemctl edit --full systemd-nspawn@containername.service`. This is the end product of my unit: Next, we need to automate bringing the new container up with a systemd service. Easiest way to get a service ready for a systemd-nspawn is to use the existing systemd-nspawn@.service, and tweak it for this specific use. To get a copy of this unit and start editing it right away, run `systemctl edit --full systemd-nspawn@containername.service`. This is the end product of my unit:
```prettyprint ```
- /etc/systemd/system/systemd-nspawn@asteroid.service # /etc/systemd/system/systemd-nspawn@asteroid.service
- This file is part of systemd. # This file is part of systemd.
# #
- systemd is free software; you can redistribute it and/or modify it # systemd is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published by # under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation; either version 2.1 of the License, or # the Free Software Foundation; either version 2.1 of the License, or
- (at your option) any later version. # (at your option) any later version.
[Unit] [Unit]
Description=Container %i Description=Container %i
@ -54,15 +61,15 @@ Slice=machine.slice
Delegate=yes Delegate=yes
TasksMax=16384 TasksMax=16384
- Enforce a strict device policy, similar to the one nspawn configures # Enforce a strict device policy, similar to the one nspawn configures
- when it allocates its own scope unit. Make sure to keep these # when it allocates its own scope unit. Make sure to keep these
- policies in sync if you change them! # policies in sync if you change them!
DevicePolicy=closed DevicePolicy=closed
DeviceAllow=/dev/net/tun rwm DeviceAllow=/dev/net/tun rwm
DeviceAllow=char-pts rw DeviceAllow=char-pts rw
- nspawn itself needs access to /dev/loop-control and /dev/loop, to # nspawn itself needs access to /dev/loop-control and /dev/loop, to
- implement the --image= option. Add these here, too. # implement the --image= option. Add these here, too.
DeviceAllow=/dev/loop-control rw DeviceAllow=/dev/loop-control rw
DeviceAllow=block-loop rw DeviceAllow=block-loop rw
DeviceAllow=block-blkext rw DeviceAllow=block-blkext rw
@ -91,8 +98,8 @@ When your systemd-nspawn is booted, most interaction is done using `machinectl(1
To get a shell: To get a shell:
```prettyprint ```
- machinectl shell user@containername # machinectl shell user@containername
``` ```
This will bypass the login prompt, and start user's shell. If no user is specified, you will be logged in as root. This will bypass the login prompt, and start user's shell. If no user is specified, you will be logged in as root.
@ -101,16 +108,16 @@ The actual building is done by a script in the container. This means we need eit
To execute the script from outside the container: To execute the script from outside the container:
```prettyprint ```
- machinectl shell user@containername /path/to/script # machinectl shell user@containername /path/to/script
``` ```
Note: This path is relative to the root of the container, not of the host. Note: This path is relative to the root of the container, not of the host.
All that's left is to make a service unit for this command. Here's how my unit stands at the time of writing: All that's left is to make a service unit for this command. Here's how my unit stands at the time of writing:
```prettyprint ```
- /etc/systemd/system/build-aos-sync.service # /etc/systemd/system/build-aos-sync.service
[Unit] [Unit]
Description=Build latest commit of AsteroidOS Sync Description=Build latest commit of AsteroidOS Sync
Requires=systemd-nspawn@asteroid.service Requires=systemd-nspawn@asteroid.service
@ -125,8 +132,8 @@ This unit is set up to boot our container automatically by using `Requires=` and
The last part of the actual automation is done with a timer for our new service. It doesn't have to be super complicated, but you can tweak it how you like it: The last part of the actual automation is done with a timer for our new service. It doesn't have to be super complicated, but you can tweak it how you like it:
```prettyprint ```
- /etc/systemd/system/build-aos-sync.timer # /etc/systemd/system/build-aos-sync.timer
[Unit] [Unit]
Description=Timer for automated AsteroidOS Sync build Description=Timer for automated AsteroidOS Sync build
@ -146,7 +153,7 @@ The last peice of the puzzle for this is to actually compile the app in question
Here's the script I ended up with: Here's the script I ended up with:
```prettyprint linenums ```
#!/bin/bash #!/bin/bash
pkgname=asteroid-os-sync pkgname=asteroid-os-sync
@ -155,10 +162,10 @@ bind_mount=/home/thurstylark/output
output=$project_root/app/build/outputs/apk/app-debug.apk output=$project_root/app/build/outputs/apk/app-debug.apk
build_app() { build_app() {
- Reference: https://developer.android.com/studio/build/building-cmdline.html # Reference: https://developer.android.com/studio/build/building-cmdline.html
cd $project_root cd $project_root
git remote update git remote update
if [ "$(git rev-parse @)" == "$(git rev-parse @{u})" ]( "$(git rev-parse @)" == "$(git rev-parse @{u})" .md); then if [[ "$(git rev-parse @)" == "$(git rev-parse @{u})" ]]; then
echo "App up to date." >&2 echo "App up to date." >&2
exit 0 exit 0
else else

View File

@ -1,4 +1,12 @@
# i3 Configuration ---
title: "i3 configuration"
description: "Moved to Sway"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
Source: https://git.thurstylark.com/vcsh/i3.git Source: https://git.thurstylark.com/vcsh/i3.git
@ -8,7 +16,7 @@ The final config that actually is read by i3 is created using j4-make-config. Th
Simple usage: Simple usage:
```prettyprint ```
j4-make-config -a $(hostname).config archlinux j4-make-config -a $(hostname).config archlinux
``` ```
@ -16,8 +24,8 @@ This creates `~/.config/i3/config` by merging `~/.config/i3/config.base` and `~/
Since using `j4-make-config`, the command for reloading the config has been changed to the following: Since using `j4-make-config`, the command for reloading the config has been changed to the following:
```prettyprint ```
- rebuild and reload the configuration file # rebuild and reload the configuration file
bindsym $mod+Shift+c exec "j4-make-config -r -a $HOSTNAME.config archlinux" bindsym $mod+Shift+c exec "j4-make-config -r -a $HOSTNAME.config archlinux"
``` ```
@ -34,16 +42,16 @@ https://github.com/okraits/j4-make-config
This differs depending on if you're using ALSA or Pulseaudio. Thus, I include these instructions in the host-specific configs instead of the base config This differs depending on if you're using ALSA or Pulseaudio. Thus, I include these instructions in the host-specific configs instead of the base config
ALSA: ALSA:
```prettyprint ```
- Alsa Volume controls # Alsa Volume controls
bindsym XF86AudioRaiseVolume exec --no-startup-id amixer set Master 5%+ #increase sound volume bindsym XF86AudioRaiseVolume exec --no-startup-id amixer set Master 5%+ #increase sound volume
bindsym XF86AudioLowerVolume exec --no-startup-id amixer set Master 5%- #decrease sound volume bindsym XF86AudioLowerVolume exec --no-startup-id amixer set Master 5%- #decrease sound volume
bindsym XF86AudioMute exec --no-startup-id amixer set Master toggle * mute sound bindsym XF86AudioMute exec --no-startup-id amixer set Master toggle * mute sound
``` ```
PulseAudio: PulseAudio:
```prettyprint ```
- PulseAudio Volume controls # PulseAudio Volume controls
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5% #increase sound volume bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5% #increase sound volume
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5% #decrease sound volume bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5% #decrease sound volume
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle * mute sound bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle * mute sound
@ -53,8 +61,8 @@ bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ to
Brightness can be universal unless the utility for changing brightness differs between machines, so this snippit lives in the base config. Brightness can be universal unless the utility for changing brightness differs between machines, so this snippit lives in the base config.
```prettyprint ```
- Sreen brightness controls (requires light(1) from the AUR) # Sreen brightness controls (requires light(1) from the AUR)
bindsym XF86MonBrightnessUp exec light -A 10 * increase screen brightness bindsym XF86MonBrightnessUp exec light -A 10 * increase screen brightness
bindsym XF86MonBrightnessDown exec light -U 10 * decrease screen brightness bindsym XF86MonBrightnessDown exec light -U 10 * decrease screen brightness
``` ```
@ -63,8 +71,8 @@ bindsym XF86MonBrightnessDown exec light -U 10 * decrease screen brightness
This also is universal if the same tool is being used across hosts. I use `playerctl` mainly for its compatibility with Spotify's Linux client. This also is universal if the same tool is being used across hosts. I use `playerctl` mainly for its compatibility with Spotify's Linux client.
```prettyprint ```
- Music Player controls # Music Player controls
bindsym XF86AudioPlay exec --no-startup-id playerctl play-pause bindsym XF86AudioPlay exec --no-startup-id playerctl play-pause
bindsym XF86AudioNext exec --no-startup-id playerctl next bindsym XF86AudioNext exec --no-startup-id playerctl next
bindsym XF86AudioPrev exec --no-startup-id playerctl previous bindsym XF86AudioPrev exec --no-startup-id playerctl previous
@ -85,9 +93,9 @@ https://wiki.archlinux.org/index.php/Spotify#Global_media_hotkeys
The screen locker is already set up in [Xinitrc](Xinitrc.md), so all that is necessary in the i3 config is to set the key combination that should spawn `xautolock -locknow`. The screen locker is already set up in [Xinitrc](Xinitrc.md), so all that is necessary in the i3 config is to set the key combination that should spawn `xautolock -locknow`.
```prettyprint ```
- Ctrl+Alt+L to lock the screen # Ctrl+Alt+L to lock the screen
- Locker is set in ~/.xinitrc # Locker is set in ~/.xinitrc
bindsym Mod1+Control+l exec "xautolock -locknow" bindsym Mod1+Control+l exec "xautolock -locknow"
``` ```
@ -99,12 +107,12 @@ This is another host-specific configuration, since `bar {}` has host-specific op
I'll only demonstrate the most complicated of my current i3bar configuration. The rest can be viewed on the git repo. I'll only demonstrate the most complicated of my current i3bar configuration. The rest can be viewed on the git repo.
```prettyprint ```
bar { bar {
status_command i3status -c ~/.config/i3/status/$HOSTNAME.config status_command i3status -c ~/.config/i3/status/$HOSTNAME.config
tray_output primary tray_output primary
output eDP1 * Which display should i3bar be bound to? output eDP1 * Which display should i3bar be bound to?
- $i3-theme-bar # $i3-theme-bar
} }
``` ```
@ -118,7 +126,7 @@ Most of the i3Status configuration is pretty standard, and is well documented by
This directive chooses ALSA by default, PulseAudio can be specified by adding `device = "pulse"` to the end of this directive. This directive chooses ALSA by default, PulseAudio can be specified by adding `device = "pulse"` to the end of this directive.
```prettyprint ```
volume master { volume master {
format = "🔈%volume" * U+1F508 format = "🔈%volume" * U+1F508
format_muted = "🔇" * U+1F507 format_muted = "🔇" * U+1F507
@ -129,14 +137,8 @@ volume master {
This is a simple pidfile watcher used with one of my [VPN](VPN.md) configurations that gets started with systemd. This is a simple pidfile watcher used with one of my [VPN](VPN.md) configurations that gets started with systemd.
```prettyprint ```
run_watch SPVPN { run_watch SPVPN {
pidfile = "/var/run/spvpn@*.pid" pidfile = "/var/run/spvpn@*.pid"
} }
``` ```
----
## Nagbar
The nagbar is intensely annoying to encounter mainly because you can only use the mouse for interacting with it. It has been removed from my config altogether, and I plan on replacing it with dmenu in the future.

View File

@ -1,9 +1,16 @@
# Pkglists ---
title: "Pkglist backups"
description: "Abandoned due to lack of usefulness"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
Sources: Sources:
https://git.thurstylark.com/vcsh/pkglists.git/ - https://git.thurstylark.com/vcsh/pkglists.git/
https://git.thurstylark.com/vcsh/systemd-user.git/ - https://git.thurstylark.com/vcsh/systemd-user.git/
https://github.com/gs93/pakbak - https://github.com/gs93/pakbak
These used to be actual lists created by [an admittedly terrible script](https://git.thurstylark.com/vcsh/pkglists.git/tree/.pkglists/pkglistbu.sh?id=62cc7e34c1354900cf7cc58480d9b4db2cd7309a) that was run nightly by a systemd --user timer, but now I backup `pacman`'s whole local database whenever there's a change using pakbak and `systemd.path` units. These used to be actual lists created by [an admittedly terrible script](https://git.thurstylark.com/vcsh/pkglists.git/tree/.pkglists/pkglistbu.sh?id=62cc7e34c1354900cf7cc58480d9b4db2cd7309a) that was run nightly by a systemd --user timer, but now I backup `pacman`'s whole local database whenever there's a change using pakbak and `systemd.path` units.
@ -15,7 +22,7 @@ If later access is needed, untar the archive, and point pacman at that dir (e.g.
### Config ### Config
```prettyprint ```
- Backup the database to this folder - Backup the database to this folder
target_folder=/home/thurstylark/.pkglists/$(hostname)/ target_folder=/home/thurstylark/.pkglists/$(hostname)/
@ -37,7 +44,7 @@ This will keep only one copy of the database around, and delete all the others.
Once pakbak has created the archive, it is added, committed, and pushed to a vcsh git repo by a couple of systemd --user services. This is triggered by any change to the directory that pakbak writes its output to for that host. Activation of this process is handled by `pkglists-commit.path`: Once pakbak has created the archive, it is added, committed, and pushed to a vcsh git repo by a couple of systemd --user services. This is triggered by any change to the directory that pakbak writes its output to for that host. Activation of this process is handled by `pkglists-commit.path`:
```prettyprint ```
[Unit] [Unit]
Description=Path activation for pkglists-commit.service Description=Path activation for pkglists-commit.service
@ -51,7 +58,7 @@ WantedBy=default.target
This unit watches `$HOME/.pkglists/$HOSTNAME` for changes, and on any activity, activates `pkglists-commit.service`: This unit watches `$HOME/.pkglists/$HOSTNAME` for changes, and on any activity, activates `pkglists-commit.service`:
```prettyprint ```
[Unit] [Unit]
Description=Add, commit, and push pacman db backups Description=Add, commit, and push pacman db backups

View File

@ -1,4 +1,12 @@
# Xinitrc ---
title: "Xinitrc configuration"
description: "Moved to Sway"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
Source: https://git.thurstylark.com/vcsh/xinitrc.git Source: https://git.thurstylark.com/vcsh/xinitrc.git
@ -12,17 +20,17 @@ The first few lines of my Xinitrc are from `/etc/X11/xinit/xinitrc`. They pull i
## Screen Locker ## Screen Locker
-WARNING*: [(in fact, you might want to consider even using X11 in the first place...)](http://blog.martin-graesslin.com/blog/2015/01/why-screen-lockers-on-x11-cannot-be-secure/|Screen lockers on X11 are absolutely not secure]]!! Do not use a screen locker if you require high security!! [[http://theinvisiblethings.blogspot.com/2011/04/linux-security-circus-on-gui-isolation.html) > *WARNING:* [Screen lockers on X11 are absolutely not secure!!](http://blog.martin-graesslin.com/blog/2015/01/why-screen-lockers-on-x11-cannot-be-secure/) Do not use a screen locker on X11 if you require high security!! [(in fact, you might want to reconsider even using x11 in the first place...)](http://theinvisiblethings.blogspot.com/2011/04/linux-security-circus-on-gui-isolation.html)
I lock my desktop using a combination of `i3lock(1)` and `xautolock(1)` with some help from `xset(1)` to change dpms timeout before and after locking: I lock my desktop using a combination of `i3lock(1)` and `xautolock(1)` with some help from `xset(1)` to change dpms timeout before and after locking:
```prettyprint ```
screen_locker="xset dpms 0 0 10 dpms force off; i3lock --nofork -befc 000000; xset dpms 0 0 0" screen_locker="xset dpms 0 0 10 dpms force off; i3lock --nofork -befc 000000; xset dpms 0 0 0"
locktime=30 * Default screen lock timeout in minutes locktime=30 # Default screen lock timeout in minutes
... ...
- Automatically lock after $locktime minutes using i3lock # Automatically lock after $locktime minutes using i3lock
xautolock -time $locktime -locker "$screen_locker" -detectsleep & xautolock -time $locktime -locker "$screen_locker" -detectsleep &
``` ```
@ -38,7 +46,7 @@ The locker is defined in `$screen_locker`, then used later along with `$locktime
- `-c 000000`: Background color should be `#000000` - `-c 000000`: Background color should be `#000000`
4. When i3lock exits, DPMS timeout is set to 0 for never 4. When i3lock exits, DPMS timeout is set to 0 for never
Whenever I wish to lock the screen, I need only run `xautolock -locknow` making sure that `$DISPLAY` is set correctly. For example, my [i3](i3.md) config is set up to run that command for `Ctrl+Alt+l`. Whenever I wish to lock the screen, I need only run `xautolock -locknow` making sure that `$DISPLAY` is set correctly. For example, my [i3](/misc/archive/i3/) config is set up to run that command for `Ctrl+Alt+l`.
Also note that the definition of `$screen_locker` and `$locktime` are separated from the invocation of `xautolock(1)` by all the host-specific configuration. This is to allow setting `$locktime` on a host-by-host basis. Given the first step of the locker is to use DPMS to turn the display off, this effectively sets the display sleep timeout to `$locktime`. Also note that the definition of `$screen_locker` and `$locktime` are separated from the invocation of `xautolock(1)` by all the host-specific configuration. This is to allow setting `$locktime` on a host-by-host basis. Given the first step of the locker is to use DPMS to turn the display off, this effectively sets the display sleep timeout to `$locktime`.
@ -70,24 +78,24 @@ This may seem easy enough to script by finding the device id once, then adding a
For this reason, it is more appropriate to match against an attribute of the device that will not change. In the case of `xinput(1)`, the best option for this situation is the device name. The device id can easily be found by running `xinput list --id-only <device name>`. This can easily be strung together with a subshell to do everything on one line. For instance, if you wish to map a device named `ELAN Touchscreen` to an output named `eDP-1`, the resulting line might look like the following: For this reason, it is more appropriate to match against an attribute of the device that will not change. In the case of `xinput(1)`, the best option for this situation is the device name. The device id can easily be found by running `xinput list --id-only <device name>`. This can easily be strung together with a subshell to do everything on one line. For instance, if you wish to map a device named `ELAN Touchscreen` to an output named `eDP-1`, the resulting line might look like the following:
```prettyprint ```
xinput --map-to-output $(xinput list --id-only "ELAN Touchscreen") eDP-1 xinput --map-to-output $(xinput list --id-only "ELAN Touchscreen") eDP-1
``` ```
This command must be run after every time the display configuration changes, so it is possible that the command will need to exist several times in the `srandrd(1)` configuration. Since the only unique pieces of information between hosts will be the device name and the output name, it is easier to use a function instead of duplicating the same line over and over: This command must be run after every time the display configuration changes, so it is possible that the command will need to exist several times in the `srandrd(1)` configuration. Since the only unique pieces of information between hosts will be the device name and the output name, it is easier to use a function instead of duplicating the same line over and over:
```prettyprint ```
maptouchscreen() { maptouchscreen() {
- maptouchscreen <name> <output> # maptouchscreen <name> <output>
local name="$1" * <name> should be a full name from the output of `xinput list` local name="$1" # <name> should be a full name from the output of `xinput list`
local output="$2" * <output> should be an xrandr output name local output="$2" # <output> should be an xrandr output name
xinput --map-to-output $(xinput list --id-only "$name") "$output" xinput --map-to-output $(xinput list --id-only "$name") "$output"
} }
``` ```
This allows you to replace any instance of the full `xinput(1)` command with `maptouchscreen <device name> <output>`. This allows you to replace any instance of the full `xinput(1)` command with `maptouchscreen <device name> <output>`.
-Note:* If there are spaces in the device name, bash will glob the crap out of it, so be sure to double quote the device name when calling `maptouchscreen()`. *Note:* If there are spaces in the device name, bash will glob the crap out of it, so be sure to double quote the device name when calling `maptouchscreen()`.
### PulseAudio Default Sink ### PulseAudio Default Sink
@ -95,30 +103,18 @@ I want the default PulseAudio sink to change to HDMI when HDMI is plugged in, an
Changing the default sink in pulse is as easy as running `pacmd set-default-sink <sink id>` where `<sink id>` is the id of the desired sink. Unfortunately, this is another situation where the id might change unexpectedly. We also don't have an easy interface to determine the id number from a name like we did with `xinput(1)`, so we're forced to parse the output of `pactl list sinks short` like so: Changing the default sink in pulse is as easy as running `pacmd set-default-sink <sink id>` where `<sink id>` is the id of the desired sink. Unfortunately, this is another situation where the id might change unexpectedly. We also don't have an easy interface to determine the id number from a name like we did with `xinput(1)`, so we're forced to parse the output of `pactl list sinks short` like so:
```prettyprint ```
pacmd set-default-sink $(pactl list sinks short | grep "hdmi" | grep -o "^\S\+") pacmd set-default-sink $(pactl list sinks short | grep "hdmi" | grep -o "^\S\+")
``` ```
This command lists all sinks in short form, then greps for a line containing "hdmi", uses grep to only print the first character (the sink id), then sets the default sink with `pacmd(1)`. Since this will also need to be run any time the display configuration changes, a function is, again, appropriate: This command lists all sinks in short form, then greps for a line containing "hdmi", uses grep to only print the first character (the sink id), then sets the default sink with `pacmd(1)`. Since this will also need to be run any time the display configuration changes, a function is, again, appropriate:
```prettyprint ```
setpasink() { setpasink() {
- setpasink <name> # setpasink <name>
- Find a unique string in the output of `pacmd list short` to use for <name> # Find a unique string in the output of `pacmd list short` to use for <name>
pacmd set-default-sink $(pactl list sinks short | grep "$1" | grep -o "^\S\+") pacmd set-default-sink $(pactl list sinks short | grep "$1" | grep -o "^\S\+")
} }
``` ```
This allows you to change the default PulseAudio sink with `setpasink <name>` where `<name>` is any arbitrary string that is unique to the line that corresponds to the desired sink in the output of `pactl list sinks short`. This allows you to change the default PulseAudio sink with `setpasink <name>` where `<name>` is any arbitrary string that is unique to the line that corresponds to the desired sink in the output of `pactl list sinks short`.
----
## NumLock
----
## ssh-agent
----

View File

@ -1,4 +1,11 @@
# Links of Infamy ---
title: "Links of Infamy"
description: "A link dump of things I find truly amazing"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
- [How to properly run a community.](https://wiki.archlinux.org/index.php/Code_of_conduct) - [How to properly run a community.](https://wiki.archlinux.org/index.php/Code_of_conduct)
- [How to properly automate yourself out of a job.](https://github.com/NARKOZ/hacker-scripts) - [How to properly automate yourself out of a job.](https://github.com/NARKOZ/hacker-scripts)

View File

@ -1,4 +1,4 @@
--- ---
title: Projects title: Projects
weight: 1 draft: true
--- ---

View File

@ -0,0 +1,16 @@
---
title: "If I was wrong, click here"
description: "Criticism Required"
author: "Thurstylark"
date: 2021-9-25
draft: true
---
# Criticism Required
## Notes
> The billionaire wants to explain to us that what might look like the steady hoarding of wealth and a feudalistic imbalance of power is, in fact, the product of defensible moral choices and a fair system. As Max Weber noted, “the fortunate is seldom satisfied with the fact of being fortunate” but wants to know that “he has a right to his good fortune,” and that it is “legitimate fortune.”
> - https://www.currentaffairs.org/2021/01/how-billionaires-see-themselves

View File

@ -1,4 +1,12 @@
# Should I Come Out While Still Questioning? ---
title: "Should I come out while still questioning?"
description: "Adolescence, fluidity, and communicating your truth"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
This began life as a reply to someone on /r/questioning, but decided to archive it for myself. This began life as a reply to someone on /r/questioning, but decided to archive it for myself.
@ -6,7 +14,7 @@ This began life as a reply to someone on /r/questioning, but decided to archive
(Paraphrasing to anonymize) (Paraphrasing to anonymize)
OP is female, and 17 at the time of writing. She had been questioning her sexuality for a while, has privately used a few different labels along the way,but still remained kind of confused about her identity. She had planned on coming out to her family once sure of her labels, but she's slowly coming to the realization that this might take some many years to fully flesh out. She wants to be open about her sexuality to friends and family, but even though they are generally supportive of the LGBTQ+ community, she feels it may still be complicated to explain certain concepts to some individuals. OP (17, she/her) had been questioning her sexuality for a while, and has privately used a few different labels along the way, but still remained kind of confused about her identity. She had planned on coming out to her family once sure of her labels, but she's slowly coming to the realization that this might take some many years to fully flesh out. She wants to be open about her sexuality to friends and family, but even though they are generally supportive of the LGBTQ+ community, she feels it may still be complicated to explain certain concepts to some individuals.
OP's main question: "Is it a possibility to come out although I'm not sure of my labels yet? At the moment, I would most likely come out as simply "not heterosexual" and questioning. Also, since I'm fairly nervous about this, would it be ok to do this in writing, or should I only do this face-to-face? Should I wait until I've stopped questioning?" OP's main question: "Is it a possibility to come out although I'm not sure of my labels yet? At the moment, I would most likely come out as simply "not heterosexual" and questioning. Also, since I'm fairly nervous about this, would it be ok to do this in writing, or should I only do this face-to-face? Should I wait until I've stopped questioning?"

View File

@ -1,4 +1,11 @@
# Am I Faking Being Trans? ---
title: "Am I faking being trans?"
description: "And who is the authority on my identity anyways?"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
This began life as a reply to someone on /r/questioning, but I later came to realize that I was actually writing to myself. This began life as a reply to someone on /r/questioning, but I later came to realize that I was actually writing to myself.

View File

@ -1,10 +1,16 @@
# On Labels ---
title: "On Labels"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
### A label is not a template for behavior. It is a tool used for describing your specific brand of awesome to others. You are you, pick a label that fits (or don't, whatever) ### A label is not a template for behavior. It is a tool used for describing your specific brand of awesome to others. You are you, pick a label that fits (or don't, whatever)
That is to say: I am secure in the label that I've chosen, not because *I* can fit within *the label*, but because *the label* fits *me.* I am the only one in the world qualified to make any judgments about my sexuality, because I am the only one in the world who lives my life, feels my emotions, and experiences my attraction The *only* reason I have chosen to use a one-word label for such a large, complicated part of my person, is because it provides a useful short-hand. That is to say: I am secure in the label that I've chosen, not because *I* can fit within *the label*, but because *the label* fits *me.* I am the only one in the world qualified to make any judgments about my sexuality, because I am the only one in the world who lives my life, feels my emotions, and experiences my attraction The *only* reason I have chosen to use a one-word label for such a large, complicated part of my person, is because it provides a useful short-hand.
However, this absolutely doesn't mean labels have no usefulness beyond communicating complicated concepts in a succinct way. In an external sense, labels provide some sense of community in a world where people are often denied the opportunity to internalize these concepts from a young age; Finding this community provides legitimacy, validation, and support where otherwise one would be left to deal with their identity completely alone. However, this absolutely doesn't mean labels have no usefulness beyond communicating complicated concepts in a succinct way. In an external sense, labels provide some semblance of community in a world where people are often denied the opportunity to internalize these concepts from a young age; Finding this community provides legitimacy, validation, and support where otherwise one would be left to deal with their identity completely alone.
But, for the purposes of one's *internal* struggle: You are who you are, and whatever that ends up looking like for you, it can be explored and discovered with or without the participation of others. For some people, it helps to have some experience to consider, but there are just as many who have come to their conclusions completely on their own. But, for the purposes of one's *internal* struggle: You are who you are, and whatever that ends up looking like for you, it can be explored and discovered with or without the participation of others. For some people, it helps to have some experience to consider, but there are just as many who have come to their conclusions completely on their own.

View File

@ -1,4 +1,11 @@
# Do People Actually Desire Physical Affection? ---
title: "Do people actually desire physical affection?"
description: "Asexuality, relationships, and wtf is normalcy anyways?"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
This began life as a reply to someone on /r/questioning, but decided to archive it for myself. This began life as a reply to someone on /r/questioning, but decided to archive it for myself.
@ -6,7 +13,7 @@ This began life as a reply to someone on /r/questioning, but decided to archive
(paraphrasing to anonymize) (paraphrasing to anonymize)
OP has just started their first romantic relationship with someone they have quite a bit in common with. OP enjoys spending time with their partner, but didn't feel anything special during their first kiss. OP would be fine with kissing them again if requested, but it's not something they felt that they would specifically desire or seek out. OP has just started their first romantic relationship with someone that shares many intrests and commonalities. OP enjoys spending time with their partner, but didn't feel anything special during their first kiss. OP would be fine with kissing them again if requested, but it's not something they felt that they would specifically desire or seek out.
OP recognizes that they generally don't quite understand romance or attraction, so being in a relationship is somewhat difficult already, but in an effort to understand their partner better, they wanted other perspectives. OP recognizes that they generally don't quite understand romance or attraction, so being in a relationship is somewhat difficult already, but in an effort to understand their partner better, they wanted other perspectives.
@ -24,7 +31,7 @@ I don't just desire physical affection, I *need it*. In fact, I sometimes don't
BUT, if that's something you don't desire or need, then that isn't weird, it's just a part of your particular flavor of awesome. "Normal" or "regular" people aren't a thing, and I discourage anyone from trying to compare themselves to a baseline human configuration of wants and needs. Evolution-based life doesn't operate like that. Evolution is dependent on randomness, uniqueness, and mutations, then it keeps the useful ones around over time. BUT, if that's something you don't desire or need, then that isn't weird, it's just a part of your particular flavor of awesome. "Normal" or "regular" people aren't a thing, and I discourage anyone from trying to compare themselves to a baseline human configuration of wants and needs. Evolution-based life doesn't operate like that. Evolution is dependent on randomness, uniqueness, and mutations, then it keeps the useful ones around over time.
To this end, I encourage you to ask yourself: Where your idea of "normal" comes from? From your parents? Peers? Media? A combination? To this end, I encourage you to ask yourself: Where does your idea of "normal" come from? From your parents? Peers? Media? A combination?
Also, what is to be gained by people who reinforce this notion of "normal"? Do they earn money from it? Do they feel accepted or powerful by being (or claiming to be) a part of the "normal" group? Do they use it to otherize those who don't fit in the "normalcy" they so enjoy? Also, what is to be gained by people who reinforce this notion of "normal"? Do they earn money from it? Do they feel accepted or powerful by being (or claiming to be) a part of the "normal" group? Do they use it to otherize those who don't fit in the "normalcy" they so enjoy?

View File

@ -1,4 +1,10 @@
# Does Experimenting Make You Any Less Straight? ---
title: "Does experimenting make you any less straight?"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
## No. ## No.

View File

@ -0,0 +1,10 @@
---
title: "RTFM or GTFO"
description: "Approachability in the Arch Linux Community"
author: "Thurstylark"
date: 2021-9-25
draft: true
---
In the Linux distro corner of the FOSS world, the [Arch Linux Wiki](https://wiki.archlinux.org/) has achieved near-legendary status as the best repository of 3rd party documentation on the internet, but it's also the achilles' heel of the Arch Linux Community

View File

@ -1,6 +1,11 @@
# Stupid Crestron Quirks ---
title: "Stupid Crestron Quirks"
description: "Crestron can be stupid sometimes. These are the undocumented ways."
author: "Thurstylark"
date: 2021-9-25
draft: true
---
Crestron can be stupid sometimes. These are the undocumented ways.
## When creating a SIMPL Windows program for a 2 Series DMPS, DO NOT select the control system at program creation ## When creating a SIMPL Windows program for a 2 Series DMPS, DO NOT select the control system at program creation

View File

@ -1,5 +1,4 @@
--- ---
title: Reference title: Reference
description: "Because sometimes the memory just needs a joggin'" description: "Because sometimes the memory just needs a joggin'"
weight: 70
--- ---

View File

@ -0,0 +1,40 @@
---
title: "Balanced and Unbalanced Analog Audio"
description: "How the pros do it"
author: "Thurstylark"
date: 2021-9-25
draft: true
---
This document is meant to serve as a cursory overview of the concepts necessary to understand balanced audio, and as a reference for myself.
If you'd like to skip the narrative, feel free to browse through the [#References](#References.md) I used while writing this document.
## What is sound anyways?
At its most base physical level, sound is simply a vibration in some sort of physical medium. The job of the human ear is to capture these vibrations out of the air, and translate them into neurological impulses. The brain's interpretation of thes impulses is what we commonly call sound.
A "vibration" is a mechanical phenomenon whereby oscillations occur about an equilibrium point. In the context of sound, the transmission medium is the thing that is vibrating.
### Example: Human Speech
To illustrate how these parts fit together, let's consider an exceedingly common case: Two humans in conversation. The speaker is the source of sound, and the listener is the destination. In this case, the medium is [atmospheric air](https://en.wikipedia.org/wiki/Atmosphere_of_Earth), which is to say: the collection of gasses that fills all the *seemingly* empty space between objects on planet Earth.
The speaker creates sound by squeezing the right muscles, which causes two special skin folds to be pushed together inside their throat. As the speaker pushes air out of their lungs, these folds block the path of air until the air pressure is great enough to push the folds apart, which releases a small amount of air from their lungs, causing the air pressure to drop, which allows the folds to rebound and meet again. The [Wikipedia page on vocal cords](https://en.wikipedia.org/wiki/Vocal_cords#Function) summarizes this better than I ever could: "In essence, sound is generated in the larynx by chopping up a steady flow of air into little puffs of sound waves."
This stream of air pressure variations is what travels through the air from source to destination.
- Equilibrium (aka: 0dB,
## References
- https://en.wikipedia.org/wiki/Sound
- https://en.wikipedia.org/wiki/Analog_signal
- https://en.wikipedia.org/wiki/Audio_signal
- https://en.wikipedia.org/wiki/Balanced_audio

View File

@ -1,4 +1,12 @@
# Keyboard Mapping ---
title: "Keyboard Mapping"
description: "Changing keyboard mapping at the hwdb level"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
References: References:
- https://wiki.archlinux.org/index.php/Map_scancodes_to_keycodes - https://wiki.archlinux.org/index.php/Map_scancodes_to_keycodes
- https://github.com/Earnestly/pkgbuilds/blob/master/system-config/hwdb-capslock-as-control.hwdb - https://github.com/Earnestly/pkgbuilds/blob/master/system-config/hwdb-capslock-as-control.hwdb
@ -11,7 +19,7 @@ As an example, I map my compose key (menu key) to right meta (aka super, logo, w
First, get the scancode(s) of the key(s) you wish to change. Easiest way is to use `evteest(1)`. For each keypress, you'll get information similar to the following: First, get the scancode(s) of the key(s) you wish to change. Easiest way is to use `evteest(1)`. For each keypress, you'll get information similar to the following:
```class='prettyprint' ```
Event: time 1496690003.603531, -------------- SYN_REPORT ------------ Event: time 1496690003.603531, -------------- SYN_REPORT ------------
Event: time 1496690003.723467, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70065 Event: time 1496690003.723467, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70065
Event: time 1496690003.723467, type 1 (EV_KEY), code 127 (KEY_COMPOSE), value 0 Event: time 1496690003.723467, type 1 (EV_KEY), code 127 (KEY_COMPOSE), value 0
@ -23,7 +31,7 @@ The code you will need to use in the udev hwdb config file is the `MSC_SCAN` val
Next you will need the hardware Vendor and Product ids from `lsusb(1)`. These are two sets of four hexidecimal digits separated by a colon (:) printed right before the device name. Next you will need the hardware Vendor and Product ids from `lsusb(1)`. These are two sets of four hexidecimal digits separated by a colon (:) printed right before the device name.
```class='prettyprint' ```
Bus 001 Device 005: ID 258a:1006 <keyboard name here> Bus 001 Device 005: ID 258a:1006 <keyboard name here>
``` ```
@ -33,7 +41,7 @@ In this example, the Vendor ID is `258a`, and the Product ID is `1006`.
Then create `/etc/udev/hwdb.d/61-custom-keyboard.hwdb` with the following contents: Then create `/etc/udev/hwdb.d/61-custom-keyboard.hwdb` with the following contents:
```class='prettyprint' ```
evdev:input:b0003v258Ap1006* evdev:input:b0003v258Ap1006*
KEYBOARD_KEY_70065=rightmeta KEYBOARD_KEY_70065=rightmeta
KEYBOARD_KEY_70039=leftctrl KEYBOARD_KEY_70039=leftctrl
@ -53,14 +61,14 @@ A few notes on the format of this file:
After changing the config files, the hwdb needs to be rebuilt: After changing the config files, the hwdb needs to be rebuilt:
```class='prettyprint' ```
- systemd-hwdb update # systemd-hwdb update
``` ```
To start using this new hwdb, either reboot or tell udev to reload: To start using this new hwdb, either reboot or tell udev to reload:
```class='prettyprint' ```
- udevadm trigger # udevadm trigger
``` ```
Note that this will only work for adding or modifying existing key mappings. Deleted key mappings are kept in the kernel until a reboot. Note that this will only work for adding or modifying existing key mappings. Deleted key mappings are kept in the kernel until a reboot.
@ -69,6 +77,6 @@ Note that this will only work for adding or modifying existing key mappings. Del
A simple test can be run before trying the keys directly: A simple test can be run before trying the keys directly:
```class='prettyprint' ```
- udevadm info /dev/input/by-path/*-usb-*-kbd | grep KEYBOARD_KEY # udevadm info /dev/input/by-path/*-usb-*-kbd | grep KEYBOARD_KEY
``` ```

View File

@ -1,26 +0,0 @@
# Password Store Setup
This is a quick reference for setting up `pass` on a new filesystem.
1. Install `pass` via the most official means possible
2. Import secret key to gpg keyring
3. Initialize the password store with the key ID
```class='prettyprint'
pass init <keyid>
```
4. Initialize the git repo inside the password store
```class='prettyprint'
pass git init
```
5. Set remote origin
```class='prettyprint'
pass git remote add origin user@site.com:pass.git
```
6. Fetch origin
```class='prettyprint'
pass git fetch origin
```
7. Reset hard to origin/master (overwriting anything that existed in the password store thus far)
```class='prettyprint'
pass git reset --hard origin/master
```

View File

@ -1,10 +0,0 @@
# Thurstylark-VPS
Just a little Linode VPS running Arch, but it's a powerful little sucker.
## Services
- [Cgit](Cgit.md)
- Apache
- [Weechat](Weechat.md)
- Custom Repo

View File

@ -0,0 +1,4 @@
---
title: "Thurstylark-VPS"
description: "Just a little Linode VPS running Arch, but it's a powerful little sucker."
---

View File

@ -1,4 +1,11 @@
# CGit ---
title: "Cgit"
description: "And automatic config deployment on git push"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
Current configuration can always be found at https://git.thurstylark.com/cgit.git/tree Current configuration can always be found at https://git.thurstylark.com/cgit.git/tree
@ -6,7 +13,7 @@ Current configuration can always be found at https://git.thurstylark.com/cgit.gi
The remote repo is set up to deploy the entire contents of the repo to `/srv/cgit` by using the `post-receive` hook in the git repo. The remote repo is set up to deploy the entire contents of the repo to `/srv/cgit` by using the `post-receive` hook in the git repo.
```prettyprint ```
#!/bin/bash #!/bin/bash
GIT_WORK_TREE=/srv/cgit git checkout -f GIT_WORK_TREE=/srv/cgit git checkout -f
``` ```
@ -17,7 +24,7 @@ This allows configuration changes to be edited on a local repo, committed, then
Had a problem with the about page not showing when the appropriate file names are definied as readme files. Here was the problematic config: Had a problem with the about page not showing when the appropriate file names are definied as readme files. Here was the problematic config:
```prettyprint linenums ```Cprettyprint linenums
#css=/cgit-css/cgit.css #css=/cgit-css/cgit.css
#logo=/cgit-css/cgit.png #logo=/cgit-css/cgit.png
@ -36,8 +43,8 @@ clone-url=https://git.thurstylark.com/$CGIT_REPO_URL
# #
- Search for these files in the root of the default branch of repositories # Search for these files in the root of the default branch of repositories
- for coming up with the about page: # for coming up with the about page:
# #
readme=:README.md readme=:README.md
readme=:readme.md readme=:readme.md

View File

@ -1,11 +1,18 @@
# LetsEncrypt ---
title: "LetsEncrypt"
description: "Usage of certbot, and relevant info for Apache configuration"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
## Certbot Usage ## Certbot Usage
Create a cert using the interactive menu: Create a cert using the interactive menu:
```prettyprint ```
- certbot certonly # certbot certonly
``` ```
## Automating Renewal ## Automating Renewal
@ -14,16 +21,16 @@ LetsEncrypt Certs are good for a max of 90 days, so automating renewal is a must
Do a dry-run renewal with certbot: Do a dry-run renewal with certbot:
```prettyprint ```
- certbot renew --dry-run # certbot renew --dry-run
``` ```
This will test, and possibly renew all certs that certbot knows about This will test, and possibly renew all certs that certbot knows about
Now you can use `certbot renew --quiet` for scripting this renewal. I do mine with a simple systemd script: Now you can use `certbot renew --quiet` for scripting this renewal. I do mine with a simple systemd script:
```prettyprint ```
- /etc/systemd/system/certbot.service # /etc/systemd/system/certbot.service
[Unit] [Unit]
Description=Let's Encrypt renewal Description=Let's Encrypt renewal
@ -37,20 +44,20 @@ ExecStartPost=/bin/systemctl reload httpd.service
There's a couple of considerations when using ssl certs with Apache. The first is to enable the appropriate modules in httpd.conf: There's a couple of considerations when using ssl certs with Apache. The first is to enable the appropriate modules in httpd.conf:
```prettyprint ```
LoadModule ssl_module modules/mod_ssl.so LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
``` ```
Also, make sure to configure apache to listen on port 443: Also, make sure to configure apache to listen on port 443:
```prettyprint ```
Listen 443 Listen 443
``` ```
That will get the basic framework ready for your virtualhost definition. Here is a very simple virtualhost configuration: That will get the basic framework ready for your virtualhost definition. Here is a very simple virtualhost configuration:
```prettyprint linenums ```
<VirtualHost wiki.thurstylark.com:80> <VirtualHost wiki.thurstylark.com:80>
ServerName wiki.thurstylark.com ServerName wiki.thurstylark.com
@ -61,8 +68,8 @@ That will get the basic framework ready for your virtualhost definition. Here is
Require all granted Require all granted
</Directory> </Directory>
- Redirect all except the '.wellk-known' path to https. # Redirect all except the '.wellk-known' path to https.
- This allows automated renewal of ssl certs by certbot # This allows automated renewal of ssl certs by certbot
RedirectMatch permanent ^/(?!\.well-known)(.*) https://wiki.thurstylark.com/$1 RedirectMatch permanent ^/(?!\.well-known)(.*) https://wiki.thurstylark.com/$1
</VirtualHost> </VirtualHost>

View File

@ -1,4 +1,11 @@
# Vimwiki ---
title: "Vimwiki"
description: "Using vimwiki to generate a static html site"
author: "Thurstylark"
date: 2021-9-25
draft: true
---
Source: https://git.thurstylark.com/vimwiki.git/ Source: https://git.thurstylark.com/vimwiki.git/
@ -49,7 +56,7 @@ Checkbox states:
Now, in order to use these in our HTML, we just have to write a style for `ul li.doneX:before` in our header like so: Now, in order to use these in our HTML, we just have to write a style for `ul li.doneX:before` in our header like so:
```prettyprint linenums > ```
<style> <style>
ul li.done0:before {content: '\25EF';} ul li.done0:before {content: '\25EF';}
ul li.done1:before {content: '\25D4';} ul li.done1:before {content: '\25D4';}
@ -96,7 +103,7 @@ The easiest way to manage this wiki, and also allow it to be hosted, is to commi
First part of this solution is the vimrc for the remote machine. This sets the destination for the final html files, the origin wiki files, and the html template page. First part of this solution is the vimrc for the remote machine. This sets the destination for the final html files, the origin wiki files, and the html template page.
```prettyprint linenums ```
set nocompatible set nocompatible
filetype plugin on filetype plugin on
syntax on syntax on
@ -112,7 +119,7 @@ Note: lines 1-3 are required for vimwiki to work correctly with the post-receive
The post-receive hook is a fairly simple bash script. This script is located at `~/git/vimwiki.git/hooks/post-receive`, and is run every time the repo receives a push from downstream. The post-receive hook is a fairly simple bash script. This script is located at `~/git/vimwiki.git/hooks/post-receive`, and is run every time the repo receives a push from downstream.
```prettyprint linenums ```
#!/bin/bash #!/bin/bash
mkdir /tmp/vimwiki mkdir /tmp/vimwiki
export GIT_WORK_TREE=/tmp/vimwiki export GIT_WORK_TREE=/tmp/vimwiki
@ -133,10 +140,3 @@ It first makes a directory under /tmp for the contents of the repo, sets `$GIT_W
Line 9 is where the magic happens. This line runs vim with the vimrc from above, and runs the `:VimwikiAll2HTML` command. Line 9 is where the magic happens. This line runs vim with the vimrc from above, and runs the `:VimwikiAll2HTML` command.
Next, the script copies over the one CSS file that I need to host myself, and lastly, it cleans up the temp dir. Next, the script copies over the one CSS file that I need to host myself, and lastly, it cleans up the temp dir.
## TODO
- [X] Commit to a repository
- [X] Setup remote to host
- [X] Setup remote to automatically `:VimwikiAll2HTML` after it's been pushed to
- [X] Document push to deploy

View File

@ -1,8 +1,15 @@
# Weechat ---
title: "Weechat"
description: "Because lurking is the best"
author: "Thurstylark"
date: 2021-9-25
draft: false
---
Current configuration can always be found at https://git.thurstylark.com/vcsh/weechat.git Current configuration can always be found at https://git.thurstylark.com/vcsh/weechat.git
Requirements: ##Requirements:
- Not dependent on graphical session (terminal-based client) - Not dependent on graphical session (terminal-based client)
- Use only one nick during normal operation - Use only one nick during normal operation
@ -19,7 +26,7 @@ The best option so far is weechat run in a multiplexer like tmux.
Easiest way to get this done is to start weechat at boot with a systemd system service: Easiest way to get this done is to start weechat at boot with a systemd system service:
```prettyprint linenums ```
[Unit] [Unit]
Description=Start Weechat as relay and client Description=Start Weechat as relay and client
@ -45,7 +52,7 @@ WantedBy=multi-user.target
tmux needs a configuration to disable the status bar, visual bell, and other things that won't be useful in this setup. tmux needs a configuration to disable the status bar, visual bell, and other things that won't be useful in this setup.
```prettyprint linenums ```
set -g default-terminal "screen-256color" set -g default-terminal "screen-256color"
set-option -g assume-paste-time 1 set-option -g assume-paste-time 1
@ -131,7 +138,7 @@ I will usually use this within yet another tmux session, so I end up needing to
Here are all the options related to weechat relay: Here are all the options related to weechat relay:
```prettyprint linenums ```
[cmd] (alias.conf) [cmd] (alias.conf)
alias.cmd.norelay = "/buffer set localvar_set_relay hard-hide" alias.cmd.norelay = "/buffer set localvar_set_relay hard-hide"
[look] (relay.conf) [look] (relay.conf)
@ -192,15 +199,13 @@ By far, the most use of weechat will be from a workstation. With this setup, the
Also, the easiest way to launch this connection is to run literally `weechat`, so I set up a couple aliases for this in my `~/.bashrc` (found [here](https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc)): Also, the easiest way to launch this connection is to run literally `weechat`, so I set up a couple aliases for this in my `~/.bashrc` (found [here](https://git.thurstylark.com/vcsh/bashrc.git/tree/.bashrc)):
```prettyprint ```
- If you don't have weechat installed, connect to the existing tmux session through mosh # If you don't have weechat installed, connect to the existing tmux session through mosh
[ ! -s /usr/bin/weechat ]( ! -s /usr/bin/weechat .md) && alias weechat='mosh vps -- tmux attach -dt weechat' [[ ! -s /usr/bin/weechat ]] && alias weechat='mosh vps -- tmux attach -dt weechat'
- If you are thurstylark-vps, connect to the existing tmux session locally # If you are thurstylark-vps, connect to the existing tmux session locally
[ "$HOSTNAME" = "thurstylark-vps" ]( "$HOSTNAME" = "thurstylark-vps" .md) && alias weechat='tmux attach -dt weechat' [[ "$HOSTNAME" = "thurstylark-vps" ]] && alias weechat='tmux attach -dt weechat'
``` ```
This gets run when bash starts, so this allows me to use the same `~/.bashrc` on the client and the server. More details on the Bash page. This gets run when bash starts, so this allows me to use the same `~/.bashrc` on the client and the server. More details on the Bash page.
The only thing not noted is that if the client has weechat installed (to /usr/bin/weechat) and `$HOSTNAME` is not "thurstylark-vps", an alias for 'weechat' will not be created, and weechat will launch normally. The only thing not noted is that if the client has weechat installed (to /usr/bin/weechat) and `$HOSTNAME` is not "thurstylark-vps", an alias for 'weechat' will not be created, and weechat will launch normally.
[Configuration](Configuration.md) that allows one to use an arbitrary string as a hostname for ssh/mosh can be found on the ssh config page.