From 071ad3b4cb371e864316a821120ea1b63e6bf213 Mon Sep 17 00:00:00 2001 From: Akshay Date: Sat, 25 Jan 2020 19:16:36 +0530 Subject: site layout; use esh --- docs/posts/WPA_woes.html | 68 ++++++++++++++++++ docs/posts/bash_harder_with_vim.html | 84 ++++++++++++++++++++++ docs/posts/bye_bye_BDFs.html | 51 +++++++++++++ docs/posts/color_conundrum.html | 62 ++++++++++++++++ .../get_better_at_yanking_and_putting_in_vim.html | 48 +++++++++++++ docs/posts/hold_position!.html | 47 ++++++++++++ docs/posts/my_setup.html | 52 ++++++++++++++ docs/posts/onivim_sucks.html | 53 ++++++++++++++ docs/posts/static_sites_with_bash.html | 74 +++++++++++++++++++ generate.sh | 38 +++++----- 10 files changed, 558 insertions(+), 19 deletions(-) create mode 100644 docs/posts/WPA_woes.html create mode 100644 docs/posts/bash_harder_with_vim.html create mode 100644 docs/posts/bye_bye_BDFs.html create mode 100644 docs/posts/color_conundrum.html create mode 100644 docs/posts/get_better_at_yanking_and_putting_in_vim.html create mode 100644 docs/posts/hold_position!.html create mode 100644 docs/posts/my_setup.html create mode 100644 docs/posts/onivim_sucks.html create mode 100644 docs/posts/static_sites_with_bash.html diff --git a/docs/posts/WPA_woes.html b/docs/posts/WPA_woes.html new file mode 100644 index 0000000..f4f8d8e --- /dev/null +++ b/docs/posts/WPA_woes.html @@ -0,0 +1,68 @@ + + + + + + + + + + + + + +
+
12/10 2019
+ + WPA Woes + +
+

I finally got around to installing Void GNU/Linux on my main +computer. Rolling release, non-systemd, need I say more?

+ +

As with all GNU/Linux distributions, wireless networks had +me in a fix. If you can see this post, it means I’ve managed +to get online. It turns out, wpa_supplicant was detecting the +wrong interface by default (does it ever select the right +one?). Let us fix that:

+ +
$ sudo rm -r /var/service/wpa_supplicant
+$ sudo killall dhcpcd
+
+ +

What is the right interface though?

+ +
$ iw dev
+   ...
+   Interface wlp2s0
+   ...
+
+ +

Aha! Let us run wpa_supplicant on that interface, as a +background process:

+ +
$ sudo wpa_supplicant -B -i wlp2s0 -c /etc/wpa_supplicant/wpa_supplicant.conf
+$ sudo dhcpcd -B wlp2s0
+$ ping google.com
+PING ...
+
+ +

Yay! Make those changes perpetual by enabling the service:

+ +
------------------------------------------------------
+# Add these to /etc/wpa_supplicant/wpa_supplicant.conf
+OPTS="-B"
+WPA_INTERFACE="wlp2s0"
+------------------------------------------------------
+$ sudo ln -s /etc/sv/wpa_supplicant /var/service/
+$ sudo ln -s /etc/sv/dhcpcd /var/service/
+$ sudo sv restart wpa_supplicant
+$ sudo sv restart dhcpcd
+
+ +
+ ‹ Back +
+
+ + diff --git a/docs/posts/bash_harder_with_vim.html b/docs/posts/bash_harder_with_vim.html new file mode 100644 index 0000000..6e0f9bd --- /dev/null +++ b/docs/posts/bash_harder_with_vim.html @@ -0,0 +1,84 @@ + + + + + + + + + + + + + +
+
31/07 2019
+ + Bash Harder With Vim + +
+

Bash is tricky, don’t let your editor get in your way. Here’s a couple of neat +additions you could make to your vimrc for a better shell programming +experience.

+ +
+ +

Man pages inside vim

+ +

Source this script to get started:

+ +
runtime ftplugin/man.vim
+
+ +

Now, you can open manpages inside vim with :Man! It adds nicer syntax highlighting +and the ability to jump around with Ctrl-] and Ctrl-T.

+ +

