Skip to content

Instantly share code, notes, and snippets.

View laggardkernel's full-sized avatar

laggardkernel laggardkernel

View GitHub Profile
@laggardkernel
laggardkernel / pitfall-of-while-read-in-bash.bash
Created June 18, 2019 05:31
pitfall of while read #bash
# A background process started within a loop may compete with
# the loop for stdin, which causes the `while read` loop stop
# after the 1st round.
cat << EOF >| tasklist.txt
1
2
3
EOF
@laggardkernel
laggardkernel / catch-empty-string-into-array.bash
Created June 18, 2019 05:34
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() {
@laggardkernel
laggardkernel / gpg-wrapper.md
Last active July 12, 2019 13:54
gpg wrapper/helper used for dotfiles #bash
  d_weechat:
    cmpignore:
    - '*/weechat_fifo'
    - '*/script/plugins.xml.gz'
    - '*/logs'
    dst: ~/.config/weechat
    src: .config/weechat
    trans: gpg-single "sec.conf"
    trans_write: gpg-single "sec.conf"
@laggardkernel
laggardkernel / whether-a-command-exists.md
Last active October 16, 2019 13:58
determine whether a command exists in zsh

Determine Whether a Command Exists in ZSH

The main purpose is to determine whether a command exists in PATH. Some of the following methods also support determine the existence of functions. The comparison focuses on speed, not support coverage.

export TIMEFMT=$'%U user %S system %P cpu %*E total'time (for i ({1..100}) if (($+commands[tree])); then echo 1 &>/dev/null; fi)
@laggardkernel
laggardkernel / cache-first.md
Created July 4, 2019 04:42
Cash First #zsh
_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
  [[ -n $XDG_RUNTIME_DIR ]] && local TMPDIR="$XDG_RUNTIME_DIR"
@laggardkernel
laggardkernel / rsync-cwd.md
Created July 7, 2020 06:10
rsync CWD to remote server #bash #zsh
function rsync-up {
  if ! (($#)); then
    echo "No host is provided" >/dev/stderr
    return 1
  fi
  local host="$1"
  local local_dir remote_dir cmd git_conf ignore_conf

  # https://git-scm.com/docs/gitignore
@laggardkernel
laggardkernel / clear-scrollback-buffer.md
Created September 10, 2020 08:53
Clear Scrollback Buffer #zsh #bash #shell

Clear Scrollback Buffer

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

# https://unix.stackexchange.com/a/531178/246718

# Common function
function clear-scrollback {
  # https://invisible-island.net/ncurses/man/clear.1.html
  # https://unix.stackexchange.com/a/375784/246718
@laggardkernel
laggardkernel / trigger-chpwd-hook-on-startup.md
Last active September 17, 2020 11:50
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
    "$f"
@laggardkernel
laggardkernel / redispipeline.md
Created July 9, 2020 05:05
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.

# defaults.py
REDIS_ENCODING = "utf-8"
REDIS_FAILED_URLS_KEY = "%(spidername)s:failed_urls"
@laggardkernel
laggardkernel / link-nvim-conf-to-vim.md
Last active February 12, 2023 23:45
Share confs between vim and nvim #vim