Skip to content

Instantly share code, notes, and snippets.


laggardkernel laggardkernel

View GitHub Profile
laggardkernel /
Created Sep 10, 2020
Clear Scrollback Buffer #zsh #bash #shell

Clear Scrollback Buffer

Crtl + L doesn't ensure scrollback buffer is cleared.


# Common function
function clear-scrollback {
laggardkernel /
Created Jul 9, 2020
RedisPipeline for scrapy #python #scrapy

Create a base class RedisPipeline, whichever Pipeline inherits it get a redis connection. Access to the redis conn with self.redis_server.

Dependency: scrapy_redis.

REDIS_FAILED_URLS_KEY = "%(spidername)s:failed_urls"
laggardkernel /
Created Jul 7, 2020
rsync CWD to remote server #bash #zsh
function rsync-up {
  if ! (($#)); then
    echo "No host is provided" >/dev/stderr
    return 1
  local host="$1"
  local local_dir remote_dir cmd git_conf ignore_conf

laggardkernel /
Last active Mar 3, 2021
Create chpwd Equivalent Hook in Bash #bash #hook #zsh

There's not a complete hook system designed in Bash when compared with other modern shells. PROMPT_COMMAND variable is used as a hook in Bash, which is equivalent to precmd hook in ZSH, fish_prompt in Fish. For the time being, ZSH is the only shell I've known that has a chpwd hook builtin.


If set, the value is interpreted as a command to execute before the printing of each primary prompt ($PS1).

chpwd Hook in Bash

laggardkernel /
Last active Sep 17, 2020
Trigger chpwd Hook on Startup #zsh #hook #direnv

By default, ZSH hook chpwd is not triggered on shell startup. The tutorial here provides some ideas to fix this.

Trigger all chpwd_functions on startup

We can use a trick to define a function run only once on precmd and destruct itself automatically.

function _self_destruct_hook {
  local f
  for f in ${chpwd_functions}; do
laggardkernel /
Last active Jul 26, 2021
Share confs between vim and nvim #vim
laggardkernel /
Last active Oct 16, 2019
Change umask based on working directory #zsh #direnv

Default umaks on macOS is 0077, which is different with most Linux distributions.

There're pros and cons about this very decision made by Apple. For the good part, temporary files generate under /tmp, $TMPDIR are accessible by the user himself only. These locations could be alternatives to $XDG_RUNTIME_DIR.

While, the problem is that since the new files are accessible by yourself only, it's inconvenient to share files with other users.

It's easy to change umask globally with a LauchAgent, or change it for shells

laggardkernel /
Last active Jul 12, 2019
gpg wrapper/helper used for dotfiles #bash
    - '*/weechat_fifo'
    - '*/script/plugins.xml.gz'
    - '*/logs'
    dst: ~/.config/weechat
    src: .config/weechat
    trans: gpg-single "sec.conf"
    trans_write: gpg-single "sec.conf"
_env_init() {
  # init version manager without rehash on startup
  local SHELL_NAME="zsh"
  local init_args=(- --no-rehash zsh)
  local zshrc="$HOME/.zshrc"
  # For security on Linux
laggardkernel / catch-empty-string-into-array.bash
Created Jun 18, 2019
catch empty string into array #bash
View catch-empty-string-into-array.bash
# catch empty strings into an array using `read`
# normal array assignment isn't able to catch emptry string.
unset k 2>/dev/null
while IFS=$'\n' read -r item; do k+=("$item"); done < <(printf "\n\n\n")
echo ${#k[@]}
[[ -z ${k[0]} ]] && echo "empty string is catched"
f() {