By default, the manpage is opened in a horizontal split, I prefer using a new tab:

+ +
let g:ft_man_open_mode = 'tab'
+
+ +
+ +

Scratchpad to test your commands

+ +

I often test my sed substitutions, here is +a sample from the script used to generate this site:

+ +
# a substitution to convert snake_case to Title Case With Spaces
+echo "$1" | sed -E -e "s/\..+$//g"  -e "s/_(.)/ \u\1/g" -e "s/^(.)/\u\1/g"
+
+ +

Instead of dropping into a new shell, just test it out directly from vim!

+ +
    +
  • Yank the line into a register:

    + +
    yy
    +
  • +
  • Paste it into the command-line window:

    + +
    q:p
    +
  • +
  • Make edits as required:

    + +
    syntax off            # previously run commands
    +edit index.html       # in a buffer!
    +w | so %
    +!echo "new_post.md" | sed -E -e "s/\..+$//g"  --snip--
    +^--- note the use of '!'
    +
  • +
  • Hit enter with the cursor on the line containing your command!

    + +
    $ vim
    +New Post         # output
    +Press ENTER or type command to continue
    +
  • +
+ +
+ ‹ Back +
+
+ + diff --git a/docs/posts/bye_bye_BDFs.html b/docs/posts/bye_bye_BDFs.html new file mode 100644 index 0000000..e323c9d --- /dev/null +++ b/docs/posts/bye_bye_BDFs.html @@ -0,0 +1,51 @@ + + + + + + + + + + + + + +
+
07/08 2019
+ + Bye Bye BDFs + +
+

Glyph Bitmap Distribution Format is no more, as the creators of +Pango, one of the most widely used text rendering +libraries, +announced +their plans for Pango 1.44.

+ +

Until recently, Pango used FreeType to draw fonts. They will be moving over +to Harfbuzz, an evolution of FreeType.

+ +

Why?

+ +

In short, FreeType was hard to work with. It required complex logic, and +provided no advantage over Harfbuzz (other than being able to fetch +opentype metrics with ease).

+ +

Upgrading to Pango v1.44 will break your GTK applications (if you use a +bdf/pcf bitmap font). Harfbuzz does support bitmap-only OpenType fonts, +otbs. Convert your existing fonts over to otbs using +FontForge. It is to be noted that applications +such as xterm and rxvt use xft (X FreeType) to render fonts, and will +remain unaffected by the update.

+ +

Both scientifica and +curie will soon ship with bitmap-only +OpenType font formats.

+ +
+ ‹ Back +
+
+ + diff --git a/docs/posts/color_conundrum.html b/docs/posts/color_conundrum.html new file mode 100644 index 0000000..979dc9c --- /dev/null +++ b/docs/posts/color_conundrum.html @@ -0,0 +1,62 @@ + + + + + + + + + + + + + +
+
31/12 2019
+ + Color Conundrum + +
+

This piece aims to highlight (pun intended) some of the +reasons behind my color +free editor setup.

+ +

Imagine highlighting an entire book because all of it is +important. That is exactly what (most) syntax highlighting +does. It is difficult for the human eye to filter out noise +in rainbow barf. Use color to draw attention, not diverge +it.

+ +

At the same time, a book devoid of color is boring! What +is the takeaway from this 10 line paragraph? What are the +technical terms used?

+ +

Prose and code are certainly different, but the fickle +minded human eye is the same. The eye constantly looks for a +frame of reference, a focal point. It grows tired when it +can’t find one.

+ +

The following comparison does a better job of explaining +(none, ample and over-the-top highlighting, from left to +right):

+ +

hi.png

+ +

Without highlighting (far left), it is hard to differentiate +between comments and code! The florid color scheme (far +right) is no good either, it contains too many attention +grabbers. The center sample is a healthy balance of both. +Function calls and constants stand out, and repetitive +keywords and other noise (let, as) are mildly dimmed +out. Comments and non-code text (sign column, status text) +are dimmed further.

+ +

I’ll stop myself before I rant about color contrast and +combinations.

