diff options
-rw-r--r-- | alias | 5 | ||||
-rw-r--r-- | bin/log/shellrc | 2 | ||||
-rwxr-xr-x | bin/mail/append_authorized_key.sh | 2 | ||||
-rwxr-xr-x | bin/mail/comment.sh | 41 | ||||
-rw-r--r-- | misc/pacman/list | 62 | ||||
-rw-r--r-- | mutt/default | 2 | ||||
-rw-r--r-- | mutt/muttrc.topo | 134 | ||||
-rw-r--r-- | snippets/bash_read_from_pipe | 4 | ||||
-rw-r--r-- | vim/init/highlight.vim | 2 |
9 files changed, 182 insertions, 72 deletions
@@ -22,7 +22,7 @@ alias zsh.sourced='zsh -o SOURCE_TRACE' | |||
22 | 22 | ||
23 | # }}} | 23 | # }}} |
24 | # CUSTOM HELPER {{{ | 24 | # CUSTOM HELPER {{{ |
25 | cdh() { cd $SETTING_DIR/$@; } | 25 | cdh() { set -x; cd $SETTING_DIR/${*// //}; set +x; } |
26 | alias chh="tig -C $SETTING_DIR status" | 26 | alias chh="tig -C $SETTING_DIR status" |
27 | # }}} | 27 | # }}} |
28 | # Text Encode/Decode{{{ | 28 | # Text Encode/Decode{{{ |
@@ -51,7 +51,7 @@ alias fb='sudo fail2ban-client' | |||
51 | # Nginx{{{ | 51 | # Nginx{{{ |
52 | alias vgx='sudo vim /etc/nginx/sites-enabled/vps -c "autocmd BufWritePost * !nginx -t && sudo systemctl reload nginx"' | 52 | alias vgx='sudo vim /etc/nginx/sites-enabled/vps -c "autocmd BufWritePost * !nginx -t && sudo systemctl reload nginx"' |
53 | alias ng.conf='sudo vim /etc/nginx/nginx.conf -c "autocmd BufWritePost * !nginx -t && sudo systemctl reload nginx"' | 53 | alias ng.conf='sudo vim /etc/nginx/nginx.conf -c "autocmd BufWritePost * !nginx -t && sudo systemctl reload nginx"' |
54 | alias ng.log='setterm --linewrap off; tail -n 200 -f /var/log/nginx/access.log; setterm --linewrap on' | 54 | alias ng.log='setterm --linewrap off; tail -f /var/log/nginx/access.log; setterm --linewrap on' |
55 | alias cdngx='cd /etc/nginx' | 55 | alias cdngx='cd /etc/nginx' |
56 | # }}} | 56 | # }}} |
57 | # Web {{{ | 57 | # Web {{{ |
@@ -208,6 +208,7 @@ alias smtp.queue='sudo smtpctl show queue' | |||
208 | alias smtp.show='sudo smtpctl show' | 208 | alias smtp.show='sudo smtpctl show' |
209 | alias smtp.ctl='sudo smtpctl' | 209 | alias smtp.ctl='sudo smtpctl' |
210 | alias imap.conf='sudo vim /etc/dovecot/dovecot.conf' | 210 | alias imap.conf='sudo vim /etc/dovecot/dovecot.conf' |
211 | alias cdmail='cd ~/Maildir' | ||
211 | alias m='mutt' | 212 | alias m='mutt' |
212 | alias mutt.rc="$EDITOR ~/.config/mutt/muttrc" | 213 | alias mutt.rc="$EDITOR ~/.config/mutt/muttrc" |
213 | alias h='himalaya' | 214 | alias h='himalaya' |
diff --git a/bin/log/shellrc b/bin/log/shellrc index a39e291..b3c95fc 100644 --- a/bin/log/shellrc +++ b/bin/log/shellrc | |||
@@ -1,7 +1,7 @@ | |||
1 | # about vimwiki | 1 | # about vimwiki |
2 | alias cdl='cd ~/log' | 2 | alias cdl='cd ~/log' |
3 | alias chw='tig -C ~/log' | 3 | alias chw='tig -C ~/log' |
4 | ww() { entry="${1:-plan.context}"; vim ~/log/${entry%%.md}.md; } | 4 | ww() { entry="${1:-inbox}"; vim ~/log/${entry%%.md}.md; } |
5 | wj() { echo "$@" >>~/log/buffer.md; } | 5 | wj() { echo "$@" >>~/log/buffer.md; } |
6 | wg() { grep -r "$@" --color --exclude-dir={logseq,.git,.obsidian} ~/log; } | 6 | wg() { grep -r "$@" --color --exclude-dir={logseq,.git,.obsidian} ~/log; } |
7 | wi() { cat ~/log/${1%%.md}.md; } | 7 | wi() { cat ~/log/${1%%.md}.md; } |
diff --git a/bin/mail/append_authorized_key.sh b/bin/mail/append_authorized_key.sh index 950be90..3686959 100755 --- a/bin/mail/append_authorized_key.sh +++ b/bin/mail/append_authorized_key.sh | |||
@@ -13,7 +13,7 @@ MAIL="$(cat)" | |||
13 | test -f ~/.config/passphase || exit 1 | 13 | test -f ~/.config/passphase || exit 1 |
14 | PASSPHASE="$(cat ~/.config/passphase)" | 14 | PASSPHASE="$(cat ~/.config/passphase)" |
15 | 15 | ||
16 | # Only execute the following script when header matched | 16 | # Check passphase, or exit 0 |
17 | grep -qE "^Passphase: ${PASSPHASE}" <<<"$MAIL" || exit 0 | 17 | grep -qE "^Passphase: ${PASSPHASE}" <<<"$MAIL" || exit 0 |
18 | 18 | ||
19 | # Append comment and last line to ~/.ssh/authorized_keys | 19 | # Append comment and last line to ~/.ssh/authorized_keys |
diff --git a/bin/mail/comment.sh b/bin/mail/comment.sh new file mode 100755 index 0000000..807bcb2 --- /dev/null +++ b/bin/mail/comment.sh | |||
@@ -0,0 +1,41 @@ | |||
1 | #! /bin/bash | ||
2 | |||
3 | output_dir=${output_dir:-/srv/http} | ||
4 | |||
5 | # Restore mail into variable | ||
6 | MAIL="$(tr -d '\r')" | ||
7 | headers="$(<<<"$MAIL" sed '/^$/ q')" | ||
8 | contents="$(<<<"$MAIL" sed -n '/^$/,$ p' | sed '1d')" | ||
9 | |||
10 | # enable execute last command in pipe under current shell | ||
11 | shopt -s lastpipe; set +m; | ||
12 | |||
13 | # get route (target page of comment) and id | ||
14 | <<<"$MAIL" sed -En '/^To: comment+/ {s/^To: comment\+([^+]+)\+?(.*)@.*$/\1 \2/p; q}; /^$/q' \ | ||
15 | | read route id | ||
16 | |||
17 | # sender want comment on some page, but find no route for this | ||
18 | if [ $route = "" ]; then | ||
19 | echo 'rcpt "comment+<ROUTE>" not matched' >&2 | ||
20 | exit 1 | ||
21 | fi | ||
22 | |||
23 | output=$output_dir/${route#/}.comment | ||
24 | exec 1>>$output | ||
25 | |||
26 | # check mail includes multiple part | ||
27 | <<<"$headers" grep '^Content-Type:.*mixed' >/dev/null | ||
28 | if [ $? -eq 0 ]; then | ||
29 | boundary="$(<<<"$headers" sed -En 's/^Content-Type:.*boundary="(.*)".*$/\1/p')" | ||
30 | if [ $boundary = "" ]; then | ||
31 | echo 'cannot get boundary from mail header' >&2 | ||
32 | exit 1 | ||
33 | fi | ||
34 | |||
35 | # print content of first mail part | ||
36 | pattern="\\@^--${boundary}\$@" | ||
37 | <<<"$contents" sed -n "${pattern},${pattern} p" | sed -n "1,4d; ${pattern} q; p" | ||
38 | else | ||
39 | # print content | ||
40 | <<<"$contents" sed '/^$/,$ p' | ||
41 | fi | ||
diff --git a/misc/pacman/list b/misc/pacman/list new file mode 100644 index 0000000..4eeaec0 --- /dev/null +++ b/misc/pacman/list | |||
@@ -0,0 +1,62 @@ | |||
1 | autoconf 2.71-1 | ||
2 | automake 1.16.5-1 | ||
3 | base 2-2 | ||
4 | bison 3.8.2-3 | ||
5 | btrfs-progs 5.16.2-1 | ||
6 | certbot-nginx 1.26.0-1 | ||
7 | cronie 1.6.0-2 | ||
8 | discount 2.2.7-2 | ||
9 | docker 1:20.10.14-1 | ||
10 | dovecot 2.3.18-1 | ||
11 | fakeroot 1.28-1 | ||
12 | flex 2.6.4-3 | ||
13 | fzf 0.30.0-1 | ||
14 | gcc 11.2.0-4 | ||
15 | gd 2.3.3-3 | ||
16 | gdal 3.4.0-5 | ||
17 | git 2.35.1-1 | ||
18 | github-cli 2.7.0-1 | ||
19 | gnu-netcat 0.7.1-8 | ||
20 | grub 2:2.06-5 | ||
21 | htop 3.1.2-1 | ||
22 | hugo 0.96.0-1 | ||
23 | inetutils 2.2-1 | ||
24 | jq 1.6-4 | ||
25 | linux 5.17.1.arch1-1 | ||
26 | linux-firmware 20220309.cd01f85-1 | ||
27 | lshw B.02.19.2-4 | ||
28 | lsof 4.94.0-1 | ||
29 | m4 1.4.19-1 | ||
30 | make 4.3-3 | ||
31 | man-db 2.10.2-1 | ||
32 | mutt 2.2.2-1 | ||
33 | net-tools 2.10-1 | ||
34 | nginx-mainline-mod-dav-ext 3.0.0-21 | ||
35 | nginx-mod-headers-more 0.33-12 | ||
36 | openssh 8.9p1-1 | ||
37 | pass 1.7.4-2 | ||
38 | patch 2.7.6-8 | ||
39 | pkgconf 1.8.0-1 | ||
40 | pkgfile 21-2 | ||
41 | postfix 3.7.0-2 | ||
42 | ranger 1.9.3-4 | ||
43 | rapidjson 1.1.0-5 | ||
44 | s-nail 14.9.23-1 | ||
45 | sudo 1.9.10-1 | ||
46 | tig-git 2.5.4.r18.gf92286a6-1 | ||
47 | tiv 2015-2 | ||
48 | tldr 3.1.0-1 | ||
49 | tmux 3.2_a-1 | ||
50 | tree 2.0.2-1 | ||
51 | ufw 0.36.1-1 | ||
52 | unzip 6.0-18 | ||
53 | vim 8.2.4651-1 | ||
54 | viu 1.4.0-1 | ||
55 | wget 1.21.3-1 | ||
56 | which 2.21-5 | ||
57 | words 2.1-6 | ||
58 | xsel 1.2.0.20200527-1 | ||
59 | yay 10.3.1-2 | ||
60 | yq 2.14.0-1 | ||
61 | zip 3.0-10 | ||
62 | zsh 5.8.1-1 | ||
diff --git a/mutt/default b/mutt/default index bae76f6..01730a1 100644 --- a/mutt/default +++ b/mutt/default | |||
@@ -1,5 +1,5 @@ | |||
1 | # Edit rc file and source it. This is the most important thing | 1 | # Edit rc file and source it. This is the most important thing |
2 | macro index \Cv ":set wait_key=no<Return>!$EDITOR ~/.config/mutt/muttrc<Return>:source ~/.config/mutt/muttrc<Return>:set wait_key=yes<Return>" | 2 | macro index,browser \Cv ":set wait_key=no<Return>!$EDITOR ~/.config/mutt/muttrc<Return>:source ~/.config/mutt/muttrc<Return>:set wait_key=yes<Return>" |
3 | 3 | ||
4 | # Connection options | 4 | # Connection options |
5 | set ssl_force_tls = yes | 5 | set ssl_force_tls = yes |
diff --git a/mutt/muttrc.topo b/mutt/muttrc.topo index c737cb7..48e2b10 100644 --- a/mutt/muttrc.topo +++ b/mutt/muttrc.topo | |||
@@ -6,14 +6,14 @@ set folder = "/home/pham/Maildir" | |||
6 | set smtp_url = "smtp://$my_user:25" | 6 | set smtp_url = "smtp://$my_user:25" |
7 | 7 | ||
8 | # Identify meself | 8 | # Identify meself |
9 | #set from = "pham@topo.tw" | 9 | set from = "pham@topo.tw" |
10 | #set realname = "謝晉凡 Hsieh Chin Fan" | 10 | set realname = "謝晉凡 Hsieh Chin Fan" |
11 | #set signature = "~/.config/mutt/.signature" | 11 | set signature = "~/.config/mutt/.signature" |
12 | #set pgp_use_gpg_agent = yes | 12 | set pgp_use_gpg_agent = yes |
13 | #set crypt_use_gpgme = yes | 13 | set crypt_use_gpgme = yes |
14 | #set pgp_timeout = 300 | 14 | set pgp_timeout = 300 |
15 | #set pgp_sign_as = 6DD8C14A # replace 6DD8C14A with your gpg key id | 15 | set pgp_sign_as = 6DD8C14A # replace 6DD8C14A with your gpg key id |
16 | #set autocrypt = yes | 16 | set autocrypt = yes |
17 | 17 | ||
18 | # For contacts | 18 | # For contacts |
19 | set display_filter = ~/.config/mutt/message_filter.sh | 19 | set display_filter = ~/.config/mutt/message_filter.sh |
@@ -21,62 +21,62 @@ source ~/.config/mutt/alias.topo | |||
21 | source ~/.config/mutt/hooks.topo | 21 | source ~/.config/mutt/hooks.topo |
22 | 22 | ||
23 | ## Basic Mailbox | 23 | ## Basic Mailbox |
24 | #set spoolfile = "+INBOX" | 24 | set spoolfile = "+" |
25 | #set mbox= "+mbox" | 25 | set mbox= "+mbox" |
26 | #set move = yes | 26 | set move = yes |
27 | #set record = "+INBOX" | 27 | set record = "+Sent" |
28 | #set trash = "+Trash" | 28 | set trash = "+Trash" |
29 | #set postponed = "+Drafts" | 29 | set postponed = "+Drafts" |
30 | #set mask="!(INBOX|mbox|dev|Sent|Trash|Drafts|DeltaChat|civildef|hometeach|osm|STOCK|pay|keep|login|update|test|spam)" | 30 | set mask="!(tmp|new|cur|dovecot.*|\\..*)" |
31 | # | 31 | |
32 | ## Sidebar | 32 | # Sidebar |
33 | #mailboxes -label '📭 [i]' +INBOX \ | 33 | mailboxes -label '📭 [i]' + \ |
34 | # -label '📥 [m]' +mbox \ | 34 | -label '📥 [m]' +mbox \ |
35 | # -label '👀 [d]' +dev \ | 35 | -label '👀 [d]' +dev \ |
36 | # -label '💬 [D]' +DeltaChat \ | 36 | -label '💬 [D]' +DeltaChat \ |
37 | # +github \ | 37 | +github \ |
38 | # +JOB \ | 38 | +JOB \ |
39 | # +promotion \ | 39 | +promotion \ |
40 | # "+---- Watch -----" \ | 40 | "+---- Watch -----" \ |
41 | # -label CivilDEF +civildef \ | 41 | -label CivilDEF +civildef \ |
42 | # +hometeach \ | 42 | +hometeach \ |
43 | # -label OSM +osm \ | 43 | -label OSM +osm \ |
44 | # +STOCK \ | 44 | +STOCK \ |
45 | # -label '📢 [f]' +feedback \ | 45 | -label '📢 [f]' +feedback \ |
46 | # "+-- Permanent ---" \ | 46 | "+-- Permanent ---" \ |
47 | # -label '💲 [p]' +pay \ | 47 | -label '💲 [p]' +pay \ |
48 | # -label '🍺 [k]' +keep \ | 48 | -label '🍺 [k]' +keep \ |
49 | # -label '📤 [s]' +Sent \ | 49 | -label '📤 [s]' +Sent \ |
50 | # -label '🗑 [t]' -poll +Trash \ | 50 | -label '🗑 [t]' -poll +Trash \ |
51 | # +login \ | 51 | +login \ |
52 | # +update \ | 52 | +update \ |
53 | # +service \ | 53 | +service \ |
54 | # +Drafts \ | 54 | +Drafts \ |
55 | # +test \ | 55 | +test \ |
56 | # +spam | 56 | +spam |
57 | # | 57 | |
58 | ## Keybinding | 58 | # Keybinding |
59 | #macro index,pager <f4> '<sync-mailbox><enter-command>source ~/.config/mutt/muttrc.topo<enter><change-folder>!<enter>' | 59 | macro index,pager <f4> '<sync-mailbox><enter-command>source ~/.config/mutt/muttrc.topo<enter><change-folder>!<enter>' |
60 | #macro index,pager <f2> '<sync-mailbox><enter-command>source ~/.config/mutt/muttrc.gmail<enter><change-folder>!<enter>' | 60 | macro index,pager <f2> '<sync-mailbox><enter-command>source ~/.config/mutt/muttrc.gmail<enter><change-folder>!<enter>' |
61 | #macro index,pager <f3> '<sync-mailbox><enter-command>source ~/.config/mutt/muttrc.b97602041<enter><change-folder>!<enter>' | 61 | macro index,pager <f3> '<sync-mailbox><enter-command>source ~/.config/mutt/muttrc.b97602041<enter><change-folder>!<enter>' |
62 | # | 62 | |
63 | ## Hooks for accounts | 63 | # Hooks for accounts |
64 | ##folder-hook imaps://imap.gmail.com/ 'source ~/.config/mutt/muttrc.gmail' | 64 | #folder-hook imaps://imap.gmail.com/ 'source ~/.config/mutt/muttrc.gmail' |
65 | ##folder-hook ~/Maildir 'source ~/.config/mutt/muttrc.b97602041' | 65 | #folder-hook ~/Maildir 'source ~/.config/mutt/muttrc.b97602041' |
66 | # | 66 | |
67 | ## Change mailboxes | 67 | # Change mailboxes |
68 | #macro index,pager,browser gi "<change-folder>+INBOX<Return>" "Switch to INBOX folder" | 68 | macro index,pager,browser gi "<change-folder>+<Return>" "Switch to INBOX folder" |
69 | #macro index,pager,browser gm "<change-folder>+mbox<Return>" "Switch to mbox folder" | 69 | macro index,pager,browser gm "<change-folder>+mbox<Return>" "Switch to mbox folder" |
70 | #macro index,pager,browser gp "<change-folder>+pay<Return>" "Switch to pay folder" | 70 | macro index,pager,browser gp "<change-folder>+pay<Return>" "Switch to pay folder" |
71 | #macro index,pager,browser gP "<change-folder>+promotion<Return>" "Switch to promotion folder" | 71 | macro index,pager,browser gP "<change-folder>+promotion<Return>" "Switch to promotion folder" |
72 | #macro index,pager,browser gh "<change-folder>+hometeach<Return>" "Switch to hometeach folder" | 72 | macro index,pager,browser gh "<change-folder>+hometeach<Return>" "Switch to hometeach folder" |
73 | #macro index,pager,browser gs "<change-folder>+Sent<Return>" "Switch to Sent folder" | 73 | macro index,pager,browser gs "<change-folder>+Sent<Return>" "Switch to Sent folder" |
74 | #macro index,pager,browser gS "<change-folder>+spam<Return>" "Switch to spam folder" | 74 | macro index,pager,browser gS "<change-folder>+spam<Return>" "Switch to spam folder" |
75 | #macro index,pager,browser gd "<change-folder>+dev<Return>" "Switch to DEV folder" | 75 | macro index,pager,browser gd "<change-folder>+dev<Return>" "Switch to DEV folder" |
76 | #macro index,pager,browser gD "<change-folder>+DeltaChat<Return>" "Switch to DeltaChat folder" | 76 | macro index,pager,browser gD "<change-folder>+DeltaChat<Return>" "Switch to DeltaChat folder" |
77 | #macro index,pager,browser gt "<change-folder>+Trash<Return>" "Switch to Trash folder" | 77 | macro index,pager,browser gt "<change-folder>+Trash<Return>" "Switch to Trash folder" |
78 | #macro index,pager,browser gl "<change-folder>+login<Return>" "Switch to login folder" | 78 | macro index,pager,browser gl "<change-folder>+login<Return>" "Switch to login folder" |
79 | #macro index,pager,browser ga "<change-folder>+arch-general<Return>" "Switch to arch-general folder" | 79 | macro index,pager,browser ga "<change-folder>+arch-general<Return>" "Switch to arch-general folder" |
80 | #macro index,pager,browser gk "<change-folder>+keep<Return>" "Switch to keep folder" | 80 | macro index,pager,browser gk "<change-folder>+keep<Return>" "Switch to keep folder" |
81 | #macro index,pager,browser gu "<change-folder>+update<Return>" "Switch to update folder" | 81 | macro index,pager,browser gu "<change-folder>+update<Return>" "Switch to update folder" |
82 | #macro index,pager,browser gf "<change-folder>+feedback<Return>" "Switch to feedback folder" | 82 | macro index,pager,browser gf "<change-folder>+feedback<Return>" "Switch to feedback folder" |
diff --git a/snippets/bash_read_from_pipe b/snippets/bash_read_from_pipe new file mode 100644 index 0000000..47d22b8 --- /dev/null +++ b/snippets/bash_read_from_pipe | |||
@@ -0,0 +1,4 @@ | |||
1 | shopt -s lastpipe; set +m; | ||
2 | |||
3 | echo bar | read foo | ||
4 | echo $foo | ||
diff --git a/vim/init/highlight.vim b/vim/init/highlight.vim index 01f74b8..86dfc87 100644 --- a/vim/init/highlight.vim +++ b/vim/init/highlight.vim | |||
@@ -10,3 +10,5 @@ hi ExtraWhitespace ctermbg=red guibg=red | |||
10 | hi CursorLine guibg=NONE | 10 | hi CursorLine guibg=NONE |
11 | " Only works when :set cursorline in neovim | 11 | " Only works when :set cursorline in neovim |
12 | hi CursorLineNr term=bold cterm=bold ctermfg=226 gui=bold guifg=#eeee00 | 12 | hi CursorLineNr term=bold cterm=bold ctermfg=226 gui=bold guifg=#eeee00 |
13 | |||
14 | hi Folded guifg=#848089 guibg=#37343a ctermfg=lightblue ctermbg=black | ||