+ +
+ ‹ Back +
+
+ + diff --git a/docs/posts/get_better_at_yanking_and_putting_in_vim.html b/docs/posts/get_better_at_yanking_and_putting_in_vim.html new file mode 100644 index 0000000..82b283f --- /dev/null +++ b/docs/posts/get_better_at_yanking_and_putting_in_vim.html @@ -0,0 +1,48 @@ + + + + + + + + + + + + + +
+
29/07 2019
+ + Get Better At Yanking And Putting In Vim + +
+
    +
  1. reselecting previously selected text (i use this to fix botched selections):

    + +
    gv  " :h gv for more
    +    " you can use `o` in visual mode to go to the `Other` end of the selection
    +    " use a motion to fix the selection
    +
  2. +
  3. reselecting previously yanked text:

    + +
    `[v`]
    +`[         " marks the beginning of the previously yanked text   :h `[
    +`]         " marks the end                                       :h `]
    + v         " visual select everything in between
    +
    +nnoremap gb `[v`]    " "a quick map to perform the above
    +
  4. +
  5. pasting and indenting text (in one go):

    + +
    ]p   " put (p) and adjust indent to current line
    +]P   " put the text before the cursor (P) and adjust indent to current line
    +
  6. +
+ +
+ ‹ Back +
+
+ + diff --git a/docs/posts/hold_position!.html b/docs/posts/hold_position!.html new file mode 100644 index 0000000..a0f3fdf --- /dev/null +++ b/docs/posts/hold_position!.html @@ -0,0 +1,47 @@ + + + + + + + + + + + + + +
+
30/07 2019
+ + Hold Position! + +
+

Often times, when I run a vim command that makes “big” changes to a file (a +macro or a :vimgrep command) I lose my original position and feel disoriented.

+ +

Save position with winsaveview()!

+ +

The winsaveview() command returns a Dictionary that contains information +about the view of the current window. This includes the cursor line number, +cursor coloumn, the top most line in the window and a couple of other values, +none of which concern us.

+ +

Before running our command (one that jumps around the buffer, a lot), we save +our view, and restore it once its done, with winrestview.

+ +
let view = winsaveview()
+s/\s\+$//gc              " find and (confirm) replace trailing blanks
+winrestview(view)        " restore our original view!
+
+ +

It might seem a little overkill in the above example, just use “ (double +backticks) instead, but it comes in handy when you run your file through +heavier filtering.

+ +
+ ‹ Back +
+
+ + diff --git a/docs/posts/my_setup.html b/docs/posts/my_setup.html new file mode 100644 index 0000000..4eb6605 --- /dev/null +++ b/docs/posts/my_setup.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + + +
+
07/11 2019
+ + My Setup + +
+

Decided to do one of these because everyone does one of +these.

+ +

scrot

+ +

My entire setup is managed with GNU stow, making it easier +to replicate on fresh installations. You can find my +configuration files on GitHub.

+ +

I run Void Linux (glibc) on my +HP Envy 13" (2018). +To keep things simple, I run a raw X session with 2bwm as my +window manager, along with dunst (notification daemon) and +Sam’s compton +(compositor) fork.

+ +

I am a fan of GNU tools, so I use bash as my shell, and +coreutils to manage files, archives, strings, paths etc. I +edit files with vim, chat with weechat, listen to music +with cmus, monitor processes with htop, manage sessions +with tmux, read pdfs in zathura. I rarely ever leave +the comfort of my terminal emulator, urxvt.

+ +

Most of my academic typesetting is done with TeX, and +compiled with xelatex. Other fun documents are made with +GIMP :).

+ +
+ ‹ Back +
+
+ + diff --git a/docs/posts/onivim_sucks.html b/docs/posts/onivim_sucks.html new file mode 100644 index 0000000..ea621c4 --- /dev/null +++ b/docs/posts/onivim_sucks.html @@ -0,0 +1,53 @@ + + + + + + + + + + + + + +
+
02/08 2019
+ + Onivim Sucks + +
+

Onivim is a ‘modern modal editor’, combining fancy +interface and language features with vim-style modal editing. What’s wrong you +ask?

+ +

Apart from buggy syntax highlighting, +broken scrolling and +others, +Onivim is proprietary software. It is licensed under a commercial +end user agreement license, +which prohibits redistribution in both object code and source code formats.

+ +

Onivim’s core editor logic (bits that belong to vim), have been separated from +the interface, into libvim. libvim is +licensed under MIT, which means, this ‘extension’ of vim is perfectly in +adherence to vim’s license text! +Outrun Labs are exploiting this loophole (distributing vim as a library) to +commercialize Onivim.

+ +

Onivim’s source code is available on GitHub. +They do mention that the source code trickles down to the +oni2-mit repository, which (not yet) contains +MIT-licensed code, 18 months after each commit to the original repository.

+ +

Want to contribute to Onivim? Don’t. They make a profit out of your contributions. +Currently, Onivim is priced at $19.99, ‘pre-alpha’ pricing which is 80% off the +final price! If you are on the lookout for an editor, I would suggest using +Vim, charity ware that actually works, and costs $100 lesser.

+ +
+ ‹ Back +
+
+ + diff --git a/docs/posts/static_sites_with_bash.html b/docs/posts/static_sites_with_bash.html new file mode 100644 index 0000000..70eda1a --- /dev/null +++ b/docs/posts/static_sites_with_bash.html @@ -0,0 +1,74 @@ + + + + + + + + + + + + + +
+
23/11 2019
+ + Static Sites With Bash + +
+

After going through a bunch of static site generators +(pelican, +hugo, +vite), I decided to roll +my own. If you are more of the ‘show me the code’ kinda guy, +here you go.

+ +

Text formatting: I chose to write in markdown, and convert +to html with lowdown.

+ +

Directory structure: I host my site on GitHub pages, so +docs/ has to be the entry point. Markdown formatted posts +go into posts/, get converted into html, and end up in +docs/index.html, something like this:

+ +
posts=$(ls -t ./posts)     # chronological order!
+for f in $posts; do
+    file="./posts/"$f      # `ls` mangled our file paths
+    echo "generating post $file"
+
+    html=$(lowdown "$file")
+    echo -e "html" >> docs/index.html
+done
+
+ +

Assets: Most static site generators recommend dropping image +assets into the site source itself. That does have it’s +merits, but I prefer hosting images separately:

+ +
# strip file extension
+ext="${1##*.}"
+
+# generate a random file name
+id=$( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 2 | head -n 1 )
+id="$id.$ext"
+
+# copy to my file host
+scp -P 443 "$1" emerald:files/"$id" 
+echo "https://files.nerdypepper.tech/$id"
+
+ +

Templating: +generate.sh +brings the above bits and pieces together (with some extra +cruft to avoid javascript). It uses sed to produce nice +titles from the file names (removes underscores, +title-case), and date(1) to add the date to each post +listing!

+ +
+ ‹ Back +
+
+ + diff --git a/generate.sh b/generate.sh index af70b33..5399b3a 100755 --- a/generate.sh +++ b/generate.sh @@ -1,28 +1,23 @@ #! /usr/bin/env bash -post_title() { +title_wrapper() { # remove extension # snake to title case echo "$1" | sed -E -e "s/\..+$//g" -e "s/_(.)/ \u\1/g" -e "s/^(.)/\u\1/g" } -post_wrapper() { - # 1 - post id - # 2 - post content - # 3 - date - title="$( post_title $1 )" +link_wrapper() { + # 1 - id + # 2 - title + # 2 - date echo -ne " -
- -
$3
- $title -
-
- $2 -
-
-
+
+
$3
+ + $2 + +
" } @@ -57,17 +52,22 @@ echo " # posts posts=$(ls -t ./posts); +mkdir -p docs/posts + for f in $posts; do file="./posts/"$f echo "generating post $file" id="${file##*/}" # ill name my posts just fine - html=$(lowdown "$file") # generate posts + html=$(lowdown "$file") + post_title=$(title_wrapper "$id") post_date=$(date -r "$file" "+%d/%m %Y") - post_div=$(post_wrapper "$id" "$html" "$post_date") - echo -ne "$post_div" >> docs/index.html + post_link=$(link_wrapper "${id%.*}" "$post_title" "$post_date") + + echo -ne "$post_link" >> docs/index.html + esh -s /bin/bash -o "docs/posts/${id%.*}.html" "./post.esh" file="$file" date="$post_date" title="$post_title" first_visible="0" done -- cgit v1.2.3