diff --git a/applications.org b/applications.org index dd54ff0..94c081a 100644 --- a/applications.org +++ b/applications.org @@ -8,33 +8,33 @@ :END: #+BEGIN_SRC conf - [Default Applications] - text/plain=nvim.desktop - x-scheme-handler/magnet=torrent.desktop; - text/x-shellscript=nvim.desktop; - image/png=img.desktop; - image/jpeg=img.desktop; - image/gif=img.desktop; - application/rss+xml=rss.desktop - x-scheme-handler/mailto=neomutt.desktop - message/rfc822=neomutt.desktop - application/x-bittorrent=deluge.desktop - application/pdf=zathura.desktop - x-scheme-handler/http=qutebrowser.desktop - x-scheme-handler/https=qutebrowser.desktop - x-scheme-handler/ftp=qutebrowser.desktop - x-scheme-handler/chrome=qutebrowser.desktop - text/html=qutebrowser.desktop - application/x-extension-htm=qutebrowser.desktop - application/x-extension-html=qutebrowser.desktop - application/x-extension-shtml=qutebrowser.desktop - application/xhtml+xml=qutebrowser.desktop - application/x-extension-xhtml=qutebrowser.desktop - application/x-extension-xht=qutebrowser.desktop +[Default Applications] +text/plain=nvim.desktop +x-scheme-handler/magnet=torrent.desktop; +text/x-shellscript=nvim.desktop; +image/png=img.desktop; +image/jpeg=img.desktop; +image/gif=img.desktop; +application/rss+xml=rss.desktop +x-scheme-handler/mailto=neomutt.desktop +message/rfc822=neomutt.desktop +application/x-bittorrent=deluge.desktop +application/pdf=zathura.desktop +x-scheme-handler/http=qutebrowser.desktop +x-scheme-handler/https=qutebrowser.desktop +x-scheme-handler/ftp=qutebrowser.desktop +x-scheme-handler/chrome=qutebrowser.desktop +text/html=qutebrowser.desktop +application/x-extension-htm=qutebrowser.desktop +application/x-extension-html=qutebrowser.desktop +application/x-extension-shtml=qutebrowser.desktop +application/xhtml+xml=qutebrowser.desktop +application/x-extension-xhtml=qutebrowser.desktop +application/x-extension-xht=qutebrowser.desktop - [Added Associations] - text/plain=mousepad.desktop; - application/x-bittorrent=deluge.desktop; +[Added Associations] +text/plain=mousepad.desktop; +application/x-bittorrent=deluge.desktop; #+END_SRC * Neomutt @@ -43,15 +43,15 @@ :header-args+: :comments both :mkdirp yes :END: #+begin_src conf - [Desktop Entry] - Name=Neomutt - GenericName=Email client - Exec=$TERMINAL -e neomutt %u - Type=Application - Icon=/usr/share/icons/Papirus/64x64/apps/mutt.svg - Categories=Network;Email; - MimeType=message/rfc822;x-scheme-handler/mailto;application/x-xpinstall; - StartupNotify=true +[Desktop Entry] +Name=Neomutt +GenericName=Email client +Exec=$TERMINAL -e neomutt %u +Type=Application +Icon=/usr/share/icons/Papirus/64x64/apps/mutt.svg +Categories=Network;Email; +MimeType=message/rfc822;x-scheme-handler/mailto;application/x-xpinstall; +StartupNotify=true #+end_src * Weechat @@ -60,18 +60,18 @@ :header-args+: :comments both :mkdirp yes :END: #+begin_src conf - [Desktop Entry] - Encoding=UTF-8 - MultipleArgs=false - Terminal=false - Exec=$TERMINAL --class=WeeChat -e 'weechat' - StartupWMClass=WeeChat - Icon=/usr/share/icons/Papirus/64x64/apps/weechat.svg - Type=Application - Categories=Network;IRCClient; - StartupNotify=true - Name=WeeChat - GenericName=IRC Client +[Desktop Entry] +Encoding=UTF-8 +MultipleArgs=false +Terminal=false +Exec=$TERMINAL --class=WeeChat -e 'weechat' +StartupWMClass=WeeChat +Icon=/usr/share/icons/Papirus/64x64/apps/weechat.svg +Type=Application +Categories=Network;IRCClient; +StartupNotify=true +Name=WeeChat +GenericName=IRC Client #+end_src * Matlab @@ -80,17 +80,17 @@ :header-args+: :comments both :mkdirp yes :END: #+begin_src conf - [Desktop Entry] - Version=R2020a - Type=Application - Terminal=false - MimeType=text/x-matlab - Exec=/usr/local/MATLAB/R2020a/bin/matlab -desktop -nosplash - Name=MATLAB - Icon=matlab - Categories=Development;Math;Science - Comment=Scientific computing environment - StartupNotify=true +[Desktop Entry] +Version=R2020a +Type=Application +Terminal=false +MimeType=text/x-matlab +Exec=/usr/local/MATLAB/R2020a/bin/matlab -desktop -nosplash +Name=MATLAB +Icon=matlab +Categories=Development;Math;Science +Comment=Scientific computing environment +StartupNotify=true #+end_src * Neovim @@ -99,18 +99,18 @@ :header-args+: :comments both :mkdirp yes :END: #+begin_src conf - [Desktop Entry] - Name=Neovim - GenericName=Text Editor - Comment=Edit text files - Exec=nvim %F - Terminal=true - Type=Application - Keywords=Text;editor; - Icon=/usr/share/icons/Papirus/48x48/apps/nvim.svg - Categories=Utility;TextEditor; - StartupNotify=false - MimeType=text/english;text/plain;text/x-makefile; +[Desktop Entry] +Name=Neovim +GenericName=Text Editor +Comment=Edit text files +Exec=nvim %F +Terminal=true +Type=Application +Keywords=Text;editor; +Icon=/usr/share/icons/Papirus/48x48/apps/nvim.svg +Categories=Utility;TextEditor; +StartupNotify=false +MimeType=text/english;text/plain;text/x-makefile; #+end_src * Images @@ -119,10 +119,10 @@ :header-args+: :comments both :mkdirp yes :END: #+begin_src conf - [Desktop Entry] - Type=Application - Name=Image viewer - Exec=/usr/bin/sxiv -a %u +[Desktop Entry] +Type=Application +Name=Image viewer +Exec=/usr/bin/sxiv -a %u #+end_src * Org-Protocol @@ -131,13 +131,13 @@ :header-args+: :comments both :mkdirp yes :END: #+begin_src conf - [Desktop Entry] - Name=org-protocol - Exec=emacsclient %u - Icon=emacs-icon - Type=Application - Terminal=false - MimeType=x-scheme-handler/org-protocol; +[Desktop Entry] +Name=org-protocol +Exec=emacsclient %u +Icon=emacs-icon +Type=Application +Terminal=false +MimeType=x-scheme-handler/org-protocol; #+end_src * Ranger @@ -146,15 +146,15 @@ :header-args+: :comments both :mkdirp yes :END: #+begin_src conf - [Desktop Entry] - Type=Application - Name=ranger - Comment=Launches the ranger file manager - Icon=utilities-terminal - Terminal=true - Exec=ranger - Categories=ConsoleOnly;System;FileTools;FileManager - MimeType=inode/directory;inode/mount-point;x-scheme-handler/ssh;x-scheme-handler/smb;x-scheme-handler/nfs;x-scheme-handler/ftp; +[Desktop Entry] +Type=Application +Name=ranger +Comment=Launches the ranger file manager +Icon=utilities-terminal +Terminal=true +Exec=ranger +Categories=ConsoleOnly;System;FileTools;FileManager +MimeType=inode/directory;inode/mount-point;x-scheme-handler/ssh;x-scheme-handler/smb;x-scheme-handler/nfs;x-scheme-handler/ftp; #+end_src * Emacs Client :PROPERTIES: diff --git a/bash.org b/bash.org index afe9dbd..76e661b 100644 --- a/bash.org +++ b/bash.org @@ -1,5 +1,6 @@ #+TITLE: Bash Configuration #+SETUPFILE: ./setup/org-setup-file.org +#+PROPERTY: header-args :tangle-mode (identity #o444) * =~/.bashrc= :PROPERTIES: @@ -10,140 +11,140 @@ ** If not running interactively, don't do anything #+BEGIN_SRC bash - [[ $- != *i* ]] && return +[[ $- != *i* ]] && return #+END_SRC ** Bash Completion #+BEGIN_SRC bash - [ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion +[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion #+END_SRC ** FZF #+begin_src bash - source /usr/share/fzf/key-bindings.bash +source /usr/share/fzf/key-bindings.bash #+end_src ** Ignore case for auto-completion #+BEGIN_SRC bash - bind "set completion-ignore-case on" - bind "set show-all-if-ambiguous on" +bind "set completion-ignore-case on" +bind "set show-all-if-ambiguous on" #+END_SRC ** Use Color #+BEGIN_SRC bash - use_color=true +use_color=true #+END_SRC ** Some config #+BEGIN_SRC bash - # Unset some variables - unset use_color safe_term match_lhs sh +# Unset some variables +unset use_color safe_term match_lhs sh - # Allow local processes with root privileges to connect to the locally running X server - xhost +local:root > /dev/null 2>&1 +# Allow local processes with root privileges to connect to the locally running X server +xhost +local:root > /dev/null 2>&1 - # Autocomplete sudo commands - complete -cf sudo +# Autocomplete sudo commands +complete -cf sudo - # Line wrap on window resize - shopt -s checkwinsize +# Line wrap on window resize +shopt -s checkwinsize - # Enable history expansion with space - # E.g. typing !! will replace the !! with your last command - bind Space:magic-space +# Enable history expansion with space +# E.g. typing !! will replace the !! with your last command +bind Space:magic-space - # Expand Aliases - shopt -s expand_aliases +# Expand Aliases +shopt -s expand_aliases - # Auto "cd" when entering just a path - shopt -s autocd +# Auto "cd" when entering just a path +shopt -s autocd - # Enable history appending instead of overwriting - shopt -s histappend +# Enable history appending instead of overwriting +shopt -s histappend - # Save multi-line commands as one command - shopt -s cmdhist +# Save multi-line commands as one command +shopt -s cmdhist #+END_SRC ** Prompt - =PS1= #+BEGIN_SRC bash - export PS1="\[$(tput bold)\]\[$(tput setaf 1)\][\[$(tput setaf 3)\]\u\[$(tput setaf 2)\]@\[$(tput setaf 4)\]\h \[$(tput setaf 5)\]\W\[$(tput setaf 1)\]]\[$(tput setaf 7)\]\\$ \[$(tput sgr0)\]" +export PS1="\[$(tput bold)\]\[$(tput setaf 1)\][\[$(tput setaf 3)\]\u\[$(tput setaf 2)\]@\[$(tput setaf 4)\]\h \[$(tput setaf 5)\]\W\[$(tput setaf 1)\]]\[$(tput setaf 7)\]\\$ \[$(tput sgr0)\]" #+END_SRC ** Rebind up and down arrow keys to search through bash history #+BEGIN_SRC bash - bind '"\e[A": history-search-backward' - bind '"\e[B": history-search-forward' +bind '"\e[A": history-search-backward' +bind '"\e[B": history-search-forward' #+END_SRC ** Aliases *** Better defaults for some commands #+BEGIN_SRC bash - alias ls='ls -hN --color=auto --group-directories-first' - alias grep='grep --colour=auto' - alias cp="cp -i" # confirm before overwriting something - alias df='df -h' # human-readable sizes - alias free='free -m' # show sizes in MB - alias mutt="neomutt" - alias tmux='tmux -f $XDG_CONFIG_HOME/tmux/tmux.conf' +alias ls='ls -hN --color=auto --group-directories-first' +alias grep='grep --colour=auto' +alias cp="cp -i" # confirm before overwriting something +alias df='df -h' # human-readable sizes +alias free='free -m' # show sizes in MB +alias mutt="neomutt" +alias tmux='tmux -f $XDG_CONFIG_HOME/tmux/tmux.conf' #+END_SRC *** One letter aliases #+BEGIN_SRC bash - alias r="ranger" - alias t="tmux" - alias v="nvim" - alias sv='sudo -E nvim' - alias g="git" - alias m="neomutt" - alias o="xdg-open" +alias r="ranger" +alias t="tmux" +alias v="nvim" +alias sv='sudo -E nvim' +alias g="git" +alias m="neomutt" +alias o="xdg-open" #+END_SRC *** Neovim #+begin_src bash - command -v nvim >/dev/null && alias vim="nvim" vimdiff="nvim -d" # Use neovim for vim if present. +command -v nvim >/dev/null && alias vim="nvim" vimdiff="nvim -d" # Use neovim for vim if present. #+end_src *** Vim-like #+BEGIN_SRC bash - alias :q=exit - alias :e=nvim +alias :q=exit +alias :e=nvim #+END_SRC *** Print each PATH entry on a separate line #+BEGIN_SRC bash - alias path='echo -e ${PATH//:/\\n}' +alias path='echo -e ${PATH//:/\\n}' #+END_SRC ** Functions *** =colors= - Display colors #+BEGIN_SRC bash - colors() { - local fgc bgc vals seq0 +colors() { + local fgc bgc vals seq0 - printf "Color escapes are %s\n" '\e[${value};...;${value}m' - printf "Values 30..37 are \e[33mforeground colors\e[m\n" - printf "Values 40..47 are \e[43mbackground colors\e[m\n" - printf "Value 1 gives a \e[1mbold-faced look\e[m\n\n" + printf "Color escapes are %s\n" '\e[${value};...;${value}m' + printf "Values 30..37 are \e[33mforeground colors\e[m\n" + printf "Values 40..47 are \e[43mbackground colors\e[m\n" + printf "Value 1 gives a \e[1mbold-faced look\e[m\n\n" - # foreground colors - for fgc in {30..37}; do - # background colors - for bgc in {40..47}; do - fgc=${fgc#37} # white - bgc=${bgc#40} # black + # foreground colors + for fgc in {30..37}; do + # background colors + for bgc in {40..47}; do + fgc=${fgc#37} # white + bgc=${bgc#40} # black - vals="${fgc:+$fgc;}${bgc}" - vals=${vals%%;} + vals="${fgc:+$fgc;}${bgc}" + vals=${vals%%;} - seq0="${vals:+\e[${vals}m}" - printf " %-9s" "${seq0:-(default)}" - printf " ${seq0}TEXT\e[m" - printf " \e[${vals:+${vals+$vals;}}1mBOLD\e[m" - done - echo; echo - done - } + seq0="${vals:+\e[${vals}m}" + printf " %-9s" "${seq0:-(default)}" + printf " ${seq0}TEXT\e[m" + printf " \e[${vals:+${vals+$vals;}}1mBOLD\e[m" + done + echo; echo + done +} #+END_SRC *** =tre= - Tree display @@ -153,57 +154,57 @@ the =.git= directory, listing directories first. The output gets piped into small enough for one screen. #+BEGIN_SRC bash - function tre() { - tree -aC -I '.git|node_modules|bower_components' --dirsfirst "$@" | less -FRNX; - } +function tre() { + tree -aC -I '.git|node_modules|bower_components' --dirsfirst "$@" | less -FRNX; +} #+END_SRC *** =mkd= - Create a new directory and enter it #+BEGIN_SRC bash - function mkd() { - mkdir -p "$@" && cd "$_"; - } +function mkd() { + mkdir -p "$@" && cd "$_"; +} #+END_SRC *** =fs= - Filesize of directory #+BEGIN_SRC bash - function fs() { - if du -b /dev/null > /dev/null 2>&1; then - local arg=-sbh; - else - local arg=-sh; - fi - if [[ -n "$@" ]]; then - du $arg -- "$@"; - else - du $arg .[^.]* ./*; - fi; - } +function fs() { + if du -b /dev/null > /dev/null 2>&1; then + local arg=-sbh; + else + local arg=-sh; + fi + if [[ -n "$@" ]]; then + du $arg -- "$@"; + else + du $arg .[^.]* ./*; + fi; +} #+END_SRC *** =nullify= - Redirect both standard output and standard error, as well as sending to background #+BEGIN_SRC bash - function nullify() { - "$@" >/dev/null 2>&1 - } +function nullify() { + "$@" >/dev/null 2>&1 +} #+END_SRC *** =sms= - Send SMS https://doronbehar.com/articles/using-kdeconnect-to-comfortably-send-sms-messages-from-the-shell/#kdeconnects-builtin-sms-interface #+begin_src bash :tangle no - sms(){ - local args="$@" - # local phone_number name phone_type - # khard phone --parsable | sort -u | fzf | IFS=$'\t' read -r phone_number name phone_type - local phone_number=$(khard phone --parsable | sort -u | fzf | cut -f1 -d$'\t') - if [[ -z "${phone_number}" ]]; then - echo No recipient was chosen >&2 - return - else - kdeconnect-cli --send-sms "${args}" --destination "${phone_number}" --device 4de3b5de2264a17c - fi - } +sms(){ + local args="$@" + # local phone_number name phone_type + # khard phone --parsable | sort -u | fzf | IFS=$'\t' read -r phone_number name phone_type + local phone_number=$(khard phone --parsable | sort -u | fzf | cut -f1 -d$'\t') + if [[ -z "${phone_number}" ]]; then + echo No recipient was chosen >&2 + return + else + kdeconnect-cli --send-sms "${args}" --destination "${phone_number}" --device 4de3b5de2264a17c + fi +} #+end_src @@ -211,32 +212,32 @@ https://doronbehar.com/articles/using-kdeconnect-to-comfortably-send-sms-message Undocumented feature which sets the size to "unlimited". http://stackoverflow.com/questions/9457233/unlimited-bash-history #+BEGIN_SRC bash - # Huge history. Doesn't appear to slow things down, so why not? - HISTSIZE=500000 - HISTFILESIZE=100000 +# Huge history. Doesn't appear to slow things down, so why not? +HISTSIZE=500000 +HISTFILESIZE=100000 - # Avoid duplicate entries - HISTCONTROL="erasedups:ignoreboth" +# Avoid duplicate entries +HISTCONTROL="erasedups:ignoreboth" - # Don't record some commands - export HISTIGNORE="&:[ ]*:exit:ls:bg:fg:history:clear" +# Don't record some commands +export HISTIGNORE="&:[ ]*:exit:ls:bg:fg:history:clear" - # Use standard ISO 8601 timestamp - # %F equivalent to %Y-%m-%d - # %T equivalent to %H:%M:%S (24-hours format) - HISTTIMEFORMAT='%F %T ' +# Use standard ISO 8601 timestamp +# %F equivalent to %Y-%m-%d +# %T equivalent to %H:%M:%S (24-hours format) +HISTTIMEFORMAT='%F %T ' #+END_SRC Change the file location because certain bash sessions truncate =.bash_history= file upon close. http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login #+BEGIN_SRC bash - export HISTFILE=~/.bash_eternal_history +export HISTFILE=~/.bash_eternal_history #+END_SRC Force prompt to write history after every command. http://superuser.com/questions/20900/bash-history-loss #+BEGIN_SRC bash - PROMPT_COMMAND="history -a; $PROMPT_COMMAND" +PROMPT_COMMAND="history -a; $PROMPT_COMMAND" #+END_SRC * =~/.bash_profile= @@ -247,8 +248,8 @@ Force prompt to write history after every command. http://superuser.com/question :END: #+BEGIN_SRC bash - [[ -f ~/.profile ]] && . ~/.profile - [[ -f ~/.bashrc ]] && . ~/.bashrc +[[ -f ~/.profile ]] && . ~/.profile +[[ -f ~/.bashrc ]] && . ~/.bashrc #+END_SRC * =~/.profile= @@ -260,85 +261,85 @@ Force prompt to write history after every command. http://superuser.com/question ** QT And GTK Themes #+begin_src bash - export QT_QPA_PLATFORMTHEME="qt5ct" - export GTK2_RC_FILES="$HOME/.gtkrc-2.0" +export QT_QPA_PLATFORMTHEME="qt5ct" +export GTK2_RC_FILES="$HOME/.gtkrc-2.0" #+END_SRC ** Gui program to ask for sudo password #+begin_src bash - export SUDO_ASKPASS=~/.local/bin/askpass-rofi +export SUDO_ASKPASS=~/.local/bin/askpass-rofi #+END_SRC ** Gnome Keyring Daemon Enable the keyring for applications run through the terminal #+begin_src bash - if [ -n "$DESKTOP_SESSION" ];then - eval $(gnome-keyring-daemon --start) - export SSH_AUTH_SOCK - fi +if [ -n "$DESKTOP_SESSION" ];then + eval $(gnome-keyring-daemon --start) + export SSH_AUTH_SOCK +fi #+end_src ** Export some default applications #+begin_src bash - export EDITOR="nvim" - export TERMINAL="termite" - export BROWSER="qutebrowser" - export READER="zathura" - export FILE="ranger" +export EDITOR="nvim" +export TERMINAL="termite" +export BROWSER="qutebrowser" +export READER="zathura" +export FILE="ranger" #+END_SRC ** Exports *** Term This is important for termite to work when sshing in remote machines. #+begin_src bash - export TERM=xterm-color +export TERM=xterm-color #+end_src *** XDG Default #+begin_src bash - export XDG_CONFIG_HOME="$HOME/.config" +export XDG_CONFIG_HOME="$HOME/.config" #+end_src *** Use Ripgrep for FZF #+begin_src bash - export FZF_DEFAULT_COMMAND='rg --files --no-ignore --hidden --follow --glob "!.git/*"' - export FZF_DEFAULT_OPTS='--layout=reverse --height=20' +export FZF_DEFAULT_COMMAND='rg --files --no-ignore --hidden --follow --glob "!.git/*"' +export FZF_DEFAULT_OPTS='--layout=reverse --height=20' #+end_src *** Goland #+begin_src bash - export GOPATH=$HOME/go +export GOPATH=$HOME/go #+end_src *** Latex Path #+begin_src bash - export TEXMFHOME=$HOME/.local/share/texmf +export TEXMFHOME=$HOME/.local/share/texmf #+end_src *** Bitwarden Session #+begin_src bash - export BW_SESSION="HH0yycfocRSuGtq/iW1e6v13PQ1sShMXbMhdb/En94S6OcIXFnJlLEyU+dySsmf2YShY4CImoB5FrxgdPsY9Qw==" +export BW_SESSION="HH0yycfocRSuGtq/iW1e6v13PQ1sShMXbMhdb/En94S6OcIXFnJlLEyU+dySsmf2YShY4CImoB5FrxgdPsY9Qw==" #+end_src *** Python Path #+begin_src bash - export PYTHONPATH="${PYTHONPATH}:/usr/lib/python3.9/site-packages/configobj" +export PYTHONPATH="${PYTHONPATH}:/usr/lib/python3.9/site-packages/configobj" #+end_src ** Path #+begin_src bash - PATH=$HOME/appimages:$PATH - PATH=$HOME/.gem/ruby/2.5.0/bin:$PATH - PATH=$GOPATH:$GOPATH/bin:$PATH - PATH=~/.config/emacs/bin:$PATH - export PATH +PATH=$HOME/appimages:$PATH +PATH=$HOME/.gem/ruby/2.5.0/bin:$PATH +PATH=$GOPATH:$GOPATH/bin:$PATH +PATH=~/.config/emacs/bin:$PATH +export PATH #+END_SRC ** Automatically run =startx= #+begin_src bash - if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then - exec startx - fi +if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then + exec startx +fi #+end_src * =~/.inputrc= @@ -350,58 +351,58 @@ This is important for termite to work when sshing in remote machines. Completion: #+BEGIN_SRC conf - # Single tab for autocompletion - set show-all-if-ambiguous on +# Single tab for autocompletion +set show-all-if-ambiguous on - # Ignore case for completion - set completion-ignore-case on +# Ignore case for completion +set completion-ignore-case on #+END_SRC vi mode: #+BEGIN_SRC conf - # VI mode (works in bash and zsh) - set editing-mode vi +# VI mode (works in bash and zsh) +set editing-mode vi - # Show which mode (normal or insert) - set show-mode-in-prompt on +# Show which mode (normal or insert) +set show-mode-in-prompt on - # Show the mode by changing the cursor - set vi-ins-mode-string \1\e[6 q\2 - set vi-cmd-mode-string \1\e[2 q\2 +# Show the mode by changing the cursor +set vi-ins-mode-string \1\e[6 q\2 +set vi-cmd-mode-string \1\e[2 q\2 #+END_SRC Key-bindings for vi-mode: #+BEGIN_SRC conf - set keymap vi-command - # these are for vi-command mode - Control-l: clear-screen - Control-a: beginning-of-line - Control-e: end-of-line - Control-w: "\C-aisudo \C-e" +set keymap vi-command +# these are for vi-command mode +Control-l: clear-screen +Control-a: beginning-of-line +Control-e: end-of-line +Control-w: "\C-aisudo \C-e" - set keymap vi-insert - # these are for vi-insert mode - Control-l: clear-screen - Control-a: beginning-of-line - Control-e: end-of-line - Control-w: "\C-asudo \C-e" +set keymap vi-insert +# these are for vi-insert mode +Control-l: clear-screen +Control-a: beginning-of-line +Control-e: end-of-line +Control-w: "\C-asudo \C-e" #+END_SRC Colorized completion #+begin_src conf - # Color files by types - set colored-stats On - # Append char to indicate type - set visible-stats On - # Mark symlinked directories - set mark-symlinked-directories On - # Color the common prefix - set colored-completion-prefix On - # Color the common prefix in menu-complete - set menu-complete-display-prefix On +# Color files by types +set colored-stats On +# Append char to indicate type +set visible-stats On +# Mark symlinked directories +set mark-symlinked-directories On +# Color the common prefix +set colored-completion-prefix On +# Color the common prefix in menu-complete +set menu-complete-display-prefix On #+end_src Don't echo =^C= after =Ctrl+C= is pressed. #+begin_src conf - set echo-control-characters off +set echo-control-characters off #+end_src diff --git a/binaries-private.org b/binaries-private.org index 0e69777..fec569b 100644 --- a/binaries-private.org +++ b/binaries-private.org @@ -3,6 +3,7 @@ #+PROPERTY: header-args:bash :comments both :mkdirp yes #+PROPERTY: header-args:bash+ :shebang "#!/usr/bin/env bash" +#+PROPERTY: header-args:bash+ :tangle-mode (identity #o555) * =remote-desktop= - Remote Desktop Connect :PROPERTIES: @@ -10,28 +11,28 @@ :END: #+begin_src bash :tangle ~/.local/bin/remote-desktop - computer=$(echo -e 'RNICE\nPCMEL1\nPCNASS1\nPCMEG01' | dmenu -p 'Computer:' -l 20); +computer=$(echo -e 'RNICE\nPCMEL1\nPCNASS1\nPCMEG01' | dmenu -p 'Computer:' -l 20); - dunstify --replace=89891 'Rdesktop' "Connection to ${computer}..." +dunstify --replace=89891 'Rdesktop' "Connection to ${computer}..." - case $computer in - PCMEL1) - xfreerdp /u:dehaeze /d:ESRF /clipboard /bpp:8 /bpp:16 /compression -themes -wallpaper /async-update /async-input -glyph-cache /audio-mode:1 /dynamic-resolution /auto-reconnect /p:$(pass ssl.esrf.fr/dehaeze | sed -n 1p) /v:PCMEL1.esrf.fr; - ;; - PCMEG01) - xfreerdp /u:dehaeze /d:ESRF /clipboard /bpp:8 /bpp:16 /compression -themes -wallpaper /async-update /async-input -glyph-cache /audio-mode:1 /dynamic-resolution /auto-reconnect /p:$(pass ssl.esrf.fr/dehaeze | sed -n 1p) /v:PCMEG01.esrf.fr; - ;; - PCNASS1) - xfreerdp /u:dehaeze /d:ESRF /clipboard /bpp:8 /bpp:16 /compression -themes -wallpaper /async-update /async-input -glyph-cache /audio-mode:1 /dynamic-resolution /auto-reconnect /p:$(pass ssl.esrf.fr/dehaeze | sed -n 1p) /v:PCNASS1.esrf.fr; - ;; - RNICE) - xfreerdp /u:dehaeze /d:ESRF /clipboard /bpp:8 /bpp:16 /compression -themes -wallpaper /async-update /async-input -glyph-cache /audio-mode:1 /dynamic-resolution /auto-reconnect /p:$(pass ssl.esrf.fr/dehaeze | sed -n 1p) /v:rnice.esrf.fr; - ;; - ,*) - echo "Not existing" && \ - dunstify --replace=89891 --urgency=critical 'Rdesktop' "No config for $computer"; - ;; - esac +case $computer in + PCMEL1) + xfreerdp /u:dehaeze /d:ESRF /clipboard /bpp:8 /bpp:16 /compression -themes -wallpaper /async-update /async-input -glyph-cache /audio-mode:1 /dynamic-resolution /auto-reconnect /p:$(pass ssl.esrf.fr/dehaeze | sed -n 1p) /v:PCMEL1.esrf.fr; + ;; + PCMEG01) + xfreerdp /u:dehaeze /d:ESRF /clipboard /bpp:8 /bpp:16 /compression -themes -wallpaper /async-update /async-input -glyph-cache /audio-mode:1 /dynamic-resolution /auto-reconnect /p:$(pass ssl.esrf.fr/dehaeze | sed -n 1p) /v:PCMEG01.esrf.fr; + ;; + PCNASS1) + xfreerdp /u:dehaeze /d:ESRF /clipboard /bpp:8 /bpp:16 /compression -themes -wallpaper /async-update /async-input -glyph-cache /audio-mode:1 /dynamic-resolution /auto-reconnect /p:$(pass ssl.esrf.fr/dehaeze | sed -n 1p) /v:PCNASS1.esrf.fr; + ;; + RNICE) + xfreerdp /u:dehaeze /d:ESRF /clipboard /bpp:8 /bpp:16 /compression -themes -wallpaper /async-update /async-input -glyph-cache /audio-mode:1 /dynamic-resolution /auto-reconnect /p:$(pass ssl.esrf.fr/dehaeze | sed -n 1p) /v:rnice.esrf.fr; + ;; + ,*) + echo "Not existing" && \ + dunstify --replace=89891 --urgency=critical 'Rdesktop' "No config for $computer"; + ;; +esac #+end_src * =print-rnice= - Print on Rnice @@ -40,18 +41,18 @@ :END: #+begin_src bash :tangle ~/.local/bin/print-rnice - nbpage=$(echo -e '1\n2\n4' | dmenu -p 'Number of pages per sheet' -l 20); - sides=$(echo -e 'one-sided\ntwo-sided-long-edge\ntwo-sided-short-edge' | dmenu -p 'Two Sided:' -l 20); - media=$(echo -e 'A4\nA3' | dmenu -p 'Size:' -l 20); +nbpage=$(echo -e '1\n2\n4' | dmenu -p 'Number of pages per sheet' -l 20); +sides=$(echo -e 'one-sided\ntwo-sided-long-edge\ntwo-sided-short-edge' | dmenu -p 'Two Sided:' -l 20); +media=$(echo -e 'A4\nA3' | dmenu -p 'Size:' -l 20); - # First copy the file to Rnice - if sshpass -p "$(pass ssl.esrf.fr/dehaeze | sed -n 1p)" scp $1 dehaeze@rnice:~/Downloads/; then - # Then print on Rnice - sshpass -p "$(pass ssl.esrf.fr/dehaeze | sed -n 1p)" ssh dehaeze@rnice "lpr -o media=$media -o sides=$sides -o number-up=$nbpage -P ctb110c1u ~/Downloads/$1"; - # Finally, delete the file - else - echo "Command Failed" - fi +# First copy the file to Rnice +if sshpass -p "$(pass ssl.esrf.fr/dehaeze | sed -n 1p)" scp $1 dehaeze@rnice:~/Downloads/; then + # Then print on Rnice + sshpass -p "$(pass ssl.esrf.fr/dehaeze | sed -n 1p)" ssh dehaeze@rnice "lpr -o media=$media -o sides=$sides -o number-up=$nbpage -P ctb110c1u ~/Downloads/$1"; + # Finally, delete the file +else + echo "Command Failed" +fi #+end_src * =tmp14= - Mount/Umount tmp_14_days folder @@ -60,19 +61,19 @@ :END: #+begin_src bash :tangle ~/.local/bin/tmp_14_days - if [ $1 == "mount" ]; then - if sshfs -o allow_other,default_permissions -p 5022 dehaeze@firewall.esrf.fr:/tmp_14_days/ ~/mnt/ESRF; then - dunstify --replace=58249 'ESRF TMP ' 'Successfully mounted' - else - dunstify --replace=58249 --urgency=critical 'ESRF TMP ' 'Error while mounted' - fi - elif [ $1 == "umount" ]; then - if umount /home/thomas/mnt/ESRF/; then - dunstify --replace=58249 'ESRF TMP ' 'Successfully unmounted' - else - dunstify --replace=58249 --urgency=critical 'ESRF TMP ' 'Error while unmounted' - fi - fi +if [ $1 == "mount" ]; then + if sshfs -o allow_other,default_permissions -p 5022 dehaeze@firewall.esrf.fr:/tmp_14_days/ ~/mnt/ESRF; then + dunstify --replace=58249 'ESRF TMP ' 'Successfully mounted' + else + dunstify --replace=58249 --urgency=critical 'ESRF TMP ' 'Error while mounted' + fi +elif [ $1 == "umount" ]; then + if umount /home/thomas/mnt/ESRF/; then + dunstify --replace=58249 'ESRF TMP ' 'Successfully unmounted' + else + dunstify --replace=58249 --urgency=critical 'ESRF TMP ' 'Error while unmounted' + fi +fi #+end_src @@ -83,23 +84,23 @@ As an alternative, =sshfs= can be used: #+begin_src bash :tangle no - sshfs -o allow_other,default_permissions nas:/Data ~/mnt/NAS +sshfs -o allow_other,default_permissions nas:/Data ~/mnt/NAS #+end_src #+begin_src bash :tangle ~/.local/bin/nas - if [ $1 == "mount" ]; then - if mount /home/thomas/mnt/NAS/; then - dunstify --replace=58249 'NAS ' 'Successfully mounted' - else - dunstify --replace=58249 --urgency=critical 'NAS ' 'Error while mounted' - fi - elif [ $1 == "umount" ]; then - if umount /home/thomas/mnt/NAS/; then - dunstify --replace=58249 'NAS ' 'Successfully unmounted' - else - dunstify --replace=58249 --urgency=critical 'NAS ' 'Error while unmounted' - fi - fi +if [ $1 == "mount" ]; then + if mount /home/thomas/mnt/NAS/; then + dunstify --replace=58249 'NAS ' 'Successfully mounted' + else + dunstify --replace=58249 --urgency=critical 'NAS ' 'Error while mounted' + fi +elif [ $1 == "umount" ]; then + if umount /home/thomas/mnt/NAS/; then + dunstify --replace=58249 'NAS ' 'Successfully unmounted' + else + dunstify --replace=58249 --urgency=critical 'NAS ' 'Error while unmounted' + fi +fi #+end_src * =torrent-add= - Download Torrent @@ -108,9 +109,9 @@ As an alternative, =sshfs= can be used: :END: #+begin_src bash :tangle ~/.local/bin/torrent-add - transmission-remote ***REMOVED***:9091 --auth tdehaeze:$(pass nas/transmission | sed -n 1p) -a $1 && \ - dunstify 'Torrent' 'Successfully added' || \ - dunstify 'Torrent' 'Error' +transmission-remote ***REMOVED***:9091 --auth tdehaeze:$(pass nas/transmission | sed -n 1p) -a $1 && \ + dunstify 'Torrent' 'Successfully added' || \ + dunstify 'Torrent' 'Error' #+end_src * =dl-add= - Direct Download with Aria2 @@ -119,7 +120,7 @@ As an alternative, =sshfs= can be used: :END: #+begin_src bash :tangle ~/.local/bin/dl-add - aria2p --port 6800 --host http://dl.tdehaeze.xyz --secret $(pass dl.tdehaeze.xyz/tdehaeze | sed -n 1p) add $1 +aria2p --port 6800 --host http://dl.tdehaeze.xyz --secret $(pass dl.tdehaeze.xyz/tdehaeze | sed -n 1p) add $1 #+end_src * =note-extract-fig= - Extract Figure from note file @@ -130,13 +131,13 @@ As an alternative, =sshfs= can be used: Script used to convert a figure drawn on my Boox note2 to a png file that can then be imported into a document. #+begin_src bash :tangle ~/.local/bin/note-extract-fig - # First check that the first argument is a pdf file - if [[ -f $1 && $1 == *.pdf ]]; then - pngfile=$(echo $1 | cut -f 1 -d '.' | sed 's/$/.png/') +# First check that the first argument is a pdf file +if [[ -f $1 && $1 == *.pdf ]]; then + pngfile=$(echo $1 | cut -f 1 -d '.' | sed 's/$/.png/') - # Convert to png and crop png - pdf2png $1 && convert -trim "$pngfile" "$pngfile" - fi + # Convert to png and crop png + pdf2png $1 && convert -trim "$pngfile" "$pngfile" +fi #+end_src * =share= - Share file with self-hosted =transfer.sh= @@ -145,13 +146,13 @@ Script used to convert a figure drawn on my Boox note2 to a png file that can th :END: #+begin_src bash :tangle ~/.local/bin/share - if [ $TMUX ]; then - tmux split -v -l 1 "curl --progress-bar -F\"file=@$1\" https://file.tdehaeze.xyz/ | xsel -ib && dunstify 'Upload' 'Successful' || dunstify --urgency=critical 'Upload' 'Failed';" && tmux select-pane -U - else - curl --progress-bar -F"file=@$1" https://file.tdehaeze.xyz/ | xsel -ib && \ - dunstify 'Upload' 'Successful' || \ - dunstify --urgency=critical 'Upload' 'Failed' - fi +if [ $TMUX ]; then + tmux split -v -l 1 "curl --progress-bar -F\"file=@$1\" https://file.tdehaeze.xyz/ | xsel -ib && dunstify 'Upload' 'Successful' || dunstify --urgency=critical 'Upload' 'Failed';" && tmux select-pane -U +else + curl --progress-bar -F"file=@$1" https://file.tdehaeze.xyz/ | xsel -ib && \ + dunstify 'Upload' 'Successful' || \ + dunstify --urgency=critical 'Upload' 'Failed' +fi #+end_src * =screen-select= - Xrandr pre-defined scripts @@ -160,27 +161,27 @@ Script used to convert a figure drawn on my Boox note2 to a png file that can th :END: #+begin_src bash :tangle ~/.local/bin/screen-select - option=$(echo -e "Work\nXPS\nHome" | rofi -i -dmenu) +option=$(echo -e "Work\nXPS\nHome" | rofi -i -dmenu) - case "$option" in - "Work") - xrandr --output eDP1 --off --output DP1 --off --output DP1-1 --primary --mode 2560x1440 --pos 0x0 --rotate normal --output DP1-2 --off --output DP2 --off --output VIRTUAL1 --off - ;; - "XPS") - xrandr --output eDP1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output DP1 --off --output DP1-1 --off --output DP1-2 --off --output DP2 --off --output VIRTUAL1 --off - ;; - "Home") - xrandr --output eDP1 --off --output DP2-1 --primary --mode 2560x1440 --pos 0x0 --rotate normal --output DP1 --off --output VIRTUAL1 --off - ;; - ,*) - echo "== ! missing or invalid argument ! ==" - exit 2 - esac +case "$option" in + "Work") + xrandr --output eDP1 --off --output DP1 --off --output DP1-1 --primary --mode 2560x1440 --pos 0x0 --rotate normal --output DP1-2 --off --output DP2 --off --output VIRTUAL1 --off + ;; + "XPS") + xrandr --output eDP1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output DP1 --off --output DP1-1 --off --output DP1-2 --off --output DP2 --off --output VIRTUAL1 --off + ;; + "Home") + xrandr --output eDP1 --off --output DP2-1 --primary --mode 2560x1440 --pos 0x0 --rotate normal --output DP1 --off --output VIRTUAL1 --off + ;; + ,*) + echo "== ! missing or invalid argument ! ==" + exit 2 +esac - setbg && \ # Fix background if screen size/arangement has changed. - polybar-msg cmd restart # restart polybar +setbg && \ # Fix background if screen size/arangement has changed. + polybar-msg cmd restart # restart polybar - exit 0 +exit 0 #+end_src * =color-picker= - Pick color and copy to clipboard @@ -189,5 +190,5 @@ Script used to convert a figure drawn on my Boox note2 to a png file that can th :END: #+begin_src bash :tangle ~/.local/bin/color-picker - xcolor | tr -d '\n' | xsel -b +xcolor | tr -d '\n' | xsel -b #+end_src diff --git a/binaries.org b/binaries.org index b1d0913..98ca95f 100644 --- a/binaries.org +++ b/binaries.org @@ -3,6 +3,7 @@ #+PROPERTY: header-args:bash :comments both :mkdirp yes #+PROPERTY: header-args:bash+ :shebang "#!/usr/bin/env bash" +#+PROPERTY: header-args:bash+ :tangle-mode (identity #o555) * =dmenumount= - Mount USB and Android :PROPERTIES: @@ -12,65 +13,65 @@ Script taken from Luke Smith. #+begin_src bash :tangle ~/.local/bin/dmenumount - getmount() { \ - [ -z "$chosen" ] && exit 1 - # shellcheck disable=SC2086 - mp="$(find $1 2>/dev/null | dmenu -i -p "Type in mount point.")" || exit 1 - [ "$mp" = "" ] && exit 1 - if [ ! -d "$mp" ]; then - mkdiryn=$(printf "No\\nYes" | dmenu -i -p "$mp does not exist. Create it?") || exit 1 - [ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp") - fi - } +getmount() { \ + [ -z "$chosen" ] && exit 1 + # shellcheck disable=SC2086 + mp="$(find $1 2>/dev/null | dmenu -i -p "Type in mount point.")" || exit 1 + [ "$mp" = "" ] && exit 1 + if [ ! -d "$mp" ]; then + mkdiryn=$(printf "No\\nYes" | dmenu -i -p "$mp does not exist. Create it?") || exit 1 + [ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp") + fi +} - mountusb() { \ - chosen="$(echo "$usbdrives" | dmenu -i -p "Mount which drive?")" || exit 1 - chosen="$(echo "$chosen" | awk '{print $1}')" - sudo -A mount "$chosen" 2>/dev/null && notify-send "💻 USB mounting" "$chosen mounted." && exit 0 - alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}') - getmount "/mnt /media /mount /home -maxdepth 5 -type d $alreadymounted" - partitiontype="$(lsblk -no "fstype" "$chosen")" - case "$partitiontype" in - "vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;; - ,*) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";; - esac - notify-send "💻 USB mounting" "$chosen mounted to $mp." - } +mountusb() { \ + chosen="$(echo "$usbdrives" | dmenu -i -p "Mount which drive?")" || exit 1 + chosen="$(echo "$chosen" | awk '{print $1}')" + sudo -A mount "$chosen" 2>/dev/null && notify-send "💻 USB mounting" "$chosen mounted." && exit 0 + alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}') + getmount "/mnt /media /mount /home -maxdepth 5 -type d $alreadymounted" + partitiontype="$(lsblk -no "fstype" "$chosen")" + case "$partitiontype" in + "vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;; + ,*) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";; + esac + notify-send "💻 USB mounting" "$chosen mounted to $mp." +} - mountandroid() { \ - chosen="$(echo "$anddrives" | dmenu -i -p "Which Android device?")" || exit 1 - chosen="$(echo "$chosen" | cut -d : -f 1)" - getmount "$HOME -maxdepth 3 -type d" - simple-mtpfs --device "$chosen" "$mp" - echo "OK" | dmenu -i -p "Tap Allow on your phone if it asks for permission and then press enter" || exit 1 - simple-mtpfs --device "$chosen" "$mp" - notify-send "🤖 Android Mounting" "Android device mounted to $mp." - } +mountandroid() { \ + chosen="$(echo "$anddrives" | dmenu -i -p "Which Android device?")" || exit 1 + chosen="$(echo "$chosen" | cut -d : -f 1)" + getmount "$HOME -maxdepth 3 -type d" + simple-mtpfs --device "$chosen" "$mp" + echo "OK" | dmenu -i -p "Tap Allow on your phone if it asks for permission and then press enter" || exit 1 + simple-mtpfs --device "$chosen" "$mp" + notify-send "🤖 Android Mounting" "Android device mounted to $mp." +} - asktype() { \ - choice="$(printf "USB\\nAndroid" | dmenu -i -p "Mount a USB drive or Android device?")" || exit 1 - case $choice in - USB) mountusb ;; - Android) mountandroid ;; - esac - } +asktype() { \ + choice="$(printf "USB\\nAndroid" | dmenu -i -p "Mount a USB drive or Android device?")" || exit 1 + case $choice in + USB) mountusb ;; + Android) mountandroid ;; + esac +} - anddrives=$(simple-mtpfs -l 2>/dev/null) - usbdrives="$(lsblk -rpo "name,type,size,mountpoint" | awk '$4==""{printf "%s (%s)\n",$1,$3}')" +anddrives=$(simple-mtpfs -l 2>/dev/null) +usbdrives="$(lsblk -rpo "name,type,size,mountpoint" | awk '$4==""{printf "%s (%s)\n",$1,$3}')" - if [ -z "$usbdrives" ]; then - [ -z "$anddrives" ] && echo "No USB drive or Android device detected" && exit - echo "Android device(s) detected." - mountandroid - else - if [ -z "$anddrives" ]; then - echo "USB drive(s) detected." - mountusb - else - echo "Mountable USB drive(s) and Android device(s) detected." - asktype - fi - fi +if [ -z "$usbdrives" ]; then + [ -z "$anddrives" ] && echo "No USB drive or Android device detected" && exit + echo "Android device(s) detected." + mountandroid +else + if [ -z "$anddrives" ]; then + echo "USB drive(s) detected." + mountusb + else + echo "Mountable USB drive(s) and Android device(s) detected." + asktype + fi +fi #+end_src * =dmenuumount= - Unmount USB and Android devices @@ -81,44 +82,62 @@ Script taken from Luke Smith. Script taken from Luke Smith. #+begin_src bash :tangle ~/.local/bin/dmenuumount - unmountusb() { - [ -z "$drives" ] && exit - chosen="$(echo "$drives" | dmenu -i -p "Unmount which drive?")" || exit 1 - chosen="$(echo "$chosen" | awk '{print $1}')" - [ -z "$chosen" ] && exit - sudo -A umount "$chosen" && notify-send "💻 USB unmounting" "$chosen unmounted." - } +unmountusb() { + [ -z "$drives" ] && exit + chosen="$(echo "$drives" | dmenu -i -p "Unmount which drive?")" || exit 1 + chosen="$(echo "$chosen" | awk '{print $1}')" + [ -z "$chosen" ] && exit + sudo -A umount "$chosen" && notify-send "💻 USB unmounting" "$chosen unmounted." +} - unmountandroid() { \ - chosen="$(awk '/simple-mtpfs/ {print $2}' /etc/mtab | dmenu -i -p "Unmount which device?")" || exit 1 - [ -z "$chosen" ] && exit - sudo -A umount -l "$chosen" && notify-send "🤖 Android unmounting" "$chosen unmounted." - } +unmountandroid() { \ + chosen="$(awk '/simple-mtpfs/ {print $2}' /etc/mtab | dmenu -i -p "Unmount which device?")" || exit 1 + [ -z "$chosen" ] && exit + sudo -A umount -l "$chosen" && notify-send "🤖 Android unmounting" "$chosen unmounted." +} - asktype() { \ - choice="$(printf "USB\\nAndroid" | dmenu -i -p "Unmount a USB drive or Android device?")" || exit 1 - case "$choice" in - USB) unmountusb ;; - Android) unmountandroid ;; - esac - } +asktype() { \ + choice="$(printf "USB\\nAndroid" | dmenu -i -p "Unmount a USB drive or Android device?")" || exit 1 + case "$choice" in + USB) unmountusb ;; + Android) unmountandroid ;; + esac +} - drives=$(lsblk -nrpo "name,type,size,mountpoint" | awk '$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "%s (%s)\n",$4,$3}') +drives=$(lsblk -nrpo "name,type,size,mountpoint" | awk '$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "%s (%s)\n",$4,$3}') + +if ! grep simple-mtpfs /etc/mtab; then + [ -z "$drives" ] && echo "No drives to unmount." && exit + echo "Unmountable USB drive detected." + unmountusb +else + if [ -z "$drives" ] + then + echo "Unmountable Android device detected." + unmountandroid + else + echo "Unmountable USB drive(s) and Android device(s) detected." + asktype + fi +fi +#+end_src + +* =dmenukill= - Kill program using Dmenu +:PROPERTIES: +:CUSTOM_ID: dmenukill +:END: + +#+begin_src bash :tangle ~/.local/bin/dmenukill +ps_line=$(ps -u $USER k -size -o pid=,%mem=,%cpu=,comm= | dmenu -i -l 15) + +if [ ! -z "$ps_line" ]; then + pid=$(echo $ps_line | awk '{print $1}') + name=$(echo $ps_line | awk '{print $4}') + + kill -15 $pid && \ + dunstify "Kill" "$name (PID $pid)" & +fi - if ! grep simple-mtpfs /etc/mtab; then - [ -z "$drives" ] && echo "No drives to unmount." && exit - echo "Unmountable USB drive detected." - unmountusb - else - if [ -z "$drives" ] - then - echo "Unmountable Android device detected." - unmountandroid - else - echo "Unmountable USB drive(s) and Android device(s) detected." - asktype - fi - fi #+end_src * =nordvpn-toggle= - Connect to VPN using NordVPN @@ -129,20 +148,20 @@ Script taken from Luke Smith. To use this this, =nordvpn= must be installed: =yay -S nordvpn-bin=. #+begin_src bash :tangle ~/.local/bin/nordvpn-toggle - tmpfile="/tmp/vpnstatus"; +tmpfile="/tmp/vpnstatus"; - if [[ $(nordvpn status) == *"Connected"* ]]; then - nordvpn disconnect && \ - dunstify --replace=23198 "VPN" "Disconnected" && \ - echo "off" > $tmpfile; - else - # Select Country to connect to - country=`cat ~/.local/data/nordvpn_countries.txt | rofi -i -dmenu | sed 's/\s/_/g'`; - dunstify --replace=23198 "VPN" "Connecting to $country..."; - nordvpn connect $country && \ - dunstify --replace=23198 "VPN" "Connected to $country" && \ - echo "on" > $tmpfile; - fi +if [[ $(nordvpn status) == *"Connected"* ]]; then + nordvpn disconnect && \ + dunstify --replace=23198 "VPN" "Disconnected" && \ + echo "off" > $tmpfile; +else + # Select Country to connect to + country=`cat ~/.local/data/nordvpn_countries.txt | rofi -i -dmenu | sed 's/\s/_/g'`; + dunstify --replace=23198 "VPN" "Connecting to $country..."; + nordvpn connect $country && \ + dunstify --replace=23198 "VPN" "Connected to $country" && \ + echo "on" > $tmpfile; +fi #+end_src * =bukurun= - Open link from Buku @@ -153,336 +172,336 @@ To use this this, =nordvpn= must be installed: =yay -S nordvpn-bin=. Script taken from [[https://github.com/carnager/buku_run][here]] that acts as a buku frontend using Rofi. #+begin_src bash :tangle ~/.local/bin/bukurun - _rofi () { - rofi -dmenu -i -no-levenshtein-sort -width 1000 "$@" - } +_rofi () { + rofi -dmenu -i -no-levenshtein-sort -width 1000 "$@" +} - # display settings - display_type=1 - max_str_width=80 +# display settings +display_type=1 +max_str_width=80 - # keybindings - switch_view="Alt+Tab" - new_bookmark="Alt+n" - actions="Alt+a" - edit="Alt+e" - delete="Alt+d" +# keybindings +switch_view="Alt+Tab" +new_bookmark="Alt+n" +actions="Alt+a" +edit="Alt+e" +delete="Alt+d" - # colors - help_color="#334433" +# colors +help_color="#334433" - # source global config - if [[ -f /etc/buku_run.config ]] - then - source /etc/buku_run.config - fi +# source global config +if [[ -f /etc/buku_run.config ]] +then + source /etc/buku_run.config +fi - # source local config: - if [[ -z $XDG_CONFIG_DIR ]] - then - if [[ -f $HOME/.config/buku_run/config ]] - then - source $HOME/.config/buku_run/config - else - echo "User config file \'~/.config/buku_run/config\' not found. using global config" - fi +# source local config: +if [[ -z $XDG_CONFIG_DIR ]] +then + if [[ -f $HOME/.config/buku_run/config ]] + then + source $HOME/.config/buku_run/config + else + echo "User config file \'~/.config/buku_run/config\' not found. using global config" + fi +else + if [[ -f "${XDG_CONFIG_DIR}/buku_run/config" ]] + then + source "${XDG_CONFIG_DIR}/buku_run/config" + else + echo "User config file \'~/.config/buku_run/config\' not found. using global config" + fi +fi + + +main () { + HELP="Welcome to Buku. Use ${new_bookmark} to add a new Bookmark +Use ${switch_view} to switch View. ${actions} for actions" + if [[ $mode == "bookmarks" ]]; then + content=$(parseBuku) + menu=$(echo "${content}" | _rofi -p '> ' -filter "${filter}" -mesg "${HELP}" -kb-custom-1 "${new_bookmark}" -kb-custom-2 "${switch_view}" -kb-custom-3 "${actions}" -kb-custom-4 "${edit}" -kb-custom-5 "${delete}") + elif [[ $mode == "tags" ]]; then + menu=$(buku --np --st | awk '{$NF=""; print $0}' | cut -d ' ' -f2- | _rofi -p '> ' -mesg "${HELP}" -kb-custom-1 "${new_bookmark}" -kb-custom-2 "${switch_view}" -kb-custom-3 "${actions}" -kb-custom-4 "${edit}" -kb-custom-5 "${delete}") + fi + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 12 ]]; then + optionsMenu + elif [[ $val -eq 10 ]]; then + addMark + elif [[ $val -eq 14 ]]; then + deleteMenu + elif [[ $val -eq 13 ]]; then + editMenu + elif [[ $val -eq 11 ]]; then + if [[ $mode == "bookmarks" ]]; then + export mode="tags" + mode=tags main + elif [[ $mode == "tags" ]]; then + export mode="bookmarks" + mode=bookmarks main + fi + elif [[ $val -eq 0 ]]; then + if [[ $mode == "bookmarks" ]]; then + id=$(getId "$content" "$menu") + for bm in ${id}; do + buku -o "${bm}" + done + elif [[ $mode == "tags" ]]; then + filter="${menu}" mode="bookmarks" main + fi + fi +} + +optionsMenu () { + if [[ $mode == "bookmarks" ]]; then + askmenu=$(echo -e "< Return\n---\n1. Edit\n2. Delete" | _rofi -p '> ' -mesg "Choose Action for bookmark") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $askmenu == "< Return" ]]; then + export mode=bookmarks + main + elif [[ $askmenu == "1. Edit" ]]; then + editMenu + elif [[ $askmenu == "2. Delete" ]]; then + deleteMenu + fi + fi + elif [[ $mode == "tags" ]]; then + askmenu=$(echo -e "< Return\n---\n1. Replace Tag\n2. Delete Tag" | _rofi -p '> ' -mesg "Choose Action for tag \"${menu}\"") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $askmenu == "< Return" ]]; then + export mode=tags + main + elif [[ $askmenu == "1. Replace Tag" ]]; then + newtag=$(echo | _rofi -p '> ' -mesg "Enter new tag name for tag \"${menu}\"") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $newtag == "" ]]; then + mode=tags main + else + buku -r "${menu}" "${newtag}" + mode=tags main + fi + fi + elif [[ $askmenu == "2. Delete Tag" ]]; then + delask=$(echo -e "1. Yes\n2. No" | _rofi -p '> ' -mesg "Really delete tag?") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $delask == "1. Yes" ]]; then + buku -r "${menu}" + mode=tags main + elif [[ $delask == "2. No" ]]; then + mode=tags main + fi + fi + fi + fi + fi +} + +deleteMenu () { + id=$(getId "$content" "$menu") + delask=$(echo -e "1. Yes\n2. No" | _rofi -p '> ' -mesg "Really delete bookmark?") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $delask == "1. Yes" ]]; then + buku -d ${id} --tacit + mode=bookmarks main + elif [[ $delask == "2. No" ]]; then + optionsMenu + fi + fi +} + +editMenu () { + id=$(getId "$content" "$menu") + title="$(getTitleFromId $id)" + bookmark="$(getUrlFromId $id)" + tags="$(getTagsFromId $id)" + content=$(echo -e "1. title: $title\n2. url: $bookmark\n3. tags: $tags") + editmenu=$(echo -e "< Return\n---\n${content}" | _rofi -p '> ') + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $editmenu == "< Return" ]]; then + main + elif [[ $editmenu == "tags: NOTAG" ]]; then + addTags --update + elif [[ $editmenu =~ tags:* ]]; then + tags="${tags}" editTags + elif [[ $editmenu =~ url:* ]]; then + editBookmark + elif [[ $editmenu =~ title:* ]]; then + editTitle + fi + fi +} + +editTags () { + edittagsmenu=$(echo | _rofi -filter "${tags}" -p '> ' -mesg "Edit Tags and hit Enter") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + buku -u ${id} --tag "${edittagsmenu}" + fi + mode=bookmarks main +} + +editBookmark () { + bmarkmenu=$(echo "" | _rofi -p "> " -filter "${bookmark}" -mesg "Edit Bookmark and hit Enter") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $bmarkmenu == "http"* ]]; then + buku -u "${id}" --url "${bmarkmenu}" + else + echo "" | rofi -e "Not a valid URI, Make sure URLs start with http" + editBookmark + fi + fi + mode=bookmarks main +} + +editTitle () { + titlemenu=$(echo "" | _rofi -p "> " -filter "${title}" -mesg "Edit Title and hit Enter") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + buku -u "${id}" --title "${titlemenu}" + fi + mode=bookmarks main +} + +addMark () { + inserturl=$(echo -e "$(xclip -o)" | _rofi -p '> ' -mesg "Use URL below or type manually") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + addTags + fi +} + +addTags () { + inserttags=$(buku --np --st | awk '{$NF=""; print $0}' | cut -d ' ' -f2- | _rofi -p '> ' -mesg "Add some tags. Separate tags with ', '") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $(echo "${inserttags}" | wc -l) -gt 1 ]]; then + taglist=$(echo "${inserttags}" | tr '\n' ',') + tags=() + for tag in $taglist; do + tags+=("$tag") + done + else + tags=${inserttags} + fi + if [[ $1 == "--update" ]]; then + buku -u "${id}" --tag ${tags} + else + buku -a ${inserturl} ${tags} + fi + fi +} + +parseBuku () { + echo "$(buku --nc -p | gawk -v max="$max_str_width" -v type="$display_type" ' +BEGIN { + RS="" + FS="\n" +} +{ + if ($3 == "") + $3 = " # NOTAG" + id = gensub(/([0-9]+)\.(.*)/, "\\1", "g", $1) + url = substr(gensub(/\s+> (.*)/, "\\1", "g", $2),0,max) + tags = gensub(/\s+# (.*)/, "\\1", "g", $3) + title = substr(gensub(/[0-9]+\.\s*(.*)/, "\\1", "g", $1),0,max) + + if (type == 1) + print id "\t" url "\t" tags else - if [[ -f "${XDG_CONFIG_DIR}/buku_run/config" ]] - then - source "${XDG_CONFIG_DIR}/buku_run/config" - else - echo "User config file \'~/.config/buku_run/config\' not found. using global config" - fi - fi + print id "\t" title "\t" tags + if (type == 3) + print " \t" url "\t " + print "" +} +' | column -t -s $'\t')" +} +getId () { + id=$(echo "${2%% *}") + if [ -z "$id" ]; then + prev="" + IFS=$'\n' + for line in $1; do + if [ "$2" = "$line" ]; then + id=$(echo "${prev%% *}") + break + else + prev="$line" + fi + done + fi + echo $id +} - main () { - HELP="Welcome to Buku. Use ${new_bookmark} to add a new Bookmark - Use ${switch_view} to switch View. ${actions} for actions" - if [[ $mode == "bookmarks" ]]; then - content=$(parseBuku) - menu=$(echo "${content}" | _rofi -p '> ' -filter "${filter}" -mesg "${HELP}" -kb-custom-1 "${new_bookmark}" -kb-custom-2 "${switch_view}" -kb-custom-3 "${actions}" -kb-custom-4 "${edit}" -kb-custom-5 "${delete}") - elif [[ $mode == "tags" ]]; then - menu=$(buku --np --st | awk '{$NF=""; print $0}' | cut -d ' ' -f2- | _rofi -p '> ' -mesg "${HELP}" -kb-custom-1 "${new_bookmark}" -kb-custom-2 "${switch_view}" -kb-custom-3 "${actions}" -kb-custom-4 "${edit}" -kb-custom-5 "${delete}") - fi - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 12 ]]; then - optionsMenu - elif [[ $val -eq 10 ]]; then - addMark - elif [[ $val -eq 14 ]]; then - deleteMenu - elif [[ $val -eq 13 ]]; then - editMenu - elif [[ $val -eq 11 ]]; then - if [[ $mode == "bookmarks" ]]; then - export mode="tags" - mode=tags main - elif [[ $mode == "tags" ]]; then - export mode="bookmarks" - mode=bookmarks main - fi - elif [[ $val -eq 0 ]]; then - if [[ $mode == "bookmarks" ]]; then - id=$(getId "$content" "$menu") - for bm in ${id}; do - buku -o "${bm}" - done - elif [[ $mode == "tags" ]]; then - filter="${menu}" mode="bookmarks" main - fi - fi - } - - optionsMenu () { - if [[ $mode == "bookmarks" ]]; then - askmenu=$(echo -e "< Return\n---\n1. Edit\n2. Delete" | _rofi -p '> ' -mesg "Choose Action for bookmark") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $askmenu == "< Return" ]]; then - export mode=bookmarks - main - elif [[ $askmenu == "1. Edit" ]]; then - editMenu - elif [[ $askmenu == "2. Delete" ]]; then - deleteMenu - fi - fi - elif [[ $mode == "tags" ]]; then - askmenu=$(echo -e "< Return\n---\n1. Replace Tag\n2. Delete Tag" | _rofi -p '> ' -mesg "Choose Action for tag \"${menu}\"") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $askmenu == "< Return" ]]; then - export mode=tags - main - elif [[ $askmenu == "1. Replace Tag" ]]; then - newtag=$(echo | _rofi -p '> ' -mesg "Enter new tag name for tag \"${menu}\"") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $newtag == "" ]]; then - mode=tags main - else - buku -r "${menu}" "${newtag}" - mode=tags main - fi - fi - elif [[ $askmenu == "2. Delete Tag" ]]; then - delask=$(echo -e "1. Yes\n2. No" | _rofi -p '> ' -mesg "Really delete tag?") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $delask == "1. Yes" ]]; then - buku -r "${menu}" - mode=tags main - elif [[ $delask == "2. No" ]]; then - mode=tags main - fi - fi - fi - fi - fi - } - - deleteMenu () { - id=$(getId "$content" "$menu") - delask=$(echo -e "1. Yes\n2. No" | _rofi -p '> ' -mesg "Really delete bookmark?") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $delask == "1. Yes" ]]; then - buku -d ${id} --tacit - mode=bookmarks main - elif [[ $delask == "2. No" ]]; then - optionsMenu - fi - fi - } - - editMenu () { - id=$(getId "$content" "$menu") - title="$(getTitleFromId $id)" - bookmark="$(getUrlFromId $id)" - tags="$(getTagsFromId $id)" - content=$(echo -e "1. title: $title\n2. url: $bookmark\n3. tags: $tags") - editmenu=$(echo -e "< Return\n---\n${content}" | _rofi -p '> ') - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $editmenu == "< Return" ]]; then - main - elif [[ $editmenu == "tags: NOTAG" ]]; then - addTags --update - elif [[ $editmenu =~ tags:* ]]; then - tags="${tags}" editTags - elif [[ $editmenu =~ url:* ]]; then - editBookmark - elif [[ $editmenu =~ title:* ]]; then - editTitle - fi - fi - } - - editTags () { - edittagsmenu=$(echo | _rofi -filter "${tags}" -p '> ' -mesg "Edit Tags and hit Enter") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - buku -u ${id} --tag "${edittagsmenu}" - fi - mode=bookmarks main - } - - editBookmark () { - bmarkmenu=$(echo "" | _rofi -p "> " -filter "${bookmark}" -mesg "Edit Bookmark and hit Enter") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $bmarkmenu == "http"* ]]; then - buku -u "${id}" --url "${bmarkmenu}" - else - echo "" | rofi -e "Not a valid URI, Make sure URLs start with http" - editBookmark - fi - fi - mode=bookmarks main - } - - editTitle () { - titlemenu=$(echo "" | _rofi -p "> " -filter "${title}" -mesg "Edit Title and hit Enter") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - buku -u "${id}" --title "${titlemenu}" - fi - mode=bookmarks main - } - - addMark () { - inserturl=$(echo -e "$(xclip -o)" | _rofi -p '> ' -mesg "Use URL below or type manually") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - addTags - fi - } - - addTags () { - inserttags=$(buku --np --st | awk '{$NF=""; print $0}' | cut -d ' ' -f2- | _rofi -p '> ' -mesg "Add some tags. Separate tags with ', '") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $(echo "${inserttags}" | wc -l) -gt 1 ]]; then - taglist=$(echo "${inserttags}" | tr '\n' ',') - tags=() - for tag in $taglist; do - tags+=("$tag") - done - else - tags=${inserttags} - fi - if [[ $1 == "--update" ]]; then - buku -u "${id}" --tag ${tags} - else - buku -a ${inserturl} ${tags} - fi - fi - } - - parseBuku () { - echo "$(buku --nc -p | gawk -v max="$max_str_width" -v type="$display_type" ' +getTitleFromId () { + echo "$(buku --nc -p $1 | gawk ' BEGIN { RS="" FS="\n" } { - if ($3 == "") - $3 = " # NOTAG" - id = gensub(/([0-9]+)\.(.*)/, "\\1", "g", $1) - url = substr(gensub(/\s+> (.*)/, "\\1", "g", $2),0,max) - tags = gensub(/\s+# (.*)/, "\\1", "g", $3) - title = substr(gensub(/[0-9]+\.\s*(.*)/, "\\1", "g", $1),0,max) - - if (type == 1) - print id "\t" url "\t" tags - else - print id "\t" title "\t" tags - if (type == 3) - print " \t" url "\t " - print "" - } - ' | column -t -s $'\t')" + print gensub(/[0-9]+\.\s*(.*)/, "\\1", "g", $1) } + ')" +} - getId () { - id=$(echo "${2%% *}") - if [ -z "$id" ]; then - prev="" - IFS=$'\n' - for line in $1; do - if [ "$2" = "$line" ]; then - id=$(echo "${prev%% *}") - break - else - prev="$line" - fi - done - fi - echo $id +getUrlFromId () { + echo "$(buku --nc -p $1 | gawk ' + BEGIN { + RS="" + FS="\n" } - - getTitleFromId () { - echo "$(buku --nc -p $1 | gawk ' - BEGIN { - RS="" - FS="\n" - } - { - print gensub(/[0-9]+\.\s*(.*)/, "\\1", "g", $1) - } - ')" + { + print gensub(/\s+> (.*)/, "\\1", "g", $2) } + ')" +} - getUrlFromId () { - echo "$(buku --nc -p $1 | gawk ' - BEGIN { - RS="" - FS="\n" - } - { - print gensub(/\s+> (.*)/, "\\1", "g", $2) - } - ')" +getTagsFromId () { + echo "$(buku --nc -p $1 | gawk ' + BEGIN { + RS="" + FS="\n" } - - getTagsFromId () { - echo "$(buku --nc -p $1 | gawk ' - BEGIN { - RS="" - FS="\n" - } - { - print gensub(/\s+# (.*)/, "\\1", "g", $3) - } - ')" + { + print gensub(/\s+# (.*)/, "\\1", "g", $3) } + ')" +} - mode=bookmarks main +mode=bookmarks main #+end_src * =i3exit= - Manage lock, suspend, reboot, ... @@ -491,46 +510,46 @@ Script taken from [[https://github.com/carnager/buku_run][here]] that acts as a :END: #+begin_src bash :tangle ~/.local/bin/i3exit - option=$(echo -e "Lock\nExit\nLogout\nSuspend\nHibernate\nReboot\nShutdown" | rofi -i -dmenu) +option=$(echo -e "Lock\nExit\nLogout\nSuspend\nHibernate\nReboot\nShutdown" | rofi -i -dmenu) - case "$option" in - "Lock") - ~/.local/bin/lockscreen - ;; - "Exit") - pkill -15 -t tty"$XDG_VTNR" Xorg - ;; - "Logout") - loginctl terminate-session `loginctl session-status | head -n 1 | awk '{print $1}'` - ;; - "Suspend") - systemctl suspend && ~/.local/bin/lockscreen - ;; - "Hibernate") - systemctl hibernate && ~/.local/bin/lockscreen - ;; - "Reboot") - confirmation=$(echo -e "Yes\nNo" | rofi -i -p "Are you sure you want to Reboot?" -dmenu) - case "$confirmation" in - "Yes") - systemctl reboot - ;; - esac - ;; - "Shutdown") - confirmation=$(echo -e "Yes\nNo" | rofi -i -p "Are you sure you want to Shutdown?" -dmenu) - case "$confirmation" in - "Yes") - systemctl poweroff - ;; - esac - ;; - ,*) - echo "== ! i3exit: missing or invalid argument ! ==" - exit 2 - esac +case "$option" in + "Lock") + ~/.local/bin/lockscreen + ;; + "Exit") + pkill -15 -t tty"$XDG_VTNR" Xorg + ;; + "Logout") + loginctl terminate-session `loginctl session-status | head -n 1 | awk '{print $1}'` + ;; + "Suspend") + systemctl suspend && ~/.local/bin/lockscreen + ;; + "Hibernate") + systemctl hibernate && ~/.local/bin/lockscreen + ;; + "Reboot") + confirmation=$(echo -e "Yes\nNo" | rofi -i -p "Are you sure you want to Reboot?" -dmenu) + case "$confirmation" in + "Yes") + systemctl reboot + ;; + esac + ;; + "Shutdown") + confirmation=$(echo -e "Yes\nNo" | rofi -i -p "Are you sure you want to Shutdown?" -dmenu) + case "$confirmation" in + "Yes") + systemctl poweroff + ;; + esac + ;; + ,*) + echo "== ! i3exit: missing or invalid argument ! ==" + exit 2 +esac - exit 0 +exit 0 #+end_src * =askpass-rofi= - GUI prompt for passwords @@ -542,10 +561,10 @@ Take password prompt from STDIN, print password to STDOUT. The sed piece just removes the colon from the provided prompt: =rofi -p= already gives us a colon #+BEGIN_SRC bash :tangle ~/.local/bin/askpass-rofi - rofi -dmenu \ - -password \ - -no-fixed-num-lines \ - -p "$(printf "$1" | sed s/://)" +rofi -dmenu \ + -password \ + -no-fixed-num-lines \ + -p "$(printf "$1" | sed s/://)" #+END_SRC * =screenshot= - Take Screenshot @@ -554,42 +573,42 @@ The sed piece just removes the colon from the provided prompt: =rofi -p= already :END: #+begin_src bash :tangle ~/.local/bin/screenshot - # Ask for screenshot type - status=$(echo -e "All\nGUI\nSelection\nCropped\nCopy\nPretty\nShadow\nWindow" | rofi -i -dmenu -p "Type") - if [ -z "$status" ]; then - exit; - fi +# Ask for screenshot type +status=$(echo -e "All\nGUI\nSelection\nCropped\nCopy\nPretty\nShadow\nWindow" | rofi -i -dmenu -p "Type") +if [ -z "$status" ]; then + exit; +fi - # Ask for filename if not copying the image - if [[ $status != "Copy" ]]; then - name=$(echo -e "screenshot-$(date +"%m-%d-%y_%H-%M-%S")" | rofi -i -dmenu -p "Filename") - if [ -z "$name" ]; then - exit; - fi - filename=~/Pictures/$name.png - fi +# Ask for filename if not copying the image +if [[ $status != "Copy" ]]; then + name=$(echo -e "screenshot-$(date +"%m-%d-%y_%H-%M-%S")" | rofi -i -dmenu -p "Filename") + if [ -z "$name" ]; then + exit; + fi + filename=~/Pictures/$name.png +fi - case "$status" in - "All") - maim -u $filename ;; - "GUI") - flameshot gui -r > $filename && \ - pkill flameshot;; - "Selection") - maim -u -s $filename ;; - "Cropped") - maim -u -s $filename && convert -trim $filename $filename ;; - "Copy") - maim -u -s | xclip -selection clipboard -t image/png ;; - "Shadow") - maim -u -s | convert - \( +clone -background black -shadow 80x3+5+5 \) +swap -background none -layers merge +repage $filename ;; - "Pretty") - maim -u -s $filename && \ - convert $filename \( +clone -alpha extract -draw 'fill black polygon 0,0 0,5 5,0 fill white circle 5,5 5,0' \( +clone -flip \) -compose Multiply -composite \( +clone -flop \) -compose Multiply -composite \) -alpha off -compose CopyOpacity -composite $filename && \ - convert $filename \( +clone -background black -shadow 40x5+0+0 \) +swap -background none -layers merge +repage $filename ;; - "Window") - maim -u -i $(xdotool selectwindow) $filename ;; - esac +case "$status" in + "All") + maim -u $filename ;; + "GUI") + flameshot gui -r > $filename && \ + pkill flameshot;; + "Selection") + maim -u -s $filename ;; + "Cropped") + maim -u -s $filename && convert -trim $filename $filename ;; + "Copy") + maim -u -s | xclip -selection clipboard -t image/png ;; + "Shadow") + maim -u -s | convert - \( +clone -background black -shadow 80x3+5+5 \) +swap -background none -layers merge +repage $filename ;; + "Pretty") + maim -u -s $filename && \ + convert $filename \( +clone -alpha extract -draw 'fill black polygon 0,0 0,5 5,0 fill white circle 5,5 5,0' \( +clone -flip \) -compose Multiply -composite \( +clone -flop \) -compose Multiply -composite \) -alpha off -compose CopyOpacity -composite $filename && \ + convert $filename \( +clone -background black -shadow 40x5+0+0 \) +swap -background none -layers merge +repage $filename ;; + "Window") + maim -u -i $(xdotool selectwindow) $filename ;; +esac #+end_src * =network-toggle= - Toggle Network @@ -600,16 +619,16 @@ The sed piece just removes the colon from the provided prompt: =rofi -p= already Minimal network manager to just toggle the Wifi or Ethernet connection. #+begin_src bash :tangle ~/.local/bin/network-toggle - result=$(nmcli device | sed '1d' | dmenu -l 20); +result=$(nmcli device | sed '1d' | dmenu -l 20); - interface=$(echo $result | awk -F ' ' '{print $1}'); - status=$(echo $result | awk -F ' ' '{print $3}'); +interface=$(echo $result | awk -F ' ' '{print $1}'); +status=$(echo $result | awk -F ' ' '{print $3}'); - if [ $status == 'disconnected' ]; then - nmcli device connect $interface - else - nmcli device disconnect $interface - fi +if [ $status == 'disconnected' ]; then + nmcli device connect $interface +else + nmcli device disconnect $interface +fi #+end_src * =make-gif= - Convert an =MP4= video to =GIF= @@ -620,11 +639,11 @@ Minimal network manager to just toggle the Wifi or Ethernet connection. First argument is the =mp4= file and the second argument is the output =gif= file. #+begin_src bash :tangle ~/.local/bin/make-gif - palette="/tmp/palette.png" - filters="fps=15,scale=320:-1:flags=lanczos" +palette="/tmp/palette.png" +filters="fps=15,scale=320:-1:flags=lanczos" - ffmpeg -v warning -i $1 -vf "$filters,palettegen" -y $palette - ffmpeg -v warning -i $1 -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y $2 +ffmpeg -v warning -i $1 -vf "$filters,palettegen" -y $palette +ffmpeg -v warning -i $1 -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y $2 #+end_src * =yt-audio= - Download-Audio from youtube @@ -634,10 +653,10 @@ First argument is the =mp4= file and the second argument is the output =gif= fil #+begin_src bash :tangle ~/.local/bin/yt-audio if [ $TMUX ]; then - tmux split -v -l 5 "cd ~/Downloads/ && youtube-dl --add-metadata -xic -f bestaudio/best $1" && tmux select-pane -U + tmux split -v -l 5 "cd ~/Downloads/ && youtube-dl --add-metadata -xic -f bestaudio/best $1" && tmux select-pane -U else - cd ~/Downloads/; - setsid nohup youtube-dl --add-metadata -xic -f bestaudio/best $1 &> /dev/null & + cd ~/Downloads/; + setsid nohup youtube-dl --add-metadata -xic -f bestaudio/best $1 &> /dev/null & fi #+end_src @@ -648,10 +667,10 @@ fi #+begin_src bash :tangle ~/.local/bin/yt-video if [ $TMUX ]; then - tmux split -v -l 5 "cd ~/Downloads/ && youtube-dl --add-metadata -ic $1" && tmux select-pane -U + tmux split -v -l 5 "cd ~/Downloads/ && youtube-dl --add-metadata -ic $1" && tmux select-pane -U else - cd ~/Downloads/; - setsid nohup youtube-dl --add-metadata -ic $1 &> /dev/null & + cd ~/Downloads/; + setsid nohup youtube-dl --add-metadata -ic $1 &> /dev/null & fi #+end_src * =setbg= - Set Background @@ -664,16 +683,16 @@ First argument is either: - a directory, in such case it will pick a random picture file from that directory #+begin_src bash :tangle ~/.local/bin/setbg - bgloc="${XDG_CACHE_HOME:-$HOME/.cache/}/bg" +bgloc="${XDG_CACHE_HOME:-$HOME/.cache/}/bg" - # If the argument is a file - [ -f "$1" ] && ln -sf "$(readlink -f "$1")" "$bgloc" +# If the argument is a file +[ -f "$1" ] && ln -sf "$(readlink -f "$1")" "$bgloc" - # If the argument is a directory - [ -d "$1" ] && ln -sf "$(find "$(readlink -f "$1")" -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)" "$bgloc" +# If the argument is a directory +[ -d "$1" ] && ln -sf "$(find "$(readlink -f "$1")" -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)" "$bgloc" - # Set the wallpaper - xwallpaper --zoom "$bgloc" +# Set the wallpaper +xwallpaper --zoom "$bgloc" #+end_src * =insert-unicode= - Insert Unicode Icon @@ -684,20 +703,20 @@ First argument is either: The list of emojis is available [[file:data.org::#emojis][here]]. #+begin_src bash :tangle ~/.local/bin/insert-unicode - # Must have xclip installed to even show menu. - xclip -h 2>/dev/null || exit 1 +# Must have xclip installed to even show menu. +xclip -h 2>/dev/null || exit 1 - chosen=$(cut -d ';' -f1 ~/.local/data/emojis | rofi -dmenu -i -l 20 | sed "s/ .*//") +chosen=$(cut -d ';' -f1 ~/.local/data/emojis | rofi -dmenu -i -l 20 | sed "s/ .*//") - [ "$chosen" != "" ] || exit +[ "$chosen" != "" ] || exit - # If you run this command with an argument, it will automatically insert the character. - if [ -n "$1" ]; then - xdotool key Shift+Insert - else - echo "$chosen" | tr -d '\n' | xsel -ib - dunstify "'$chosen' copied to clipboard." & - fi +# If you run this command with an argument, it will automatically insert the character. +if [ -n "$1" ]; then + xdotool key Shift+Insert +else + echo "$chosen" | tr -d '\n' | xsel -ib + dunstify "'$chosen' copied to clipboard." & +fi #+end_src * =insert-nerd-fonts= - Insert Nerd Font Icon @@ -708,20 +727,20 @@ The list of emojis is available [[file:data.org::#emojis][here]]. The list of emojis is available [[file:data.org::#nerd-fonts][here]]. #+begin_src bash :tangle ~/.local/bin/insert-nerd-fonts - # Must have xsel installed to even show menu. - xsel -h 2>/dev/null || exit 1 +# Must have xsel installed to even show menu. +xsel -h 2>/dev/null || exit 1 - chosen=$(cat ~/.local/data/nerd-fonts | rofi -dmenu -i -l 20 | sed "s/ .*//") +chosen=$(cat ~/.local/data/nerd-fonts | rofi -dmenu -i -l 20 | sed "s/ .*//") - [ "$chosen" != "" ] || exit +[ "$chosen" != "" ] || exit - # If you run this command with an argument, it will automatically insert the character. - if [ -n "$1" ]; then - xdotool key Shift+Insert - else - echo "$chosen" | tr -d '\n' | xsel -ib - dunstify "'$chosen' copied to clipboard." & - fi +# If you run this command with an argument, it will automatically insert the character. +if [ -n "$1" ]; then + xdotool key Shift+Insert +else + echo "$chosen" | tr -d '\n' | xsel -ib + dunstify "'$chosen' copied to clipboard." & +fi #+end_src * =linkhandler= - Open with Default application @@ -734,19 +753,19 @@ This is used to open any type of file with the wanted program. It can be used in =newsboat=, =neomutt= and =ranger= for instance. #+begin_src bash :tangle ~/.local/bin/linkhandler - [ -z "$1" ] && { "$BROWSER"; exit; } +[ -z "$1" ] && { "$BROWSER"; exit; } - case "$1" in - ,*mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtu.be*) - setsid mpv --input-ipc-server=/tmp/mpvsoc$(date +%s) -quiet "$1" >/dev/null 2>&1 & ;; - ,*png|*jpg|*jpe|*jpeg|*gif) - curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///")" && sxiv -a "/tmp/$(echo "$1" | sed "s/.*\///")" >/dev/null 2>&1 & ;; - ,*mp3|*flac|*opus|*mp3?source*) - setsid curl -LO "$1" >/dev/null 2>&1 & ;; - ,*) - if [ -f "$1" ]; then "$TERMINAL" -e "$EDITOR $1" - else setsid $BROWSER "$1" >/dev/null 2>&1 & fi ;; - esac +case "$1" in + ,*mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtu.be*) + setsid mpv --input-ipc-server=/tmp/mpvsoc$(date +%s) -quiet "$1" >/dev/null 2>&1 & ;; + ,*png|*jpg|*jpe|*jpeg|*gif) + curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///")" && sxiv -a "/tmp/$(echo "$1" | sed "s/.*\///")" >/dev/null 2>&1 & ;; + ,*mp3|*flac|*opus|*mp3?source*) + setsid curl -LO "$1" >/dev/null 2>&1 & ;; + ,*) + if [ -f "$1" ]; then "$TERMINAL" -e "$EDITOR $1" + else setsid $BROWSER "$1" >/dev/null 2>&1 & fi ;; +esac #+end_src * =lockscreen= - Lock Screen @@ -759,28 +778,28 @@ A nice lockscreen that uses =i3lock=. It takes a screenshot, pixelize it and overlay an image in the lockscreens folder. #+begin_src bash - # First, turn off dunst - killall -SIGUSR1 dunst && echo "off" > /tmp/dunststatus; +# First, turn off dunst +killall -SIGUSR1 dunst && echo "off" > /tmp/dunststatus; - # Turn off the music if it is playing. - MPC_STATE=$(mpc | sed -n '2p' | cut -d "[" -f2 | cut -d "]" -f1) - if [[ $MPC_STATE == "playing" ]]; then - mpc pause - fi +# Turn off the music if it is playing. +MPC_STATE=$(mpc | sed -n '2p' | cut -d "[" -f2 | cut -d "]" -f1) +if [[ $MPC_STATE == "playing" ]]; then + mpc pause +fi - # Take the screenshot and process it nicely - temp_file="/tmp/screen.png" - rm -f $temp_file - maim $temp_file && \ - # Pixelize the Screenshot - convert $temp_file -scale 10% -scale 1000% $temp_file && \ - # Overlay a random image in the lockscreens folder - composite -gravity center $(find ~/.local/data/lockscreens/ -type f | shuf -n 1) $temp_file $temp_file; +# Take the screenshot and process it nicely +temp_file="/tmp/screen.png" +rm -f $temp_file +maim $temp_file && \ + # Pixelize the Screenshot + convert $temp_file -scale 10% -scale 1000% $temp_file && \ + # Overlay a random image in the lockscreens folder + composite -gravity center $(find ~/.local/data/lockscreens/ -type f | shuf -n 1) $temp_file $temp_file; - # Finally, lock the screen using =i3lock= - i3lock --ignore-empty-password --nofork --image=$temp_file && \ - # When unlocking, restart dunst - killall -SIGUSR2 dunst && echo "on" > /tmp/dunststatus +# Finally, lock the screen using =i3lock= +i3lock --ignore-empty-password --nofork --image=$temp_file && \ + # When unlocking, restart dunst + killall -SIGUSR2 dunst && echo "on" > /tmp/dunststatus #+end_src * =mopidy-restart= - Restart Mopidy @@ -791,18 +810,18 @@ It takes a screenshot, pixelize it and overlay an image in the lockscreens folde Sometimes =mopidy= need to be restarted... #+begin_src bash :tangle ~/.local/bin/mopidy-restart - pids=( $(pgrep -f mopidy) ) +pids=( $(pgrep -f mopidy) ) - for pid in "${pids[@]}"; do - if [[ $pid != $$ ]]; then - kill "$pid" - fi - done - echo "Killed mopidy." +for pid in "${pids[@]}"; do + if [[ $pid != $$ ]]; then + kill "$pid" + fi +done +echo "Killed mopidy." - echo "Restarting mopidy..." - mopidy --config ~/.config/mopidy/mopidy.conf >/dev/null 2>&1 & - echo "Done" +echo "Restarting mopidy..." +mopidy --config ~/.config/mopidy/mopidy.conf >/dev/null 2>&1 & +echo "Done" #+end_src * =upload= - Upload Script @@ -813,13 +832,13 @@ Sometimes =mopidy= need to be restarted... Upload a file to https://0x0.st/ and copy the generated url. #+begin_src bash :tangle ~/.local/bin/upload - if [ $TMUX ]; then - tmux split -v -l 1 "curl --progress-bar -F\"file=@$1\" https://0x0.st | xsel -ib;" && tmux select-pane -U - else - curl --progress-bar -F"file=@$1" https://0x0.st | xsel -ib && \ - dunstify 'Upload' 'Successful' || \ - dunstify --urgency=critical 'Upload' 'Failed' - fi +if [ $TMUX ]; then + tmux split -v -l 1 "curl --progress-bar -F\"file=@$1\" https://0x0.st | xsel -ib;" && tmux select-pane -U +else + curl --progress-bar -F"file=@$1" https://0x0.st | xsel -ib && \ + dunstify 'Upload' 'Successful' || \ + dunstify --urgency=critical 'Upload' 'Failed' +fi #+end_src * =weather= - Display Weather in terminal @@ -830,25 +849,25 @@ Upload a file to https://0x0.st/ and copy the generated url. Get the weather from http://wttr.in/. #+begin_src bash :tangle ~/.local/bin/weather - if [ -n "$*" ]; then - address="wttr.in/" - address+=$* - else - address="wttr.in/" - fi +if [ -n "$*" ]; then + address="wttr.in/" + address+=$* +else + address="wttr.in/" +fi - if type sxiv > /dev/null 2>&1; then - address+=".png" +if type sxiv > /dev/null 2>&1; then + address+=".png" - wget -qO- "$address" > /tmp/weather.png && \ - sxiv -b /tmp/weather.png - elif type feh > /dev/null 2>&1; then - address+=".png" + wget -qO- "$address" > /tmp/weather.png && \ + sxiv -b /tmp/weather.png +elif type feh > /dev/null 2>&1; then + address+=".png" - wget -qO- "$address" | feh - - else - curl "$address" - fi + wget -qO- "$address" | feh - +else + curl "$address" +fi #+end_src * =readbib= - Open Bibliography File @@ -859,7 +878,7 @@ Get the weather from http://wttr.in/. List all =pdf= files and open selected one with zathura. #+begin_src bash :tangle ~/.local/bin/readbib - cd ~/Cloud/pdfs/ && ls | rofi -dmenu -lines 20 | xargs -I {} zathura {} +cd ~/Cloud/pdfs/ && ls | rofi -dmenu -lines 20 | xargs -I {} zathura {} #+end_src * =pdf2bib= - Extract bibtex entry from PDF file @@ -868,33 +887,33 @@ List all =pdf= files and open selected one with zathura. :END: #+begin_src bash :tangle ~/.local/bin/pdf2bib - pdf2doi () { - pdfinfo "$1" | grep -io "doi:.*" | grep -Poi "10.\d+/[^\s]+" || \ - pdftotext "$1" 2>/dev/null - | grep -io "doi:.*" -m 1 | grep -Poi "10.\d+/[^\s]+" || \ - pdftotext "$1" 2>/dev/null - | grep -Poi "10.\d+/[^\s]+" - } +pdf2doi () { + pdfinfo "$1" | grep -io "doi:.*" | grep -Poi "10.\d+/[^\s]+" || \ + pdftotext "$1" 2>/dev/null - | grep -io "doi:.*" -m 1 | grep -Poi "10.\d+/[^\s]+" || \ + pdftotext "$1" 2>/dev/null - | grep -Poi "10.\d+/[^\s]+" +} - doi2bib () { - # curl -LHs "Accept: application/x-bibtex" http://dx.doi.org/$1 -w "\\n" - curl -s "http://api.crossref.org/works/$1/transform/application/x-bibtex" -w "\\n" - } +doi2bib () { + # curl -LHs "Accept: application/x-bibtex" http://dx.doi.org/$1 -w "\\n" + curl -s "http://api.crossref.org/works/$1/transform/application/x-bibtex" -w "\\n" +} - # If a file is specified, try to extract DOI from the file - if [ -f "$1" ]; then - doi=$(pdf2doi "$1") - fi +# If a file is specified, try to extract DOI from the file +if [ -f "$1" ]; then + doi=$(pdf2doi "$1") +fi - if hash rofi 2>/dev/null; then - doi=$(echo "$doi" | rofi -i -dmenu -p "DOI") - else - doi=$(echo "$doi" | dmenu -i -p "DOI") - fi +if hash rofi 2>/dev/null; then + doi=$(echo "$doi" | rofi -i -dmenu -p "DOI") +else + doi=$(echo "$doi" | dmenu -i -p "DOI") +fi - if [ -n "$1" ]; then - doi2bib $doi | xsel -ib && \ - dunstify 'BibTeX' 'Copied to Clipboard' || \ - dunstify --urgency=critical 'BibTeX' 'Failed' - fi +if [ -n "$1" ]; then + doi2bib $doi | xsel -ib && \ + dunstify 'BibTeX' 'Copied to Clipboard' || \ + dunstify --urgency=critical 'BibTeX' 'Failed' +fi #+end_src * =pdf2png= - Convert a PDF to PNG @@ -903,10 +922,10 @@ List all =pdf= files and open selected one with zathura. :END: #+begin_src bash :tangle ~/.local/bin/pdf2png - # Check if the input argumetn is a PDF file - if [[ -f "$1" && "$1" == *.pdf ]]; then - pdftoppm -png "$1" > "$(echo "$1" | cut -f 1 -d '.' | sed 's/$/.png/')" - fi +# Check if the input argumetn is a PDF file +if [[ -f "$1" && "$1" == *.pdf ]]; then + pdftoppm -png "$1" > "$(echo "$1" | cut -f 1 -d '.' | sed 's/$/.png/')" +fi #+end_src * =convert-file= - Convert any file to another filetype @@ -915,117 +934,117 @@ List all =pdf= files and open selected one with zathura. :END: #+begin_src bash :tangle ~/.local/bin/convert-file - # Get filename - filename_with_extension=$(basename -- "$1") - # Extract extension of the file - in_ext="${filename_with_extension##*.}" - # filename without extension - filename_without_extension=${filename_with_extension%.*} +# Get filename +filename_with_extension=$(basename -- "$1") +# Extract extension of the file +in_ext="${filename_with_extension##*.}" +# filename without extension +filename_without_extension=${filename_with_extension%.*} - # Convert SVG Files - svg2() { \ - out_ext=$(echo -e "pdf\npng" | rofi -i -dmenu -p "Convert SVG to") +# Convert SVG Files +svg2() { \ + out_ext=$(echo -e "pdf\npng" | rofi -i -dmenu -p "Convert SVG to") - if [ -z "$out_ext" ]; then - exit; - fi + if [ -z "$out_ext" ]; then + exit; + fi - case "$out_ext" in - "png") - inkscape --export-type="$out_ext" --export-dpi=200 --export-area-drawing "$filename_with_extension" - ;; - "pdf") - inkscape --export-type="$out_ext" "$filename_with_extension" - # pdf2svg file.pdf file.svg - ;; - esac - } + case "$out_ext" in + "png") + inkscape --export-type="$out_ext" --export-dpi=200 --export-area-drawing "$filename_with_extension" + ;; + "pdf") + inkscape --export-type="$out_ext" "$filename_with_extension" + # pdf2svg file.pdf file.svg + ;; + esac +} - # Convert PDF Files - pdf2() { \ - out_ext=$(echo -e "svg\npng" | rofi -i -dmenu -p "Convert PDF to") +# Convert PDF Files +pdf2() { \ + out_ext=$(echo -e "svg\npng" | rofi -i -dmenu -p "Convert PDF to") - # Ask if crop? + # Ask if crop? - if [ -z "$out_ext" ]; then - exit; - fi + if [ -z "$out_ext" ]; then + exit; + fi - case "$out_ext" in - "png") - inkscape --export-type="$out_ext" --export-dpi=200 --export-area-drawing "$filename_with_extension" - ;; - "svg") - inkscape --export-type="$out_ext" "$filename_with_extension" - ;; - esac - } + case "$out_ext" in + "png") + inkscape --export-type="$out_ext" --export-dpi=200 --export-area-drawing "$filename_with_extension" + ;; + "svg") + inkscape --export-type="$out_ext" "$filename_with_extension" + ;; + esac +} - # Convert DOCX/PPTX Files - docx2() { \ - out_ext=$(echo -e "pdf" | rofi -i -dmenu -p "Convert DOCX/PPTX to") +# Convert DOCX/PPTX Files +docx2() { \ + out_ext=$(echo -e "pdf" | rofi -i -dmenu -p "Convert DOCX/PPTX to") - if [ -z "$out_ext" ]; then - exit; - fi + if [ -z "$out_ext" ]; then + exit; + fi - case "$out_ext" in - "pdf") - lowriter --convert-to pdf "$filename_with_extension" - ;; - esac - } + case "$out_ext" in + "pdf") + lowriter --convert-to pdf "$filename_with_extension" + ;; + esac +} - # Convert PNG Files - png2() { \ - out_ext=$(echo -e "pdf" | rofi -i -dmenu -p "Convert PNG to") +# Convert PNG Files +png2() { \ + out_ext=$(echo -e "pdf" | rofi -i -dmenu -p "Convert PNG to") - if [ -z "$out_ext" ]; then - exit; - fi + if [ -z "$out_ext" ]; then + exit; + fi - case "$out_ext" in - "pdf") - convert "$filename_with_extension" "$filename_without_extension.pdf" - ;; - esac - } + case "$out_ext" in + "pdf") + convert "$filename_with_extension" "$filename_without_extension.pdf" + ;; + esac +} - # Convert MP4 Files - mp42() { \ - out_ext=$(echo -e "gif" | rofi -i -dmenu -p "Convert MP4 to") +# Convert MP4 Files +mp42() { \ + out_ext=$(echo -e "gif" | rofi -i -dmenu -p "Convert MP4 to") - if [ -z "$out_ext" ]; then - exit; - fi + if [ -z "$out_ext" ]; then + exit; + fi - case "$out_ext" in - "gif") - make-gif "$filename_with_extension" "$filename_without_extension.gif" - ;; - esac - } + case "$out_ext" in + "gif") + make-gif "$filename_with_extension" "$filename_without_extension.gif" + ;; + esac +} - case "$in_ext" in - "svg") - svg2 - ;; - "pdf") - pdf2 - ;; - "mp4") - mp42 - ;; - "png") - png2 - ;; - "docx") - docx2 - ;; - "pttx") - docx2 - ;; - esac +case "$in_ext" in + "svg") + svg2 + ;; + "pdf") + pdf2 + ;; + "mp4") + mp42 + ;; + "png") + png2 + ;; + "docx") + docx2 + ;; + "pttx") + docx2 + ;; +esac #+end_src * =pdf-shrink= - Pdf Shrink @@ -1036,73 +1055,73 @@ List all =pdf= files and open selected one with zathura. Simply reduces the size of a given pdf file. #+begin_src bash :tangle ~/.local/bin/pdf-shrink - shrink () - { - gs \ - -q -dNOPAUSE -dBATCH -dSAFER \ - -sDEVICE=pdfwrite \ - -dCompatibilityLevel=1.3 \ - -dPDFSETTINGS=/screen \ - -dEmbedAllFonts=true \ - -dSubsetFonts=true \ - -dAutoRotatePages=/None \ - -dColorImageDownsampleType=/Bicubic \ - -dColorImageResolution=$3 \ - -dGrayImageDownsampleType=/Bicubic \ - -dGrayImageResolution=$3 \ - -dMonoImageDownsampleType=/Subsample \ - -dMonoImageResolution=$3 \ - -sOutputFile="$2" \ - "$1" - } +shrink () +{ + gs \ + -q -dNOPAUSE -dBATCH -dSAFER \ + -sDEVICE=pdfwrite \ + -dCompatibilityLevel=1.3 \ + -dPDFSETTINGS=/screen \ + -dEmbedAllFonts=true \ + -dSubsetFonts=true \ + -dAutoRotatePages=/None \ + -dColorImageDownsampleType=/Bicubic \ + -dColorImageResolution=$3 \ + -dGrayImageDownsampleType=/Bicubic \ + -dGrayImageResolution=$3 \ + -dMonoImageDownsampleType=/Subsample \ + -dMonoImageResolution=$3 \ + -sOutputFile="$2" \ + "$1" +} - check_smaller () - { - # If $1 and $2 are regular files, we can compare file sizes to - # see if we succeeded in shrinking. If not, we copy $1 over $2: - if [ ! -f "$1" -o ! -f "$2" ]; then - return 0; - fi - ISIZE="$(echo $(wc -c "$1") | cut -f1 -d\ )" - OSIZE="$(echo $(wc -c "$2") | cut -f1 -d\ )" - if [ "$ISIZE" -lt "$OSIZE" ]; then - echo "Input smaller than output, doing straight copy" >&2 - cp "$1" "$2" - fi - } +check_smaller () +{ + # If $1 and $2 are regular files, we can compare file sizes to + # see if we succeeded in shrinking. If not, we copy $1 over $2: + if [ ! -f "$1" -o ! -f "$2" ]; then + return 0; + fi + ISIZE="$(echo $(wc -c "$1") | cut -f1 -d\ )" + OSIZE="$(echo $(wc -c "$2") | cut -f1 -d\ )" + if [ "$ISIZE" -lt "$OSIZE" ]; then + echo "Input smaller than output, doing straight copy" >&2 + cp "$1" "$2" + fi +} - usage () - { - echo "Reduces PDF filesize by lossy recompressing with Ghostscript." - echo "Not guaranteed to succeed, but usually works." - echo " Usage: $1 infile [outfile] [resolution_in_dpi]" - } +usage () +{ + echo "Reduces PDF filesize by lossy recompressing with Ghostscript." + echo "Not guaranteed to succeed, but usually works." + echo " Usage: $1 infile [outfile] [resolution_in_dpi]" +} - IFILE="$1" +IFILE="$1" - # Need an input file: - if [ -z "$IFILE" ]; then - usage "$0" - exit 1 - fi +# Need an input file: +if [ -z "$IFILE" ]; then + usage "$0" + exit 1 +fi - # Output filename defaults to "-" (stdout) unless given: - if [ ! -z "$2" ]; then - OFILE="$2" - else - OFILE="-" - fi +# Output filename defaults to "-" (stdout) unless given: +if [ ! -z "$2" ]; then + OFILE="$2" +else + OFILE="-" +fi - # Output resolution defaults to 90 unless given: - if [ ! -z "$3" ]; then - res="$3" - else - res="90" - fi +# Output resolution defaults to 90 unless given: +if [ ! -z "$3" ]; then + res="$3" +else + res="90" +fi - shrink "$IFILE" "$OFILE" "$res" || exit $? +shrink "$IFILE" "$OFILE" "$res" || exit $? - check_smaller "$IFILE" "$OFILE" +check_smaller "$IFILE" "$OFILE" #+end_src * =pdf-delete-annotations= - Delete Annotations from PDFs :PROPERTIES: @@ -1112,12 +1131,12 @@ Simply reduces the size of a given pdf file. Taken from this [[https://gist.github.com/stefanschmidt/5248592][gist]]. #+begin_src bash :tangle ~/.local/bin/pdf-delete-annotations - # Check if the input argumetn is a PDF file - if [[ -f "$1" && "$1" == *.pdf ]]; then - pdftk $1 output /tmp/uncompressed.pdf uncompress - LANG=C sed -n '/^\/Annots/!p' /tmp/uncompressed.pdf > /tmp/stripped.pdf - pdftk /tmp/stripped.pdf output $1 compress - fi +# Check if the input argumetn is a PDF file +if [[ -f "$1" && "$1" == *.pdf ]]; then + pdftk $1 output /tmp/uncompressed.pdf uncompress + LANG=C sed -n '/^\/Annots/!p' /tmp/uncompressed.pdf > /tmp/stripped.pdf + pdftk /tmp/stripped.pdf output $1 compress +fi #+end_src * =pdf-delete-first-page= - Delete first page of PDF @@ -1128,16 +1147,16 @@ Taken from this [[https://gist.github.com/stefanschmidt/5248592][gist]]. The requirement is to have =pdftk= or =stapler= installed. #+begin_src bash :tangle ~/.local/bin/pdf-delete-first-page - # Check if the input argumetn is a PDF file - if [[ -f $1 && $1 == *.pdf ]]; then - if type stapler > /dev/null 2>&1; then - stapler del "$1" 1 /tmp/pdftk_out.pdf && mv /tmp/pdftk_out.pdf "$1" - elif type pdftk > /dev/null 2>&1; then - pdftk "$1" cat 2-end output /tmp/pdftk_out.pdf && mv /tmp/pdftk_out.pdf "$1" - else - echo "Neither pdftk nor stapler are installed" - fi - fi +# Check if the input argumetn is a PDF file +if [[ -f $1 && $1 == *.pdf ]]; then + if type stapler > /dev/null 2>&1; then + stapler del "$1" 1 /tmp/pdftk_out.pdf && mv /tmp/pdftk_out.pdf "$1" + elif type pdftk > /dev/null 2>&1; then + pdftk "$1" cat 2-end output /tmp/pdftk_out.pdf && mv /tmp/pdftk_out.pdf "$1" + else + echo "Neither pdftk nor stapler are installed" + fi +fi #+end_src * =rofi-calc= - Simple Calculation using Rofi @@ -1148,7 +1167,7 @@ The requirement is to have =pdftk= or =stapler= installed. Run some simple calculations with =rofi=. #+begin_src bash :tangle ~/.local/bin/rofi-calc - rofi -show calc -mode calc -no-show-match -no-sort +rofi -show calc -mode calc -no-show-match -no-sort #+end_src * =pass-gen= - Generate Random Alphanumeric Password @@ -1157,20 +1176,20 @@ Run some simple calculations with =rofi=. :END: #+begin_src bash :tangle ~/.local/bin/pass-gen - # Ask for the wanted number of caracters - num=$(rofi -dmenu -p "Number of caracters") +# Ask for the wanted number of caracters +num=$(rofi -dmenu -p "Number of caracters") - # Random generation of alphanumeric caracters - pass=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) +# Random generation of alphanumeric caracters +pass=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) - re='^[0-9]+$' - if [[ $num =~ $re ]] ; then - pass=${pass:0:$num} - fi +re='^[0-9]+$' +if [[ $num =~ $re ]] ; then + pass=${pass:0:$num} +fi - # Send the password to the clipboard - printf "$pass" | xclip -sel clip && \ - dunstify 'Password' 'Generated' +# Send the password to the clipboard +printf "$pass" | xclip -sel clip && \ + dunstify 'Password' 'Generated' #+end_src @@ -1180,7 +1199,7 @@ Run some simple calculations with =rofi=. :END: #+begin_src bash :tangle ~/.local/bin/sxhkd-help - awk '/^[a-z]/ && last {print "",$0,"\t",last,""} {last=""} /^#/{last=$0}' ~/.config/sxhkd/sxhkdrc{,.i3} | - column -t -s $'\t' | - rofi -dmenu -i -markup-rows -no-show-icons -width 1000 -lines 15 -yoffset 40 +awk '/^[a-z]/ && last {print "",$0,"\t",last,""} {last=""} /^#/{last=$0}' ~/.config/sxhkd/sxhkdrc{,.i3} | + column -t -s $'\t' | + rofi -dmenu -i -markup-rows -no-show-icons -width 1000 -lines 15 -yoffset 40 #+end_src diff --git a/bspwm.org b/bspwm.org index 794a616..e437984 100644 --- a/bspwm.org +++ b/bspwm.org @@ -8,46 +8,46 @@ * List Desktops #+begin_src bash - bspc monitor -d code web mail misc figs +bspc monitor -d code web mail misc figs #+end_src * Basic Config #+begin_src bash - bspc config border_width 1 - bspc config window_gap 8 - bspc config top_padding 27 # top_padding I set equal to polybar's height +bspc config border_width 1 +bspc config window_gap 8 +bspc config top_padding 27 # top_padding I set equal to polybar's height - bspc config split_ratio 0.52 - bspc config borderless_monocle true - bspc config gapless_monocle true +bspc config split_ratio 0.52 +bspc config borderless_monocle true +bspc config gapless_monocle true - bspc config focus_follows_pointer true +bspc config focus_follows_pointer true #+end_src * Colors #+begin_src bash - bspc config normal_border_color \#32302f - bspc config focused_border_color \#bdae93 +bspc config normal_border_color \#32302f +bspc config focused_border_color \#bdae93 #+end_src * Rules Use =xprop= to obtain information about the window. #+begin_src bash - # If refreshing bspwm, remove all previous rules to prevent doubling up. - bspc rule -r "*" +# If refreshing bspwm, remove all previous rules to prevent doubling up. +bspc rule -r "*" - bspc rule --add qutebrowser desktop='web' follow=on state=tiled - bspc rule --add Emacs desktop='code' follow=on state=tiled +bspc rule --add qutebrowser desktop='web' follow=on state=tiled +bspc rule --add Emacs desktop='code' follow=on state=tiled - bspc rule --add Zathura state=tiled +bspc rule --add Zathura state=tiled - bspc rule --add Pavucontrol state=floating - bspc rule --add Blueman-manager state=floating +bspc rule --add Pavucontrol state=floating +bspc rule --add Blueman-manager state=floating #+end_src * Run Polybar and SXHKD #+begin_src bash - polybar top >>/tmp/polybar.log 2>&1 & - sxhkd -m 1 -c ~/.config/sxhkd/sxhkdrc.bspwm & +polybar top >>/tmp/polybar.log 2>&1 & +sxhkd -m 1 -c ~/.config/sxhkd/sxhkdrc.bspwm & #+end_src diff --git a/calendar.org b/calendar.org index 6570a00..10e06f5 100644 --- a/calendar.org +++ b/calendar.org @@ -8,43 +8,43 @@ :END: #+BEGIN_SRC conf - [general] - status_path = "~/.config/vdirsyncer/status/" +[general] +status_path = "~/.config/vdirsyncer/status/" - [pair google_calendar] - a = "google_calendar_remote" - b = "google_calendar_local" - collections = ["dehaeze.thomas@gmail.com", "8kjmhe2ar0abnm054ill1fb0gc@group.calendar.google.com"] - conflict_resolution = "a wins" +[pair google_calendar] +a = "google_calendar_remote" +b = "google_calendar_local" +collections = ["dehaeze.thomas@gmail.com", "8kjmhe2ar0abnm054ill1fb0gc@group.calendar.google.com"] +conflict_resolution = "a wins" - [storage google_calendar_remote] - type = "google_calendar" - token_file = "~/.config/dotfiles/private/token_file" - client_id = "188415318767-802h28ig8gromo0f72blrbg6cgcop6m8.apps.googleusercontent.com" - client_secret = "<>" +[storage google_calendar_remote] +type = "google_calendar" +token_file = "~/.config/dotfiles/private/token_file" +client_id = "188415318767-802h28ig8gromo0f72blrbg6cgcop6m8.apps.googleusercontent.com" +client_secret = "<>" - [storage google_calendar_local] - type = "filesystem" - path = "~/.calendars/google/" - fileext = ".ics" +[storage google_calendar_local] +type = "filesystem" +path = "~/.calendars/google/" +fileext = ".ics" - [pair google_contacts] - a = "google_contacts_remote" - b = "google_contacts_local" - collections = ["from a", "from b"] - conflict_resolution = "a wins" +[pair google_contacts] +a = "google_contacts_remote" +b = "google_contacts_local" +collections = ["from a", "from b"] +conflict_resolution = "a wins" - [storage google_contacts_local] - type = "filesystem" - path = "~/.contacts/" - fileext = ".vcf" +[storage google_contacts_local] +type = "filesystem" +path = "~/.contacts/" +fileext = ".vcf" - [storage google_contacts_remote] - type = "google_contacts" - token_file = "~/.config/dotfiles/private/token_file_carddav" - client_id = "188415318767-802h28ig8gromo0f72blrbg6cgcop6m8.apps.googleusercontent.com" - client_secret = "<>" +[storage google_contacts_remote] +type = "google_contacts" +token_file = "~/.config/dotfiles/private/token_file_carddav" +client_id = "188415318767-802h28ig8gromo0f72blrbg6cgcop6m8.apps.googleusercontent.com" +client_secret = "<>" #+END_SRC * =khal= - CLI calendar application @@ -54,33 +54,33 @@ :END: #+BEGIN_SRC conf - [calendars] +[calendars] - [[home]] - path = ~/.calendars/google/dehaeze.thomas@gmail.com/ - color = "#B8BB26" +[[home]] +path = ~/.calendars/google/dehaeze.thomas@gmail.com/ +color = "#B8BB26" - [[work]] - path = ~/.calendars/google/8kjmhe2ar0abnm054ill1fb0gc@group.calendar.google.com/ - color = "#FB4934" +[[work]] +path = ~/.calendars/google/8kjmhe2ar0abnm054ill1fb0gc@group.calendar.google.com/ +color = "#FB4934" - [highlight_days] - multiple = "#FABD2F" +[highlight_days] +multiple = "#FABD2F" - [default] - highlight_event_days = True +[default] +highlight_event_days = True - [locale] - local_timezone= Europe/Berlin - default_timezone= Europe/Berlin - timeformat= %H:%M - dateformat= %d.%m. - longdateformat= %d.%m.%Y - datetimeformat= %d.%m. %H:%M - longdatetimeformat= %d.%m.%Y %H:%M +[locale] +local_timezone= Europe/Berlin +default_timezone= Europe/Berlin +timeformat= %H:%M +dateformat= %d.%m. +longdateformat= %d.%m.%Y +datetimeformat= %d.%m. %H:%M +longdatetimeformat= %d.%m.%Y %H:%M - [keybindings] - delete = d - today = . - new = c +[keybindings] +delete = d +today = . +new = c #+END_SRC diff --git a/compositor.org b/compositor.org index 7c5ae54..00106ad 100644 --- a/compositor.org +++ b/compositor.org @@ -6,51 +6,51 @@ * Shadow #+BEGIN_SRC conf - shadow = true; - shadow-radius = 12; - shadow-offset-x = -12; - shadow-offset-y = -12; - shadow-exclude = [ - "name = 'Notification'", - "window_type = 'dock'", - "window_type = 'dnd'", - "class_g = 'VirtualBox'", - "class_g ?= 'Notify-osd'", - "name = 'cpt_frame_window'", # For zoom problem when sharing screen - "class_g = 'stalonetray'" - ]; +shadow = true; +shadow-radius = 12; +shadow-offset-x = -12; +shadow-offset-y = -12; +shadow-exclude = [ +"name = 'Notification'", +"window_type = 'dock'", +"window_type = 'dnd'", +"class_g = 'VirtualBox'", +"class_g ?= 'Notify-osd'", +"name = 'cpt_frame_window'", # For zoom problem when sharing screen +"class_g = 'stalonetray'" +]; #+END_SRC * Opacity #+BEGIN_SRC conf - inactive-opacity = 1.0; - frame-opacity = 1.0; - inactive-opacity-override = false; +inactive-opacity = 1.0; +frame-opacity = 1.0; +inactive-opacity-override = false; #+END_SRC * Fading #+BEGIN_SRC conf - fading = false; - fade-in-step = 0.03; - fade-out-step = 0.03; +fading = false; +fade-in-step = 0.03; +fade-out-step = 0.03; #+END_SRC * Other #+BEGIN_SRC conf - backend = "xrender"; - mark-wmwin-focused = true; - mark-ovredir-focused = true; - detect-rounded-corners = true; - detect-client-opacity = true; - refresh-rate = 0; +backend = "xrender"; +mark-wmwin-focused = true; +mark-ovredir-focused = true; +detect-rounded-corners = true; +detect-client-opacity = true; +refresh-rate = 0; #+END_SRC * Window Type Setting #+begin_src conf - wintypes: - { - tooltip = { fade = true; shadow = true; focus = true; full-shadow = false; }; - dock = { shadow = false; } - dnd = { shadow = false; } - }; +wintypes: +{ +tooltip = { fade = true; shadow = true; focus = true; full-shadow = false; }; +dock = { shadow = false; } +dnd = { shadow = false; } +}; #+end_src diff --git a/config.org b/config.org index 83df94e..ad94808 100644 --- a/config.org +++ b/config.org @@ -8,37 +8,37 @@ :END: #+begin_src conf - AddKeysToAgent yes +AddKeysToAgent yes - Host grenoble - hostname ***REMOVED*** - Port 10022 - user tdehaeze - IdentityFile ~/.ssh/id_rsa +Host grenoble + hostname ***REMOVED*** + Port 10022 + user tdehaeze + IdentityFile ~/.ssh/id_rsa - Host wingaudio - hostname 207.154.251.241 - Port 22 - user tdehaeze - IdentityFile ~/.ssh/id_rsa +Host wingaudio + hostname 207.154.251.241 + Port 22 + user tdehaeze + IdentityFile ~/.ssh/id_rsa - Host octoprint - hostname 192.168.1.56 - Port 22 - user pi - IdentityFile ~/.ssh/id_rsa +Host octoprint + hostname 192.168.1.56 + Port 22 + user pi + IdentityFile ~/.ssh/id_rsa - Host hassio - hostname 192.168.1.101 - Port 10022 - user root - IdentityFile ~/.ssh/id_rsa +Host hassio + hostname 192.168.1.101 + Port 10022 + user root + IdentityFile ~/.ssh/id_rsa - Host nas - hostname 192.168.1.50 - Port 10022 - user tdehaeze - IdentityFile ~/.ssh/id_rsa +Host nas + hostname 192.168.1.50 + Port 10022 + user tdehaeze + IdentityFile ~/.ssh/id_rsa #+end_src * Font @@ -48,28 +48,28 @@ :END: #+begin_src conf - - - + + + + + serif + Linux Libertine + - serif - Linux Libertine - - - sans-serif - Linux Biolinum - - - sans - Linux Biolinum - - - monospace - Hack Nerd Font Mono - + sans-serif + Linux Biolinum + + + sans + Linux Biolinum + + + monospace + Hack Nerd Font Mono + - + #+end_src * GnuPG @@ -79,8 +79,8 @@ :END: #+BEGIN_SRC conf - default-cache-ttl 60480000 - max-cache-ttl 60480000 +default-cache-ttl 60480000 +max-cache-ttl 60480000 #+END_SRC * Redshift @@ -90,22 +90,22 @@ :END: #+begin_src conf - [redshift] - temp-day=5700 - temp-night=3500 +[redshift] +temp-day=5700 +temp-night=3500 - transition=1 +transition=1 - ;brightness-day=0.7 - ;brightness-night=0.4 +;brightness-day=0.7 +;brightness-night=0.4 - location-provider=manual +location-provider=manual - adjustment-method=randr +adjustment-method=randr - [manual] - lat=45.1 - lon=5.7 +[manual] +lat=45.1 +lon=5.7 #+end_src * dmenu @@ -115,26 +115,26 @@ :END: #+BEGIN_SRC conf - # define the font for dmenu to be used - DMENU_FN="Hack Nerd Font 12" +# define the font for dmenu to be used +DMENU_FN="Hack Nerd Font 12" - # background colour for unselected menu-items - DMENU_NB="#222D31" +# background colour for unselected menu-items +DMENU_NB="#222D31" - # textcolour for unselected menu-items - DMENU_NF="#F9FAF9" +# textcolour for unselected menu-items +DMENU_NF="#F9FAF9" - # background colour for selected menu-items - DMENU_SB="#16A085" +# background colour for selected menu-items +DMENU_SB="#16A085" - # textcolour for selected menu-items - DMENU_SF="#F9FAF9" +# textcolour for selected menu-items +DMENU_SF="#F9FAF9" - # command for the terminal application to be used: - TERMINAL_CMD="terminal -e" +# command for the terminal application to be used: +TERMINAL_CMD="terminal -e" - # export our variables - DMENU_OPTIONS="-fn $DMENU_FN -nb $DMENU_NB -nf $DMENU_NF -sf $DMENU_SF -sb $DMENU_SB" +# export our variables +DMENU_OPTIONS="-fn $DMENU_FN -nb $DMENU_NB -nf $DMENU_NF -sf $DMENU_SF -sb $DMENU_SB" #+END_SRC * Locale @@ -144,20 +144,20 @@ :END: #+BEGIN_SRC conf - LANG=en_US.UTF-8 - LC_CTYPE="en_US.UTF-8" - LC_NUMERIC=fr_FR.UTF-8 - LC_TIME=fr_FR.UTF-8 - LC_COLLATE="en_US.UTF-8" - LC_MONETARY=fr_FR.UTF-8 - LC_MESSAGES="en_US.UTF-8" - LC_PAPER=fr_FR.UTF-8 - LC_NAME=fr_FR.UTF-8 - LC_ADDRESS=fr_FR.UTF-8 - LC_TELEPHONE=fr_FR.UTF-8 - LC_MEASUREMENT=fr_FR.UTF-8 - LC_IDENTIFICATION=fr_FR.UTF-8 - LC_ALL= +LANG=en_US.UTF-8 +LC_CTYPE="en_US.UTF-8" +LC_NUMERIC=fr_FR.UTF-8 +LC_TIME=fr_FR.UTF-8 +LC_COLLATE="en_US.UTF-8" +LC_MONETARY=fr_FR.UTF-8 +LC_MESSAGES="en_US.UTF-8" +LC_PAPER=fr_FR.UTF-8 +LC_NAME=fr_FR.UTF-8 +LC_ADDRESS=fr_FR.UTF-8 +LC_TELEPHONE=fr_FR.UTF-8 +LC_MEASUREMENT=fr_FR.UTF-8 +LC_IDENTIFICATION=fr_FR.UTF-8 +LC_ALL= #+END_SRC * Netrc @@ -198,27 +198,27 @@ password <> :END: #+BEGIN_SRC conf - _rofi () { - rofi -dmenu -i -no-levenshtein-sort -width 1000 "$@" - } +_rofi () { + rofi -dmenu -i -no-levenshtein-sort -width 1000 "$@" +} #+END_SRC Display settings #+BEGIN_SRC conf - display_type=1 - max_str_width=80 +display_type=1 +max_str_width=80 #+END_SRC Keybindings #+BEGIN_SRC conf - switch_view="Alt+Tab" - new_bookmark="Alt+n" - actions="Alt+a" - edit="Alt+e" - delete="Alt+d" +switch_view="Alt+Tab" +new_bookmark="Alt+n" +actions="Alt+a" +edit="Alt+e" +delete="Alt+d" #+END_SRC Colors #+BEGIN_SRC conf - help_color="#2d7ed8" +help_color="#2d7ed8" #+END_SRC diff --git a/contacts.org b/contacts.org index 6ea3398..9166ffa 100644 --- a/contacts.org +++ b/contacts.org @@ -8,49 +8,49 @@ :END: #+BEGIN_SRC conf - [addressbooks] - [[google]] - path = ~/.contacts/default/ +[addressbooks] +[[google]] +path = ~/.contacts/default/ - [general] - debug = no - default_action = list - editor = vim - merge_editor = vimdiff +[general] +debug = no +default_action = list +editor = vim +merge_editor = vimdiff - [contact table] - # display names by first or last name: first_name / last_name - display = first_name - # group by address book: yes / no - group_by_addressbook = no - # reverse table ordering: yes / no - reverse = no - # append nicknames to name column: yes / no - show_nicknames = no - # show uid table column: yes / no - show_uids = yes - # sort by first or last name: first_name / last_name - sort = last_name - # localize dates: yes / no - localize_dates = yes - # set a comma separated list of preferred phone number types in descending priority - # or nothing for non-filtered alphabetical order - preferred_phone_number_type = pref, cell, home - # set a comma separated list of preferred email address types in descending priority - # or nothing for non-filtered alphabetical order - preferred_email_address_type = pref, work, home +[contact table] +# display names by first or last name: first_name / last_name +display = first_name +# group by address book: yes / no +group_by_addressbook = no +# reverse table ordering: yes / no +reverse = no +# append nicknames to name column: yes / no +show_nicknames = no +# show uid table column: yes / no +show_uids = yes +# sort by first or last name: first_name / last_name +sort = last_name +# localize dates: yes / no +localize_dates = yes +# set a comma separated list of preferred phone number types in descending priority +# or nothing for non-filtered alphabetical order +preferred_phone_number_type = pref, cell, home +# set a comma separated list of preferred email address types in descending priority +# or nothing for non-filtered alphabetical order +preferred_email_address_type = pref, work, home - [vcard] - # extend contacts with your own private objects - # these objects are stored with a leading "X-" before the object name in the vcard files - # every object label may only contain letters, digits and the - character - # example: - # private_objects = Jabber, Skype, Twitter - private_objects = Jabber, Skype, Twitter - # preferred vcard version: 3.0 / 4.0 - preferred_version = 3.0 - # Look into source vcf files to speed up search queries: yes / no - search_in_source_files = no - # skip unparsable vcard files: yes / no - skip_unparsable = no +[vcard] +# extend contacts with your own private objects +# these objects are stored with a leading "X-" before the object name in the vcard files +# every object label may only contain letters, digits and the - character +# example: +# private_objects = Jabber, Skype, Twitter +private_objects = Jabber, Skype, Twitter +# preferred vcard version: 3.0 / 4.0 +preferred_version = 3.0 +# Look into source vcf files to speed up search queries: yes / no +search_in_source_files = no +# skip unparsable vcard files: yes / no +skip_unparsable = no #+END_SRC diff --git a/data.org b/data.org index 5dc6953..7640076 100644 --- a/data.org +++ b/data.org @@ -8,3697 +8,3697 @@ :END: #+begin_src conf :tangle ~/.local/datd/nerd-fonts -  - i_dev_bing_small -  - i_dev_css_tricks -  - i_dev_git -  - i_dev_bitbucket -  - i_dev_mysql -  - i_dev_streamline -  - i_dev_database -  - i_dev_dropbox -  - i_dev_github_alt -  - i_dev_github_badge -  - i_dev_github -  - i_dev_wordpress -  - i_dev_visualstudio -  - i_dev_jekyll_small -  - i_dev_android -  - i_dev_windows -  - i_dev_stackoverflow -  - i_dev_apple -  - i_dev_linux -  - i_dev_appstore -  - i_dev_ghost_small -  - i_dev_yahoo -  - i_dev_codepen -  - i_dev_github_full -  - i_dev_nodejs_small -  - i_dev_nodejs -  - i_dev_hackernews -  - i_dev_ember -  - i_dev_dojo -  - i_dev_django -  - i_dev_npm -  - i_dev_ghost -  - i_dev_modernizr -  - i_dev_unity_small -  - i_dev_rasberry_pi -  - i_dev_blackberry -  - i_dev_go -  - i_dev_git_branch -  - i_dev_git_pull_request -  - i_dev_git_merge -  - i_dev_git_compare -  - i_dev_git_commit -  - i_dev_cssdeck -  - i_dev_yahoo_small -  - i_dev_techcrunch -  - i_dev_smashing_magazine -  - i_dev_netmagazine -  - i_dev_codrops -  - i_dev_phonegap -  - i_dev_google_drive -  - i_dev_html5_multimedia -  - i_dev_html5_device_access -  - i_dev_html5_connectivity -  - i_dev_html5_3d_effects -  - i_dev_html5 -  - i_dev_scala -  - i_dev_java -  - i_dev_ruby -  - i_dev_ubuntu -  - i_dev_ruby_on_rails -  - i_dev_python -  - i_dev_php -  - i_dev_markdown -  - i_dev_laravel -  - i_dev_magento -  - i_dev_joomla -  - i_dev_drupal -  - i_dev_chrome -  - i_dev_ie -  - i_dev_firefox -  - i_dev_opera -  - i_dev_bootstrap -  - i_dev_safari -  - i_dev_css3 -  - i_dev_css3_full -  - i_dev_sass -  - i_dev_grunt -  - i_dev_bower -  - i_dev_javascript -  - i_dev_javascript_shield -  - i_dev_jquery -  - i_dev_coffeescript -  - i_dev_backbone -  - i_dev_angular -  - i_dev_jquery_ui -  - i_dev_swift -  - i_dev_symfony -  - i_dev_symfony_badge -  - i_dev_less -  - i_dev_stylus -  - i_dev_trello -  - i_dev_atlassian -  - i_dev_jira -  - i_dev_envato -  - i_dev_snap_svg -  - i_dev_raphael -  - i_dev_chart -  - i_dev_compass -  - i_dev_onedrive -  - i_dev_gulp -  - i_dev_atom -  - i_dev_cisco -  - i_dev_nancy -  - i_dev_jenkins -  - i_dev_clojure -  - i_dev_perl -  - i_dev_clojure_alt -  - i_dev_celluloid -  - i_dev_w3c -  - i_dev_redis -  - i_dev_postgresql -  - i_dev_webplatform -  - i_dev_requirejs -  - i_dev_opensource -  - i_dev_typo3 -  - i_dev_uikit -  - i_dev_doctrine -  - i_dev_groovy -  - i_dev_nginx -  - i_dev_haskell -  - i_dev_zend -  - i_dev_gnu -  - i_dev_yeoman -  - i_dev_heroku -  - i_dev_msql_server -  - i_dev_debian -  - i_dev_travis -  - i_dev_dotnet -  - i_dev_codeigniter -  - i_dev_javascript_badge -  - i_dev_yii -  - i_dev_composer -  - i_dev_krakenjs_badge -  - i_dev_krakenjs -  - i_dev_mozilla -  - i_dev_firebase -  - i_dev_sizzlejs -  - i_dev_creativecommons -  - i_dev_creativecommons_badge -  - i_dev_mitlicence -  - i_dev_senchatouch -  - i_dev_bugsense -  - i_dev_extjs -  - i_dev_mootools_badge -  - i_dev_mootools -  - i_dev_ruby_rough -  - i_dev_komodo -  - i_dev_coda -  - i_dev_bintray -  - i_dev_terminal -  - i_dev_code -  - i_dev_responsive -  - i_dev_dart -  - i_dev_aptana -  - i_dev_mailchimp -  - i_dev_netbeans -  - i_dev_dreamweaver -  - i_dev_brackets -  - i_dev_eclipse -  - i_dev_cloud9 -  - i_dev_scrum -  - i_dev_prolog -  - i_dev_terminal_badge -  - i_dev_code_badge -  - i_dev_mongodb -  - i_dev_meteor -  - i_dev_meteorfull -  - i_dev_fsharp -  - i_dev_rust -  - i_dev_ionic -  - i_dev_sublime -  - i_dev_appcelerator -  - i_dev_asterisk -  - i_dev_aws -  - i_dev_digital_ocean -  - i_dev_dlang -  - i_dev_docker -  - i_dev_erlang -  - i_dev_google_cloud_platform -  - i_dev_grails -  - i_dev_illustrator -  - i_dev_intellij -  - i_dev_materializecss -  - i_dev_openshift -  - i_dev_photoshop -  - i_dev_rackspace -  - i_dev_react -  - i_dev_redhat -  - i_dev_scriptcs -  - i_dev_sqllite -  - i_dev_vim -  - i_fae_smaller -  - i_fae_snowing -  - i_fae_soda -  - i_fae_sofa -  - i_fae_soup -  - i_fae_spermatozoon -  - i_fae_spin_double -  - i_fae_stomach -  - i_fae_storm -  - i_fae_telescope -  - i_fae_thermometer -  - i_fae_thermometer_high -  - i_fae_thermometer_low -  - i_fae_thin_close -  - i_fae_toilet -  - i_fae_tools -  - i_fae_tooth -  - i_fae_uterus -  - i_fae_w3c -  - i_fae_walking -  - i_fae_virus -  - i_fae_telegram_circle -  - i_fae_slash -  - i_fae_telegram -  - i_fae_shirt -  - i_fae_tacos -  - i_fae_sushi -  - i_fae_triangle_ruler -  - i_fae_tree -  - i_fae_sun_cloud -  - i_fae_ruby_o -  - i_fae_ruler -  - i_fae_umbrella -  - i_fae_medicine -  - i_fae_microscope -  - i_fae_milk_bottle -  - i_fae_minimize -  - i_fae_molecule -  - i_fae_moon_cloud -  - i_fae_mushroom -  - i_fae_mustache -  - i_fae_mysql -  - i_fae_nintendo -  - i_fae_palette_color -  - i_fae_pi -  - i_fae_pizza -  - i_fae_planet -  - i_fae_plant -  - i_fae_playstation -  - i_fae_poison -  - i_fae_popcorn -  - i_fae_popsicle -  - i_fae_pulse -  - i_fae_python -  - i_fae_quora_circle -  - i_fae_quora_square -  - i_fae_radioactive -  - i_fae_raining -  - i_fae_real_heart -  - i_fae_refrigerator -  - i_fae_restore -  - i_fae_ring -  - i_fae_ruby -  - i_fae_fingerprint -  - i_fae_floppy -  - i_fae_footprint -  - i_fae_freecodecamp -  - i_fae_galaxy -  - i_fae_galery -  - i_fae_glass -  - i_fae_google_drive -  - i_fae_google_play -  - i_fae_gps -  - i_fae_grav -  - i_fae_guitar -  - i_fae_gut -  - i_fae_halter -  - i_fae_hamburger -  - i_fae_hat -  - i_fae_hexagon -  - i_fae_high_heel -  - i_fae_hotdog -  - i_fae_ice_cream -  - i_fae_id_card -  - i_fae_imdb -  - i_fae_infinity -  - i_fae_java -  - i_fae_layers -  - i_fae_lips -  - i_fae_lipstick -  - i_fae_liver -  - i_fae_lung -  - i_fae_makeup_brushes -  - i_fae_maximize -  - i_fae_wallet -  - i_fae_chess_horse -  - i_fae_chess_king -  - i_fae_chess_pawn -  - i_fae_chess_queen -  - i_fae_chess_tower -  - i_fae_cheese -  - i_fae_chilli -  - i_fae_chip -  - i_fae_cicling -  - i_fae_cloud -  - i_fae_cockroach -  - i_fae_coffe_beans -  - i_fae_coins -  - i_fae_comb -  - i_fae_comet -  - i_fae_crown -  - i_fae_cup_coffe -  - i_fae_dice -  - i_fae_disco -  - i_fae_dna -  - i_fae_donut -  - i_fae_dress -  - i_fae_drop -  - i_fae_ello -  - i_fae_envelope_open -  - i_fae_envelope_open_o -  - i_fae_equal -  - i_fae_equal_bigger -  - i_fae_feedly -  - i_fae_file_export -  - i_fae_file_import -  - i_fae_wind -  - i_fae_atom -  - i_fae_bacteria -  - i_fae_banana -  - i_fae_bath -  - i_fae_bed -  - i_fae_benzene -  - i_fae_bigger -  - i_fae_biohazard -  - i_fae_blogger_circle -  - i_fae_blogger_square -  - i_fae_bones -  - i_fae_book_open -  - i_fae_book_open_o -  - i_fae_brain -  - i_fae_bread -  - i_fae_butterfly -  - i_fae_carot -  - i_fae_cc_by -  - i_fae_cc_cc -  - i_fae_cc_nc -  - i_fae_cc_nc_eu -  - i_fae_cc_nc_jp -  - i_fae_cc_nd -  - i_fae_cc_remix -  - i_fae_cc_sa -  - i_fae_cc_share -  - i_fae_cc_zero -  - i_fae_checklist_o -  - i_fae_cherry -  - i_fae_chess_bishop -  - i_fae_xbox -  - i_fae_apple_fruit -  - i_fae_chicken_thigh -  - i_fae_gift_card -  - i_fae_injection -  - i_fae_isle -  - i_fae_lollipop -  - i_fae_loyalty_card -  - i_fae_meat -  - i_fae_mountains -  - i_fae_orange -  - i_fae_peach -  - i_fae_pear -  - i_fa_glass -  - i_fa_music -  - i_fa_search -  - i_fa_envelope_o -  - i_fa_heart -  - i_fa_star -  - i_fa_star_o -  - i_fa_user -  - i_fa_film -  - i_fa_th_large -  - i_fa_th -  - i_fa_th_list -  - i_fa_check -  - i_fa_times i_fa_close_fa_times i_fa_remove_fa_times -  - i_fa_search_plus -  - i_fa_search_minus -  - i_fa_power_off -  - i_fa_signal -  - i_fa_cog i_fa_gear_fa_cog -  - i_fa_trash_o -  - i_fa_home -  - i_fa_file_o -  - i_fa_clock_o -  - i_fa_road -  - i_fa_download -  - i_fa_arrow_circle_o_down -  - i_fa_arrow_circle_o_up -  - i_fa_inbox -  - i_fa_play_circle_o -  - i_fa_repeat i_fa_rotate_right_fa_repeat -  - i_fa_refresh -  - i_fa_list_alt -  - i_fa_lock -  - i_fa_flag -  - i_fa_headphones -  - i_fa_volume_off -  - i_fa_volume_down -  - i_fa_volume_up -  - i_fa_qrcode -  - i_fa_barcode -  - i_fa_tag -  - i_fa_tags -  - i_fa_book -  - i_fa_bookmark -  - i_fa_print -  - i_fa_camera -  - i_fa_font -  - i_fa_bold -  - i_fa_italic -  - i_fa_text_height -  - i_fa_text_width -  - i_fa_align_left -  - i_fa_align_center -  - i_fa_align_right -  - i_fa_align_justify -  - i_fa_list -  - i_fa_outdent i_fa_dedent_fa_outdent -  - i_fa_indent -  - i_fa_video_camera -  - i_fa_picture_o i_fa_image_fa_picture_o i_fa_photo_fa_picture_o -  - i_fa_pencil -  - i_fa_map_marker -  - i_fa_adjust -  - i_fa_tint -  - i_fa_pencil_square_o i_fa_edit_fa_pencil_square_o -  - i_fa_share_square_o -  - i_fa_check_square_o -  - i_fa_arrows -  - i_fa_step_backward -  - i_fa_fast_backward -  - i_fa_backward -  - i_fa_play -  - i_fa_pause -  - i_fa_stop -  - i_fa_forward -  - i_fa_fast_forward -  - i_fa_step_forward -  - i_fa_eject -  - i_fa_chevron_left -  - i_fa_chevron_right -  - i_fa_plus_circle -  - i_fa_minus_circle -  - i_fa_times_circle -  - i_fa_check_circle -  - i_fa_question_circle -  - i_fa_info_circle -  - i_fa_crosshairs -  - i_fa_times_circle_o -  - i_fa_check_circle_o -  - i_fa_ban -  - i_fa_arrow_left -  - i_fa_arrow_right -  - i_fa_arrow_up -  - i_fa_arrow_down -  - i_fa_share i_fa_mail_forward_fa_share -  - i_fa_expand -  - i_fa_compress -  - i_fa_plus -  - i_fa_minus -  - i_fa_asterisk -  - i_fa_exclamation_circle -  - i_fa_gift -  - i_fa_leaf -  - i_fa_fire -  - i_fa_eye -  - i_fa_eye_slash -  - i_fa_exclamation_triangle i_fa_warning_fa_exclamation_triangle -  - i_fa_plane -  - i_fa_calendar -  - i_fa_random -  - i_fa_comment -  - i_fa_magnet -  - i_fa_chevron_up -  - i_fa_chevron_down -  - i_fa_retweet -  - i_fa_shopping_cart -  - i_fa_folder -  - i_fa_folder_open -  - i_fa_arrows_v -  - i_fa_arrows_h -  - i_fa_bar_chart i_fa_bar_chart_o_fa_bar_chart -  - i_fa_twitter_square -  - i_fa_facebook_square -  - i_fa_camera_retro -  - i_fa_key -  - i_fa_cogs i_fa_gears_fa_cogs -  - i_fa_comments -  - i_fa_thumbs_o_up -  - i_fa_thumbs_o_down -  - i_fa_star_half -  - i_fa_heart_o -  - i_fa_sign_out -  - i_fa_linkedin_square -  - i_fa_thumb_tack -  - i_fa_external_link -  - i_fa_sign_in -  - i_fa_trophy -  - i_fa_github_square -  - i_fa_upload -  - i_fa_lemon_o -  - i_fa_phone -  - i_fa_square_o -  - i_fa_bookmark_o -  - i_fa_phone_square -  - i_fa_twitter -  - i_fa_facebook i_fa_facebook_f_fa_facebook -  - i_fa_github -  - i_fa_unlock -  - i_fa_credit_card -  - i_fa_rss i_fa_feed_fa_rss -  - i_fa_hdd_o -  - i_fa_bullhorn -  - i_fa_bell_o -  - i_fa_certificate -  - i_fa_hand_o_right -  - i_fa_hand_o_left -  - i_fa_hand_o_up -  - i_fa_hand_o_down -  - i_fa_arrow_circle_left -  - i_fa_arrow_circle_right -  - i_fa_arrow_circle_up -  - i_fa_arrow_circle_down -  - i_fa_globe -  - i_fa_wrench -  - i_fa_tasks -  - i_fa_filter -  - i_fa_briefcase -  - i_fa_arrows_alt -  - i_fa_users i_fa_group_fa_users -  - i_fa_link i_fa_chain_fa_link -  - i_fa_cloud -  - i_fa_flask -  - i_fa_scissors i_fa_cut_fa_scissors -  - i_fa_files_o i_fa_copy_fa_files_o -  - i_fa_paperclip -  - i_fa_floppy_o i_fa_save_fa_floppy_o -  - i_fa_square -  - i_fa_bars i_fa_navicon_fa_bars i_fa_reorder_fa_bars -  - i_fa_list_ul -  - i_fa_list_ol -  - i_fa_strikethrough -  - i_fa_underline -  - i_fa_table -  - i_fa_magic -  - i_fa_truck -  - i_fa_pinterest -  - i_fa_pinterest_square -  - i_fa_google_plus_square -  - i_fa_google_plus -  - i_fa_money -  - i_fa_caret_down -  - i_fa_caret_up -  - i_fa_caret_left -  - i_fa_caret_right -  - i_fa_columns -  - i_fa_sort i_fa_unsorted_fa_sort -  - i_fa_sort_desc i_fa_sort_down_fa_sort_desc -  - i_fa_sort_asc i_fa_sort_up_fa_sort_asc -  - i_fa_envelope -  - i_fa_linkedin -  - i_fa_undo i_fa_rotate_left_fa_undo -  - i_fa_gavel i_fa_legal_fa_gavel -  - i_fa_tachometer i_fa_dashboard_fa_tachometer -  - i_fa_comment_o -  - i_fa_comments_o -  - i_fa_bolt i_fa_flash_fa_bolt -  - i_fa_sitemap -  - i_fa_umbrella -  - i_fa_clipboard i_fa_paste_fa_clipboard -  - i_fa_lightbulb_o -  - i_fa_exchange -  - i_fa_cloud_download -  - i_fa_cloud_upload -  - i_fa_user_md -  - i_fa_stethoscope -  - i_fa_suitcase -  - i_fa_bell -  - i_fa_coffee -  - i_fa_cutlery -  - i_fa_file_text_o -  - i_fa_building_o -  - i_fa_hospital_o -  - i_fa_ambulance -  - i_fa_medkit -  - i_fa_fighter_jet -  - i_fa_beer -  - i_fa_h_square -  - i_fa_plus_square -  - i_fa_angle_double_left -  - i_fa_angle_double_right -  - i_fa_angle_double_up -  - i_fa_angle_double_down -  - i_fa_angle_left -  - i_fa_angle_right -  - i_fa_angle_up -  - i_fa_angle_down -  - i_fa_desktop -  - i_fa_laptop -  - i_fa_tablet -  - i_fa_mobile i_fa_mobile_phone_fa_mobile -  - i_fa_circle_o -  - i_fa_quote_left -  - i_fa_quote_right -  - i_fa_spinner -  - i_fa_circle -  - i_fa_reply i_fa_mail_reply_fa_reply -  - i_fa_github_alt -  - i_fa_folder_o -  - i_fa_folder_open_o -  - i_fa_smile_o -  - i_fa_frown_o -  - i_fa_meh_o -  - i_fa_gamepad -  - i_fa_keyboard_o -  - i_fa_flag_o -  - i_fa_flag_checkered -  - i_fa_terminal -  - i_fa_code -  - i_fa_reply_all i_fa_mail_reply_all_fa_reply_all -  - i_fa_star_half_o i_fa_star_half_empty_fa_star_half_o i_fa_star_half_full_fa_star_half_o -  - i_fa_location_arrow -  - i_fa_crop -  - i_fa_code_fork -  - i_fa_chain_broken i_fa_unlink_fa_chain_broken -  - i_fa_question -  - i_fa_info -  - i_fa_exclamation -  - i_fa_superscript -  - i_fa_subscript -  - i_fa_eraser -  - i_fa_puzzle_piece -  - i_fa_microphone -  - i_fa_microphone_slash -  - i_fa_shield -  - i_fa_calendar_o -  - i_fa_fire_extinguisher -  - i_fa_rocket -  - i_fa_maxcdn -  - i_fa_chevron_circle_left -  - i_fa_chevron_circle_right -  - i_fa_chevron_circle_up -  - i_fa_chevron_circle_down -  - i_fa_html5 -  - i_fa_css3 -  - i_fa_anchor -  - i_fa_unlock_alt -  - i_fa_bullseye -  - i_fa_ellipsis_h -  - i_fa_ellipsis_v -  - i_fa_rss_square -  - i_fa_play_circle -  - i_fa_ticket -  - i_fa_minus_square -  - i_fa_minus_square_o -  - i_fa_level_up -  - i_fa_level_down -  - i_fa_check_square -  - i_fa_pencil_square -  - i_fa_external_link_square -  - i_fa_share_square -  - i_fa_compass -  - i_fa_caret_square_o_down i_fa_toggle_down_fa_caret_square_o_down -  - i_fa_caret_square_o_up i_fa_toggle_up_fa_caret_square_o_up -  - i_fa_caret_square_o_right i_fa_toggle_right_fa_caret_square_o_right -  - i_fa_eur i_fa_euro_fa_eur -  - i_fa_gbp -  - i_fa_usd i_fa_dollar_fa_usd -  - i_fa_inr i_fa_rupee_fa_inr -  - i_fa_jpy i_fa_cny_fa_jpy i_fa_rmb_fa_jpy i_fa_yen_fa_jpy -  - i_fa_rub i_fa_rouble_fa_rub i_fa_ruble_fa_rub -  - i_fa_krw i_fa_won_fa_krw -  - i_fa_btc i_fa_bitcoin_fa_btc -  - i_fa_file -  - i_fa_file_text -  - i_fa_sort_alpha_asc -  - i_fa_sort_alpha_desc -  - i_fa_sort_amount_asc -  - i_fa_sort_amount_desc -  - i_fa_sort_numeric_asc -  - i_fa_sort_numeric_desc -  - i_fa_thumbs_up -  - i_fa_thumbs_down -  - i_fa_youtube_square -  - i_fa_youtube -  - i_fa_xing -  - i_fa_xing_square -  - i_fa_youtube_play -  - i_fa_dropbox -  - i_fa_stack_overflow -  - i_fa_instagram -  - i_fa_flickr -  - i_fa_adn -  - i_fa_bitbucket -  - i_fa_bitbucket_square -  - i_fa_tumblr -  - i_fa_tumblr_square -  - i_fa_long_arrow_down -  - i_fa_long_arrow_up -  - i_fa_long_arrow_left -  - i_fa_long_arrow_right -  - i_fa_apple -  - i_fa_windows -  - i_fa_android -  - i_fa_linux -  - i_fa_dribbble -  - i_fa_skype -  - i_fa_foursquare -  - i_fa_trello -  - i_fa_female -  - i_fa_male -  - i_fa_gratipay i_fa_gittip_fa_gratipay -  - i_fa_sun_o -  - i_fa_moon_o -  - i_fa_archive -  - i_fa_bug -  - i_fa_vk -  - i_fa_weibo -  - i_fa_renren -  - i_fa_pagelines -  - i_fa_stack_exchange -  - i_fa_arrow_circle_o_right -  - i_fa_arrow_circle_o_left -  - i_fa_caret_square_o_left i_fa_toggle_left_fa_caret_square_o_left -  - i_fa_dot_circle_o -  - i_fa_wheelchair -  - i_fa_vimeo_square -  - i_fa_try i_fa_turkish_lira_fa_try -  - i_fa_plus_square_o -  - i_fa_space_shuttle -  - i_fa_slack -  - i_fa_envelope_square -  - i_fa_wordpress -  - i_fa_openid -  - i_fa_university i_fa_bank_fa_university i_fa_institution_fa_university -  - i_fa_graduation_cap i_fa_mortar_board_fa_graduation_cap -  - i_fa_yahoo -  - i_fa_google -  - i_fa_reddit -  - i_fa_reddit_square -  - i_fa_stumbleupon_circle -  - i_fa_stumbleupon -  - i_fa_delicious -  - i_fa_digg -  - i_fa_pied_piper_pp -  - i_fa_pied_piper_alt -  - i_fa_drupal -  - i_fa_joomla -  - i_fa_language -  - i_fa_fax -  - i_fa_building -  - i_fa_child -  - i_fa_paw -  - i_fa_spoon -  - i_fa_cube -  - i_fa_cubes -  - i_fa_behance -  - i_fa_behance_square -  - i_fa_steam -  - i_fa_steam_square -  - i_fa_recycle -  - i_fa_car i_fa_automobile_fa_car -  - i_fa_taxi i_fa_cab_fa_taxi -  - i_fa_tree -  - i_fa_spotify -  - i_fa_deviantart -  - i_fa_soundcloud -  - i_fa_database -  - i_fa_file_pdf_o -  - i_fa_file_word_o -  - i_fa_file_excel_o -  - i_fa_file_powerpoint_o -  - i_fa_file_image_o i_fa_file_photo_o_fa_file_image_o i_fa_file_picture_o_fa_file_image_o -  - i_fa_file_archive_o i_fa_file_zip_o_fa_file_archive_o -  - i_fa_file_audio_o i_fa_file_sound_o_fa_file_audio_o -  - i_fa_file_video_o i_fa_file_movie_o_fa_file_video_o -  - i_fa_file_code_o -  - i_fa_vine -  - i_fa_codepen -  - i_fa_jsfiddle -  - i_fa_life_ring i_fa_life_bouy_fa_life_ring i_fa_life_buoy_fa_life_ring i_fa_life_saver_fa_life_ring i_fa_support_fa_life_ring -  - i_fa_circle_o_notch -  - i_fa_rebel i_fa_ra_fa_rebel i_fa_resistance_fa_rebel -  - i_fa_empire i_fa_ge_fa_empire -  - i_fa_git_square -  - i_fa_git -  - i_fa_hacker_news i_fa_y_combinator_square_fa_hacker_news i_fa_yc_square_fa_hacker_news -  - i_fa_tencent_weibo -  - i_fa_qq -  - i_fa_weixin i_fa_wechat_fa_weixin -  - i_fa_paper_plane i_fa_send_fa_paper_plane -  - i_fa_paper_plane_o i_fa_send_o_fa_paper_plane_o -  - i_fa_history -  - i_fa_circle_thin -  - i_fa_header -  - i_fa_paragraph -  - i_fa_sliders -  - i_fa_share_alt -  - i_fa_share_alt_square -  - i_fa_bomb -  - i_fa_futbol_o i_fa_soccer_ball_o_fa_futbol_o -  - i_fa_tty -  - i_fa_binoculars -  - i_fa_plug -  - i_fa_slideshare -  - i_fa_twitch -  - i_fa_yelp -  - i_fa_newspaper_o -  - i_fa_wifi -  - i_fa_calculator -  - i_fa_paypal -  - i_fa_google_wallet -  - i_fa_cc_visa -  - i_fa_cc_mastercard -  - i_fa_cc_discover -  - i_fa_cc_amex -  - i_fa_cc_paypal -  - i_fa_cc_stripe -  - i_fa_bell_slash -  - i_fa_bell_slash_o -  - i_fa_trash -  - i_fa_copyright -  - i_fa_at -  - i_fa_eyedropper -  - i_fa_paint_brush -  - i_fa_birthday_cake -  - i_fa_area_chart -  - i_fa_pie_chart -  - i_fa_line_chart -  - i_fa_lastfm -  - i_fa_lastfm_square -  - i_fa_toggle_off -  - i_fa_toggle_on -  - i_fa_bicycle -  - i_fa_bus -  - i_fa_ioxhost -  - i_fa_angellist -  - i_fa_cc -  - i_fa_ils i_fa_shekel_fa_ils i_fa_sheqel_fa_ils -  - i_fa_meanpath -  - i_fa_buysellads -  - i_fa_connectdevelop -  - i_fa_dashcube -  - i_fa_forumbee -  - i_fa_leanpub -  - i_fa_sellsy -  - i_fa_shirtsinbulk -  - i_fa_simplybuilt -  - i_fa_skyatlas -  - i_fa_cart_plus -  - i_fa_cart_arrow_down -  - i_fa_diamond -  - i_fa_ship -  - i_fa_user_secret -  - i_fa_motorcycle -  - i_fa_street_view -  - i_fa_heartbeat -  - i_fa_venus -  - i_fa_mars -  - i_fa_mercury -  - i_fa_transgender i_fa_intersex_fa_transgender -  - i_fa_transgender_alt -  - i_fa_venus_double -  - i_fa_mars_double -  - i_fa_venus_mars -  - i_fa_mars_stroke -  - i_fa_mars_stroke_v -  - i_fa_mars_stroke_h -  - i_fa_neuter -  - i_fa_genderless -  - i_fa_facebook_official -  - i_fa_pinterest_p -  - i_fa_whatsapp -  - i_fa_server -  - i_fa_user_plus -  - i_fa_user_times -  - i_fa_bed i_fa_hotel_fa_bed -  - i_fa_viacoin -  - i_fa_train -  - i_fa_subway -  - i_fa_medium -  - i_fa_y_combinator i_fa_yc_fa_y_combinator -  - i_fa_optin_monster -  - i_fa_opencart -  - i_fa_expeditedssl -  - i_fa_battery_full i_fa_battery_fa_battery_full i_fa_battery_4_fa_battery_full -  - i_fa_battery_three_quarters i_fa_battery_3_fa_battery_three_quarters -  - i_fa_battery_half i_fa_battery_2_fa_battery_half -  - i_fa_battery_quarter i_fa_battery_1_fa_battery_quarter -  - i_fa_battery_empty i_fa_battery_0_fa_battery_empty -  - i_fa_mouse_pointer -  - i_fa_i_cursor -  - i_fa_object_group -  - i_fa_object_ungroup -  - i_fa_sticky_note -  - i_fa_sticky_note_o -  - i_fa_cc_jcb -  - i_fa_cc_diners_club -  - i_fa_clone -  - i_fa_balance_scale -  - i_fa_hourglass_o -  - i_fa_hourglass_start i_fa_hourglass_1_fa_hourglass_start -  - i_fa_hourglass_half i_fa_hourglass_2_fa_hourglass_half -  - i_fa_hourglass_end i_fa_hourglass_3_fa_hourglass_end -  - i_fa_hourglass -  - i_fa_hand_rock_o i_fa_hand_grab_o_fa_hand_rock_o -  - i_fa_hand_paper_o i_fa_hand_stop_o_fa_hand_paper_o -  - i_fa_hand_scissors_o -  - i_fa_hand_lizard_o -  - i_fa_hand_spock_o -  - i_fa_hand_pointer_o -  - i_fa_hand_peace_o -  - i_fa_trademark -  - i_fa_registered -  - i_fa_creative_commons -  - i_fa_gg -  - i_fa_gg_circle -  - i_fa_tripadvisor -  - i_fa_odnoklassniki -  - i_fa_odnoklassniki_square -  - i_fa_get_pocket -  - i_fa_wikipedia_w -  - i_fa_safari -  - i_fa_chrome -  - i_fa_firefox -  - i_fa_opera -  - i_fa_internet_explorer -  - i_fa_television i_fa_tv_fa_television -  - i_fa_contao -  - i_fa_500px -  - i_fa_amazon -  - i_fa_calendar_plus_o -  - i_fa_calendar_minus_o -  - i_fa_calendar_times_o -  - i_fa_calendar_check_o -  - i_fa_industry -  - i_fa_map_pin -  - i_fa_map_signs -  - i_fa_map_o -  - i_fa_map -  - i_fa_commenting -  - i_fa_commenting_o -  - i_fa_houzz -  - i_fa_vimeo -  - i_fa_black_tie -  - i_fa_fonticons -  - i_fa_reddit_alien -  - i_fa_edge -  - i_fa_credit_card_alt -  - i_fa_codiepie -  - i_fa_modx -  - i_fa_fort_awesome -  - i_fa_usb -  - i_fa_product_hunt -  - i_fa_mixcloud -  - i_fa_scribd -  - i_fa_pause_circle -  - i_fa_pause_circle_o -  - i_fa_stop_circle -  - i_fa_stop_circle_o -  - i_fa_shopping_bag -  - i_fa_shopping_basket -  - i_fa_hashtag -  - i_fa_bluetooth -  - i_fa_bluetooth_b -  - i_fa_percent -  - i_fa_gitlab -  - i_fa_wpbeginner -  - i_fa_wpforms -  - i_fa_envira -  - i_fa_universal_access -  - i_fa_wheelchair_alt -  - i_fa_question_circle_o -  - i_fa_blind -  - i_fa_audio_description -  - i_fa_volume_control_phone -  - i_fa_braille -  - i_fa_assistive_listening_systems -  - i_fa_american_sign_language_interpreting i_fa_asl_interpreting_fa_american_sign_language_interpreting -  - i_fa_deaf i_fa_deafness_fa_deaf i_fa_hard_of_hearing_fa_deaf -  - i_fa_glide -  - i_fa_glide_g -  - i_fa_sign_language i_fa_signing_fa_sign_language -  - i_fa_low_vision -  - i_fa_viadeo -  - i_fa_viadeo_square -  - i_fa_snapchat -  - i_fa_snapchat_ghost -  - i_fa_snapchat_square -  - i_fa_pied_piper -  - i_fa_first_order -  - i_fa_yoast -  - i_fa_themeisle -  - i_fa_google_plus_official i_fa_google_plus_circle_fa_google_plus_official -  - i_fa_font_awesome i_fa_fa_fa_font_awesome -  - i_fa_handshake_o -  - i_fa_envelope_open -  - i_fa_envelope_open_o -  - i_fa_linode -  - i_fa_address_book -  - i_fa_address_book_o -  - i_fa_address_card i_fa_vcard_fa_address_card -  - i_fa_address_card_o i_fa_vcard_o_fa_address_card_o -  - i_fa_user_circle -  - i_fa_user_circle_o -  - i_fa_user_o -  - i_fa_id_badge -  - i_fa_id_card i_fa_drivers_license_fa_id_card -  - i_fa_id_card_o i_fa_drivers_license_o_fa_id_card_o -  - i_fa_quora -  - i_fa_free_code_camp -  - i_fa_telegram -  - i_fa_thermometer_full i_fa_thermometer_fa_thermometer_full i_fa_thermometer_4_fa_thermometer_full -  - i_fa_thermometer_three_quarters i_fa_thermometer_3_fa_thermometer_three_quarters -  - i_fa_thermometer_half i_fa_thermometer_2_fa_thermometer_half -  - i_fa_thermometer_quarter i_fa_thermometer_1_fa_thermometer_quarter -  - i_fa_thermometer_empty i_fa_thermometer_0_fa_thermometer_empty -  - i_fa_shower -  - i_fa_bath i_fa_bathtub_fa_bath i_fa_s15_fa_bath -  - i_fa_podcast -  - i_fa_window_maximize -  - i_fa_window_minimize -  - i_fa_window_restore -  - i_fa_window_close i_fa_times_rectangle_fa_window_close -  - i_fa_window_close_o i_fa_times_rectangle_o_fa_window_close_o -  - i_fa_bandcamp -  - i_fa_grav -  - i_fa_etsy -  - i_fa_imdb -  - i_fa_ravelry -  - i_fa_eercast -  - i_fa_microchip -  - i_fa_snowflake_o -  - i_fa_superpowers -  - i_fa_wpexplorer -  - i_fa_meetup - ⏻ - i_iec_power - ⏼ - i_iec_toggle_power - ⏽ - i_iec_power_on - ⏾ - i_iec_sleep_mode - ⭘ - i_iec_power_off -  - i_linux_alpine -  - i_linux_aosc -  - i_linux_apple -  - i_linux_archlinux -  - i_linux_centos -  - i_linux_coreos -  - i_linux_debian -  - i_linux_devuan -  - i_linux_docker -  - i_linux_elementary -  - i_linux_fedora -  - i_linux_fedora_inverse -  - i_linux_freebsd -  - i_linux_gentoo -  - i_linux_linuxmint -  - i_linux_linuxmint_inverse -  - i_linux_mageia -  - i_linux_mandriva -  - i_linux_manjaro -  - i_linux_nixos -  - i_linux_opensuse -  - i_linux_raspberry_pi -  - i_linux_redhat -  - i_linux_sabayon -  - i_linux_slackware -  - i_linux_slackware_inverse -  - i_linux_tux -  - i_linux_ubuntu -  - i_linux_ubuntu_inverse -  - i_mdi_vector_square -  - i_mdi_access_point -  - i_mdi_access_point_network -  - i_mdi_account -  - i_mdi_account_alert -  - i_mdi_account_box -  - i_mdi_account_box_outline -  - i_mdi_account_check -  - i_mdi_account_circle -  - i_mdi_account_convert -  - i_mdi_account_key -  - i_mdi_account_location -  - i_mdi_account_minus -  - i_mdi_account_multiple -  - i_mdi_account_multiple_outline -  - i_mdi_account_multiple_plus -  - i_mdi_account_network -  - i_mdi_account_off -  - i_mdi_account_outline -  - i_mdi_account_plus -  - i_mdi_account_remove -  - i_mdi_account_search -  - i_mdi_account_star -  - i_mdi_orbit -  - i_mdi_account_switch -  - i_mdi_adjust -  - i_mdi_air_conditioner -  - i_mdi_airballoon -  - i_mdi_airplane -  - i_mdi_airplane_off -  - i_mdi_airplay -  - i_mdi_alarm -  - i_mdi_alarm_check -  - i_mdi_alarm_multiple -  - i_mdi_alarm_off -  - i_mdi_alarm_plus -  - i_mdi_album -  - i_mdi_alert -  - i_mdi_alert_box -  - i_mdi_alert_circle -  - i_mdi_alert_octagon -  - i_mdi_alert_outline -  - i_mdi_alpha -  - i_mdi_alphabetical -  - i_mdi_amazon -  - i_mdi_amazon_clouddrive -  - i_mdi_ambulance -  - i_mdi_amplifier -  - i_mdi_anchor -  - i_mdi_android -  - i_mdi_android_debug_bridge -  - i_mdi_android_studio -  - i_mdi_apple -  - i_mdi_apple_finder -  - i_mdi_apple_ios -  - i_mdi_apple_mobileme -  - i_mdi_apple_safari -  - i_mdi_font_awesome -  - i_mdi_apps -  - i_mdi_archive -  - i_mdi_arrange_bring_forward -  - i_mdi_arrange_bring_to_front -  - i_mdi_arrange_send_backward -  - i_mdi_arrange_send_to_back -  - i_mdi_arrow_all -  - i_mdi_arrow_bottom_left -  - i_mdi_arrow_bottom_right -  - i_mdi_arrow_collapse_all -  - i_mdi_arrow_down -  - i_mdi_arrow_down_thick -  - i_mdi_arrow_down_bold_circle -  - i_mdi_arrow_down_bold_circle_outline -  - i_mdi_arrow_down_bold_hexagon_outline -  - i_mdi_arrow_down_drop_circle -  - i_mdi_arrow_down_drop_circle_outline -  - i_mdi_arrow_expand_all -  - i_mdi_arrow_left -  - i_mdi_arrow_left_thick -  - i_mdi_arrow_left_bold_circle -  - i_mdi_arrow_left_bold_circle_outline -  - i_mdi_arrow_left_bold_hexagon_outline -  - i_mdi_arrow_left_drop_circle -  - i_mdi_arrow_left_drop_circle_outline -  - i_mdi_arrow_right -  - i_mdi_arrow_right_thick -  - i_mdi_arrow_right_bold_circle -  - i_mdi_arrow_right_bold_circle_outline -  - i_mdi_arrow_right_bold_hexagon_outline -  - i_mdi_arrow_right_drop_circle -  - i_mdi_arrow_right_drop_circle_outline -  - i_mdi_arrow_top_left -  - i_mdi_arrow_top_right -  - i_mdi_arrow_up -  - i_mdi_arrow_up_thick -  - i_mdi_arrow_up_bold_circle -  - i_mdi_arrow_up_bold_circle_outline -  - i_mdi_arrow_up_bold_hexagon_outline -  - i_mdi_arrow_up_drop_circle -  - i_mdi_arrow_up_drop_circle_outline -  - i_mdi_assistant -  - i_mdi_at -  - i_mdi_attachment -  - i_mdi_audiobook -  - i_mdi_auto_fix -  - i_mdi_auto_upload -  - i_mdi_autorenew -  - i_mdi_av_timer -  - i_mdi_baby -  - i_mdi_backburger -  - i_mdi_backspace -  - i_mdi_backup_restore -  - i_mdi_bank -  - i_mdi_barcode -  - i_mdi_barcode_scan -  - i_mdi_barley -  - i_mdi_barrel -  - i_mdi_basecamp -  - i_mdi_basket -  - i_mdi_basket_fill -  - i_mdi_basket_unfill -  - i_mdi_battery -  - i_mdi_battery_10 -  - i_mdi_battery_20 -  - i_mdi_battery_30 -  - i_mdi_battery_40 -  - i_mdi_battery_50 -  - i_mdi_battery_60 -  - i_mdi_battery_70 -  - i_mdi_battery_80 -  - i_mdi_battery_90 -  - i_mdi_battery_alert -  - i_mdi_battery_charging -  - i_mdi_battery_charging_100 -  - i_mdi_battery_charging_20 -  - i_mdi_battery_charging_30 -  - i_mdi_battery_charging_40 -  - i_mdi_battery_charging_60 -  - i_mdi_battery_charging_80 -  - i_mdi_battery_charging_90 -  - i_mdi_battery_minus -  - i_mdi_battery_negative -  - i_mdi_battery_outline -  - i_mdi_battery_plus -  - i_mdi_battery_positive -  - i_mdi_battery_unknown -  - i_mdi_beach -  - i_mdi_flask -  - i_mdi_flask_empty -  - i_mdi_flask_empty_outline -  - i_mdi_flask_outline -  - i_mdi_beats -  - i_mdi_beer -  - i_mdi_behance -  - i_mdi_bell -  - i_mdi_bell_off -  - i_mdi_bell_outline -  - i_mdi_bell_plus -  - i_mdi_bell_ring -  - i_mdi_bell_ring_outline -  - i_mdi_bell_sleep -  - i_mdi_beta -  - i_mdi_bible -  - i_mdi_bike -  - i_mdi_bing -  - i_mdi_binoculars -  - i_mdi_bio -  - i_mdi_biohazard -  - i_mdi_bitbucket -  - i_mdi_black_mesa -  - i_mdi_blackberry -  - i_mdi_blender -  - i_mdi_blinds -  - i_mdi_block_helper -  - i_mdi_blogger -  - i_mdi_bluetooth -  - i_mdi_bluetooth_audio -  - i_mdi_bluetooth_connect -  - i_mdi_bluetooth_off -  - i_mdi_bluetooth_settings -  - i_mdi_bluetooth_transfer -  - i_mdi_blur -  - i_mdi_blur_linear -  - i_mdi_blur_off -  - i_mdi_blur_radial -  - i_mdi_bone -  - i_mdi_book -  - i_mdi_book_multiple -  - i_mdi_book_multiple_variant -  - i_mdi_book_open -  - i_mdi_book_open_variant -  - i_mdi_book_variant -  - i_mdi_bookmark -  - i_mdi_bookmark_check -  - i_mdi_bookmark_music -  - i_mdi_bookmark_outline -  - i_mdi_bookmark_plus_outline -  - i_mdi_bookmark_plus -  - i_mdi_bookmark_remove -  - i_mdi_border_all -  - i_mdi_border_bottom -  - i_mdi_border_color -  - i_mdi_border_horizontal -  - i_mdi_border_inside -  - i_mdi_border_left -  - i_mdi_border_none -  - i_mdi_border_outside -  - i_mdi_border_right -  - i_mdi_border_style -  - i_mdi_border_top -  - i_mdi_border_vertical -  - i_mdi_bowling -  - i_mdi_box -  - i_mdi_box_cutter -  - i_mdi_briefcase -  - i_mdi_briefcase_check -  - i_mdi_briefcase_download -  - i_mdi_briefcase_upload -  - i_mdi_brightness_1 -  - i_mdi_brightness_2 -  - i_mdi_brightness_3 -  - i_mdi_brightness_4 -  - i_mdi_brightness_5 -  - i_mdi_brightness_6 -  - i_mdi_brightness_7 -  - i_mdi_brightness_auto -  - i_mdi_broom -  - i_mdi_brush -  - i_mdi_bug -  - i_mdi_bulletin_board -  - i_mdi_bullhorn -  - i_mdi_bus -  - i_mdi_cached -  - i_mdi_cake -  - i_mdi_cake_layered -  - i_mdi_cake_variant -  - i_mdi_calculator -  - i_mdi_calendar -  - i_mdi_calendar_blank -  - i_mdi_calendar_check -  - i_mdi_calendar_clock -  - i_mdi_calendar_multiple -  - i_mdi_calendar_multiple_check -  - i_mdi_calendar_plus -  - i_mdi_calendar_remove -  - i_mdi_calendar_text -  - i_mdi_calendar_today -  - i_mdi_call_made -  - i_mdi_call_merge -  - i_mdi_call_missed -  - i_mdi_call_received -  - i_mdi_call_split -  - i_mdi_camcorder -  - i_mdi_camcorder_box -  - i_mdi_camcorder_box_off -  - i_mdi_camcorder_off -  - i_mdi_camera -  - i_mdi_camera_enhance -  - i_mdi_camera_front -  - i_mdi_camera_front_variant -  - i_mdi_camera_iris -  - i_mdi_camera_party_mode -  - i_mdi_camera_rear -  - i_mdi_camera_rear_variant -  - i_mdi_camera_switch -  - i_mdi_camera_timer -  - i_mdi_candycane -  - i_mdi_car -  - i_mdi_car_battery -  - i_mdi_car_connected -  - i_mdi_car_wash -  - i_mdi_carrot -  - i_mdi_cart -  - i_mdi_cart_outline -  - i_mdi_cart_plus -  - i_mdi_case_sensitive_alt -  - i_mdi_cash -  - i_mdi_cash_100 -  - i_mdi_cash_multiple -  - i_mdi_cash_usd -  - i_mdi_cast -  - i_mdi_cast_connected -  - i_mdi_castle -  - i_mdi_cat -  - i_mdi_cellphone -  - i_mdi_cellphone_android -  - i_mdi_cellphone_basic -  - i_mdi_cellphone_dock -  - i_mdi_cellphone_iphone -  - i_mdi_cellphone_link -  - i_mdi_cellphone_link_off -  - i_mdi_cellphone_settings -  - i_mdi_certificate -  - i_mdi_chair_school -  - i_mdi_chart_arc -  - i_mdi_chart_areaspline -  - i_mdi_chart_bar -  - i_mdi_chart_histogram -  - i_mdi_chart_line -  - i_mdi_chart_pie -  - i_mdi_check -  - i_mdi_check_all -  - i_mdi_checkbox_blank -  - i_mdi_checkbox_blank_circle -  - i_mdi_checkbox_blank_circle_outline -  - i_mdi_checkbox_blank_outline -  - i_mdi_checkbox_marked -  - i_mdi_checkbox_marked_circle -  - i_mdi_checkbox_marked_circle_outline -  - i_mdi_checkbox_marked_outline -  - i_mdi_checkbox_multiple_blank -  - i_mdi_checkbox_multiple_blank_outline -  - i_mdi_checkbox_multiple_marked -  - i_mdi_checkbox_multiple_marked_outline -  - i_mdi_checkerboard -  - i_mdi_chemical_weapon -  - i_mdi_chevron_double_down -  - i_mdi_chevron_double_left -  - i_mdi_chevron_double_right -  - i_mdi_chevron_double_up -  - i_mdi_chevron_down -  - i_mdi_chevron_left -  - i_mdi_chevron_right -  - i_mdi_chevron_up -  - i_mdi_church -  - i_mdi_cisco_webex -  - i_mdi_city -  - i_mdi_clipboard -  - i_mdi_clipboard_account -  - i_mdi_clipboard_alert -  - i_mdi_clipboard_arrow_down -  - i_mdi_clipboard_arrow_left -  - i_mdi_clipboard_check -  - i_mdi_clipboard_outline -  - i_mdi_clipboard_text -  - i_mdi_clippy -  - i_mdi_clock -  - i_mdi_clock_end -  - i_mdi_clock_fast -  - i_mdi_clock_in -  - i_mdi_clock_out -  - i_mdi_clock_start -  - i_mdi_close -  - i_mdi_close_box -  - i_mdi_close_box_outline -  - i_mdi_close_circle -  - i_mdi_close_circle_outline -  - i_mdi_close_network -  - i_mdi_close_octagon -  - i_mdi_close_octagon_outline -  - i_mdi_closed_caption -  - i_mdi_cloud -  - i_mdi_cloud_check -  - i_mdi_cloud_circle -  - i_mdi_cloud_download -  - i_mdi_cloud_outline -  - i_mdi_cloud_off_outline -  - i_mdi_cloud_print -  - i_mdi_cloud_print_outline -  - i_mdi_cloud_upload -  - i_mdi_code_array -  - i_mdi_code_braces -  - i_mdi_code_brackets -  - i_mdi_code_equal -  - i_mdi_code_greater_than -  - i_mdi_code_greater_than_or_equal -  - i_mdi_code_less_than -  - i_mdi_code_less_than_or_equal -  - i_mdi_code_not_equal -  - i_mdi_code_not_equal_variant -  - i_mdi_code_parentheses -  - i_mdi_code_string -  - i_mdi_code_tags -  - i_mdi_codepen -  - i_mdi_coffee -  - i_mdi_coffee_to_go -  - i_mdi_coin -  - i_mdi_color_helper -  - i_mdi_comment -  - i_mdi_comment_account -  - i_mdi_comment_account_outline -  - i_mdi_comment_alert -  - i_mdi_comment_alert_outline -  - i_mdi_comment_check -  - i_mdi_comment_check_outline -  - i_mdi_comment_multiple_outline -  - i_mdi_comment_outline -  - i_mdi_comment_plus_outline -  - i_mdi_comment_processing -  - i_mdi_comment_processing_outline -  - i_mdi_comment_question_outline -  - i_mdi_comment_remove_outline -  - i_mdi_comment_text -  - i_mdi_comment_text_outline -  - i_mdi_compare -  - i_mdi_compass -  - i_mdi_compass_outline -  - i_mdi_console -  - i_mdi_contact_mail -  - i_mdi_content_copy -  - i_mdi_content_cut -  - i_mdi_content_duplicate -  - i_mdi_content_paste -  - i_mdi_content_save -  - i_mdi_content_save_all -  - i_mdi_contrast -  - i_mdi_contrast_box -  - i_mdi_contrast_circle -  - i_mdi_cookie -  - i_mdi_counter -  - i_mdi_cow -  - i_mdi_credit_card -  - i_mdi_credit_card_multiple -  - i_mdi_credit_card_scan -  - i_mdi_crop -  - i_mdi_crop_free -  - i_mdi_crop_landscape -  - i_mdi_crop_portrait -  - i_mdi_crop_square -  - i_mdi_crosshairs -  - i_mdi_crosshairs_gps -  - i_mdi_crown -  - i_mdi_cube -  - i_mdi_cube_outline -  - i_mdi_cube_send -  - i_mdi_cube_unfolded -  - i_mdi_cup -  - i_mdi_cup_water -  - i_mdi_currency_btc -  - i_mdi_currency_eur -  - i_mdi_currency_gbp -  - i_mdi_currency_inr -  - i_mdi_currency_ngn -  - i_mdi_currency_rub -  - i_mdi_currency_try -  - i_mdi_currency_usd -  - i_mdi_cursor_default -  - i_mdi_cursor_default_outline -  - i_mdi_cursor_move -  - i_mdi_cursor_pointer -  - i_mdi_database -  - i_mdi_database_minus -  - i_mdi_database_plus -  - i_mdi_debug_step_into -  - i_mdi_debug_step_out -  - i_mdi_debug_step_over -  - i_mdi_decimal_decrease -  - i_mdi_decimal_increase -  - i_mdi_delete -  - i_mdi_delete_variant -  - i_mdi_delta -  - i_mdi_deskphone -  - i_mdi_desktop_mac -  - i_mdi_desktop_tower -  - i_mdi_details -  - i_mdi_deviantart -  - i_mdi_diamond -  - i_mdi_creation -  - i_mdi_dice_1 -  - i_mdi_dice_2 -  - i_mdi_dice_3 -  - i_mdi_dice_4 -  - i_mdi_dice_5 -  - i_mdi_dice_6 -  - i_mdi_directions -  - i_mdi_disk_alert -  - i_mdi_disqus -  - i_mdi_disqus_outline -  - i_mdi_division -  - i_mdi_division_box -  - i_mdi_dns -  - i_mdi_domain -  - i_mdi_dots_horizontal -  - i_mdi_dots_vertical -  - i_mdi_download -  - i_mdi_drag -  - i_mdi_drag_horizontal -  - i_mdi_drag_vertical -  - i_mdi_drawing -  - i_mdi_drawing_box -  - i_mdi_dribbble -  - i_mdi_dribbble_box -  - i_mdi_drone -  - i_mdi_dropbox -  - i_mdi_drupal -  - i_mdi_duck -  - i_mdi_dumbbell -  - i_mdi_earth -  - i_mdi_earth_off -  - i_mdi_edge -  - i_mdi_eject -  - i_mdi_elevation_decline -  - i_mdi_elevation_rise -  - i_mdi_elevator -  - i_mdi_email -  - i_mdi_email_open -  - i_mdi_email_outline -  - i_mdi_email_secure -  - i_mdi_emoticon -  - i_mdi_emoticon_cool -  - i_mdi_emoticon_devil -  - i_mdi_emoticon_happy -  - i_mdi_emoticon_neutral -  - i_mdi_emoticon_poop -  - i_mdi_emoticon_sad -  - i_mdi_emoticon_tongue -  - i_mdi_engine -  - i_mdi_engine_outline -  - i_mdi_equal -  - i_mdi_equal_box -  - i_mdi_eraser -  - i_mdi_escalator -  - i_mdi_ethernet -  - i_mdi_ethernet_cable -  - i_mdi_ethernet_cable_off -  - i_mdi_etsy -  - i_mdi_evernote -  - i_mdi_exclamation -  - i_mdi_exit_to_app -  - i_mdi_export -  - i_mdi_eye -  - i_mdi_eye_off -  - i_mdi_eyedropper -  - i_mdi_eyedropper_variant -  - i_mdi_facebook -  - i_mdi_facebook_box -  - i_mdi_facebook_messenger -  - i_mdi_factory -  - i_mdi_fan -  - i_mdi_fast_forward -  - i_mdi_fax -  - i_mdi_ferry -  - i_mdi_file -  - i_mdi_file_chart -  - i_mdi_file_check -  - i_mdi_file_cloud -  - i_mdi_file_delimited -  - i_mdi_file_document -  - i_mdi_file_document_box -  - i_mdi_file_excel -  - i_mdi_file_excel_box -  - i_mdi_file_export -  - i_mdi_file_find -  - i_mdi_file_image -  - i_mdi_file_import -  - i_mdi_file_lock -  - i_mdi_file_multiple -  - i_mdi_file_music -  - i_mdi_file_outline -  - i_mdi_file_pdf -  - i_mdi_file_pdf_box -  - i_mdi_file_powerpoint -  - i_mdi_file_powerpoint_box -  - i_mdi_file_presentation_box -  - i_mdi_file_send -  - i_mdi_file_video -  - i_mdi_file_word -  - i_mdi_file_word_box -  - i_mdi_file_xml -  - i_mdi_film -  - i_mdi_filmstrip -  - i_mdi_filmstrip_off -  - i_mdi_filter -  - i_mdi_filter_outline -  - i_mdi_filter_remove -  - i_mdi_filter_remove_outline -  - i_mdi_filter_variant -  - i_mdi_fingerprint -  - i_mdi_fire -  - i_mdi_firefox -  - i_mdi_fish -  - i_mdi_flag -  - i_mdi_flag_checkered -  - i_mdi_flag_outline -  - i_mdi_flag_variant_outline -  - i_mdi_flag_triangle -  - i_mdi_flag_variant -  - i_mdi_flash -  - i_mdi_flash_auto -  - i_mdi_flash_off -  - i_mdi_flashlight -  - i_mdi_flashlight_off -  - i_mdi_flattr -  - i_mdi_flip_to_back -  - i_mdi_flip_to_front -  - i_mdi_floppy -  - i_mdi_flower -  - i_mdi_folder -  - i_mdi_folder_account -  - i_mdi_folder_download -  - i_mdi_folder_google_drive -  - i_mdi_folder_image -  - i_mdi_folder_lock -  - i_mdi_folder_lock_open -  - i_mdi_folder_move -  - i_mdi_folder_multiple -  - i_mdi_folder_multiple_image -  - i_mdi_folder_multiple_outline -  - i_mdi_folder_outline -  - i_mdi_folder_plus -  - i_mdi_folder_remove -  - i_mdi_folder_upload -  - i_mdi_food -  - i_mdi_food_apple -  - i_mdi_food_variant -  - i_mdi_football -  - i_mdi_football_australian -  - i_mdi_football_helmet -  - i_mdi_format_align_center -  - i_mdi_format_align_justify -  - i_mdi_format_align_left -  - i_mdi_format_align_right -  - i_mdi_format_bold -  - i_mdi_format_clear -  - i_mdi_format_color_fill -  - i_mdi_format_float_center -  - i_mdi_format_float_left -  - i_mdi_format_float_none -  - i_mdi_format_float_right -  - i_mdi_format_header_1 -  - i_mdi_format_header_2 -  - i_mdi_format_header_3 -  - i_mdi_format_header_4 -  - i_mdi_format_header_5 -  - i_mdi_format_header_6 -  - i_mdi_format_header_decrease -  - i_mdi_format_header_equal -  - i_mdi_format_header_increase -  - i_mdi_format_header_pound -  - i_mdi_format_indent_decrease -  - i_mdi_format_indent_increase -  - i_mdi_format_italic -  - i_mdi_format_line_spacing -  - i_mdi_format_list_bulleted -  - i_mdi_format_list_bulleted_type -  - i_mdi_format_list_numbers -  - i_mdi_format_paint -  - i_mdi_format_paragraph -  - i_mdi_format_quote_close -  - i_mdi_format_size -  - i_mdi_format_strikethrough -  - i_mdi_format_strikethrough_variant -  - i_mdi_format_subscript -  - i_mdi_format_superscript -  - i_mdi_format_text -  - i_mdi_format_textdirection_l_to_r -  - i_mdi_format_textdirection_r_to_l -  - i_mdi_format_underline -  - i_mdi_format_wrap_inline -  - i_mdi_format_wrap_square -  - i_mdi_format_wrap_tight -  - i_mdi_format_wrap_top_bottom -  - i_mdi_forum -  - i_mdi_forward -  - i_mdi_foursquare -  - i_mdi_fridge -  - i_mdi_fridge_filled -  - i_mdi_fridge_filled_bottom -  - i_mdi_fridge_filled_top -  - i_mdi_fullscreen -  - i_mdi_fullscreen_exit -  - i_mdi_function -  - i_mdi_gamepad -  - i_mdi_gamepad_variant -  - i_mdi_gas_station -  - i_mdi_gate -  - i_mdi_gauge -  - i_mdi_gavel -  - i_mdi_gender_female -  - i_mdi_gender_male -  - i_mdi_gender_male_female -  - i_mdi_gender_transgender -  - i_mdi_ghost -  - i_mdi_gift -  - i_mdi_git -  - i_mdi_github_box -  - i_mdi_github_circle -  - i_mdi_glass_flute -  - i_mdi_glass_mug -  - i_mdi_glass_stange -  - i_mdi_glass_tulip -  - i_mdi_glassdoor -  - i_mdi_glasses -  - i_mdi_gmail -  - i_mdi_gnome -  - i_mdi_google -  - i_mdi_google_cardboard -  - i_mdi_google_chrome -  - i_mdi_google_circles -  - i_mdi_google_circles_communities -  - i_mdi_google_circles_extended -  - i_mdi_google_circles_group -  - i_mdi_google_controller -  - i_mdi_google_controller_off -  - i_mdi_google_drive -  - i_mdi_google_earth -  - i_mdi_google_glass -  - i_mdi_google_nearby -  - i_mdi_google_pages -  - i_mdi_google_physical_web -  - i_mdi_google_play -  - i_mdi_google_plus -  - i_mdi_google_plus_box -  - i_mdi_google_translate -  - i_mdi_google_wallet -  - i_mdi_grid -  - i_mdi_grid_off -  - i_mdi_group -  - i_mdi_guitar_electric -  - i_mdi_guitar_pick -  - i_mdi_guitar_pick_outline -  - i_mdi_hand_pointing_right -  - i_mdi_hanger -  - i_mdi_hangouts -  - i_mdi_harddisk -  - i_mdi_headphones -  - i_mdi_headphones_box -  - i_mdi_headphones_settings -  - i_mdi_headset -  - i_mdi_headset_dock -  - i_mdi_headset_off -  - i_mdi_heart -  - i_mdi_heart_box -  - i_mdi_heart_box_outline -  - i_mdi_heart_broken -  - i_mdi_heart_outline -  - i_mdi_help -  - i_mdi_help_circle -  - i_mdi_hexagon -  - i_mdi_hexagon_outline -  - i_mdi_history -  - i_mdi_hololens -  - i_mdi_home -  - i_mdi_home_modern -  - i_mdi_home_variant -  - i_mdi_hops -  - i_mdi_hospital -  - i_mdi_hospital_building -  - i_mdi_hospital_marker -  - i_mdi_hotel -  - i_mdi_houzz -  - i_mdi_houzz_box -  - i_mdi_human -  - i_mdi_human_child -  - i_mdi_human_male_female -  - i_mdi_image -  - i_mdi_image_album -  - i_mdi_image_area -  - i_mdi_image_area_close -  - i_mdi_image_broken -  - i_mdi_image_broken_variant -  - i_mdi_image_filter -  - i_mdi_image_filter_black_white -  - i_mdi_image_filter_center_focus -  - i_mdi_image_filter_center_focus_weak -  - i_mdi_image_filter_drama -  - i_mdi_image_filter_frames -  - i_mdi_image_filter_hdr -  - i_mdi_image_filter_none -  - i_mdi_image_filter_tilt_shift -  - i_mdi_image_filter_vintage -  - i_mdi_image_multiple -  - i_mdi_import -  - i_mdi_inbox_arrow_down -  - i_mdi_information -  - i_mdi_information_outline -  - i_mdi_instagram -  - i_mdi_instapaper -  - i_mdi_internet_explorer -  - i_mdi_invert_colors -  - i_mdi_jeepney -  - i_mdi_jira -  - i_mdi_jsfiddle -  - i_mdi_keg -  - i_mdi_key -  - i_mdi_key_change -  - i_mdi_key_minus -  - i_mdi_key_plus -  - i_mdi_key_remove -  - i_mdi_key_variant -  - i_mdi_keyboard -  - i_mdi_keyboard_backspace -  - i_mdi_keyboard_caps -  - i_mdi_keyboard_close -  - i_mdi_keyboard_off -  - i_mdi_keyboard_return -  - i_mdi_keyboard_tab -  - i_mdi_keyboard_variant -  - i_mdi_kodi -  - i_mdi_label -  - i_mdi_label_outline -  - i_mdi_lan -  - i_mdi_lan_connect -  - i_mdi_lan_disconnect -  - i_mdi_lan_pending -  - i_mdi_language_csharp -  - i_mdi_language_css3 -  - i_mdi_language_html5 -  - i_mdi_language_javascript -  - i_mdi_language_php -  - i_mdi_language_python -  - i_mdi_language_python_text -  - i_mdi_laptop -  - i_mdi_laptop_chromebook -  - i_mdi_laptop_mac -  - i_mdi_laptop_windows -  - i_mdi_lastfm -  - i_mdi_launch -  - i_mdi_layers -  - i_mdi_layers_off -  - i_mdi_leaf -  - i_mdi_led_off -  - i_mdi_led_on -  - i_mdi_led_outline -  - i_mdi_led_variant_off -  - i_mdi_led_variant_on -  - i_mdi_led_variant_outline -  - i_mdi_library -  - i_mdi_library_books -  - i_mdi_library_music -  - i_mdi_library_plus -  - i_mdi_lightbulb -  - i_mdi_lightbulb_outline -  - i_mdi_link -  - i_mdi_link_off -  - i_mdi_link_variant -  - i_mdi_link_variant_off -  - i_mdi_linkedin -  - i_mdi_linkedin_box -  - i_mdi_linux -  - i_mdi_lock -  - i_mdi_lock_open -  - i_mdi_lock_open_outline -  - i_mdi_lock_outline -  - i_mdi_login -  - i_mdi_logout -  - i_mdi_looks -  - i_mdi_loupe -  - i_mdi_lumx -  - i_mdi_magnet -  - i_mdi_magnet_on -  - i_mdi_magnify -  - i_mdi_magnify_minus -  - i_mdi_magnify_plus -  - i_mdi_mail_ru -  - i_mdi_map -  - i_mdi_map_marker -  - i_mdi_map_marker_circle -  - i_mdi_map_marker_multiple -  - i_mdi_map_marker_off -  - i_mdi_map_marker_radius -  - i_mdi_margin -  - i_mdi_markdown -  - i_mdi_marker_check -  - i_mdi_martini -  - i_mdi_material_ui -  - i_mdi_math_compass -  - i_mdi_maxcdn -  - i_mdi_medium -  - i_mdi_memory -  - i_mdi_menu -  - i_mdi_menu_down -  - i_mdi_menu_left -  - i_mdi_menu_right -  - i_mdi_menu_up -  - i_mdi_message -  - i_mdi_message_alert -  - i_mdi_message_draw -  - i_mdi_message_image -  - i_mdi_message_outline -  - i_mdi_message_processing -  - i_mdi_message_reply -  - i_mdi_message_reply_text -  - i_mdi_message_text -  - i_mdi_message_text_outline -  - i_mdi_message_video -  - i_mdi_microphone -  - i_mdi_microphone_off -  - i_mdi_microphone_outline -  - i_mdi_microphone_settings -  - i_mdi_microphone_variant -  - i_mdi_microphone_variant_off -  - i_mdi_microsoft -  - i_mdi_minecraft -  - i_mdi_minus -  - i_mdi_minus_box -  - i_mdi_minus_circle -  - i_mdi_minus_circle_outline -  - i_mdi_minus_network -  - i_mdi_monitor -  - i_mdi_monitor_multiple -  - i_mdi_more -  - i_mdi_motorbike -  - i_mdi_mouse -  - i_mdi_mouse_off -  - i_mdi_mouse_variant -  - i_mdi_mouse_variant_off -  - i_mdi_movie -  - i_mdi_multiplication -  - i_mdi_multiplication_box -  - i_mdi_music_box -  - i_mdi_music_box_outline -  - i_mdi_music_circle -  - i_mdi_music_note -  - i_mdi_music_note_eighth -  - i_mdi_music_note_half -  - i_mdi_music_note_off -  - i_mdi_music_note_quarter -  - i_mdi_music_note_sixteenth -  - i_mdi_music_note_whole -  - i_mdi_nature -  - i_mdi_nature_people -  - i_mdi_navigation -  - i_mdi_needle -  - i_mdi_nest_protect -  - i_mdi_nest_thermostat -  - i_mdi_new_box -  - i_mdi_newspaper -  - i_mdi_nfc -  - i_mdi_nfc_tap -  - i_mdi_nfc_variant -  - i_mdi_nodejs -  - i_mdi_note -  - i_mdi_note_outline -  - i_mdi_note_plus -  - i_mdi_note_plus_outline -  - i_mdi_note_text -  - i_mdi_notification_clear_all -  - i_mdi_numeric -  - i_mdi_numeric_0_box -  - i_mdi_numeric_0_box_multiple_outline -  - i_mdi_numeric_0_box_outline -  - i_mdi_numeric_1_box -  - i_mdi_numeric_1_box_multiple_outline -  - i_mdi_numeric_1_box_outline -  - i_mdi_numeric_2_box -  - i_mdi_numeric_2_box_multiple_outline -  - i_mdi_numeric_2_box_outline -  - i_mdi_numeric_3_box -  - i_mdi_numeric_3_box_multiple_outline -  - i_mdi_numeric_3_box_outline -  - i_mdi_numeric_4_box -  - i_mdi_numeric_4_box_multiple_outline -  - i_mdi_numeric_4_box_outline -  - i_mdi_numeric_5_box -  - i_mdi_numeric_5_box_multiple_outline -  - i_mdi_numeric_5_box_outline -  - i_mdi_numeric_6_box -  - i_mdi_numeric_6_box_multiple_outline -  - i_mdi_numeric_6_box_outline -  - i_mdi_numeric_7_box -  - i_mdi_numeric_7_box_multiple_outline -  - i_mdi_numeric_7_box_outline -  - i_mdi_numeric_8_box -  - i_mdi_numeric_8_box_multiple_outline -  - i_mdi_numeric_8_box_outline -  - i_mdi_numeric_9_box -  - i_mdi_numeric_9_box_multiple_outline -  - i_mdi_numeric_9_box_outline -  - i_mdi_numeric_9_plus_box -  - i_mdi_numeric_9_plus_box_multiple_outline -  - i_mdi_numeric_9_plus_box_outline -  - i_mdi_nutrition -  - i_mdi_octagon -  - i_mdi_octagon_outline -  - i_mdi_odnoklassniki -  - i_mdi_office -  - i_mdi_oil -  - i_mdi_oil_temperature -  - i_mdi_omega -  - i_mdi_onedrive -  - i_mdi_open_in_app -  - i_mdi_open_in_new -  - i_mdi_openid -  - i_mdi_opera -  - i_mdi_ornament -  - i_mdi_ornament_variant -  - i_mdi_inbox_arrow_up -  - i_mdi_owl -  - i_mdi_package -  - i_mdi_package_down -  - i_mdi_package_up -  - i_mdi_package_variant -  - i_mdi_package_variant_closed -  - i_mdi_palette -  - i_mdi_palette_advanced -  - i_mdi_panda -  - i_mdi_pandora -  - i_mdi_panorama -  - i_mdi_panorama_fisheye -  - i_mdi_panorama_horizontal -  - i_mdi_panorama_vertical -  - i_mdi_panorama_wide_angle -  - i_mdi_paper_cut_vertical -  - i_mdi_paperclip -  - i_mdi_parking -  - i_mdi_pause -  - i_mdi_pause_circle -  - i_mdi_pause_circle_outline -  - i_mdi_pause_octagon -  - i_mdi_pause_octagon_outline -  - i_mdi_paw -  - i_mdi_pen -  - i_mdi_pencil -  - i_mdi_pencil_box -  - i_mdi_pencil_box_outline -  - i_mdi_pencil_lock -  - i_mdi_pencil_off -  - i_mdi_percent -  - i_mdi_pharmacy -  - i_mdi_phone -  - i_mdi_phone_bluetooth -  - i_mdi_phone_forward -  - i_mdi_phone_hangup -  - i_mdi_phone_in_talk -  - i_mdi_phone_incoming -  - i_mdi_phone_locked -  - i_mdi_phone_log -  - i_mdi_phone_missed -  - i_mdi_phone_outgoing -  - i_mdi_phone_paused -  - i_mdi_phone_settings -  - i_mdi_phone_voip -  - i_mdi_pi -  - i_mdi_pi_box - 豈 - i_mdi_pig - 更 - i_mdi_pill - 車 - i_mdi_pin - 賈 - i_mdi_pin_off - 滑 - i_mdi_pine_tree - 串 - i_mdi_pine_tree_box - 句 - i_mdi_pinterest - 龜 - i_mdi_pinterest_box - 龜 - i_mdi_pizza - 契 - i_mdi_play - 金 - i_mdi_play_box_outline - 喇 - i_mdi_play_circle - 奈 - i_mdi_play_circle_outline - 懶 - i_mdi_play_pause - 癩 - i_mdi_play_protected_content - 羅 - i_mdi_playlist_minus - 蘿 - i_mdi_playlist_play - 螺 - i_mdi_playlist_plus - 裸 - i_mdi_playlist_remove - 邏 - i_mdi_playstation - 樂 - i_mdi_plus - 洛 - i_mdi_plus_box - 烙 - i_mdi_plus_circle - 珞 - i_mdi_plus_circle_multiple_outline - 落 - i_mdi_plus_circle_outline - 酪 - i_mdi_plus_network - 駱 - i_mdi_plus_one - 亂 - i_mdi_pocket - 卵 - i_mdi_pokeball - 欄 - i_mdi_polaroid - 爛 - i_mdi_poll - 蘭 - i_mdi_poll_box - 鸞 - i_mdi_polymer - 嵐 - i_mdi_popcorn - 濫 - i_mdi_pound - 藍 - i_mdi_pound_box - 襤 - i_mdi_power - 拉 - i_mdi_power_settings - 臘 - i_mdi_power_socket - 蠟 - i_mdi_presentation - 廊 - i_mdi_presentation_play - 朗 - i_mdi_printer - 浪 - i_mdi_printer_3d - 狼 - i_mdi_printer_alert - 郎 - i_mdi_professional_hexagon - 來 - i_mdi_projector - 冷 - i_mdi_projector_screen - 勞 - i_mdi_pulse - 擄 - i_mdi_puzzle - 櫓 - i_mdi_qrcode - 爐 - i_mdi_qrcode_scan - 盧 - i_mdi_quadcopter - 老 - i_mdi_quality_high - 蘆 - i_mdi_quicktime - 虜 - i_mdi_radar - 路 - i_mdi_radiator - 露 - i_mdi_radio - 魯 - i_mdi_radio_handheld - 鷺 - i_mdi_radio_tower - 碌 - i_mdi_radioactive - 祿 - i_mdi_radiobox_blank - 綠 - i_mdi_radiobox_marked - 菉 - i_mdi_raspberrypi - 錄 - i_mdi_ray_end - 鹿 - i_mdi_ray_end_arrow - 論 - i_mdi_ray_start - 壟 - i_mdi_ray_start_arrow - 弄 - i_mdi_ray_start_end - 籠 - i_mdi_ray_vertex - 聾 - i_mdi_lastpass - 牢 - i_mdi_read - 磊 - i_mdi_youtube_tv - 賂 - i_mdi_receipt - 雷 - i_mdi_record - 壘 - i_mdi_record_rec - 屢 - i_mdi_recycle - 樓 - i_mdi_reddit - 淚 - i_mdi_redo - 漏 - i_mdi_redo_variant - 累 - i_mdi_refresh - 縷 - i_mdi_regex - 陋 - i_mdi_relative_scale - 勒 - i_mdi_reload - 肋 - i_mdi_remote - 凜 - i_mdi_rename_box - 凌 - i_mdi_repeat - 稜 - i_mdi_repeat_off - 綾 - i_mdi_repeat_once - 菱 - i_mdi_replay - 陵 - i_mdi_reply - 讀 - i_mdi_reply_all - 拏 - i_mdi_reproduction - 樂 - i_mdi_resize_bottom_right - 諾 - i_mdi_responsive - 丹 - i_mdi_rewind - 寧 - i_mdi_ribbon - 怒 - i_mdi_road - 率 - i_mdi_road_variant - 異 - i_mdi_rocket - 北 - i_mdi_rotate_3d - 磻 - i_mdi_rotate_left - 便 - i_mdi_rotate_left_variant - 復 - i_mdi_rotate_right - 不 - i_mdi_rotate_right_variant - 泌 - i_mdi_router_wireless - 數 - i_mdi_routes - 索 - i_mdi_rss - 參 - i_mdi_rss_box - 塞 - i_mdi_ruler - 省 - i_mdi_run_fast - 葉 - i_mdi_sale - 說 - i_mdi_satellite - 殺 - i_mdi_satellite_variant - 辰 - i_mdi_scale - 沈 - i_mdi_scale_bathroom - 拾 - i_mdi_school - 若 - i_mdi_screen_rotation - 掠 - i_mdi_screen_rotation_lock - 略 - i_mdi_screwdriver - 亮 - i_mdi_script - 兩 - i_mdi_sd - 凉 - i_mdi_seal - 梁 - i_mdi_seat_flat - 糧 - i_mdi_seat_flat_angled - 良 - i_mdi_seat_individual_suite - 諒 - i_mdi_seat_legroom_extra - 量 - i_mdi_seat_legroom_normal - 勵 - i_mdi_seat_legroom_reduced - 呂 - i_mdi_seat_recline_extra - 女 - i_mdi_seat_recline_normal - 廬 - i_mdi_security - 旅 - i_mdi_security_network - 濾 - i_mdi_select - 礪 - i_mdi_select_all - 閭 - i_mdi_select_inverse - 驪 - i_mdi_select_off - 麗 - i_mdi_selection - 黎 - i_mdi_send - 力 - i_mdi_server - 曆 - i_mdi_server_minus - 歷 - i_mdi_server_network - 轢 - i_mdi_server_network_off - 年 - i_mdi_server_off - 憐 - i_mdi_server_plus - 戀 - i_mdi_server_remove - 撚 - i_mdi_server_security - 漣 - i_mdi_settings - 煉 - i_mdi_settings_box - 璉 - i_mdi_shape_plus - 秊 - i_mdi_share - 練 - i_mdi_share_variant - 聯 - i_mdi_shield - 輦 - i_mdi_shield_outline - 蓮 - i_mdi_shopping - 連 - i_mdi_shopping_music - 鍊 - i_mdi_shredder - 列 - i_mdi_shuffle - 劣 - i_mdi_shuffle_disabled - 咽 - i_mdi_shuffle_variant - 烈 - i_mdi_sigma - 裂 - i_mdi_sign_caution - 說 - i_mdi_signal - 廉 - i_mdi_silverware - 念 - i_mdi_silverware_fork - 捻 - i_mdi_silverware_spoon - 殮 - i_mdi_silverware_variant - 簾 - i_mdi_sim - 獵 - i_mdi_sim_alert - 令 - i_mdi_sim_off - 囹 - i_mdi_sitemap - 寧 - i_mdi_skip_backward - 嶺 - i_mdi_skip_forward - 怜 - i_mdi_skip_next - 玲 - i_mdi_skip_previous - 瑩 - i_mdi_skype - 羚 - i_mdi_skype_business - 聆 - i_mdi_slack - 鈴 - i_mdi_sleep - 零 - i_mdi_sleep_off - 靈 - i_mdi_smoking - 領 - i_mdi_smoking_off - 例 - i_mdi_snapchat - 禮 - i_mdi_snowman - 醴 - i_mdi_soccer - 隸 - i_mdi_sofa - 惡 - i_mdi_sort - 了 - i_mdi_sort_alphabetical - 僚 - i_mdi_sort_ascending - 寮 - i_mdi_sort_descending - 尿 - i_mdi_sort_numeric - 料 - i_mdi_sort_variant - 樂 - i_mdi_soundcloud - 燎 - i_mdi_source_fork - 療 - i_mdi_source_pull - 蓼 - i_mdi_speaker - 遼 - i_mdi_speaker_off - 龍 - i_mdi_speedometer - 暈 - i_mdi_spellcheck - 阮 - i_mdi_spotify - 劉 - i_mdi_spotlight - 杻 - i_mdi_spotlight_beam - 柳 - i_mdi_square_inc - 流 - i_mdi_square_inc_cash - 溜 - i_mdi_stack_overflow - 琉 - i_mdi_stairs - 留 - i_mdi_star - 硫 - i_mdi_star_circle - 紐 - i_mdi_star_half - 類 - i_mdi_star_off - 六 - i_mdi_star_outline - 戮 - i_mdi_steam - 陸 - i_mdi_steering - 倫 - i_mdi_step_backward - 崙 - i_mdi_step_backward_2 - 淪 - i_mdi_step_forward - 輪 - i_mdi_step_forward_2 - 律 - i_mdi_stethoscope - 慄 - i_mdi_stocking - 栗 - i_mdi_stop - 率 - i_mdi_store - 隆 - i_mdi_store_24_hour - 利 - i_mdi_stove - 吏 - i_mdi_subway_variant - 履 - i_mdi_sunglasses - 易 - i_mdi_swap_horizontal - 李 - i_mdi_swap_vertical - 梨 - i_mdi_swim - 泥 - i_mdi_switch - 理 - i_mdi_sword - 痢 - i_mdi_sync - 罹 - i_mdi_sync_alert - 裏 - i_mdi_sync_off - 裡 - i_mdi_tab - 里 - i_mdi_tab_unselected - 離 - i_mdi_table - 匿 - i_mdi_table_column_plus_after - 溺 - i_mdi_table_column_plus_before - 吝 - i_mdi_table_column_remove - 燐 - i_mdi_table_column_width - 璘 - i_mdi_table_edit - 藺 - i_mdi_table_large - 隣 - i_mdi_table_row_height - 鱗 - i_mdi_table_row_plus_after - 麟 - i_mdi_table_row_plus_before - 林 - i_mdi_table_row_remove - 淋 - i_mdi_tablet - 臨 - i_mdi_tablet_android - 立 - i_mdi_tablet_ipad - 笠 - i_mdi_tag - 粒 - i_mdi_tag_faces - 狀 - i_mdi_tag_multiple - 炙 - i_mdi_tag_outline - 識 - i_mdi_tag_text_outline - 什 - i_mdi_target - 茶 - i_mdi_taxi - 刺 - i_mdi_teamviewer - 切 - i_mdi_telegram - 度 - i_mdi_television - 拓 - i_mdi_television_guide - 糖 - i_mdi_temperature_celsius - 宅 - i_mdi_temperature_fahrenheit - 洞 - i_mdi_temperature_kelvin - 暴 - i_mdi_tennis - 輻 - i_mdi_tent - 行 - i_mdi_terrain - 降 - i_mdi_text_to_speech - 見 - i_mdi_text_to_speech_off - 廓 - i_mdi_texture - 兀 - i_mdi_theater - 嗀 - i_mdi_theme_light_dark - 﨎 - i_mdi_thermometer - 﨏 - i_mdi_thermometer_lines - 塚 - i_mdi_thumb_down - 﨑 - i_mdi_thumb_down_outline - 晴 - i_mdi_thumb_up - 﨓 - i_mdi_thumb_up_outline - 﨔 - i_mdi_thumbs_up_down - 凞 - i_mdi_ticket - 猪 - i_mdi_ticket_account - 益 - i_mdi_ticket_confirmation - 礼 - i_mdi_tie - 神 - i_mdi_timelapse - 祥 - i_mdi_timer - 福 - i_mdi_timer_10 - 靖 - i_mdi_timer_3 - 精 - i_mdi_timer_off - 羽 - i_mdi_timer_sand - 﨟 - i_mdi_timetable - 蘒 - i_mdi_toggle_switch - 﨡 - i_mdi_toggle_switch_off - 諸 - i_mdi_tooltip - 﨣 - i_mdi_tooltip_edit - 﨤 - i_mdi_tooltip_image - 逸 - i_mdi_tooltip_outline - 都 - i_mdi_tooltip_outline_plus - 﨧 - i_mdi_tooltip_text - 﨨 - i_mdi_tooth - 﨩 - i_mdi_tor - 飯 - i_mdi_traffic_light - 飼 - i_mdi_train - 館 - i_mdi_tram - 鶴 - i_mdi_transcribe - 郞 - i_mdi_transcribe_close - 隷 - i_mdi_transfer - 侮 - i_mdi_tree - 僧 - i_mdi_trello - 免 - i_mdi_trending_down - 勉 - i_mdi_trending_neutral - 勤 - i_mdi_trending_up - 卑 - i_mdi_triangle - 喝 - i_mdi_triangle_outline - 嘆 - i_mdi_trophy - 器 - i_mdi_trophy_award - 塀 - i_mdi_trophy_outline - 墨 - i_mdi_trophy_variant - 層 - i_mdi_trophy_variant_outline - 屮 - i_mdi_truck - 悔 - i_mdi_truck_delivery - 慨 - i_mdi_tshirt_crew - 憎 - i_mdi_tshirt_v - 懲 - i_mdi_tumblr - 敏 - i_mdi_tumblr_reblog - 既 - i_mdi_twitch - 暑 - i_mdi_twitter - 梅 - i_mdi_twitter_box - 海 - i_mdi_twitter_circle - 渚 - i_mdi_twitter_retweet - 漢 - i_mdi_ubuntu - 煮 - i_mdi_umbraco - 爫 - i_mdi_umbrella - 琢 - i_mdi_umbrella_outline - 碑 - i_mdi_undo - 社 - i_mdi_undo_variant - 祉 - i_mdi_unfold_less_horizontal - 祈 - i_mdi_unfold_more_horizontal - 祐 - i_mdi_ungroup - 祖 - i_mdi_untappd - 祝 - i_mdi_upload - 禍 - i_mdi_usb - 禎 - i_mdi_vector_arrange_above - 穀 - i_mdi_vector_arrange_below - 突 - i_mdi_vector_circle - 節 - i_mdi_vector_circle_variant - 練 - i_mdi_vector_combine - 縉 - i_mdi_vector_curve - 繁 - i_mdi_vector_difference - 署 - i_mdi_vector_difference_ab - 者 - i_mdi_vector_difference_ba - 臭 - i_mdi_vector_intersection - 艹 - i_mdi_vector_line - 艹 - i_mdi_vector_point - 著 - i_mdi_vector_polygon - 褐 - i_mdi_vector_polyline - 視 - i_mdi_vector_selection - 謁 - i_mdi_vector_triangle - 謹 - i_mdi_vector_union - 賓 - i_mdi_verified - 贈 - i_mdi_vibrate - 辶 - i_mdi_video - 逸 - i_mdi_video_off - 難 - i_mdi_video_switch - 響 - i_mdi_view_agenda - 頻 - i_mdi_view_array - 恵 - i_mdi_view_carousel - 𤋮 - i_mdi_view_column - 舘 - i_mdi_view_dashboard - 﩮 - i_mdi_view_day - 﩯 - i_mdi_view_grid - 並 - i_mdi_view_headline - 况 - i_mdi_view_list - 全 - i_mdi_view_module - 侀 - i_mdi_view_quilt - 充 - i_mdi_view_stream - 冀 - i_mdi_view_week - 勇 - i_mdi_vimeo - 勺 - i_mdi_venmo - 喝 - i_mdi_vk - 啕 - i_mdi_vk_box - 喙 - i_mdi_vk_circle - 嗢 - i_mdi_vlc - 塚 - i_mdi_voicemail - 墳 - i_mdi_volume_high - 奄 - i_mdi_volume_low - 奔 - i_mdi_volume_medium - 婢 - i_mdi_volume_off - 嬨 - i_mdi_vpn - 廒 - i_mdi_walk - 廙 - i_mdi_wallet - 彩 - i_mdi_wallet_giftcard - 徭 - i_mdi_wallet_membership - 惘 - i_mdi_wallet_travel - 慎 - i_mdi_wan - 愈 - i_mdi_watch - 憎 - i_mdi_watch_export - 慠 - i_mdi_watch_import - 懲 - i_mdi_water - 戴 - i_mdi_water_off - 揄 - i_mdi_water_percent - 搜 - i_mdi_water_pump - 摒 - i_mdi_weather_cloudy - 敖 - i_mdi_weather_fog - 晴 - i_mdi_weather_hail - 朗 - i_mdi_weather_lightning - 望 - i_mdi_weather_night - 杖 - i_mdi_weather_partlycloudy - 歹 - i_mdi_weather_pouring - 殺 - i_mdi_weather_rainy - 流 - i_mdi_weather_snowy - 滛 - i_mdi_weather_sunny - 滋 - i_mdi_weather_sunset - 漢 - i_mdi_weather_sunset_down - 瀞 - i_mdi_weather_sunset_up - 煮 - i_mdi_weather_windy - 瞧 - i_mdi_weather_windy_variant - 爵 - i_mdi_web - 犯 - i_mdi_webcam - 猪 - i_mdi_weight - 瑱 - i_mdi_weight_kilogram - 甆 - i_mdi_whatsapp - 画 - i_mdi_wheelchair_accessibility - 瘝 - i_mdi_white_balance_auto - 瘟 - i_mdi_white_balance_incandescent - 益 - i_mdi_white_balance_iridescent - 盛 - i_mdi_white_balance_sunny - 直 - i_mdi_wifi - 睊 - i_mdi_wifi_off - 着 - i_mdi_wii - 磌 - i_mdi_wikipedia - 窱 - i_mdi_window_close - 節 - i_mdi_window_closed - 类 - i_mdi_window_maximize - 絛 - i_mdi_window_minimize - 練 - i_mdi_window_open - 缾 - i_mdi_window_restore - 者 - i_mdi_windows - 荒 - i_mdi_wordpress - 華 - i_mdi_worker - 蝹 - i_mdi_wrap - 襁 - i_mdi_wrench - 覆 - i_mdi_wunderlist - 視 - i_mdi_xbox - 調 - i_mdi_xbox_controller - 諸 - i_mdi_xbox_controller_off - 請 - i_mdi_xda - 謁 - i_mdi_xing - 諾 - i_mdi_xing_box - 諭 - i_mdi_xing_circle - 謹 - i_mdi_xml - 變 - i_mdi_yeast - 贈 - i_mdi_yelp - 輸 - i_mdi_youtube_play - 遲 - i_mdi_zip_box - 醙 - i_mdi_surround_sound - 鉶 - i_mdi_vector_rectangle - 陼 - i_mdi_playlist_check - 難 - i_mdi_format_line_style - 靖 - i_mdi_format_line_weight - 韛 - i_mdi_translate - 響 - i_mdi_voice - 頋 - i_mdi_opacity - 頻 - i_mdi_near_me - 鬒 - i_mdi_clock_alert - 龜 - i_mdi_human_pregnant - 𢡊 - i_mdi_sticker - 𢡄 - i_mdi_scale_balance - 𣏕 - i_mdi_account_card_details - 㮝 - i_mdi_account_multiple_minus - 䀘 - i_mdi_airplane_landing - 䀹 - i_mdi_airplane_takeoff - 𥉉 - i_mdi_alert_circle_outline - 𥳐 - i_mdi_altimeter - 𧻓 - i_mdi_animation - 齃 - i_mdi_book_minus - 龎 - i_mdi_book_open_page_variant - 﫚 - i_mdi_book_plus - 﫛 - i_mdi_boombox - 﫜 - i_mdi_bullseye - 﫝 - i_mdi_comment_remove - 﫞 - i_mdi_camera_off - 﫟 - i_mdi_check_circle - 﫠 - i_mdi_check_circle_outline - 﫡 - i_mdi_candle - 﫢 - i_mdi_chart_bubble - 﫣 - i_mdi_credit_card_off - 﫤 - i_mdi_cup_off - 﫥 - i_mdi_copyright - 﫦 - i_mdi_cursor_text - 﫧 - i_mdi_delete_forever - 﫨 - i_mdi_delete_sweep - 﫩 - i_mdi_dice_d20 - 﫪 - i_mdi_dice_d4 - 﫫 - i_mdi_dice_d6 - 﫬 - i_mdi_dice_d8 - 﫭 - i_mdi_disk - 﫮 - i_mdi_email_open_outline - 﫯 - i_mdi_email_variant - 﫰 - i_mdi_ev_station - 﫱 - i_mdi_food_fork_drink - 﫲 - i_mdi_food_off - 﫳 - i_mdi_format_title - 﫴 - i_mdi_google_maps - 﫵 - i_mdi_heart_pulse - 﫶 - i_mdi_highway - 﫷 - i_mdi_home_map_marker - 﫸 - i_mdi_incognito - 﫹 - i_mdi_kettle - 﫺 - i_mdi_lock_plus - 﫻 - i_mdi_login_variant - 﫼 - i_mdi_logout_variant - 﫽 - i_mdi_music_note_bluetooth - 﫾 - i_mdi_music_note_bluetooth_off - 﫿 - i_mdi_page_first - ff - i_mdi_page_last - fi - i_mdi_phone_classic - fl - i_mdi_priority_high - ffi - i_mdi_priority_low - ffl - i_mdi_qqchat - ſt - i_mdi_pool - st - i_mdi_rounded_corner - ﬇ - i_mdi_rowing - ﬈ - i_mdi_saxophone - ﬉ - i_mdi_signal_variant - ﬊ - i_mdi_stackexchange - ﬋ - i_mdi_subdirectory_arrow_left - ﬌ - i_mdi_subdirectory_arrow_right - ﬍ - i_mdi_textbox - ﬎ - i_mdi_violin - ﬏ - i_mdi_visualstudio - ﬐ - i_mdi_wechat - ﬑ - i_mdi_watermark - ﬒ - i_mdi_file_hidden - ﬓ - i_mdi_application - ﬔ - i_mdi_arrow_collapse - ﬕ - i_mdi_arrow_expand - ﬖ - i_mdi_bowl - ﬗ - i_mdi_bridge - ﬘ - i_mdi_buffer - ﬙ - i_mdi_chip - ﬚ - i_mdi_content_save_settings - ﬛ - i_mdi_dialpad - ﬜ - i_mdi_dictionary - יִ - i_mdi_format_horizontal_align_center - ﬞ - i_mdi_format_horizontal_align_left - ײַ - i_mdi_format_horizontal_align_right - ﬠ - i_mdi_format_vertical_align_bottom - ﬡ - i_mdi_format_vertical_align_center - ﬢ - i_mdi_format_vertical_align_top - ﬣ - i_mdi_hackernews - ﬤ - i_mdi_help_circle_outline - ﬥ - i_mdi_json - ﬦ - i_mdi_lambda - ﬧ - i_mdi_matrix - ﬨ - i_mdi_meteor - ﬩ - i_mdi_mixcloud - שׁ - i_mdi_sigma_lower - שׂ - i_mdi_source_branch - שּׁ - i_mdi_source_merge - שּׂ - i_mdi_tune - אַ - i_mdi_webhook - אָ - i_mdi_account_settings - אּ - i_mdi_account_settings_variant - בּ - i_mdi_apple_keyboard_caps - גּ - i_mdi_apple_keyboard_command - דּ - i_mdi_apple_keyboard_control - הּ - i_mdi_apple_keyboard_option - וּ - i_mdi_apple_keyboard_shift - זּ - i_mdi_box_shadow - ﬷ - i_mdi_cards - טּ - i_mdi_cards_outline - יּ - i_mdi_cards_playing_outline - ךּ - i_mdi_checkbox_multiple_blank_circle - כּ - i_mdi_checkbox_multiple_blank_circle_outline - לּ - i_mdi_checkbox_multiple_marked_circle - ﬽ - i_mdi_checkbox_multiple_marked_circle_outline - מּ - i_mdi_cloud_sync - ﬿ - i_mdi_collage - נּ - i_mdi_directions_fork - סּ - i_mdi_eraser_variant - ﭂ - i_mdi_face - ףּ - i_mdi_face_profile - פּ - i_mdi_file_tree - ﭅ - i_mdi_format_annotation_plus - צּ - i_mdi_gas_cylinder - קּ - i_mdi_grease_pencil - רּ - i_mdi_human_female - שּ - i_mdi_human_greeting - תּ - i_mdi_human_handsdown - וֹ - i_mdi_human_handsup - בֿ - i_mdi_human_male - כֿ - i_mdi_information_variant - פֿ - i_mdi_lead_pencil - ﭏ - i_mdi_map_marker_minus - ﭐ - i_mdi_map_marker_plus - ﭑ - i_mdi_marker - ﭒ - i_mdi_message_plus - ﭓ - i_mdi_microscope - ﭔ - i_mdi_move_resize - ﭕ - i_mdi_move_resize_variant - ﭖ - i_mdi_paw_off - ﭗ - i_mdi_phone_minus - ﭘ - i_mdi_phone_plus - ﭙ - i_mdi_pot - ﭚ - i_mdi_pot_mix - ﭛ - i_mdi_serial_port - ﭜ - i_mdi_shape_circle_plus - ﭝ - i_mdi_shape_polygon_plus - ﭞ - i_mdi_shape_rectangle_plus - ﭟ - i_mdi_shape_square_plus - ﭠ - i_mdi_skip_next_circle - ﭡ - i_mdi_skip_next_circle_outline - ﭢ - i_mdi_skip_previous_circle - ﭣ - i_mdi_skip_previous_circle_outline - ﭤ - i_mdi_spray - ﭥ - i_mdi_stop_circle - ﭦ - i_mdi_stop_circle_outline - ﭧ - i_mdi_test_tube - ﭨ - i_mdi_text_shadow - ﭩ - i_mdi_tune_vertical - ﭪ - i_mdi_cart_off - ﭫ - i_mdi_chart_gantt - ﭬ - i_mdi_chart_scatterplot_hexbin - ﭭ - i_mdi_chart_timeline - ﭮ - i_mdi_discord - ﭯ - i_mdi_file_restore - ﭰ - i_mdi_language_c - ﭱ - i_mdi_language_cpp - ﭲ - i_mdi_xaml - ﭳ - i_mdi_bandcamp - ﭴ - i_mdi_credit_card_plus - ﭵ - i_mdi_itunes - ﭶ - i_mdi_bow_tie - ﭷ - i_mdi_calendar_range - ﭸ - i_mdi_currency_usd_off - ﭹ - i_mdi_flash_red_eye - ﭺ - i_mdi_oar - ﭻ - i_mdi_piano - ﭼ - i_mdi_weather_lightning_rainy - ﭽ - i_mdi_weather_snowy_rainy - ﭾ - i_mdi_yin_yang - ﭿ - i_mdi_tower_beach - ﮀ - i_mdi_tower_fire - ﮁ - i_mdi_delete_circle - ﮂ - i_mdi_dna - ﮃ - i_mdi_hamburger - ﮄ - i_mdi_gondola - ﮅ - i_mdi_inbox - ﮆ - i_mdi_reorder_horizontal - ﮇ - i_mdi_reorder_vertical - ﮈ - i_mdi_security_home - ﮉ - i_mdi_tag_heart - ﮊ - i_mdi_skull - ﮋ - i_mdi_solid - ﮌ - i_mdi_alarm_snooze - ﮍ - i_mdi_baby_buggy - ﮎ - i_mdi_beaker - ﮏ - i_mdi_bomb - ﮐ - i_mdi_calendar_question - ﮑ - i_mdi_camera_burst - ﮒ - i_mdi_code_tags_check - ﮓ - i_mdi_coins - ﮔ - i_mdi_crop_rotate - ﮕ - i_mdi_developer_board - ﮖ - i_mdi_do_not_disturb - ﮗ - i_mdi_do_not_disturb_off - ﮘ - i_mdi_douban - ﮙ - i_mdi_emoticon_dead - ﮚ - i_mdi_emoticon_excited - ﮛ - i_mdi_folder_star - ﮜ - i_mdi_format_color_text - ﮝ - i_mdi_format_section - ﮞ - i_mdi_gradient - ﮟ - i_mdi_home_outline - ﮠ - i_mdi_message_bulleted - ﮡ - i_mdi_message_bulleted_off - ﮢ - i_mdi_nuke - ﮣ - i_mdi_power_plug - ﮤ - i_mdi_power_plug_off - ﮥ - i_mdi_publish - ﮦ - i_mdi_restore - ﮧ - i_mdi_robot - ﮨ - i_mdi_format_rotate_90 - ﮩ - i_mdi_scanner - ﮪ - i_mdi_subway - ﮫ - i_mdi_timer_sand_empty - ﮬ - i_mdi_transit_transfer - ﮭ - i_mdi_unity - ﮮ - i_mdi_update - ﮯ - i_mdi_watch_vibrate - ﮰ - i_mdi_angular - ﮱ - i_mdi_dolby - ﮲ - i_mdi_emby - ﮳ - i_mdi_lamp - ﮴ - i_mdi_menu_down_outline - ﮵ - i_mdi_menu_up_outline - ﮶ - i_mdi_note_multiple - ﮷ - i_mdi_note_multiple_outline - ﮸ - i_mdi_plex - ﮹ - i_mdi_plane_shield - ﮺ - i_mdi_account_edit - ﮻ - i_mdi_alert_decagram - ﮼ - i_mdi_all_inclusive - ﮽ - i_mdi_angularjs - ﮾ - i_mdi_arrow_down_box - ﮿ - i_mdi_arrow_left_box - ﯀ - i_mdi_arrow_right_box - ﯁ - i_mdi_arrow_up_box - ﯂ - i_mdi_asterisk - ﯃ - i_mdi_bomb_off - ﯄ - i_mdi_bootstrap - ﯅ - i_mdi_cards_variant - ﯆ - i_mdi_clipboard_flow - ﯇ - i_mdi_close_outline - ﯈ - i_mdi_coffee_outline - ﯉ - i_mdi_contacts - ﯊ - i_mdi_delete_empty - ﯋ - i_mdi_earth_box - ﯌ - i_mdi_earth_box_off - ﯍ - i_mdi_email_alert - ﯎ - i_mdi_eye_outline - ﯏ - i_mdi_eye_off_outline - ﯐ - i_mdi_fast_forward_outline - ﯑ - i_mdi_feather - ﯒ - i_mdi_find_replace - ﯓ - i_mdi_flash_outline - ﯔ - i_mdi_format_font - ﯕ - i_mdi_format_page_break - ﯖ - i_mdi_format_pilcrow - ﯗ - i_mdi_garage - ﯘ - i_mdi_garage_open - ﯙ - i_mdi_github_face - ﯚ - i_mdi_google_keep - ﯛ - i_mdi_google_photos - ﯜ - i_mdi_heart_half_full - ﯝ - i_mdi_heart_half - ﯞ - i_mdi_heart_half_outline - ﯟ - i_mdi_hexagon_multiple - ﯠ - i_mdi_hook - ﯡ - i_mdi_hook_off - ﯢ - i_mdi_infinity - ﯣ - i_mdi_language_swift - ﯤ - i_mdi_language_typescript - ﯥ - i_mdi_laptop_off - ﯦ - i_mdi_lightbulb_on - ﯧ - i_mdi_lightbulb_on_outline - ﯨ - i_mdi_lock_pattern - ﯩ - i_mdi_loop - ﯪ - i_mdi_magnify_minus_outline - ﯫ - i_mdi_magnify_plus_outline - ﯬ - i_mdi_mailbox - ﯭ - i_mdi_medical_bag - ﯮ - i_mdi_message_settings - ﯯ - i_mdi_message_settings_variant - ﯰ - i_mdi_minus_box_outline - ﯱ - i_mdi_network - ﯲ - i_mdi_download_network - ﯳ - i_mdi_help_network - ﯴ - i_mdi_upload_network - ﯵ - i_mdi_npm - ﯶ - i_mdi_nut - ﯷ - i_mdi_octagram - ﯸ - i_mdi_page_layout_body - ﯹ - i_mdi_page_layout_footer - ﯺ - i_mdi_page_layout_header - ﯻ - i_mdi_page_layout_sidebar_left - ﯼ - i_mdi_page_layout_sidebar_right - ﯽ - i_mdi_pencil_circle - ﯾ - i_mdi_pentagon - ﯿ - i_mdi_pentagon_outline - ﰀ - i_mdi_pillar - ﰁ - i_mdi_pistol - ﰂ - i_mdi_plus_box_outline - ﰃ - i_mdi_plus_outline - ﰄ - i_mdi_prescription - ﰅ - i_mdi_printer_settings - ﰆ - i_mdi_react - ﰇ - i_mdi_restart - ﰈ - i_mdi_rewind_outline - ﰉ - i_mdi_rhombus - ﰊ - i_mdi_rhombus_outline - ﰋ - i_mdi_roomba - ﰌ - i_mdi_run - ﰍ - i_mdi_search_web - ﰎ - i_mdi_shovel - ﰏ - i_mdi_shovel_off - ﰐ - i_mdi_signal_2g - ﰑ - i_mdi_signal_3g - ﰒ - i_mdi_signal_4g - ﰓ - i_mdi_signal_hspa - ﰔ - i_mdi_signal_hspa_plus - ﰕ - i_mdi_snowflake - ﰖ - i_mdi_source_commit - ﰗ - i_mdi_source_commit_end - ﰘ - i_mdi_source_commit_end_local - ﰙ - i_mdi_source_commit_local - ﰚ - i_mdi_source_commit_next_local - ﰛ - i_mdi_source_commit_start - ﰜ - i_mdi_source_commit_start_next_local - ﰝ - i_mdi_speaker_wireless - ﰞ - i_mdi_stadium - ﰟ - i_mdi_svg - ﰠ - i_mdi_tag_plus - ﰡ - i_mdi_tag_remove - ﰢ - i_mdi_ticket_percent - ﰣ - i_mdi_tilde - ﰤ - i_mdi_treasure_chest - ﰥ - i_mdi_truck_trailer - ﰦ - i_mdi_view_parallel - ﰧ - i_mdi_view_sequential - ﰨ - i_mdi_washing_machine - ﰩ - i_mdi_webpack - ﰪ - i_mdi_widgets - ﰫ - i_mdi_wiiu - ﰬ - i_mdi_arrow_down_bold - ﰭ - i_mdi_arrow_down_bold_box - ﰮ - i_mdi_arrow_down_bold_box_outline - ﰯ - i_mdi_arrow_left_bold - ﰰ - i_mdi_arrow_left_bold_box - ﰱ - i_mdi_arrow_left_bold_box_outline - ﰲ - i_mdi_arrow_right_bold - ﰳ - i_mdi_arrow_right_bold_box - ﰴ - i_mdi_arrow_right_bold_box_outline - ﰵ - i_mdi_arrow_up_bold - ﰶ - i_mdi_arrow_up_bold_box - ﰷ - i_mdi_arrow_up_bold_box_outline - ﰸ - i_mdi_cancel - ﰹ - i_mdi_file_account - ﰺ - i_mdi_gesture_double_tap - ﰻ - i_mdi_gesture_swipe_down - ﰼ - i_mdi_gesture_swipe_left - ﰽ - i_mdi_gesture_swipe_right - ﰾ - i_mdi_gesture_swipe_up - ﰿ - i_mdi_gesture_tap - ﱀ - i_mdi_gesture_two_double_tap - ﱁ - i_mdi_gesture_two_tap - ﱂ - i_mdi_humble_bundle - ﱃ - i_mdi_kickstarter - ﱄ - i_mdi_netflix - ﱅ - i_mdi_onenote - ﱆ - i_mdi_periscope - ﱇ - i_mdi_uber - ﱈ - i_mdi_vector_radius - ﱉ - i_mdi_xbox_controller_battery_alert - ﱊ - i_mdi_xbox_controller_battery_empty - ﱋ - i_mdi_xbox_controller_battery_full - ﱌ - i_mdi_xbox_controller_battery_low - ﱍ - i_mdi_xbox_controller_battery_medium - ﱎ - i_mdi_xbox_controller_battery_unknown - ﱏ - i_mdi_clipboard_plus - ﱐ - i_mdi_file_plus - ﱑ - i_mdi_format_align_bottom - ﱒ - i_mdi_format_align_middle - ﱓ - i_mdi_format_align_top - ﱔ - i_mdi_format_list_checks - ﱕ - i_mdi_format_quote_open - ﱖ - i_mdi_grid_large - ﱗ - i_mdi_heart_off - ﱘ - i_mdi_music - ﱙ - i_mdi_music_off - ﱚ - i_mdi_tab_plus - ﱛ - i_mdi_volume_plus - ﱜ - i_mdi_volume_minus - ﱝ - i_mdi_volume_mute - ﱞ - i_mdi_unfold_less_vertical - ﱟ - i_mdi_unfold_more_vertical - ﱠ - i_mdi_taco - ﱡ - i_mdi_square_outline - ﱢ - i_mdi_square - ﱣ - i_mdi_circle - ﱤ - i_mdi_circle_outline - ﱥ - i_mdi_alert_octagram - ﱦ - i_mdi_atom - ﱧ - i_mdi_ceiling_light - ﱨ - i_mdi_chart_bar_stacked - ﱩ - i_mdi_chart_line_stacked - ﱪ - i_mdi_decagram - ﱫ - i_mdi_decagram_outline - ﱬ - i_mdi_dice_multiple - ﱭ - i_mdi_dice_d10 - ﱮ - i_mdi_folder_open - ﱯ - i_mdi_guitar_acoustic - ﱰ - i_mdi_loading - ﱱ - i_mdi_lock_reset - ﱲ - i_mdi_ninja - ﱳ - i_mdi_octagram_outline - ﱴ - i_mdi_pencil_circle_outline - ﱵ - i_mdi_selection_off - ﱶ - i_mdi_set_all - ﱷ - i_mdi_set_center - ﱸ - i_mdi_set_center_right - ﱹ - i_mdi_set_left - ﱺ - i_mdi_set_left_center - ﱻ - i_mdi_set_left_right - ﱼ - i_mdi_set_none - ﱽ - i_mdi_set_right - ﱾ - i_mdi_shield_half_full - ﱿ - i_mdi_sign_direction - ﲀ - i_mdi_sign_text - ﲁ - i_mdi_signal_off - ﲂ - i_mdi_square_root - ﲃ - i_mdi_sticker_emoji - ﲄ - i_mdi_summit - ﲅ - i_mdi_sword_cross - ﲆ - i_mdi_truck_fast - ﲇ - i_mdi_yammer - ﲈ - i_mdi_cast_off - ﲉ - i_mdi_help_box - ﲊ - i_mdi_timer_sand_full - ﲋ - i_mdi_waves - ﲌ - i_mdi_alarm_bell - ﲍ - i_mdi_alarm_light - ﲎ - i_mdi_android_head - ﲏ - i_mdi_approval - ﲐ - i_mdi_arrow_collapse_down - ﲑ - i_mdi_arrow_collapse_left - ﲒ - i_mdi_arrow_collapse_right - ﲓ - i_mdi_arrow_collapse_up - ﲔ - i_mdi_arrow_expand_down - ﲕ - i_mdi_arrow_expand_left - ﲖ - i_mdi_arrow_expand_right - ﲗ - i_mdi_arrow_expand_up - ﲘ - i_mdi_book_secure - ﲙ - i_mdi_book_unsecure - ﲚ - i_mdi_bus_articulated_end - ﲛ - i_mdi_bus_articulated_front - ﲜ - i_mdi_bus_double_decker - ﲝ - i_mdi_bus_school - ﲞ - i_mdi_bus_side - ﲟ - i_mdi_camera_gopro - ﲠ - i_mdi_camera_metering_center - ﲡ - i_mdi_camera_metering_matrix - ﲢ - i_mdi_camera_metering_partial - ﲣ - i_mdi_camera_metering_spot - ﲤ - i_mdi_cannabis - ﲥ - i_mdi_car_convertible - ﲦ - i_mdi_car_estate - ﲧ - i_mdi_car_hatchback - ﲨ - i_mdi_car_pickup - ﲩ - i_mdi_car_side - ﲪ - i_mdi_car_sports - ﲫ - i_mdi_caravan - ﲬ - i_mdi_cctv - ﲭ - i_mdi_chart_donut - ﲮ - i_mdi_chart_donut_variant - ﲯ - i_mdi_chart_line_variant - ﲰ - i_mdi_chili_hot - ﲱ - i_mdi_chili_medium - ﲲ - i_mdi_chili_mild - ﲳ - i_mdi_cloud_braces - ﲴ - i_mdi_cloud_tags - ﲵ - i_mdi_console_line - ﲶ - i_mdi_corn - ﲷ - i_mdi_currency_chf - ﲸ - i_mdi_currency_cny - ﲹ - i_mdi_currency_eth - ﲺ - i_mdi_currency_jpy - ﲻ - i_mdi_currency_krw - ﲼ - i_mdi_currency_sign - ﲽ - i_mdi_currency_twd - ﲾ - i_mdi_desktop_classic - ﲿ - i_mdi_dip_switch - ﳀ - i_mdi_donkey - ﳁ - i_mdi_dots_horizontal_circle - ﳂ - i_mdi_dots_vertical_circle - ﳃ - i_mdi_ear_hearing - ﳄ - i_mdi_elephant - ﳅ - i_mdi_eventbrite - ﳆ - i_mdi_food_croissant - ﳇ - i_mdi_forklift - ﳈ - i_mdi_fuel - ﳉ - i_mdi_gesture - ﳊ - i_mdi_google_analytics - ﳋ - i_mdi_google_assistant - ﳌ - i_mdi_headphones_off - ﳍ - i_mdi_high_definition - ﳎ - i_mdi_home_assistant - ﳏ - i_mdi_home_automation - ﳐ - i_mdi_home_circle - ﳑ - i_mdi_language_go - ﳒ - i_mdi_language_r - ﳓ - i_mdi_lava_lamp - ﳔ - i_mdi_led_strip - ﳕ - i_mdi_locker - ﳖ - i_mdi_locker_multiple - ﳗ - i_mdi_map_marker_outline - ﳘ - i_mdi_metronome - ﳙ - i_mdi_metronome_tick - ﳚ - i_mdi_micro_sd - ﳛ - i_mdi_mixer - ﳜ - i_mdi_movie_roll - ﳝ - i_mdi_mushroom - ﳞ - i_mdi_mushroom_outline - ﳟ - i_mdi_nintendo_switch - ﳠ - i_mdi_null - ﳡ - i_mdi_passport - ﳢ - i_mdi_periodic_table_co2 - ﳣ - i_mdi_pipe - ﳤ - i_mdi_pipe_disconnected - ﳥ - i_mdi_power_socket_eu - ﳦ - i_mdi_power_socket_uk - ﳧ - i_mdi_power_socket_us - ﳨ - i_mdi_rice - ﳩ - i_mdi_ring - ﳪ - i_mdi_sass - ﳫ - i_mdi_send_secure - ﳬ - i_mdi_soy_sauce - ﳭ - i_mdi_standard_definition - ﳮ - i_mdi_surround_sound_2_0 - ﳯ - i_mdi_surround_sound_3_1 - ﳰ - i_mdi_surround_sound_5_1 - ﳱ - i_mdi_surround_sound_7_1 - ﳲ - i_mdi_television_classic - ﳳ - i_mdi_textbox_password - ﳴ - i_mdi_thought_bubble - ﳵ - i_mdi_thought_bubble_outline - ﳶ - i_mdi_trackpad - ﳷ - i_mdi_ultra_high_definition - ﳸ - i_mdi_van_passenger - ﳹ - i_mdi_van_utility - ﳺ - i_mdi_vanish - ﳻ - i_mdi_video_3d - ﳼ - i_mdi_wall - ﳽ - i_mdi_xmpp - ﳾ - i_mdi_account_multiple_plus_outline - ﳿ - i_mdi_account_plus_outline - ﴀ - i_mdi_allo - ﴁ - i_mdi_artist - ﴂ - i_mdi_atlassian - ﴃ - i_mdi_azure - ﴄ - i_mdi_basketball - ﴅ - i_mdi_battery_charging_wireless - ﴆ - i_mdi_battery_charging_wireless_10 - ﴇ - i_mdi_battery_charging_wireless_20 - ﴈ - i_mdi_battery_charging_wireless_30 - ﴉ - i_mdi_battery_charging_wireless_40 - ﴊ - i_mdi_battery_charging_wireless_50 - ﴋ - i_mdi_battery_charging_wireless_60 - ﴌ - i_mdi_battery_charging_wireless_70 - ﴍ - i_mdi_battery_charging_wireless_80 - ﴎ - i_mdi_battery_charging_wireless_90 - ﴏ - i_mdi_battery_charging_wireless_alert - ﴐ - i_mdi_battery_charging_wireless_outline - ﴑ - i_mdi_bitcoin - ﴒ - i_mdi_briefcase_outline - ﴓ - i_mdi_cellphone_wireless - ﴔ - i_mdi_clover - ﴕ - i_mdi_comment_question - ﴖ - i_mdi_content_save_outline - ﴗ - i_mdi_delete_restore - ﴘ - i_mdi_door - ﴙ - i_mdi_door_closed - ﴚ - i_mdi_door_open - ﴛ - i_mdi_fan_off - ﴜ - i_mdi_file_percent - ﴝ - i_mdi_finance - ﴞ - i_mdi_flash_circle - ﴟ - i_mdi_floor_plan - ﴠ - i_mdi_forum_outline - ﴡ - i_mdi_golf - ﴢ - i_mdi_google_home - ﴣ - i_mdi_guy_fawkes_mask - ﴤ - i_mdi_home_account - ﴥ - i_mdi_home_heart - ﴦ - i_mdi_hot_tub - ﴧ - i_mdi_hulu - ﴨ - i_mdi_ice_cream - ﴩ - i_mdi_image_off - ﴪ - i_mdi_karate - ﴫ - i_mdi_ladybug - ﴬ - i_mdi_notebook - ﴭ - i_mdi_phone_return - ﴮ - i_mdi_poker_chip - ﴯ - i_mdi_shape - ﴰ - i_mdi_shape_outline - ﴱ - i_mdi_ship_wheel - ﴲ - i_mdi_soccer_field - ﴳ - i_mdi_table_column - ﴴ - i_mdi_table_of_contents - ﴵ - i_mdi_table_row - ﴶ - i_mdi_table_settings - ﴷ - i_mdi_television_box - ﴸ - i_mdi_television_classic_off - ﴹ - i_mdi_television_off - ﴺ - i_mdi_towing - ﴻ - i_mdi_upload_multiple - ﴼ - i_mdi_video_4k_box - ﴽ - i_mdi_video_input_antenna - ﴾ - i_mdi_video_input_component - ﴿ - i_mdi_video_input_hdmi - ﵀ - i_mdi_video_input_svideo - ﵁ - i_mdi_view_dashboard_variant - ﵂ - i_mdi_vuejs - ﵃ - i_mdi_xamarin - ﵄ - i_mdi_xamarin_outline - ﵅ - i_mdi_youtube_creator_studio - ﵆ - i_mdi_youtube_gaming - ♥ - i_oct_heart - ⚡ - i_oct_zap -  - i_oct_light_bulb -  - i_oct_repo -  - i_oct_repo_forked -  - i_oct_repo_push -  - i_oct_repo_pull -  - i_oct_book -  - i_oct_octoface -  - i_oct_git_pull_request -  - i_oct_mark_github -  - i_oct_cloud_download -  - i_oct_cloud_upload -  - i_oct_keyboard -  - i_oct_gist -  - i_oct_file_code -  - i_oct_file_text -  - i_oct_file_media -  - i_oct_file_zip -  - i_oct_file_pdf -  - i_oct_tag -  - i_oct_file_directory -  - i_oct_file_submodule -  - i_oct_person -  - i_oct_jersey -  - i_oct_git_commit -  - i_oct_git_branch -  - i_oct_git_merge -  - i_oct_mirror -  - i_oct_issue_opened -  - i_oct_issue_reopened -  - i_oct_issue_closed -  - i_oct_star -  - i_oct_comment -  - i_oct_question -  - i_oct_alert -  - i_oct_search -  - i_oct_gear -  - i_oct_radio_tower -  - i_oct_tools -  - i_oct_sign_out -  - i_oct_rocket -  - i_oct_rss -  - i_oct_clippy -  - i_oct_sign_in -  - i_oct_organization -  - i_oct_device_mobile -  - i_oct_unfold -  - i_oct_check -  - i_oct_mail -  - i_oct_mail_read -  - i_oct_arrow_up -  - i_oct_arrow_right -  - i_oct_arrow_down -  - i_oct_arrow_left -  - i_oct_pin -  - i_oct_gift -  - i_oct_graph -  - i_oct_triangle_left -  - i_oct_credit_card -  - i_oct_clock -  - i_oct_ruby -  - i_oct_broadcast -  - i_oct_key -  - i_oct_repo_force_push -  - i_oct_repo_clone -  - i_oct_diff -  - i_oct_eye -  - i_oct_comment_discussion -  - i_oct_mail_reply -  - i_oct_primitive_dot -  - i_oct_primitive_square -  - i_oct_device_camera -  - i_oct_device_camera_video -  - i_oct_pencil -  - i_oct_info -  - i_oct_triangle_right -  - i_oct_triangle_down -  - i_oct_link -  - i_oct_plus -  - i_oct_three_bars -  - i_oct_code -  - i_oct_location -  - i_oct_list_unordered -  - i_oct_list_ordered -  - i_oct_quote -  - i_oct_versions -  - i_oct_calendar -  - i_oct_lock -  - i_oct_diff_added -  - i_oct_diff_removed -  - i_oct_diff_modified -  - i_oct_diff_renamed -  - i_oct_horizontal_rule -  - i_oct_arrow_small_right -  - i_oct_milestone -  - i_oct_checklist -  - i_oct_megaphone -  - i_oct_chevron_right -  - i_oct_bookmark -  - i_oct_settings -  - i_oct_dashboard -  - i_oct_history -  - i_oct_link_external -  - i_oct_mute -  - i_oct_x -  - i_oct_circle_slash -  - i_oct_pulse -  - i_oct_sync -  - i_oct_telescope -  - i_oct_gist_secret -  - i_oct_home -  - i_oct_stop -  - i_oct_bug -  - i_oct_logo_github -  - i_oct_file_binary -  - i_oct_database -  - i_oct_server -  - i_oct_diff_ignored -  - i_oct_ellipsis -  - i_oct_no_newline -  - i_oct_hubot -  - i_oct_arrow_small_up -  - i_oct_arrow_small_down -  - i_oct_arrow_small_left -  - i_oct_chevron_up -  - i_oct_chevron_down -  - i_oct_chevron_left -  - i_oct_triangle_up -  - i_oct_git_compare -  - i_oct_logo_gist -  - i_oct_file_symlink_file -  - i_oct_file_symlink_directory -  - i_oct_squirrel -  - i_oct_globe -  - i_oct_unmute -  - i_oct_mention -  - i_oct_package -  - i_oct_browser -  - i_oct_terminal -  - i_oct_markdown -  - i_oct_dash -  - i_oct_fold -  - i_oct_inbox -  - i_oct_trashcan -  - i_oct_paintcan -  - i_oct_flame -  - i_oct_briefcase -  - i_oct_plug -  - i_oct_circuit_board -  - i_oct_mortar_board -  - i_oct_law -  - i_oct_thumbsup -  - i_oct_thumbsdown -  - i_oct_desktop_download -  - i_oct_beaker -  - i_oct_bell -  - i_oct_watch -  - i_oct_shield -  - i_oct_bold -  - i_oct_text_size -  - i_oct_italic -  - i_oct_tasklist -  - i_oct_verified -  - i_oct_smiley -  - i_oct_unverified -  - i_oct_ellipses -  - i_oct_file -  - i_oct_grabber -  - i_oct_plus_small -  - i_oct_reply -  - i_oct_device_desktop -  - i_pl_branch -  - i_pl_line_number i_pl_current_line_pl_line_number -  - i_pl_hostname i_pl_readonly_pl_hostname -  - i_ple_column_number i_ple_current_column_ple_column_number -  - i_pl_left_hard_divider -  - i_pl_left_soft_divider -  - i_pl_right_hard_divider -  - i_pl_right_soft_divider -  - i_ple_right_half_circle_thick -  - i_ple_right_half_circle_thin -  - i_ple_left_half_circle_thick -  - i_ple_left_half_circle_thin -  - i_ple_lower_left_triangle -  - i_ple_backslash_separator -  - i_ple_lower_right_triangle -  - i_ple_forwardslash_separator -  - i_ple_upper_left_triangle -  - i_ple_forwardslash_separator_redundant -  - i_ple_upper_right_triangle -  - i_ple_backslash_separator_redundant -  - i_ple_flame_thick -  - i_ple_flame_thin -  - i_ple_flame_thick_mirrored -  - i_ple_flame_thin_mirrored -  - i_ple_pixelated_squares_small -  - i_ple_pixelated_squares_small_mirrored -  - i_ple_pixelated_squares_big -  - i_ple_pixelated_squares_big_mirrored -  - i_ple_ice_waveform -  - i_ple_ice_waveform_mirrored -  - i_ple_honeycomb -  - i_ple_honeycomb_outline -  - i_ple_lego_separator -  - i_ple_lego_separator_thin -  - i_ple_lego_block_facing -  - i_ple_lego_block_sideways -  - i_ple_trapezoid_top_bottom -  - i_ple_trapezoid_top_bottom_mirrored -  - i_pom_clean_code -  - i_pom_pomodoro_done -  - i_pom_pomodoro_estimated -  - i_pom_pomodoro_ticking -  - i_pom_pomodoro_squashed -  - i_pom_short_pause -  - i_pom_long_pause -  - i_pom_away -  - i_pom_pair_programming -  - i_pom_internal_interruption -  - i_pom_external_interruption -  - i_custom_folder_npm -  - i_custom_folder_git i_custom_folder_git_branch_custom_folder_git -  - i_custom_folder_config -  - i_custom_folder_github -  - i_custom_folder_open -  - i_custom_folder -  - i_seti_stylus -  - i_seti_project -  - i_seti_play_arrow -  - i_seti_sass -  - i_seti_rails -  - i_seti_ruby -  - i_seti_python -  - i_seti_heroku -  - i_seti_php -  - i_seti_markdown -  - i_seti_license -  - i_seti_json i_seti_less_seti_json -  - i_seti_javascript -  - i_seti_image -  - i_seti_html -  - i_seti_mustache -  - i_seti_gulp -  - i_seti_grunt -  - i_seti_default i_seti_text_seti_default -  - i_seti_folder -  - i_seti_css -  - i_seti_config -  - i_seti_npm -  - i_seti_home -  - i_seti_ejs -  - i_seti_xml -  - i_seti_bower -  - i_seti_coffee i_seti_cjsx_seti_coffee -  - i_seti_twig -  - i_custom_cpp -  - i_custom_c -  - i_seti_haskell -  - i_seti_lua -  - i_indent_line i_indentation_line_indent_line i_indent_dotted_guide_indent_line -  - i_seti_karma -  - i_seti_favicon -  - i_seti_julia -  - i_seti_react -  - i_custom_go -  - i_seti_go -  - i_seti_typescript -  - i_custom_msdos -  - i_custom_windows -  - i_custom_vim -  - i_custom_elm -  - i_custom_elixir -  - i_custom_electron -  - i_weather_day_cloudy_gusts -  - i_weather_day_cloudy_windy -  - i_weather_day_cloudy -  - i_weather_day_fog -  - i_weather_day_hail -  - i_weather_day_lightning -  - i_weather_day_rain_mix -  - i_weather_day_rain_wind -  - i_weather_day_rain -  - i_weather_day_showers -  - i_weather_day_snow -  - i_weather_day_sprinkle -  - i_weather_day_sunny_overcast -  - i_weather_day_sunny -  - i_weather_day_storm_showers -  - i_weather_day_thunderstorm -  - i_weather_cloudy_gusts -  - i_weather_cloudy_windy -  - i_weather_cloudy -  - i_weather_fog -  - i_weather_hail -  - i_weather_lightning -  - i_weather_rain_mix -  - i_weather_rain_wind -  - i_weather_rain -  - i_weather_showers -  - i_weather_snow -  - i_weather_sprinkle -  - i_weather_storm_showers -  - i_weather_thunderstorm -  - i_weather_windy -  - i_weather_night_alt_cloudy_gusts -  - i_weather_night_alt_cloudy_windy -  - i_weather_night_alt_hail -  - i_weather_night_alt_lightning -  - i_weather_night_alt_rain_mix -  - i_weather_night_alt_rain_wind -  - i_weather_night_alt_rain -  - i_weather_night_alt_rain_mix -  - i_weather_night_alt_snow -  - i_weather_night_alt_sprinkle -  - i_weather_night_alt_storm_showers -  - i_weather_night_alt_thunderstorm -  - i_weather_night_clear -  - i_weather_night_cloudy_gusts -  - i_weather_night_cloudy_windy -  - i_weather_night_cloudy -  - i_weather_night_hail -  - i_weather_night_lightning -  - i_weather_night_rain_mix -  - i_weather_night_rain_wind -  - i_weather_night_rain -  - i_weather_night_showers -  - i_weather_night_snow -  - i_weather_night_sprinkle -  - i_weather_night_storm_showers -  - i_weather_night_thunderstorm -  - i_weather_celsius -  - i_weather_cloud_down -  - i_weather_cloud_refresh -  - i_weather_cloud_up -  - i_weather_cloud -  - i_weather_degrees -  - i_weather_direction_down_left -  - i_weather_direction_down -  - i_weather_fahrenheit -  - i_weather_horizon_alt -  - i_weather_horizon -  - i_weather_direction_left -  - i_weather_aliens -  - i_weather_night_fog -  - i_weather_refresh_alt -  - i_weather_refresh -  - i_weather_direction_right -  - i_weather_raindrops -  - i_weather_strong_wind -  - i_weather_sunrise -  - i_weather_sunset -  - i_weather_thermometer_exterior -  - i_weather_thermometer_internal -  - i_weather_thermometer -  - i_weather_tornado -  - i_weather_direction_up_right -  - i_weather_direction_up -  - i_weather_wind_west -  - i_weather_wind_south_west -  - i_weather_wind_south_east -  - i_weather_wind_south -  - i_weather_wind_north_west -  - i_weather_wind_north_east -  - i_weather_wind_north -  - i_weather_wind_east -  - i_weather_smoke -  - i_weather_dust -  - i_weather_snow_wind -  - i_weather_day_snow_wind -  - i_weather_night_snow_wind -  - i_weather_night_alt_snow_wind -  - i_weather_day_sleet_storm -  - i_weather_night_sleet_storm -  - i_weather_night_alt_sleet_storm -  - i_weather_day_snow_thunderstorm -  - i_weather_night_snow_thunderstorm -  - i_weather_night_alt_snow_thunderstorm -  - i_weather_solar_eclipse -  - i_weather_lunar_eclipse -  - i_weather_meteor -  - i_weather_hot -  - i_weather_hurricane -  - i_weather_smog -  - i_weather_alien -  - i_weather_snowflake_cold -  - i_weather_stars -  - i_weather_raindrop -  - i_weather_barometer -  - i_weather_humidity -  - i_weather_na -  - i_weather_flood -  - i_weather_day_cloudy_high -  - i_weather_night_alt_cloudy_high -  - i_weather_night_cloudy_high -  - i_weather_night_alt_partly_cloudy -  - i_weather_sandstorm -  - i_weather_night_partly_cloudy -  - i_weather_umbrella -  - i_weather_day_windy -  - i_weather_night_alt_cloudy -  - i_weather_direction_up_left -  - i_weather_direction_down_right -  - i_weather_time_12 -  - i_weather_time_1 -  - i_weather_time_2 -  - i_weather_time_3 -  - i_weather_time_4 -  - i_weather_time_5 -  - i_weather_time_6 -  - i_weather_time_7 -  - i_weather_time_8 -  - i_weather_time_9 -  - i_weather_time_10 -  - i_weather_time_11 -  - i_weather_moon_new -  - i_weather_moon_waxing_crescent_1 -  - i_weather_moon_waxing_crescent_2 -  - i_weather_moon_waxing_crescent_3 -  - i_weather_moon_waxing_crescent_4 -  - i_weather_moon_waxing_crescent_5 -  - i_weather_moon_waxing_crescent_6 -  - i_weather_moon_first_quarter -  - i_weather_moon_waxing_gibbous_1 -  - i_weather_moon_waxing_gibbous_2 -  - i_weather_moon_waxing_gibbous_3 -  - i_weather_moon_waxing_gibbous_4 -  - i_weather_moon_waxing_gibbous_5 -  - i_weather_moon_waxing_gibbous_6 -  - i_weather_moon_full -  - i_weather_moon_waning_gibbous_1 -  - i_weather_moon_waning_gibbous_2 -  - i_weather_moon_waning_gibbous_3 -  - i_weather_moon_waning_gibbous_4 -  - i_weather_moon_waning_gibbous_5 -  - i_weather_moon_waning_gibbous_6 -  - i_weather_moon_third_quarter -  - i_weather_moon_waning_crescent_1 -  - i_weather_moon_waning_crescent_2 -  - i_weather_moon_waning_crescent_3 -  - i_weather_moon_waning_crescent_4 -  - i_weather_moon_waning_crescent_5 -  - i_weather_moon_waning_crescent_6 -  - i_weather_wind_direction -  - i_weather_day_sleet -  - i_weather_night_sleet -  - i_weather_night_alt_sleet -  - i_weather_sleet -  - i_weather_day_haze -  - i_weather_wind_beaufort_0 -  - i_weather_wind_beaufort_1 -  - i_weather_wind_beaufort_2 -  - i_weather_wind_beaufort_3 -  - i_weather_wind_beaufort_4 -  - i_weather_wind_beaufort_5 -  - i_weather_wind_beaufort_6 -  - i_weather_wind_beaufort_7 -  - i_weather_wind_beaufort_8 -  - i_weather_wind_beaufort_9 -  - i_weather_wind_beaufort_10 -  - i_weather_wind_beaufort_11 -  - i_weather_wind_beaufort_12 -  - i_weather_day_light_wind -  - i_weather_tsunami -  - i_weather_earthquake -  - i_weather_fire -  - i_weather_volcano -  - i_weather_moonrise -  - i_weather_moonset -  - i_weather_train -  - i_weather_small_craft_advisory -  - i_weather_gale_warning -  - i_weather_storm_warning -  - i_weather_hurricane_warning -  - i_weather_moon_alt_waxing_crescent_1 -  - i_weather_moon_alt_waxing_crescent_2 -  - i_weather_moon_alt_waxing_crescent_3 -  - i_weather_moon_alt_waxing_crescent_4 -  - i_weather_moon_alt_waxing_crescent_5 -  - i_weather_moon_alt_waxing_crescent_6 -  - i_weather_moon_alt_first_quarter -  - i_weather_moon_alt_waxing_gibbous_1 -  - i_weather_moon_alt_waxing_gibbous_2 -  - i_weather_moon_alt_waxing_gibbous_3 -  - i_weather_moon_alt_waxing_gibbous_4 -  - i_weather_moon_alt_waxing_gibbous_5 -  - i_weather_moon_alt_waxing_gibbous_6 -  - i_weather_moon_alt_full -  - i_weather_moon_alt_waning_gibbous_1 -  - i_weather_moon_alt_waning_gibbous_2 -  - i_weather_moon_alt_waning_gibbous_3 -  - i_weather_moon_alt_waning_gibbous_4 -  - i_weather_moon_alt_waning_gibbous_5 -  - i_weather_moon_alt_waning_gibbous_6 -  - i_weather_moon_alt_third_quarter -  - i_weather_moon_alt_waning_crescent_1 -  - i_weather_moon_alt_waning_crescent_2 -  - i_weather_moon_alt_waning_crescent_3 -  - i_weather_moon_alt_waning_crescent_4 -  - i_weather_moon_alt_waning_crescent_5 -  - i_weather_moon_alt_waning_crescent_6 -  - i_weather_moon_alt_new + - i_dev_bing_small + - i_dev_css_tricks + - i_dev_git + - i_dev_bitbucket + - i_dev_mysql + - i_dev_streamline + - i_dev_database + - i_dev_dropbox + - i_dev_github_alt + - i_dev_github_badge + - i_dev_github + - i_dev_wordpress + - i_dev_visualstudio + - i_dev_jekyll_small + - i_dev_android + - i_dev_windows + - i_dev_stackoverflow + - i_dev_apple + - i_dev_linux + - i_dev_appstore + - i_dev_ghost_small + - i_dev_yahoo + - i_dev_codepen + - i_dev_github_full + - i_dev_nodejs_small + - i_dev_nodejs + - i_dev_hackernews + - i_dev_ember + - i_dev_dojo + - i_dev_django + - i_dev_npm + - i_dev_ghost + - i_dev_modernizr + - i_dev_unity_small + - i_dev_rasberry_pi + - i_dev_blackberry + - i_dev_go + - i_dev_git_branch + - i_dev_git_pull_request + - i_dev_git_merge + - i_dev_git_compare + - i_dev_git_commit + - i_dev_cssdeck + - i_dev_yahoo_small + - i_dev_techcrunch + - i_dev_smashing_magazine + - i_dev_netmagazine + - i_dev_codrops + - i_dev_phonegap + - i_dev_google_drive + - i_dev_html5_multimedia + - i_dev_html5_device_access + - i_dev_html5_connectivity + - i_dev_html5_3d_effects + - i_dev_html5 + - i_dev_scala + - i_dev_java + - i_dev_ruby + - i_dev_ubuntu + - i_dev_ruby_on_rails + - i_dev_python + - i_dev_php + - i_dev_markdown + - i_dev_laravel + - i_dev_magento + - i_dev_joomla + - i_dev_drupal + - i_dev_chrome + - i_dev_ie + - i_dev_firefox + - i_dev_opera + - i_dev_bootstrap + - i_dev_safari + - i_dev_css3 + - i_dev_css3_full + - i_dev_sass + - i_dev_grunt + - i_dev_bower + - i_dev_javascript + - i_dev_javascript_shield + - i_dev_jquery + - i_dev_coffeescript + - i_dev_backbone + - i_dev_angular + - i_dev_jquery_ui + - i_dev_swift + - i_dev_symfony + - i_dev_symfony_badge + - i_dev_less + - i_dev_stylus + - i_dev_trello + - i_dev_atlassian + - i_dev_jira + - i_dev_envato + - i_dev_snap_svg + - i_dev_raphael + - i_dev_chart + - i_dev_compass + - i_dev_onedrive + - i_dev_gulp + - i_dev_atom + - i_dev_cisco + - i_dev_nancy + - i_dev_jenkins + - i_dev_clojure + - i_dev_perl + - i_dev_clojure_alt + - i_dev_celluloid + - i_dev_w3c + - i_dev_redis + - i_dev_postgresql + - i_dev_webplatform + - i_dev_requirejs + - i_dev_opensource + - i_dev_typo3 + - i_dev_uikit + - i_dev_doctrine + - i_dev_groovy + - i_dev_nginx + - i_dev_haskell + - i_dev_zend + - i_dev_gnu + - i_dev_yeoman + - i_dev_heroku + - i_dev_msql_server + - i_dev_debian + - i_dev_travis + - i_dev_dotnet + - i_dev_codeigniter + - i_dev_javascript_badge + - i_dev_yii + - i_dev_composer + - i_dev_krakenjs_badge + - i_dev_krakenjs + - i_dev_mozilla + - i_dev_firebase + - i_dev_sizzlejs + - i_dev_creativecommons + - i_dev_creativecommons_badge + - i_dev_mitlicence + - i_dev_senchatouch + - i_dev_bugsense + - i_dev_extjs + - i_dev_mootools_badge + - i_dev_mootools + - i_dev_ruby_rough + - i_dev_komodo + - i_dev_coda + - i_dev_bintray + - i_dev_terminal + - i_dev_code + - i_dev_responsive + - i_dev_dart + - i_dev_aptana + - i_dev_mailchimp + - i_dev_netbeans + - i_dev_dreamweaver + - i_dev_brackets + - i_dev_eclipse + - i_dev_cloud9 + - i_dev_scrum + - i_dev_prolog + - i_dev_terminal_badge + - i_dev_code_badge + - i_dev_mongodb + - i_dev_meteor + - i_dev_meteorfull + - i_dev_fsharp + - i_dev_rust + - i_dev_ionic + - i_dev_sublime + - i_dev_appcelerator + - i_dev_asterisk + - i_dev_aws + - i_dev_digital_ocean + - i_dev_dlang + - i_dev_docker + - i_dev_erlang + - i_dev_google_cloud_platform + - i_dev_grails + - i_dev_illustrator + - i_dev_intellij + - i_dev_materializecss + - i_dev_openshift + - i_dev_photoshop + - i_dev_rackspace + - i_dev_react + - i_dev_redhat + - i_dev_scriptcs + - i_dev_sqllite + - i_dev_vim + - i_fae_smaller + - i_fae_snowing + - i_fae_soda + - i_fae_sofa + - i_fae_soup + - i_fae_spermatozoon + - i_fae_spin_double + - i_fae_stomach + - i_fae_storm + - i_fae_telescope + - i_fae_thermometer + - i_fae_thermometer_high + - i_fae_thermometer_low + - i_fae_thin_close + - i_fae_toilet + - i_fae_tools + - i_fae_tooth + - i_fae_uterus + - i_fae_w3c + - i_fae_walking + - i_fae_virus + - i_fae_telegram_circle + - i_fae_slash + - i_fae_telegram + - i_fae_shirt + - i_fae_tacos + - i_fae_sushi + - i_fae_triangle_ruler + - i_fae_tree + - i_fae_sun_cloud + - i_fae_ruby_o + - i_fae_ruler + - i_fae_umbrella + - i_fae_medicine + - i_fae_microscope + - i_fae_milk_bottle + - i_fae_minimize + - i_fae_molecule + - i_fae_moon_cloud + - i_fae_mushroom + - i_fae_mustache + - i_fae_mysql + - i_fae_nintendo + - i_fae_palette_color + - i_fae_pi + - i_fae_pizza + - i_fae_planet + - i_fae_plant + - i_fae_playstation + - i_fae_poison + - i_fae_popcorn + - i_fae_popsicle + - i_fae_pulse + - i_fae_python + - i_fae_quora_circle + - i_fae_quora_square + - i_fae_radioactive + - i_fae_raining + - i_fae_real_heart + - i_fae_refrigerator + - i_fae_restore + - i_fae_ring + - i_fae_ruby + - i_fae_fingerprint + - i_fae_floppy + - i_fae_footprint + - i_fae_freecodecamp + - i_fae_galaxy + - i_fae_galery + - i_fae_glass + - i_fae_google_drive + - i_fae_google_play + - i_fae_gps + - i_fae_grav + - i_fae_guitar + - i_fae_gut + - i_fae_halter + - i_fae_hamburger + - i_fae_hat + - i_fae_hexagon + - i_fae_high_heel + - i_fae_hotdog + - i_fae_ice_cream + - i_fae_id_card + - i_fae_imdb + - i_fae_infinity + - i_fae_java + - i_fae_layers + - i_fae_lips + - i_fae_lipstick + - i_fae_liver + - i_fae_lung + - i_fae_makeup_brushes + - i_fae_maximize + - i_fae_wallet + - i_fae_chess_horse + - i_fae_chess_king + - i_fae_chess_pawn + - i_fae_chess_queen + - i_fae_chess_tower + - i_fae_cheese + - i_fae_chilli + - i_fae_chip + - i_fae_cicling + - i_fae_cloud + - i_fae_cockroach + - i_fae_coffe_beans + - i_fae_coins + - i_fae_comb + - i_fae_comet + - i_fae_crown + - i_fae_cup_coffe + - i_fae_dice + - i_fae_disco + - i_fae_dna + - i_fae_donut + - i_fae_dress + - i_fae_drop + - i_fae_ello + - i_fae_envelope_open + - i_fae_envelope_open_o + - i_fae_equal + - i_fae_equal_bigger + - i_fae_feedly + - i_fae_file_export + - i_fae_file_import + - i_fae_wind + - i_fae_atom + - i_fae_bacteria + - i_fae_banana + - i_fae_bath + - i_fae_bed + - i_fae_benzene + - i_fae_bigger + - i_fae_biohazard + - i_fae_blogger_circle + - i_fae_blogger_square + - i_fae_bones + - i_fae_book_open + - i_fae_book_open_o + - i_fae_brain + - i_fae_bread + - i_fae_butterfly + - i_fae_carot + - i_fae_cc_by + - i_fae_cc_cc + - i_fae_cc_nc + - i_fae_cc_nc_eu + - i_fae_cc_nc_jp + - i_fae_cc_nd + - i_fae_cc_remix + - i_fae_cc_sa + - i_fae_cc_share + - i_fae_cc_zero + - i_fae_checklist_o + - i_fae_cherry + - i_fae_chess_bishop + - i_fae_xbox + - i_fae_apple_fruit + - i_fae_chicken_thigh + - i_fae_gift_card + - i_fae_injection + - i_fae_isle + - i_fae_lollipop + - i_fae_loyalty_card + - i_fae_meat + - i_fae_mountains + - i_fae_orange + - i_fae_peach + - i_fae_pear + - i_fa_glass + - i_fa_music + - i_fa_search + - i_fa_envelope_o + - i_fa_heart + - i_fa_star + - i_fa_star_o + - i_fa_user + - i_fa_film + - i_fa_th_large + - i_fa_th + - i_fa_th_list + - i_fa_check + - i_fa_times i_fa_close_fa_times i_fa_remove_fa_times + - i_fa_search_plus + - i_fa_search_minus + - i_fa_power_off + - i_fa_signal + - i_fa_cog i_fa_gear_fa_cog + - i_fa_trash_o + - i_fa_home + - i_fa_file_o + - i_fa_clock_o + - i_fa_road + - i_fa_download + - i_fa_arrow_circle_o_down + - i_fa_arrow_circle_o_up + - i_fa_inbox + - i_fa_play_circle_o + - i_fa_repeat i_fa_rotate_right_fa_repeat + - i_fa_refresh + - i_fa_list_alt + - i_fa_lock + - i_fa_flag + - i_fa_headphones + - i_fa_volume_off + - i_fa_volume_down + - i_fa_volume_up + - i_fa_qrcode + - i_fa_barcode + - i_fa_tag + - i_fa_tags + - i_fa_book + - i_fa_bookmark + - i_fa_print + - i_fa_camera + - i_fa_font + - i_fa_bold + - i_fa_italic + - i_fa_text_height + - i_fa_text_width + - i_fa_align_left + - i_fa_align_center + - i_fa_align_right + - i_fa_align_justify + - i_fa_list + - i_fa_outdent i_fa_dedent_fa_outdent + - i_fa_indent + - i_fa_video_camera + - i_fa_picture_o i_fa_image_fa_picture_o i_fa_photo_fa_picture_o + - i_fa_pencil + - i_fa_map_marker + - i_fa_adjust + - i_fa_tint + - i_fa_pencil_square_o i_fa_edit_fa_pencil_square_o + - i_fa_share_square_o + - i_fa_check_square_o + - i_fa_arrows + - i_fa_step_backward + - i_fa_fast_backward + - i_fa_backward + - i_fa_play + - i_fa_pause + - i_fa_stop + - i_fa_forward + - i_fa_fast_forward + - i_fa_step_forward + - i_fa_eject + - i_fa_chevron_left + - i_fa_chevron_right + - i_fa_plus_circle + - i_fa_minus_circle + - i_fa_times_circle + - i_fa_check_circle + - i_fa_question_circle + - i_fa_info_circle + - i_fa_crosshairs + - i_fa_times_circle_o + - i_fa_check_circle_o + - i_fa_ban + - i_fa_arrow_left + - i_fa_arrow_right + - i_fa_arrow_up + - i_fa_arrow_down + - i_fa_share i_fa_mail_forward_fa_share + - i_fa_expand + - i_fa_compress + - i_fa_plus + - i_fa_minus + - i_fa_asterisk + - i_fa_exclamation_circle + - i_fa_gift + - i_fa_leaf + - i_fa_fire + - i_fa_eye + - i_fa_eye_slash + - i_fa_exclamation_triangle i_fa_warning_fa_exclamation_triangle + - i_fa_plane + - i_fa_calendar + - i_fa_random + - i_fa_comment + - i_fa_magnet + - i_fa_chevron_up + - i_fa_chevron_down + - i_fa_retweet + - i_fa_shopping_cart + - i_fa_folder + - i_fa_folder_open + - i_fa_arrows_v + - i_fa_arrows_h + - i_fa_bar_chart i_fa_bar_chart_o_fa_bar_chart + - i_fa_twitter_square + - i_fa_facebook_square + - i_fa_camera_retro + - i_fa_key + - i_fa_cogs i_fa_gears_fa_cogs + - i_fa_comments + - i_fa_thumbs_o_up + - i_fa_thumbs_o_down + - i_fa_star_half + - i_fa_heart_o + - i_fa_sign_out + - i_fa_linkedin_square + - i_fa_thumb_tack + - i_fa_external_link + - i_fa_sign_in + - i_fa_trophy + - i_fa_github_square + - i_fa_upload + - i_fa_lemon_o + - i_fa_phone + - i_fa_square_o + - i_fa_bookmark_o + - i_fa_phone_square + - i_fa_twitter + - i_fa_facebook i_fa_facebook_f_fa_facebook + - i_fa_github + - i_fa_unlock + - i_fa_credit_card + - i_fa_rss i_fa_feed_fa_rss + - i_fa_hdd_o + - i_fa_bullhorn + - i_fa_bell_o + - i_fa_certificate + - i_fa_hand_o_right + - i_fa_hand_o_left + - i_fa_hand_o_up + - i_fa_hand_o_down + - i_fa_arrow_circle_left + - i_fa_arrow_circle_right + - i_fa_arrow_circle_up + - i_fa_arrow_circle_down + - i_fa_globe + - i_fa_wrench + - i_fa_tasks + - i_fa_filter + - i_fa_briefcase + - i_fa_arrows_alt + - i_fa_users i_fa_group_fa_users + - i_fa_link i_fa_chain_fa_link + - i_fa_cloud + - i_fa_flask + - i_fa_scissors i_fa_cut_fa_scissors + - i_fa_files_o i_fa_copy_fa_files_o + - i_fa_paperclip + - i_fa_floppy_o i_fa_save_fa_floppy_o + - i_fa_square + - i_fa_bars i_fa_navicon_fa_bars i_fa_reorder_fa_bars + - i_fa_list_ul + - i_fa_list_ol + - i_fa_strikethrough + - i_fa_underline + - i_fa_table + - i_fa_magic + - i_fa_truck + - i_fa_pinterest + - i_fa_pinterest_square + - i_fa_google_plus_square + - i_fa_google_plus + - i_fa_money + - i_fa_caret_down + - i_fa_caret_up + - i_fa_caret_left + - i_fa_caret_right + - i_fa_columns + - i_fa_sort i_fa_unsorted_fa_sort + - i_fa_sort_desc i_fa_sort_down_fa_sort_desc + - i_fa_sort_asc i_fa_sort_up_fa_sort_asc + - i_fa_envelope + - i_fa_linkedin + - i_fa_undo i_fa_rotate_left_fa_undo + - i_fa_gavel i_fa_legal_fa_gavel + - i_fa_tachometer i_fa_dashboard_fa_tachometer + - i_fa_comment_o + - i_fa_comments_o + - i_fa_bolt i_fa_flash_fa_bolt + - i_fa_sitemap + - i_fa_umbrella + - i_fa_clipboard i_fa_paste_fa_clipboard + - i_fa_lightbulb_o + - i_fa_exchange + - i_fa_cloud_download + - i_fa_cloud_upload + - i_fa_user_md + - i_fa_stethoscope + - i_fa_suitcase + - i_fa_bell + - i_fa_coffee + - i_fa_cutlery + - i_fa_file_text_o + - i_fa_building_o + - i_fa_hospital_o + - i_fa_ambulance + - i_fa_medkit + - i_fa_fighter_jet + - i_fa_beer + - i_fa_h_square + - i_fa_plus_square + - i_fa_angle_double_left + - i_fa_angle_double_right + - i_fa_angle_double_up + - i_fa_angle_double_down + - i_fa_angle_left + - i_fa_angle_right + - i_fa_angle_up + - i_fa_angle_down + - i_fa_desktop + - i_fa_laptop + - i_fa_tablet + - i_fa_mobile i_fa_mobile_phone_fa_mobile + - i_fa_circle_o + - i_fa_quote_left + - i_fa_quote_right + - i_fa_spinner + - i_fa_circle + - i_fa_reply i_fa_mail_reply_fa_reply + - i_fa_github_alt + - i_fa_folder_o + - i_fa_folder_open_o + - i_fa_smile_o + - i_fa_frown_o + - i_fa_meh_o + - i_fa_gamepad + - i_fa_keyboard_o + - i_fa_flag_o + - i_fa_flag_checkered + - i_fa_terminal + - i_fa_code + - i_fa_reply_all i_fa_mail_reply_all_fa_reply_all + - i_fa_star_half_o i_fa_star_half_empty_fa_star_half_o i_fa_star_half_full_fa_star_half_o + - i_fa_location_arrow + - i_fa_crop + - i_fa_code_fork + - i_fa_chain_broken i_fa_unlink_fa_chain_broken + - i_fa_question + - i_fa_info + - i_fa_exclamation + - i_fa_superscript + - i_fa_subscript + - i_fa_eraser + - i_fa_puzzle_piece + - i_fa_microphone + - i_fa_microphone_slash + - i_fa_shield + - i_fa_calendar_o + - i_fa_fire_extinguisher + - i_fa_rocket + - i_fa_maxcdn + - i_fa_chevron_circle_left + - i_fa_chevron_circle_right + - i_fa_chevron_circle_up + - i_fa_chevron_circle_down + - i_fa_html5 + - i_fa_css3 + - i_fa_anchor + - i_fa_unlock_alt + - i_fa_bullseye + - i_fa_ellipsis_h + - i_fa_ellipsis_v + - i_fa_rss_square + - i_fa_play_circle + - i_fa_ticket + - i_fa_minus_square + - i_fa_minus_square_o + - i_fa_level_up + - i_fa_level_down + - i_fa_check_square + - i_fa_pencil_square + - i_fa_external_link_square + - i_fa_share_square + - i_fa_compass + - i_fa_caret_square_o_down i_fa_toggle_down_fa_caret_square_o_down + - i_fa_caret_square_o_up i_fa_toggle_up_fa_caret_square_o_up + - i_fa_caret_square_o_right i_fa_toggle_right_fa_caret_square_o_right + - i_fa_eur i_fa_euro_fa_eur + - i_fa_gbp + - i_fa_usd i_fa_dollar_fa_usd + - i_fa_inr i_fa_rupee_fa_inr + - i_fa_jpy i_fa_cny_fa_jpy i_fa_rmb_fa_jpy i_fa_yen_fa_jpy + - i_fa_rub i_fa_rouble_fa_rub i_fa_ruble_fa_rub + - i_fa_krw i_fa_won_fa_krw + - i_fa_btc i_fa_bitcoin_fa_btc + - i_fa_file + - i_fa_file_text + - i_fa_sort_alpha_asc + - i_fa_sort_alpha_desc + - i_fa_sort_amount_asc + - i_fa_sort_amount_desc + - i_fa_sort_numeric_asc + - i_fa_sort_numeric_desc + - i_fa_thumbs_up + - i_fa_thumbs_down + - i_fa_youtube_square + - i_fa_youtube + - i_fa_xing + - i_fa_xing_square + - i_fa_youtube_play + - i_fa_dropbox + - i_fa_stack_overflow + - i_fa_instagram + - i_fa_flickr + - i_fa_adn + - i_fa_bitbucket + - i_fa_bitbucket_square + - i_fa_tumblr + - i_fa_tumblr_square + - i_fa_long_arrow_down + - i_fa_long_arrow_up + - i_fa_long_arrow_left + - i_fa_long_arrow_right + - i_fa_apple + - i_fa_windows + - i_fa_android + - i_fa_linux + - i_fa_dribbble + - i_fa_skype + - i_fa_foursquare + - i_fa_trello + - i_fa_female + - i_fa_male + - i_fa_gratipay i_fa_gittip_fa_gratipay + - i_fa_sun_o + - i_fa_moon_o + - i_fa_archive + - i_fa_bug + - i_fa_vk + - i_fa_weibo + - i_fa_renren + - i_fa_pagelines + - i_fa_stack_exchange + - i_fa_arrow_circle_o_right + - i_fa_arrow_circle_o_left + - i_fa_caret_square_o_left i_fa_toggle_left_fa_caret_square_o_left + - i_fa_dot_circle_o + - i_fa_wheelchair + - i_fa_vimeo_square + - i_fa_try i_fa_turkish_lira_fa_try + - i_fa_plus_square_o + - i_fa_space_shuttle + - i_fa_slack + - i_fa_envelope_square + - i_fa_wordpress + - i_fa_openid + - i_fa_university i_fa_bank_fa_university i_fa_institution_fa_university + - i_fa_graduation_cap i_fa_mortar_board_fa_graduation_cap + - i_fa_yahoo + - i_fa_google + - i_fa_reddit + - i_fa_reddit_square + - i_fa_stumbleupon_circle + - i_fa_stumbleupon + - i_fa_delicious + - i_fa_digg + - i_fa_pied_piper_pp + - i_fa_pied_piper_alt + - i_fa_drupal + - i_fa_joomla + - i_fa_language + - i_fa_fax + - i_fa_building + - i_fa_child + - i_fa_paw + - i_fa_spoon + - i_fa_cube + - i_fa_cubes + - i_fa_behance + - i_fa_behance_square + - i_fa_steam + - i_fa_steam_square + - i_fa_recycle + - i_fa_car i_fa_automobile_fa_car + - i_fa_taxi i_fa_cab_fa_taxi + - i_fa_tree + - i_fa_spotify + - i_fa_deviantart + - i_fa_soundcloud + - i_fa_database + - i_fa_file_pdf_o + - i_fa_file_word_o + - i_fa_file_excel_o + - i_fa_file_powerpoint_o + - i_fa_file_image_o i_fa_file_photo_o_fa_file_image_o i_fa_file_picture_o_fa_file_image_o + - i_fa_file_archive_o i_fa_file_zip_o_fa_file_archive_o + - i_fa_file_audio_o i_fa_file_sound_o_fa_file_audio_o + - i_fa_file_video_o i_fa_file_movie_o_fa_file_video_o + - i_fa_file_code_o + - i_fa_vine + - i_fa_codepen + - i_fa_jsfiddle + - i_fa_life_ring i_fa_life_bouy_fa_life_ring i_fa_life_buoy_fa_life_ring i_fa_life_saver_fa_life_ring i_fa_support_fa_life_ring + - i_fa_circle_o_notch + - i_fa_rebel i_fa_ra_fa_rebel i_fa_resistance_fa_rebel + - i_fa_empire i_fa_ge_fa_empire + - i_fa_git_square + - i_fa_git + - i_fa_hacker_news i_fa_y_combinator_square_fa_hacker_news i_fa_yc_square_fa_hacker_news + - i_fa_tencent_weibo + - i_fa_qq + - i_fa_weixin i_fa_wechat_fa_weixin + - i_fa_paper_plane i_fa_send_fa_paper_plane + - i_fa_paper_plane_o i_fa_send_o_fa_paper_plane_o + - i_fa_history + - i_fa_circle_thin + - i_fa_header + - i_fa_paragraph + - i_fa_sliders + - i_fa_share_alt + - i_fa_share_alt_square + - i_fa_bomb + - i_fa_futbol_o i_fa_soccer_ball_o_fa_futbol_o + - i_fa_tty + - i_fa_binoculars + - i_fa_plug + - i_fa_slideshare + - i_fa_twitch + - i_fa_yelp + - i_fa_newspaper_o + - i_fa_wifi + - i_fa_calculator + - i_fa_paypal + - i_fa_google_wallet + - i_fa_cc_visa + - i_fa_cc_mastercard + - i_fa_cc_discover + - i_fa_cc_amex + - i_fa_cc_paypal + - i_fa_cc_stripe + - i_fa_bell_slash + - i_fa_bell_slash_o + - i_fa_trash + - i_fa_copyright + - i_fa_at + - i_fa_eyedropper + - i_fa_paint_brush + - i_fa_birthday_cake + - i_fa_area_chart + - i_fa_pie_chart + - i_fa_line_chart + - i_fa_lastfm + - i_fa_lastfm_square + - i_fa_toggle_off + - i_fa_toggle_on + - i_fa_bicycle + - i_fa_bus + - i_fa_ioxhost + - i_fa_angellist + - i_fa_cc + - i_fa_ils i_fa_shekel_fa_ils i_fa_sheqel_fa_ils + - i_fa_meanpath + - i_fa_buysellads + - i_fa_connectdevelop + - i_fa_dashcube + - i_fa_forumbee + - i_fa_leanpub + - i_fa_sellsy + - i_fa_shirtsinbulk + - i_fa_simplybuilt + - i_fa_skyatlas + - i_fa_cart_plus + - i_fa_cart_arrow_down + - i_fa_diamond + - i_fa_ship + - i_fa_user_secret + - i_fa_motorcycle + - i_fa_street_view + - i_fa_heartbeat + - i_fa_venus + - i_fa_mars + - i_fa_mercury + - i_fa_transgender i_fa_intersex_fa_transgender + - i_fa_transgender_alt + - i_fa_venus_double + - i_fa_mars_double + - i_fa_venus_mars + - i_fa_mars_stroke + - i_fa_mars_stroke_v + - i_fa_mars_stroke_h + - i_fa_neuter + - i_fa_genderless + - i_fa_facebook_official + - i_fa_pinterest_p + - i_fa_whatsapp + - i_fa_server + - i_fa_user_plus + - i_fa_user_times + - i_fa_bed i_fa_hotel_fa_bed + - i_fa_viacoin + - i_fa_train + - i_fa_subway + - i_fa_medium + - i_fa_y_combinator i_fa_yc_fa_y_combinator + - i_fa_optin_monster + - i_fa_opencart + - i_fa_expeditedssl + - i_fa_battery_full i_fa_battery_fa_battery_full i_fa_battery_4_fa_battery_full + - i_fa_battery_three_quarters i_fa_battery_3_fa_battery_three_quarters + - i_fa_battery_half i_fa_battery_2_fa_battery_half + - i_fa_battery_quarter i_fa_battery_1_fa_battery_quarter + - i_fa_battery_empty i_fa_battery_0_fa_battery_empty + - i_fa_mouse_pointer + - i_fa_i_cursor + - i_fa_object_group + - i_fa_object_ungroup + - i_fa_sticky_note + - i_fa_sticky_note_o + - i_fa_cc_jcb + - i_fa_cc_diners_club + - i_fa_clone + - i_fa_balance_scale + - i_fa_hourglass_o + - i_fa_hourglass_start i_fa_hourglass_1_fa_hourglass_start + - i_fa_hourglass_half i_fa_hourglass_2_fa_hourglass_half + - i_fa_hourglass_end i_fa_hourglass_3_fa_hourglass_end + - i_fa_hourglass + - i_fa_hand_rock_o i_fa_hand_grab_o_fa_hand_rock_o + - i_fa_hand_paper_o i_fa_hand_stop_o_fa_hand_paper_o + - i_fa_hand_scissors_o + - i_fa_hand_lizard_o + - i_fa_hand_spock_o + - i_fa_hand_pointer_o + - i_fa_hand_peace_o + - i_fa_trademark + - i_fa_registered + - i_fa_creative_commons + - i_fa_gg + - i_fa_gg_circle + - i_fa_tripadvisor + - i_fa_odnoklassniki + - i_fa_odnoklassniki_square + - i_fa_get_pocket + - i_fa_wikipedia_w + - i_fa_safari + - i_fa_chrome + - i_fa_firefox + - i_fa_opera + - i_fa_internet_explorer + - i_fa_television i_fa_tv_fa_television + - i_fa_contao + - i_fa_500px + - i_fa_amazon + - i_fa_calendar_plus_o + - i_fa_calendar_minus_o + - i_fa_calendar_times_o + - i_fa_calendar_check_o + - i_fa_industry + - i_fa_map_pin + - i_fa_map_signs + - i_fa_map_o + - i_fa_map + - i_fa_commenting + - i_fa_commenting_o + - i_fa_houzz + - i_fa_vimeo + - i_fa_black_tie + - i_fa_fonticons + - i_fa_reddit_alien + - i_fa_edge + - i_fa_credit_card_alt + - i_fa_codiepie + - i_fa_modx + - i_fa_fort_awesome + - i_fa_usb + - i_fa_product_hunt + - i_fa_mixcloud + - i_fa_scribd + - i_fa_pause_circle + - i_fa_pause_circle_o + - i_fa_stop_circle + - i_fa_stop_circle_o + - i_fa_shopping_bag + - i_fa_shopping_basket + - i_fa_hashtag + - i_fa_bluetooth + - i_fa_bluetooth_b + - i_fa_percent + - i_fa_gitlab + - i_fa_wpbeginner + - i_fa_wpforms + - i_fa_envira + - i_fa_universal_access + - i_fa_wheelchair_alt + - i_fa_question_circle_o + - i_fa_blind + - i_fa_audio_description + - i_fa_volume_control_phone + - i_fa_braille + - i_fa_assistive_listening_systems + - i_fa_american_sign_language_interpreting i_fa_asl_interpreting_fa_american_sign_language_interpreting + - i_fa_deaf i_fa_deafness_fa_deaf i_fa_hard_of_hearing_fa_deaf + - i_fa_glide + - i_fa_glide_g + - i_fa_sign_language i_fa_signing_fa_sign_language + - i_fa_low_vision + - i_fa_viadeo + - i_fa_viadeo_square + - i_fa_snapchat + - i_fa_snapchat_ghost + - i_fa_snapchat_square + - i_fa_pied_piper + - i_fa_first_order + - i_fa_yoast + - i_fa_themeisle + - i_fa_google_plus_official i_fa_google_plus_circle_fa_google_plus_official + - i_fa_font_awesome i_fa_fa_fa_font_awesome + - i_fa_handshake_o + - i_fa_envelope_open + - i_fa_envelope_open_o + - i_fa_linode + - i_fa_address_book + - i_fa_address_book_o + - i_fa_address_card i_fa_vcard_fa_address_card + - i_fa_address_card_o i_fa_vcard_o_fa_address_card_o + - i_fa_user_circle + - i_fa_user_circle_o + - i_fa_user_o + - i_fa_id_badge + - i_fa_id_card i_fa_drivers_license_fa_id_card + - i_fa_id_card_o i_fa_drivers_license_o_fa_id_card_o + - i_fa_quora + - i_fa_free_code_camp + - i_fa_telegram + - i_fa_thermometer_full i_fa_thermometer_fa_thermometer_full i_fa_thermometer_4_fa_thermometer_full + - i_fa_thermometer_three_quarters i_fa_thermometer_3_fa_thermometer_three_quarters + - i_fa_thermometer_half i_fa_thermometer_2_fa_thermometer_half + - i_fa_thermometer_quarter i_fa_thermometer_1_fa_thermometer_quarter + - i_fa_thermometer_empty i_fa_thermometer_0_fa_thermometer_empty + - i_fa_shower + - i_fa_bath i_fa_bathtub_fa_bath i_fa_s15_fa_bath + - i_fa_podcast + - i_fa_window_maximize + - i_fa_window_minimize + - i_fa_window_restore + - i_fa_window_close i_fa_times_rectangle_fa_window_close + - i_fa_window_close_o i_fa_times_rectangle_o_fa_window_close_o + - i_fa_bandcamp + - i_fa_grav + - i_fa_etsy + - i_fa_imdb + - i_fa_ravelry + - i_fa_eercast + - i_fa_microchip + - i_fa_snowflake_o + - i_fa_superpowers + - i_fa_wpexplorer + - i_fa_meetup +⏻ - i_iec_power +⏼ - i_iec_toggle_power +⏽ - i_iec_power_on +⏾ - i_iec_sleep_mode +⭘ - i_iec_power_off + - i_linux_alpine + - i_linux_aosc + - i_linux_apple + - i_linux_archlinux + - i_linux_centos + - i_linux_coreos + - i_linux_debian + - i_linux_devuan + - i_linux_docker + - i_linux_elementary + - i_linux_fedora + - i_linux_fedora_inverse + - i_linux_freebsd + - i_linux_gentoo + - i_linux_linuxmint + - i_linux_linuxmint_inverse + - i_linux_mageia + - i_linux_mandriva + - i_linux_manjaro + - i_linux_nixos + - i_linux_opensuse + - i_linux_raspberry_pi + - i_linux_redhat + - i_linux_sabayon + - i_linux_slackware + - i_linux_slackware_inverse + - i_linux_tux + - i_linux_ubuntu + - i_linux_ubuntu_inverse + - i_mdi_vector_square + - i_mdi_access_point + - i_mdi_access_point_network + - i_mdi_account + - i_mdi_account_alert + - i_mdi_account_box + - i_mdi_account_box_outline + - i_mdi_account_check + - i_mdi_account_circle + - i_mdi_account_convert + - i_mdi_account_key + - i_mdi_account_location + - i_mdi_account_minus + - i_mdi_account_multiple + - i_mdi_account_multiple_outline + - i_mdi_account_multiple_plus + - i_mdi_account_network + - i_mdi_account_off + - i_mdi_account_outline + - i_mdi_account_plus + - i_mdi_account_remove + - i_mdi_account_search + - i_mdi_account_star + - i_mdi_orbit + - i_mdi_account_switch + - i_mdi_adjust + - i_mdi_air_conditioner + - i_mdi_airballoon + - i_mdi_airplane + - i_mdi_airplane_off + - i_mdi_airplay + - i_mdi_alarm + - i_mdi_alarm_check + - i_mdi_alarm_multiple + - i_mdi_alarm_off + - i_mdi_alarm_plus + - i_mdi_album + - i_mdi_alert + - i_mdi_alert_box + - i_mdi_alert_circle + - i_mdi_alert_octagon + - i_mdi_alert_outline + - i_mdi_alpha + - i_mdi_alphabetical + - i_mdi_amazon + - i_mdi_amazon_clouddrive + - i_mdi_ambulance + - i_mdi_amplifier + - i_mdi_anchor + - i_mdi_android + - i_mdi_android_debug_bridge + - i_mdi_android_studio + - i_mdi_apple + - i_mdi_apple_finder + - i_mdi_apple_ios + - i_mdi_apple_mobileme + - i_mdi_apple_safari + - i_mdi_font_awesome + - i_mdi_apps + - i_mdi_archive + - i_mdi_arrange_bring_forward + - i_mdi_arrange_bring_to_front + - i_mdi_arrange_send_backward + - i_mdi_arrange_send_to_back + - i_mdi_arrow_all + - i_mdi_arrow_bottom_left + - i_mdi_arrow_bottom_right + - i_mdi_arrow_collapse_all + - i_mdi_arrow_down + - i_mdi_arrow_down_thick + - i_mdi_arrow_down_bold_circle + - i_mdi_arrow_down_bold_circle_outline + - i_mdi_arrow_down_bold_hexagon_outline + - i_mdi_arrow_down_drop_circle + - i_mdi_arrow_down_drop_circle_outline + - i_mdi_arrow_expand_all + - i_mdi_arrow_left + - i_mdi_arrow_left_thick + - i_mdi_arrow_left_bold_circle + - i_mdi_arrow_left_bold_circle_outline + - i_mdi_arrow_left_bold_hexagon_outline + - i_mdi_arrow_left_drop_circle + - i_mdi_arrow_left_drop_circle_outline + - i_mdi_arrow_right + - i_mdi_arrow_right_thick + - i_mdi_arrow_right_bold_circle + - i_mdi_arrow_right_bold_circle_outline + - i_mdi_arrow_right_bold_hexagon_outline + - i_mdi_arrow_right_drop_circle + - i_mdi_arrow_right_drop_circle_outline + - i_mdi_arrow_top_left + - i_mdi_arrow_top_right + - i_mdi_arrow_up + - i_mdi_arrow_up_thick + - i_mdi_arrow_up_bold_circle + - i_mdi_arrow_up_bold_circle_outline + - i_mdi_arrow_up_bold_hexagon_outline + - i_mdi_arrow_up_drop_circle + - i_mdi_arrow_up_drop_circle_outline + - i_mdi_assistant + - i_mdi_at + - i_mdi_attachment + - i_mdi_audiobook + - i_mdi_auto_fix + - i_mdi_auto_upload + - i_mdi_autorenew + - i_mdi_av_timer + - i_mdi_baby + - i_mdi_backburger + - i_mdi_backspace + - i_mdi_backup_restore + - i_mdi_bank + - i_mdi_barcode + - i_mdi_barcode_scan + - i_mdi_barley + - i_mdi_barrel + - i_mdi_basecamp + - i_mdi_basket + - i_mdi_basket_fill + - i_mdi_basket_unfill + - i_mdi_battery + - i_mdi_battery_10 + - i_mdi_battery_20 + - i_mdi_battery_30 + - i_mdi_battery_40 + - i_mdi_battery_50 + - i_mdi_battery_60 + - i_mdi_battery_70 + - i_mdi_battery_80 + - i_mdi_battery_90 + - i_mdi_battery_alert + - i_mdi_battery_charging + - i_mdi_battery_charging_100 + - i_mdi_battery_charging_20 + - i_mdi_battery_charging_30 + - i_mdi_battery_charging_40 + - i_mdi_battery_charging_60 + - i_mdi_battery_charging_80 + - i_mdi_battery_charging_90 + - i_mdi_battery_minus + - i_mdi_battery_negative + - i_mdi_battery_outline + - i_mdi_battery_plus + - i_mdi_battery_positive + - i_mdi_battery_unknown + - i_mdi_beach + - i_mdi_flask + - i_mdi_flask_empty + - i_mdi_flask_empty_outline + - i_mdi_flask_outline + - i_mdi_beats + - i_mdi_beer + - i_mdi_behance + - i_mdi_bell + - i_mdi_bell_off + - i_mdi_bell_outline + - i_mdi_bell_plus + - i_mdi_bell_ring + - i_mdi_bell_ring_outline + - i_mdi_bell_sleep + - i_mdi_beta + - i_mdi_bible + - i_mdi_bike + - i_mdi_bing + - i_mdi_binoculars + - i_mdi_bio + - i_mdi_biohazard + - i_mdi_bitbucket + - i_mdi_black_mesa + - i_mdi_blackberry + - i_mdi_blender + - i_mdi_blinds + - i_mdi_block_helper + - i_mdi_blogger + - i_mdi_bluetooth + - i_mdi_bluetooth_audio + - i_mdi_bluetooth_connect + - i_mdi_bluetooth_off + - i_mdi_bluetooth_settings + - i_mdi_bluetooth_transfer + - i_mdi_blur + - i_mdi_blur_linear + - i_mdi_blur_off + - i_mdi_blur_radial + - i_mdi_bone + - i_mdi_book + - i_mdi_book_multiple + - i_mdi_book_multiple_variant + - i_mdi_book_open + - i_mdi_book_open_variant + - i_mdi_book_variant + - i_mdi_bookmark + - i_mdi_bookmark_check + - i_mdi_bookmark_music + - i_mdi_bookmark_outline + - i_mdi_bookmark_plus_outline + - i_mdi_bookmark_plus + - i_mdi_bookmark_remove + - i_mdi_border_all + - i_mdi_border_bottom + - i_mdi_border_color + - i_mdi_border_horizontal + - i_mdi_border_inside + - i_mdi_border_left + - i_mdi_border_none + - i_mdi_border_outside + - i_mdi_border_right + - i_mdi_border_style + - i_mdi_border_top + - i_mdi_border_vertical + - i_mdi_bowling + - i_mdi_box + - i_mdi_box_cutter + - i_mdi_briefcase + - i_mdi_briefcase_check + - i_mdi_briefcase_download + - i_mdi_briefcase_upload + - i_mdi_brightness_1 + - i_mdi_brightness_2 + - i_mdi_brightness_3 + - i_mdi_brightness_4 + - i_mdi_brightness_5 + - i_mdi_brightness_6 + - i_mdi_brightness_7 + - i_mdi_brightness_auto + - i_mdi_broom + - i_mdi_brush + - i_mdi_bug + - i_mdi_bulletin_board + - i_mdi_bullhorn + - i_mdi_bus + - i_mdi_cached + - i_mdi_cake + - i_mdi_cake_layered + - i_mdi_cake_variant + - i_mdi_calculator + - i_mdi_calendar + - i_mdi_calendar_blank + - i_mdi_calendar_check + - i_mdi_calendar_clock + - i_mdi_calendar_multiple + - i_mdi_calendar_multiple_check + - i_mdi_calendar_plus + - i_mdi_calendar_remove + - i_mdi_calendar_text + - i_mdi_calendar_today + - i_mdi_call_made + - i_mdi_call_merge + - i_mdi_call_missed + - i_mdi_call_received + - i_mdi_call_split + - i_mdi_camcorder + - i_mdi_camcorder_box + - i_mdi_camcorder_box_off + - i_mdi_camcorder_off + - i_mdi_camera + - i_mdi_camera_enhance + - i_mdi_camera_front + - i_mdi_camera_front_variant + - i_mdi_camera_iris + - i_mdi_camera_party_mode + - i_mdi_camera_rear + - i_mdi_camera_rear_variant + - i_mdi_camera_switch + - i_mdi_camera_timer + - i_mdi_candycane + - i_mdi_car + - i_mdi_car_battery + - i_mdi_car_connected + - i_mdi_car_wash + - i_mdi_carrot + - i_mdi_cart + - i_mdi_cart_outline + - i_mdi_cart_plus + - i_mdi_case_sensitive_alt + - i_mdi_cash + - i_mdi_cash_100 + - i_mdi_cash_multiple + - i_mdi_cash_usd + - i_mdi_cast + - i_mdi_cast_connected + - i_mdi_castle + - i_mdi_cat + - i_mdi_cellphone + - i_mdi_cellphone_android + - i_mdi_cellphone_basic + - i_mdi_cellphone_dock + - i_mdi_cellphone_iphone + - i_mdi_cellphone_link + - i_mdi_cellphone_link_off + - i_mdi_cellphone_settings + - i_mdi_certificate + - i_mdi_chair_school + - i_mdi_chart_arc + - i_mdi_chart_areaspline + - i_mdi_chart_bar + - i_mdi_chart_histogram + - i_mdi_chart_line + - i_mdi_chart_pie + - i_mdi_check + - i_mdi_check_all + - i_mdi_checkbox_blank + - i_mdi_checkbox_blank_circle + - i_mdi_checkbox_blank_circle_outline + - i_mdi_checkbox_blank_outline + - i_mdi_checkbox_marked + - i_mdi_checkbox_marked_circle + - i_mdi_checkbox_marked_circle_outline + - i_mdi_checkbox_marked_outline + - i_mdi_checkbox_multiple_blank + - i_mdi_checkbox_multiple_blank_outline + - i_mdi_checkbox_multiple_marked + - i_mdi_checkbox_multiple_marked_outline + - i_mdi_checkerboard + - i_mdi_chemical_weapon + - i_mdi_chevron_double_down + - i_mdi_chevron_double_left + - i_mdi_chevron_double_right + - i_mdi_chevron_double_up + - i_mdi_chevron_down + - i_mdi_chevron_left + - i_mdi_chevron_right + - i_mdi_chevron_up + - i_mdi_church + - i_mdi_cisco_webex + - i_mdi_city + - i_mdi_clipboard + - i_mdi_clipboard_account + - i_mdi_clipboard_alert + - i_mdi_clipboard_arrow_down + - i_mdi_clipboard_arrow_left + - i_mdi_clipboard_check + - i_mdi_clipboard_outline + - i_mdi_clipboard_text + - i_mdi_clippy + - i_mdi_clock + - i_mdi_clock_end + - i_mdi_clock_fast + - i_mdi_clock_in + - i_mdi_clock_out + - i_mdi_clock_start + - i_mdi_close + - i_mdi_close_box + - i_mdi_close_box_outline + - i_mdi_close_circle + - i_mdi_close_circle_outline + - i_mdi_close_network + - i_mdi_close_octagon + - i_mdi_close_octagon_outline + - i_mdi_closed_caption + - i_mdi_cloud + - i_mdi_cloud_check + - i_mdi_cloud_circle + - i_mdi_cloud_download + - i_mdi_cloud_outline + - i_mdi_cloud_off_outline + - i_mdi_cloud_print + - i_mdi_cloud_print_outline + - i_mdi_cloud_upload + - i_mdi_code_array + - i_mdi_code_braces + - i_mdi_code_brackets + - i_mdi_code_equal + - i_mdi_code_greater_than + - i_mdi_code_greater_than_or_equal + - i_mdi_code_less_than + - i_mdi_code_less_than_or_equal + - i_mdi_code_not_equal + - i_mdi_code_not_equal_variant + - i_mdi_code_parentheses + - i_mdi_code_string + - i_mdi_code_tags + - i_mdi_codepen + - i_mdi_coffee + - i_mdi_coffee_to_go + - i_mdi_coin + - i_mdi_color_helper + - i_mdi_comment + - i_mdi_comment_account + - i_mdi_comment_account_outline + - i_mdi_comment_alert + - i_mdi_comment_alert_outline + - i_mdi_comment_check + - i_mdi_comment_check_outline + - i_mdi_comment_multiple_outline + - i_mdi_comment_outline + - i_mdi_comment_plus_outline + - i_mdi_comment_processing + - i_mdi_comment_processing_outline + - i_mdi_comment_question_outline + - i_mdi_comment_remove_outline + - i_mdi_comment_text + - i_mdi_comment_text_outline + - i_mdi_compare + - i_mdi_compass + - i_mdi_compass_outline + - i_mdi_console + - i_mdi_contact_mail + - i_mdi_content_copy + - i_mdi_content_cut + - i_mdi_content_duplicate + - i_mdi_content_paste + - i_mdi_content_save + - i_mdi_content_save_all + - i_mdi_contrast + - i_mdi_contrast_box + - i_mdi_contrast_circle + - i_mdi_cookie + - i_mdi_counter + - i_mdi_cow + - i_mdi_credit_card + - i_mdi_credit_card_multiple + - i_mdi_credit_card_scan + - i_mdi_crop + - i_mdi_crop_free + - i_mdi_crop_landscape + - i_mdi_crop_portrait + - i_mdi_crop_square + - i_mdi_crosshairs + - i_mdi_crosshairs_gps + - i_mdi_crown + - i_mdi_cube + - i_mdi_cube_outline + - i_mdi_cube_send + - i_mdi_cube_unfolded + - i_mdi_cup + - i_mdi_cup_water + - i_mdi_currency_btc + - i_mdi_currency_eur + - i_mdi_currency_gbp + - i_mdi_currency_inr + - i_mdi_currency_ngn + - i_mdi_currency_rub + - i_mdi_currency_try + - i_mdi_currency_usd + - i_mdi_cursor_default + - i_mdi_cursor_default_outline + - i_mdi_cursor_move + - i_mdi_cursor_pointer + - i_mdi_database + - i_mdi_database_minus + - i_mdi_database_plus + - i_mdi_debug_step_into + - i_mdi_debug_step_out + - i_mdi_debug_step_over + - i_mdi_decimal_decrease + - i_mdi_decimal_increase + - i_mdi_delete + - i_mdi_delete_variant + - i_mdi_delta + - i_mdi_deskphone + - i_mdi_desktop_mac + - i_mdi_desktop_tower + - i_mdi_details + - i_mdi_deviantart + - i_mdi_diamond + - i_mdi_creation + - i_mdi_dice_1 + - i_mdi_dice_2 + - i_mdi_dice_3 + - i_mdi_dice_4 + - i_mdi_dice_5 + - i_mdi_dice_6 + - i_mdi_directions + - i_mdi_disk_alert + - i_mdi_disqus + - i_mdi_disqus_outline + - i_mdi_division + - i_mdi_division_box + - i_mdi_dns + - i_mdi_domain + - i_mdi_dots_horizontal + - i_mdi_dots_vertical + - i_mdi_download + - i_mdi_drag + - i_mdi_drag_horizontal + - i_mdi_drag_vertical + - i_mdi_drawing + - i_mdi_drawing_box + - i_mdi_dribbble + - i_mdi_dribbble_box + - i_mdi_drone + - i_mdi_dropbox + - i_mdi_drupal + - i_mdi_duck + - i_mdi_dumbbell + - i_mdi_earth + - i_mdi_earth_off + - i_mdi_edge + - i_mdi_eject + - i_mdi_elevation_decline + - i_mdi_elevation_rise + - i_mdi_elevator + - i_mdi_email + - i_mdi_email_open + - i_mdi_email_outline + - i_mdi_email_secure + - i_mdi_emoticon + - i_mdi_emoticon_cool + - i_mdi_emoticon_devil + - i_mdi_emoticon_happy + - i_mdi_emoticon_neutral + - i_mdi_emoticon_poop + - i_mdi_emoticon_sad + - i_mdi_emoticon_tongue + - i_mdi_engine + - i_mdi_engine_outline + - i_mdi_equal + - i_mdi_equal_box + - i_mdi_eraser + - i_mdi_escalator + - i_mdi_ethernet + - i_mdi_ethernet_cable + - i_mdi_ethernet_cable_off + - i_mdi_etsy + - i_mdi_evernote + - i_mdi_exclamation + - i_mdi_exit_to_app + - i_mdi_export + - i_mdi_eye + - i_mdi_eye_off + - i_mdi_eyedropper + - i_mdi_eyedropper_variant + - i_mdi_facebook + - i_mdi_facebook_box + - i_mdi_facebook_messenger + - i_mdi_factory + - i_mdi_fan + - i_mdi_fast_forward + - i_mdi_fax + - i_mdi_ferry + - i_mdi_file + - i_mdi_file_chart + - i_mdi_file_check + - i_mdi_file_cloud + - i_mdi_file_delimited + - i_mdi_file_document + - i_mdi_file_document_box + - i_mdi_file_excel + - i_mdi_file_excel_box + - i_mdi_file_export + - i_mdi_file_find + - i_mdi_file_image + - i_mdi_file_import + - i_mdi_file_lock + - i_mdi_file_multiple + - i_mdi_file_music + - i_mdi_file_outline + - i_mdi_file_pdf + - i_mdi_file_pdf_box + - i_mdi_file_powerpoint + - i_mdi_file_powerpoint_box + - i_mdi_file_presentation_box + - i_mdi_file_send + - i_mdi_file_video + - i_mdi_file_word + - i_mdi_file_word_box + - i_mdi_file_xml + - i_mdi_film + - i_mdi_filmstrip + - i_mdi_filmstrip_off + - i_mdi_filter + - i_mdi_filter_outline + - i_mdi_filter_remove + - i_mdi_filter_remove_outline + - i_mdi_filter_variant + - i_mdi_fingerprint + - i_mdi_fire + - i_mdi_firefox + - i_mdi_fish + - i_mdi_flag + - i_mdi_flag_checkered + - i_mdi_flag_outline + - i_mdi_flag_variant_outline + - i_mdi_flag_triangle + - i_mdi_flag_variant + - i_mdi_flash + - i_mdi_flash_auto + - i_mdi_flash_off + - i_mdi_flashlight + - i_mdi_flashlight_off + - i_mdi_flattr + - i_mdi_flip_to_back + - i_mdi_flip_to_front + - i_mdi_floppy + - i_mdi_flower + - i_mdi_folder + - i_mdi_folder_account + - i_mdi_folder_download + - i_mdi_folder_google_drive + - i_mdi_folder_image + - i_mdi_folder_lock + - i_mdi_folder_lock_open + - i_mdi_folder_move + - i_mdi_folder_multiple + - i_mdi_folder_multiple_image + - i_mdi_folder_multiple_outline + - i_mdi_folder_outline + - i_mdi_folder_plus + - i_mdi_folder_remove + - i_mdi_folder_upload + - i_mdi_food + - i_mdi_food_apple + - i_mdi_food_variant + - i_mdi_football + - i_mdi_football_australian + - i_mdi_football_helmet + - i_mdi_format_align_center + - i_mdi_format_align_justify + - i_mdi_format_align_left + - i_mdi_format_align_right + - i_mdi_format_bold + - i_mdi_format_clear + - i_mdi_format_color_fill + - i_mdi_format_float_center + - i_mdi_format_float_left + - i_mdi_format_float_none + - i_mdi_format_float_right + - i_mdi_format_header_1 + - i_mdi_format_header_2 + - i_mdi_format_header_3 + - i_mdi_format_header_4 + - i_mdi_format_header_5 + - i_mdi_format_header_6 + - i_mdi_format_header_decrease + - i_mdi_format_header_equal + - i_mdi_format_header_increase + - i_mdi_format_header_pound + - i_mdi_format_indent_decrease + - i_mdi_format_indent_increase + - i_mdi_format_italic + - i_mdi_format_line_spacing + - i_mdi_format_list_bulleted + - i_mdi_format_list_bulleted_type + - i_mdi_format_list_numbers + - i_mdi_format_paint + - i_mdi_format_paragraph + - i_mdi_format_quote_close + - i_mdi_format_size + - i_mdi_format_strikethrough + - i_mdi_format_strikethrough_variant + - i_mdi_format_subscript + - i_mdi_format_superscript + - i_mdi_format_text + - i_mdi_format_textdirection_l_to_r + - i_mdi_format_textdirection_r_to_l + - i_mdi_format_underline + - i_mdi_format_wrap_inline + - i_mdi_format_wrap_square + - i_mdi_format_wrap_tight + - i_mdi_format_wrap_top_bottom + - i_mdi_forum + - i_mdi_forward + - i_mdi_foursquare + - i_mdi_fridge + - i_mdi_fridge_filled + - i_mdi_fridge_filled_bottom + - i_mdi_fridge_filled_top + - i_mdi_fullscreen + - i_mdi_fullscreen_exit + - i_mdi_function + - i_mdi_gamepad + - i_mdi_gamepad_variant + - i_mdi_gas_station + - i_mdi_gate + - i_mdi_gauge + - i_mdi_gavel + - i_mdi_gender_female + - i_mdi_gender_male + - i_mdi_gender_male_female + - i_mdi_gender_transgender + - i_mdi_ghost + - i_mdi_gift + - i_mdi_git + - i_mdi_github_box + - i_mdi_github_circle + - i_mdi_glass_flute + - i_mdi_glass_mug + - i_mdi_glass_stange + - i_mdi_glass_tulip + - i_mdi_glassdoor + - i_mdi_glasses + - i_mdi_gmail + - i_mdi_gnome + - i_mdi_google + - i_mdi_google_cardboard + - i_mdi_google_chrome + - i_mdi_google_circles + - i_mdi_google_circles_communities + - i_mdi_google_circles_extended + - i_mdi_google_circles_group + - i_mdi_google_controller + - i_mdi_google_controller_off + - i_mdi_google_drive + - i_mdi_google_earth + - i_mdi_google_glass + - i_mdi_google_nearby + - i_mdi_google_pages + - i_mdi_google_physical_web + - i_mdi_google_play + - i_mdi_google_plus + - i_mdi_google_plus_box + - i_mdi_google_translate + - i_mdi_google_wallet + - i_mdi_grid + - i_mdi_grid_off + - i_mdi_group + - i_mdi_guitar_electric + - i_mdi_guitar_pick + - i_mdi_guitar_pick_outline + - i_mdi_hand_pointing_right + - i_mdi_hanger + - i_mdi_hangouts + - i_mdi_harddisk + - i_mdi_headphones + - i_mdi_headphones_box + - i_mdi_headphones_settings + - i_mdi_headset + - i_mdi_headset_dock + - i_mdi_headset_off + - i_mdi_heart + - i_mdi_heart_box + - i_mdi_heart_box_outline + - i_mdi_heart_broken + - i_mdi_heart_outline + - i_mdi_help + - i_mdi_help_circle + - i_mdi_hexagon + - i_mdi_hexagon_outline + - i_mdi_history + - i_mdi_hololens + - i_mdi_home + - i_mdi_home_modern + - i_mdi_home_variant + - i_mdi_hops + - i_mdi_hospital + - i_mdi_hospital_building + - i_mdi_hospital_marker + - i_mdi_hotel + - i_mdi_houzz + - i_mdi_houzz_box + - i_mdi_human + - i_mdi_human_child + - i_mdi_human_male_female + - i_mdi_image + - i_mdi_image_album + - i_mdi_image_area + - i_mdi_image_area_close + - i_mdi_image_broken + - i_mdi_image_broken_variant + - i_mdi_image_filter + - i_mdi_image_filter_black_white + - i_mdi_image_filter_center_focus + - i_mdi_image_filter_center_focus_weak + - i_mdi_image_filter_drama + - i_mdi_image_filter_frames + - i_mdi_image_filter_hdr + - i_mdi_image_filter_none + - i_mdi_image_filter_tilt_shift + - i_mdi_image_filter_vintage + - i_mdi_image_multiple + - i_mdi_import + - i_mdi_inbox_arrow_down + - i_mdi_information + - i_mdi_information_outline + - i_mdi_instagram + - i_mdi_instapaper + - i_mdi_internet_explorer + - i_mdi_invert_colors + - i_mdi_jeepney + - i_mdi_jira + - i_mdi_jsfiddle + - i_mdi_keg + - i_mdi_key + - i_mdi_key_change + - i_mdi_key_minus + - i_mdi_key_plus + - i_mdi_key_remove + - i_mdi_key_variant + - i_mdi_keyboard + - i_mdi_keyboard_backspace + - i_mdi_keyboard_caps + - i_mdi_keyboard_close + - i_mdi_keyboard_off + - i_mdi_keyboard_return + - i_mdi_keyboard_tab + - i_mdi_keyboard_variant + - i_mdi_kodi + - i_mdi_label + - i_mdi_label_outline + - i_mdi_lan + - i_mdi_lan_connect + - i_mdi_lan_disconnect + - i_mdi_lan_pending + - i_mdi_language_csharp + - i_mdi_language_css3 + - i_mdi_language_html5 + - i_mdi_language_javascript + - i_mdi_language_php + - i_mdi_language_python + - i_mdi_language_python_text + - i_mdi_laptop + - i_mdi_laptop_chromebook + - i_mdi_laptop_mac + - i_mdi_laptop_windows + - i_mdi_lastfm + - i_mdi_launch + - i_mdi_layers + - i_mdi_layers_off + - i_mdi_leaf + - i_mdi_led_off + - i_mdi_led_on + - i_mdi_led_outline + - i_mdi_led_variant_off + - i_mdi_led_variant_on + - i_mdi_led_variant_outline + - i_mdi_library + - i_mdi_library_books + - i_mdi_library_music + - i_mdi_library_plus + - i_mdi_lightbulb + - i_mdi_lightbulb_outline + - i_mdi_link + - i_mdi_link_off + - i_mdi_link_variant + - i_mdi_link_variant_off + - i_mdi_linkedin + - i_mdi_linkedin_box + - i_mdi_linux + - i_mdi_lock + - i_mdi_lock_open + - i_mdi_lock_open_outline + - i_mdi_lock_outline + - i_mdi_login + - i_mdi_logout + - i_mdi_looks + - i_mdi_loupe + - i_mdi_lumx + - i_mdi_magnet + - i_mdi_magnet_on + - i_mdi_magnify + - i_mdi_magnify_minus + - i_mdi_magnify_plus + - i_mdi_mail_ru + - i_mdi_map + - i_mdi_map_marker + - i_mdi_map_marker_circle + - i_mdi_map_marker_multiple + - i_mdi_map_marker_off + - i_mdi_map_marker_radius + - i_mdi_margin + - i_mdi_markdown + - i_mdi_marker_check + - i_mdi_martini + - i_mdi_material_ui + - i_mdi_math_compass + - i_mdi_maxcdn + - i_mdi_medium + - i_mdi_memory + - i_mdi_menu + - i_mdi_menu_down + - i_mdi_menu_left + - i_mdi_menu_right + - i_mdi_menu_up + - i_mdi_message + - i_mdi_message_alert + - i_mdi_message_draw + - i_mdi_message_image + - i_mdi_message_outline + - i_mdi_message_processing + - i_mdi_message_reply + - i_mdi_message_reply_text + - i_mdi_message_text + - i_mdi_message_text_outline + - i_mdi_message_video + - i_mdi_microphone + - i_mdi_microphone_off + - i_mdi_microphone_outline + - i_mdi_microphone_settings + - i_mdi_microphone_variant + - i_mdi_microphone_variant_off + - i_mdi_microsoft + - i_mdi_minecraft + - i_mdi_minus + - i_mdi_minus_box + - i_mdi_minus_circle + - i_mdi_minus_circle_outline + - i_mdi_minus_network + - i_mdi_monitor + - i_mdi_monitor_multiple + - i_mdi_more + - i_mdi_motorbike + - i_mdi_mouse + - i_mdi_mouse_off + - i_mdi_mouse_variant + - i_mdi_mouse_variant_off + - i_mdi_movie + - i_mdi_multiplication + - i_mdi_multiplication_box + - i_mdi_music_box + - i_mdi_music_box_outline + - i_mdi_music_circle + - i_mdi_music_note + - i_mdi_music_note_eighth + - i_mdi_music_note_half + - i_mdi_music_note_off + - i_mdi_music_note_quarter + - i_mdi_music_note_sixteenth + - i_mdi_music_note_whole + - i_mdi_nature + - i_mdi_nature_people + - i_mdi_navigation + - i_mdi_needle + - i_mdi_nest_protect + - i_mdi_nest_thermostat + - i_mdi_new_box + - i_mdi_newspaper + - i_mdi_nfc + - i_mdi_nfc_tap + - i_mdi_nfc_variant + - i_mdi_nodejs + - i_mdi_note + - i_mdi_note_outline + - i_mdi_note_plus + - i_mdi_note_plus_outline + - i_mdi_note_text + - i_mdi_notification_clear_all + - i_mdi_numeric + - i_mdi_numeric_0_box + - i_mdi_numeric_0_box_multiple_outline + - i_mdi_numeric_0_box_outline + - i_mdi_numeric_1_box + - i_mdi_numeric_1_box_multiple_outline + - i_mdi_numeric_1_box_outline + - i_mdi_numeric_2_box + - i_mdi_numeric_2_box_multiple_outline + - i_mdi_numeric_2_box_outline + - i_mdi_numeric_3_box + - i_mdi_numeric_3_box_multiple_outline + - i_mdi_numeric_3_box_outline + - i_mdi_numeric_4_box + - i_mdi_numeric_4_box_multiple_outline + - i_mdi_numeric_4_box_outline + - i_mdi_numeric_5_box + - i_mdi_numeric_5_box_multiple_outline + - i_mdi_numeric_5_box_outline + - i_mdi_numeric_6_box + - i_mdi_numeric_6_box_multiple_outline + - i_mdi_numeric_6_box_outline + - i_mdi_numeric_7_box + - i_mdi_numeric_7_box_multiple_outline + - i_mdi_numeric_7_box_outline + - i_mdi_numeric_8_box + - i_mdi_numeric_8_box_multiple_outline + - i_mdi_numeric_8_box_outline + - i_mdi_numeric_9_box + - i_mdi_numeric_9_box_multiple_outline + - i_mdi_numeric_9_box_outline + - i_mdi_numeric_9_plus_box + - i_mdi_numeric_9_plus_box_multiple_outline + - i_mdi_numeric_9_plus_box_outline + - i_mdi_nutrition + - i_mdi_octagon + - i_mdi_octagon_outline + - i_mdi_odnoklassniki + - i_mdi_office + - i_mdi_oil + - i_mdi_oil_temperature + - i_mdi_omega + - i_mdi_onedrive + - i_mdi_open_in_app + - i_mdi_open_in_new + - i_mdi_openid + - i_mdi_opera + - i_mdi_ornament + - i_mdi_ornament_variant + - i_mdi_inbox_arrow_up + - i_mdi_owl + - i_mdi_package + - i_mdi_package_down + - i_mdi_package_up + - i_mdi_package_variant + - i_mdi_package_variant_closed + - i_mdi_palette + - i_mdi_palette_advanced + - i_mdi_panda + - i_mdi_pandora + - i_mdi_panorama + - i_mdi_panorama_fisheye + - i_mdi_panorama_horizontal + - i_mdi_panorama_vertical + - i_mdi_panorama_wide_angle + - i_mdi_paper_cut_vertical + - i_mdi_paperclip + - i_mdi_parking + - i_mdi_pause + - i_mdi_pause_circle + - i_mdi_pause_circle_outline + - i_mdi_pause_octagon + - i_mdi_pause_octagon_outline + - i_mdi_paw + - i_mdi_pen + - i_mdi_pencil + - i_mdi_pencil_box + - i_mdi_pencil_box_outline + - i_mdi_pencil_lock + - i_mdi_pencil_off + - i_mdi_percent + - i_mdi_pharmacy + - i_mdi_phone + - i_mdi_phone_bluetooth + - i_mdi_phone_forward + - i_mdi_phone_hangup + - i_mdi_phone_in_talk + - i_mdi_phone_incoming + - i_mdi_phone_locked + - i_mdi_phone_log + - i_mdi_phone_missed + - i_mdi_phone_outgoing + - i_mdi_phone_paused + - i_mdi_phone_settings + - i_mdi_phone_voip + - i_mdi_pi + - i_mdi_pi_box +豈 - i_mdi_pig +更 - i_mdi_pill +車 - i_mdi_pin +賈 - i_mdi_pin_off +滑 - i_mdi_pine_tree +串 - i_mdi_pine_tree_box +句 - i_mdi_pinterest +龜 - i_mdi_pinterest_box +龜 - i_mdi_pizza +契 - i_mdi_play +金 - i_mdi_play_box_outline +喇 - i_mdi_play_circle +奈 - i_mdi_play_circle_outline +懶 - i_mdi_play_pause +癩 - i_mdi_play_protected_content +羅 - i_mdi_playlist_minus +蘿 - i_mdi_playlist_play +螺 - i_mdi_playlist_plus +裸 - i_mdi_playlist_remove +邏 - i_mdi_playstation +樂 - i_mdi_plus +洛 - i_mdi_plus_box +烙 - i_mdi_plus_circle +珞 - i_mdi_plus_circle_multiple_outline +落 - i_mdi_plus_circle_outline +酪 - i_mdi_plus_network +駱 - i_mdi_plus_one +亂 - i_mdi_pocket +卵 - i_mdi_pokeball +欄 - i_mdi_polaroid +爛 - i_mdi_poll +蘭 - i_mdi_poll_box +鸞 - i_mdi_polymer +嵐 - i_mdi_popcorn +濫 - i_mdi_pound +藍 - i_mdi_pound_box +襤 - i_mdi_power +拉 - i_mdi_power_settings +臘 - i_mdi_power_socket +蠟 - i_mdi_presentation +廊 - i_mdi_presentation_play +朗 - i_mdi_printer +浪 - i_mdi_printer_3d +狼 - i_mdi_printer_alert +郎 - i_mdi_professional_hexagon +來 - i_mdi_projector +冷 - i_mdi_projector_screen +勞 - i_mdi_pulse +擄 - i_mdi_puzzle +櫓 - i_mdi_qrcode +爐 - i_mdi_qrcode_scan +盧 - i_mdi_quadcopter +老 - i_mdi_quality_high +蘆 - i_mdi_quicktime +虜 - i_mdi_radar +路 - i_mdi_radiator +露 - i_mdi_radio +魯 - i_mdi_radio_handheld +鷺 - i_mdi_radio_tower +碌 - i_mdi_radioactive +祿 - i_mdi_radiobox_blank +綠 - i_mdi_radiobox_marked +菉 - i_mdi_raspberrypi +錄 - i_mdi_ray_end +鹿 - i_mdi_ray_end_arrow +論 - i_mdi_ray_start +壟 - i_mdi_ray_start_arrow +弄 - i_mdi_ray_start_end +籠 - i_mdi_ray_vertex +聾 - i_mdi_lastpass +牢 - i_mdi_read +磊 - i_mdi_youtube_tv +賂 - i_mdi_receipt +雷 - i_mdi_record +壘 - i_mdi_record_rec +屢 - i_mdi_recycle +樓 - i_mdi_reddit +淚 - i_mdi_redo +漏 - i_mdi_redo_variant +累 - i_mdi_refresh +縷 - i_mdi_regex +陋 - i_mdi_relative_scale +勒 - i_mdi_reload +肋 - i_mdi_remote +凜 - i_mdi_rename_box +凌 - i_mdi_repeat +稜 - i_mdi_repeat_off +綾 - i_mdi_repeat_once +菱 - i_mdi_replay +陵 - i_mdi_reply +讀 - i_mdi_reply_all +拏 - i_mdi_reproduction +樂 - i_mdi_resize_bottom_right +諾 - i_mdi_responsive +丹 - i_mdi_rewind +寧 - i_mdi_ribbon +怒 - i_mdi_road +率 - i_mdi_road_variant +異 - i_mdi_rocket +北 - i_mdi_rotate_3d +磻 - i_mdi_rotate_left +便 - i_mdi_rotate_left_variant +復 - i_mdi_rotate_right +不 - i_mdi_rotate_right_variant +泌 - i_mdi_router_wireless +數 - i_mdi_routes +索 - i_mdi_rss +參 - i_mdi_rss_box +塞 - i_mdi_ruler +省 - i_mdi_run_fast +葉 - i_mdi_sale +說 - i_mdi_satellite +殺 - i_mdi_satellite_variant +辰 - i_mdi_scale +沈 - i_mdi_scale_bathroom +拾 - i_mdi_school +若 - i_mdi_screen_rotation +掠 - i_mdi_screen_rotation_lock +略 - i_mdi_screwdriver +亮 - i_mdi_script +兩 - i_mdi_sd +凉 - i_mdi_seal +梁 - i_mdi_seat_flat +糧 - i_mdi_seat_flat_angled +良 - i_mdi_seat_individual_suite +諒 - i_mdi_seat_legroom_extra +量 - i_mdi_seat_legroom_normal +勵 - i_mdi_seat_legroom_reduced +呂 - i_mdi_seat_recline_extra +女 - i_mdi_seat_recline_normal +廬 - i_mdi_security +旅 - i_mdi_security_network +濾 - i_mdi_select +礪 - i_mdi_select_all +閭 - i_mdi_select_inverse +驪 - i_mdi_select_off +麗 - i_mdi_selection +黎 - i_mdi_send +力 - i_mdi_server +曆 - i_mdi_server_minus +歷 - i_mdi_server_network +轢 - i_mdi_server_network_off +年 - i_mdi_server_off +憐 - i_mdi_server_plus +戀 - i_mdi_server_remove +撚 - i_mdi_server_security +漣 - i_mdi_settings +煉 - i_mdi_settings_box +璉 - i_mdi_shape_plus +秊 - i_mdi_share +練 - i_mdi_share_variant +聯 - i_mdi_shield +輦 - i_mdi_shield_outline +蓮 - i_mdi_shopping +連 - i_mdi_shopping_music +鍊 - i_mdi_shredder +列 - i_mdi_shuffle +劣 - i_mdi_shuffle_disabled +咽 - i_mdi_shuffle_variant +烈 - i_mdi_sigma +裂 - i_mdi_sign_caution +說 - i_mdi_signal +廉 - i_mdi_silverware +念 - i_mdi_silverware_fork +捻 - i_mdi_silverware_spoon +殮 - i_mdi_silverware_variant +簾 - i_mdi_sim +獵 - i_mdi_sim_alert +令 - i_mdi_sim_off +囹 - i_mdi_sitemap +寧 - i_mdi_skip_backward +嶺 - i_mdi_skip_forward +怜 - i_mdi_skip_next +玲 - i_mdi_skip_previous +瑩 - i_mdi_skype +羚 - i_mdi_skype_business +聆 - i_mdi_slack +鈴 - i_mdi_sleep +零 - i_mdi_sleep_off +靈 - i_mdi_smoking +領 - i_mdi_smoking_off +例 - i_mdi_snapchat +禮 - i_mdi_snowman +醴 - i_mdi_soccer +隸 - i_mdi_sofa +惡 - i_mdi_sort +了 - i_mdi_sort_alphabetical +僚 - i_mdi_sort_ascending +寮 - i_mdi_sort_descending +尿 - i_mdi_sort_numeric +料 - i_mdi_sort_variant +樂 - i_mdi_soundcloud +燎 - i_mdi_source_fork +療 - i_mdi_source_pull +蓼 - i_mdi_speaker +遼 - i_mdi_speaker_off +龍 - i_mdi_speedometer +暈 - i_mdi_spellcheck +阮 - i_mdi_spotify +劉 - i_mdi_spotlight +杻 - i_mdi_spotlight_beam +柳 - i_mdi_square_inc +流 - i_mdi_square_inc_cash +溜 - i_mdi_stack_overflow +琉 - i_mdi_stairs +留 - i_mdi_star +硫 - i_mdi_star_circle +紐 - i_mdi_star_half +類 - i_mdi_star_off +六 - i_mdi_star_outline +戮 - i_mdi_steam +陸 - i_mdi_steering +倫 - i_mdi_step_backward +崙 - i_mdi_step_backward_2 +淪 - i_mdi_step_forward +輪 - i_mdi_step_forward_2 +律 - i_mdi_stethoscope +慄 - i_mdi_stocking +栗 - i_mdi_stop +率 - i_mdi_store +隆 - i_mdi_store_24_hour +利 - i_mdi_stove +吏 - i_mdi_subway_variant +履 - i_mdi_sunglasses +易 - i_mdi_swap_horizontal +李 - i_mdi_swap_vertical +梨 - i_mdi_swim +泥 - i_mdi_switch +理 - i_mdi_sword +痢 - i_mdi_sync +罹 - i_mdi_sync_alert +裏 - i_mdi_sync_off +裡 - i_mdi_tab +里 - i_mdi_tab_unselected +離 - i_mdi_table +匿 - i_mdi_table_column_plus_after +溺 - i_mdi_table_column_plus_before +吝 - i_mdi_table_column_remove +燐 - i_mdi_table_column_width +璘 - i_mdi_table_edit +藺 - i_mdi_table_large +隣 - i_mdi_table_row_height +鱗 - i_mdi_table_row_plus_after +麟 - i_mdi_table_row_plus_before +林 - i_mdi_table_row_remove +淋 - i_mdi_tablet +臨 - i_mdi_tablet_android +立 - i_mdi_tablet_ipad +笠 - i_mdi_tag +粒 - i_mdi_tag_faces +狀 - i_mdi_tag_multiple +炙 - i_mdi_tag_outline +識 - i_mdi_tag_text_outline +什 - i_mdi_target +茶 - i_mdi_taxi +刺 - i_mdi_teamviewer +切 - i_mdi_telegram +度 - i_mdi_television +拓 - i_mdi_television_guide +糖 - i_mdi_temperature_celsius +宅 - i_mdi_temperature_fahrenheit +洞 - i_mdi_temperature_kelvin +暴 - i_mdi_tennis +輻 - i_mdi_tent +行 - i_mdi_terrain +降 - i_mdi_text_to_speech +見 - i_mdi_text_to_speech_off +廓 - i_mdi_texture +兀 - i_mdi_theater +嗀 - i_mdi_theme_light_dark +﨎 - i_mdi_thermometer +﨏 - i_mdi_thermometer_lines +塚 - i_mdi_thumb_down +﨑 - i_mdi_thumb_down_outline +晴 - i_mdi_thumb_up +﨓 - i_mdi_thumb_up_outline +﨔 - i_mdi_thumbs_up_down +凞 - i_mdi_ticket +猪 - i_mdi_ticket_account +益 - i_mdi_ticket_confirmation +礼 - i_mdi_tie +神 - i_mdi_timelapse +祥 - i_mdi_timer +福 - i_mdi_timer_10 +靖 - i_mdi_timer_3 +精 - i_mdi_timer_off +羽 - i_mdi_timer_sand +﨟 - i_mdi_timetable +蘒 - i_mdi_toggle_switch +﨡 - i_mdi_toggle_switch_off +諸 - i_mdi_tooltip +﨣 - i_mdi_tooltip_edit +﨤 - i_mdi_tooltip_image +逸 - i_mdi_tooltip_outline +都 - i_mdi_tooltip_outline_plus +﨧 - i_mdi_tooltip_text +﨨 - i_mdi_tooth +﨩 - i_mdi_tor +飯 - i_mdi_traffic_light +飼 - i_mdi_train +館 - i_mdi_tram +鶴 - i_mdi_transcribe +郞 - i_mdi_transcribe_close +隷 - i_mdi_transfer +侮 - i_mdi_tree +僧 - i_mdi_trello +免 - i_mdi_trending_down +勉 - i_mdi_trending_neutral +勤 - i_mdi_trending_up +卑 - i_mdi_triangle +喝 - i_mdi_triangle_outline +嘆 - i_mdi_trophy +器 - i_mdi_trophy_award +塀 - i_mdi_trophy_outline +墨 - i_mdi_trophy_variant +層 - i_mdi_trophy_variant_outline +屮 - i_mdi_truck +悔 - i_mdi_truck_delivery +慨 - i_mdi_tshirt_crew +憎 - i_mdi_tshirt_v +懲 - i_mdi_tumblr +敏 - i_mdi_tumblr_reblog +既 - i_mdi_twitch +暑 - i_mdi_twitter +梅 - i_mdi_twitter_box +海 - i_mdi_twitter_circle +渚 - i_mdi_twitter_retweet +漢 - i_mdi_ubuntu +煮 - i_mdi_umbraco +爫 - i_mdi_umbrella +琢 - i_mdi_umbrella_outline +碑 - i_mdi_undo +社 - i_mdi_undo_variant +祉 - i_mdi_unfold_less_horizontal +祈 - i_mdi_unfold_more_horizontal +祐 - i_mdi_ungroup +祖 - i_mdi_untappd +祝 - i_mdi_upload +禍 - i_mdi_usb +禎 - i_mdi_vector_arrange_above +穀 - i_mdi_vector_arrange_below +突 - i_mdi_vector_circle +節 - i_mdi_vector_circle_variant +練 - i_mdi_vector_combine +縉 - i_mdi_vector_curve +繁 - i_mdi_vector_difference +署 - i_mdi_vector_difference_ab +者 - i_mdi_vector_difference_ba +臭 - i_mdi_vector_intersection +艹 - i_mdi_vector_line +艹 - i_mdi_vector_point +著 - i_mdi_vector_polygon +褐 - i_mdi_vector_polyline +視 - i_mdi_vector_selection +謁 - i_mdi_vector_triangle +謹 - i_mdi_vector_union +賓 - i_mdi_verified +贈 - i_mdi_vibrate +辶 - i_mdi_video +逸 - i_mdi_video_off +難 - i_mdi_video_switch +響 - i_mdi_view_agenda +頻 - i_mdi_view_array +恵 - i_mdi_view_carousel +𤋮 - i_mdi_view_column +舘 - i_mdi_view_dashboard +﩮 - i_mdi_view_day +﩯 - i_mdi_view_grid +並 - i_mdi_view_headline +况 - i_mdi_view_list +全 - i_mdi_view_module +侀 - i_mdi_view_quilt +充 - i_mdi_view_stream +冀 - i_mdi_view_week +勇 - i_mdi_vimeo +勺 - i_mdi_venmo +喝 - i_mdi_vk +啕 - i_mdi_vk_box +喙 - i_mdi_vk_circle +嗢 - i_mdi_vlc +塚 - i_mdi_voicemail +墳 - i_mdi_volume_high +奄 - i_mdi_volume_low +奔 - i_mdi_volume_medium +婢 - i_mdi_volume_off +嬨 - i_mdi_vpn +廒 - i_mdi_walk +廙 - i_mdi_wallet +彩 - i_mdi_wallet_giftcard +徭 - i_mdi_wallet_membership +惘 - i_mdi_wallet_travel +慎 - i_mdi_wan +愈 - i_mdi_watch +憎 - i_mdi_watch_export +慠 - i_mdi_watch_import +懲 - i_mdi_water +戴 - i_mdi_water_off +揄 - i_mdi_water_percent +搜 - i_mdi_water_pump +摒 - i_mdi_weather_cloudy +敖 - i_mdi_weather_fog +晴 - i_mdi_weather_hail +朗 - i_mdi_weather_lightning +望 - i_mdi_weather_night +杖 - i_mdi_weather_partlycloudy +歹 - i_mdi_weather_pouring +殺 - i_mdi_weather_rainy +流 - i_mdi_weather_snowy +滛 - i_mdi_weather_sunny +滋 - i_mdi_weather_sunset +漢 - i_mdi_weather_sunset_down +瀞 - i_mdi_weather_sunset_up +煮 - i_mdi_weather_windy +瞧 - i_mdi_weather_windy_variant +爵 - i_mdi_web +犯 - i_mdi_webcam +猪 - i_mdi_weight +瑱 - i_mdi_weight_kilogram +甆 - i_mdi_whatsapp +画 - i_mdi_wheelchair_accessibility +瘝 - i_mdi_white_balance_auto +瘟 - i_mdi_white_balance_incandescent +益 - i_mdi_white_balance_iridescent +盛 - i_mdi_white_balance_sunny +直 - i_mdi_wifi +睊 - i_mdi_wifi_off +着 - i_mdi_wii +磌 - i_mdi_wikipedia +窱 - i_mdi_window_close +節 - i_mdi_window_closed +类 - i_mdi_window_maximize +絛 - i_mdi_window_minimize +練 - i_mdi_window_open +缾 - i_mdi_window_restore +者 - i_mdi_windows +荒 - i_mdi_wordpress +華 - i_mdi_worker +蝹 - i_mdi_wrap +襁 - i_mdi_wrench +覆 - i_mdi_wunderlist +視 - i_mdi_xbox +調 - i_mdi_xbox_controller +諸 - i_mdi_xbox_controller_off +請 - i_mdi_xda +謁 - i_mdi_xing +諾 - i_mdi_xing_box +諭 - i_mdi_xing_circle +謹 - i_mdi_xml +變 - i_mdi_yeast +贈 - i_mdi_yelp +輸 - i_mdi_youtube_play +遲 - i_mdi_zip_box +醙 - i_mdi_surround_sound +鉶 - i_mdi_vector_rectangle +陼 - i_mdi_playlist_check +難 - i_mdi_format_line_style +靖 - i_mdi_format_line_weight +韛 - i_mdi_translate +響 - i_mdi_voice +頋 - i_mdi_opacity +頻 - i_mdi_near_me +鬒 - i_mdi_clock_alert +龜 - i_mdi_human_pregnant +𢡊 - i_mdi_sticker +𢡄 - i_mdi_scale_balance +𣏕 - i_mdi_account_card_details +㮝 - i_mdi_account_multiple_minus +䀘 - i_mdi_airplane_landing +䀹 - i_mdi_airplane_takeoff +𥉉 - i_mdi_alert_circle_outline +𥳐 - i_mdi_altimeter +𧻓 - i_mdi_animation +齃 - i_mdi_book_minus +龎 - i_mdi_book_open_page_variant +﫚 - i_mdi_book_plus +﫛 - i_mdi_boombox +﫜 - i_mdi_bullseye +﫝 - i_mdi_comment_remove +﫞 - i_mdi_camera_off +﫟 - i_mdi_check_circle +﫠 - i_mdi_check_circle_outline +﫡 - i_mdi_candle +﫢 - i_mdi_chart_bubble +﫣 - i_mdi_credit_card_off +﫤 - i_mdi_cup_off +﫥 - i_mdi_copyright +﫦 - i_mdi_cursor_text +﫧 - i_mdi_delete_forever +﫨 - i_mdi_delete_sweep +﫩 - i_mdi_dice_d20 +﫪 - i_mdi_dice_d4 +﫫 - i_mdi_dice_d6 +﫬 - i_mdi_dice_d8 +﫭 - i_mdi_disk +﫮 - i_mdi_email_open_outline +﫯 - i_mdi_email_variant +﫰 - i_mdi_ev_station +﫱 - i_mdi_food_fork_drink +﫲 - i_mdi_food_off +﫳 - i_mdi_format_title +﫴 - i_mdi_google_maps +﫵 - i_mdi_heart_pulse +﫶 - i_mdi_highway +﫷 - i_mdi_home_map_marker +﫸 - i_mdi_incognito +﫹 - i_mdi_kettle +﫺 - i_mdi_lock_plus +﫻 - i_mdi_login_variant +﫼 - i_mdi_logout_variant +﫽 - i_mdi_music_note_bluetooth +﫾 - i_mdi_music_note_bluetooth_off +﫿 - i_mdi_page_first +ff - i_mdi_page_last +fi - i_mdi_phone_classic +fl - i_mdi_priority_high +ffi - i_mdi_priority_low +ffl - i_mdi_qqchat +ſt - i_mdi_pool +st - i_mdi_rounded_corner +﬇ - i_mdi_rowing +﬈ - i_mdi_saxophone +﬉ - i_mdi_signal_variant +﬊ - i_mdi_stackexchange +﬋ - i_mdi_subdirectory_arrow_left +﬌ - i_mdi_subdirectory_arrow_right +﬍ - i_mdi_textbox +﬎ - i_mdi_violin +﬏ - i_mdi_visualstudio +﬐ - i_mdi_wechat +﬑ - i_mdi_watermark +﬒ - i_mdi_file_hidden +ﬓ - i_mdi_application +ﬔ - i_mdi_arrow_collapse +ﬕ - i_mdi_arrow_expand +ﬖ - i_mdi_bowl +ﬗ - i_mdi_bridge +﬘ - i_mdi_buffer +﬙ - i_mdi_chip +﬚ - i_mdi_content_save_settings +﬛ - i_mdi_dialpad +﬜ - i_mdi_dictionary +יִ - i_mdi_format_horizontal_align_center +ﬞ - i_mdi_format_horizontal_align_left +ײַ - i_mdi_format_horizontal_align_right +ﬠ - i_mdi_format_vertical_align_bottom +ﬡ - i_mdi_format_vertical_align_center +ﬢ - i_mdi_format_vertical_align_top +ﬣ - i_mdi_hackernews +ﬤ - i_mdi_help_circle_outline +ﬥ - i_mdi_json +ﬦ - i_mdi_lambda +ﬧ - i_mdi_matrix +ﬨ - i_mdi_meteor +﬩ - i_mdi_mixcloud +שׁ - i_mdi_sigma_lower +שׂ - i_mdi_source_branch +שּׁ - i_mdi_source_merge +שּׂ - i_mdi_tune +אַ - i_mdi_webhook +אָ - i_mdi_account_settings +אּ - i_mdi_account_settings_variant +בּ - i_mdi_apple_keyboard_caps +גּ - i_mdi_apple_keyboard_command +דּ - i_mdi_apple_keyboard_control +הּ - i_mdi_apple_keyboard_option +וּ - i_mdi_apple_keyboard_shift +זּ - i_mdi_box_shadow +﬷ - i_mdi_cards +טּ - i_mdi_cards_outline +יּ - i_mdi_cards_playing_outline +ךּ - i_mdi_checkbox_multiple_blank_circle +כּ - i_mdi_checkbox_multiple_blank_circle_outline +לּ - i_mdi_checkbox_multiple_marked_circle +﬽ - i_mdi_checkbox_multiple_marked_circle_outline +מּ - i_mdi_cloud_sync +﬿ - i_mdi_collage +נּ - i_mdi_directions_fork +סּ - i_mdi_eraser_variant +﭂ - i_mdi_face +ףּ - i_mdi_face_profile +פּ - i_mdi_file_tree +﭅ - i_mdi_format_annotation_plus +צּ - i_mdi_gas_cylinder +קּ - i_mdi_grease_pencil +רּ - i_mdi_human_female +שּ - i_mdi_human_greeting +תּ - i_mdi_human_handsdown +וֹ - i_mdi_human_handsup +בֿ - i_mdi_human_male +כֿ - i_mdi_information_variant +פֿ - i_mdi_lead_pencil +ﭏ - i_mdi_map_marker_minus +ﭐ - i_mdi_map_marker_plus +ﭑ - i_mdi_marker +ﭒ - i_mdi_message_plus +ﭓ - i_mdi_microscope +ﭔ - i_mdi_move_resize +ﭕ - i_mdi_move_resize_variant +ﭖ - i_mdi_paw_off +ﭗ - i_mdi_phone_minus +ﭘ - i_mdi_phone_plus +ﭙ - i_mdi_pot +ﭚ - i_mdi_pot_mix +ﭛ - i_mdi_serial_port +ﭜ - i_mdi_shape_circle_plus +ﭝ - i_mdi_shape_polygon_plus +ﭞ - i_mdi_shape_rectangle_plus +ﭟ - i_mdi_shape_square_plus +ﭠ - i_mdi_skip_next_circle +ﭡ - i_mdi_skip_next_circle_outline +ﭢ - i_mdi_skip_previous_circle +ﭣ - i_mdi_skip_previous_circle_outline +ﭤ - i_mdi_spray +ﭥ - i_mdi_stop_circle +ﭦ - i_mdi_stop_circle_outline +ﭧ - i_mdi_test_tube +ﭨ - i_mdi_text_shadow +ﭩ - i_mdi_tune_vertical +ﭪ - i_mdi_cart_off +ﭫ - i_mdi_chart_gantt +ﭬ - i_mdi_chart_scatterplot_hexbin +ﭭ - i_mdi_chart_timeline +ﭮ - i_mdi_discord +ﭯ - i_mdi_file_restore +ﭰ - i_mdi_language_c +ﭱ - i_mdi_language_cpp +ﭲ - i_mdi_xaml +ﭳ - i_mdi_bandcamp +ﭴ - i_mdi_credit_card_plus +ﭵ - i_mdi_itunes +ﭶ - i_mdi_bow_tie +ﭷ - i_mdi_calendar_range +ﭸ - i_mdi_currency_usd_off +ﭹ - i_mdi_flash_red_eye +ﭺ - i_mdi_oar +ﭻ - i_mdi_piano +ﭼ - i_mdi_weather_lightning_rainy +ﭽ - i_mdi_weather_snowy_rainy +ﭾ - i_mdi_yin_yang +ﭿ - i_mdi_tower_beach +ﮀ - i_mdi_tower_fire +ﮁ - i_mdi_delete_circle +ﮂ - i_mdi_dna +ﮃ - i_mdi_hamburger +ﮄ - i_mdi_gondola +ﮅ - i_mdi_inbox +ﮆ - i_mdi_reorder_horizontal +ﮇ - i_mdi_reorder_vertical +ﮈ - i_mdi_security_home +ﮉ - i_mdi_tag_heart +ﮊ - i_mdi_skull +ﮋ - i_mdi_solid +ﮌ - i_mdi_alarm_snooze +ﮍ - i_mdi_baby_buggy +ﮎ - i_mdi_beaker +ﮏ - i_mdi_bomb +ﮐ - i_mdi_calendar_question +ﮑ - i_mdi_camera_burst +ﮒ - i_mdi_code_tags_check +ﮓ - i_mdi_coins +ﮔ - i_mdi_crop_rotate +ﮕ - i_mdi_developer_board +ﮖ - i_mdi_do_not_disturb +ﮗ - i_mdi_do_not_disturb_off +ﮘ - i_mdi_douban +ﮙ - i_mdi_emoticon_dead +ﮚ - i_mdi_emoticon_excited +ﮛ - i_mdi_folder_star +ﮜ - i_mdi_format_color_text +ﮝ - i_mdi_format_section +ﮞ - i_mdi_gradient +ﮟ - i_mdi_home_outline +ﮠ - i_mdi_message_bulleted +ﮡ - i_mdi_message_bulleted_off +ﮢ - i_mdi_nuke +ﮣ - i_mdi_power_plug +ﮤ - i_mdi_power_plug_off +ﮥ - i_mdi_publish +ﮦ - i_mdi_restore +ﮧ - i_mdi_robot +ﮨ - i_mdi_format_rotate_90 +ﮩ - i_mdi_scanner +ﮪ - i_mdi_subway +ﮫ - i_mdi_timer_sand_empty +ﮬ - i_mdi_transit_transfer +ﮭ - i_mdi_unity +ﮮ - i_mdi_update +ﮯ - i_mdi_watch_vibrate +ﮰ - i_mdi_angular +ﮱ - i_mdi_dolby +﮲ - i_mdi_emby +﮳ - i_mdi_lamp +﮴ - i_mdi_menu_down_outline +﮵ - i_mdi_menu_up_outline +﮶ - i_mdi_note_multiple +﮷ - i_mdi_note_multiple_outline +﮸ - i_mdi_plex +﮹ - i_mdi_plane_shield +﮺ - i_mdi_account_edit +﮻ - i_mdi_alert_decagram +﮼ - i_mdi_all_inclusive +﮽ - i_mdi_angularjs +﮾ - i_mdi_arrow_down_box +﮿ - i_mdi_arrow_left_box +﯀ - i_mdi_arrow_right_box +﯁ - i_mdi_arrow_up_box +﯂ - i_mdi_asterisk +﯃ - i_mdi_bomb_off +﯄ - i_mdi_bootstrap +﯅ - i_mdi_cards_variant +﯆ - i_mdi_clipboard_flow +﯇ - i_mdi_close_outline +﯈ - i_mdi_coffee_outline +﯉ - i_mdi_contacts +﯊ - i_mdi_delete_empty +﯋ - i_mdi_earth_box +﯌ - i_mdi_earth_box_off +﯍ - i_mdi_email_alert +﯎ - i_mdi_eye_outline +﯏ - i_mdi_eye_off_outline +﯐ - i_mdi_fast_forward_outline +﯑ - i_mdi_feather +﯒ - i_mdi_find_replace +ﯓ - i_mdi_flash_outline +ﯔ - i_mdi_format_font +ﯕ - i_mdi_format_page_break +ﯖ - i_mdi_format_pilcrow +ﯗ - i_mdi_garage +ﯘ - i_mdi_garage_open +ﯙ - i_mdi_github_face +ﯚ - i_mdi_google_keep +ﯛ - i_mdi_google_photos +ﯜ - i_mdi_heart_half_full +ﯝ - i_mdi_heart_half +ﯞ - i_mdi_heart_half_outline +ﯟ - i_mdi_hexagon_multiple +ﯠ - i_mdi_hook +ﯡ - i_mdi_hook_off +ﯢ - i_mdi_infinity +ﯣ - i_mdi_language_swift +ﯤ - i_mdi_language_typescript +ﯥ - i_mdi_laptop_off +ﯦ - i_mdi_lightbulb_on +ﯧ - i_mdi_lightbulb_on_outline +ﯨ - i_mdi_lock_pattern +ﯩ - i_mdi_loop +ﯪ - i_mdi_magnify_minus_outline +ﯫ - i_mdi_magnify_plus_outline +ﯬ - i_mdi_mailbox +ﯭ - i_mdi_medical_bag +ﯮ - i_mdi_message_settings +ﯯ - i_mdi_message_settings_variant +ﯰ - i_mdi_minus_box_outline +ﯱ - i_mdi_network +ﯲ - i_mdi_download_network +ﯳ - i_mdi_help_network +ﯴ - i_mdi_upload_network +ﯵ - i_mdi_npm +ﯶ - i_mdi_nut +ﯷ - i_mdi_octagram +ﯸ - i_mdi_page_layout_body +ﯹ - i_mdi_page_layout_footer +ﯺ - i_mdi_page_layout_header +ﯻ - i_mdi_page_layout_sidebar_left +ﯼ - i_mdi_page_layout_sidebar_right +ﯽ - i_mdi_pencil_circle +ﯾ - i_mdi_pentagon +ﯿ - i_mdi_pentagon_outline +ﰀ - i_mdi_pillar +ﰁ - i_mdi_pistol +ﰂ - i_mdi_plus_box_outline +ﰃ - i_mdi_plus_outline +ﰄ - i_mdi_prescription +ﰅ - i_mdi_printer_settings +ﰆ - i_mdi_react +ﰇ - i_mdi_restart +ﰈ - i_mdi_rewind_outline +ﰉ - i_mdi_rhombus +ﰊ - i_mdi_rhombus_outline +ﰋ - i_mdi_roomba +ﰌ - i_mdi_run +ﰍ - i_mdi_search_web +ﰎ - i_mdi_shovel +ﰏ - i_mdi_shovel_off +ﰐ - i_mdi_signal_2g +ﰑ - i_mdi_signal_3g +ﰒ - i_mdi_signal_4g +ﰓ - i_mdi_signal_hspa +ﰔ - i_mdi_signal_hspa_plus +ﰕ - i_mdi_snowflake +ﰖ - i_mdi_source_commit +ﰗ - i_mdi_source_commit_end +ﰘ - i_mdi_source_commit_end_local +ﰙ - i_mdi_source_commit_local +ﰚ - i_mdi_source_commit_next_local +ﰛ - i_mdi_source_commit_start +ﰜ - i_mdi_source_commit_start_next_local +ﰝ - i_mdi_speaker_wireless +ﰞ - i_mdi_stadium +ﰟ - i_mdi_svg +ﰠ - i_mdi_tag_plus +ﰡ - i_mdi_tag_remove +ﰢ - i_mdi_ticket_percent +ﰣ - i_mdi_tilde +ﰤ - i_mdi_treasure_chest +ﰥ - i_mdi_truck_trailer +ﰦ - i_mdi_view_parallel +ﰧ - i_mdi_view_sequential +ﰨ - i_mdi_washing_machine +ﰩ - i_mdi_webpack +ﰪ - i_mdi_widgets +ﰫ - i_mdi_wiiu +ﰬ - i_mdi_arrow_down_bold +ﰭ - i_mdi_arrow_down_bold_box +ﰮ - i_mdi_arrow_down_bold_box_outline +ﰯ - i_mdi_arrow_left_bold +ﰰ - i_mdi_arrow_left_bold_box +ﰱ - i_mdi_arrow_left_bold_box_outline +ﰲ - i_mdi_arrow_right_bold +ﰳ - i_mdi_arrow_right_bold_box +ﰴ - i_mdi_arrow_right_bold_box_outline +ﰵ - i_mdi_arrow_up_bold +ﰶ - i_mdi_arrow_up_bold_box +ﰷ - i_mdi_arrow_up_bold_box_outline +ﰸ - i_mdi_cancel +ﰹ - i_mdi_file_account +ﰺ - i_mdi_gesture_double_tap +ﰻ - i_mdi_gesture_swipe_down +ﰼ - i_mdi_gesture_swipe_left +ﰽ - i_mdi_gesture_swipe_right +ﰾ - i_mdi_gesture_swipe_up +ﰿ - i_mdi_gesture_tap +ﱀ - i_mdi_gesture_two_double_tap +ﱁ - i_mdi_gesture_two_tap +ﱂ - i_mdi_humble_bundle +ﱃ - i_mdi_kickstarter +ﱄ - i_mdi_netflix +ﱅ - i_mdi_onenote +ﱆ - i_mdi_periscope +ﱇ - i_mdi_uber +ﱈ - i_mdi_vector_radius +ﱉ - i_mdi_xbox_controller_battery_alert +ﱊ - i_mdi_xbox_controller_battery_empty +ﱋ - i_mdi_xbox_controller_battery_full +ﱌ - i_mdi_xbox_controller_battery_low +ﱍ - i_mdi_xbox_controller_battery_medium +ﱎ - i_mdi_xbox_controller_battery_unknown +ﱏ - i_mdi_clipboard_plus +ﱐ - i_mdi_file_plus +ﱑ - i_mdi_format_align_bottom +ﱒ - i_mdi_format_align_middle +ﱓ - i_mdi_format_align_top +ﱔ - i_mdi_format_list_checks +ﱕ - i_mdi_format_quote_open +ﱖ - i_mdi_grid_large +ﱗ - i_mdi_heart_off +ﱘ - i_mdi_music +ﱙ - i_mdi_music_off +ﱚ - i_mdi_tab_plus +ﱛ - i_mdi_volume_plus +ﱜ - i_mdi_volume_minus +ﱝ - i_mdi_volume_mute +ﱞ - i_mdi_unfold_less_vertical +ﱟ - i_mdi_unfold_more_vertical +ﱠ - i_mdi_taco +ﱡ - i_mdi_square_outline +ﱢ - i_mdi_square +ﱣ - i_mdi_circle +ﱤ - i_mdi_circle_outline +ﱥ - i_mdi_alert_octagram +ﱦ - i_mdi_atom +ﱧ - i_mdi_ceiling_light +ﱨ - i_mdi_chart_bar_stacked +ﱩ - i_mdi_chart_line_stacked +ﱪ - i_mdi_decagram +ﱫ - i_mdi_decagram_outline +ﱬ - i_mdi_dice_multiple +ﱭ - i_mdi_dice_d10 +ﱮ - i_mdi_folder_open +ﱯ - i_mdi_guitar_acoustic +ﱰ - i_mdi_loading +ﱱ - i_mdi_lock_reset +ﱲ - i_mdi_ninja +ﱳ - i_mdi_octagram_outline +ﱴ - i_mdi_pencil_circle_outline +ﱵ - i_mdi_selection_off +ﱶ - i_mdi_set_all +ﱷ - i_mdi_set_center +ﱸ - i_mdi_set_center_right +ﱹ - i_mdi_set_left +ﱺ - i_mdi_set_left_center +ﱻ - i_mdi_set_left_right +ﱼ - i_mdi_set_none +ﱽ - i_mdi_set_right +ﱾ - i_mdi_shield_half_full +ﱿ - i_mdi_sign_direction +ﲀ - i_mdi_sign_text +ﲁ - i_mdi_signal_off +ﲂ - i_mdi_square_root +ﲃ - i_mdi_sticker_emoji +ﲄ - i_mdi_summit +ﲅ - i_mdi_sword_cross +ﲆ - i_mdi_truck_fast +ﲇ - i_mdi_yammer +ﲈ - i_mdi_cast_off +ﲉ - i_mdi_help_box +ﲊ - i_mdi_timer_sand_full +ﲋ - i_mdi_waves +ﲌ - i_mdi_alarm_bell +ﲍ - i_mdi_alarm_light +ﲎ - i_mdi_android_head +ﲏ - i_mdi_approval +ﲐ - i_mdi_arrow_collapse_down +ﲑ - i_mdi_arrow_collapse_left +ﲒ - i_mdi_arrow_collapse_right +ﲓ - i_mdi_arrow_collapse_up +ﲔ - i_mdi_arrow_expand_down +ﲕ - i_mdi_arrow_expand_left +ﲖ - i_mdi_arrow_expand_right +ﲗ - i_mdi_arrow_expand_up +ﲘ - i_mdi_book_secure +ﲙ - i_mdi_book_unsecure +ﲚ - i_mdi_bus_articulated_end +ﲛ - i_mdi_bus_articulated_front +ﲜ - i_mdi_bus_double_decker +ﲝ - i_mdi_bus_school +ﲞ - i_mdi_bus_side +ﲟ - i_mdi_camera_gopro +ﲠ - i_mdi_camera_metering_center +ﲡ - i_mdi_camera_metering_matrix +ﲢ - i_mdi_camera_metering_partial +ﲣ - i_mdi_camera_metering_spot +ﲤ - i_mdi_cannabis +ﲥ - i_mdi_car_convertible +ﲦ - i_mdi_car_estate +ﲧ - i_mdi_car_hatchback +ﲨ - i_mdi_car_pickup +ﲩ - i_mdi_car_side +ﲪ - i_mdi_car_sports +ﲫ - i_mdi_caravan +ﲬ - i_mdi_cctv +ﲭ - i_mdi_chart_donut +ﲮ - i_mdi_chart_donut_variant +ﲯ - i_mdi_chart_line_variant +ﲰ - i_mdi_chili_hot +ﲱ - i_mdi_chili_medium +ﲲ - i_mdi_chili_mild +ﲳ - i_mdi_cloud_braces +ﲴ - i_mdi_cloud_tags +ﲵ - i_mdi_console_line +ﲶ - i_mdi_corn +ﲷ - i_mdi_currency_chf +ﲸ - i_mdi_currency_cny +ﲹ - i_mdi_currency_eth +ﲺ - i_mdi_currency_jpy +ﲻ - i_mdi_currency_krw +ﲼ - i_mdi_currency_sign +ﲽ - i_mdi_currency_twd +ﲾ - i_mdi_desktop_classic +ﲿ - i_mdi_dip_switch +ﳀ - i_mdi_donkey +ﳁ - i_mdi_dots_horizontal_circle +ﳂ - i_mdi_dots_vertical_circle +ﳃ - i_mdi_ear_hearing +ﳄ - i_mdi_elephant +ﳅ - i_mdi_eventbrite +ﳆ - i_mdi_food_croissant +ﳇ - i_mdi_forklift +ﳈ - i_mdi_fuel +ﳉ - i_mdi_gesture +ﳊ - i_mdi_google_analytics +ﳋ - i_mdi_google_assistant +ﳌ - i_mdi_headphones_off +ﳍ - i_mdi_high_definition +ﳎ - i_mdi_home_assistant +ﳏ - i_mdi_home_automation +ﳐ - i_mdi_home_circle +ﳑ - i_mdi_language_go +ﳒ - i_mdi_language_r +ﳓ - i_mdi_lava_lamp +ﳔ - i_mdi_led_strip +ﳕ - i_mdi_locker +ﳖ - i_mdi_locker_multiple +ﳗ - i_mdi_map_marker_outline +ﳘ - i_mdi_metronome +ﳙ - i_mdi_metronome_tick +ﳚ - i_mdi_micro_sd +ﳛ - i_mdi_mixer +ﳜ - i_mdi_movie_roll +ﳝ - i_mdi_mushroom +ﳞ - i_mdi_mushroom_outline +ﳟ - i_mdi_nintendo_switch +ﳠ - i_mdi_null +ﳡ - i_mdi_passport +ﳢ - i_mdi_periodic_table_co2 +ﳣ - i_mdi_pipe +ﳤ - i_mdi_pipe_disconnected +ﳥ - i_mdi_power_socket_eu +ﳦ - i_mdi_power_socket_uk +ﳧ - i_mdi_power_socket_us +ﳨ - i_mdi_rice +ﳩ - i_mdi_ring +ﳪ - i_mdi_sass +ﳫ - i_mdi_send_secure +ﳬ - i_mdi_soy_sauce +ﳭ - i_mdi_standard_definition +ﳮ - i_mdi_surround_sound_2_0 +ﳯ - i_mdi_surround_sound_3_1 +ﳰ - i_mdi_surround_sound_5_1 +ﳱ - i_mdi_surround_sound_7_1 +ﳲ - i_mdi_television_classic +ﳳ - i_mdi_textbox_password +ﳴ - i_mdi_thought_bubble +ﳵ - i_mdi_thought_bubble_outline +ﳶ - i_mdi_trackpad +ﳷ - i_mdi_ultra_high_definition +ﳸ - i_mdi_van_passenger +ﳹ - i_mdi_van_utility +ﳺ - i_mdi_vanish +ﳻ - i_mdi_video_3d +ﳼ - i_mdi_wall +ﳽ - i_mdi_xmpp +ﳾ - i_mdi_account_multiple_plus_outline +ﳿ - i_mdi_account_plus_outline +ﴀ - i_mdi_allo +ﴁ - i_mdi_artist +ﴂ - i_mdi_atlassian +ﴃ - i_mdi_azure +ﴄ - i_mdi_basketball +ﴅ - i_mdi_battery_charging_wireless +ﴆ - i_mdi_battery_charging_wireless_10 +ﴇ - i_mdi_battery_charging_wireless_20 +ﴈ - i_mdi_battery_charging_wireless_30 +ﴉ - i_mdi_battery_charging_wireless_40 +ﴊ - i_mdi_battery_charging_wireless_50 +ﴋ - i_mdi_battery_charging_wireless_60 +ﴌ - i_mdi_battery_charging_wireless_70 +ﴍ - i_mdi_battery_charging_wireless_80 +ﴎ - i_mdi_battery_charging_wireless_90 +ﴏ - i_mdi_battery_charging_wireless_alert +ﴐ - i_mdi_battery_charging_wireless_outline +ﴑ - i_mdi_bitcoin +ﴒ - i_mdi_briefcase_outline +ﴓ - i_mdi_cellphone_wireless +ﴔ - i_mdi_clover +ﴕ - i_mdi_comment_question +ﴖ - i_mdi_content_save_outline +ﴗ - i_mdi_delete_restore +ﴘ - i_mdi_door +ﴙ - i_mdi_door_closed +ﴚ - i_mdi_door_open +ﴛ - i_mdi_fan_off +ﴜ - i_mdi_file_percent +ﴝ - i_mdi_finance +ﴞ - i_mdi_flash_circle +ﴟ - i_mdi_floor_plan +ﴠ - i_mdi_forum_outline +ﴡ - i_mdi_golf +ﴢ - i_mdi_google_home +ﴣ - i_mdi_guy_fawkes_mask +ﴤ - i_mdi_home_account +ﴥ - i_mdi_home_heart +ﴦ - i_mdi_hot_tub +ﴧ - i_mdi_hulu +ﴨ - i_mdi_ice_cream +ﴩ - i_mdi_image_off +ﴪ - i_mdi_karate +ﴫ - i_mdi_ladybug +ﴬ - i_mdi_notebook +ﴭ - i_mdi_phone_return +ﴮ - i_mdi_poker_chip +ﴯ - i_mdi_shape +ﴰ - i_mdi_shape_outline +ﴱ - i_mdi_ship_wheel +ﴲ - i_mdi_soccer_field +ﴳ - i_mdi_table_column +ﴴ - i_mdi_table_of_contents +ﴵ - i_mdi_table_row +ﴶ - i_mdi_table_settings +ﴷ - i_mdi_television_box +ﴸ - i_mdi_television_classic_off +ﴹ - i_mdi_television_off +ﴺ - i_mdi_towing +ﴻ - i_mdi_upload_multiple +ﴼ - i_mdi_video_4k_box +ﴽ - i_mdi_video_input_antenna +﴾ - i_mdi_video_input_component +﴿ - i_mdi_video_input_hdmi +﵀ - i_mdi_video_input_svideo +﵁ - i_mdi_view_dashboard_variant +﵂ - i_mdi_vuejs +﵃ - i_mdi_xamarin +﵄ - i_mdi_xamarin_outline +﵅ - i_mdi_youtube_creator_studio +﵆ - i_mdi_youtube_gaming +♥ - i_oct_heart +⚡ - i_oct_zap + - i_oct_light_bulb + - i_oct_repo + - i_oct_repo_forked + - i_oct_repo_push + - i_oct_repo_pull + - i_oct_book + - i_oct_octoface + - i_oct_git_pull_request + - i_oct_mark_github + - i_oct_cloud_download + - i_oct_cloud_upload + - i_oct_keyboard + - i_oct_gist + - i_oct_file_code + - i_oct_file_text + - i_oct_file_media + - i_oct_file_zip + - i_oct_file_pdf + - i_oct_tag + - i_oct_file_directory + - i_oct_file_submodule + - i_oct_person + - i_oct_jersey + - i_oct_git_commit + - i_oct_git_branch + - i_oct_git_merge + - i_oct_mirror + - i_oct_issue_opened + - i_oct_issue_reopened + - i_oct_issue_closed + - i_oct_star + - i_oct_comment + - i_oct_question + - i_oct_alert + - i_oct_search + - i_oct_gear + - i_oct_radio_tower + - i_oct_tools + - i_oct_sign_out + - i_oct_rocket + - i_oct_rss + - i_oct_clippy + - i_oct_sign_in + - i_oct_organization + - i_oct_device_mobile + - i_oct_unfold + - i_oct_check + - i_oct_mail + - i_oct_mail_read + - i_oct_arrow_up + - i_oct_arrow_right + - i_oct_arrow_down + - i_oct_arrow_left + - i_oct_pin + - i_oct_gift + - i_oct_graph + - i_oct_triangle_left + - i_oct_credit_card + - i_oct_clock + - i_oct_ruby + - i_oct_broadcast + - i_oct_key + - i_oct_repo_force_push + - i_oct_repo_clone + - i_oct_diff + - i_oct_eye + - i_oct_comment_discussion + - i_oct_mail_reply + - i_oct_primitive_dot + - i_oct_primitive_square + - i_oct_device_camera + - i_oct_device_camera_video + - i_oct_pencil + - i_oct_info + - i_oct_triangle_right + - i_oct_triangle_down + - i_oct_link + - i_oct_plus + - i_oct_three_bars + - i_oct_code + - i_oct_location + - i_oct_list_unordered + - i_oct_list_ordered + - i_oct_quote + - i_oct_versions + - i_oct_calendar + - i_oct_lock + - i_oct_diff_added + - i_oct_diff_removed + - i_oct_diff_modified + - i_oct_diff_renamed + - i_oct_horizontal_rule + - i_oct_arrow_small_right + - i_oct_milestone + - i_oct_checklist + - i_oct_megaphone + - i_oct_chevron_right + - i_oct_bookmark + - i_oct_settings + - i_oct_dashboard + - i_oct_history + - i_oct_link_external + - i_oct_mute + - i_oct_x + - i_oct_circle_slash + - i_oct_pulse + - i_oct_sync + - i_oct_telescope + - i_oct_gist_secret + - i_oct_home + - i_oct_stop + - i_oct_bug + - i_oct_logo_github + - i_oct_file_binary + - i_oct_database + - i_oct_server + - i_oct_diff_ignored + - i_oct_ellipsis + - i_oct_no_newline + - i_oct_hubot + - i_oct_arrow_small_up + - i_oct_arrow_small_down + - i_oct_arrow_small_left + - i_oct_chevron_up + - i_oct_chevron_down + - i_oct_chevron_left + - i_oct_triangle_up + - i_oct_git_compare + - i_oct_logo_gist + - i_oct_file_symlink_file + - i_oct_file_symlink_directory + - i_oct_squirrel + - i_oct_globe + - i_oct_unmute + - i_oct_mention + - i_oct_package + - i_oct_browser + - i_oct_terminal + - i_oct_markdown + - i_oct_dash + - i_oct_fold + - i_oct_inbox + - i_oct_trashcan + - i_oct_paintcan + - i_oct_flame + - i_oct_briefcase + - i_oct_plug + - i_oct_circuit_board + - i_oct_mortar_board + - i_oct_law + - i_oct_thumbsup + - i_oct_thumbsdown + - i_oct_desktop_download + - i_oct_beaker + - i_oct_bell + - i_oct_watch + - i_oct_shield + - i_oct_bold + - i_oct_text_size + - i_oct_italic + - i_oct_tasklist + - i_oct_verified + - i_oct_smiley + - i_oct_unverified + - i_oct_ellipses + - i_oct_file + - i_oct_grabber + - i_oct_plus_small + - i_oct_reply + - i_oct_device_desktop + - i_pl_branch + - i_pl_line_number i_pl_current_line_pl_line_number + - i_pl_hostname i_pl_readonly_pl_hostname + - i_ple_column_number i_ple_current_column_ple_column_number + - i_pl_left_hard_divider + - i_pl_left_soft_divider + - i_pl_right_hard_divider + - i_pl_right_soft_divider + - i_ple_right_half_circle_thick + - i_ple_right_half_circle_thin + - i_ple_left_half_circle_thick + - i_ple_left_half_circle_thin + - i_ple_lower_left_triangle + - i_ple_backslash_separator + - i_ple_lower_right_triangle + - i_ple_forwardslash_separator + - i_ple_upper_left_triangle + - i_ple_forwardslash_separator_redundant + - i_ple_upper_right_triangle + - i_ple_backslash_separator_redundant + - i_ple_flame_thick + - i_ple_flame_thin + - i_ple_flame_thick_mirrored + - i_ple_flame_thin_mirrored + - i_ple_pixelated_squares_small + - i_ple_pixelated_squares_small_mirrored + - i_ple_pixelated_squares_big + - i_ple_pixelated_squares_big_mirrored + - i_ple_ice_waveform + - i_ple_ice_waveform_mirrored + - i_ple_honeycomb + - i_ple_honeycomb_outline + - i_ple_lego_separator + - i_ple_lego_separator_thin + - i_ple_lego_block_facing + - i_ple_lego_block_sideways + - i_ple_trapezoid_top_bottom + - i_ple_trapezoid_top_bottom_mirrored + - i_pom_clean_code + - i_pom_pomodoro_done + - i_pom_pomodoro_estimated + - i_pom_pomodoro_ticking + - i_pom_pomodoro_squashed + - i_pom_short_pause + - i_pom_long_pause + - i_pom_away + - i_pom_pair_programming + - i_pom_internal_interruption + - i_pom_external_interruption + - i_custom_folder_npm + - i_custom_folder_git i_custom_folder_git_branch_custom_folder_git + - i_custom_folder_config + - i_custom_folder_github + - i_custom_folder_open + - i_custom_folder + - i_seti_stylus + - i_seti_project + - i_seti_play_arrow + - i_seti_sass + - i_seti_rails + - i_seti_ruby + - i_seti_python + - i_seti_heroku + - i_seti_php + - i_seti_markdown + - i_seti_license + - i_seti_json i_seti_less_seti_json + - i_seti_javascript + - i_seti_image + - i_seti_html + - i_seti_mustache + - i_seti_gulp + - i_seti_grunt + - i_seti_default i_seti_text_seti_default + - i_seti_folder + - i_seti_css + - i_seti_config + - i_seti_npm + - i_seti_home + - i_seti_ejs + - i_seti_xml + - i_seti_bower + - i_seti_coffee i_seti_cjsx_seti_coffee + - i_seti_twig + - i_custom_cpp + - i_custom_c + - i_seti_haskell + - i_seti_lua + - i_indent_line i_indentation_line_indent_line i_indent_dotted_guide_indent_line + - i_seti_karma + - i_seti_favicon + - i_seti_julia + - i_seti_react + - i_custom_go + - i_seti_go + - i_seti_typescript + - i_custom_msdos + - i_custom_windows + - i_custom_vim + - i_custom_elm + - i_custom_elixir + - i_custom_electron + - i_weather_day_cloudy_gusts + - i_weather_day_cloudy_windy + - i_weather_day_cloudy + - i_weather_day_fog + - i_weather_day_hail + - i_weather_day_lightning + - i_weather_day_rain_mix + - i_weather_day_rain_wind + - i_weather_day_rain + - i_weather_day_showers + - i_weather_day_snow + - i_weather_day_sprinkle + - i_weather_day_sunny_overcast + - i_weather_day_sunny + - i_weather_day_storm_showers + - i_weather_day_thunderstorm + - i_weather_cloudy_gusts + - i_weather_cloudy_windy + - i_weather_cloudy + - i_weather_fog + - i_weather_hail + - i_weather_lightning + - i_weather_rain_mix + - i_weather_rain_wind + - i_weather_rain + - i_weather_showers + - i_weather_snow + - i_weather_sprinkle + - i_weather_storm_showers + - i_weather_thunderstorm + - i_weather_windy + - i_weather_night_alt_cloudy_gusts + - i_weather_night_alt_cloudy_windy + - i_weather_night_alt_hail + - i_weather_night_alt_lightning + - i_weather_night_alt_rain_mix + - i_weather_night_alt_rain_wind + - i_weather_night_alt_rain + - i_weather_night_alt_rain_mix + - i_weather_night_alt_snow + - i_weather_night_alt_sprinkle + - i_weather_night_alt_storm_showers + - i_weather_night_alt_thunderstorm + - i_weather_night_clear + - i_weather_night_cloudy_gusts + - i_weather_night_cloudy_windy + - i_weather_night_cloudy + - i_weather_night_hail + - i_weather_night_lightning + - i_weather_night_rain_mix + - i_weather_night_rain_wind + - i_weather_night_rain + - i_weather_night_showers + - i_weather_night_snow + - i_weather_night_sprinkle + - i_weather_night_storm_showers + - i_weather_night_thunderstorm + - i_weather_celsius + - i_weather_cloud_down + - i_weather_cloud_refresh + - i_weather_cloud_up + - i_weather_cloud + - i_weather_degrees + - i_weather_direction_down_left + - i_weather_direction_down + - i_weather_fahrenheit + - i_weather_horizon_alt + - i_weather_horizon + - i_weather_direction_left + - i_weather_aliens + - i_weather_night_fog + - i_weather_refresh_alt + - i_weather_refresh + - i_weather_direction_right + - i_weather_raindrops + - i_weather_strong_wind + - i_weather_sunrise + - i_weather_sunset + - i_weather_thermometer_exterior + - i_weather_thermometer_internal + - i_weather_thermometer + - i_weather_tornado + - i_weather_direction_up_right + - i_weather_direction_up + - i_weather_wind_west + - i_weather_wind_south_west + - i_weather_wind_south_east + - i_weather_wind_south + - i_weather_wind_north_west + - i_weather_wind_north_east + - i_weather_wind_north + - i_weather_wind_east + - i_weather_smoke + - i_weather_dust + - i_weather_snow_wind + - i_weather_day_snow_wind + - i_weather_night_snow_wind + - i_weather_night_alt_snow_wind + - i_weather_day_sleet_storm + - i_weather_night_sleet_storm + - i_weather_night_alt_sleet_storm + - i_weather_day_snow_thunderstorm + - i_weather_night_snow_thunderstorm + - i_weather_night_alt_snow_thunderstorm + - i_weather_solar_eclipse + - i_weather_lunar_eclipse + - i_weather_meteor + - i_weather_hot + - i_weather_hurricane + - i_weather_smog + - i_weather_alien + - i_weather_snowflake_cold + - i_weather_stars + - i_weather_raindrop + - i_weather_barometer + - i_weather_humidity + - i_weather_na + - i_weather_flood + - i_weather_day_cloudy_high + - i_weather_night_alt_cloudy_high + - i_weather_night_cloudy_high + - i_weather_night_alt_partly_cloudy + - i_weather_sandstorm + - i_weather_night_partly_cloudy + - i_weather_umbrella + - i_weather_day_windy + - i_weather_night_alt_cloudy + - i_weather_direction_up_left + - i_weather_direction_down_right + - i_weather_time_12 + - i_weather_time_1 + - i_weather_time_2 + - i_weather_time_3 + - i_weather_time_4 + - i_weather_time_5 + - i_weather_time_6 + - i_weather_time_7 + - i_weather_time_8 + - i_weather_time_9 + - i_weather_time_10 + - i_weather_time_11 + - i_weather_moon_new + - i_weather_moon_waxing_crescent_1 + - i_weather_moon_waxing_crescent_2 + - i_weather_moon_waxing_crescent_3 + - i_weather_moon_waxing_crescent_4 + - i_weather_moon_waxing_crescent_5 + - i_weather_moon_waxing_crescent_6 + - i_weather_moon_first_quarter + - i_weather_moon_waxing_gibbous_1 + - i_weather_moon_waxing_gibbous_2 + - i_weather_moon_waxing_gibbous_3 + - i_weather_moon_waxing_gibbous_4 + - i_weather_moon_waxing_gibbous_5 + - i_weather_moon_waxing_gibbous_6 + - i_weather_moon_full + - i_weather_moon_waning_gibbous_1 + - i_weather_moon_waning_gibbous_2 + - i_weather_moon_waning_gibbous_3 + - i_weather_moon_waning_gibbous_4 + - i_weather_moon_waning_gibbous_5 + - i_weather_moon_waning_gibbous_6 + - i_weather_moon_third_quarter + - i_weather_moon_waning_crescent_1 + - i_weather_moon_waning_crescent_2 + - i_weather_moon_waning_crescent_3 + - i_weather_moon_waning_crescent_4 + - i_weather_moon_waning_crescent_5 + - i_weather_moon_waning_crescent_6 + - i_weather_wind_direction + - i_weather_day_sleet + - i_weather_night_sleet + - i_weather_night_alt_sleet + - i_weather_sleet + - i_weather_day_haze + - i_weather_wind_beaufort_0 + - i_weather_wind_beaufort_1 + - i_weather_wind_beaufort_2 + - i_weather_wind_beaufort_3 + - i_weather_wind_beaufort_4 + - i_weather_wind_beaufort_5 + - i_weather_wind_beaufort_6 + - i_weather_wind_beaufort_7 + - i_weather_wind_beaufort_8 + - i_weather_wind_beaufort_9 + - i_weather_wind_beaufort_10 + - i_weather_wind_beaufort_11 + - i_weather_wind_beaufort_12 + - i_weather_day_light_wind + - i_weather_tsunami + - i_weather_earthquake + - i_weather_fire + - i_weather_volcano + - i_weather_moonrise + - i_weather_moonset + - i_weather_train + - i_weather_small_craft_advisory + - i_weather_gale_warning + - i_weather_storm_warning + - i_weather_hurricane_warning + - i_weather_moon_alt_waxing_crescent_1 + - i_weather_moon_alt_waxing_crescent_2 + - i_weather_moon_alt_waxing_crescent_3 + - i_weather_moon_alt_waxing_crescent_4 + - i_weather_moon_alt_waxing_crescent_5 + - i_weather_moon_alt_waxing_crescent_6 + - i_weather_moon_alt_first_quarter + - i_weather_moon_alt_waxing_gibbous_1 + - i_weather_moon_alt_waxing_gibbous_2 + - i_weather_moon_alt_waxing_gibbous_3 + - i_weather_moon_alt_waxing_gibbous_4 + - i_weather_moon_alt_waxing_gibbous_5 + - i_weather_moon_alt_waxing_gibbous_6 + - i_weather_moon_alt_full + - i_weather_moon_alt_waning_gibbous_1 + - i_weather_moon_alt_waning_gibbous_2 + - i_weather_moon_alt_waning_gibbous_3 + - i_weather_moon_alt_waning_gibbous_4 + - i_weather_moon_alt_waning_gibbous_5 + - i_weather_moon_alt_waning_gibbous_6 + - i_weather_moon_alt_third_quarter + - i_weather_moon_alt_waning_crescent_1 + - i_weather_moon_alt_waning_crescent_2 + - i_weather_moon_alt_waning_crescent_3 + - i_weather_moon_alt_waning_crescent_4 + - i_weather_moon_alt_waning_crescent_5 + - i_weather_moon_alt_waning_crescent_6 + - i_weather_moon_alt_new #+end_src * Emojis @@ -3707,1389 +3707,1389 @@ :END: #+begin_src conf :tangle ~/.local/data/emojis - 😀 grinning face; U+1F600 - 😃 grinning face with big eyes; U+1F603 - 😄 grinning face with smiling eyes; U+1F604 - 😁 beaming face with smiling eyes; U+1F601 - 😆 grinning squinting face; U+1F606 - 😅 grinning face with sweat; U+1F605 - 🤣 rolling on the floor laughing; U+1F923 - 😂 face with tears of joy; U+1F602 - 🙂 slightly smiling face; U+1F642 - 🙃 upside-down face; U+1F643 - 😉 winking face; U+1F609 - 😊 smiling face with smiling eyes; U+1F60A - 😇 smiling face with halo; U+1F607 - 🥰 smiling face with 3 hearts; U+1F970 - 😍 smiling face with heart-eyes; U+1F60D - 🤩 star-struck; U+1F929 - 😘 face blowing a kiss; U+1F618 - 😗 kissing face; U+1F617 - ☺ smiling face; U+263A - 😚 kissing face with closed eyes; U+1F61A - 😙 kissing face with smiling eyes; U+1F619 - 😋 face savoring food; U+1F60B - 😛 face with tongue; U+1F61B - 😜 winking face with tongue; U+1F61C - 🤪 zany face; U+1F92A - 😝 squinting face with tongue; U+1F61D - 🤑 money-mouth face; U+1F911 - 🤗 hugging face; U+1F917 - 🤭 face with hand over mouth; U+1F92D - 🤫 shushing face; U+1F92B - 🤔 thinking face; U+1F914 - 🤐 zipper-mouth face; U+1F910 - 🤨 face with raised eyebrow; U+1F928 - 😐 neutral face; U+1F610 - 😑 expressionless face; U+1F611 - 😶 face without mouth; U+1F636 - 😏 smirking face; U+1F60F - 😒 unamused face; U+1F612 - 🙄 face with rolling eyes; U+1F644 - 😬 grimacing face; U+1F62C - 🤥 lying face; U+1F925 - 😌 relieved face; U+1F60C - 😔 pensive face; U+1F614 - 😪 sleepy face; U+1F62A - 🤤 drooling face; U+1F924 - 😴 sleeping face; U+1F634 - 😷 face with medical mask; U+1F637 - 🤒 face with thermometer; U+1F912 - 🤕 face with head-bandage; U+1F915 - 🤢 nauseated face; U+1F922 - 🤮 face vomiting; U+1F92E - 🤧 sneezing face; U+1F927 - 🥵 hot face; U+1F975 - 🥶 cold face; U+1F976 - 🥴 woozy face; U+1F974 - 😵 dizzy face; U+1F635 - 🤯 exploding head; U+1F92F - 🤠 cowboy hat face; U+1F920 - 🥳 partying face; U+1F973 - 😎 smiling face with sunglasses; U+1F60E - 🤓 nerd face; U+1F913 - 🧐 face with monocle; U+1F9D0 - 😕 confused face; U+1F615 - 😟 worried face; U+1F61F - 🙁 slightly frowning face; U+1F641 - ☹ frowning face; U+2639 - 😮 face with open mouth; U+1F62E - 😯 hushed face; U+1F62F - 😲 astonished face; U+1F632 - 😳 flushed face; U+1F633 - 🥺 pleading face; U+1F97A - 😦 frowning face with open mouth; U+1F626 - 😧 anguished face; U+1F627 - 😨 fearful face; U+1F628 - 😰 anxious face with sweat; U+1F630 - 😥 sad but relieved face; U+1F625 - 😢 crying face; U+1F622 - 😭 loudly crying face; U+1F62D - 😱 face screaming in fear; U+1F631 - 😖 confounded face; U+1F616 - 😣 persevering face; U+1F623 - 😞 disappointed face; U+1F61E - 😓 downcast face with sweat; U+1F613 - 😩 weary face; U+1F629 - 😫 tired face; U+1F62B - 😤 face with steam from nose; U+1F624 - 😡 pouting face; U+1F621 - 😠 angry face; U+1F620 - 🤬 face with symbols on mouth; U+1F92C - 😈 smiling face with horns; U+1F608 - 👿 angry face with horns; U+1F47F - 💀 skull; U+1F480 - ☠ skull and crossbones; U+2620 - 💩 pile of poo; U+1F4A9 - 🤡 clown face; U+1F921 - 👹 ogre; U+1F479 - 👺 goblin; U+1F47A - 👻 ghost; U+1F47B - 👽 alien; U+1F47D - 👾 alien monster; U+1F47E - 🤖 robot face; U+1F916 - 😺 grinning cat face; U+1F63A - 😸 grinning cat face with smiling eyes; U+1F638 - 😹 cat face with tears of joy; U+1F639 - 😻 smiling cat face with heart-eyes; U+1F63B - 😼 cat face with wry smile; U+1F63C - 😽 kissing cat face; U+1F63D - 🙀 weary cat face; U+1F640 - 😿 crying cat face; U+1F63F - 😾 pouting cat face; U+1F63E - 🙈 see-no-evil monkey; U+1F648 - 🙉 hear-no-evil monkey; U+1F649 - 🙊 speak-no-evil monkey; U+1F64A - 💋 kiss mark; U+1F48B - 💌 love letter; U+1F48C - 💘 heart with arrow; U+1F498 - 💝 heart with ribbon; U+1F49D - 💖 sparkling heart; U+1F496 - 💗 growing heart; U+1F497 - 💓 beating heart; U+1F493 - 💞 revolving hearts; U+1F49E - 💕 two hearts; U+1F495 - 💟 heart decoration; U+1F49F - ❣ heavy heart exclamation; U+2763 - 💔 broken heart; U+1F494 - ❤ red heart; U+2764 - 🧡 orange heart; U+1F9E1 - 💛 yellow heart; U+1F49B - 💚 green heart; U+1F49A - 💙 blue heart; U+1F499 - 💜 purple heart; U+1F49C - 🖤 black heart; U+1F5A4 - 💯 hundred points; U+1F4AF - 💢 anger symbol; U+1F4A2 - 💥 collision; U+1F4A5 - 💫 dizzy; U+1F4AB - 💦 sweat droplets; U+1F4A6 - 💨 dashing away; U+1F4A8 - 🕳 hole; U+1F573 - 💣 bomb; U+1F4A3 - 💬 speech balloon; U+1F4AC - 👁️‍🗨️ eye in speech bubble; U+1F441 U+FE0F U+200D U+1F5E8 U+FE0F - 🗨 left speech bubble; U+1F5E8 - 🗯 right anger bubble; U+1F5EF - 💭 thought balloon; U+1F4AD - 💤 zzz; U+1F4A4 - 👋 waving hand; U+1F44B - 🤚 raised back of hand; U+1F91A - 🖐 hand with fingers splayed; U+1F590 - ✋ raised hand; U+270B - 🖖 vulcan salute; U+1F596 - 👌 OK hand; U+1F44C - ✌ victory hand; U+270C - 🤞 crossed fingers; U+1F91E - 🤟 love-you gesture; U+1F91F - 🤘 sign of the horns; U+1F918 - 🤙 call me hand; U+1F919 - 👈 backhand index pointing left; U+1F448 - 👉 backhand index pointing right; U+1F449 - 👆 backhand index pointing up; U+1F446 - 🖕 middle finger; U+1F595 - 👇 backhand index pointing down; U+1F447 - ☝ index pointing up; U+261D - 👍 thumbs up; U+1F44D - 👎 thumbs down; U+1F44E - ✊ raised fist; U+270A - 👊 oncoming fist; U+1F44A - 🤛 left-facing fist; U+1F91B - 🤜 right-facing fist; U+1F91C - 👏 clapping hands; U+1F44F - 🙌 raising hands; U+1F64C - 👐 open hands; U+1F450 - 🤲 palms up together; U+1F932 - 🤝 handshake; U+1F91D - 🙏 folded hands; U+1F64F - ✍ writing hand; U+270D - 💅 nail polish; U+1F485 - 🤳 selfie; U+1F933 - 💪 flexed biceps; U+1F4AA - 🦵 leg; U+1F9B5 - 🦶 foot; U+1F9B6 - 👂 ear; U+1F442 - 👃 nose; U+1F443 - 🧠 brain; U+1F9E0 - 🦷 tooth; U+1F9B7 - 🦴 bone; U+1F9B4 - 👀 eyes; U+1F440 - 👁 eye; U+1F441 - 👅 tongue; U+1F445 - 👄 mouth; U+1F444 - 👶 baby; U+1F476 - 🧒 child; U+1F9D2 - 👦 boy; U+1F466 - 👧 girl; U+1F467 - 🧑 person; U+1F9D1 - 👱 person: blond hair; U+1F471 - 👨 man; U+1F468 - 👱‍♂️ man: blond hair; U+1F471 U+200D U+2642 U+FE0F - 👨‍🦰 man: red hair; U+1F468 U+200D U+1F9B0 - 👨‍🦱 man: curly hair; U+1F468 U+200D U+1F9B1 - 👨‍🦳 man: white hair; U+1F468 U+200D U+1F9B3 - 👨‍🦲 man: bald; U+1F468 U+200D U+1F9B2 - 🧔 man: beard; U+1F9D4 - 👩 woman; U+1F469 - 👱‍♀️ woman: blond hair; U+1F471 U+200D U+2640 U+FE0F - 👩‍🦰 woman: red hair; U+1F469 U+200D U+1F9B0 - 👩‍🦱 woman: curly hair; U+1F469 U+200D U+1F9B1 - 👩‍🦳 woman: white hair; U+1F469 U+200D U+1F9B3 - 👩‍🦲 woman: bald; U+1F469 U+200D U+1F9B2 - 🧓 older person; U+1F9D3 - 👴 old man; U+1F474 - 👵 old woman; U+1F475 - 🙍 person frowning; U+1F64D - 🙍‍♂️ man frowning; U+1F64D U+200D U+2642 U+FE0F - 🙍‍♀️ woman frowning; U+1F64D U+200D U+2640 U+FE0F - 🙎 person pouting; U+1F64E - 🙎‍♂️ man pouting; U+1F64E U+200D U+2642 U+FE0F - 🙎‍♀️ woman pouting; U+1F64E U+200D U+2640 U+FE0F - 🙅 person gesturing NO; U+1F645 - 🙅‍♂️ man gesturing NO; U+1F645 U+200D U+2642 U+FE0F - 🙅‍♀️ woman gesturing NO; U+1F645 U+200D U+2640 U+FE0F - 🙆 person gesturing OK; U+1F646 - 🙆‍♂️ man gesturing OK; U+1F646 U+200D U+2642 U+FE0F - 🙆‍♀️ woman gesturing OK; U+1F646 U+200D U+2640 U+FE0F - 💁 person tipping hand; U+1F481 - 💁‍♂️ man tipping hand; U+1F481 U+200D U+2642 U+FE0F - 💁‍♀️ woman tipping hand; U+1F481 U+200D U+2640 U+FE0F - 🙋 person raising hand; U+1F64B - 🙋‍♂️ man raising hand; U+1F64B U+200D U+2642 U+FE0F - 🙋‍♀️ woman raising hand; U+1F64B U+200D U+2640 U+FE0F - 🙇 person bowing; U+1F647 - 🙇‍♂️ man bowing; U+1F647 U+200D U+2642 U+FE0F - 🙇‍♀️ woman bowing; U+1F647 U+200D U+2640 U+FE0F - 🤦 person facepalming; U+1F926 - 🤦‍♂️ man facepalming; U+1F926 U+200D U+2642 U+FE0F - 🤦‍♀️ woman facepalming; U+1F926 U+200D U+2640 U+FE0F - 🤷 person shrugging; U+1F937 - 🤷‍♂️ man shrugging; U+1F937 U+200D U+2642 U+FE0F - 🤷‍♀️ woman shrugging; U+1F937 U+200D U+2640 U+FE0F - 👨‍⚕️ man health worker; U+1F468 U+200D U+2695 U+FE0F - 👩‍⚕️ woman health worker; U+1F469 U+200D U+2695 U+FE0F - 👨‍🎓 man student; U+1F468 U+200D U+1F393 - 👩‍🎓 woman student; U+1F469 U+200D U+1F393 - 👨‍🏫 man teacher; U+1F468 U+200D U+1F3EB - 👩‍🏫 woman teacher; U+1F469 U+200D U+1F3EB - 👨‍⚖️ man judge; U+1F468 U+200D U+2696 U+FE0F - 👩‍⚖️ woman judge; U+1F469 U+200D U+2696 U+FE0F - 👨‍🌾 man farmer; U+1F468 U+200D U+1F33E - 👩‍🌾 woman farmer; U+1F469 U+200D U+1F33E - 👨‍🍳 man cook; U+1F468 U+200D U+1F373 - 👩‍🍳 woman cook; U+1F469 U+200D U+1F373 - 👨‍🔧 man mechanic; U+1F468 U+200D U+1F527 - 👩‍🔧 woman mechanic; U+1F469 U+200D U+1F527 - 👨‍🏭 man factory worker; U+1F468 U+200D U+1F3ED - 👩‍🏭 woman factory worker; U+1F469 U+200D U+1F3ED - 👨‍💼 man office worker; U+1F468 U+200D U+1F4BC - 👩‍💼 woman office worker; U+1F469 U+200D U+1F4BC - 👨‍🔬 man scientist; U+1F468 U+200D U+1F52C - 👩‍🔬 woman scientist; U+1F469 U+200D U+1F52C - 👨‍💻 man technologist; U+1F468 U+200D U+1F4BB - 👩‍💻 woman technologist; U+1F469 U+200D U+1F4BB - 👨‍🎤 man singer; U+1F468 U+200D U+1F3A4 - 👩‍🎤 woman singer; U+1F469 U+200D U+1F3A4 - 👨‍🎨 man artist; U+1F468 U+200D U+1F3A8 - 👩‍🎨 woman artist; U+1F469 U+200D U+1F3A8 - 👨‍✈️ man pilot; U+1F468 U+200D U+2708 U+FE0F - 👩‍✈️ woman pilot; U+1F469 U+200D U+2708 U+FE0F - 👨‍🚀 man astronaut; U+1F468 U+200D U+1F680 - 👩‍🚀 woman astronaut; U+1F469 U+200D U+1F680 - 👨‍🚒 man firefighter; U+1F468 U+200D U+1F692 - 👩‍🚒 woman firefighter; U+1F469 U+200D U+1F692 - 👮 police officer; U+1F46E - 👮‍♂️ man police officer; U+1F46E U+200D U+2642 U+FE0F - 👮‍♀️ woman police officer; U+1F46E U+200D U+2640 U+FE0F - 🕵 detective; U+1F575 - 🕵️‍♂️ man detective; U+1F575 U+FE0F U+200D U+2642 U+FE0F - 🕵️‍♀️ woman detective; U+1F575 U+FE0F U+200D U+2640 U+FE0F - 💂 guard; U+1F482 - 💂‍♂️ man guard; U+1F482 U+200D U+2642 U+FE0F - 💂‍♀️ woman guard; U+1F482 U+200D U+2640 U+FE0F - 👷 construction worker; U+1F477 - 👷‍♂️ man construction worker; U+1F477 U+200D U+2642 U+FE0F - 👷‍♀️ woman construction worker; U+1F477 U+200D U+2640 U+FE0F - 🤴 prince; U+1F934 - 👸 princess; U+1F478 - 👳 person wearing turban; U+1F473 - 👳‍♂️ man wearing turban; U+1F473 U+200D U+2642 U+FE0F - 👳‍♀️ woman wearing turban; U+1F473 U+200D U+2640 U+FE0F - 👲 man with Chinese cap; U+1F472 - 🧕 woman with headscarf; U+1F9D5 - 🤵 man in tuxedo; U+1F935 - 👰 bride with veil; U+1F470 - 🤰 pregnant woman; U+1F930 - 🤱 breast-feeding; U+1F931 - 👼 baby angel; U+1F47C - 🎅 Santa Claus; U+1F385 - 🤶 Mrs. Claus; U+1F936 - 🦸 superhero; U+1F9B8 - 🦸‍♂️ man superhero; U+1F9B8 U+200D U+2642 U+FE0F - 🦸‍♀️ woman superhero; U+1F9B8 U+200D U+2640 U+FE0F - 🦹 supervillain; U+1F9B9 - 🦹‍♂️ man supervillain; U+1F9B9 U+200D U+2642 U+FE0F - 🦹‍♀️ woman supervillain; U+1F9B9 U+200D U+2640 U+FE0F - 🧙 mage; U+1F9D9 - 🧙‍♂️ man mage; U+1F9D9 U+200D U+2642 U+FE0F - 🧙‍♀️ woman mage; U+1F9D9 U+200D U+2640 U+FE0F - 🧚 fairy; U+1F9DA - 🧚‍♂️ man fairy; U+1F9DA U+200D U+2642 U+FE0F - 🧚‍♀️ woman fairy; U+1F9DA U+200D U+2640 U+FE0F - 🧛 vampire; U+1F9DB - 🧛‍♂️ man vampire; U+1F9DB U+200D U+2642 U+FE0F - 🧛‍♀️ woman vampire; U+1F9DB U+200D U+2640 U+FE0F - 🧜 merperson; U+1F9DC - 🧜‍♂️ merman; U+1F9DC U+200D U+2642 U+FE0F - 🧜‍♀️ mermaid; U+1F9DC U+200D U+2640 U+FE0F - 🧝 elf; U+1F9DD - 🧝‍♂️ man elf; U+1F9DD U+200D U+2642 U+FE0F - 🧝‍♀️ woman elf; U+1F9DD U+200D U+2640 U+FE0F - 🧞 genie; U+1F9DE - 🧞‍♂️ man genie; U+1F9DE U+200D U+2642 U+FE0F - 🧞‍♀️ woman genie; U+1F9DE U+200D U+2640 U+FE0F - 🧟 zombie; U+1F9DF - 🧟‍♂️ man zombie; U+1F9DF U+200D U+2642 U+FE0F - 🧟‍♀️ woman zombie; U+1F9DF U+200D U+2640 U+FE0F - 💆 person getting massage; U+1F486 - 💆‍♂️ man getting massage; U+1F486 U+200D U+2642 U+FE0F - 💆‍♀️ woman getting massage; U+1F486 U+200D U+2640 U+FE0F - 💇 person getting haircut; U+1F487 - 💇‍♂️ man getting haircut; U+1F487 U+200D U+2642 U+FE0F - 💇‍♀️ woman getting haircut; U+1F487 U+200D U+2640 U+FE0F - 🚶 person walking; U+1F6B6 - 🚶‍♂️ man walking; U+1F6B6 U+200D U+2642 U+FE0F - 🚶‍♀️ woman walking; U+1F6B6 U+200D U+2640 U+FE0F - 🏃 person running; U+1F3C3 - 🏃‍♂️ man running; U+1F3C3 U+200D U+2642 U+FE0F - 🏃‍♀️ woman running; U+1F3C3 U+200D U+2640 U+FE0F - 💃 woman dancing; U+1F483 - 🕺 man dancing; U+1F57A - 🕴 man in suit levitating; U+1F574 - 👯 people with bunny ears; U+1F46F - 👯‍♂️ men with bunny ears; U+1F46F U+200D U+2642 U+FE0F - 👯‍♀️ women with bunny ears; U+1F46F U+200D U+2640 U+FE0F - 🧖 person in steamy room; U+1F9D6 - 🧖‍♂️ man in steamy room; U+1F9D6 U+200D U+2642 U+FE0F - 🧖‍♀️ woman in steamy room; U+1F9D6 U+200D U+2640 U+FE0F - 🧗 person climbing; U+1F9D7 - 🧗‍♂️ man climbing; U+1F9D7 U+200D U+2642 U+FE0F - 🧗‍♀️ woman climbing; U+1F9D7 U+200D U+2640 U+FE0F - 🤺 person fencing; U+1F93A - 🏇 horse racing; U+1F3C7 - ⛷ skier; U+26F7 - 🏂 snowboarder; U+1F3C2 - 🏌 person golfing; U+1F3CC - 🏌️‍♂️ man golfing; U+1F3CC U+FE0F U+200D U+2642 U+FE0F - 🏌️‍♀️ woman golfing; U+1F3CC U+FE0F U+200D U+2640 U+FE0F - 🏄 person surfing; U+1F3C4 - 🏄‍♂️ man surfing; U+1F3C4 U+200D U+2642 U+FE0F - 🏄‍♀️ woman surfing; U+1F3C4 U+200D U+2640 U+FE0F - 🚣 person rowing boat; U+1F6A3 - 🚣‍♂️ man rowing boat; U+1F6A3 U+200D U+2642 U+FE0F - 🚣‍♀️ woman rowing boat; U+1F6A3 U+200D U+2640 U+FE0F - 🏊 person swimming; U+1F3CA - 🏊‍♂️ man swimming; U+1F3CA U+200D U+2642 U+FE0F - 🏊‍♀️ woman swimming; U+1F3CA U+200D U+2640 U+FE0F - ⛹ person bouncing ball; U+26F9 - ⛹️‍♂️ man bouncing ball; U+26F9 U+FE0F U+200D U+2642 U+FE0F - ⛹️‍♀️ woman bouncing ball; U+26F9 U+FE0F U+200D U+2640 U+FE0F - 🏋 person lifting weights; U+1F3CB - 🏋️‍♂️ man lifting weights; U+1F3CB U+FE0F U+200D U+2642 U+FE0F - 🏋️‍♀️ woman lifting weights; U+1F3CB U+FE0F U+200D U+2640 U+FE0F - 🚴 person biking; U+1F6B4 - 🚴‍♂️ man biking; U+1F6B4 U+200D U+2642 U+FE0F - 🚴‍♀️ woman biking; U+1F6B4 U+200D U+2640 U+FE0F - 🚵 person mountain biking; U+1F6B5 - 🚵‍♂️ man mountain biking; U+1F6B5 U+200D U+2642 U+FE0F - 🚵‍♀️ woman mountain biking; U+1F6B5 U+200D U+2640 U+FE0F - 🤸 person cartwheeling; U+1F938 - 🤸‍♂️ man cartwheeling; U+1F938 U+200D U+2642 U+FE0F - 🤸‍♀️ woman cartwheeling; U+1F938 U+200D U+2640 U+FE0F - 🤼 people wrestling; U+1F93C - 🤼‍♂️ men wrestling; U+1F93C U+200D U+2642 U+FE0F - 🤼‍♀️ women wrestling; U+1F93C U+200D U+2640 U+FE0F - 🤽 person playing water polo; U+1F93D - 🤽‍♂️ man playing water polo; U+1F93D U+200D U+2642 U+FE0F - 🤽‍♀️ woman playing water polo; U+1F93D U+200D U+2640 U+FE0F - 🤾 person playing handball; U+1F93E - 🤾‍♂️ man playing handball; U+1F93E U+200D U+2642 U+FE0F - 🤾‍♀️ woman playing handball; U+1F93E U+200D U+2640 U+FE0F - 🤹 person juggling; U+1F939 - 🤹‍♂️ man juggling; U+1F939 U+200D U+2642 U+FE0F - 🤹‍♀️ woman juggling; U+1F939 U+200D U+2640 U+FE0F - 🧘 person in lotus position; U+1F9D8 - 🧘‍♂️ man in lotus position; U+1F9D8 U+200D U+2642 U+FE0F - 🧘‍♀️ woman in lotus position; U+1F9D8 U+200D U+2640 U+FE0F - 🛀 person taking bath; U+1F6C0 - 🛌 person in bed; U+1F6CC - 👭 women holding hands; U+1F46D - 👫 woman and man holding hands; U+1F46B - 👬 men holding hands; U+1F46C - 💏 kiss; U+1F48F - 👩‍❤️‍💋‍👨 kiss: woman, man; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468 - 👨‍❤️‍💋‍👨 kiss: man, man; U+1F468 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468 - 👩‍❤️‍💋‍👩 kiss: woman, woman; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F469 - 💑 couple with heart; U+1F491 - 👩‍❤️‍👨 couple with heart: woman, man; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F468 - 👨‍❤️‍👨 couple with heart: man, man; U+1F468 U+200D U+2764 U+FE0F U+200D U+1F468 - 👩‍❤️‍👩 couple with heart: woman, woman; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F469 - 👪 family; U+1F46A - 👨‍👩‍👦 family: man, woman, boy; U+1F468 U+200D U+1F469 U+200D U+1F466 - 👨‍👩‍👧 family: man, woman, girl; U+1F468 U+200D U+1F469 U+200D U+1F467 - 👨‍👩‍👧‍👦 family: man, woman, girl, boy; U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466 - 👨‍👩‍👦‍👦 family: man, woman, boy, boy; U+1F468 U+200D U+1F469 U+200D U+1F466 U+200D U+1F466 - 👨‍👩‍👧‍👧 family: man, woman, girl, girl; U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F467 - 👨‍👨‍👦 family: man, man, boy; U+1F468 U+200D U+1F468 U+200D U+1F466 - 👨‍👨‍👧 family: man, man, girl; U+1F468 U+200D U+1F468 U+200D U+1F467 - 👨‍👨‍👧‍👦 family: man, man, girl, boy; U+1F468 U+200D U+1F468 U+200D U+1F467 U+200D U+1F466 - 👨‍👨‍👦‍👦 family: man, man, boy, boy; U+1F468 U+200D U+1F468 U+200D U+1F466 U+200D U+1F466 - 👨‍👨‍👧‍👧 family: man, man, girl, girl; U+1F468 U+200D U+1F468 U+200D U+1F467 U+200D U+1F467 - 👩‍👩‍👦 family: woman, woman, boy; U+1F469 U+200D U+1F469 U+200D U+1F466 - 👩‍👩‍👧 family: woman, woman, girl; U+1F469 U+200D U+1F469 U+200D U+1F467 - 👩‍👩‍👧‍👦 family: woman, woman, girl, boy; U+1F469 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466 - 👩‍👩‍👦‍👦 family: woman, woman, boy, boy; U+1F469 U+200D U+1F469 U+200D U+1F466 U+200D U+1F466 - 👩‍👩‍👧‍👧 family: woman, woman, girl, girl; U+1F469 U+200D U+1F469 U+200D U+1F467 U+200D U+1F467 - 👨‍👦 family: man, boy; U+1F468 U+200D U+1F466 - 👨‍👦‍👦 family: man, boy, boy; U+1F468 U+200D U+1F466 U+200D U+1F466 - 👨‍👧 family: man, girl; U+1F468 U+200D U+1F467 - 👨‍👧‍👦 family: man, girl, boy; U+1F468 U+200D U+1F467 U+200D U+1F466 - 👨‍👧‍👧 family: man, girl, girl; U+1F468 U+200D U+1F467 U+200D U+1F467 - 👩‍👦 family: woman, boy; U+1F469 U+200D U+1F466 - 👩‍👦‍👦 family: woman, boy, boy; U+1F469 U+200D U+1F466 U+200D U+1F466 - 👩‍👧 family: woman, girl; U+1F469 U+200D U+1F467 - 👩‍👧‍👦 family: woman, girl, boy; U+1F469 U+200D U+1F467 U+200D U+1F466 - 👩‍👧‍👧 family: woman, girl, girl; U+1F469 U+200D U+1F467 U+200D U+1F467 - 🗣 speaking head; U+1F5E3 - 👤 bust in silhouette; U+1F464 - 👥 busts in silhouette; U+1F465 - 👣 footprints; U+1F463 - 🦰 red hair; U+1F9B0 - 🦱 curly hair; U+1F9B1 - 🦳 white hair; U+1F9B3 - 🦲 bald; U+1F9B2 - 🐵 monkey face; U+1F435 - 🐒 monkey; U+1F412 - 🦍 gorilla; U+1F98D - 🐶 dog face; U+1F436 - 🐕 dog; U+1F415 - 🐩 poodle; U+1F429 - 🐺 wolf face; U+1F43A - 🦊 fox face; U+1F98A - 🦝 raccoon; U+1F99D - 🐱 cat face; U+1F431 - 🐈 cat; U+1F408 - 🦁 lion face; U+1F981 - 🐯 tiger face; U+1F42F - 🐅 tiger; U+1F405 - 🐆 leopard; U+1F406 - 🐴 horse face; U+1F434 - 🐎 horse; U+1F40E - 🦄 unicorn face; U+1F984 - 🦓 zebra; U+1F993 - 🦌 deer; U+1F98C - 🐮 cow face; U+1F42E - 🐂 ox; U+1F402 - 🐃 water buffalo; U+1F403 - 🐄 cow; U+1F404 - 🐷 pig face; U+1F437 - 🐖 pig; U+1F416 - 🐗 boar; U+1F417 - 🐽 pig nose; U+1F43D - 🐏 ram; U+1F40F - 🐑 ewe; U+1F411 - 🐐 goat; U+1F410 - 🐪 camel; U+1F42A - 🐫 two-hump camel; U+1F42B - 🦙 llama; U+1F999 - 🦒 giraffe; U+1F992 - 🐘 elephant; U+1F418 - 🦏 rhinoceros; U+1F98F - 🦛 hippopotamus; U+1F99B - 🐭 mouse face; U+1F42D - 🐁 mouse; U+1F401 - 🐀 rat; U+1F400 - 🐹 hamster face; U+1F439 - 🐰 rabbit face; U+1F430 - 🐇 rabbit; U+1F407 - 🐿 chipmunk; U+1F43F - 🦔 hedgehog; U+1F994 - 🦇 bat; U+1F987 - 🐻 bear face; U+1F43B - 🐨 koala; U+1F428 - 🐼 panda face; U+1F43C - 🦘 kangaroo; U+1F998 - 🦡 badger; U+1F9A1 - 🐾 paw prints; U+1F43E - 🦃 turkey; U+1F983 - 🐔 chicken; U+1F414 - 🐓 rooster; U+1F413 - 🐣 hatching chick; U+1F423 - 🐤 baby chick; U+1F424 - 🐥 front-facing baby chick; U+1F425 - 🐦 bird; U+1F426 - 🐧 penguin; U+1F427 - 🕊 dove; U+1F54A - 🦅 eagle; U+1F985 - 🦆 duck; U+1F986 - 🦢 swan; U+1F9A2 - 🦉 owl; U+1F989 - 🦚 peacock; U+1F99A - 🦜 parrot; U+1F99C - 🐸 frog face; U+1F438 - 🐊 crocodile; U+1F40A - 🐢 turtle; U+1F422 - 🦎 lizard; U+1F98E - 🐍 snake; U+1F40D - 🐲 dragon face; U+1F432 - 🐉 dragon; U+1F409 - 🦕 sauropod; U+1F995 - 🦖 T-Rex; U+1F996 - 🐳 spouting whale; U+1F433 - 🐋 whale; U+1F40B - 🐬 dolphin; U+1F42C - 🐟 fish; U+1F41F - 🐠 tropical fish; U+1F420 - 🐡 blowfish; U+1F421 - 🦈 shark; U+1F988 - 🐙 octopus; U+1F419 - 🐚 spiral shell; U+1F41A - 🐌 snail; U+1F40C - 🦋 butterfly; U+1F98B - 🐛 bug; U+1F41B - 🐜 ant; U+1F41C - 🐝 honeybee; U+1F41D - 🐞 lady beetle; U+1F41E - 🦗 cricket; U+1F997 - 🕷 spider; U+1F577 - 🕸 spider web; U+1F578 - 🦂 scorpion; U+1F982 - 🦟 mosquito; U+1F99F - 🦠 microbe; U+1F9A0 - 💐 bouquet; U+1F490 - 🌸 cherry blossom; U+1F338 - 💮 white flower; U+1F4AE - 🏵 rosette; U+1F3F5 - 🌹 rose; U+1F339 - 🥀 wilted flower; U+1F940 - 🌺 hibiscus; U+1F33A - 🌻 sunflower; U+1F33B - 🌼 blossom; U+1F33C - 🌷 tulip; U+1F337 - 🌱 seedling; U+1F331 - 🌲 evergreen tree; U+1F332 - 🌳 deciduous tree; U+1F333 - 🌴 palm tree; U+1F334 - 🌵 cactus; U+1F335 - 🌾 sheaf of rice; U+1F33E - 🌿 herb; U+1F33F - ☘ shamrock; U+2618 - 🍀 four leaf clover; U+1F340 - 🍁 maple leaf; U+1F341 - 🍂 fallen leaf; U+1F342 - 🍃 leaf fluttering in wind; U+1F343 - 🍇 grapes; U+1F347 - 🍈 melon; U+1F348 - 🍉 watermelon; U+1F349 - 🍊 tangerine; U+1F34A - 🍋 lemon; U+1F34B - 🍌 banana; U+1F34C - 🍍 pineapple; U+1F34D - 🥭 mango; U+1F96D - 🍎 red apple; U+1F34E - 🍏 green apple; U+1F34F - 🍐 pear; U+1F350 - 🍑 peach; U+1F351 - 🍒 cherries; U+1F352 - 🍓 strawberry; U+1F353 - 🥝 kiwi fruit; U+1F95D - 🍅 tomato; U+1F345 - 🥥 coconut; U+1F965 - 🥑 avocado; U+1F951 - 🍆 eggplant; U+1F346 - 🥔 potato; U+1F954 - 🥕 carrot; U+1F955 - 🌽 ear of corn; U+1F33D - 🌶 hot pepper; U+1F336 - 🥒 cucumber; U+1F952 - 🥬 leafy green; U+1F96C - 🥦 broccoli; U+1F966 - 🍄 mushroom; U+1F344 - 🥜 peanuts; U+1F95C - 🌰 chestnut; U+1F330 - 🍞 bread; U+1F35E - 🥐 croissant; U+1F950 - 🥖 baguette bread; U+1F956 - 🥨 pretzel; U+1F968 - 🥯 bagel; U+1F96F - 🥞 pancakes; U+1F95E - 🧀 cheese wedge; U+1F9C0 - 🍖 meat on bone; U+1F356 - 🍗 poultry leg; U+1F357 - 🥩 cut of meat; U+1F969 - 🥓 bacon; U+1F953 - 🍔 hamburger; U+1F354 - 🍟 french fries; U+1F35F - 🍕 pizza; U+1F355 - 🌭 hot dog; U+1F32D - 🥪 sandwich; U+1F96A - 🌮 taco; U+1F32E - 🌯 burrito; U+1F32F - 🥙 stuffed flatbread; U+1F959 - 🥚 egg; U+1F95A - 🍳 cooking; U+1F373 - 🥘 shallow pan of food; U+1F958 - 🍲 pot of food; U+1F372 - 🥣 bowl with spoon; U+1F963 - 🥗 green salad; U+1F957 - 🍿 popcorn; U+1F37F - 🧂 salt; U+1F9C2 - 🥫 canned food; U+1F96B - 🍱 bento box; U+1F371 - 🍘 rice cracker; U+1F358 - 🍙 rice ball; U+1F359 - 🍚 cooked rice; U+1F35A - 🍛 curry rice; U+1F35B - 🍜 steaming bowl; U+1F35C - 🍝 spaghetti; U+1F35D - 🍠 roasted sweet potato; U+1F360 - 🍢 oden; U+1F362 - 🍣 sushi; U+1F363 - 🍤 fried shrimp; U+1F364 - 🍥 fish cake with swirl; U+1F365 - 🥮 moon cake; U+1F96E - 🍡 dango; U+1F361 - 🥟 dumpling; U+1F95F - 🥠 fortune cookie; U+1F960 - 🥡 takeout box; U+1F961 - 🦀 crab; U+1F980 - 🦞 lobster; U+1F99E - 🦐 shrimp; U+1F990 - 🦑 squid; U+1F991 - 🍦 soft ice cream; U+1F366 - 🍧 shaved ice; U+1F367 - 🍨 ice cream; U+1F368 - 🍩 doughnut; U+1F369 - 🍪 cookie; U+1F36A - 🎂 birthday cake; U+1F382 - 🍰 shortcake; U+1F370 - 🧁 cupcake; U+1F9C1 - 🥧 pie; U+1F967 - 🍫 chocolate bar; U+1F36B - 🍬 candy; U+1F36C - 🍭 lollipop; U+1F36D - 🍮 custard; U+1F36E - 🍯 honey pot; U+1F36F - 🍼 baby bottle; U+1F37C - 🥛 glass of milk; U+1F95B - ☕ hot beverage; U+2615 - 🍵 teacup without handle; U+1F375 - 🍶 sake; U+1F376 - 🍾 bottle with popping cork; U+1F37E - 🍷 wine glass; U+1F377 - 🍸 cocktail glass; U+1F378 - 🍹 tropical drink; U+1F379 - 🍺 beer mug; U+1F37A - 🍻 clinking beer mugs; U+1F37B - 🥂 clinking glasses; U+1F942 - 🥃 tumbler glass; U+1F943 - 🥤 cup with straw; U+1F964 - 🥢 chopsticks; U+1F962 - 🍽 fork and knife with plate; U+1F37D - 🍴 fork and knife; U+1F374 - 🥄 spoon; U+1F944 - 🔪 kitchen knife; U+1F52A - 🏺 amphora; U+1F3FA - 🌍 globe showing Europe-Africa; U+1F30D - 🌎 globe showing Americas; U+1F30E - 🌏 globe showing Asia-Australia; U+1F30F - 🌐 globe with meridians; U+1F310 - 🗺 world map; U+1F5FA - 🗾 map of Japan; U+1F5FE - 🧭 compass; U+1F9ED - 🏔 snow-capped mountain; U+1F3D4 - ⛰ mountain; U+26F0 - 🌋 volcano; U+1F30B - 🗻 mount fuji; U+1F5FB - 🏕 camping; U+1F3D5 - 🏖 beach with umbrella; U+1F3D6 - 🏜 desert; U+1F3DC - 🏝 desert island; U+1F3DD - 🏞 national park; U+1F3DE - 🏟 stadium; U+1F3DF - 🏛 classical building; U+1F3DB - 🏗 building construction; U+1F3D7 - 🧱 brick; U+1F9F1 - 🏘 houses; U+1F3D8 - 🏚 derelict house; U+1F3DA - 🏠 house; U+1F3E0 - 🏡 house with garden; U+1F3E1 - 🏢 office building; U+1F3E2 - 🏣 Japanese post office; U+1F3E3 - 🏤 post office; U+1F3E4 - 🏥 hospital; U+1F3E5 - 🏦 bank; U+1F3E6 - 🏨 hotel; U+1F3E8 - 🏩 love hotel; U+1F3E9 - 🏪 convenience store; U+1F3EA - 🏫 school; U+1F3EB - 🏬 department store; U+1F3EC - 🏭 factory; U+1F3ED - 🏯 Japanese castle; U+1F3EF - 🏰 castle; U+1F3F0 - 💒 wedding; U+1F492 - 🗼 Tokyo tower; U+1F5FC - 🗽 Statue of Liberty; U+1F5FD - ⛪ church; U+26EA - 🕌 mosque; U+1F54C - 🕍 synagogue; U+1F54D - ⛩ shinto shrine; U+26E9 - 🕋 kaaba; U+1F54B - ⛲ fountain; U+26F2 - ⛺ tent; U+26FA - 🌁 foggy; U+1F301 - 🌃 night with stars; U+1F303 - 🏙 cityscape; U+1F3D9 - 🌄 sunrise over mountains; U+1F304 - 🌅 sunrise; U+1F305 - 🌆 cityscape at dusk; U+1F306 - 🌇 sunset; U+1F307 - 🌉 bridge at night; U+1F309 - ♨ hot springs; U+2668 - 🌌 milky way; U+1F30C - 🎠 carousel horse; U+1F3A0 - 🎡 ferris wheel; U+1F3A1 - 🎢 roller coaster; U+1F3A2 - 💈 barber pole; U+1F488 - 🎪 circus tent; U+1F3AA - 🚂 locomotive; U+1F682 - 🚃 railway car; U+1F683 - 🚄 high-speed train; U+1F684 - 🚅 bullet train; U+1F685 - 🚆 train; U+1F686 - 🚇 metro; U+1F687 - 🚈 light rail; U+1F688 - 🚉 station; U+1F689 - 🚊 tram; U+1F68A - 🚝 monorail; U+1F69D - 🚞 mountain railway; U+1F69E - 🚋 tram car; U+1F68B - 🚌 bus; U+1F68C - 🚍 oncoming bus; U+1F68D - 🚎 trolleybus; U+1F68E - 🚐 minibus; U+1F690 - 🚑 ambulance; U+1F691 - 🚒 fire engine; U+1F692 - 🚓 police car; U+1F693 - 🚔 oncoming police car; U+1F694 - 🚕 taxi; U+1F695 - 🚖 oncoming taxi; U+1F696 - 🚗 automobile; U+1F697 - 🚘 oncoming automobile; U+1F698 - 🚙 sport utility vehicle; U+1F699 - 🚚 delivery truck; U+1F69A - 🚛 articulated lorry; U+1F69B - 🚜 tractor; U+1F69C - 🏎 racing car; U+1F3CE - 🏍 motorcycle; U+1F3CD - 🛵 motor scooter; U+1F6F5 - 🚲 bicycle; U+1F6B2 - 🛴 kick scooter; U+1F6F4 - 🛹 skateboard; U+1F6F9 - 🚏 bus stop; U+1F68F - 🛣 motorway; U+1F6E3 - 🛤 railway track; U+1F6E4 - 🛢 oil drum; U+1F6E2 - ⛽ fuel pump; U+26FD - 🚨 police car light; U+1F6A8 - 🚥 horizontal traffic light; U+1F6A5 - 🚦 vertical traffic light; U+1F6A6 - 🛑 stop sign; U+1F6D1 - 🚧 construction; U+1F6A7 - ⚓ anchor; U+2693 - ⛵ sailboat; U+26F5 - 🛶 canoe; U+1F6F6 - 🚤 speedboat; U+1F6A4 - 🛳 passenger ship; U+1F6F3 - ⛴ ferry; U+26F4 - 🛥 motor boat; U+1F6E5 - 🚢 ship; U+1F6A2 - ✈ airplane; U+2708 - 🛩 small airplane; U+1F6E9 - 🛫 airplane departure; U+1F6EB - 🛬 airplane arrival; U+1F6EC - 💺 seat; U+1F4BA - 🚁 helicopter; U+1F681 - 🚟 suspension railway; U+1F69F - 🚠 mountain cableway; U+1F6A0 - 🚡 aerial tramway; U+1F6A1 - 🛰 satellite; U+1F6F0 - 🚀 rocket; U+1F680 - 🛸 flying saucer; U+1F6F8 - 🛎 bellhop bell; U+1F6CE - 🧳 luggage; U+1F9F3 - ⌛ hourglass done; U+231B - ⏳ hourglass not done; U+23F3 - ⌚ watch; U+231A - ⏰ alarm clock; U+23F0 - ⏱ stopwatch; U+23F1 - ⏲ timer clock; U+23F2 - 🕰 mantelpiece clock; U+1F570 - 🕛 twelve o’clock; U+1F55B - 🕧 twelve-thirty; U+1F567 - 🕐 one o’clock; U+1F550 - 🕜 one-thirty; U+1F55C - 🕑 two o’clock; U+1F551 - 🕝 two-thirty; U+1F55D - 🕒 three o’clock; U+1F552 - 🕞 three-thirty; U+1F55E - 🕓 four o’clock; U+1F553 - 🕟 four-thirty; U+1F55F - 🕔 five o’clock; U+1F554 - 🕠 five-thirty; U+1F560 - 🕕 six o’clock; U+1F555 - 🕡 six-thirty; U+1F561 - 🕖 seven o’clock; U+1F556 - 🕢 seven-thirty; U+1F562 - 🕗 eight o’clock; U+1F557 - 🕣 eight-thirty; U+1F563 - 🕘 nine o’clock; U+1F558 - 🕤 nine-thirty; U+1F564 - 🕙 ten o’clock; U+1F559 - 🕥 ten-thirty; U+1F565 - 🕚 eleven o’clock; U+1F55A - 🕦 eleven-thirty; U+1F566 - 🌑 new moon; U+1F311 - 🌒 waxing crescent moon; U+1F312 - 🌓 first quarter moon; U+1F313 - 🌔 waxing gibbous moon; U+1F314 - 🌕 full moon; U+1F315 - 🌖 waning gibbous moon; U+1F316 - 🌗 last quarter moon; U+1F317 - 🌘 waning crescent moon; U+1F318 - 🌙 crescent moon; U+1F319 - 🌚 new moon face; U+1F31A - 🌛 first quarter moon face; U+1F31B - 🌜 last quarter moon face; U+1F31C - 🌡 thermometer; U+1F321 - ☀ sun; U+2600 - 🌝 full moon face; U+1F31D - 🌞 sun with face; U+1F31E - ⭐ star; U+2B50 - 🌟 glowing star; U+1F31F - 🌠 shooting star; U+1F320 - ☁ cloud; U+2601 - ⛅ sun behind cloud; U+26C5 - ⛈ cloud with lightning and rain; U+26C8 - 🌤 sun behind small cloud; U+1F324 - 🌥 sun behind large cloud; U+1F325 - 🌦 sun behind rain cloud; U+1F326 - 🌧 cloud with rain; U+1F327 - 🌨 cloud with snow; U+1F328 - 🌩 cloud with lightning; U+1F329 - 🌪 tornado; U+1F32A - 🌫 fog; U+1F32B - 🌬 wind face; U+1F32C - 🌀 cyclone; U+1F300 - 🌈 rainbow; U+1F308 - 🌂 closed umbrella; U+1F302 - ☂ umbrella; U+2602 - ☔ umbrella with rain drops; U+2614 - ⛱ umbrella on ground; U+26F1 - ⚡ high voltage; U+26A1 - ❄ snowflake; U+2744 - ☃ snowman; U+2603 - ⛄ snowman without snow; U+26C4 - ☄ comet; U+2604 - 🔥 fire; U+1F525 - 💧 droplet; U+1F4A7 - 🌊 water wave; U+1F30A - 🎃 jack-o-lantern; U+1F383 - 🎄 Christmas tree; U+1F384 - 🎆 fireworks; U+1F386 - 🎇 sparkler; U+1F387 - 🧨 firecracker; U+1F9E8 - ✨ sparkles; U+2728 - 🎈 balloon; U+1F388 - 🎉 party popper; U+1F389 - 🎊 confetti ball; U+1F38A - 🎋 tanabata tree; U+1F38B - 🎍 pine decoration; U+1F38D - 🎎 Japanese dolls; U+1F38E - 🎏 carp streamer; U+1F38F - 🎐 wind chime; U+1F390 - 🎑 moon viewing ceremony; U+1F391 - 🧧 red envelope; U+1F9E7 - 🎀 ribbon; U+1F380 - 🎁 wrapped gift; U+1F381 - 🎗 reminder ribbon; U+1F397 - 🎟 admission tickets; U+1F39F - 🎫 ticket; U+1F3AB - 🎖 military medal; U+1F396 - 🏆 trophy; U+1F3C6 - 🏅 sports medal; U+1F3C5 - 1st place medal; U+1F947 🥇 - 2nd place medal; U+1F948 🥈 - 3rd place medal; U+1F949 🥉 - ⚽ soccer ball; U+26BD - ⚾ baseball; U+26BE - 🥎 softball; U+1F94E - 🏀 basketball; U+1F3C0 - 🏐 volleyball; U+1F3D0 - 🏈 american football; U+1F3C8 - 🏉 rugby football; U+1F3C9 - 🎾 tennis; U+1F3BE - 🥏 flying disc; U+1F94F - 🎳 bowling; U+1F3B3 - 🏏 cricket game; U+1F3CF - 🏑 field hockey; U+1F3D1 - 🏒 ice hockey; U+1F3D2 - 🥍 lacrosse; U+1F94D - 🏓 ping pong; U+1F3D3 - 🏸 badminton; U+1F3F8 - 🥊 boxing glove; U+1F94A - 🥋 martial arts uniform; U+1F94B - 🥅 goal net; U+1F945 - ⛳ flag in hole; U+26F3 - ⛸ ice skate; U+26F8 - 🎣 fishing pole; U+1F3A3 - 🎽 running shirt; U+1F3BD - 🎿 skis; U+1F3BF - 🛷 sled; U+1F6F7 - 🥌 curling stone; U+1F94C - 🎯 direct hit; U+1F3AF - 🎱 pool 8 ball; U+1F3B1 - 🔮 crystal ball; U+1F52E - 🧿 nazar amulet; U+1F9FF - 🎮 video game; U+1F3AE - 🕹 joystick; U+1F579 - 🎰 slot machine; U+1F3B0 - 🎲 game die; U+1F3B2 - 🧩 jigsaw; U+1F9E9 - 🧸 teddy bear; U+1F9F8 - ♠ spade suit; U+2660 - ♥ heart suit; U+2665 - ♦ diamond suit; U+2666 - ♣ club suit; U+2663 - ♟ chess pawn; U+265F - 🃏 joker; U+1F0CF - 🀄 mahjong red dragon; U+1F004 - 🎴 flower playing cards; U+1F3B4 - 🎭 performing arts; U+1F3AD - 🖼 framed picture; U+1F5BC - 🎨 artist palette; U+1F3A8 - 🧵 thread; U+1F9F5 - 🧶 yarn; U+1F9F6 - 👓 glasses; U+1F453 - 🕶 sunglasses; U+1F576 - 🥽 goggles; U+1F97D - 🥼 lab coat; U+1F97C - 👔 necktie; U+1F454 - 👕 t-shirt; U+1F455 - 👖 jeans; U+1F456 - 🧣 scarf; U+1F9E3 - 🧤 gloves; U+1F9E4 - 🧥 coat; U+1F9E5 - 🧦 socks; U+1F9E6 - 👗 dress; U+1F457 - 👘 kimono; U+1F458 - 👙 bikini; U+1F459 - 👚 woman’s clothes; U+1F45A - 👛 purse; U+1F45B - 👜 handbag; U+1F45C - 👝 clutch bag; U+1F45D - 🛍 shopping bags; U+1F6CD - 🎒 backpack; U+1F392 - 👞 man’s shoe; U+1F45E - 👟 running shoe; U+1F45F - 🥾 hiking boot; U+1F97E - 🥿 flat shoe; U+1F97F - 👠 high-heeled shoe; U+1F460 - 👡 woman’s sandal; U+1F461 - 👢 woman’s boot; U+1F462 - 👑 crown; U+1F451 - 👒 woman’s hat; U+1F452 - 🎩 top hat; U+1F3A9 - 🎓 graduation cap; U+1F393 - 🧢 billed cap; U+1F9E2 - ⛑ rescue worker’s helmet; U+26D1 - 📿 prayer beads; U+1F4FF - 💄 lipstick; U+1F484 - 💍 ring; U+1F48D - 💎 gem stone; U+1F48E - 🔇 muted speaker; U+1F507 - 🔈 speaker low volume; U+1F508 - 🔉 speaker medium volume; U+1F509 - 🔊 speaker high volume; U+1F50A - 📢 loudspeaker; U+1F4E2 - 📣 megaphone; U+1F4E3 - 📯 postal horn; U+1F4EF - 🔔 bell; U+1F514 - 🔕 bell with slash; U+1F515 - 🎼 musical score; U+1F3BC - 🎵 musical note; U+1F3B5 - 🎶 musical notes; U+1F3B6 - 🎙 studio microphone; U+1F399 - 🎚 level slider; U+1F39A - 🎛 control knobs; U+1F39B - 🎤 microphone; U+1F3A4 - 🎧 headphone; U+1F3A7 - 📻 radio; U+1F4FB - 🎷 saxophone; U+1F3B7 - 🎸 guitar; U+1F3B8 - 🎹 musical keyboard; U+1F3B9 - 🎺 trumpet; U+1F3BA - 🎻 violin; U+1F3BB - 🥁 drum; U+1F941 - 📱 mobile phone; U+1F4F1 - 📲 mobile phone with arrow; U+1F4F2 - ☎ telephone; U+260E - 📞 telephone receiver; U+1F4DE - 📟 pager; U+1F4DF - 📠 fax machine; U+1F4E0 - 🔋 battery; U+1F50B - 🔌 electric plug; U+1F50C - 💻 laptop computer; U+1F4BB - 🖥 desktop computer; U+1F5A5 - 🖨 printer; U+1F5A8 - ⌨ keyboard; U+2328 - 🖱 computer mouse; U+1F5B1 - 🖲 trackball; U+1F5B2 - 💽 computer disk; U+1F4BD - 💾 floppy disk; U+1F4BE - 💿 optical disk; U+1F4BF - 📀 dvd; U+1F4C0 - 🧮 abacus; U+1F9EE - 🎥 movie camera; U+1F3A5 - 🎞 film frames; U+1F39E - 📽 film projector; U+1F4FD - 🎬 clapper board; U+1F3AC - 📺 television; U+1F4FA - 📷 camera; U+1F4F7 - 📸 camera with flash; U+1F4F8 - 📹 video camera; U+1F4F9 - 📼 videocassette; U+1F4FC - 🔍 magnifying glass tilted left; U+1F50D - 🔎 magnifying glass tilted right; U+1F50E - 🕯 candle; U+1F56F - 💡 light bulb; U+1F4A1 - 🔦 flashlight; U+1F526 - 🏮 red paper lantern; U+1F3EE - 📔 notebook with decorative cover; U+1F4D4 - 📕 closed book; U+1F4D5 - 📖 open book; U+1F4D6 - 📗 green book; U+1F4D7 - 📘 blue book; U+1F4D8 - 📙 orange book; U+1F4D9 - 📚 books; U+1F4DA - 📓 notebook; U+1F4D3 - 📒 ledger; U+1F4D2 - 📃 page with curl; U+1F4C3 - 📜 scroll; U+1F4DC - 📄 page facing up; U+1F4C4 - 📰 newspaper; U+1F4F0 - 🗞 rolled-up newspaper; U+1F5DE - 📑 bookmark tabs; U+1F4D1 - 🔖 bookmark; U+1F516 - 🏷 label; U+1F3F7 - 💰 money bag; U+1F4B0 - 💴 yen banknote; U+1F4B4 - 💵 dollar banknote; U+1F4B5 - 💶 euro banknote; U+1F4B6 - 💷 pound banknote; U+1F4B7 - 💸 money with wings; U+1F4B8 - 💳 credit card; U+1F4B3 - 🧾 receipt; U+1F9FE - 💹 chart increasing with yen; U+1F4B9 - 💱 currency exchange; U+1F4B1 - 💲 heavy dollar sign; U+1F4B2 - ✉ envelope; U+2709 - 📧 e-mail; U+1F4E7 - 📨 incoming envelope; U+1F4E8 - 📩 envelope with arrow; U+1F4E9 - 📤 outbox tray; U+1F4E4 - 📥 inbox tray; U+1F4E5 - 📦 package; U+1F4E6 - 📫 closed mailbox with raised flag; U+1F4EB - 📪 closed mailbox with lowered flag; U+1F4EA - 📬 open mailbox with raised flag; U+1F4EC - 📭 open mailbox with lowered flag; U+1F4ED - 📮 postbox; U+1F4EE - 🗳 ballot box with ballot; U+1F5F3 - ✏ pencil; U+270F - ✒ black nib; U+2712 - 🖋 fountain pen; U+1F58B - 🖊 pen; U+1F58A - 🖌 paintbrush; U+1F58C - 🖍 crayon; U+1F58D - 📝 memo; U+1F4DD - 💼 briefcase; U+1F4BC - 📁 file folder; U+1F4C1 - 📂 open file folder; U+1F4C2 - 🗂 card index dividers; U+1F5C2 - 📅 calendar; U+1F4C5 - 📆 tear-off calendar; U+1F4C6 - 🗒 spiral notepad; U+1F5D2 - 🗓 spiral calendar; U+1F5D3 - 📇 card index; U+1F4C7 - 📈 chart increasing; U+1F4C8 - 📉 chart decreasing; U+1F4C9 - 📊 bar chart; U+1F4CA - 📋 clipboard; U+1F4CB - 📌 pushpin; U+1F4CC - 📍 round pushpin; U+1F4CD - 📎 paperclip; U+1F4CE - 🖇 linked paperclips; U+1F587 - 📏 straight ruler; U+1F4CF - 📐 triangular ruler; U+1F4D0 - ✂ scissors; U+2702 - 🗃 card file box; U+1F5C3 - 🗄 file cabinet; U+1F5C4 - 🗑 wastebasket; U+1F5D1 - 🔒 locked; U+1F512 - 🔓 unlocked; U+1F513 - 🔏 locked with pen; U+1F50F - 🔐 locked with key; U+1F510 - 🔑 key; U+1F511 - 🗝 old key; U+1F5DD - 🔨 hammer; U+1F528 - ⛏ pick; U+26CF - ⚒ hammer and pick; U+2692 - 🛠 hammer and wrench; U+1F6E0 - 🗡 dagger; U+1F5E1 - ⚔ crossed swords; U+2694 - 🔫 pistol; U+1F52B - 🏹 bow and arrow; U+1F3F9 - 🛡 shield; U+1F6E1 - 🔧 wrench; U+1F527 - 🔩 nut and bolt; U+1F529 - ⚙ gear; U+2699 - 🗜 clamp; U+1F5DC - ⚖ balance scale; U+2696 - 🔗 link; U+1F517 - ⛓ chains; U+26D3 - 🧰 toolbox; U+1F9F0 - 🧲 magnet; U+1F9F2 - ⚗ alembic; U+2697 - 🧪 test tube; U+1F9EA - 🧫 petri dish; U+1F9EB - 🧬 dna; U+1F9EC - 🔬 microscope; U+1F52C - 🔭 telescope; U+1F52D - 📡 satellite antenna; U+1F4E1 - 💉 syringe; U+1F489 - 💊 pill; U+1F48A - 🚪 door; U+1F6AA - 🛏 bed; U+1F6CF - 🛋 couch and lamp; U+1F6CB - 🚽 toilet; U+1F6BD - 🚿 shower; U+1F6BF - 🛁 bathtub; U+1F6C1 - 🧴 lotion bottle; U+1F9F4 - 🧷 safety pin; U+1F9F7 - 🧹 broom; U+1F9F9 - 🧺 basket; U+1F9FA - 🧻 roll of paper; U+1F9FB - 🧼 soap; U+1F9FC - 🧽 sponge; U+1F9FD - 🧯 fire extinguisher; U+1F9EF - 🛒 shopping cart; U+1F6D2 - 🚬 cigarette; U+1F6AC - ⚰ coffin; U+26B0 - ⚱ funeral urn; U+26B1 - 🗿 moai; U+1F5FF - 🏧 ATM sign; U+1F3E7 - 🚮 litter in bin sign; U+1F6AE - 🚰 potable water; U+1F6B0 - ♿ wheelchair symbol; U+267F - 🚹 men’s room; U+1F6B9 - 🚺 women’s room; U+1F6BA - 🚻 restroom; U+1F6BB - 🚼 baby symbol; U+1F6BC - 🚾 water closet; U+1F6BE - 🛂 passport control; U+1F6C2 - 🛃 customs; U+1F6C3 - 🛄 baggage claim; U+1F6C4 - 🛅 left luggage; U+1F6C5 - ⚠ warning; U+26A0 - 🚸 children crossing; U+1F6B8 - ⛔ no entry; U+26D4 - 🚫 prohibited; U+1F6AB - 🚳 no bicycles; U+1F6B3 - 🚭 no smoking; U+1F6AD - 🚯 no littering; U+1F6AF - 🚱 non-potable water; U+1F6B1 - 🚷 no pedestrians; U+1F6B7 - 📵 no mobile phones; U+1F4F5 - 🔞 no one under eighteen; U+1F51E - ☢ radioactive; U+2622 - ☣ biohazard; U+2623 - ⬆ up arrow; U+2B06 - ↗ up-right arrow; U+2197 - ➡ right arrow; U+27A1 - ↘ down-right arrow; U+2198 - ⬇ down arrow; U+2B07 - ↙ down-left arrow; U+2199 - ⬅ left arrow; U+2B05 - ↖ up-left arrow; U+2196 - ↕ up-down arrow; U+2195 - ↔ left-right arrow; U+2194 - ↩ right arrow curving left; U+21A9 - ↪ left arrow curving right; U+21AA - ⤴ right arrow curving up; U+2934 - ⤵ right arrow curving down; U+2935 - 🔃 clockwise vertical arrows; U+1F503 - 🔄 counterclockwise arrows button; U+1F504 - 🔙 BACK arrow; U+1F519 - 🔚 END arrow; U+1F51A - 🔛 ON! arrow; U+1F51B - 🔜 SOON arrow; U+1F51C - 🔝 TOP arrow; U+1F51D - 🛐 place of worship; U+1F6D0 - ⚛ atom symbol; U+269B - 🕉 om; U+1F549 - ✡ star of David; U+2721 - ☸ wheel of dharma; U+2638 - ☯ yin yang; U+262F - ✝ latin cross; U+271D - ☦ orthodox cross; U+2626 - ☪ star and crescent; U+262A - ☮ peace symbol; U+262E - 🕎 menorah; U+1F54E - 🔯 dotted six-pointed star; U+1F52F - ♈ Aries; U+2648 - ♉ Taurus; U+2649 - ♊ Gemini; U+264A - ♋ Cancer; U+264B - ♌ Leo; U+264C - ♍ Virgo; U+264D - ♎ Libra; U+264E - ♏ Scorpio; U+264F - ♐ Sagittarius; U+2650 - ♑ Capricorn; U+2651 - ♒ Aquarius; U+2652 - ♓ Pisces; U+2653 - ⛎ Ophiuchus; U+26CE - 🔀 shuffle tracks button; U+1F500 - 🔁 repeat button; U+1F501 - 🔂 repeat single button; U+1F502 - ▶ play button; U+25B6 - ⏩ fast-forward button; U+23E9 - ⏭ next track button; U+23ED - ⏯ play or pause button; U+23EF - ◀ reverse button; U+25C0 - ⏪ fast reverse button; U+23EA - ⏮ last track button; U+23EE - 🔼 upwards button; U+1F53C - ⏫ fast up button; U+23EB - 🔽 downwards button; U+1F53D - ⏬ fast down button; U+23EC - ⏸ pause button; U+23F8 - ⏹ stop button; U+23F9 - ⏺ record button; U+23FA - ⏏ eject button; U+23CF - 🎦 cinema; U+1F3A6 - 🔅 dim button; U+1F505 - 🔆 bright button; U+1F506 - 📶 antenna bars; U+1F4F6 - 📳 vibration mode; U+1F4F3 - 📴 mobile phone off; U+1F4F4 - ♀ female sign; U+2640 - ♂ male sign; U+2642 - ⚕ medical symbol; U+2695 - ♾ infinity; U+267E - ♻ recycling symbol; U+267B - ⚜ fleur-de-lis; U+269C - 🔱 trident emblem; U+1F531 - 📛 name badge; U+1F4DB - 🔰 Japanese symbol for beginner; U+1F530 - ⭕ heavy large circle; U+2B55 - ✅ white heavy check mark; U+2705 - ☑ ballot box with check; U+2611 - ✔ heavy check mark; U+2714 - ✖ heavy multiplication x; U+2716 - ❌ cross mark; U+274C - ❎ cross mark button; U+274E - ➕ heavy plus sign; U+2795 - ➖ heavy minus sign; U+2796 - ➗ heavy division sign; U+2797 - ➰ curly loop; U+27B0 - ➿ double curly loop; U+27BF - 〽 part alternation mark; U+303D - ✳ eight-spoked asterisk; U+2733 - ✴ eight-pointed star; U+2734 - ❇ sparkle; U+2747 - ‼ double exclamation mark; U+203C - ⁉ exclamation question mark; U+2049 - ❓ question mark; U+2753 - ❔ white question mark; U+2754 - ❕ white exclamation mark; U+2755 - ❗ exclamation mark; U+2757 - 〰 wavy dash; U+3030 - © copyright; U+00A9 - ® registered; U+00AE - ™ trade mark; U+2122 - #️⃣ keycap: #; U+0023 U+FE0F U+20E3 - ,*️⃣ keycap: *; U+002A U+FE0F U+20E3 - 0️⃣ keycap: 0; U+0030 U+FE0F U+20E3 - 1️⃣ keycap: 1; U+0031 U+FE0F U+20E3 - 2️⃣ keycap: 2; U+0032 U+FE0F U+20E3 - 3️⃣ keycap: 3; U+0033 U+FE0F U+20E3 - 4️⃣ keycap: 4; U+0034 U+FE0F U+20E3 - 5️⃣ keycap: 5; U+0035 U+FE0F U+20E3 - 6️⃣ keycap: 6; U+0036 U+FE0F U+20E3 - 7️⃣ keycap: 7; U+0037 U+FE0F U+20E3 - 8️⃣ keycap: 8; U+0038 U+FE0F U+20E3 - 9️⃣ keycap: 9; U+0039 U+FE0F U+20E3 - 🔟 keycap: 10; U+1F51F - 🔠 input latin uppercase; U+1F520 - 🔡 input latin lowercase; U+1F521 - 🔢 input numbers; U+1F522 - 🔣 input symbols; U+1F523 - 🔤 input latin letters; U+1F524 - 🅰 A button (blood type); U+1F170 - 🆎 AB button (blood type); U+1F18E - 🅱 B button (blood type); U+1F171 - 🆑 CL button; U+1F191 - 🆒 COOL button; U+1F192 - 🆓 FREE button; U+1F193 - ℹ information; U+2139 - 🆔 ID button; U+1F194 - Ⓜ circled M; U+24C2 - 🆕 NEW button; U+1F195 - 🆖 NG button; U+1F196 - 🅾 O button (blood type); U+1F17E - 🆗 OK button; U+1F197 - 🅿 P button; U+1F17F - 🆘 SOS button; U+1F198 - 🆙 UP! button; U+1F199 - 🆚 VS button; U+1F19A - 🈁 Japanese “here” button; U+1F201 - 🈂 Japanese “service charge” button; U+1F202 - 🈷 Japanese “monthly amount” button; U+1F237 - 🈶 Japanese “not free of charge” button; U+1F236 - 🈯 Japanese “reserved” button; U+1F22F - 🉐 Japanese “bargain” button; U+1F250 - 🈹 Japanese “discount” button; U+1F239 - 🈚 Japanese “free of charge” button; U+1F21A - 🈲 Japanese “prohibited” button; U+1F232 - 🉑 Japanese “acceptable” button; U+1F251 - 🈸 Japanese “application” button; U+1F238 - 🈴 Japanese “passing grade” button; U+1F234 - 🈳 Japanese “vacancy” button; U+1F233 - ㊗ Japanese “congratulations” button; U+3297 - ㊙ Japanese “secret” button; U+3299 - 🈺 Japanese “open for business” button; U+1F23A - 🈵 Japanese “no vacancy” button; U+1F235 - 🔴 red circle; U+1F534 - 🔵 blue circle; U+1F535 - ⚪ white circle; U+26AA - ⚫ black circle; U+26AB - ⬜ white large square; U+2B1C - ⬛ black large square; U+2B1B - ◼ black medium square; U+25FC - ◻ white medium square; U+25FB - ◽ white medium-small square; U+25FD - ◾ black medium-small square; U+25FE - ▫ white small square; U+25AB - ▪ black small square; U+25AA - 🔶 large orange diamond; U+1F536 - 🔷 large blue diamond; U+1F537 - 🔸 small orange diamond; U+1F538 - 🔹 small blue diamond; U+1F539 - 🔺 red triangle pointed up; U+1F53A - 🔻 red triangle pointed down; U+1F53B - 💠 diamond with a dot; U+1F4A0 - 🔘 radio button; U+1F518 - 🔲 black square button; U+1F532 - 🔳 white square button; U+1F533 - 🏁 chequered flag; U+1F3C1 - 🚩 triangular flag; U+1F6A9 - 🎌 crossed flags; U+1F38C - 🏴 black flag; U+1F3F4 - 🏳 white flag; U+1F3F3 - 🏳️‍🌈 rainbow flag; U+1F3F3 U+FE0F U+200D U+1F308 - 🏴‍☠️ pirate flag; U+1F3F4 U+200D U+2620 U+FE0F +😀 grinning face; U+1F600 +😃 grinning face with big eyes; U+1F603 +😄 grinning face with smiling eyes; U+1F604 +😁 beaming face with smiling eyes; U+1F601 +😆 grinning squinting face; U+1F606 +😅 grinning face with sweat; U+1F605 +🤣 rolling on the floor laughing; U+1F923 +😂 face with tears of joy; U+1F602 +🙂 slightly smiling face; U+1F642 +🙃 upside-down face; U+1F643 +😉 winking face; U+1F609 +😊 smiling face with smiling eyes; U+1F60A +😇 smiling face with halo; U+1F607 +🥰 smiling face with 3 hearts; U+1F970 +😍 smiling face with heart-eyes; U+1F60D +🤩 star-struck; U+1F929 +😘 face blowing a kiss; U+1F618 +😗 kissing face; U+1F617 +☺ smiling face; U+263A +😚 kissing face with closed eyes; U+1F61A +😙 kissing face with smiling eyes; U+1F619 +😋 face savoring food; U+1F60B +😛 face with tongue; U+1F61B +😜 winking face with tongue; U+1F61C +🤪 zany face; U+1F92A +😝 squinting face with tongue; U+1F61D +🤑 money-mouth face; U+1F911 +🤗 hugging face; U+1F917 +🤭 face with hand over mouth; U+1F92D +🤫 shushing face; U+1F92B +🤔 thinking face; U+1F914 +🤐 zipper-mouth face; U+1F910 +🤨 face with raised eyebrow; U+1F928 +😐 neutral face; U+1F610 +😑 expressionless face; U+1F611 +😶 face without mouth; U+1F636 +😏 smirking face; U+1F60F +😒 unamused face; U+1F612 +🙄 face with rolling eyes; U+1F644 +😬 grimacing face; U+1F62C +🤥 lying face; U+1F925 +😌 relieved face; U+1F60C +😔 pensive face; U+1F614 +😪 sleepy face; U+1F62A +🤤 drooling face; U+1F924 +😴 sleeping face; U+1F634 +😷 face with medical mask; U+1F637 +🤒 face with thermometer; U+1F912 +🤕 face with head-bandage; U+1F915 +🤢 nauseated face; U+1F922 +🤮 face vomiting; U+1F92E +🤧 sneezing face; U+1F927 +🥵 hot face; U+1F975 +🥶 cold face; U+1F976 +🥴 woozy face; U+1F974 +😵 dizzy face; U+1F635 +🤯 exploding head; U+1F92F +🤠 cowboy hat face; U+1F920 +🥳 partying face; U+1F973 +😎 smiling face with sunglasses; U+1F60E +🤓 nerd face; U+1F913 +🧐 face with monocle; U+1F9D0 +😕 confused face; U+1F615 +😟 worried face; U+1F61F +🙁 slightly frowning face; U+1F641 +☹ frowning face; U+2639 +😮 face with open mouth; U+1F62E +😯 hushed face; U+1F62F +😲 astonished face; U+1F632 +😳 flushed face; U+1F633 +🥺 pleading face; U+1F97A +😦 frowning face with open mouth; U+1F626 +😧 anguished face; U+1F627 +😨 fearful face; U+1F628 +😰 anxious face with sweat; U+1F630 +😥 sad but relieved face; U+1F625 +😢 crying face; U+1F622 +😭 loudly crying face; U+1F62D +😱 face screaming in fear; U+1F631 +😖 confounded face; U+1F616 +😣 persevering face; U+1F623 +😞 disappointed face; U+1F61E +😓 downcast face with sweat; U+1F613 +😩 weary face; U+1F629 +😫 tired face; U+1F62B +😤 face with steam from nose; U+1F624 +😡 pouting face; U+1F621 +😠 angry face; U+1F620 +🤬 face with symbols on mouth; U+1F92C +😈 smiling face with horns; U+1F608 +👿 angry face with horns; U+1F47F +💀 skull; U+1F480 +☠ skull and crossbones; U+2620 +💩 pile of poo; U+1F4A9 +🤡 clown face; U+1F921 +👹 ogre; U+1F479 +👺 goblin; U+1F47A +👻 ghost; U+1F47B +👽 alien; U+1F47D +👾 alien monster; U+1F47E +🤖 robot face; U+1F916 +😺 grinning cat face; U+1F63A +😸 grinning cat face with smiling eyes; U+1F638 +😹 cat face with tears of joy; U+1F639 +😻 smiling cat face with heart-eyes; U+1F63B +😼 cat face with wry smile; U+1F63C +😽 kissing cat face; U+1F63D +🙀 weary cat face; U+1F640 +😿 crying cat face; U+1F63F +😾 pouting cat face; U+1F63E +🙈 see-no-evil monkey; U+1F648 +🙉 hear-no-evil monkey; U+1F649 +🙊 speak-no-evil monkey; U+1F64A +💋 kiss mark; U+1F48B +💌 love letter; U+1F48C +💘 heart with arrow; U+1F498 +💝 heart with ribbon; U+1F49D +💖 sparkling heart; U+1F496 +💗 growing heart; U+1F497 +💓 beating heart; U+1F493 +💞 revolving hearts; U+1F49E +💕 two hearts; U+1F495 +💟 heart decoration; U+1F49F +❣ heavy heart exclamation; U+2763 +💔 broken heart; U+1F494 +❤ red heart; U+2764 +🧡 orange heart; U+1F9E1 +💛 yellow heart; U+1F49B +💚 green heart; U+1F49A +💙 blue heart; U+1F499 +💜 purple heart; U+1F49C +🖤 black heart; U+1F5A4 +💯 hundred points; U+1F4AF +💢 anger symbol; U+1F4A2 +💥 collision; U+1F4A5 +💫 dizzy; U+1F4AB +💦 sweat droplets; U+1F4A6 +💨 dashing away; U+1F4A8 +🕳 hole; U+1F573 +💣 bomb; U+1F4A3 +💬 speech balloon; U+1F4AC +👁️‍🗨️ eye in speech bubble; U+1F441 U+FE0F U+200D U+1F5E8 U+FE0F +🗨 left speech bubble; U+1F5E8 +🗯 right anger bubble; U+1F5EF +💭 thought balloon; U+1F4AD +💤 zzz; U+1F4A4 +👋 waving hand; U+1F44B +🤚 raised back of hand; U+1F91A +🖐 hand with fingers splayed; U+1F590 +✋ raised hand; U+270B +🖖 vulcan salute; U+1F596 +👌 OK hand; U+1F44C +✌ victory hand; U+270C +🤞 crossed fingers; U+1F91E +🤟 love-you gesture; U+1F91F +🤘 sign of the horns; U+1F918 +🤙 call me hand; U+1F919 +👈 backhand index pointing left; U+1F448 +👉 backhand index pointing right; U+1F449 +👆 backhand index pointing up; U+1F446 +🖕 middle finger; U+1F595 +👇 backhand index pointing down; U+1F447 +☝ index pointing up; U+261D +👍 thumbs up; U+1F44D +👎 thumbs down; U+1F44E +✊ raised fist; U+270A +👊 oncoming fist; U+1F44A +🤛 left-facing fist; U+1F91B +🤜 right-facing fist; U+1F91C +👏 clapping hands; U+1F44F +🙌 raising hands; U+1F64C +👐 open hands; U+1F450 +🤲 palms up together; U+1F932 +🤝 handshake; U+1F91D +🙏 folded hands; U+1F64F +✍ writing hand; U+270D +💅 nail polish; U+1F485 +🤳 selfie; U+1F933 +💪 flexed biceps; U+1F4AA +🦵 leg; U+1F9B5 +🦶 foot; U+1F9B6 +👂 ear; U+1F442 +👃 nose; U+1F443 +🧠 brain; U+1F9E0 +🦷 tooth; U+1F9B7 +🦴 bone; U+1F9B4 +👀 eyes; U+1F440 +👁 eye; U+1F441 +👅 tongue; U+1F445 +👄 mouth; U+1F444 +👶 baby; U+1F476 +🧒 child; U+1F9D2 +👦 boy; U+1F466 +👧 girl; U+1F467 +🧑 person; U+1F9D1 +👱 person: blond hair; U+1F471 +👨 man; U+1F468 +👱‍♂️ man: blond hair; U+1F471 U+200D U+2642 U+FE0F +👨‍🦰 man: red hair; U+1F468 U+200D U+1F9B0 +👨‍🦱 man: curly hair; U+1F468 U+200D U+1F9B1 +👨‍🦳 man: white hair; U+1F468 U+200D U+1F9B3 +👨‍🦲 man: bald; U+1F468 U+200D U+1F9B2 +🧔 man: beard; U+1F9D4 +👩 woman; U+1F469 +👱‍♀️ woman: blond hair; U+1F471 U+200D U+2640 U+FE0F +👩‍🦰 woman: red hair; U+1F469 U+200D U+1F9B0 +👩‍🦱 woman: curly hair; U+1F469 U+200D U+1F9B1 +👩‍🦳 woman: white hair; U+1F469 U+200D U+1F9B3 +👩‍🦲 woman: bald; U+1F469 U+200D U+1F9B2 +🧓 older person; U+1F9D3 +👴 old man; U+1F474 +👵 old woman; U+1F475 +🙍 person frowning; U+1F64D +🙍‍♂️ man frowning; U+1F64D U+200D U+2642 U+FE0F +🙍‍♀️ woman frowning; U+1F64D U+200D U+2640 U+FE0F +🙎 person pouting; U+1F64E +🙎‍♂️ man pouting; U+1F64E U+200D U+2642 U+FE0F +🙎‍♀️ woman pouting; U+1F64E U+200D U+2640 U+FE0F +🙅 person gesturing NO; U+1F645 +🙅‍♂️ man gesturing NO; U+1F645 U+200D U+2642 U+FE0F +🙅‍♀️ woman gesturing NO; U+1F645 U+200D U+2640 U+FE0F +🙆 person gesturing OK; U+1F646 +🙆‍♂️ man gesturing OK; U+1F646 U+200D U+2642 U+FE0F +🙆‍♀️ woman gesturing OK; U+1F646 U+200D U+2640 U+FE0F +💁 person tipping hand; U+1F481 +💁‍♂️ man tipping hand; U+1F481 U+200D U+2642 U+FE0F +💁‍♀️ woman tipping hand; U+1F481 U+200D U+2640 U+FE0F +🙋 person raising hand; U+1F64B +🙋‍♂️ man raising hand; U+1F64B U+200D U+2642 U+FE0F +🙋‍♀️ woman raising hand; U+1F64B U+200D U+2640 U+FE0F +🙇 person bowing; U+1F647 +🙇‍♂️ man bowing; U+1F647 U+200D U+2642 U+FE0F +🙇‍♀️ woman bowing; U+1F647 U+200D U+2640 U+FE0F +🤦 person facepalming; U+1F926 +🤦‍♂️ man facepalming; U+1F926 U+200D U+2642 U+FE0F +🤦‍♀️ woman facepalming; U+1F926 U+200D U+2640 U+FE0F +🤷 person shrugging; U+1F937 +🤷‍♂️ man shrugging; U+1F937 U+200D U+2642 U+FE0F +🤷‍♀️ woman shrugging; U+1F937 U+200D U+2640 U+FE0F +👨‍⚕️ man health worker; U+1F468 U+200D U+2695 U+FE0F +👩‍⚕️ woman health worker; U+1F469 U+200D U+2695 U+FE0F +👨‍🎓 man student; U+1F468 U+200D U+1F393 +👩‍🎓 woman student; U+1F469 U+200D U+1F393 +👨‍🏫 man teacher; U+1F468 U+200D U+1F3EB +👩‍🏫 woman teacher; U+1F469 U+200D U+1F3EB +👨‍⚖️ man judge; U+1F468 U+200D U+2696 U+FE0F +👩‍⚖️ woman judge; U+1F469 U+200D U+2696 U+FE0F +👨‍🌾 man farmer; U+1F468 U+200D U+1F33E +👩‍🌾 woman farmer; U+1F469 U+200D U+1F33E +👨‍🍳 man cook; U+1F468 U+200D U+1F373 +👩‍🍳 woman cook; U+1F469 U+200D U+1F373 +👨‍🔧 man mechanic; U+1F468 U+200D U+1F527 +👩‍🔧 woman mechanic; U+1F469 U+200D U+1F527 +👨‍🏭 man factory worker; U+1F468 U+200D U+1F3ED +👩‍🏭 woman factory worker; U+1F469 U+200D U+1F3ED +👨‍💼 man office worker; U+1F468 U+200D U+1F4BC +👩‍💼 woman office worker; U+1F469 U+200D U+1F4BC +👨‍🔬 man scientist; U+1F468 U+200D U+1F52C +👩‍🔬 woman scientist; U+1F469 U+200D U+1F52C +👨‍💻 man technologist; U+1F468 U+200D U+1F4BB +👩‍💻 woman technologist; U+1F469 U+200D U+1F4BB +👨‍🎤 man singer; U+1F468 U+200D U+1F3A4 +👩‍🎤 woman singer; U+1F469 U+200D U+1F3A4 +👨‍🎨 man artist; U+1F468 U+200D U+1F3A8 +👩‍🎨 woman artist; U+1F469 U+200D U+1F3A8 +👨‍✈️ man pilot; U+1F468 U+200D U+2708 U+FE0F +👩‍✈️ woman pilot; U+1F469 U+200D U+2708 U+FE0F +👨‍🚀 man astronaut; U+1F468 U+200D U+1F680 +👩‍🚀 woman astronaut; U+1F469 U+200D U+1F680 +👨‍🚒 man firefighter; U+1F468 U+200D U+1F692 +👩‍🚒 woman firefighter; U+1F469 U+200D U+1F692 +👮 police officer; U+1F46E +👮‍♂️ man police officer; U+1F46E U+200D U+2642 U+FE0F +👮‍♀️ woman police officer; U+1F46E U+200D U+2640 U+FE0F +🕵 detective; U+1F575 +🕵️‍♂️ man detective; U+1F575 U+FE0F U+200D U+2642 U+FE0F +🕵️‍♀️ woman detective; U+1F575 U+FE0F U+200D U+2640 U+FE0F +💂 guard; U+1F482 +💂‍♂️ man guard; U+1F482 U+200D U+2642 U+FE0F +💂‍♀️ woman guard; U+1F482 U+200D U+2640 U+FE0F +👷 construction worker; U+1F477 +👷‍♂️ man construction worker; U+1F477 U+200D U+2642 U+FE0F +👷‍♀️ woman construction worker; U+1F477 U+200D U+2640 U+FE0F +🤴 prince; U+1F934 +👸 princess; U+1F478 +👳 person wearing turban; U+1F473 +👳‍♂️ man wearing turban; U+1F473 U+200D U+2642 U+FE0F +👳‍♀️ woman wearing turban; U+1F473 U+200D U+2640 U+FE0F +👲 man with Chinese cap; U+1F472 +🧕 woman with headscarf; U+1F9D5 +🤵 man in tuxedo; U+1F935 +👰 bride with veil; U+1F470 +🤰 pregnant woman; U+1F930 +🤱 breast-feeding; U+1F931 +👼 baby angel; U+1F47C +🎅 Santa Claus; U+1F385 +🤶 Mrs. Claus; U+1F936 +🦸 superhero; U+1F9B8 +🦸‍♂️ man superhero; U+1F9B8 U+200D U+2642 U+FE0F +🦸‍♀️ woman superhero; U+1F9B8 U+200D U+2640 U+FE0F +🦹 supervillain; U+1F9B9 +🦹‍♂️ man supervillain; U+1F9B9 U+200D U+2642 U+FE0F +🦹‍♀️ woman supervillain; U+1F9B9 U+200D U+2640 U+FE0F +🧙 mage; U+1F9D9 +🧙‍♂️ man mage; U+1F9D9 U+200D U+2642 U+FE0F +🧙‍♀️ woman mage; U+1F9D9 U+200D U+2640 U+FE0F +🧚 fairy; U+1F9DA +🧚‍♂️ man fairy; U+1F9DA U+200D U+2642 U+FE0F +🧚‍♀️ woman fairy; U+1F9DA U+200D U+2640 U+FE0F +🧛 vampire; U+1F9DB +🧛‍♂️ man vampire; U+1F9DB U+200D U+2642 U+FE0F +🧛‍♀️ woman vampire; U+1F9DB U+200D U+2640 U+FE0F +🧜 merperson; U+1F9DC +🧜‍♂️ merman; U+1F9DC U+200D U+2642 U+FE0F +🧜‍♀️ mermaid; U+1F9DC U+200D U+2640 U+FE0F +🧝 elf; U+1F9DD +🧝‍♂️ man elf; U+1F9DD U+200D U+2642 U+FE0F +🧝‍♀️ woman elf; U+1F9DD U+200D U+2640 U+FE0F +🧞 genie; U+1F9DE +🧞‍♂️ man genie; U+1F9DE U+200D U+2642 U+FE0F +🧞‍♀️ woman genie; U+1F9DE U+200D U+2640 U+FE0F +🧟 zombie; U+1F9DF +🧟‍♂️ man zombie; U+1F9DF U+200D U+2642 U+FE0F +🧟‍♀️ woman zombie; U+1F9DF U+200D U+2640 U+FE0F +💆 person getting massage; U+1F486 +💆‍♂️ man getting massage; U+1F486 U+200D U+2642 U+FE0F +💆‍♀️ woman getting massage; U+1F486 U+200D U+2640 U+FE0F +💇 person getting haircut; U+1F487 +💇‍♂️ man getting haircut; U+1F487 U+200D U+2642 U+FE0F +💇‍♀️ woman getting haircut; U+1F487 U+200D U+2640 U+FE0F +🚶 person walking; U+1F6B6 +🚶‍♂️ man walking; U+1F6B6 U+200D U+2642 U+FE0F +🚶‍♀️ woman walking; U+1F6B6 U+200D U+2640 U+FE0F +🏃 person running; U+1F3C3 +🏃‍♂️ man running; U+1F3C3 U+200D U+2642 U+FE0F +🏃‍♀️ woman running; U+1F3C3 U+200D U+2640 U+FE0F +💃 woman dancing; U+1F483 +🕺 man dancing; U+1F57A +🕴 man in suit levitating; U+1F574 +👯 people with bunny ears; U+1F46F +👯‍♂️ men with bunny ears; U+1F46F U+200D U+2642 U+FE0F +👯‍♀️ women with bunny ears; U+1F46F U+200D U+2640 U+FE0F +🧖 person in steamy room; U+1F9D6 +🧖‍♂️ man in steamy room; U+1F9D6 U+200D U+2642 U+FE0F +🧖‍♀️ woman in steamy room; U+1F9D6 U+200D U+2640 U+FE0F +🧗 person climbing; U+1F9D7 +🧗‍♂️ man climbing; U+1F9D7 U+200D U+2642 U+FE0F +🧗‍♀️ woman climbing; U+1F9D7 U+200D U+2640 U+FE0F +🤺 person fencing; U+1F93A +🏇 horse racing; U+1F3C7 +⛷ skier; U+26F7 +🏂 snowboarder; U+1F3C2 +🏌 person golfing; U+1F3CC +🏌️‍♂️ man golfing; U+1F3CC U+FE0F U+200D U+2642 U+FE0F +🏌️‍♀️ woman golfing; U+1F3CC U+FE0F U+200D U+2640 U+FE0F +🏄 person surfing; U+1F3C4 +🏄‍♂️ man surfing; U+1F3C4 U+200D U+2642 U+FE0F +🏄‍♀️ woman surfing; U+1F3C4 U+200D U+2640 U+FE0F +🚣 person rowing boat; U+1F6A3 +🚣‍♂️ man rowing boat; U+1F6A3 U+200D U+2642 U+FE0F +🚣‍♀️ woman rowing boat; U+1F6A3 U+200D U+2640 U+FE0F +🏊 person swimming; U+1F3CA +🏊‍♂️ man swimming; U+1F3CA U+200D U+2642 U+FE0F +🏊‍♀️ woman swimming; U+1F3CA U+200D U+2640 U+FE0F +⛹ person bouncing ball; U+26F9 +⛹️‍♂️ man bouncing ball; U+26F9 U+FE0F U+200D U+2642 U+FE0F +⛹️‍♀️ woman bouncing ball; U+26F9 U+FE0F U+200D U+2640 U+FE0F +🏋 person lifting weights; U+1F3CB +🏋️‍♂️ man lifting weights; U+1F3CB U+FE0F U+200D U+2642 U+FE0F +🏋️‍♀️ woman lifting weights; U+1F3CB U+FE0F U+200D U+2640 U+FE0F +🚴 person biking; U+1F6B4 +🚴‍♂️ man biking; U+1F6B4 U+200D U+2642 U+FE0F +🚴‍♀️ woman biking; U+1F6B4 U+200D U+2640 U+FE0F +🚵 person mountain biking; U+1F6B5 +🚵‍♂️ man mountain biking; U+1F6B5 U+200D U+2642 U+FE0F +🚵‍♀️ woman mountain biking; U+1F6B5 U+200D U+2640 U+FE0F +🤸 person cartwheeling; U+1F938 +🤸‍♂️ man cartwheeling; U+1F938 U+200D U+2642 U+FE0F +🤸‍♀️ woman cartwheeling; U+1F938 U+200D U+2640 U+FE0F +🤼 people wrestling; U+1F93C +🤼‍♂️ men wrestling; U+1F93C U+200D U+2642 U+FE0F +🤼‍♀️ women wrestling; U+1F93C U+200D U+2640 U+FE0F +🤽 person playing water polo; U+1F93D +🤽‍♂️ man playing water polo; U+1F93D U+200D U+2642 U+FE0F +🤽‍♀️ woman playing water polo; U+1F93D U+200D U+2640 U+FE0F +🤾 person playing handball; U+1F93E +🤾‍♂️ man playing handball; U+1F93E U+200D U+2642 U+FE0F +🤾‍♀️ woman playing handball; U+1F93E U+200D U+2640 U+FE0F +🤹 person juggling; U+1F939 +🤹‍♂️ man juggling; U+1F939 U+200D U+2642 U+FE0F +🤹‍♀️ woman juggling; U+1F939 U+200D U+2640 U+FE0F +🧘 person in lotus position; U+1F9D8 +🧘‍♂️ man in lotus position; U+1F9D8 U+200D U+2642 U+FE0F +🧘‍♀️ woman in lotus position; U+1F9D8 U+200D U+2640 U+FE0F +🛀 person taking bath; U+1F6C0 +🛌 person in bed; U+1F6CC +👭 women holding hands; U+1F46D +👫 woman and man holding hands; U+1F46B +👬 men holding hands; U+1F46C +💏 kiss; U+1F48F +👩‍❤️‍💋‍👨 kiss: woman, man; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468 +👨‍❤️‍💋‍👨 kiss: man, man; U+1F468 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468 +👩‍❤️‍💋‍👩 kiss: woman, woman; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F469 +💑 couple with heart; U+1F491 +👩‍❤️‍👨 couple with heart: woman, man; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F468 +👨‍❤️‍👨 couple with heart: man, man; U+1F468 U+200D U+2764 U+FE0F U+200D U+1F468 +👩‍❤️‍👩 couple with heart: woman, woman; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F469 +👪 family; U+1F46A +👨‍👩‍👦 family: man, woman, boy; U+1F468 U+200D U+1F469 U+200D U+1F466 +👨‍👩‍👧 family: man, woman, girl; U+1F468 U+200D U+1F469 U+200D U+1F467 +👨‍👩‍👧‍👦 family: man, woman, girl, boy; U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466 +👨‍👩‍👦‍👦 family: man, woman, boy, boy; U+1F468 U+200D U+1F469 U+200D U+1F466 U+200D U+1F466 +👨‍👩‍👧‍👧 family: man, woman, girl, girl; U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F467 +👨‍👨‍👦 family: man, man, boy; U+1F468 U+200D U+1F468 U+200D U+1F466 +👨‍👨‍👧 family: man, man, girl; U+1F468 U+200D U+1F468 U+200D U+1F467 +👨‍👨‍👧‍👦 family: man, man, girl, boy; U+1F468 U+200D U+1F468 U+200D U+1F467 U+200D U+1F466 +👨‍👨‍👦‍👦 family: man, man, boy, boy; U+1F468 U+200D U+1F468 U+200D U+1F466 U+200D U+1F466 +👨‍👨‍👧‍👧 family: man, man, girl, girl; U+1F468 U+200D U+1F468 U+200D U+1F467 U+200D U+1F467 +👩‍👩‍👦 family: woman, woman, boy; U+1F469 U+200D U+1F469 U+200D U+1F466 +👩‍👩‍👧 family: woman, woman, girl; U+1F469 U+200D U+1F469 U+200D U+1F467 +👩‍👩‍👧‍👦 family: woman, woman, girl, boy; U+1F469 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466 +👩‍👩‍👦‍👦 family: woman, woman, boy, boy; U+1F469 U+200D U+1F469 U+200D U+1F466 U+200D U+1F466 +👩‍👩‍👧‍👧 family: woman, woman, girl, girl; U+1F469 U+200D U+1F469 U+200D U+1F467 U+200D U+1F467 +👨‍👦 family: man, boy; U+1F468 U+200D U+1F466 +👨‍👦‍👦 family: man, boy, boy; U+1F468 U+200D U+1F466 U+200D U+1F466 +👨‍👧 family: man, girl; U+1F468 U+200D U+1F467 +👨‍👧‍👦 family: man, girl, boy; U+1F468 U+200D U+1F467 U+200D U+1F466 +👨‍👧‍👧 family: man, girl, girl; U+1F468 U+200D U+1F467 U+200D U+1F467 +👩‍👦 family: woman, boy; U+1F469 U+200D U+1F466 +👩‍👦‍👦 family: woman, boy, boy; U+1F469 U+200D U+1F466 U+200D U+1F466 +👩‍👧 family: woman, girl; U+1F469 U+200D U+1F467 +👩‍👧‍👦 family: woman, girl, boy; U+1F469 U+200D U+1F467 U+200D U+1F466 +👩‍👧‍👧 family: woman, girl, girl; U+1F469 U+200D U+1F467 U+200D U+1F467 +🗣 speaking head; U+1F5E3 +👤 bust in silhouette; U+1F464 +👥 busts in silhouette; U+1F465 +👣 footprints; U+1F463 +🦰 red hair; U+1F9B0 +🦱 curly hair; U+1F9B1 +🦳 white hair; U+1F9B3 +🦲 bald; U+1F9B2 +🐵 monkey face; U+1F435 +🐒 monkey; U+1F412 +🦍 gorilla; U+1F98D +🐶 dog face; U+1F436 +🐕 dog; U+1F415 +🐩 poodle; U+1F429 +🐺 wolf face; U+1F43A +🦊 fox face; U+1F98A +🦝 raccoon; U+1F99D +🐱 cat face; U+1F431 +🐈 cat; U+1F408 +🦁 lion face; U+1F981 +🐯 tiger face; U+1F42F +🐅 tiger; U+1F405 +🐆 leopard; U+1F406 +🐴 horse face; U+1F434 +🐎 horse; U+1F40E +🦄 unicorn face; U+1F984 +🦓 zebra; U+1F993 +🦌 deer; U+1F98C +🐮 cow face; U+1F42E +🐂 ox; U+1F402 +🐃 water buffalo; U+1F403 +🐄 cow; U+1F404 +🐷 pig face; U+1F437 +🐖 pig; U+1F416 +🐗 boar; U+1F417 +🐽 pig nose; U+1F43D +🐏 ram; U+1F40F +🐑 ewe; U+1F411 +🐐 goat; U+1F410 +🐪 camel; U+1F42A +🐫 two-hump camel; U+1F42B +🦙 llama; U+1F999 +🦒 giraffe; U+1F992 +🐘 elephant; U+1F418 +🦏 rhinoceros; U+1F98F +🦛 hippopotamus; U+1F99B +🐭 mouse face; U+1F42D +🐁 mouse; U+1F401 +🐀 rat; U+1F400 +🐹 hamster face; U+1F439 +🐰 rabbit face; U+1F430 +🐇 rabbit; U+1F407 +🐿 chipmunk; U+1F43F +🦔 hedgehog; U+1F994 +🦇 bat; U+1F987 +🐻 bear face; U+1F43B +🐨 koala; U+1F428 +🐼 panda face; U+1F43C +🦘 kangaroo; U+1F998 +🦡 badger; U+1F9A1 +🐾 paw prints; U+1F43E +🦃 turkey; U+1F983 +🐔 chicken; U+1F414 +🐓 rooster; U+1F413 +🐣 hatching chick; U+1F423 +🐤 baby chick; U+1F424 +🐥 front-facing baby chick; U+1F425 +🐦 bird; U+1F426 +🐧 penguin; U+1F427 +🕊 dove; U+1F54A +🦅 eagle; U+1F985 +🦆 duck; U+1F986 +🦢 swan; U+1F9A2 +🦉 owl; U+1F989 +🦚 peacock; U+1F99A +🦜 parrot; U+1F99C +🐸 frog face; U+1F438 +🐊 crocodile; U+1F40A +🐢 turtle; U+1F422 +🦎 lizard; U+1F98E +🐍 snake; U+1F40D +🐲 dragon face; U+1F432 +🐉 dragon; U+1F409 +🦕 sauropod; U+1F995 +🦖 T-Rex; U+1F996 +🐳 spouting whale; U+1F433 +🐋 whale; U+1F40B +🐬 dolphin; U+1F42C +🐟 fish; U+1F41F +🐠 tropical fish; U+1F420 +🐡 blowfish; U+1F421 +🦈 shark; U+1F988 +🐙 octopus; U+1F419 +🐚 spiral shell; U+1F41A +🐌 snail; U+1F40C +🦋 butterfly; U+1F98B +🐛 bug; U+1F41B +🐜 ant; U+1F41C +🐝 honeybee; U+1F41D +🐞 lady beetle; U+1F41E +🦗 cricket; U+1F997 +🕷 spider; U+1F577 +🕸 spider web; U+1F578 +🦂 scorpion; U+1F982 +🦟 mosquito; U+1F99F +🦠 microbe; U+1F9A0 +💐 bouquet; U+1F490 +🌸 cherry blossom; U+1F338 +💮 white flower; U+1F4AE +🏵 rosette; U+1F3F5 +🌹 rose; U+1F339 +🥀 wilted flower; U+1F940 +🌺 hibiscus; U+1F33A +🌻 sunflower; U+1F33B +🌼 blossom; U+1F33C +🌷 tulip; U+1F337 +🌱 seedling; U+1F331 +🌲 evergreen tree; U+1F332 +🌳 deciduous tree; U+1F333 +🌴 palm tree; U+1F334 +🌵 cactus; U+1F335 +🌾 sheaf of rice; U+1F33E +🌿 herb; U+1F33F +☘ shamrock; U+2618 +🍀 four leaf clover; U+1F340 +🍁 maple leaf; U+1F341 +🍂 fallen leaf; U+1F342 +🍃 leaf fluttering in wind; U+1F343 +🍇 grapes; U+1F347 +🍈 melon; U+1F348 +🍉 watermelon; U+1F349 +🍊 tangerine; U+1F34A +🍋 lemon; U+1F34B +🍌 banana; U+1F34C +🍍 pineapple; U+1F34D +🥭 mango; U+1F96D +🍎 red apple; U+1F34E +🍏 green apple; U+1F34F +🍐 pear; U+1F350 +🍑 peach; U+1F351 +🍒 cherries; U+1F352 +🍓 strawberry; U+1F353 +🥝 kiwi fruit; U+1F95D +🍅 tomato; U+1F345 +🥥 coconut; U+1F965 +🥑 avocado; U+1F951 +🍆 eggplant; U+1F346 +🥔 potato; U+1F954 +🥕 carrot; U+1F955 +🌽 ear of corn; U+1F33D +🌶 hot pepper; U+1F336 +🥒 cucumber; U+1F952 +🥬 leafy green; U+1F96C +🥦 broccoli; U+1F966 +🍄 mushroom; U+1F344 +🥜 peanuts; U+1F95C +🌰 chestnut; U+1F330 +🍞 bread; U+1F35E +🥐 croissant; U+1F950 +🥖 baguette bread; U+1F956 +🥨 pretzel; U+1F968 +🥯 bagel; U+1F96F +🥞 pancakes; U+1F95E +🧀 cheese wedge; U+1F9C0 +🍖 meat on bone; U+1F356 +🍗 poultry leg; U+1F357 +🥩 cut of meat; U+1F969 +🥓 bacon; U+1F953 +🍔 hamburger; U+1F354 +🍟 french fries; U+1F35F +🍕 pizza; U+1F355 +🌭 hot dog; U+1F32D +🥪 sandwich; U+1F96A +🌮 taco; U+1F32E +🌯 burrito; U+1F32F +🥙 stuffed flatbread; U+1F959 +🥚 egg; U+1F95A +🍳 cooking; U+1F373 +🥘 shallow pan of food; U+1F958 +🍲 pot of food; U+1F372 +🥣 bowl with spoon; U+1F963 +🥗 green salad; U+1F957 +🍿 popcorn; U+1F37F +🧂 salt; U+1F9C2 +🥫 canned food; U+1F96B +🍱 bento box; U+1F371 +🍘 rice cracker; U+1F358 +🍙 rice ball; U+1F359 +🍚 cooked rice; U+1F35A +🍛 curry rice; U+1F35B +🍜 steaming bowl; U+1F35C +🍝 spaghetti; U+1F35D +🍠 roasted sweet potato; U+1F360 +🍢 oden; U+1F362 +🍣 sushi; U+1F363 +🍤 fried shrimp; U+1F364 +🍥 fish cake with swirl; U+1F365 +🥮 moon cake; U+1F96E +🍡 dango; U+1F361 +🥟 dumpling; U+1F95F +🥠 fortune cookie; U+1F960 +🥡 takeout box; U+1F961 +🦀 crab; U+1F980 +🦞 lobster; U+1F99E +🦐 shrimp; U+1F990 +🦑 squid; U+1F991 +🍦 soft ice cream; U+1F366 +🍧 shaved ice; U+1F367 +🍨 ice cream; U+1F368 +🍩 doughnut; U+1F369 +🍪 cookie; U+1F36A +🎂 birthday cake; U+1F382 +🍰 shortcake; U+1F370 +🧁 cupcake; U+1F9C1 +🥧 pie; U+1F967 +🍫 chocolate bar; U+1F36B +🍬 candy; U+1F36C +🍭 lollipop; U+1F36D +🍮 custard; U+1F36E +🍯 honey pot; U+1F36F +🍼 baby bottle; U+1F37C +🥛 glass of milk; U+1F95B +☕ hot beverage; U+2615 +🍵 teacup without handle; U+1F375 +🍶 sake; U+1F376 +🍾 bottle with popping cork; U+1F37E +🍷 wine glass; U+1F377 +🍸 cocktail glass; U+1F378 +🍹 tropical drink; U+1F379 +🍺 beer mug; U+1F37A +🍻 clinking beer mugs; U+1F37B +🥂 clinking glasses; U+1F942 +🥃 tumbler glass; U+1F943 +🥤 cup with straw; U+1F964 +🥢 chopsticks; U+1F962 +🍽 fork and knife with plate; U+1F37D +🍴 fork and knife; U+1F374 +🥄 spoon; U+1F944 +🔪 kitchen knife; U+1F52A +🏺 amphora; U+1F3FA +🌍 globe showing Europe-Africa; U+1F30D +🌎 globe showing Americas; U+1F30E +🌏 globe showing Asia-Australia; U+1F30F +🌐 globe with meridians; U+1F310 +🗺 world map; U+1F5FA +🗾 map of Japan; U+1F5FE +🧭 compass; U+1F9ED +🏔 snow-capped mountain; U+1F3D4 +⛰ mountain; U+26F0 +🌋 volcano; U+1F30B +🗻 mount fuji; U+1F5FB +🏕 camping; U+1F3D5 +🏖 beach with umbrella; U+1F3D6 +🏜 desert; U+1F3DC +🏝 desert island; U+1F3DD +🏞 national park; U+1F3DE +🏟 stadium; U+1F3DF +🏛 classical building; U+1F3DB +🏗 building construction; U+1F3D7 +🧱 brick; U+1F9F1 +🏘 houses; U+1F3D8 +🏚 derelict house; U+1F3DA +🏠 house; U+1F3E0 +🏡 house with garden; U+1F3E1 +🏢 office building; U+1F3E2 +🏣 Japanese post office; U+1F3E3 +🏤 post office; U+1F3E4 +🏥 hospital; U+1F3E5 +🏦 bank; U+1F3E6 +🏨 hotel; U+1F3E8 +🏩 love hotel; U+1F3E9 +🏪 convenience store; U+1F3EA +🏫 school; U+1F3EB +🏬 department store; U+1F3EC +🏭 factory; U+1F3ED +🏯 Japanese castle; U+1F3EF +🏰 castle; U+1F3F0 +💒 wedding; U+1F492 +🗼 Tokyo tower; U+1F5FC +🗽 Statue of Liberty; U+1F5FD +⛪ church; U+26EA +🕌 mosque; U+1F54C +🕍 synagogue; U+1F54D +⛩ shinto shrine; U+26E9 +🕋 kaaba; U+1F54B +⛲ fountain; U+26F2 +⛺ tent; U+26FA +🌁 foggy; U+1F301 +🌃 night with stars; U+1F303 +🏙 cityscape; U+1F3D9 +🌄 sunrise over mountains; U+1F304 +🌅 sunrise; U+1F305 +🌆 cityscape at dusk; U+1F306 +🌇 sunset; U+1F307 +🌉 bridge at night; U+1F309 +♨ hot springs; U+2668 +🌌 milky way; U+1F30C +🎠 carousel horse; U+1F3A0 +🎡 ferris wheel; U+1F3A1 +🎢 roller coaster; U+1F3A2 +💈 barber pole; U+1F488 +🎪 circus tent; U+1F3AA +🚂 locomotive; U+1F682 +🚃 railway car; U+1F683 +🚄 high-speed train; U+1F684 +🚅 bullet train; U+1F685 +🚆 train; U+1F686 +🚇 metro; U+1F687 +🚈 light rail; U+1F688 +🚉 station; U+1F689 +🚊 tram; U+1F68A +🚝 monorail; U+1F69D +🚞 mountain railway; U+1F69E +🚋 tram car; U+1F68B +🚌 bus; U+1F68C +🚍 oncoming bus; U+1F68D +🚎 trolleybus; U+1F68E +🚐 minibus; U+1F690 +🚑 ambulance; U+1F691 +🚒 fire engine; U+1F692 +🚓 police car; U+1F693 +🚔 oncoming police car; U+1F694 +🚕 taxi; U+1F695 +🚖 oncoming taxi; U+1F696 +🚗 automobile; U+1F697 +🚘 oncoming automobile; U+1F698 +🚙 sport utility vehicle; U+1F699 +🚚 delivery truck; U+1F69A +🚛 articulated lorry; U+1F69B +🚜 tractor; U+1F69C +🏎 racing car; U+1F3CE +🏍 motorcycle; U+1F3CD +🛵 motor scooter; U+1F6F5 +🚲 bicycle; U+1F6B2 +🛴 kick scooter; U+1F6F4 +🛹 skateboard; U+1F6F9 +🚏 bus stop; U+1F68F +🛣 motorway; U+1F6E3 +🛤 railway track; U+1F6E4 +🛢 oil drum; U+1F6E2 +⛽ fuel pump; U+26FD +🚨 police car light; U+1F6A8 +🚥 horizontal traffic light; U+1F6A5 +🚦 vertical traffic light; U+1F6A6 +🛑 stop sign; U+1F6D1 +🚧 construction; U+1F6A7 +⚓ anchor; U+2693 +⛵ sailboat; U+26F5 +🛶 canoe; U+1F6F6 +🚤 speedboat; U+1F6A4 +🛳 passenger ship; U+1F6F3 +⛴ ferry; U+26F4 +🛥 motor boat; U+1F6E5 +🚢 ship; U+1F6A2 +✈ airplane; U+2708 +🛩 small airplane; U+1F6E9 +🛫 airplane departure; U+1F6EB +🛬 airplane arrival; U+1F6EC +💺 seat; U+1F4BA +🚁 helicopter; U+1F681 +🚟 suspension railway; U+1F69F +🚠 mountain cableway; U+1F6A0 +🚡 aerial tramway; U+1F6A1 +🛰 satellite; U+1F6F0 +🚀 rocket; U+1F680 +🛸 flying saucer; U+1F6F8 +🛎 bellhop bell; U+1F6CE +🧳 luggage; U+1F9F3 +⌛ hourglass done; U+231B +⏳ hourglass not done; U+23F3 +⌚ watch; U+231A +⏰ alarm clock; U+23F0 +⏱ stopwatch; U+23F1 +⏲ timer clock; U+23F2 +🕰 mantelpiece clock; U+1F570 +🕛 twelve o’clock; U+1F55B +🕧 twelve-thirty; U+1F567 +🕐 one o’clock; U+1F550 +🕜 one-thirty; U+1F55C +🕑 two o’clock; U+1F551 +🕝 two-thirty; U+1F55D +🕒 three o’clock; U+1F552 +🕞 three-thirty; U+1F55E +🕓 four o’clock; U+1F553 +🕟 four-thirty; U+1F55F +🕔 five o’clock; U+1F554 +🕠 five-thirty; U+1F560 +🕕 six o’clock; U+1F555 +🕡 six-thirty; U+1F561 +🕖 seven o’clock; U+1F556 +🕢 seven-thirty; U+1F562 +🕗 eight o’clock; U+1F557 +🕣 eight-thirty; U+1F563 +🕘 nine o’clock; U+1F558 +🕤 nine-thirty; U+1F564 +🕙 ten o’clock; U+1F559 +🕥 ten-thirty; U+1F565 +🕚 eleven o’clock; U+1F55A +🕦 eleven-thirty; U+1F566 +🌑 new moon; U+1F311 +🌒 waxing crescent moon; U+1F312 +🌓 first quarter moon; U+1F313 +🌔 waxing gibbous moon; U+1F314 +🌕 full moon; U+1F315 +🌖 waning gibbous moon; U+1F316 +🌗 last quarter moon; U+1F317 +🌘 waning crescent moon; U+1F318 +🌙 crescent moon; U+1F319 +🌚 new moon face; U+1F31A +🌛 first quarter moon face; U+1F31B +🌜 last quarter moon face; U+1F31C +🌡 thermometer; U+1F321 +☀ sun; U+2600 +🌝 full moon face; U+1F31D +🌞 sun with face; U+1F31E +⭐ star; U+2B50 +🌟 glowing star; U+1F31F +🌠 shooting star; U+1F320 +☁ cloud; U+2601 +⛅ sun behind cloud; U+26C5 +⛈ cloud with lightning and rain; U+26C8 +🌤 sun behind small cloud; U+1F324 +🌥 sun behind large cloud; U+1F325 +🌦 sun behind rain cloud; U+1F326 +🌧 cloud with rain; U+1F327 +🌨 cloud with snow; U+1F328 +🌩 cloud with lightning; U+1F329 +🌪 tornado; U+1F32A +🌫 fog; U+1F32B +🌬 wind face; U+1F32C +🌀 cyclone; U+1F300 +🌈 rainbow; U+1F308 +🌂 closed umbrella; U+1F302 +☂ umbrella; U+2602 +☔ umbrella with rain drops; U+2614 +⛱ umbrella on ground; U+26F1 +⚡ high voltage; U+26A1 +❄ snowflake; U+2744 +☃ snowman; U+2603 +⛄ snowman without snow; U+26C4 +☄ comet; U+2604 +🔥 fire; U+1F525 +💧 droplet; U+1F4A7 +🌊 water wave; U+1F30A +🎃 jack-o-lantern; U+1F383 +🎄 Christmas tree; U+1F384 +🎆 fireworks; U+1F386 +🎇 sparkler; U+1F387 +🧨 firecracker; U+1F9E8 +✨ sparkles; U+2728 +🎈 balloon; U+1F388 +🎉 party popper; U+1F389 +🎊 confetti ball; U+1F38A +🎋 tanabata tree; U+1F38B +🎍 pine decoration; U+1F38D +🎎 Japanese dolls; U+1F38E +🎏 carp streamer; U+1F38F +🎐 wind chime; U+1F390 +🎑 moon viewing ceremony; U+1F391 +🧧 red envelope; U+1F9E7 +🎀 ribbon; U+1F380 +🎁 wrapped gift; U+1F381 +🎗 reminder ribbon; U+1F397 +🎟 admission tickets; U+1F39F +🎫 ticket; U+1F3AB +🎖 military medal; U+1F396 +🏆 trophy; U+1F3C6 +🏅 sports medal; U+1F3C5 +1st place medal; U+1F947 🥇 +2nd place medal; U+1F948 🥈 +3rd place medal; U+1F949 🥉 +⚽ soccer ball; U+26BD +⚾ baseball; U+26BE +🥎 softball; U+1F94E +🏀 basketball; U+1F3C0 +🏐 volleyball; U+1F3D0 +🏈 american football; U+1F3C8 +🏉 rugby football; U+1F3C9 +🎾 tennis; U+1F3BE +🥏 flying disc; U+1F94F +🎳 bowling; U+1F3B3 +🏏 cricket game; U+1F3CF +🏑 field hockey; U+1F3D1 +🏒 ice hockey; U+1F3D2 +🥍 lacrosse; U+1F94D +🏓 ping pong; U+1F3D3 +🏸 badminton; U+1F3F8 +🥊 boxing glove; U+1F94A +🥋 martial arts uniform; U+1F94B +🥅 goal net; U+1F945 +⛳ flag in hole; U+26F3 +⛸ ice skate; U+26F8 +🎣 fishing pole; U+1F3A3 +🎽 running shirt; U+1F3BD +🎿 skis; U+1F3BF +🛷 sled; U+1F6F7 +🥌 curling stone; U+1F94C +🎯 direct hit; U+1F3AF +🎱 pool 8 ball; U+1F3B1 +🔮 crystal ball; U+1F52E +🧿 nazar amulet; U+1F9FF +🎮 video game; U+1F3AE +🕹 joystick; U+1F579 +🎰 slot machine; U+1F3B0 +🎲 game die; U+1F3B2 +🧩 jigsaw; U+1F9E9 +🧸 teddy bear; U+1F9F8 +♠ spade suit; U+2660 +♥ heart suit; U+2665 +♦ diamond suit; U+2666 +♣ club suit; U+2663 +♟ chess pawn; U+265F +🃏 joker; U+1F0CF +🀄 mahjong red dragon; U+1F004 +🎴 flower playing cards; U+1F3B4 +🎭 performing arts; U+1F3AD +🖼 framed picture; U+1F5BC +🎨 artist palette; U+1F3A8 +🧵 thread; U+1F9F5 +🧶 yarn; U+1F9F6 +👓 glasses; U+1F453 +🕶 sunglasses; U+1F576 +🥽 goggles; U+1F97D +🥼 lab coat; U+1F97C +👔 necktie; U+1F454 +👕 t-shirt; U+1F455 +👖 jeans; U+1F456 +🧣 scarf; U+1F9E3 +🧤 gloves; U+1F9E4 +🧥 coat; U+1F9E5 +🧦 socks; U+1F9E6 +👗 dress; U+1F457 +👘 kimono; U+1F458 +👙 bikini; U+1F459 +👚 woman’s clothes; U+1F45A +👛 purse; U+1F45B +👜 handbag; U+1F45C +👝 clutch bag; U+1F45D +🛍 shopping bags; U+1F6CD +🎒 backpack; U+1F392 +👞 man’s shoe; U+1F45E +👟 running shoe; U+1F45F +🥾 hiking boot; U+1F97E +🥿 flat shoe; U+1F97F +👠 high-heeled shoe; U+1F460 +👡 woman’s sandal; U+1F461 +👢 woman’s boot; U+1F462 +👑 crown; U+1F451 +👒 woman’s hat; U+1F452 +🎩 top hat; U+1F3A9 +🎓 graduation cap; U+1F393 +🧢 billed cap; U+1F9E2 +⛑ rescue worker’s helmet; U+26D1 +📿 prayer beads; U+1F4FF +💄 lipstick; U+1F484 +💍 ring; U+1F48D +💎 gem stone; U+1F48E +🔇 muted speaker; U+1F507 +🔈 speaker low volume; U+1F508 +🔉 speaker medium volume; U+1F509 +🔊 speaker high volume; U+1F50A +📢 loudspeaker; U+1F4E2 +📣 megaphone; U+1F4E3 +📯 postal horn; U+1F4EF +🔔 bell; U+1F514 +🔕 bell with slash; U+1F515 +🎼 musical score; U+1F3BC +🎵 musical note; U+1F3B5 +🎶 musical notes; U+1F3B6 +🎙 studio microphone; U+1F399 +🎚 level slider; U+1F39A +🎛 control knobs; U+1F39B +🎤 microphone; U+1F3A4 +🎧 headphone; U+1F3A7 +📻 radio; U+1F4FB +🎷 saxophone; U+1F3B7 +🎸 guitar; U+1F3B8 +🎹 musical keyboard; U+1F3B9 +🎺 trumpet; U+1F3BA +🎻 violin; U+1F3BB +🥁 drum; U+1F941 +📱 mobile phone; U+1F4F1 +📲 mobile phone with arrow; U+1F4F2 +☎ telephone; U+260E +📞 telephone receiver; U+1F4DE +📟 pager; U+1F4DF +📠 fax machine; U+1F4E0 +🔋 battery; U+1F50B +🔌 electric plug; U+1F50C +💻 laptop computer; U+1F4BB +🖥 desktop computer; U+1F5A5 +🖨 printer; U+1F5A8 +⌨ keyboard; U+2328 +🖱 computer mouse; U+1F5B1 +🖲 trackball; U+1F5B2 +💽 computer disk; U+1F4BD +💾 floppy disk; U+1F4BE +💿 optical disk; U+1F4BF +📀 dvd; U+1F4C0 +🧮 abacus; U+1F9EE +🎥 movie camera; U+1F3A5 +🎞 film frames; U+1F39E +📽 film projector; U+1F4FD +🎬 clapper board; U+1F3AC +📺 television; U+1F4FA +📷 camera; U+1F4F7 +📸 camera with flash; U+1F4F8 +📹 video camera; U+1F4F9 +📼 videocassette; U+1F4FC +🔍 magnifying glass tilted left; U+1F50D +🔎 magnifying glass tilted right; U+1F50E +🕯 candle; U+1F56F +💡 light bulb; U+1F4A1 +🔦 flashlight; U+1F526 +🏮 red paper lantern; U+1F3EE +📔 notebook with decorative cover; U+1F4D4 +📕 closed book; U+1F4D5 +📖 open book; U+1F4D6 +📗 green book; U+1F4D7 +📘 blue book; U+1F4D8 +📙 orange book; U+1F4D9 +📚 books; U+1F4DA +📓 notebook; U+1F4D3 +📒 ledger; U+1F4D2 +📃 page with curl; U+1F4C3 +📜 scroll; U+1F4DC +📄 page facing up; U+1F4C4 +📰 newspaper; U+1F4F0 +🗞 rolled-up newspaper; U+1F5DE +📑 bookmark tabs; U+1F4D1 +🔖 bookmark; U+1F516 +🏷 label; U+1F3F7 +💰 money bag; U+1F4B0 +💴 yen banknote; U+1F4B4 +💵 dollar banknote; U+1F4B5 +💶 euro banknote; U+1F4B6 +💷 pound banknote; U+1F4B7 +💸 money with wings; U+1F4B8 +💳 credit card; U+1F4B3 +🧾 receipt; U+1F9FE +💹 chart increasing with yen; U+1F4B9 +💱 currency exchange; U+1F4B1 +💲 heavy dollar sign; U+1F4B2 +✉ envelope; U+2709 +📧 e-mail; U+1F4E7 +📨 incoming envelope; U+1F4E8 +📩 envelope with arrow; U+1F4E9 +📤 outbox tray; U+1F4E4 +📥 inbox tray; U+1F4E5 +📦 package; U+1F4E6 +📫 closed mailbox with raised flag; U+1F4EB +📪 closed mailbox with lowered flag; U+1F4EA +📬 open mailbox with raised flag; U+1F4EC +📭 open mailbox with lowered flag; U+1F4ED +📮 postbox; U+1F4EE +🗳 ballot box with ballot; U+1F5F3 +✏ pencil; U+270F +✒ black nib; U+2712 +🖋 fountain pen; U+1F58B +🖊 pen; U+1F58A +🖌 paintbrush; U+1F58C +🖍 crayon; U+1F58D +📝 memo; U+1F4DD +💼 briefcase; U+1F4BC +📁 file folder; U+1F4C1 +📂 open file folder; U+1F4C2 +🗂 card index dividers; U+1F5C2 +📅 calendar; U+1F4C5 +📆 tear-off calendar; U+1F4C6 +🗒 spiral notepad; U+1F5D2 +🗓 spiral calendar; U+1F5D3 +📇 card index; U+1F4C7 +📈 chart increasing; U+1F4C8 +📉 chart decreasing; U+1F4C9 +📊 bar chart; U+1F4CA +📋 clipboard; U+1F4CB +📌 pushpin; U+1F4CC +📍 round pushpin; U+1F4CD +📎 paperclip; U+1F4CE +🖇 linked paperclips; U+1F587 +📏 straight ruler; U+1F4CF +📐 triangular ruler; U+1F4D0 +✂ scissors; U+2702 +🗃 card file box; U+1F5C3 +🗄 file cabinet; U+1F5C4 +🗑 wastebasket; U+1F5D1 +🔒 locked; U+1F512 +🔓 unlocked; U+1F513 +🔏 locked with pen; U+1F50F +🔐 locked with key; U+1F510 +🔑 key; U+1F511 +🗝 old key; U+1F5DD +🔨 hammer; U+1F528 +⛏ pick; U+26CF +⚒ hammer and pick; U+2692 +🛠 hammer and wrench; U+1F6E0 +🗡 dagger; U+1F5E1 +⚔ crossed swords; U+2694 +🔫 pistol; U+1F52B +🏹 bow and arrow; U+1F3F9 +🛡 shield; U+1F6E1 +🔧 wrench; U+1F527 +🔩 nut and bolt; U+1F529 +⚙ gear; U+2699 +🗜 clamp; U+1F5DC +⚖ balance scale; U+2696 +🔗 link; U+1F517 +⛓ chains; U+26D3 +🧰 toolbox; U+1F9F0 +🧲 magnet; U+1F9F2 +⚗ alembic; U+2697 +🧪 test tube; U+1F9EA +🧫 petri dish; U+1F9EB +🧬 dna; U+1F9EC +🔬 microscope; U+1F52C +🔭 telescope; U+1F52D +📡 satellite antenna; U+1F4E1 +💉 syringe; U+1F489 +💊 pill; U+1F48A +🚪 door; U+1F6AA +🛏 bed; U+1F6CF +🛋 couch and lamp; U+1F6CB +🚽 toilet; U+1F6BD +🚿 shower; U+1F6BF +🛁 bathtub; U+1F6C1 +🧴 lotion bottle; U+1F9F4 +🧷 safety pin; U+1F9F7 +🧹 broom; U+1F9F9 +🧺 basket; U+1F9FA +🧻 roll of paper; U+1F9FB +🧼 soap; U+1F9FC +🧽 sponge; U+1F9FD +🧯 fire extinguisher; U+1F9EF +🛒 shopping cart; U+1F6D2 +🚬 cigarette; U+1F6AC +⚰ coffin; U+26B0 +⚱ funeral urn; U+26B1 +🗿 moai; U+1F5FF +🏧 ATM sign; U+1F3E7 +🚮 litter in bin sign; U+1F6AE +🚰 potable water; U+1F6B0 +♿ wheelchair symbol; U+267F +🚹 men’s room; U+1F6B9 +🚺 women’s room; U+1F6BA +🚻 restroom; U+1F6BB +🚼 baby symbol; U+1F6BC +🚾 water closet; U+1F6BE +🛂 passport control; U+1F6C2 +🛃 customs; U+1F6C3 +🛄 baggage claim; U+1F6C4 +🛅 left luggage; U+1F6C5 +⚠ warning; U+26A0 +🚸 children crossing; U+1F6B8 +⛔ no entry; U+26D4 +🚫 prohibited; U+1F6AB +🚳 no bicycles; U+1F6B3 +🚭 no smoking; U+1F6AD +🚯 no littering; U+1F6AF +🚱 non-potable water; U+1F6B1 +🚷 no pedestrians; U+1F6B7 +📵 no mobile phones; U+1F4F5 +🔞 no one under eighteen; U+1F51E +☢ radioactive; U+2622 +☣ biohazard; U+2623 +⬆ up arrow; U+2B06 +↗ up-right arrow; U+2197 +➡ right arrow; U+27A1 +↘ down-right arrow; U+2198 +⬇ down arrow; U+2B07 +↙ down-left arrow; U+2199 +⬅ left arrow; U+2B05 +↖ up-left arrow; U+2196 +↕ up-down arrow; U+2195 +↔ left-right arrow; U+2194 +↩ right arrow curving left; U+21A9 +↪ left arrow curving right; U+21AA +⤴ right arrow curving up; U+2934 +⤵ right arrow curving down; U+2935 +🔃 clockwise vertical arrows; U+1F503 +🔄 counterclockwise arrows button; U+1F504 +🔙 BACK arrow; U+1F519 +🔚 END arrow; U+1F51A +🔛 ON! arrow; U+1F51B +🔜 SOON arrow; U+1F51C +🔝 TOP arrow; U+1F51D +🛐 place of worship; U+1F6D0 +⚛ atom symbol; U+269B +🕉 om; U+1F549 +✡ star of David; U+2721 +☸ wheel of dharma; U+2638 +☯ yin yang; U+262F +✝ latin cross; U+271D +☦ orthodox cross; U+2626 +☪ star and crescent; U+262A +☮ peace symbol; U+262E +🕎 menorah; U+1F54E +🔯 dotted six-pointed star; U+1F52F +♈ Aries; U+2648 +♉ Taurus; U+2649 +♊ Gemini; U+264A +♋ Cancer; U+264B +♌ Leo; U+264C +♍ Virgo; U+264D +♎ Libra; U+264E +♏ Scorpio; U+264F +♐ Sagittarius; U+2650 +♑ Capricorn; U+2651 +♒ Aquarius; U+2652 +♓ Pisces; U+2653 +⛎ Ophiuchus; U+26CE +🔀 shuffle tracks button; U+1F500 +🔁 repeat button; U+1F501 +🔂 repeat single button; U+1F502 +▶ play button; U+25B6 +⏩ fast-forward button; U+23E9 +⏭ next track button; U+23ED +⏯ play or pause button; U+23EF +◀ reverse button; U+25C0 +⏪ fast reverse button; U+23EA +⏮ last track button; U+23EE +🔼 upwards button; U+1F53C +⏫ fast up button; U+23EB +🔽 downwards button; U+1F53D +⏬ fast down button; U+23EC +⏸ pause button; U+23F8 +⏹ stop button; U+23F9 +⏺ record button; U+23FA +⏏ eject button; U+23CF +🎦 cinema; U+1F3A6 +🔅 dim button; U+1F505 +🔆 bright button; U+1F506 +📶 antenna bars; U+1F4F6 +📳 vibration mode; U+1F4F3 +📴 mobile phone off; U+1F4F4 +♀ female sign; U+2640 +♂ male sign; U+2642 +⚕ medical symbol; U+2695 +♾ infinity; U+267E +♻ recycling symbol; U+267B +⚜ fleur-de-lis; U+269C +🔱 trident emblem; U+1F531 +📛 name badge; U+1F4DB +🔰 Japanese symbol for beginner; U+1F530 +⭕ heavy large circle; U+2B55 +✅ white heavy check mark; U+2705 +☑ ballot box with check; U+2611 +✔ heavy check mark; U+2714 +✖ heavy multiplication x; U+2716 +❌ cross mark; U+274C +❎ cross mark button; U+274E +➕ heavy plus sign; U+2795 +➖ heavy minus sign; U+2796 +➗ heavy division sign; U+2797 +➰ curly loop; U+27B0 +➿ double curly loop; U+27BF +〽 part alternation mark; U+303D +✳ eight-spoked asterisk; U+2733 +✴ eight-pointed star; U+2734 +❇ sparkle; U+2747 +‼ double exclamation mark; U+203C +⁉ exclamation question mark; U+2049 +❓ question mark; U+2753 +❔ white question mark; U+2754 +❕ white exclamation mark; U+2755 +❗ exclamation mark; U+2757 +〰 wavy dash; U+3030 +© copyright; U+00A9 +® registered; U+00AE +™ trade mark; U+2122 +#️⃣ keycap: #; U+0023 U+FE0F U+20E3 +,*️⃣ keycap: *; U+002A U+FE0F U+20E3 +0️⃣ keycap: 0; U+0030 U+FE0F U+20E3 +1️⃣ keycap: 1; U+0031 U+FE0F U+20E3 +2️⃣ keycap: 2; U+0032 U+FE0F U+20E3 +3️⃣ keycap: 3; U+0033 U+FE0F U+20E3 +4️⃣ keycap: 4; U+0034 U+FE0F U+20E3 +5️⃣ keycap: 5; U+0035 U+FE0F U+20E3 +6️⃣ keycap: 6; U+0036 U+FE0F U+20E3 +7️⃣ keycap: 7; U+0037 U+FE0F U+20E3 +8️⃣ keycap: 8; U+0038 U+FE0F U+20E3 +9️⃣ keycap: 9; U+0039 U+FE0F U+20E3 +🔟 keycap: 10; U+1F51F +🔠 input latin uppercase; U+1F520 +🔡 input latin lowercase; U+1F521 +🔢 input numbers; U+1F522 +🔣 input symbols; U+1F523 +🔤 input latin letters; U+1F524 +🅰 A button (blood type); U+1F170 +🆎 AB button (blood type); U+1F18E +🅱 B button (blood type); U+1F171 +🆑 CL button; U+1F191 +🆒 COOL button; U+1F192 +🆓 FREE button; U+1F193 +ℹ information; U+2139 +🆔 ID button; U+1F194 +Ⓜ circled M; U+24C2 +🆕 NEW button; U+1F195 +🆖 NG button; U+1F196 +🅾 O button (blood type); U+1F17E +🆗 OK button; U+1F197 +🅿 P button; U+1F17F +🆘 SOS button; U+1F198 +🆙 UP! button; U+1F199 +🆚 VS button; U+1F19A +🈁 Japanese “here” button; U+1F201 +🈂 Japanese “service charge” button; U+1F202 +🈷 Japanese “monthly amount” button; U+1F237 +🈶 Japanese “not free of charge” button; U+1F236 +🈯 Japanese “reserved” button; U+1F22F +🉐 Japanese “bargain” button; U+1F250 +🈹 Japanese “discount” button; U+1F239 +🈚 Japanese “free of charge” button; U+1F21A +🈲 Japanese “prohibited” button; U+1F232 +🉑 Japanese “acceptable” button; U+1F251 +🈸 Japanese “application” button; U+1F238 +🈴 Japanese “passing grade” button; U+1F234 +🈳 Japanese “vacancy” button; U+1F233 +㊗ Japanese “congratulations” button; U+3297 +㊙ Japanese “secret” button; U+3299 +🈺 Japanese “open for business” button; U+1F23A +🈵 Japanese “no vacancy” button; U+1F235 +🔴 red circle; U+1F534 +🔵 blue circle; U+1F535 +⚪ white circle; U+26AA +⚫ black circle; U+26AB +⬜ white large square; U+2B1C +⬛ black large square; U+2B1B +◼ black medium square; U+25FC +◻ white medium square; U+25FB +◽ white medium-small square; U+25FD +◾ black medium-small square; U+25FE +▫ white small square; U+25AB +▪ black small square; U+25AA +🔶 large orange diamond; U+1F536 +🔷 large blue diamond; U+1F537 +🔸 small orange diamond; U+1F538 +🔹 small blue diamond; U+1F539 +🔺 red triangle pointed up; U+1F53A +🔻 red triangle pointed down; U+1F53B +💠 diamond with a dot; U+1F4A0 +🔘 radio button; U+1F518 +🔲 black square button; U+1F532 +🔳 white square button; U+1F533 +🏁 chequered flag; U+1F3C1 +🚩 triangular flag; U+1F6A9 +🎌 crossed flags; U+1F38C +🏴 black flag; U+1F3F4 +🏳 white flag; U+1F3F3 +🏳️‍🌈 rainbow flag; U+1F3F3 U+FE0F U+200D U+1F308 +🏴‍☠️ pirate flag; U+1F3F4 U+200D U+2620 U+FE0F #+end_src * Nordvpn Countries @@ -5098,62 +5098,62 @@ :END: #+begin_src conf :tangle ~/.local/data/nordvpn_countries.txt - Albania - Bulgaria - Denmark - Hong_Kong - Italy - Netherlands - Serbia - Sweden - United_States - Argentina - Canada - Estonia - Hungary - Japan - New_Zealand - Singapore - Switzerland - Vietnam - Australia - Chile - Finland - Iceland - Latvia - North_Macedonia - Slovakia - Taiwan - Austria - Costa_Rica - France - India - Luxembourg - Norway - Slovenia - Thailand - Belgium - Croatia - Georgia - Indonesia - Malaysia - Poland - South_Africa - Turkey - Bosnia_And_Herzegovina - Cyprus - Germany - Ireland - Mexico - Portugal - South_Korea - Ukraine - Brazil - Czech_Republic - Greece - Israel - Moldova - Romania - Spain - United_Kingdom +Albania +Bulgaria +Denmark +Hong_Kong +Italy +Netherlands +Serbia +Sweden +United_States +Argentina +Canada +Estonia +Hungary +Japan +New_Zealand +Singapore +Switzerland +Vietnam +Australia +Chile +Finland +Iceland +Latvia +North_Macedonia +Slovakia +Taiwan +Austria +Costa_Rica +France +India +Luxembourg +Norway +Slovenia +Thailand +Belgium +Croatia +Georgia +Indonesia +Malaysia +Poland +South_Africa +Turkey +Bosnia_And_Herzegovina +Cyprus +Germany +Ireland +Mexico +Portugal +South_Korea +Ukraine +Brazil +Czech_Republic +Greece +Israel +Moldova +Romania +Spain +United_Kingdom #+end_src diff --git a/docs/config.html b/docs/config.html index 89bc26e..ef46076 100644 --- a/docs/config.html +++ b/docs/config.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Configuration Files @@ -28,6 +28,7 @@
  • Redshift
  • dmenu
  • Locale
  • +
  • Netrc
  • bukurun Rofi Frontend for Buku (Bookmark Manager)
  • @@ -192,6 +193,38 @@ +
    +

    Netrc

    +
    +
    +
    machine traefik.tdehaeze.xyz
    +login tdehaeze
    +password <<get-password(passname="traefik.tdehaeze.xyz/tdehaeze")>>
    +
    +machine portainer.tdehaeze.xyz
    +login tdehaeze
    +password <<get-password(passname="portainer.tdehaeze.xyz/tdehaeze")>>
    +
    +machine cloud.tdehaeze.xyz
    +login tdehaeze
    +password <<get-password(passname="cloud.tdehaeze.xyz/tdehaeze")>>
    +
    +machine syncthing.tdehaeze.xyz
    +login tdehaeze
    +password <<get-password(passname="syncthing.tdehaeze.xyz/tdehaeze")>>
    +
    +machine torrent.tdehaeze.xyz
    +login tdehaeze
    +password <<get-password(passname="torrent.tdehaeze.xyz/tdehaeze")>>
    +
    +machine deemix.tdehaeze.xyz
    +login tdehaeze
    +password <<get-password(passname="deemix.tdehaeze.xyz/tdehaeze")>>
    +
    +
    +
    +
    +

    bukurun Rofi Frontend for Buku (Bookmark Manager)

    @@ -235,7 +268,7 @@ Colors

    Author: Dehaeze Thomas

    -

    Created: 2021-01-03 dim. 22:25

    +

    Created: 2021-01-04 lun. 21:32

    diff --git a/docs/doom.html b/docs/doom.html index b0514a1..05fc8ef 100644 --- a/docs/doom.html +++ b/docs/doom.html @@ -3,13 +3,32 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Doom Emacs Configuration + + +

    +\(a\) +

    +
    +

    Installation

    +
    +
    +
      yay -Ss aspell aspell-fr aspell-en
    +
    +
    +
    +
    +
    +

    Introduction and Resources

    +

    https://medium.com/urbint-engineering/emacs-doom-for-newbies-1f8038604e3b https://noelwelsh.com/posts/2019-01-10-doom-emacs.html @@ -203,6 +239,8 @@ Documentation: When changing init.el or package.el, tangle the files and then run doom sync. After that, restart Emacs with spc q r.

    +
    +

    Useful Bindings

    @@ -676,7 +714,7 @@ Turn off auto-fill mode that add line breaks. ;; turn off auto-fill for org-mode (add-hook 'org-mode-hook 'turn-off-auto-fill)) (after! auctex - (add-hook 'latex-mode-hook 'turn-off-auto-fill)) + (add-hook 'latex-mode-hook 'turn-off-auto-fill))
    @@ -924,9 +962,9 @@ Display the real size of images and not the one set with attr_latex: :widt -
    -

    Org Links

    -
    +
    +

    Org Links

    +
      (after! org
         (setq org-link-abbrev-alist
    @@ -1101,6 +1139,11 @@ General configuration
         ;; Open agenda in current window
         (setq org-agenda-window-setup 'current-window)
     
    +    ;; Set default first day of agenda
    +    (setq org-agenda-start-day nil)
    +    (setq org-agenda-start-on-weekday 1)
    +    (setq org-agenda-span 7)
    +
         (setq org-agenda-prefix-format
               '((agenda  . "  %?-12t% s")
                 (todo  . "") ;; Don't show the filename for reading agenda
    @@ -1442,24 +1485,28 @@ Do not export headline with the :ignore: tag:
     
      (after! org
         (setq org-html-mathjax-template
    -          "<script>MathJax = {
    -            tex: {
    -              tags: 'ams',
    -              macros: {bm: [\"\\\\boldsymbol{#1}\",1],}
    -              }
    -            };
    -            </script>
    -            <script type=\"text/javascript\" src=\"%PATH\"></script>")
    +          "<script>
    +             MathJax = {
    +               svg: {
    +                 scale: %SCALE,
    +                 fontCache: \"global\"
    +               },
    +               tex: {
    +                 tags: \"%AUTONUMBER\",
    +                 multlineWidth: \"%MULTLINEWIDTH\",
    +                 tagSide: \"%TAGSIDE\",
    +                         macros: {bm: [\"\\\\boldsymbol{#1}\",1],},
    +                 tagIndent: \"%TAGINDENT\"
    +               }
    +             };
    +             </script>
    +             <script id=\"MathJax-script\" async
    +               src=\"%PATH\"></script>")
     
         (setq org-html-mathjax-options
    -          '((path "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js")
    -            (scale "100")
    -            (align "center")
    -            (font "TeX")
    -            (linebreaks "false")
    -            (autonumber "AMS")
    -            (indent "0em")
    -            (multlinewidth "85%")
    +          '((path "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js" )
    +            (scale "1")
    +            (autonumber "ams")
                 (tagindent ".8em")
                 (tagside "right")))
         )
    @@ -1504,12 +1551,12 @@ This is not working
     

    -
      (define-minor-mode unpackaged/org-export-html-with-useful-ids-mode
    +
      (define-minor-mode unpackaged/org-export-html-with-useful-ids-mode
         "Attempt to export Org as HTML with useful link IDs.
       Instead of random IDs like \"#orga1b2c3\", use heading titles,
       made unique when necessary."
         :global t
    -    (if unpackaged/org-export-html-with-useful-ids-mode
    +    (if unpackaged/org-export-html-with-useful-ids-mode
             (advice-add #'org-export-get-reference :override #'unpackaged/org-export-get-reference)
           (advice-remove #'org-export-get-reference #'unpackaged/org-export-get-reference)))
     
    @@ -1541,7 +1588,10 @@ This is not working
                                cells)
                               (when (org-element-property :raw-value datum)
                                 ;; Heading with a title
    -                            (unpackaged/org-export-new-title-reference datum cache))
    +                            (unpackaged/org-export-new-named-reference datum cache))
    +                          (when (member (car datum) '(src-block table example fixed-width property-drawer))
    +                            ;; Nameable elements
    +                            (unpackaged/org-export-new-named-reference datum cache))
                               ;; NOTE: This probably breaks some Org Export
                               ;; feature, but if it does what I need, fine.
                               (org-export-format-reference
    @@ -1558,7 +1608,7 @@ This is not working
                 (plist-put info :internal-references cache)
                 reference-string))))
     
    -  (defun unpackaged/org-export-new-title-reference (datum cache)
    +  (defun unpackaged/org-export-new-named-reference (datum cache)
         "Return new reference for DATUM that is unique in CACHE."
         (cl-macrolet ((inc-suffixf (place)
                                    `(progn
    @@ -1574,9 +1624,25 @@ This is not working
                                                           (string-to-number suffix)
                                                         0)))
                                         (setf ,place (format "%s--%s" s1 (cl-incf suffix)))))))
    -      (let* ((title (org-element-property :raw-value datum))
    -             (ref (url-hexify-string (substring-no-properties title)))
    -             (parent (org-element-property :parent datum)))
    +      (let* ((headline-p (eq (car datum) 'headline))
    +             (title (if headline-p
    +                        (org-element-property :raw-value datum)
    +                      (or (org-element-property :name datum)
    +                          (concat (org-element-property :raw-value
    +                                                        (org-element-property :parent
    +                                                                              (org-element-property :parent datum)))))))
    +             ;; get ascii-only form of title without needing percent-encoding
    +             (ref (concat (org-reference-contraction (substring-no-properties title))
    +                          (unless (or headline-p (org-element-property :name datum))
    +                            (concat ","
    +                                    (pcase (car datum)
    +                                      ('src-block "code")
    +                                      ('example "example")
    +                                      ('fixed-width "mono")
    +                                      ('property-drawer "properties")
    +                                      (_ (symbol-name (car datum))))
    +                                    "--1"))))
    +             (parent (when headline-p (org-element-property :parent datum))))
             (while (--any (equal ref (car it))
                           cache)
               ;; Title not unique: make it so.
    @@ -1584,11 +1650,14 @@ This is not working
                   ;; Append ancestor title.
                   (setf title (concat (org-element-property :raw-value parent)
                                       "--" title)
    -                    ref (url-hexify-string (substring-no-properties title))
    -                    parent (org-element-property :parent parent))
    +                    ;; get ascii-only form of title without needing percent-encoding
    +                    ref (org-reference-contraction (substring-no-properties title))
    +                    parent (when headline-p (org-element-property :parent parent)))
                 ;; No more ancestors: add and increment a number.
                 (inc-suffixf ref)))
             ref)))
    +
    +  (add-hook 'org-load-hook #'unpackaged/org-export-html-with-useful-ids-mode)
     
    @@ -1699,11 +1768,11 @@ Adapt this from https://github.com/ )) ;; Use imagemagick/dvisvgm to generate png from pdf - (setq org-preview-latex-default-process 'dvisvgm) + (setq org-preview-latex-default-process 'dvipng) ;; Don't change the font size for subscripts and superscripts in latex fragments. ;; This cause the orgmode tables not to be well aligned. - (setq font-latex-fontify-script nil) + (setq font-latex-fontify-script nil) ;; Colors of latex fragments (setq org-format-latex-options (plist-put org-format-latex-options :foreground 'default)) @@ -2354,9 +2423,9 @@ Special Environments
    -
    -

    Org Links

    -
    +
    +

    Org Links

    +

    Youtube Links

    @@ -2937,7 +3006,7 @@ Add all named source blocks to org-babel-library-of-babel (
      (after! org
    -    (setq org-babel-matlab-shell-command "/home/thomas/.local/bin/matlab -softwareopengl -nodesktop -nosplash")
    +    (setq org-babel-matlab-shell-command "/home/thomas/.local/bin/matlab -softwareopengl -nodesktop -nosplash")
         )
     
    @@ -2947,7 +3016,7 @@ Default options for Matlab code

      (after! org
    -    (setq org-babel-default-header-args:matlab
    +    (setq org-babel-default-header-args:matlab
               '((:results . "none")
                 (:session . "*MATLAB*")
                 (:comments . "org")
    @@ -2985,27 +3054,27 @@ Better format the output results for Matlab ((",*\\s-*\n+"                . ", ")) ;Concatenate lines
                                  body)
                               body)
    -                        org-babel-octave-eoe-indicator) "\n"))
    +                        org-babel-octave-eoe-indicator) "\n"))
                     (`value
    -                 (if (and matlabp org-babel-matlab-with-emacs-link)
    +                 (if (and matlabp org-babel-matlab-with-emacs-link)
                          (concat
    -                      (format org-babel-matlab-emacs-link-wrapper-method
    +                      (format org-babel-matlab-emacs-link-wrapper-method
                                   body
                                   (org-babel-process-file-name tmp-file 'noquote)
                                   (org-babel-process-file-name tmp-file 'noquote) wait-file) "\n")
                        (mapconcat
                         #'org-babel-chomp
    -                    (list (format org-babel-octave-wrapper-method
    +                    (list (format org-babel-octave-wrapper-method
                                       body
                                       (org-babel-process-file-name tmp-file 'noquote)
                                       (org-babel-process-file-name tmp-file 'noquote))
    -                          org-babel-octave-eoe-indicator) "\n")))))
    -             (raw (if (and matlabp org-babel-matlab-with-emacs-link)
    +                          org-babel-octave-eoe-indicator) "\n")))))
    +             (raw (if (and matlabp org-babel-matlab-with-emacs-link)
                           (save-window-excursion
                             (with-temp-buffer
                               (insert full-body)
                               (write-region "" 'ignored wait-file nil nil nil 'excl)
    -                          (matlab-shell-run-region (point-min) (point-max))
    +                          (matlab-shell-run-region (point-min) (point-max))
                               (message "Waiting for Matlab Emacs Link")
                               (while (file-exists-p wait-file) (sit-for 0.01))
                               "")) ;; matlab-shell-run-region doesn't seem to
    @@ -3015,19 +3084,19 @@ Better format the output results for Matlab ((org-babel-comint-with-output
                             (session
                              (if matlabp
    -                             org-babel-octave-eoe-indicator
    -                           org-babel-octave-eoe-output)
    +                             org-babel-octave-eoe-indicator
    +                           org-babel-octave-eoe-output)
                              t full-body)
                           (insert full-body) (comint-send-input nil t)))) results)
             (pcase result-type
               (`value
    -           (org-babel-octave-import-elisp-from-file tmp-file))
    +           (org-babel-octave-import-elisp-from-file tmp-file))
               (`output
                (setq results
                      (if matlabp
                          (cdr (reverse (delete "" (mapcar #'org-strip-quotes
                                                           (mapcar #'org-trim (remove-car-upto-newline raw))))))
    -                   (cdr (member org-babel-octave-eoe-output
    +                   (cdr (member org-babel-octave-eoe-output
                                     (reverse (mapcar #'org-strip-quotes
                                                      (mapcar #'org-trim raw)))))))
                (mapconcat #'identity (reverse results) "\n")))))
    @@ -3164,7 +3233,7 @@ when inside a source block. Otherwise, keep the normal behavior for ctrl-r
           "Returns t when the point is inside a source code block"
           (string= "src" (org-in-block-p '("src"))))
     
    -    (if (tdh-in-src-block-p)
    +    (if (tdh-in-src-block-p)
             (progn
               (org-babel-execute-src-block)
               (org-babel-next-src-block))
    @@ -3290,7 +3359,7 @@ if no region is selected, it runs all the code blocks and goes to the next block
           "Returns t when the point is inside a source code block"
           (string= "src" (org-in-block-p '("src"))))
     
    -    (if (tdh-in-src-block-p)
    +    (if (tdh-in-src-block-p)
             (let ((lang (nth 0 (org-babel-get-src-block-info))))
               (if (string= lang "matlab")
                   (if (region-active-p)
    @@ -3324,7 +3393,7 @@ if no region is selected, it runs all the code blocks and goes to the next block
           "Returns t when the point is inside a source code block"
           (string= "src" (org-in-block-p '("src"))))
     
    -    (if (tdh-in-src-block-p)
    +    (if (tdh-in-src-block-p)
             (progn
               (org-edit-special)
               (evil-indent (point-min) (point-max))
    @@ -3501,21 +3570,21 @@ Nice Functions:
         :defer t
         :after (:any org pdf-view)
         :config
    -    (setq org-noter-always-create-frame nil)
    +    (setq org-noter-always-create-frame nil)
     
    -    (setq org-noter-kill-frame-at-session-end nil)
    +    (setq org-noter-kill-frame-at-session-end nil)
     
         ;; Fraction of the frame that the document window will occupy when split
    -    (setq org-noter-doc-split-fraction '(0.6 . 0.6))
    +    (setq org-noter-doc-split-fraction '(0.6 . 0.6))
     
         ;; Save the last visited location automatically; when starting a new session, go to that location
    -    (setq org-noter-auto-save-last-location nil)
    +    (setq org-noter-auto-save-last-location nil)
     
         ;; Add an empty line between each note's heading and content
    -    (setq org-noter-separate-notes-from-heading t)
    +    (setq org-noter-separate-notes-from-heading t)
     
         ;; List of paths to check (non recursively) when searching for a notes file
    -    (setq org-noter-notes-search-path "~/Cloud/brain")
    +    (setq org-noter-notes-search-path "~/Cloud/brain")
     
         (defun org-noter-init-pdf-view ()
           (pdf-view-fit-page-to-window)
    @@ -3888,9 +3957,9 @@ Provides nice functions such as:
     
     
    -
    -

    Basic Config

    -
    +
    +

    Basic Config

    +
      (after! auctex
         (setq +latex-viewers '(zathura pdf-tools)))
    @@ -3924,10 +3993,10 @@ Provides nice functions such as:
     

    Setup Matlab Mode

    -
      (setq matlab-shell-command "/home/thomas/.local/bin/matlab")
    -  (setq matlab-shell-command-switches (list "-softwareopengl -nodesktop -nosplash"))
    +
      (setq matlab-shell-command "/home/thomas/.local/bin/matlab")
    +  (setq matlab-shell-command-switches (list "-softwareopengl -nodesktop -nosplash"))
       (setq matlab-indent-function t)
    -  (setq mlint-programs '("mlint" "/home/thomas/.local/bin/mlint"))
    +  (setq mlint-programs '("mlint" "/home/thomas/.local/bin/mlint"))
     
    @@ -3959,7 +4028,7 @@ Provides nice functions such as:

    Completion in the Matlab Shell

    -
      (map! :map matlab-shell-mode-map
    +
      (map! :map matlab-shell-mode-map
             :i "<tab>" 'matlab-shell-tab)
     
    @@ -3977,7 +4046,7 @@ Provides nice functions such as: (if (string= (file-name-extension (buffer-file-name)) "m") (progn (save-buffer) - (matlab-shell-run-command (concat "MBeautify.formatFileNoEditor(\"" (buffer-file-name) "\", \"" (buffer-file-name) "\")")) + (matlab-shell-run-command (concat "MBeautify.formatFileNoEditor(\"" (buffer-file-name) "\", \"" (buffer-file-name) "\")")) (revert-buffer :ignore-auto :noconfirm)) (message "Current buffer is not a matlab file") ) @@ -3993,31 +4062,31 @@ Provides nice functions such as:
      (defun tdh-matlab-add-breakpoint ()
         (interactive)
    -    (matlab-shell-run-command (concat "dbstop in " (buffer-name) " at " (number-to-string (line-number-at-pos nil)))))
    +    (matlab-shell-run-command (concat "dbstop in " (buffer-name) " at " (number-to-string (line-number-at-pos nil)))))
     
       (defun tdh-matlab-remove-breakpoint ()
         (interactive)
    -    (matlab-shell-run-command (concat "dbclear in " (buffer-name) " at " (number-to-string (line-number-at-pos nil)))))
    +    (matlab-shell-run-command (concat "dbclear in " (buffer-name) " at " (number-to-string (line-number-at-pos nil)))))
     
       (defun tdh-matlab-list-breakpoints ()
         (interactive)
    -    (matlab-shell-run-command (concat "dbstatus " (buffer-name))))
    +    (matlab-shell-run-command (concat "dbstatus " (buffer-name))))
     
       (defun tdh-matlab-clear-breakpoints ()
         (interactive)
    -    (matlab-shell-run-command (concat "dbclear in " (buffer-name))))
    +    (matlab-shell-run-command (concat "dbclear in " (buffer-name))))
     
       (defun tdh-matlab-no-debug-on-error ()
         (interactive)
    -    (matlab-shell-run-command (concat "dbclear if error")))
    +    (matlab-shell-run-command (concat "dbclear if error")))
     
       (defun tdh-matlab-debug-on-error ()
         (interactive)
    -    (matlab-shell-run-command (concat "dbstop if error")))
    +    (matlab-shell-run-command (concat "dbstop if error")))
     
       (defun tdh-matlab-go-to-file-directory ()
         (interactive)
    -    (matlab-shell-run-command (concat "cd " (file-name-directory buffer-file-name))))
    +    (matlab-shell-run-command (concat "cd " (file-name-directory buffer-file-name))))
     
    @@ -4161,9 +4230,9 @@ Choose account label to feed msmtp -a option based on From header in Message buf
    -
    -

    Basic Config

    -
    +
    +

    Basic Config

    +
      (use-package! mu4e
         :config
    @@ -4400,7 +4469,7 @@ Choose account label to feed msmtp -a option based on From header in Message buf
     
              :checkers
              syntax          ; tasing you for every semicolon you forget
    -         spell          ; tasing you for misspelling mispelling
    +         (spell +aspell)          ; tasing you for misspelling mispelling
     
              :lang
              data              ; config/data formats
    @@ -4416,6 +4485,7 @@ Choose account label to feed msmtp -a option based on From header in Message buf
               +dragndrop       ; drag & drop files/images into org buffers
               +hugo            ; use Emacs for hugo blogging
               +roam         ;
    +          +gnuplot
               +present)        ; using org-mode for presentations
              python            ; beautiful is better than ugly
              (sh                ; she sells {ba,z,fi}sh shells on the C xor
    @@ -4549,7 +4619,7 @@ Choose account label to feed msmtp -a option based on From header in Message buf
     

    Author: Dehaeze Thomas

    -

    Created: 2021-01-03 dim. 22:19

    +

    Created: 2021-01-04 lun. 21:32

    diff --git a/docs/index.html b/docs/index.html index d2c758c..1def58d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Dotfiles - Manjaro Linux diff --git a/docs/mail.html b/docs/mail.html index fbc9c3d..bbdf2ac 100644 --- a/docs/mail.html +++ b/docs/mail.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Mail Configuration @@ -25,8 +25,8 @@
  • mbsync - Synchronize Mailboxes @@ -34,8 +34,8 @@
  • msmtp - Send Mails
  • +

    +Installation: +

    +
    +
      yay -S mbsync msmtp mu neomutt lynx
    +
    +

    mbsync - Synchronize Mailboxes

    @@ -169,141 +176,141 @@

    Global Defaults

    -
    # Automatically create missing mailboxes, both locally and on the server
    -Create Both
    -# Save the synchronization state files in the relevant directory
    -SyncState *
    -# Permanently remove all messages [on the Master/Slave] marked for deletion.
    -Expunge Both
    +
      # Automatically create missing mailboxes, both locally and on the server
    +  Create Both
    +  # Save the synchronization state files in the relevant directory
    +  SyncState *
    +  # Permanently remove all messages [on the Master/Slave] marked for deletion.
    +  Expunge Both
     
    -
    -

    Gmail Account

    -
    +
    +

    Gmail Account

    +
    -
    IMAPAccount gmail
    -Host imap.gmail.com
    -User dehaeze.thomas@gmail.com
    -PassCmd "pass email/dehaeze.thomas@gmail.com"
    -SSLType IMAPS
    -AuthMechs LOGIN
    -CertificateFile /etc/ssl/certs/ca-certificates.crt
    +
      IMAPAccount gmail
    +  Host imap.gmail.com
    +  User dehaeze.thomas@gmail.com
    +  PassCmd "pass email/dehaeze.thomas@gmail.com"
    +  SSLType IMAPS
    +  AuthMechs LOGIN
    +  CertificateFile /etc/ssl/certs/ca-certificates.crt
     
    -
    IMAPStore gmail-remote
    -Account gmail
    +
      IMAPStore gmail-remote
    +  Account gmail
     
    -MaildirStore gmail-local
    -Path ~/.mail/gmail/
    -Inbox ~/.mail/gmail/Inbox
    +  MaildirStore gmail-local
    +  Path ~/.mail/gmail/
    +  Inbox ~/.mail/gmail/Inbox
     
    -Channel gmail-Home
    -Master :gmail-remote:"INBOX"
    -Slave :gmail-local:Inbox
    +  Channel gmail-Home
    +  Master :gmail-remote:"INBOX"
    +  Slave :gmail-local:Inbox
     
    -Channel gmail-Drafts
    -Master :gmail-remote:"[Gmail]/Drafts"
    -Slave :gmail-local:Drafts
    +  Channel gmail-Drafts
    +  Master :gmail-remote:"[Gmail]/Drafts"
    +  Slave :gmail-local:Drafts
     
    -Channel gmail-Sent
    -Master :gmail-remote:"[Gmail]/Sent Mail"
    -Slave :gmail-local:Sent
    +  Channel gmail-Sent
    +  Master :gmail-remote:"[Gmail]/Sent Mail"
    +  Slave :gmail-local:Sent
     
    -Channel gmail-Trash
    -Master :gmail-remote:"[Gmail]/Trash"
    -Slave :gmail-local:Trash
    +  Channel gmail-Trash
    +  Master :gmail-remote:"[Gmail]/Trash"
    +  Slave :gmail-local:Trash
     
    -Channel gmail-All
    -Master :gmail-remote:"[Gmail]/All Mail"
    -Slave :gmail-local:Archive
    +  Channel gmail-All
    +  Master :gmail-remote:"[Gmail]/All Mail"
    +  Slave :gmail-local:Archive
     
    -
    # Catch-all for everything else: note that the `Patterns` have to exclude both
    -# the remote and local names for all the folders we want to exclude (except
    -# "INBOX", which is special-cased, it would seem).
    -Channel gmail
    -Master :gmail-remote:
    -Slave :gmail-local:
    -# Exclude everything under the internal [Gmail] folder, except the interesting folders
    -Patterns *
    -Patterns !INBOX
    -Patterns ![Gmail]*
    -Patterns !Archive
    -Patterns !Drafts
    -Patterns !Sent Mail
    -Patterns !Trash
    -Patterns !Spam
    -Patterns !Starred
    +
      # Catch-all for everything else: note that the `Patterns` have to exclude both
    +  # the remote and local names for all the folders we want to exclude (except
    +  # "INBOX", which is special-cased, it would seem).
    +  Channel gmail
    +  Master :gmail-remote:
    +  Slave :gmail-local:
    +  # Exclude everything under the internal [Gmail] folder, except the interesting folders
    +  Patterns *
    +  Patterns !INBOX
    +  Patterns ![Gmail]*
    +  Patterns !Archive
    +  Patterns !Drafts
    +  Patterns !Sent Mail
    +  Patterns !Trash
    +  Patterns !Spam
    +  Patterns !Starred
     
    -
    # For doing a quick sync of just the INBOX with `mbsync gmail-download`.
    -Channel gmail-download
    -Master :gmail-remote:"INBOX"
    -Slave :gmail-local:Inbox
    -Create Slave
    -Expunge Slave
    -Sync Pull
    +
      # For doing a quick sync of just the INBOX with `mbsync gmail-download`.
    +  Channel gmail-download
    +  Master :gmail-remote:"INBOX"
    +  Slave :gmail-local:Inbox
    +  Create Slave
    +  Expunge Slave
    +  Sync Pull
     
    -
    -

    ESRF Account

    -
    +
    +

    ESRF Account

    +
    -
    IMAPAccount esrf
    -Host imaps.esrf.fr
    -User dehaeze
    -PassCmd "pass email/thomas.dehaeze@esrf.fr"
    -SSLType IMAPS
    -AuthMechs LOGIN
    +
      IMAPAccount esrf
    +  Host imaps.esrf.fr
    +  User dehaeze
    +  PassCmd "pass email/thomas.dehaeze@esrf.fr"
    +  SSLType IMAPS
    +  AuthMechs LOGIN
     
    -
    IMAPStore esrf-remote
    -Account esrf
    +
      IMAPStore esrf-remote
    +  Account esrf
     
    -MaildirStore esrf-local
    -Path ~/.mail/esrf/
    -Inbox ~/.mail/esrf/Inbox
    +  MaildirStore esrf-local
    +  Path ~/.mail/esrf/
    +  Inbox ~/.mail/esrf/Inbox
     
    -Channel esrf-Home
    -Master :esrf-remote:"Inbox"
    -Slave :esrf-local:Inbox
    +  Channel esrf-Home
    +  Master :esrf-remote:"Inbox"
    +  Slave :esrf-local:Inbox
     
    -Channel esrf-Drafts
    -Master :esrf-remote:"Drafts"
    -Slave :esrf-local:Drafts
    +  Channel esrf-Drafts
    +  Master :esrf-remote:"Drafts"
    +  Slave :esrf-local:Drafts
     
    -Channel esrf-Archive
    -Master :esrf-remote:"Archive"
    -Slave :esrf-local:Archive
    +  Channel esrf-Archive
    +  Master :esrf-remote:"Archive"
    +  Slave :esrf-local:Archive
     
    -Channel esrf-Sent
    -Master :esrf-remote:"Sent"
    -Slave :esrf-local:Sent
    +  Channel esrf-Sent
    +  Master :esrf-remote:"Sent"
    +  Slave :esrf-local:Sent
     
    -Channel esrf-Trash
    -Master :esrf-remote:"Trash"
    -Slave :esrf-local:Trash
    +  Channel esrf-Trash
    +  Master :esrf-remote:"Trash"
    +  Slave :esrf-local:Trash
     
    -
    Channel esrf
    -Master :esrf-remote:
    -Slave :esrf-local:
    +
      Channel esrf
    +  Master :esrf-remote:
    +  Slave :esrf-local:
     
    @@ -311,12 +318,12 @@ Slave :esrf-local: For doing a quick sync of just the INBOX with `mbsync esrf-download`.

    -
    Channel esrf-download
    -Master :esrf-remote:"INBOX"
    -Slave :esrf-local:Inbox
    -Create Slave
    -Expunge Slave
    -Sync Pull
    +
      Channel esrf-download
    +  Master :esrf-remote:"INBOX"
    +  Slave :esrf-local:Inbox
    +  Create Slave
    +  Expunge Slave
    +  Sync Pull
     
    @@ -326,49 +333,49 @@ Sync Pull

    ULG Student Account

    -
    IMAPAccount ulg
    -Host mail.ulg.ac.be
    -User thomas.dehaeze@doct.uliege.be
    -PassCmd "pass email/thomas.dehaeze@doct.uliege.be"
    -SSLType IMAPS
    -AuthMechs LOGIN
    +
      IMAPAccount ulg
    +  Host mail.ulg.ac.be
    +  User thomas.dehaeze@doct.uliege.be
    +  PassCmd "pass email/thomas.dehaeze@doct.uliege.be"
    +  SSLType IMAPS
    +  AuthMechs LOGIN
     
    -
    IMAPStore ulg-remote
    -Account ulg
    +
      IMAPStore ulg-remote
    +  Account ulg
     
    -MaildirStore ulg-local
    -Path ~/.mail/ulg/
    -Inbox ~/.mail/ulg/Inbox
    +  MaildirStore ulg-local
    +  Path ~/.mail/ulg/
    +  Inbox ~/.mail/ulg/Inbox
     
    -Channel ulg-Home
    -Master :ulg-remote:"Inbox"
    -Slave :ulg-local:Inbox
    +  Channel ulg-Home
    +  Master :ulg-remote:"Inbox"
    +  Slave :ulg-local:Inbox
     
    -Channel ulg-Drafts
    -Master :ulg-remote:"Drafts"
    -Slave :ulg-local:Drafts
    +  Channel ulg-Drafts
    +  Master :ulg-remote:"Drafts"
    +  Slave :ulg-local:Drafts
     
    -Channel ulg-Archive
    -Master :ulg-remote:"Archive"
    -Slave :ulg-local:Archive
    +  Channel ulg-Archive
    +  Master :ulg-remote:"Archive"
    +  Slave :ulg-local:Archive
     
    -Channel ulg-Sent
    -Master :ulg-remote:"Sent"
    -Slave :ulg-local:Sent
    +  Channel ulg-Sent
    +  Master :ulg-remote:"Sent"
    +  Slave :ulg-local:Sent
     
    -Channel ulg-Trash
    -Master :ulg-remote:"Trash"
    -Slave :ulg-local:Trash
    +  Channel ulg-Trash
    +  Master :ulg-remote:"Trash"
    +  Slave :ulg-local:Trash
     
    -
    Channel ulg
    -Master :ulg-remote:
    -Slave :ulg-local:
    +
      Channel ulg
    +  Master :ulg-remote:
    +  Slave :ulg-local:
     
    @@ -376,12 +383,12 @@ Slave :ulg-local: For doing a quick sync of just the INBOX with `mbsync ulg-download`.

    -
    Channel ulg-download
    -Master :ulg-remote:"Inbox"
    -Slave :ulg-local:Inbox
    -Create Slave
    -Expunge Slave
    -Sync Pull
    +
      Channel ulg-download
    +  Master :ulg-remote:"Inbox"
    +  Slave :ulg-local:Inbox
    +  Create Slave
    +  Expunge Slave
    +  Sync Pull
     
    @@ -391,49 +398,49 @@ Sync Pull

    ULG Personal Account

    -
    IMAPAccount uliege
    -Host mail.ulg.ac.be
    -User tdehaeze@uliege.be
    -PassCmd "pass email/tdehaeze@uliege.be"
    -SSLType IMAPS
    -AuthMechs LOGIN
    +
      IMAPAccount uliege
    +  Host mail.ulg.ac.be
    +  User tdehaeze@uliege.be
    +  PassCmd "pass email/tdehaeze@uliege.be"
    +  SSLType IMAPS
    +  AuthMechs LOGIN
     
    -
    IMAPStore uliege-remote
    -Account uliege
    +
      IMAPStore uliege-remote
    +  Account uliege
     
    -MaildirStore uliege-local
    -Path ~/.mail/uliege/
    -Inbox ~/.mail/uliege/Inbox
    +  MaildirStore uliege-local
    +  Path ~/.mail/uliege/
    +  Inbox ~/.mail/uliege/Inbox
     
    -Channel uliege-Home
    -Master :uliege-remote:"Inbox"
    -Slave :uliege-local:Inbox
    +  Channel uliege-Home
    +  Master :uliege-remote:"Inbox"
    +  Slave :uliege-local:Inbox
     
    -Channel uliege-Drafts
    -Master :uliege-remote:"Drafts"
    -Slave :uliege-local:Drafts
    +  Channel uliege-Drafts
    +  Master :uliege-remote:"Drafts"
    +  Slave :uliege-local:Drafts
     
    -Channel uliege-Archive
    -Master :uliege-remote:"Archive"
    -Slave :uliege-local:Archive
    +  Channel uliege-Archive
    +  Master :uliege-remote:"Archive"
    +  Slave :uliege-local:Archive
     
    -Channel uliege-Sent
    -Master :uliege-remote:"Sent"
    -Slave :uliege-local:Sent
    +  Channel uliege-Sent
    +  Master :uliege-remote:"Sent"
    +  Slave :uliege-local:Sent
     
    -Channel uliege-Trash
    -Master :uliege-remote:"Trash"
    -Slave :uliege-local:Trash
    +  Channel uliege-Trash
    +  Master :uliege-remote:"Trash"
    +  Slave :uliege-local:Trash
     
    -
    Channel uliege
    -Master :uliege-remote:
    -Slave :uliege-local:
    +
      Channel uliege
    +  Master :uliege-remote:
    +  Slave :uliege-local:
     
    @@ -441,12 +448,12 @@ Slave :uliege-local: For doing a quick sync of just the INBOX with `mbsync uliege-download`.

    -
    Channel uliege-download
    -Master :uliege-remote:"Inbox"
    -Slave :uliege-local:Inbox
    -Create Slave
    -Expunge Slave
    -Sync Pull
    +
      Channel uliege-download
    +  Master :uliege-remote:"Inbox"
    +  Slave :uliege-local:Inbox
    +  Create Slave
    +  Expunge Slave
    +  Sync Pull
     
    @@ -465,43 +472,43 @@ Sync Pull

    Defaults

    -
    defaults
    -auth          on
    -tls           on
    -tls_certcheck off
    +
      defaults
    +  auth          on
    +  tls           on
    +  tls_certcheck off
     
    -
    -

    Gmail Account

    -
    +
    +

    Gmail Account

    +
    -
    account      gmail
    -host         smtp.gmail.com
    -port         587
    -protocol     smtp
    -from         dehaeze.thomas@gmail.com
    -user         dehaeze.thomas@gmail.com
    -passwordeval "pass email/dehaeze.thomas@gmail.com"
    +
      account      gmail
    +  host         smtp.gmail.com
    +  port         587
    +  protocol     smtp
    +  from         dehaeze.thomas@gmail.com
    +  user         dehaeze.thomas@gmail.com
    +  passwordeval "pass email/dehaeze.thomas@gmail.com"
     
    -
    -

    ESRF Account

    -
    +
    +

    ESRF Account

    +
    -
    account        esrf
    -host           smtps.esrf.fr
    -port           465
    -protocol       smtp
    -from           thomas.dehaeze@esrf.fr
    -user           dehaeze
    -tls_starttls   off
    -passwordeval   "pass email/thomas.dehaeze@esrf.fr"
    +
      account        esrf
    +  host           smtps.esrf.fr
    +  port           465
    +  protocol       smtp
    +  from           thomas.dehaeze@esrf.fr
    +  user           dehaeze
    +  tls_starttls   off
    +  passwordeval   "pass email/thomas.dehaeze@esrf.fr"
     
    @@ -511,14 +518,14 @@ passwordeval "pass email/thomas.dehaeze@esrf.fr"ULG Account
    -
    account        ulg
    -host           smtp.ulg.ac.be
    -port           587
    -protocol       smtp
    -from           thomas.dehaeze@doct.uliege.be
    -user           s177313
    -tls_starttls   on
    -passwordeval   "pass email/thomas.dehaeze@doct.uliege.be"
    +
      account        ulg
    +  host           smtp.ulg.ac.be
    +  port           587
    +  protocol       smtp
    +  from           thomas.dehaeze@doct.uliege.be
    +  user           s177313
    +  tls_starttls   on
    +  passwordeval   "pass email/thomas.dehaeze@doct.uliege.be"
     
    @@ -528,14 +535,14 @@ passwordeval "pass email/thomas.dehaeze@doct.uliege.b

    ULIEGE Account

    -
    account        uliege
    -host           smtp.ulg.ac.be
    -port           587
    -protocol       smtp
    -from           tdehaeze@uliege.be
    -user           u231244
    -tls_starttls   on
    -passwordeval   "pass email/tdehaeze@uliege.be"
    +
      account        uliege
    +  host           smtp.ulg.ac.be
    +  port           587
    +  protocol       smtp
    +  from           tdehaeze@uliege.be
    +  user           u231244
    +  tls_starttls   on
    +  passwordeval   "pass email/tdehaeze@uliege.be"
     
    @@ -545,7 +552,7 @@ passwordeval "pass email/tdehaeze@uliege.be"

    Default Account

    -
    account default : gmail
    +
      account default : gmail
     
    @@ -564,7 +571,7 @@ Useful commands are described in the -
    mu find 'mime:application/pdf'
    +
      mu find 'mime:application/pdf'
     
    @@ -581,8 +588,8 @@ For instance, to find mails with pdf attachments: Documentation:

    -
    man neomutt
    -man neomuttrc
    +
      man neomutt
    +  man neomuttrc
     
    @@ -595,270 +602,270 @@ man neomuttrc

    Unding all the key bindings

    -
    bind generic,pager,editor,index a noop
    -bind generic,pager,editor,index b noop
    -bind generic,pager,editor,index c noop
    -bind generic,pager,editor,index d noop
    -bind generic,pager,editor,index e noop
    -bind generic,pager,editor,index f noop
    -bind generic,pager,editor,index g noop
    -bind generic,pager,editor,index h noop
    -bind generic,pager,editor,index i noop
    -bind generic,pager,editor,index j noop
    -bind generic,pager,editor,index k noop
    -bind generic,pager,editor,index l noop
    -bind generic,pager,editor,index m noop
    -bind generic,pager,editor,index n noop
    -bind generic,pager,editor,index o noop
    -bind generic,pager,editor,index p noop
    -bind generic,pager,editor,index q noop
    -bind generic,pager,editor,index r noop
    -bind generic,pager,editor,index s noop
    -bind generic,pager,editor,index t noop
    -bind generic,pager,editor,index u noop
    -bind generic,pager,editor,index v noop
    -bind generic,pager,editor,index w noop
    -bind generic,pager,editor,index x noop
    -bind generic,pager,editor,index y noop
    -bind generic,pager,editor,index z noop
    -bind generic,pager,editor,index A noop
    -bind generic,pager,editor,index B noop
    -bind generic,pager,editor,index C noop
    -bind generic,pager,editor,index D noop
    -bind generic,pager,editor,index E noop
    -bind generic,pager,editor,index F noop
    -bind generic,pager,editor,index G noop
    -bind generic,pager,editor,index H noop
    -bind generic,pager,editor,index I noop
    -bind generic,pager,editor,index J noop
    -bind generic,pager,editor,index K noop
    -bind generic,pager,editor,index L noop
    -bind generic,pager,editor,index M noop
    -bind generic,pager,editor,index N noop
    -bind generic,pager,editor,index O noop
    -bind generic,pager,editor,index P noop
    -bind generic,pager,editor,index Q noop
    -bind generic,pager,editor,index R noop
    -bind generic,pager,editor,index S noop
    -bind generic,pager,editor,index T noop
    -bind generic,pager,editor,index U noop
    -bind generic,pager,editor,index V noop
    -bind generic,pager,editor,index W noop
    -bind generic,pager,editor,index X noop
    -bind generic,pager,editor,index Y noop
    -bind generic,pager,editor,index Z noop
    +
      bind generic,pager,editor,index a noop
    +  bind generic,pager,editor,index b noop
    +  bind generic,pager,editor,index c noop
    +  bind generic,pager,editor,index d noop
    +  bind generic,pager,editor,index e noop
    +  bind generic,pager,editor,index f noop
    +  bind generic,pager,editor,index g noop
    +  bind generic,pager,editor,index h noop
    +  bind generic,pager,editor,index i noop
    +  bind generic,pager,editor,index j noop
    +  bind generic,pager,editor,index k noop
    +  bind generic,pager,editor,index l noop
    +  bind generic,pager,editor,index m noop
    +  bind generic,pager,editor,index n noop
    +  bind generic,pager,editor,index o noop
    +  bind generic,pager,editor,index p noop
    +  bind generic,pager,editor,index q noop
    +  bind generic,pager,editor,index r noop
    +  bind generic,pager,editor,index s noop
    +  bind generic,pager,editor,index t noop
    +  bind generic,pager,editor,index u noop
    +  bind generic,pager,editor,index v noop
    +  bind generic,pager,editor,index w noop
    +  bind generic,pager,editor,index x noop
    +  bind generic,pager,editor,index y noop
    +  bind generic,pager,editor,index z noop
    +  bind generic,pager,editor,index A noop
    +  bind generic,pager,editor,index B noop
    +  bind generic,pager,editor,index C noop
    +  bind generic,pager,editor,index D noop
    +  bind generic,pager,editor,index E noop
    +  bind generic,pager,editor,index F noop
    +  bind generic,pager,editor,index G noop
    +  bind generic,pager,editor,index H noop
    +  bind generic,pager,editor,index I noop
    +  bind generic,pager,editor,index J noop
    +  bind generic,pager,editor,index K noop
    +  bind generic,pager,editor,index L noop
    +  bind generic,pager,editor,index M noop
    +  bind generic,pager,editor,index N noop
    +  bind generic,pager,editor,index O noop
    +  bind generic,pager,editor,index P noop
    +  bind generic,pager,editor,index Q noop
    +  bind generic,pager,editor,index R noop
    +  bind generic,pager,editor,index S noop
    +  bind generic,pager,editor,index T noop
    +  bind generic,pager,editor,index U noop
    +  bind generic,pager,editor,index V noop
    +  bind generic,pager,editor,index W noop
    +  bind generic,pager,editor,index X noop
    +  bind generic,pager,editor,index Y noop
    +  bind generic,pager,editor,index Z noop
     
    -bind generic,pager,editor,index <Tab>      noop
    -bind generic,pager,editor,index <Space>    noop
    -bind generic,pager,editor,index <PageUp>   noop
    -bind generic,pager,editor,index <PageDown> noop
    -bind generic,pager,editor,index <Home>     noop
    -bind generic,pager,editor,index <End>      noop
    -bind generic,pager,editor,index <Insert>   noop
    -bind generic,pager,editor,index <Delete>   noop
    -bind generic,pager,editor,index <Up>       noop
    -bind generic,pager,editor,index <Down>     noop
    -bind generic,pager,editor,index <Left>     noop
    -bind generic,pager,editor,index <Right>    noop
    -bind generic,pager,editor,index <Enter>    noop
    -bind generic,pager,editor,index <Return>   noop
    +  bind generic,pager,editor,index <Tab>      noop
    +  bind generic,pager,editor,index <Space>    noop
    +  bind generic,pager,editor,index <PageUp>   noop
    +  bind generic,pager,editor,index <PageDown> noop
    +  bind generic,pager,editor,index <Home>     noop
    +  bind generic,pager,editor,index <End>      noop
    +  bind generic,pager,editor,index <Insert>   noop
    +  bind generic,pager,editor,index <Delete>   noop
    +  bind generic,pager,editor,index <Up>       noop
    +  bind generic,pager,editor,index <Down>     noop
    +  bind generic,pager,editor,index <Left>     noop
    +  bind generic,pager,editor,index <Right>    noop
    +  bind generic,pager,editor,index <Enter>    noop
    +  bind generic,pager,editor,index <Return>   noop
     
    -bind generic,pager,editor,index | noop
    +  bind generic,pager,editor,index | noop
     
    -bind generic,pager,editor,index 1 noop
    -bind generic,pager,editor,index 2 noop
    -bind generic,pager,editor,index 3 noop
    -bind generic,pager,editor,index 4 noop
    -bind generic,pager,editor,index 5 noop
    -bind generic,pager,editor,index 6 noop
    -bind generic,pager,editor,index 7 noop
    -bind generic,pager,editor,index 8 noop
    -bind generic,pager,editor,index 9 noop
    -bind generic,pager,editor,index 0 noop
    -bind generic,pager,editor,index ! noop
    -bind generic,pager,editor,index @ noop
    -bind generic,pager,editor,index $ noop
    -bind generic,pager,editor,index % noop
    -bind generic,pager,editor,index ^ noop
    -bind generic,pager,editor,index & noop
    -bind generic,pager,editor,index * noop
    -bind generic,pager,editor,index ( noop
    -bind generic,pager,editor,index ) noop
    +  bind generic,pager,editor,index 1 noop
    +  bind generic,pager,editor,index 2 noop
    +  bind generic,pager,editor,index 3 noop
    +  bind generic,pager,editor,index 4 noop
    +  bind generic,pager,editor,index 5 noop
    +  bind generic,pager,editor,index 6 noop
    +  bind generic,pager,editor,index 7 noop
    +  bind generic,pager,editor,index 8 noop
    +  bind generic,pager,editor,index 9 noop
    +  bind generic,pager,editor,index 0 noop
    +  bind generic,pager,editor,index ! noop
    +  bind generic,pager,editor,index @ noop
    +  bind generic,pager,editor,index $ noop
    +  bind generic,pager,editor,index % noop
    +  bind generic,pager,editor,index ^ noop
    +  bind generic,pager,editor,index & noop
    +  bind generic,pager,editor,index * noop
    +  bind generic,pager,editor,index ( noop
    +  bind generic,pager,editor,index ) noop
     
    -bind generic,pager,editor,index \Ca noop
    -bind generic,pager,editor,index \Cb noop
    -bind generic,pager,editor,index \Cc noop
    -bind generic,pager,editor,index \Cd noop
    -bind generic,pager,editor,index \Ce noop
    -bind generic,pager,editor,index \Cf noop
    -bind generic,pager,editor,index \Cg noop
    -bind generic,pager,editor,index \Ch noop
    -bind generic,pager,editor,index \Ci noop
    -bind generic,pager,editor,index \Cj noop
    -bind generic,pager,editor,index \Ck noop
    -bind generic,pager,editor,index \Cl noop
    -bind generic,pager,editor,index \Cm noop
    -bind generic,pager,editor,index \Cn noop
    -bind generic,pager,editor,index \Co noop
    -bind generic,pager,editor,index \Cp noop
    -bind generic,pager,editor,index \Cq noop
    -bind generic,pager,editor,index \Cr noop
    -bind generic,pager,editor,index \Cs noop
    -bind generic,pager,editor,index \Ct noop
    -bind generic,pager,editor,index \Cu noop
    -bind generic,pager,editor,index \Cv noop
    -bind generic,pager,editor,index \Cw noop
    -bind generic,pager,editor,index \Cx noop
    -bind generic,pager,editor,index \Cy noop
    -bind generic,pager,editor,index \Cz noop
    -bind generic,pager,editor,index \CA noop
    -bind generic,pager,editor,index \CB noop
    -bind generic,pager,editor,index \CC noop
    -bind generic,pager,editor,index \CD noop
    -bind generic,pager,editor,index \CE noop
    -bind generic,pager,editor,index \CF noop
    -bind generic,pager,editor,index \CG noop
    -bind generic,pager,editor,index \CH noop
    -bind generic,pager,editor,index \CI noop
    -bind generic,pager,editor,index \CJ noop
    -bind generic,pager,editor,index \CK noop
    -bind generic,pager,editor,index \CL noop
    -bind generic,pager,editor,index \CM noop
    -bind generic,pager,editor,index \CN noop
    -bind generic,pager,editor,index \CO noop
    -bind generic,pager,editor,index \CP noop
    -bind generic,pager,editor,index \CQ noop
    -bind generic,pager,editor,index \CR noop
    -bind generic,pager,editor,index \CS noop
    -bind generic,pager,editor,index \CT noop
    -bind generic,pager,editor,index \CU noop
    -bind generic,pager,editor,index \CV noop
    -bind generic,pager,editor,index \CW noop
    -bind generic,pager,editor,index \CX noop
    -bind generic,pager,editor,index \CY noop
    -bind generic,pager,editor,index \CZ noop
    +  bind generic,pager,editor,index \Ca noop
    +  bind generic,pager,editor,index \Cb noop
    +  bind generic,pager,editor,index \Cc noop
    +  bind generic,pager,editor,index \Cd noop
    +  bind generic,pager,editor,index \Ce noop
    +  bind generic,pager,editor,index \Cf noop
    +  bind generic,pager,editor,index \Cg noop
    +  bind generic,pager,editor,index \Ch noop
    +  bind generic,pager,editor,index \Ci noop
    +  bind generic,pager,editor,index \Cj noop
    +  bind generic,pager,editor,index \Ck noop
    +  bind generic,pager,editor,index \Cl noop
    +  bind generic,pager,editor,index \Cm noop
    +  bind generic,pager,editor,index \Cn noop
    +  bind generic,pager,editor,index \Co noop
    +  bind generic,pager,editor,index \Cp noop
    +  bind generic,pager,editor,index \Cq noop
    +  bind generic,pager,editor,index \Cr noop
    +  bind generic,pager,editor,index \Cs noop
    +  bind generic,pager,editor,index \Ct noop
    +  bind generic,pager,editor,index \Cu noop
    +  bind generic,pager,editor,index \Cv noop
    +  bind generic,pager,editor,index \Cw noop
    +  bind generic,pager,editor,index \Cx noop
    +  bind generic,pager,editor,index \Cy noop
    +  bind generic,pager,editor,index \Cz noop
    +  bind generic,pager,editor,index \CA noop
    +  bind generic,pager,editor,index \CB noop
    +  bind generic,pager,editor,index \CC noop
    +  bind generic,pager,editor,index \CD noop
    +  bind generic,pager,editor,index \CE noop
    +  bind generic,pager,editor,index \CF noop
    +  bind generic,pager,editor,index \CG noop
    +  bind generic,pager,editor,index \CH noop
    +  bind generic,pager,editor,index \CI noop
    +  bind generic,pager,editor,index \CJ noop
    +  bind generic,pager,editor,index \CK noop
    +  bind generic,pager,editor,index \CL noop
    +  bind generic,pager,editor,index \CM noop
    +  bind generic,pager,editor,index \CN noop
    +  bind generic,pager,editor,index \CO noop
    +  bind generic,pager,editor,index \CP noop
    +  bind generic,pager,editor,index \CQ noop
    +  bind generic,pager,editor,index \CR noop
    +  bind generic,pager,editor,index \CS noop
    +  bind generic,pager,editor,index \CT noop
    +  bind generic,pager,editor,index \CU noop
    +  bind generic,pager,editor,index \CV noop
    +  bind generic,pager,editor,index \CW noop
    +  bind generic,pager,editor,index \CX noop
    +  bind generic,pager,editor,index \CY noop
    +  bind generic,pager,editor,index \CZ noop
     
    -bind generic,pager,editor,index \C<Tab>      noop
    -bind generic,pager,editor,index \C<Space>    noop
    -bind generic,pager,editor,index \C<PageUp>   noop
    -bind generic,pager,editor,index \C<PageDown> noop
    -bind generic,pager,editor,index \C<Home>     noop
    -bind generic,pager,editor,index \C<End>      noop
    -bind generic,pager,editor,index \C<Insert>   noop
    -bind generic,pager,editor,index \C<Delete>   noop
    -bind generic,pager,editor,index \C<Up>       noop
    -bind generic,pager,editor,index \C<Down>     noop
    -bind generic,pager,editor,index \C<Left>     noop
    -bind generic,pager,editor,index \C<Right>    noop
    -bind generic,pager,editor,index \C<Enter>    noop
    -bind generic,pager,editor,index \C<Return>   noop
    +  bind generic,pager,editor,index \C<Tab>      noop
    +  bind generic,pager,editor,index \C<Space>    noop
    +  bind generic,pager,editor,index \C<PageUp>   noop
    +  bind generic,pager,editor,index \C<PageDown> noop
    +  bind generic,pager,editor,index \C<Home>     noop
    +  bind generic,pager,editor,index \C<End>      noop
    +  bind generic,pager,editor,index \C<Insert>   noop
    +  bind generic,pager,editor,index \C<Delete>   noop
    +  bind generic,pager,editor,index \C<Up>       noop
    +  bind generic,pager,editor,index \C<Down>     noop
    +  bind generic,pager,editor,index \C<Left>     noop
    +  bind generic,pager,editor,index \C<Right>    noop
    +  bind generic,pager,editor,index \C<Enter>    noop
    +  bind generic,pager,editor,index \C<Return>   noop
     
    -bind generic,pager,editor,index \C1 noop
    -bind generic,pager,editor,index \C2 noop
    -bind generic,pager,editor,index \C3 noop
    -bind generic,pager,editor,index \C4 noop
    -bind generic,pager,editor,index \C5 noop
    -bind generic,pager,editor,index \C6 noop
    -bind generic,pager,editor,index \C7 noop
    -bind generic,pager,editor,index \C8 noop
    -bind generic,pager,editor,index \C9 noop
    -bind generic,pager,editor,index \C0 noop
    -bind generic,pager,editor,index \C! noop
    -bind generic,pager,editor,index \C$ noop
    -bind generic,pager,editor,index \C% noop
    -bind generic,pager,editor,index \C^ noop
    -bind generic,pager,editor,index \C& noop
    -bind generic,pager,editor,index \C* noop
    -bind generic,pager,editor,index \C( noop
    -bind generic,pager,editor,index \C) noop
    +  bind generic,pager,editor,index \C1 noop
    +  bind generic,pager,editor,index \C2 noop
    +  bind generic,pager,editor,index \C3 noop
    +  bind generic,pager,editor,index \C4 noop
    +  bind generic,pager,editor,index \C5 noop
    +  bind generic,pager,editor,index \C6 noop
    +  bind generic,pager,editor,index \C7 noop
    +  bind generic,pager,editor,index \C8 noop
    +  bind generic,pager,editor,index \C9 noop
    +  bind generic,pager,editor,index \C0 noop
    +  bind generic,pager,editor,index \C! noop
    +  bind generic,pager,editor,index \C$ noop
    +  bind generic,pager,editor,index \C% noop
    +  bind generic,pager,editor,index \C^ noop
    +  bind generic,pager,editor,index \C& noop
    +  bind generic,pager,editor,index \C* noop
    +  bind generic,pager,editor,index \C( noop
    +  bind generic,pager,editor,index \C) noop
     
    -bind generic,pager,editor,index <Esc>a noop
    -bind generic,pager,editor,index <Esc>b noop
    -bind generic,pager,editor,index <Esc>c noop
    -bind generic,pager,editor,index <Esc>d noop
    -bind generic,pager,editor,index <Esc>e noop
    -bind generic,pager,editor,index <Esc>f noop
    -bind generic,pager,editor,index <Esc>g noop
    -bind generic,pager,editor,index <Esc>h noop
    -bind generic,pager,editor,index <Esc>i noop
    -bind generic,pager,editor,index <Esc>j noop
    -bind generic,pager,editor,index <Esc>k noop
    -bind generic,pager,editor,index <Esc>l noop
    -bind generic,pager,editor,index <Esc>m noop
    -bind generic,pager,editor,index <Esc>n noop
    -bind generic,pager,editor,index <Esc>o noop
    -bind generic,pager,editor,index <Esc>p noop
    -bind generic,pager,editor,index <Esc>q noop
    -bind generic,pager,editor,index <Esc>r noop
    -bind generic,pager,editor,index <Esc>s noop
    -bind generic,pager,editor,index <Esc>t noop
    -bind generic,pager,editor,index <Esc>u noop
    -bind generic,pager,editor,index <Esc>v noop
    -bind generic,pager,editor,index <Esc>w noop
    -bind generic,pager,editor,index <Esc>x noop
    -bind generic,pager,editor,index <Esc>y noop
    -bind generic,pager,editor,index <Esc>z noop
    -bind generic,pager,editor,index <Esc>A noop
    -bind generic,pager,editor,index <Esc>B noop
    -bind generic,pager,editor,index <Esc>C noop
    -bind generic,pager,editor,index <Esc>D noop
    -bind generic,pager,editor,index <Esc>E noop
    -bind generic,pager,editor,index <Esc>F noop
    -bind generic,pager,editor,index <Esc>G noop
    -bind generic,pager,editor,index <Esc>H noop
    -bind generic,pager,editor,index <Esc>I noop
    -bind generic,pager,editor,index <Esc>J noop
    -bind generic,pager,editor,index <Esc>K noop
    -bind generic,pager,editor,index <Esc>L noop
    -bind generic,pager,editor,index <Esc>M noop
    -bind generic,pager,editor,index <Esc>N noop
    -bind generic,pager,editor,index <Esc>O noop
    -bind generic,pager,editor,index <Esc>P noop
    -bind generic,pager,editor,index <Esc>Q noop
    -bind generic,pager,editor,index <Esc>R noop
    -bind generic,pager,editor,index <Esc>S noop
    -bind generic,pager,editor,index <Esc>T noop
    -bind generic,pager,editor,index <Esc>U noop
    -bind generic,pager,editor,index <Esc>V noop
    -bind generic,pager,editor,index <Esc>W noop
    -bind generic,pager,editor,index <Esc>X noop
    -bind generic,pager,editor,index <Esc>Y noop
    -bind generic,pager,editor,index <Esc>Z noop
    +  bind generic,pager,editor,index <Esc>a noop
    +  bind generic,pager,editor,index <Esc>b noop
    +  bind generic,pager,editor,index <Esc>c noop
    +  bind generic,pager,editor,index <Esc>d noop
    +  bind generic,pager,editor,index <Esc>e noop
    +  bind generic,pager,editor,index <Esc>f noop
    +  bind generic,pager,editor,index <Esc>g noop
    +  bind generic,pager,editor,index <Esc>h noop
    +  bind generic,pager,editor,index <Esc>i noop
    +  bind generic,pager,editor,index <Esc>j noop
    +  bind generic,pager,editor,index <Esc>k noop
    +  bind generic,pager,editor,index <Esc>l noop
    +  bind generic,pager,editor,index <Esc>m noop
    +  bind generic,pager,editor,index <Esc>n noop
    +  bind generic,pager,editor,index <Esc>o noop
    +  bind generic,pager,editor,index <Esc>p noop
    +  bind generic,pager,editor,index <Esc>q noop
    +  bind generic,pager,editor,index <Esc>r noop
    +  bind generic,pager,editor,index <Esc>s noop
    +  bind generic,pager,editor,index <Esc>t noop
    +  bind generic,pager,editor,index <Esc>u noop
    +  bind generic,pager,editor,index <Esc>v noop
    +  bind generic,pager,editor,index <Esc>w noop
    +  bind generic,pager,editor,index <Esc>x noop
    +  bind generic,pager,editor,index <Esc>y noop
    +  bind generic,pager,editor,index <Esc>z noop
    +  bind generic,pager,editor,index <Esc>A noop
    +  bind generic,pager,editor,index <Esc>B noop
    +  bind generic,pager,editor,index <Esc>C noop
    +  bind generic,pager,editor,index <Esc>D noop
    +  bind generic,pager,editor,index <Esc>E noop
    +  bind generic,pager,editor,index <Esc>F noop
    +  bind generic,pager,editor,index <Esc>G noop
    +  bind generic,pager,editor,index <Esc>H noop
    +  bind generic,pager,editor,index <Esc>I noop
    +  bind generic,pager,editor,index <Esc>J noop
    +  bind generic,pager,editor,index <Esc>K noop
    +  bind generic,pager,editor,index <Esc>L noop
    +  bind generic,pager,editor,index <Esc>M noop
    +  bind generic,pager,editor,index <Esc>N noop
    +  bind generic,pager,editor,index <Esc>O noop
    +  bind generic,pager,editor,index <Esc>P noop
    +  bind generic,pager,editor,index <Esc>Q noop
    +  bind generic,pager,editor,index <Esc>R noop
    +  bind generic,pager,editor,index <Esc>S noop
    +  bind generic,pager,editor,index <Esc>T noop
    +  bind generic,pager,editor,index <Esc>U noop
    +  bind generic,pager,editor,index <Esc>V noop
    +  bind generic,pager,editor,index <Esc>W noop
    +  bind generic,pager,editor,index <Esc>X noop
    +  bind generic,pager,editor,index <Esc>Y noop
    +  bind generic,pager,editor,index <Esc>Z noop
     
    -bind generic,pager,editor,index <Esc><Tab>      noop
    -bind generic,pager,editor,index <Esc><Space>    noop
    -bind generic,pager,editor,index <Esc><PageUp>   noop
    -bind generic,pager,editor,index <Esc><PageDown> noop
    -bind generic,pager,editor,index <Esc><Home>     noop
    -bind generic,pager,editor,index <Esc><End>      noop
    -bind generic,pager,editor,index <Esc><Insert>   noop
    -bind generic,pager,editor,index <Esc><Delete>   noop
    -bind generic,pager,editor,index <Esc><Up>       noop
    -bind generic,pager,editor,index <Esc><Down>     noop
    -bind generic,pager,editor,index <Esc><Left>     noop
    -bind generic,pager,editor,index <Esc><Right>    noop
    -bind generic,pager,editor,index <Esc><Enter>    noop
    -bind generic,pager,editor,index <Esc><Return>   noop
    +  bind generic,pager,editor,index <Esc><Tab>      noop
    +  bind generic,pager,editor,index <Esc><Space>    noop
    +  bind generic,pager,editor,index <Esc><PageUp>   noop
    +  bind generic,pager,editor,index <Esc><PageDown> noop
    +  bind generic,pager,editor,index <Esc><Home>     noop
    +  bind generic,pager,editor,index <Esc><End>      noop
    +  bind generic,pager,editor,index <Esc><Insert>   noop
    +  bind generic,pager,editor,index <Esc><Delete>   noop
    +  bind generic,pager,editor,index <Esc><Up>       noop
    +  bind generic,pager,editor,index <Esc><Down>     noop
    +  bind generic,pager,editor,index <Esc><Left>     noop
    +  bind generic,pager,editor,index <Esc><Right>    noop
    +  bind generic,pager,editor,index <Esc><Enter>    noop
    +  bind generic,pager,editor,index <Esc><Return>   noop
     
    -bind generic,pager,editor,index <Esc>1 noop
    -bind generic,pager,editor,index <Esc>2 noop
    -bind generic,pager,editor,index <Esc>3 noop
    -bind generic,pager,editor,index <Esc>4 noop
    -bind generic,pager,editor,index <Esc>5 noop
    -bind generic,pager,editor,index <Esc>6 noop
    -bind generic,pager,editor,index <Esc>7 noop
    -bind generic,pager,editor,index <Esc>8 noop
    -bind generic,pager,editor,index <Esc>9 noop
    -bind generic,pager,editor,index <Esc>0 noop
    -bind generic,pager,editor,index <Esc>! noop
    -bind generic,pager,editor,index <Esc>@ noop
    -bind generic,pager,editor,index <Esc>$ noop
    -bind generic,pager,editor,index <Esc>% noop
    -bind generic,pager,editor,index <Esc>^ noop
    -bind generic,pager,editor,index <Esc>& noop
    -bind generic,pager,editor,index <Esc>* noop
    -bind generic,pager,editor,index <Esc>( noop
    -bind generic,pager,editor,index <Esc>) noop
    +  bind generic,pager,editor,index <Esc>1 noop
    +  bind generic,pager,editor,index <Esc>2 noop
    +  bind generic,pager,editor,index <Esc>3 noop
    +  bind generic,pager,editor,index <Esc>4 noop
    +  bind generic,pager,editor,index <Esc>5 noop
    +  bind generic,pager,editor,index <Esc>6 noop
    +  bind generic,pager,editor,index <Esc>7 noop
    +  bind generic,pager,editor,index <Esc>8 noop
    +  bind generic,pager,editor,index <Esc>9 noop
    +  bind generic,pager,editor,index <Esc>0 noop
    +  bind generic,pager,editor,index <Esc>! noop
    +  bind generic,pager,editor,index <Esc>@ noop
    +  bind generic,pager,editor,index <Esc>$ noop
    +  bind generic,pager,editor,index <Esc>% noop
    +  bind generic,pager,editor,index <Esc>^ noop
    +  bind generic,pager,editor,index <Esc>& noop
    +  bind generic,pager,editor,index <Esc>* noop
    +  bind generic,pager,editor,index <Esc>( noop
    +  bind generic,pager,editor,index <Esc>) noop
     
    @@ -868,39 +875,39 @@ bind generic,pager,editor,index <Esc>) noop

    Quit Neomutt

    -
    bind index,pager,compose Q exit
    -macro index q "<shell-escape>if [ $TMUX ]; then tmux detach; fi<enter>"
    +
      bind index,pager,compose Q exit
    +  macro index q "<shell-escape>if [ $TMUX ]; then tmux detach; fi<enter>"
     
    -
    -

    Generic

    -
    +
    +

    Generic

    +
    -
    bind generic Q exit
    +
      bind generic Q exit
     
    -bind generic <Return> select-entry
    -bind generic l select-entry
    +  bind generic <Return> select-entry
    +  bind generic l select-entry
     
    -bind generic,index k previous-entry
    -bind generic,index j next-entry
    +  bind generic,index k previous-entry
    +  bind generic,index j next-entry
     
    -bind generic,index 0 first-entry
    -bind generic,index $ last-entry
    +  bind generic,index 0 first-entry
    +  bind generic,index $ last-entry
     
    -bind generic,index \031 previous-entry # Mouse wheel
    -bind generic,index \005 next-entry # Mouse wheel
    +  bind generic,index \031 previous-entry # Mouse wheel
    +  bind generic,index \005 next-entry # Mouse wheel
     
    -bind generic,index gg first-entry
    -bind generic,index G last-entry
    +  bind generic,index gg first-entry
    +  bind generic,index G last-entry
     
    -bind generic,index,pager \Cu half-up
    -bind generic,index,pager \Cd half-down
    +  bind generic,index,pager \Cu half-up
    +  bind generic,index,pager \Cd half-down
     
    -bind generic,index,pager \Ce next-line
    -bind generic,index,pager \Cy previous-line
    +  bind generic,index,pager \Ce next-line
    +  bind generic,index,pager \Cy previous-line
     
    @@ -910,47 +917,47 @@ bind generic,index,pager \Cy previous-line

    Index and Pager

    -
    bind pager k  previous-line
    -bind pager j  next-line
    +
      bind pager k  previous-line
    +  bind pager j  next-line
     
    -bind index <space> collapse-thread
    +  bind index <space> collapse-thread
     
    -bind index,pager K previous-entry
    -bind index,pager J next-entry
    +  bind index,pager K previous-entry
    +  bind index,pager J next-entry
     
    -bind index l  display-message
    -bind index <Return> display-message
    -bind pager l view-attachments
    +  bind index l  display-message
    +  bind index <Return> display-message
    +  bind pager l view-attachments
     
    -bind pager gg top
    -bind pager 0 top
    +  bind pager gg top
    +  bind pager 0 top
     
    -bind pager G bottom
    -bind pager $ bottom
    +  bind pager G bottom
    +  bind pager $ bottom
     
    -macro index h "<change-folder>?" "Go back to the list of mailboxes"
    -bind pager h exit
    -bind pager q exit
    +  macro index h "<change-folder>?" "Go back to the list of mailboxes"
    +  bind pager h exit
    +  bind pager q exit
     
    -macro index c "<change-folder>?<toggle-mailboxes>" "change folder"
    +  macro index c "<change-folder>?<toggle-mailboxes>" "change folder"
     
    -bind index,pager u undelete-message
    +  bind index,pager u undelete-message
     
    -bind index,pager P print-message
    +  bind index,pager P print-message
     
    -# Compose a new email (not a reply) to the sender
    -bind index,pager @ compose-to-sender
    +  # Compose a new email (not a reply) to the sender
    +  bind index,pager @ compose-to-sender
     
    -# Marl All message as read
    -macro index \Cr \
    -    "<tag-pattern>~N<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" \
    -    "mark all new as read"
    +  # Marl All message as read
    +  macro index \Cr \
    +      "<tag-pattern>~N<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" \
    +      "mark all new as read"
     
    -
    bind index za collapse-thread
    -bind index zA collapse-all # Missing :folddisable/foldenable
    +
      bind index za collapse-thread
    +  bind index zA collapse-all # Missing :folddisable/foldenable
     
    @@ -959,13 +966,13 @@ bind index zA collapse-all #
    -
    bind index,pager p recall-message
    -bind index,pager m mail
    -bind index,pager M resend-message
    -bind index,pager r reply
    -bind index,pager R group-reply
    -bind index,pager b bounce-message
    -bind index,pager f forward-message
    +
      bind index,pager p recall-message
    +  bind index,pager m mail
    +  bind index,pager M resend-message
    +  bind index,pager r reply
    +  bind index,pager R group-reply
    +  bind index,pager b bounce-message
    +  bind index,pager f forward-message
     
    @@ -973,7 +980,7 @@ bind index,pager f forward-message Sync Mailbox

    -
    bind index,pager s sync-mailbox
    +
      bind index,pager s sync-mailbox
     
    @@ -981,8 +988,8 @@ Sync Mailbox Sync email

    -
    macro index,pager o "<shell-escape>$HOME/.config/neomutt/bin/get_new_mail.sh<enter>"
    -macro index,pager O "<shell-escape>$HOME/.config/neomutt/bin/get_new_mail.sh -a<enter>"
    +
      macro index,pager o "<shell-escape>$HOME/.config/neomutt/bin/get_new_mail.sh<enter>"
    +  macro index,pager O "<shell-escape>$HOME/.config/neomutt/bin/get_new_mail.sh -a<enter>"
     
    @@ -990,7 +997,7 @@ macro index,pager O "<shell-escape>$HOME/.config/ Make quick html view macro

    -
    macro index,pager H "<view-attachments><search>html<enter><view-mailcap><exit>"
    +
      macro index,pager H "<view-attachments><search>html<enter><view-mailcap><exit>"
     
    @@ -998,12 +1005,12 @@ Make quick html view macro Open mail with Vim

    -
    macro index,pager V "<view-attachments><search>plain<enter><view-mailcap><exit>"
    +
      macro index,pager V "<view-attachments><search>plain<enter><view-mailcap><exit>"
     
    -
    # bind index,pager U toggle-new
    +
      # bind index,pager U toggle-new
     
    @@ -1011,8 +1018,8 @@ Open mail with Vim Labels

    -
    bind index,pager y edit-label
    -bind index,pager Y modify-labels
    +
      bind index,pager y edit-label
    +  bind index,pager Y modify-labels
     
    @@ -1022,8 +1029,8 @@ bind index,pager Y modify-labels

    Limit

    -
    bind index L limit
    -macro index a <limit>all<enter>
    +
      bind index L limit
    +  macro index a <limit>all<enter>
     
    @@ -1033,27 +1040,27 @@ macro index a <limit>all<enter>

    Search

    -
    bind generic,index,pager / search
    +
      bind generic,index,pager / search
     
    -bind index,pager n search-next
    -bind index,pager N search-opposite
    +  bind index,pager n search-next
    +  bind index,pager N search-opposite
     
    -
    -

    Attachments

    -
    +
    +

    Attachments

    +
    -
    bind attach l view-attach
    +
      bind attach l view-attach
     
    -bind attach h exit
    -bind attach q exit
    +  bind attach h exit
    +  bind attach q exit
     
    -bind attach <return> view-mailcap
    +  bind attach <return> view-mailcap
     
    -macro attach W <save-entry><kill-line>~/Downloads/<enter>y "Save entry"
    +  macro attach W <save-entry><kill-line>~/Downloads/<enter>y "Save entry"
     
    @@ -1063,11 +1070,11 @@ macro attach W <save-entry><kill-line>~/Downloads/<enter>y Compose
    -
    bind compose p postpone-message
    +
      bind compose p postpone-message
     
    -bind compose R rename-attachment
    +  bind compose R rename-attachment
     
    -bind compose a attach-file
    +  bind compose a attach-file
     
    @@ -1075,7 +1082,7 @@ bind compose a attach-file Open another instance of neomutt in readonly mode while composing

    -
    macro compose M "<shell-escape>$TERMINAL -e \"neomutt -R\"<enter>"
    +
      macro compose M "<shell-escape>$TERMINAL -e \"neomutt -R\"<enter>"
     
    @@ -1083,7 +1090,7 @@ Open another instance of neomutt in readonly mode while composing Attach multiple files using ranger

    -
    macro compose A "<shell-escape>bash $HOME/.config/neomutt/bin/rangerpick<enter><enter-command>source /tmp/rangerpick<enter><shell-escape>bash $HOME/.config/neomutt/bin/rangerpick clean<enter>" "Attach with Ranger"
    +
      macro compose A "<shell-escape>bash $HOME/.config/neomutt/bin/rangerpick<enter><enter-command>source /tmp/rangerpick<enter><shell-escape>bash $HOME/.config/neomutt/bin/rangerpick clean<enter>" "Attach with Ranger"
     
    @@ -1091,7 +1098,7 @@ Attach multiple files using ranger Attach file by drooping from GUI

    -
    macro compose B "<shell-escape>bash $HOME/.config/neomutt/bin/rangerpick dragon<enter><enter-command>source /tmp/rangerpick<enter><shell-escape>bash $HOME/.config/neomutt/bin/rangerpick clean<enter>" "Attach with Ranger"
    +
      macro compose B "<shell-escape>bash $HOME/.config/neomutt/bin/rangerpick dragon<enter><enter-command>source /tmp/rangerpick<enter><shell-escape>bash $HOME/.config/neomutt/bin/rangerpick clean<enter>" "Attach with Ranger"
     
    @@ -1100,14 +1107,14 @@ Attach file by drooping from GUI
    Attach with Ranger Script
    -
    tmpfile=/tmp/rangerpick
    -if [ -z "$1" ]; then
    -    ranger --choosefiles $tmpfile && sed -i 's/\s/\\ /g' $tmpfile && echo "$(awk 'BEGIN {printf "%s", "push "} {printf "%s", "<attach-file>"$0"<enter>"}'  $tmpfile)" > $tmpfile
    -elif [ $1 == "dragon" ]; then
    -    dragon-drag-and-drop --target --print-path --keep > $tmpfile && sed -i 's/\s/\\ /g' $tmpfile && echo "$(awk 'BEGIN {printf "%s", "push "} {printf "%s", "<attach-file>"$0"<enter>"}' $tmpfile)" > $tmpfile
    -elif [ $1 == "clean" ]; then
    -    ls $tmpfile
    -fi
    +
      tmpfile=/tmp/rangerpick
    +  if [ -z "$1" ]; then
    +      ranger --choosefiles $tmpfile && sed -i 's/\s/\\ /g' $tmpfile && echo "$(awk 'BEGIN {printf "%s", "push "} {printf "%s", "<attach-file>"$0"<enter>"}'  $tmpfile)" > $tmpfile
    +  elif [ $1 == "dragon" ]; then
    +      dragon-drag-and-drop --target --print-path --keep > $tmpfile && sed -i 's/\s/\\ /g' $tmpfile && echo "$(awk 'BEGIN {printf "%s", "push "} {printf "%s", "<attach-file>"$0"<enter>"}' $tmpfile)" > $tmpfile
    +  elif [ $1 == "clean" ]; then
    +      ls $tmpfile
    +  fi
     
    @@ -1120,7 +1127,7 @@ Attach file by drooping from GUI Write html emails using markdown

    -
    # macro compose M "F pandoc -s -f markdown -t html \ny^T^Utext/html; charset=us-ascii\n"
    +
      # macro compose M "F pandoc -s -f markdown -t html \ny^T^Utext/html; charset=us-ascii\n"
     
    @@ -1131,25 +1138,25 @@ Write html emails using markdown

    Browser

    -
    bind browser l select-entry
    -macro browser h "<top-page><select-entry>"
    +
      bind browser l select-entry
    +  macro browser h "<top-page><select-entry>"
     
    -bind browser t tag-entry
    +  bind browser t tag-entry
     
    -bind browser q exit
    +  bind browser q exit
     
    -
    -

    Generic

    -
    +
    +

    Generic

    +

    Enter Command

    -
    bind generic,index,pager : enter-command
    +
      bind generic,index,pager : enter-command
     
    @@ -1159,22 +1166,22 @@ Enter Command

    Copy and move mails

    -
    macro index C "<copy-message>?<toggle-mailboxes>" "copy a message to a mailbox"
    -macro index M "<save-message>?<toggle-mailboxes>" "move a message to a mailbox"
    +
      macro index C "<copy-message>?<toggle-mailboxes>" "copy a message to a mailbox"
    +  macro index M "<save-message>?<toggle-mailboxes>" "move a message to a mailbox"
     
    -
    -

    Sidebar

    -
    +
    +

    Sidebar

    +
    -
    bind index,pager \Cp sidebar-prev
    -bind index,pager \Cn sidebar-next
    -bind index,pager \Co sidebar-open
    +
      bind index,pager \Cp sidebar-prev
    +  bind index,pager \Cn sidebar-next
    +  bind index,pager \Co sidebar-open
     
    -bind index,pager \Ch sidebar-toggle-visible
    +  bind index,pager \Ch sidebar-toggle-visible
     
    @@ -1184,7 +1191,7 @@ bind index,pager \Ch sidebar-toggle-visible

    Reload Configuration

    -
    macro generic,index,pager,editor ,<Space> ":source ~/.config/neomutt/neomuttrc\n" "Reload mutt's configuration file"
    +
      macro generic,index,pager,editor ,<Space> ":source ~/.config/neomutt/neomuttrc\n" "Reload mutt's configuration file"
     
    @@ -1197,13 +1204,13 @@ bind index,pager \Ch sidebar-toggle-visible Use urlview to extract urls from the mail.

    -
    macro attach,compose,index,pager \cw "\
    -  :set my_tmp_pipe_decode=\$pipe_decode\n\
    -  :set pipe_decode\n\
    -  <pipe-message>urlview\n\
    -  :set pipe_decode=\$my_tmp_pipe_decode\n\
    -  :unset my_tmp_pipe_decode\n" \
    -  'call urlview to extract URLs out of a message'
    +
      macro attach,compose,index,pager \cw "\
    +    :set my_tmp_pipe_decode=\$pipe_decode\n\
    +    :set pipe_decode\n\
    +    <pipe-message>urlview\n\
    +    :set pipe_decode=\$my_tmp_pipe_decode\n\
    +    :unset my_tmp_pipe_decode\n" \
    +    'call urlview to extract URLs out of a message'
     
    @@ -1213,10 +1220,10 @@ Use urlview to extract urls from the mail.

    Searching using Mu

    -
    macro index,pager \Cf "<shell-escape>mu find --clearlinks --format=links --linksdir=~/.mail/search " \
    -                         "mu find"
    -macro index,pager gf "<change-folder-readonly>~/.mail/search<enter>" \
    -                         "mu find results"
    +
      macro index,pager \Cf "<shell-escape>mu find --clearlinks --format=links --linksdir=~/.mail/search " \
    +                           "mu find"
    +  macro index,pager gf "<change-folder-readonly>~/.mail/search<enter>" \
    +                           "mu find results"
     
    @@ -1231,7 +1238,7 @@ macro index,pager gf "<change-folder-readonly>~/.

    -
    macro index,pager S "<pipe-message>$HOME/.config/neomutt/bin/mutt-save-org-link.py\n"
    +
      macro index,pager S "<pipe-message>$HOME/.config/neomutt/bin/mutt-save-org-link.py\n"
     
    @@ -1240,27 +1247,27 @@ macro index,pager gf "<change-folder-readonly>~/.
    Link mail to orgmode - Script
    -
    import sys
    -import email
    -import subprocess
    -import urllib.parse
    +
      import sys
    +  import email
    +  import subprocess
    +  import urllib.parse
     
    -# Parse the email from standard input
    -message_bytes = sys.stdin.buffer.read()
    -message = email.message_from_bytes(message_bytes)
    +  # Parse the email from standard input
    +  message_bytes = sys.stdin.buffer.read()
    +  message = email.message_from_bytes(message_bytes)
     
    -# Grab the relevant message headers
    -message_id = urllib.parse.quote(message['message-id'].strip()[1:-1])
    -subject = message['subject'].replace('[', '{').replace(']', '}').replace('\n', ' ')
    -subject = (subject[:75] + '..') if len(subject) > 75 else subject
    +  # Grab the relevant message headers
    +  message_id = urllib.parse.quote(message['message-id'].strip()[1:-1])
    +  subject = message['subject'].replace('[', '{').replace(']', '}').replace('\n', ' ')
    +  subject = (subject[:75] + '..') if len(subject) > 75 else subject
     
    -# Ask emacsclient to save a link to the message
    -p = subprocess.Popen([
    -    'emacsclient',
    -    f'org-protocol://capture?template=pm&url={message_id}&title={subject}'
    -])
    +  # Ask emacsclient to save a link to the message
    +  p = subprocess.Popen([
    +      'emacsclient',
    +      f'org-protocol://capture?template=pm&url={message_id}&title={subject}'
    +  ])
     
    -p.wait()
    +  p.wait()
     
    @@ -1276,23 +1283,23 @@ p.wait()

    Basic colors

    -
    color normal      color021       color000
    -color error       color021       color000
    -color tilde       color021       color000
    -color message     color021       color000
    -color markers     color021       color000
    -color attachment  color021       color000
    -color search      color000       color003
    -color status      color016       color000
    -color indicator   color000       color021
    -color tree        color021       color000
    -color progress    color000       color021
    +
      color normal      color021       color000
    +  color error       color021       color000
    +  color tilde       color021       color000
    +  color message     color021       color000
    +  color markers     color021       color000
    +  color attachment  color021       color000
    +  color search      color000       color003
    +  color status      color016       color000
    +  color indicator   color000       color021
    +  color tree        color021       color000
    +  color progress    color000       color021
     
    -# basic monocolor screen
    -mono  bold      bold
    -mono  underline underline
    -mono  indicator reverse
    -mono  error     bold
    +  # basic monocolor screen
    +  mono  bold      bold
    +  mono  underline underline
    +  mono  indicator reverse
    +  mono  error     bold
     
    @@ -1302,43 +1309,43 @@ mono error bold

    Index

    -
    color index color021       color000 "~A"      # All messages
    -color index brightcolor006 color000 "~N"      # New messages
    -color index color020       color000 "~O"      # Old messages
    -color index color020       color000 "~Q"      # messages that have been replied to
    -color index color021       color000 "~R"      # read messages
    -color index color006       color000 "~U"      # unread messages
    -color index color021       color000 "~R~p!~F" # messages to me
    -color index brightcolor006 color000 "~N~p!~F" # new messages to me
    -color index brightcolor006 color000 "~U~p!~F" # unread messages to me
    -color index color005       color000 "~F"      # flagged messages
    -color index color005       color000 "~F~p"    # flagged messages to me
    -color index brightcolor006 color000 "~N~F"    # new flagged messages
    -color index brightcolor006 color000 "~N~F~p"  # new flagged messages to me
    -color index brightcolor006 color000 "~U~F~p"  # new flagged messages to me
    -color index brightcolor000 color001 "~D"      # deleted messages
    +
      color index color021       color000 "~A"      # All messages
    +  color index brightcolor006 color000 "~N"      # New messages
    +  color index color020       color000 "~O"      # Old messages
    +  color index color020       color000 "~Q"      # messages that have been replied to
    +  color index color021       color000 "~R"      # read messages
    +  color index color006       color000 "~U"      # unread messages
    +  color index color021       color000 "~R~p!~F" # messages to me
    +  color index brightcolor006 color000 "~N~p!~F" # new messages to me
    +  color index brightcolor006 color000 "~U~p!~F" # unread messages to me
    +  color index color005       color000 "~F"      # flagged messages
    +  color index color005       color000 "~F~p"    # flagged messages to me
    +  color index brightcolor006 color000 "~N~F"    # new flagged messages
    +  color index brightcolor006 color000 "~N~F~p"  # new flagged messages to me
    +  color index brightcolor006 color000 "~U~F~p"  # new flagged messages to me
    +  color index brightcolor000 color001 "~D"      # deleted messages
     
    -color index brightcolor021 color019 "~v~(!~N)"    # collapsed thread with no unread
    -color index brightcolor006 color019 "~v~(~N)"     # collapsed thread with some unread
    -color index brightcolor006 color019 "~N~v~(~N)"   # collapsed thread with unread parent
    -color index brightcolor005 color019 "~v~(~F)!~N"  # collapsed thread with flagged, no unread
    -color index brightcolor006 color019 "~v~(~F~N)"   # collapsed thread with some unread & flagged
    -color index brightcolor006 color019 "~N~v~(~F~N)" # collapsed thread with unread parent & flagged
    -color index brightcolor005 color019 "~N~v~(~F)"   # collapsed thread with unread parent, no unread inside, but some flagged
    -color index brightcolor000 color001 "~v~(~D)"     # thread with deleted (doesn't differentiate between all or partial)
    +  color index brightcolor021 color019 "~v~(!~N)"    # collapsed thread with no unread
    +  color index brightcolor006 color019 "~v~(~N)"     # collapsed thread with some unread
    +  color index brightcolor006 color019 "~N~v~(~N)"   # collapsed thread with unread parent
    +  color index brightcolor005 color019 "~v~(~F)!~N"  # collapsed thread with flagged, no unread
    +  color index brightcolor006 color019 "~v~(~F~N)"   # collapsed thread with some unread & flagged
    +  color index brightcolor006 color019 "~N~v~(~F~N)" # collapsed thread with unread parent & flagged
    +  color index brightcolor005 color019 "~N~v~(~F)"   # collapsed thread with unread parent, no unread inside, but some flagged
    +  color index brightcolor000 color001 "~v~(~D)"     # thread with deleted (doesn't differentiate between all or partial)
     
    -
    -

    Sidebar

    -
    +
    +

    Sidebar

    +
    -
    color sidebar_indicator color000       color021  # Mailbox is open
    -color sidebar_highlight color000       color003  # Mailbox is highlighted
    -color sidebar_new       brightcolor006 color000  # Mailbox contains new mail
    -color sidebar_ordinary  color021       color000  # Mailbox contains new mail
    +
     color sidebar_indicator color000       color021  # Mailbox is open
    + color sidebar_highlight color000       color003  # Mailbox is highlighted
    + color sidebar_new       brightcolor006 color000  # Mailbox contains new mail
    + color sidebar_ordinary  color021       color000  # Mailbox contains new mail
     
    @@ -1348,37 +1355,37 @@ color sidebar_ordinary color021 color000 Message headers
    -
    color hdrdefault color006       color000
    -color header     brightcolor006 color000 "^(From)"
    -color header     brightcolor004 color000 "^(Subject)"
    +
      color hdrdefault color006       color000
    +  color header     brightcolor006 color000 "^(From)"
    +  color header     brightcolor004 color000 "^(Subject)"
     
    -
    -

    Attachments

    -
    +
    +

    Attachments

    +
    -
    # Color if the attachment is autoviewed
    -color   attach_headers     brightgreen     default    "Autoview"
    -# Color only the brackets around the headers
    -color   attach_headers     brightyellow    default    "^\\[--"
    -color   attach_headers     brightyellow    default    "--]$"
    -# Color the mime type and the size
    -color   attach_headers     green           default    "Type: [a-z]+/[a-z0-9\-]+"
    -color   attach_headers     green           default    "Size: [0-9\.]+[KM]"
    -# Color GPGME signature checks
    -color   attach_headers     brightgreen     default    "Good signature from.*"
    -color   attach_headers     brightred       default    "Bad signature from.*"
    -color   attach_headers     brightred       default    "BAD signature from.*"
    -color   attach_headers     brightred       default    "Note: This key has expired!"
    -color   attach_headers     brightmagenta   default    "Problem signature from.*"
    -color   attach_headers     brightmagenta   default    "WARNING: This key is not certified with a trusted signature!"
    -color   attach_headers     brightmagenta   default    "         There is no indication that the signature belongs to the owner."
    -color   attach_headers     brightmagenta   default    "can't handle these multiple signatures"
    -color   attach_headers     brightmagenta   default    "signature verification suppressed"
    -color   attach_headers     brightmagenta   default    "invalid node with packet of type"
    +
      # Color if the attachment is autoviewed
    +  color   attach_headers     brightgreen     default    "Autoview"
    +  # Color only the brackets around the headers
    +  color   attach_headers     brightyellow    default    "^\\[--"
    +  color   attach_headers     brightyellow    default    "--]$"
    +  # Color the mime type and the size
    +  color   attach_headers     green           default    "Type: [a-z]+/[a-z0-9\-]+"
    +  color   attach_headers     green           default    "Size: [0-9\.]+[KM]"
    +  # Color GPGME signature checks
    +  color   attach_headers     brightgreen     default    "Good signature from.*"
    +  color   attach_headers     brightred       default    "Bad signature from.*"
    +  color   attach_headers     brightred       default    "BAD signature from.*"
    +  color   attach_headers     brightred       default    "Note: This key has expired!"
    +  color   attach_headers     brightmagenta   default    "Problem signature from.*"
    +  color   attach_headers     brightmagenta   default    "WARNING: This key is not certified with a trusted signature!"
    +  color   attach_headers     brightmagenta   default    "         There is no indication that the signature belongs to the owner."
    +  color   attach_headers     brightmagenta   default    "can't handle these multiple signatures"
    +  color   attach_headers     brightmagenta   default    "signature verification suppressed"
    +  color   attach_headers     brightmagenta   default    "invalid node with packet of type"
     
    @@ -1387,16 +1394,16 @@ color attach_headers brightmagenta default "

    Body

    -
    color quoted        color002       color000
    -color quoted1       color003       color000
    -color quoted2       color004       color000
    -color quoted3       color005       color000
    -color quoted4       color006       color000
    +
      color quoted        color002       color000
    +  color quoted1       color003       color000
    +  color quoted2       color004       color000
    +  color quoted3       color005       color000
    +  color quoted4       color006       color000
     
    -color signature     color021       color000
    -color bold          brightcolor021 color000
    -color underline     brightcolor021 color000
    -color normal        color021       color000
    +  color signature     color021       color000
    +  color bold          brightcolor021 color000
    +  color underline     brightcolor021 color000
    +  color normal        color021       color000
     
    @@ -1406,11 +1413,11 @@ color normal color021 color000

    PGP

    -
    color body  color001 color000         "(BAD signature)"
    -color body  color002 color000         "(Good signature)"
    -color body  color002 color000         "^gpg: Good signature .*"
    -color body  color002 color000         "^gpg: "
    -color body  color002 color000         "^gpg: BAD signature from.*"
    +
      color body  color001 color000         "(BAD signature)"
    +  color body  color002 color000         "(Good signature)"
    +  color body  color002 color000         "^gpg: Good signature .*"
    +  color body  color002 color000         "^gpg: "
    +  color body  color002 color000         "^gpg: BAD signature from.*"
     
    @@ -1420,7 +1427,7 @@ color body color002 color000 "^gpg: BAD signat

    Urls

    -
    color body color006 color000         "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
    +
      color body color006 color000         "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
     
    @@ -1430,7 +1437,7 @@ color body color002 color000 "^gpg: BAD signat

    Emails

    -
    color body color006 color000 "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])"
    +
      color body color006 color000 "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])"
     
    @@ -1441,9 +1448,9 @@ color body color002 color000 "^gpg: BAD signat

    Contacts with Mu

    -
    set query_command="mu cfind '%s' -o mutt-ab"
    +
      set query_command="mu cfind '%s' -o mutt-ab"
     
    -bind editor <Tab> complete-query
    +  bind editor <Tab> complete-query
     
    @@ -1453,13 +1460,13 @@ bind editor <Tab> complete-query

    Paths

    -
    set folder           = ~/.mail                         # mail location
    -set alias_file       = ~/.config/neomutt/alias         # where to store aliases
    -set header_cache     = ~/.config/neomutt/cache/headers # where to store headers
    -set message_cachedir = ~/.config/neomutt/cache/bodies  # where to store bodies
    -set certificate_file = ~/.config/neomutt/certificates  # where to store certs
    -set mailcap_path     = ~/.config/neomutt/mailcap       # entries for filetypes
    -set tmpdir           = ~/.config/neomutt/temp          # where to keep temp files
    +
      set folder           = ~/.mail                         # mail location
    +  set alias_file       = ~/.config/neomutt/alias         # where to store aliases
    +  set header_cache     = ~/.config/neomutt/cache/headers # where to store headers
    +  set message_cachedir = ~/.config/neomutt/cache/bodies  # where to store bodies
    +  set certificate_file = ~/.config/neomutt/certificates  # where to store certs
    +  set mailcap_path     = ~/.config/neomutt/mailcap       # entries for filetypes
    +  set tmpdir           = ~/.config/neomutt/temp          # where to keep temp files
     
    @@ -1473,7 +1480,7 @@ bind editor <Tab> complete-query

    -
    # set print_command="/usr/bin/muttprint %s -p ctb110c1u"
    +
      # set print_command="/usr/bin/muttprint %s -p ctb110c1u"
     
    @@ -1483,19 +1490,19 @@ bind editor <Tab> complete-query

    Accounts

    -
    set spoolfile = "+gmail/Inbox" # Default inbox
    -set realname = "Dehaeze Thomas"
    -set from = "dehaeze.thomas@gmail.com"
    +
      set spoolfile = "+gmail/Inbox" # Default inbox
    +  set realname = "Dehaeze Thomas"
    +  set from = "dehaeze.thomas@gmail.com"
     
    -folder-hook gmail/* source ~/.config/neomutt/accounts/gmail
    -folder-hook esrf/*  source ~/.config/neomutt/accounts/esrf
    -folder-hook ulg/*   source ~/.config/neomutt/accounts/ulg
    -folder-hook uliege/*   source ~/.config/neomutt/accounts/uliege
    +  folder-hook gmail/* source ~/.config/neomutt/accounts/gmail
    +  folder-hook esrf/*  source ~/.config/neomutt/accounts/esrf
    +  folder-hook ulg/*   source ~/.config/neomutt/accounts/ulg
    +  folder-hook uliege/*   source ~/.config/neomutt/accounts/uliege
     
    -macro index,pager gl "<change-folder>+uliege/Inbox<enter>" "go to inbox"
    -macro index,pager gu "<change-folder>+ulg/Inbox<enter>" "go to inbox"
    -macro index,pager ge "<change-folder>+esrf/Inbox<enter>" "go to inbox"
    -macro index,pager gm "<change-folder>+gmail/Inbox<enter>" "go to inbox"
    +  macro index,pager gl "<change-folder>+uliege/Inbox<enter>" "go to inbox"
    +  macro index,pager gu "<change-folder>+ulg/Inbox<enter>" "go to inbox"
    +  macro index,pager ge "<change-folder>+esrf/Inbox<enter>" "go to inbox"
    +  macro index,pager gm "<change-folder>+gmail/Inbox<enter>" "go to inbox"
     
    @@ -1504,37 +1511,37 @@ macro index,pager gm "<change-folder>+gmail/Inbox

    Gmail

    -
    -
    Configuration
    -
    +
    +
    Configuration
    +
    -
    set from     = "dehaeze.thomas@gmail.com"
    -set sendmail = "~/.config/neomutt/bin/send_mail.sh gmail"
    +
      set from     = "dehaeze.thomas@gmail.com"
    +  set sendmail = "~/.config/neomutt/bin/send_mail.sh gmail"
     
    -# Other special folders.
    -set mbox      = "+gmail/Archive"
    -unset record # Don't copy send message to Sent folder: Gmail does that for us
    -set postponed = "+gmail/Drafts"
    +  # Other special folders.
    +  set mbox      = "+gmail/Archive"
    +  unset record # Don't copy send message to Sent folder: Gmail does that for us
    +  set postponed = "+gmail/Drafts"
     
    -set signature = "~/.config/neomutt/accounts/gmail.signature"
    +  set signature = "~/.config/neomutt/accounts/gmail.signature"
     
    -macro index,pager d \
    -  "<save-message>+gmail/Archive<enter>" \
    -  "Move message to the Archive"
    +  macro index,pager d \
    +    "<save-message>+gmail/Archive<enter>" \
    +    "Move message to the Archive"
     
    -macro index,pager D \
    -  "<save-message>+gmail/Trash<enter>" \
    -  "Move message to the Trash"
    +  macro index,pager D \
    +    "<save-message>+gmail/Trash<enter>" \
    +    "Move message to the Trash"
     
    -
    -
    Signature
    -
    +
    +
    Signature
    +
    -
    Thomas Dehaeze
    +
      Thomas Dehaeze
     

    @@ -1552,37 +1559,37 @@ This empty code block is used to add a new line after signature

    ESRF

    -
    -
    Configuration
    -
    +
    +
    Configuration
    +
    -
    set from     = "thomas.dehaeze@esrf.fr"
    -set sendmail = "~/.config/neomutt/bin/send_mail.sh esrf"
    +
      set from     = "thomas.dehaeze@esrf.fr"
    +  set sendmail = "~/.config/neomutt/bin/send_mail.sh esrf"
     
    -# Other special folders.
    -set mbox      = "+esrf/Archive"
    -set record    = "+esrf/Sent"
    -set postponed = "+esrf/Drafts"
    +  # Other special folders.
    +  set mbox      = "+esrf/Archive"
    +  set record    = "+esrf/Sent"
    +  set postponed = "+esrf/Drafts"
     
    -set signature = "~/.config/neomutt/accounts/esrf.signature"
    +  set signature = "~/.config/neomutt/accounts/esrf.signature"
     
    -macro index,pager d \
    -  "<save-message>+esrf/Archive<enter>" \
    -  "Move message to the Archive"
    +  macro index,pager d \
    +    "<save-message>+esrf/Archive<enter>" \
    +    "Move message to the Archive"
     
    -macro index,pager D \
    -  "<save-message>+esrf/Trash<enter>" \
    -  "Move message to the Trash"
    +  macro index,pager D \
    +    "<save-message>+esrf/Trash<enter>" \
    +    "Move message to the Trash"
     
    -
    -
    Signature
    -
    +
    +
    Signature
    +
    -
    Thomas Dehaeze
    +
      Thomas Dehaeze
     

    @@ -1600,37 +1607,37 @@ This empty code block is used to add a new line after signature

    ULG

    -
    -
    Configuration
    -
    +
    +
    Configuration
    +
    -
    set from     = "thomas.dehaeze@doct.uliege.be"
    -set sendmail = "~/.config/neomutt/bin/send_mail.sh ulg"
    +
      set from     = "thomas.dehaeze@doct.uliege.be"
    +  set sendmail = "~/.config/neomutt/bin/send_mail.sh ulg"
     
    -# Other special folders.
    -set mbox      = "+ulg/Archive"
    -set record    = "+ulg/Sent"
    -set postponed = "+ulg/Drafts"
    +  # Other special folders.
    +  set mbox      = "+ulg/Archive"
    +  set record    = "+ulg/Sent"
    +  set postponed = "+ulg/Drafts"
     
    -set signature = "~/.config/neomutt/accounts/ulg.signature"
    +  set signature = "~/.config/neomutt/accounts/ulg.signature"
     
    -macro index,pager d \
    -  "<save-message>+ulg/Archive<enter>" \
    -  "Move message to the Archive"
    +  macro index,pager d \
    +    "<save-message>+ulg/Archive<enter>" \
    +    "Move message to the Archive"
     
    -macro index,pager D \
    -  "<save-message>+ulg/Trash<enter>" \
    -  "Move message to the Trash"
    +  macro index,pager D \
    +    "<save-message>+ulg/Trash<enter>" \
    +    "Move message to the Trash"
     
    -
    -
    Signature
    -
    +
    +
    Signature
    +
    -
    Thomas Dehaeze
    +
      Thomas Dehaeze
     

    @@ -1648,37 +1655,37 @@ This empty code block is used to add a new line after signature

    ULIEGE

    -
    -
    Configuration
    -
    +
    +
    Configuration
    +
    -
    set from     = "tdehaeze@uliege.be"
    -set sendmail = "~/.config/neomutt/bin/send_mail.sh uliege"
    +
      set from     = "tdehaeze@uliege.be"
    +  set sendmail = "~/.config/neomutt/bin/send_mail.sh uliege"
     
    -# Other special folders.
    -set mbox      = "+uliege/Archive"
    -set record    = "+uliege/Sent"
    -set postponed = "+uliege/Drafts"
    +  # Other special folders.
    +  set mbox      = "+uliege/Archive"
    +  set record    = "+uliege/Sent"
    +  set postponed = "+uliege/Drafts"
     
    -set signature = "~/.config/neomutt/accounts/uliege.signature"
    +  set signature = "~/.config/neomutt/accounts/uliege.signature"
     
    -macro index,pager d \
    -  "<save-message>+uliege/Archive<enter>" \
    -  "Move message to the Archive"
    +  macro index,pager d \
    +    "<save-message>+uliege/Archive<enter>" \
    +    "Move message to the Archive"
     
    -macro index,pager D \
    -  "<save-message>+uliege/Trash<enter>" \
    -  "Move message to the Trash"
    +  macro index,pager D \
    +    "<save-message>+uliege/Trash<enter>" \
    +    "Move message to the Trash"
     
    -
    -
    Signature
    -
    +
    +
    Signature
    +
    -
    Thomas Dehaeze
    +
      Thomas Dehaeze
     

    @@ -1697,25 +1704,25 @@ This empty code block is used to add a new line after signature

    Basic Options

    -
    set wait_key = no        # shut up, mutt
    -set mbox_type = Maildir  # mailbox type
    -set help = no            # No top bar
    -set timeout = 3          # idle time before scanning
    -set sleep_time = 0       # how long NeoMutt may wait after an error message
    -set mail_check = 0       # minimum time between scans
    -set delete               # don't ask, just do
    -unset confirmappend      # don't ask, just do!
    -set quit                 # don't ask, just do!!
    -set mark_old = no        # read/new is good enough for me
    -set beep_new             # bell on new mails
    -# set pipe_decode          # strip headers and eval mimes when piping
    -set thorough_search      # strip headers and eval mimes before searching
    -set send_charset="us-ascii:utf-8:iso-8859-1"
    -set sendmail_wait = 0 # no please don't silently fail, email is important
    -set use_from             # respect the From: address the editor sends back
    +
      set wait_key = no        # shut up, mutt
    +  set mbox_type = Maildir  # mailbox type
    +  set help = no            # No top bar
    +  set timeout = 3          # idle time before scanning
    +  set sleep_time = 0       # how long NeoMutt may wait after an error message
    +  set mail_check = 0       # minimum time between scans
    +  set delete               # don't ask, just do
    +  unset confirmappend      # don't ask, just do!
    +  set quit                 # don't ask, just do!!
    +  set mark_old = no        # read/new is good enough for me
    +  set beep_new             # bell on new mails
    +  # set pipe_decode          # strip headers and eval mimes when piping
    +  set thorough_search      # strip headers and eval mimes before searching
    +  set send_charset="us-ascii:utf-8:iso-8859-1"
    +  set sendmail_wait = 0 # no please don't silently fail, email is important
    +  set use_from             # respect the From: address the editor sends back
     
    -# Use Vim to compose email, with a few default options.
    -set editor = "nvim -c '/\\n--' -c ':noh' -c 'startinsert'"
    +  # Use Vim to compose email, with a few default options.
    +  set editor = "nvim -c '/\\n--' -c ':noh' -c 'startinsert'"
     
    @@ -1729,9 +1736,9 @@ set use_from # Status Bar
    -
    set status_on_top = no
    -set status_chars  = " *%A"
    -set status_format = "───[ Folder: %f ]───[%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]───%>─%?p?( %p postponed )?───"
    +
      set status_on_top = no
    +  set status_chars  = " *%A"
    +  set status_format = "───[ Folder: %f ]───[%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]───%>─%?p?( %p postponed )?───"
     
    @@ -1741,15 +1748,15 @@ set use_from # Index View Options
    -
    set date_format = "%d/%m/%y %H:%M"
    -set index_format = "[%Z] %D %-20.20F %s"
    +
      set date_format = "%d/%m/%y %H:%M"
    +  set index_format = "[%Z] %D %-20.20F %s"
     
    -set sort = threads                         # like gmail
    -set sort_aux = reverse-last-date-received  # like gmail
    -set uncollapse_jump                        # don't collapse on an unread message
    -set sort_re                                # thread based on regex
    -set reply_regexp = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"
    -set folder_format = "%2C %t %N %8s %f"
    +  set sort = threads                         # like gmail
    +  set sort_aux = reverse-last-date-received  # like gmail
    +  set uncollapse_jump                        # don't collapse on an unread message
    +  set sort_re                                # thread based on regex
    +  set reply_regexp = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"
    +  set folder_format = "%2C %t %N %8s %f"
     
    @@ -1759,16 +1766,16 @@ set sort_re #

    Pager View Options

    -
    set pager_index_lines = 10 # number of index lines to show
    -set pager_context = 3      # number of context lines to show
    -set pager_stop             # don't go to next message automatically
    -set menu_scroll            # scroll in menus
    -set tilde                  # show tildes like in vim
    -set markers = no           # no ugly plus signs
    -set quote_regexp = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+"
    +
      set pager_index_lines = 10 # number of index lines to show
    +  set pager_context = 3      # number of context lines to show
    +  set pager_stop             # don't go to next message automatically
    +  set menu_scroll            # scroll in menus
    +  set tilde                  # show tildes like in vim
    +  set markers = no           # no ugly plus signs
    +  set quote_regexp = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+"
     
    -auto_view text/html                                      # view html automatically
    -alternative_order text/plain text/enriched text/html     # save html for last
    +  auto_view text/html                                      # view html automatically
    +  alternative_order text/plain text/enriched text/html     # save html for last
     
    @@ -1778,15 +1785,15 @@ alternative_order text/plain text/enriched text/html Compose View Options
    -
    set sig_dashes                       # dashes before sig
    -set sig_on_top                       # the signature is just below the response
    -set edit_headers                     # show headers when composing
    -set fast_reply                       # skip to compose when replying
    -set fcc_attach                       # save attachments with the body
    -set attribution = "On %d, %n wrote:" # format of quoting header
    -set reply_to                         # reply to Reply to: field
    -set reverse_name                     # reply as whomever it was to
    -set include                          # include message in replies
    +
      set sig_dashes                       # dashes before sig
    +  set sig_on_top                       # the signature is just below the response
    +  set edit_headers                     # show headers when composing
    +  set fast_reply                       # skip to compose when replying
    +  set fcc_attach                       # save attachments with the body
    +  set attribution = "On %d, %n wrote:" # format of quoting header
    +  set reply_to                         # reply to Reply to: field
    +  set reverse_name                     # reply as whomever it was to
    +  set include                          # include message in replies
     
    @@ -1796,9 +1803,9 @@ set include # Forward
    -
    set forward_format = "Fwd: %s"       # format of subject when forwarding
    -set forward_decode                   # decode when forwarding
    -set forward_quote                    # include message in forwards
    +
      set forward_format = "Fwd: %s"       # format of subject when forwarding
    +  set forward_decode                   # decode when forwarding
    +  set forward_quote                    # include message in forwards
     
    @@ -1808,80 +1815,80 @@ set forward_quote # Headers
    -
    ignore *                                # ignore all headers
    -unignore from: to: cc: date: subject:   # show only these
    -unhdr_order *
    -hdr_order from: to: cc: date: subject:  # and in this order
    +
      ignore *                                # ignore all headers
    +  unignore from: to: cc: date: subject:   # show only these
    +  unhdr_order *
    +  hdr_order from: to: cc: date: subject:  # and in this order
     
    -
    -

    Sidebar

    -
    +
    +

    Sidebar

    +

    General Config

    -
    # Should the Sidebar be shown?
    -set sidebar_visible = yes
    +
      # Should the Sidebar be shown?
    +  set sidebar_visible = yes
     
    -# How wide should the Sidebar be in screen columns?
    -# Note: Some characters, e.g. Chinese, take up two columns each.
    -set sidebar_width = 20
    +  # How wide should the Sidebar be in screen columns?
    +  # Note: Some characters, e.g. Chinese, take up two columns each.
    +  set sidebar_width = 20
     
    -# Should the mailbox paths be abbreviated?
    -set sidebar_short_path = yes
    +  # Should the mailbox paths be abbreviated?
    +  set sidebar_short_path = yes
     
    -# When abbreviating mailbox path names, use any of these characters as path
    -# separators.  Only the part after the last separators will be shown.
    -# For file folders '/' is good.  For IMAP folders, often '.' is useful.
    -set sidebar_delim_chars = '/.'
    +  # When abbreviating mailbox path names, use any of these characters as path
    +  # separators.  Only the part after the last separators will be shown.
    +  # For file folders '/' is good.  For IMAP folders, often '.' is useful.
    +  set sidebar_delim_chars = '/.'
     
    -# If the mailbox path is abbreviated, should it be indented?
    -set sidebar_folder_indent = yes
    +  # If the mailbox path is abbreviated, should it be indented?
    +  set sidebar_folder_indent = yes
     
    -# Indent mailbox paths with this string.
    -set sidebar_indent_string = '  '
    +  # Indent mailbox paths with this string.
    +  set sidebar_indent_string = '  '
     
    -# Make the Sidebar only display mailboxes that contain new, or flagged,
    -# mail.
    -set sidebar_new_mail_only = no
    +  # Make the Sidebar only display mailboxes that contain new, or flagged,
    +  # mail.
    +  set sidebar_new_mail_only = no
     
    -# Any mailboxes that are whitelisted will always be visible, even if the
    -# sidebar_new_mail_only option is enabled.
    -# sidebar_whitelist '/home/user/mailbox1'
    -# sidebar_whitelist '/home/user/mailbox2'
    +  # Any mailboxes that are whitelisted will always be visible, even if the
    +  # sidebar_new_mail_only option is enabled.
    +  # sidebar_whitelist '/home/user/mailbox1'
    +  # sidebar_whitelist '/home/user/mailbox2'
     
    -# When searching for mailboxes containing new mail, should the search wrap
    -# around when it reaches the end of the list?
    -set sidebar_next_new_wrap = no
    +  # When searching for mailboxes containing new mail, should the search wrap
    +  # around when it reaches the end of the list?
    +  set sidebar_next_new_wrap = no
     
    -# Show the Sidebar on the right-hand side of the screen
    -set sidebar_on_right = no
    +  # Show the Sidebar on the right-hand side of the screen
    +  set sidebar_on_right = no
     
    -# The character to use as the divider between the Sidebar and the other Mutt
    -# panels.
    -# Note: Only the first character of this string is used.
    -set sidebar_divider_char = '│'
    +  # The character to use as the divider between the Sidebar and the other Mutt
    +  # panels.
    +  # Note: Only the first character of this string is used.
    +  set sidebar_divider_char = '│'
     
    -# Enable extended buffy mode to calculate total, new, and flagged
    -# message counts for each mailbox.
    -set mail_check_stats
    +  # Enable extended buffy mode to calculate total, new, and flagged
    +  # message counts for each mailbox.
    +  set mail_check_stats
     
    -# Display the Sidebar mailboxes using this format string.
    -set sidebar_format = '%D %* %?N?[%N]?'
    +  # Display the Sidebar mailboxes using this format string.
    +  set sidebar_format = '%D %* %?N?[%N]?'
     
    -# Sort the mailboxes in the Sidebar using this method:
    -#       count    - total number of messages
    -#       flagged  - number of flagged messages
    -#       new      - number of new messages
    -#       path     - mailbox path
    -#       unsorted - do not sort the mailboxes
    -set sidebar_sort_method = 'unsorted'
    +  # Sort the mailboxes in the Sidebar using this method:
    +  #       count    - total number of messages
    +  #       flagged  - number of flagged messages
    +  #       new      - number of new messages
    +  #       path     - mailbox path
    +  #       unsorted - do not sort the mailboxes
    +  set sidebar_sort_method = 'unsorted'
     
    @@ -1891,51 +1898,51 @@ set mail_check_stats

    Mailboxes to show in the sidebar.

    -
    named-mailboxes "   Search" =search
    -named-mailboxes " GMAIL" =empty/gmail
    -named-mailboxes "   Inbox" =gmail/Inbox
    -named-mailboxes "   Sent" =gmail/Sent
    -named-mailboxes "   Drafts" =gmail/Drafts
    -named-mailboxes " ﮊ  Archive" =gmail/Archive
    -named-mailboxes "   Trash" =gmail/Trash
    -named-mailboxes " ESRF" =empty/esrf
    -named-mailboxes "   Inbox" =esrf/Inbox
    -named-mailboxes "   Sent" =esrf/Sent
    -named-mailboxes "   Drafts" =esrf/Drafts
    -named-mailboxes " ﮊ  Archive" =esrf/Archive
    -named-mailboxes "   Trash" =esrf/Trash
    -named-mailboxes " ULG" =empty/ulg
    -named-mailboxes "   Inbox" =ulg/Inbox
    -named-mailboxes "   Sent" =ulg/Sent
    -named-mailboxes "   Drafts" =ulg/Drafts
    -named-mailboxes " ﮊ  Archive" =ulg/Archive
    -named-mailboxes "   Trash" =ulg/Trash
    -named-mailboxes " ULIEGE" =empty/uliege
    -named-mailboxes "   Inbox" =uliege/Inbox
    -named-mailboxes "   Sent" =uliege/Sent
    -named-mailboxes "   Drafts" =uliege/Drafts
    -named-mailboxes " ﮊ  Archive" =uliege/Archive
    -named-mailboxes "   Trash" =uliege/Trash
    +
      named-mailboxes "   Search" =search
    +  named-mailboxes " GMAIL" =empty/gmail
    +  named-mailboxes "   Inbox" =gmail/Inbox
    +  named-mailboxes "   Sent" =gmail/Sent
    +  named-mailboxes "   Drafts" =gmail/Drafts
    +  named-mailboxes " ﮊ  Archive" =gmail/Archive
    +  named-mailboxes "   Trash" =gmail/Trash
    +  named-mailboxes " ESRF" =empty/esrf
    +  named-mailboxes "   Inbox" =esrf/Inbox
    +  named-mailboxes "   Sent" =esrf/Sent
    +  named-mailboxes "   Drafts" =esrf/Drafts
    +  named-mailboxes " ﮊ  Archive" =esrf/Archive
    +  named-mailboxes "   Trash" =esrf/Trash
    +  named-mailboxes " ULG" =empty/ulg
    +  named-mailboxes "   Inbox" =ulg/Inbox
    +  named-mailboxes "   Sent" =ulg/Sent
    +  named-mailboxes "   Drafts" =ulg/Drafts
    +  named-mailboxes " ﮊ  Archive" =ulg/Archive
    +  named-mailboxes "   Trash" =ulg/Trash
    +  named-mailboxes " ULIEGE" =empty/uliege
    +  named-mailboxes "   Inbox" =uliege/Inbox
    +  named-mailboxes "   Sent" =uliege/Sent
    +  named-mailboxes "   Drafts" =uliege/Drafts
    +  named-mailboxes " ﮊ  Archive" =uliege/Archive
    +  named-mailboxes "   Trash" =uliege/Trash
     
    -
    unset move
    +
      unset move
     
    -
    -

    Attachments

    -
    +
    +

    Attachments

    +

    Attachment View Options

    -
    set attach_format = "[%D %t] %2n [%-7.7m/%10.10M] %.40d %> [%s] "
    +
      set attach_format = "[%D %t] %2n [%-7.7m/%10.10M] %.40d %> [%s] "
     
    @@ -1972,8 +1979,8 @@ Of ranger can be used with the A keybinding.

    Forgotten Attachment

    -
    set abort_noattach = ask-yes
    -set abort_noattach_regex = "\\<(attach(|ed|ments?)|(attaché|attachés|attache|attachons|joint|jointe|joints|jointes|joins|joignons))\\>"
    +
      set abort_noattach = ask-yes
    +  set abort_noattach_regex = "\\<(attach(|ed|ments?)|(attaché|attachés|attache|attachons|joint|jointe|joints|jointes|joins|joignons))\\>"
     
    @@ -1988,12 +1995,12 @@ Of ranger can be used with the A keybinding.

    Send Mail Script

    -
    msmtp -a $1 ${@:2} && \
    -    if [ $TMUX ]; then
    -        tmux split -v -l 1 mbsync $1-Sent && tmux select-pane -U
    -    else
    -        mbsync $1-Sent
    -    fi
    +
      msmtp -a $1 ${@:2} && \
    +      if [ $TMUX ]; then
    +          tmux split -v -l 1 mbsync $1-Sent && tmux select-pane -U
    +      else
    +          mbsync $1-Sent
    +      fi
     
    @@ -2003,11 +2010,11 @@ Of ranger can be used with the A keybinding.

    Sync Mail Script

    -
    if [ $TMUX ]; then
    -    tmux split -v -l 1 checkmail $1 && tmux select-pane -U
    -else
    -    checkmail $1
    -fi
    +
      if [ $TMUX ]; then
    +      tmux split -v -l 1 checkmail $1 && tmux select-pane -U
    +  else
    +      checkmail $1
    +  fi
     
    @@ -2017,16 +2024,16 @@ Of ranger can be used with the A keybinding.

    Openfile Scripts

    -
    base=$(basename "$1")
    -ext="${base##*.}"
    +
      base=$(basename "$1")
    +  ext="${base##*.}"
     
    -file=$(mktemp -u --suffix=".$ext")
    +  file=$(mktemp -u --suffix=".$ext")
     
    -rm -f "$file"
    +  rm -f "$file"
     
    -cp "$1" "$file"
    +  cp "$1" "$file"
     
    -setsid xdg-open "$file" >/dev/null 2>&1 &
    +  setsid xdg-open "$file" >/dev/null 2>&1 &
     
    @@ -2036,9 +2043,9 @@ setsid xdg-open "urlview Config
    -
    REGEXP (((http|https|ftp|gopher)|mailto)[.:][^ >"\t]*|www\.[-a-z0-9.]+)[^ .,;\t>">\):]
    +
      REGEXP (((http|https|ftp|gopher)|mailto)[.:][^ >"\t]*|www\.[-a-z0-9.]+)[^ .,;\t>">\):]
     
    -COMMAND nohup qutebrowser %s </dev/null &>/dev/null &
    +  COMMAND nohup qutebrowser %s </dev/null &>/dev/null &
     
    @@ -2051,15 +2058,15 @@ COMMAND nohup qutebrowser %s </dev/null &>/dev/null & Generic

    -
    text/plain; nvim %s
    -video/*; setsid mpv --quiet %s &
    -image/*; sxiv -a -b %s &
    -application/pdf; zathura %s &
    -audio/*; /usr/bin/xdg-open %s; copiousoutput
    -text/html; export DISPLAY=:0 && setsid qutebrowser %s; nametemplate=%s.html
    -text/html; w3m -I %{charset} -T text/html; copiousoutput;
    -text/calendar; khal import --batch -a home %s && khal printics %s; copiousoutput;
    -application/ics; khal import --batch -a home %s && khal printics %s; copiousoutput;
    +
      text/plain; nvim %s
    +  video/*; setsid mpv --quiet %s &
    +  image/*; sxiv -a -b %s &
    +  application/pdf; zathura %s &
    +  audio/*; /usr/bin/xdg-open %s; copiousoutput
    +  text/html; export DISPLAY=:0 && setsid qutebrowser %s; nametemplate=%s.html
    +  text/html; lynx -width ${COLUMNS:-80} -dump %s; nametemplate=%s.html; copiousoutput;
    +  text/calendar; khal import --batch -a home %s && khal printics %s; copiousoutput;
    +  application/ics; khal import --batch -a home %s && khal printics %s; copiousoutput;
     
    @@ -2067,73 +2074,73 @@ application/ics; khal import --batch -a home %s && khal printics %s; cop Libreoffice

    -
    application/docx; libreoffice %s --nologo &; copiousoutput;
    -application/doc; libreoffice --nologo %s &; copiousoutput;
    +
      application/docx; libreoffice %s --nologo &; copiousoutput;
    +  application/doc; libreoffice --nologo %s &; copiousoutput;
     
    -application/vnd.oasis.opendocument.database; libreoffice --nologo --base '%s'; copiousoutput
    -application/vnd.oasis.opendocument.chart; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.oasis.opendocument.spreadsheet; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.oasis.opendocument.spreadsheet-template; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.oasis.opendocument.graphics; libreoffice --nologo --draw '%s'; copiousoutput
    -application/vnd.oasis.opendocument.graphics-template; libreoffice --nologo --draw '%s'; copiousoutput
    -application/vnd.oasis.opendocument.presentation; libreoffice --nologo --impress '%s'; copiousoutput
    -application/vnd.oasis.opendocument.presentation-template; libreoffice --nologo --impress '%s'; copiousoutput
    -application/vnd.oasis.opendocument.formula; libreoffice --nologo --math '%s'; copiousoutput
    -application/vnd.oasis.opendocument.text; libreoffice --nologo --writer '%s'; copiousoutput
    -application/vnd.oasis.opendocument.text-master; libreoffice --nologo -global '%s'; copiousoutput
    -application/vnd.oasis.opendocument.text-template; libreoffice --nologo --writer '%s'; copiousoutput
    -application/vnd.oasis.opendocument.text-web; libreoffice --nologo -web '%s'; copiousoutput
    -application/vnd.sun.xml.base; libreoffice --nologo --writer '%s'; copiousoutput
    -application/vnd.sun.xml.calc; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.sun.xml.calc.template; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.sun.xml.draw; libreoffice --nologo --draw '%s'; copiousoutput
    -application/vnd.sun.xml.draw.template; libreoffice --nologo --draw '%s'; copiousoutput
    -application/vnd.stardivision.calc; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.stardivision.chart; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.stardivision.draw; libreoffice --nologo --draw '%s'; copiousoutput
    -application/vnd.stardivision.impress; libreoffice --nologo --impress '%s'; copiousoutput
    -application/vnd.stardivision.math; libreoffice --nologo --math '%s'; copiousoutput
    -application/vnd.stardivision.writer-global; libreoffice --nologo --writer '%s'; copiousoutput
    -application/vnd.stardivision.writer; libreoffice --nologo --writer '%s'; copiousoutput
    -application/vnd.sun.xml.impress; libreoffice --nologo --impress '%s'; copiousoutput
    -application/vnd.sun.xml.impress.template; libreoffice --nologo --impress '%s'; copiousoutput
    -application/vnd.sun.xml.math; libreoffice --nologo --math '%s'; copiousoutput
    -application/vnd.sun.xml.writer; libreoffice --nologo --writer '%s'; copiousoutput
    -application/vnd.sun.xml.writer.global; libreoffice --nologo -global '%s'; copiousoutput
    -application/vnd.sun.xml.writer.template; libreoffice --nologo --writer '%s'; copiousoutput
    -text/csv; libreoffice --nologo --calc '%s'; copiousoutput
    -text/spreadsheet; libreoffice --nologo --calc '%s'; copiousoutput
    -application/x-quattropro; libreoffice --nologo --calc '%s'; copiousoutput
    -application/x-dbf; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.ms-excel.sheet.macroEnabled.12; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.ms-excel.template.macroEnabled.12; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.openxmlformats-officedocument.spreadsheetml.template; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.lotus-1-2-3; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.ms-excel; libreoffice --nologo --calc '%s'; copiousoutput
    -application/msexcel; libreoffice --nologo --calc '%s'; copiousoutput
    -application/x-dbase; libreoffice --nologo --calc '%s'; copiousoutput
    -text/x-csv; libreoffice --nologo --calc '%s'; copiousoutput
    -application/vnd.ms-powerpoint.presentation.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput
    -application/vnd.ms-powerpoint.slideshow.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput
    -application/vnd.ms-powerpoint.template.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput
    -application/vnd.openxmlformats-officedocument.presentationml.presentation; libreoffice --nologo --impress '%s'; copiousoutput
    -application/vnd.openxmlformats-officedocument.presentationml.slideshow; libreoffice --nologo --impress '%s'; copiousoutput
    -application/vnd.openxmlformats-officedocument.presentationml.template; libreoffice --nologo --impress '%s'; copiousoutput
    -application/vnd.ms-powerpoint; libreoffice --nologo --impress '%s'; copiousoutput
    -application/mspowerpoint; libreoffice --nologo --impress '%s'; copiousoutput
    -text/mathml; libreoffice --nologo --math '%s'; copiousoutput
    -application/rtf; libreoffice --nologo --writer '%s'; copiousoutput
    -application/x-t602; libreoffice --nologo --writer '%s'; copiousoutput
    -application/vnd.wordperfect; libreoffice --nologo --writer '%s'; copiousoutput
    -application/vnd.ms-word.document.macroEnabled.12; libreoffice --nologo --writer '%s'; copiousoutput
    -application/vnd.ms-word.template.macroEnabled.12; libreoffice --nologo --writer '%s'; copiousoutput
    -application/vnd.openxmlformats-officedocument.wordprocessingml.document; libreoffice --nologo --writer '%s'; copiousoutput
    -application/vnd.openxmlformats-officedocument.wordprocessingml.template; libreoffice --nologo --writer '%s'; copiousoutput
    -application/vnd.ms-works; libreoffice --nologo --writer '%s'; copiousoutput
    -application/msword; libreoffice --nologo --writer '%s'; copiousoutput
    -application/wordperfect; libreoffice --nologo --writer '%s'; copiousoutput
    -text/rtf; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.database; libreoffice --nologo --base '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.chart; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.spreadsheet; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.spreadsheet-template; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.graphics; libreoffice --nologo --draw '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.graphics-template; libreoffice --nologo --draw '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.presentation; libreoffice --nologo --impress '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.presentation-template; libreoffice --nologo --impress '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.formula; libreoffice --nologo --math '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.text; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.text-master; libreoffice --nologo -global '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.text-template; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.oasis.opendocument.text-web; libreoffice --nologo -web '%s'; copiousoutput
    +  application/vnd.sun.xml.base; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.sun.xml.calc; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.sun.xml.calc.template; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.sun.xml.draw; libreoffice --nologo --draw '%s'; copiousoutput
    +  application/vnd.sun.xml.draw.template; libreoffice --nologo --draw '%s'; copiousoutput
    +  application/vnd.stardivision.calc; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.stardivision.chart; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.stardivision.draw; libreoffice --nologo --draw '%s'; copiousoutput
    +  application/vnd.stardivision.impress; libreoffice --nologo --impress '%s'; copiousoutput
    +  application/vnd.stardivision.math; libreoffice --nologo --math '%s'; copiousoutput
    +  application/vnd.stardivision.writer-global; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.stardivision.writer; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.sun.xml.impress; libreoffice --nologo --impress '%s'; copiousoutput
    +  application/vnd.sun.xml.impress.template; libreoffice --nologo --impress '%s'; copiousoutput
    +  application/vnd.sun.xml.math; libreoffice --nologo --math '%s'; copiousoutput
    +  application/vnd.sun.xml.writer; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.sun.xml.writer.global; libreoffice --nologo -global '%s'; copiousoutput
    +  application/vnd.sun.xml.writer.template; libreoffice --nologo --writer '%s'; copiousoutput
    +  text/csv; libreoffice --nologo --calc '%s'; copiousoutput
    +  text/spreadsheet; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/x-quattropro; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/x-dbf; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.ms-excel.sheet.macroEnabled.12; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.ms-excel.template.macroEnabled.12; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.openxmlformats-officedocument.spreadsheetml.template; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.lotus-1-2-3; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.ms-excel; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/msexcel; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/x-dbase; libreoffice --nologo --calc '%s'; copiousoutput
    +  text/x-csv; libreoffice --nologo --calc '%s'; copiousoutput
    +  application/vnd.ms-powerpoint.presentation.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput
    +  application/vnd.ms-powerpoint.slideshow.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput
    +  application/vnd.ms-powerpoint.template.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput
    +  application/vnd.openxmlformats-officedocument.presentationml.presentation; libreoffice --nologo --impress '%s'; copiousoutput
    +  application/vnd.openxmlformats-officedocument.presentationml.slideshow; libreoffice --nologo --impress '%s'; copiousoutput
    +  application/vnd.openxmlformats-officedocument.presentationml.template; libreoffice --nologo --impress '%s'; copiousoutput
    +  application/vnd.ms-powerpoint; libreoffice --nologo --impress '%s'; copiousoutput
    +  application/mspowerpoint; libreoffice --nologo --impress '%s'; copiousoutput
    +  text/mathml; libreoffice --nologo --math '%s'; copiousoutput
    +  application/rtf; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/x-t602; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.wordperfect; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.ms-word.document.macroEnabled.12; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.ms-word.template.macroEnabled.12; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.openxmlformats-officedocument.wordprocessingml.document; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.openxmlformats-officedocument.wordprocessingml.template; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/vnd.ms-works; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/msword; libreoffice --nologo --writer '%s'; copiousoutput
    +  application/wordperfect; libreoffice --nologo --writer '%s'; copiousoutput
    +  text/rtf; libreoffice --nologo --writer '%s'; copiousoutput
     
    @@ -2143,7 +2150,7 @@ text/rtf; libreoffice --nologo --writer '%s'; co

    Author: Dehaeze Thomas

    -

    Created: 2021-01-01 ven. 20:09

    +

    Created: 2021-01-04 lun. 21:32

    diff --git a/doom.org b/doom.org index fe37942..23f0dd9 100644 --- a/doom.org +++ b/doom.org @@ -14,7 +14,7 @@ * Installation #+begin_src bash :tangle no - yay -Ss aspell aspell-fr aspell-en +yay -Ss aspell aspell-fr aspell-en #+end_src * Introduction and Resources @@ -105,79 +105,79 @@ After that, restart Emacs with =spc q r=. ** Doom Config #+begin_src emacs-lisp - (setq doom-font (font-spec :family "Hack Nerd Font Mono" :size 12 :weight 'semi-light) - doom-variable-pitch-font (font-spec :family "Hack Nerd Font Mono") - doom-unicode-font (font-spec :family "Hack Nerd Font Mono" :size 12) - doom-big-font (font-spec :family "Hack Nerd Font Mono" :size 19)) +(setq doom-font (font-spec :family "Hack Nerd Font Mono" :size 12 :weight 'semi-light) + doom-variable-pitch-font (font-spec :family "Hack Nerd Font Mono") + doom-unicode-font (font-spec :family "Hack Nerd Font Mono" :size 12) + doom-big-font (font-spec :family "Hack Nerd Font Mono" :size 19)) #+end_src #+begin_src emacs-lisp - (setq doom-theme 'leuven) +(setq doom-theme 'leuven) #+end_src #+begin_src emacs-lisp - (setq display-line-numbers-type t) +(setq display-line-numbers-type t) #+end_src #+begin_src emacs-lisp - (use-package doom-modeline - :hook (after-init . doom-modeline-mode) - :custom - (doom-modeline-height 25) - (doom-modeline-bar-width 1) - (doom-modeline-icon t) - (doom-modeline-major-mode-icon t) - (doom-modeline-major-mode-color-icon t) - (doom-modeline-buffer-file-name-style 'truncate-upto-project) - (doom-modeline-buffer-state-icon t) - (doom-modeline-buffer-modification-icon t) - (doom-modeline-minor-modes nil) - (doom-modeline-enable-word-count nil) - (doom-modeline-buffer-encoding t) - (doom-modeline-indent-info nil) - (doom-modeline-checker-simple-format t) - (doom-modeline-vcs-max-length 12) - (doom-modeline-env-version t) - (doom-modeline-irc-stylize 'identity) - (doom-modeline-github-timer nil) - (doom-modeline-gnus-timer nil)) +(use-package doom-modeline + :hook (after-init . doom-modeline-mode) + :custom + (doom-modeline-height 25) + (doom-modeline-bar-width 1) + (doom-modeline-icon t) + (doom-modeline-major-mode-icon t) + (doom-modeline-major-mode-color-icon t) + (doom-modeline-buffer-file-name-style 'truncate-upto-project) + (doom-modeline-buffer-state-icon t) + (doom-modeline-buffer-modification-icon t) + (doom-modeline-minor-modes nil) + (doom-modeline-enable-word-count nil) + (doom-modeline-buffer-encoding t) + (doom-modeline-indent-info nil) + (doom-modeline-checker-simple-format t) + (doom-modeline-vcs-max-length 12) + (doom-modeline-env-version t) + (doom-modeline-irc-stylize 'identity) + (doom-modeline-github-timer nil) + (doom-modeline-gnus-timer nil)) #+end_src ** Evil #+begin_src emacs-lisp - (after! evil - (map! :m "-" #'dired-jump)) +(after! evil + (map! :m "-" #'dired-jump)) #+end_src Make movement keys work like they should #+begin_src emacs-lisp - (define-key evil-normal-state-map (kbd " ") 'evil-next-visual-line) - (define-key evil-normal-state-map (kbd " ") 'evil-previous-visual-line) - (define-key evil-motion-state-map (kbd " ") 'evil-next-visual-line) - (define-key evil-motion-state-map (kbd " ") 'evil-previous-visual-line) +(define-key evil-normal-state-map (kbd " ") 'evil-next-visual-line) +(define-key evil-normal-state-map (kbd " ") 'evil-previous-visual-line) +(define-key evil-motion-state-map (kbd " ") 'evil-next-visual-line) +(define-key evil-motion-state-map (kbd " ") 'evil-previous-visual-line) #+end_src Make horizontal movement cross lines #+begin_src emacs-lisp - (setq-default evil-cross-lines t) +(setq-default evil-cross-lines t) #+end_src Evil Surround (not working): #+begin_src emacs-lisp :tangle no - ;; this macro was copied from here: https://stackoverflow.com/a/22418983/4921402 - (defmacro define-and-bind-quoted-text-object (name key start-regex end-regex) - (let ((inner-name (make-symbol (concat "evil-inner-" name))) - (outer-name (make-symbol (concat "evil-a-" name)))) - `(progn - (evil-define-text-object ,inner-name (count &optional beg end type) - (evil-select-paren ,start-regex ,end-regex beg end type count nil)) - (evil-define-text-object ,outer-name (count &optional beg end type) - (evil-select-paren ,start-regex ,end-regex beg end type count t)) - (define-key evil-inner-text-objects-map ,key #',inner-name) - (define-key evil-outer-text-objects-map ,key #',outer-name)))) +;; this macro was copied from here: https://stackoverflow.com/a/22418983/4921402 +(defmacro define-and-bind-quoted-text-object (name key start-regex end-regex) + (let ((inner-name (make-symbol (concat "evil-inner-" name))) + (outer-name (make-symbol (concat "evil-a-" name)))) + `(progn + (evil-define-text-object ,inner-name (count &optional beg end type) + (evil-select-paren ,start-regex ,end-regex beg end type count nil)) + (evil-define-text-object ,outer-name (count &optional beg end type) + (evil-select-paren ,start-regex ,end-regex beg end type count t)) + (define-key evil-inner-text-objects-map ,key #',inner-name) + (define-key evil-outer-text-objects-map ,key #',outer-name)))) - ;; Add dollar as a surround object - (define-and-bind-quoted-text-object "dollar" "$" "\\$" "\\$") +;; Add dollar as a surround object +(define-and-bind-quoted-text-object "dollar" "$" "\\$" "\\$") #+end_src ** Which Key @@ -191,86 +191,86 @@ Evil Surround (not working): ** Visual Automatic line wrap. #+begin_src emacs-lisp - (global-visual-line-mode nil) +(global-visual-line-mode nil) #+end_src Turn off auto-fill mode that add line breaks. #+begin_src emacs-lisp - (auto-fill-mode -1) - (remove-hook 'text-mode-hook #'turn-on-auto-fill) - (after! org - ;; turn off auto-fill for org-mode - (add-hook 'org-mode-hook 'turn-off-auto-fill)) - (after! auctex - (add-hook 'latex-mode-hook 'turn-off-auto-fill)) +(auto-fill-mode -1) +(remove-hook 'text-mode-hook #'turn-on-auto-fill) +(after! org + ;; turn off auto-fill for org-mode + (add-hook 'org-mode-hook 'turn-off-auto-fill)) +(after! auctex + (add-hook 'latex-mode-hook 'turn-off-auto-fill)) #+end_src ** Useful General Functions #+begin_src emacs-lisp - (defun tdh-matlab-work () - "Setup Matlab Work Windows" - (interactive) - (delete-other-windows) - (evil-window-vsplit) - (evil-window-right 1) - (switch-to-buffer "*MATLAB*") - (evil-window-left 1) - ) +(defun tdh-matlab-work () + "Setup Matlab Work Windows" + (interactive) + (delete-other-windows) + (evil-window-vsplit) + (evil-window-right 1) + (switch-to-buffer "*MATLAB*") + (evil-window-left 1) + ) #+end_src ** Change default alert backend #+begin_src emacs-lisp - (setq alert-default-style 'libnotify) +(setq alert-default-style 'libnotify) #+end_src ** Lockfiles #+begin_src emacs-lisp - (setq create-lockfiles nil) +(setq create-lockfiles nil) #+end_src ** Disable highlight of current line #+begin_src emacs-lisp - (global-hl-line-mode -1) - (after! org - (add-hook 'org-mode-hook - (lambda() - (hl-line-mode -1) - (global-hl-line-mode -1)) - 't - )) +(global-hl-line-mode -1) +(after! org + (add-hook 'org-mode-hook + (lambda() + (hl-line-mode -1) + (global-hl-line-mode -1)) + 't + )) #+end_src ** Remap =jump-forward= key binding #+begin_src emacs-lisp - (with-eval-after-load 'better-jumper - (map! - :desc "Jump Forward" - "C-i" #'better-jumper-jump-forward)) +(with-eval-after-load 'better-jumper + (map! + :desc "Jump Forward" + "C-i" #'better-jumper-jump-forward)) #+end_src ** Magit #+begin_src emacs-lisp - (setenv "GIT_ASKPASS" "git-gui--askpass") +(setenv "GIT_ASKPASS" "git-gui--askpass") - (after! magit - (setq magit-diff-refine-hunk 'all) - (setq magit-repository-directories `(("~/Cloud/thesis/matlab/" . 1) - ("~/Cloud/thesis/papers/" . 1))) - (setq magit-repolist-columns '(("Name" 25 magit-repolist-column-ident nil) - ("Status" 7 magit-repolist-column-flag) - ("BU" 3 magit-repolist-column-unpushed-to-upstream - ((:right-align t) - (:help-echo "Local changes not in upstream"))) - ("Path" 99 magit-repolist-column-path nil))) - ) +(after! magit + (setq magit-diff-refine-hunk 'all) + (setq magit-repository-directories `(("~/Cloud/thesis/matlab/" . 1) + ("~/Cloud/thesis/papers/" . 1))) + (setq magit-repolist-columns '(("Name" 25 magit-repolist-column-ident nil) + ("Status" 7 magit-repolist-column-flag) + ("BU" 3 magit-repolist-column-unpushed-to-upstream + ((:right-align t) + (:help-echo "Local changes not in upstream"))) + ("Path" 99 magit-repolist-column-path nil))) + ) #+end_src ** Dired - =C-c C-e= Writable Dired mode, when changes are done =C-c C-c=. - This works also with =C-x C-q= +This works also with =C-x C-q= - =C-c C-r= use =rsync= to copy file in the background - =+= Create a directory @@ -291,36 +291,36 @@ Turn off auto-fill mode that add line breaks. ** PDF-Tools #+begin_src emacs-lisp - (use-package! pdf-tools - :config - (add-hook 'pdf-view-mode-hook (lambda() (linum-mode -1))) - ) +(use-package! pdf-tools + :config + (add-hook 'pdf-view-mode-hook (lambda() (linum-mode -1))) + ) #+end_src ** Yassnippets #+begin_src emacs-lisp - (push "~/.config/doom/snippets" yas-snippet-dirs) - (yas-global-mode 1) +(push "~/.config/doom/snippets" yas-snippet-dirs) +(yas-global-mode 1) #+end_src ** Ox-Hugo #+begin_src emacs-lisp - (defun tdh-export-everything-to-hugo () - "Export all the .org files in the specified directory to markdown using Hugo" - (interactive) - (setq org-files (directory-files (read-directory-name "Directory:" "/home/thomas/Cloud/brain/") t "org$" t)) +(defun tdh-export-everything-to-hugo () + "Export all the .org files in the specified directory to markdown using Hugo" + (interactive) + (setq org-files (directory-files (read-directory-name "Directory:" "/home/thomas/Cloud/brain/") t "org$" t)) - (while org-files - (setq current-org-file (car org-files)) - (message "Exporting %s" current-org-file) - (find-file current-org-file) - (org-hugo-export-to-md) - (setq org-files (cdr org-files)))) + (while org-files + (setq current-org-file (car org-files)) + (message "Exporting %s" current-org-file) + (find-file current-org-file) + (org-hugo-export-to-md) + (setq org-files (cdr org-files)))) #+end_src ** Others #+begin_src emacs-lisp - (setq auto-save-default t) +(setq auto-save-default t) #+end_src * Org Mode @@ -330,115 +330,115 @@ Turn off auto-fill mode that add line breaks. ** Org General Config #+begin_src emacs-lisp +(setq org-directory "~/Cloud/org/") +(after! org (setq org-directory "~/Cloud/org/") - (after! org - (setq org-directory "~/Cloud/org/") - ;; Replace the content marker, “⋯”, with a nice unicode arrow. - (setq org-ellipsis " ⤵") + ;; Replace the content marker, “⋯”, with a nice unicode arrow. + (setq org-ellipsis " ⤵") - (setq org-default-notes-file "~/Cloud/org/refile.org") + (setq org-default-notes-file "~/Cloud/org/refile.org") - ;; Avoid accidentally editing folded regions, say by adding text after an Org “⋯”. - (setq org-catch-invisible-edits 'show) + ;; Avoid accidentally editing folded regions, say by adding text after an Org “⋯”. + (setq org-catch-invisible-edits 'show) - ;; The following setting hides blank lines between headings which keeps folded view nice and compact. - (setq org-cycle-separator-lines 0) + ;; The following setting hides blank lines between headings which keeps folded view nice and compact. + (setq org-cycle-separator-lines 0) - ;; Indent according to the outline structure - (setq org-startup-indented t) - (setq org-startup-folded t) + ;; Indent according to the outline structure + (setq org-startup-indented t) + (setq org-startup-folded t) - ;; Record the information of when the task was marked as DONE - (setq org-log-done 'time) + ;; Record the information of when the task was marked as DONE + (setq org-log-done 'time) - ;; begining of line on heading behavior - (setq org-special-ctrl-a/e nil) - ) + ;; begining of line on heading behavior + (setq org-special-ctrl-a/e nil) +) #+end_src TAB was changed to toggle only the visibility state of the current subtree, rather than cycle through it recursively. This can be reversed with: #+begin_src emacs-lisp - (after! evil-org - (remove-hook 'org-tab-first-hook #'+org-cycle-only-current-subtree-h)) +(after! evil-org + (remove-hook 'org-tab-first-hook #'+org-cycle-only-current-subtree-h)) #+end_src ** Org Inline Images Display the real size of images and not the one set with =attr_latex: :width \linewidth= for instance. #+begin_src emacs-lisp - (after! org - (setq org-image-actual-width t)) +(after! org + (setq org-image-actual-width t)) #+end_src ** Org Links #+begin_src emacs-lisp - (after! org - (setq org-link-abbrev-alist - '(("bib" . "~/Cloud/brain/biblio/references.bib::%s") - ("notes" . "~/Cloud/brain/%s.org") - ("papers" . "~/Cloud/pdfs/%s.pdf"))) - ) +(after! org + (setq org-link-abbrev-alist + '(("bib" . "~/Cloud/brain/biblio/references.bib::%s") + ("notes" . "~/Cloud/brain/%s.org") + ("papers" . "~/Cloud/pdfs/%s.pdf"))) + ) #+end_src #+begin_src emacs-lisp - (defun tdh/pdf-link (filename) - (start-process "" nil "zathura" (concat "~/Cloud/pdfs/" filename ".pdf")) - "") +(defun tdh/pdf-link (filename) + (start-process "" nil "zathura" (concat "~/Cloud/pdfs/" filename ".pdf")) + "") - (after! org - (org-link-set-parameters "pdf" :follow #'tdh/pdf-link) - ) +(after! org + (org-link-set-parameters "pdf" :follow #'tdh/pdf-link) + ) #+end_src ** Org Tagging #+begin_src emacs-lisp - (after! org - ;; Align Tags and flush right - (setq org-tags-column -78) - ;; Tags with fast selection keys - (setq org-tag-alist (quote (("@home" . ?h) - ("@work" . ?w) - ("@christophe" . ?c) - ("@veijo" . ?v)))) - ) +(after! org + ;; Align Tags and flush right + (setq org-tags-column -78) + ;; Tags with fast selection keys + (setq org-tag-alist (quote (("@home" . ?h) + ("@work" . ?w) + ("@christophe" . ?c) + ("@veijo" . ?v)))) + ) #+end_src ** Org Refile #+begin_src emacs-lisp - (after! org - (setq org-refile-targets '((org-agenda-files . (:maxlevel . 6)))) - ) +(after! org + (setq org-refile-targets '((org-agenda-files . (:maxlevel . 6)))) + ) #+end_src ** Org TODO #+begin_src emacs-lisp - (after! org - ;; Tags with fast selection keys - (setq org-todo-keywords '( - (sequence "TODO(t)" "NEXT(n)" "MAIL(m)" "|" "DONE(d)") - (sequence "READ(r)" "BKMK(b)" "EXER(x)" "|" "DONE(d)") - (sequence "WAIT(w@/!)" "SDAY(s)" "|" "CANC(c@/!)") - (sequence "QUES(q)" "|" "ANSW(a)") - (sequence "EXAM(e)" "IDEA(i)" "|") - )) +(after! org + ;; Tags with fast selection keys + (setq org-todo-keywords '( + (sequence "TODO(t)" "NEXT(n)" "MAIL(m)" "|" "DONE(d)") + (sequence "READ(r)" "BKMK(b)" "EXER(x)" "|" "DONE(d)") + (sequence "WAIT(w@/!)" "SDAY(s)" "|" "CANC(c@/!)") + (sequence "QUES(q)" "|" "ANSW(a)") + (sequence "EXAM(e)" "IDEA(i)" "|") + )) - ;; Display of the keywords - (setq org-todo-keyword-faces - '(("TODO" . (:foreground "#cc241d" :weight bold)) ;; red - ("EXER" . (:foreground "#cc241d" :weight bold)) ;; red - ("NEXT" . (:foreground "#cc241d" :weight bold)) ;; red - ("MAIL" . (:foreground "#cc241d" :weight bold)) ;; red - ("READ" . (:foreground "#cc241d" :weight bold)) ;; red - ("ANSW" . (:foreground "#689d6a" :weight bold)) ;; aqua - ("DONE" . (:foreground "#689d6a" :weight bold)) ;; aqua - ("WAIT" . (:foreground "#d65d0e" :weight bold)) ;; orange - ("QUES" . (:foreground "#d79921" :weight bold)) ;; yellow - ("CANC" . (:foreground "#a89984" :weight bold)) ;; grey - ("SDAY" . (:foreground "#98971a" :weight bold)) ;; green - ("BKMK" . (:foreground "#98971a" :weight bold)) ;; green - ("IDEA" . (:foreground "#98971a" :weight bold)) ;; green - ("EXAM" . (:foreground "#98971a" :weight bold)))) ;; green - ) + ;; Display of the keywords + (setq org-todo-keyword-faces + '(("TODO" . (:foreground "#cc241d" :weight bold)) ;; red + ("EXER" . (:foreground "#cc241d" :weight bold)) ;; red + ("NEXT" . (:foreground "#cc241d" :weight bold)) ;; red + ("MAIL" . (:foreground "#cc241d" :weight bold)) ;; red + ("READ" . (:foreground "#cc241d" :weight bold)) ;; red + ("ANSW" . (:foreground "#689d6a" :weight bold)) ;; aqua + ("DONE" . (:foreground "#689d6a" :weight bold)) ;; aqua + ("WAIT" . (:foreground "#d65d0e" :weight bold)) ;; orange + ("QUES" . (:foreground "#d79921" :weight bold)) ;; yellow + ("CANC" . (:foreground "#a89984" :weight bold)) ;; grey + ("SDAY" . (:foreground "#98971a" :weight bold)) ;; green + ("BKMK" . (:foreground "#98971a" :weight bold)) ;; green + ("IDEA" . (:foreground "#98971a" :weight bold)) ;; green + ("EXAM" . (:foreground "#98971a" :weight bold)))) ;; green + ) #+end_src ** Org Archive @@ -446,239 +446,239 @@ https://gist.github.com/Fuco1/e86fb5e0a5bb71ceafccedb5ca22fcfb Archive subtrees under the same hierarchy as original in the archive files #+begin_src emacs-lisp - (after! org - (defadvice org-archive-subtree (around fix-hierarchy activate) - (let* ((fix-archive-p (and (not current-prefix-arg) - (not (use-region-p)))) - (location (org-archive--compute-location org-archive-location)) - (afile (car location)) - (offset (if (= 0 (length (cdr location))) - 1 - (1+ (string-match "[^*]" (cdr location))))) - (buffer (or (find-buffer-visiting afile) (find-file-noselect afile)))) - ad-do-it - (when fix-archive-p - (with-current-buffer buffer - (goto-char (point-max)) - (while (> (org-current-level) offset) (org-up-heading-safe)) - (let* ((olpath (org-entry-get (point) "ARCHIVE_OLPATH")) - (path (and olpath (split-string olpath "/"))) - (level offset) - tree-text) - (when olpath - (org-mark-subtree) - (setq tree-text (buffer-substring (region-beginning) (region-end))) - (let (this-command) (org-cut-subtree)) - (goto-char (point-min)) - (save-restriction - (widen) - (-each path - (lambda (heading) - (if (re-search-forward - (rx-to-string - `(: bol (repeat ,level "*") (1+ " ") ,heading)) nil t) - (org-narrow-to-subtree) - (goto-char (point-max)) - (unless (looking-at "^") - (insert "\n")) - (insert (make-string level ?*) - " " - heading - "\n")) - (cl-incf level))) - (widen) - (org-end-of-subtree t t) - (org-paste-subtree level tree-text)))))))) - ) +(after! org + (defadvice org-archive-subtree (around fix-hierarchy activate) + (let* ((fix-archive-p (and (not current-prefix-arg) + (not (use-region-p)))) + (location (org-archive--compute-location org-archive-location)) + (afile (car location)) + (offset (if (= 0 (length (cdr location))) + 1 + (1+ (string-match "[^*]" (cdr location))))) + (buffer (or (find-buffer-visiting afile) (find-file-noselect afile)))) + ad-do-it + (when fix-archive-p + (with-current-buffer buffer + (goto-char (point-max)) + (while (> (org-current-level) offset) (org-up-heading-safe)) + (let* ((olpath (org-entry-get (point) "ARCHIVE_OLPATH")) + (path (and olpath (split-string olpath "/"))) + (level offset) + tree-text) + (when olpath + (org-mark-subtree) + (setq tree-text (buffer-substring (region-beginning) (region-end))) + (let (this-command) (org-cut-subtree)) + (goto-char (point-min)) + (save-restriction + (widen) + (-each path + (lambda (heading) + (if (re-search-forward + (rx-to-string + `(: bol (repeat ,level "*") (1+ " ") ,heading)) nil t) + (org-narrow-to-subtree) + (goto-char (point-max)) + (unless (looking-at "^") + (insert "\n")) + (insert (make-string level ?*) + " " + heading + "\n")) + (cl-incf level))) + (widen) + (org-end-of-subtree t t) + (org-paste-subtree level tree-text)))))))) + ) #+end_src ** Org Agenda General configuration #+begin_src emacs-lisp - (after! org - ;; File to save todo items - (setq org-agenda-files (list "~/Cloud/org/")) +(after! org + ;; File to save todo items + (setq org-agenda-files (list "~/Cloud/org/")) - ;; Include archived files - (setq org-agenda-archives-mode nil) + ;; Include archived files + (setq org-agenda-archives-mode nil) - ;; Set priority range from A to C with default A - (setq org-highest-priority ?A) - (setq org-lowest-priority ?C) - (setq org-default-priority ?C) + ;; Set priority range from A to C with default A + (setq org-highest-priority ?A) + (setq org-lowest-priority ?C) + (setq org-default-priority ?C) - ;; Set colours for priorities - (setq org-priority-faces '((?A . (:foreground "#FB4934")) - (?B . (:foreground "#FABD2F")) - (?C . (:foreground "#98971A")))) + ;; Set colours for priorities + (setq org-priority-faces '((?A . (:foreground "#FB4934")) + (?B . (:foreground "#FABD2F")) + (?C . (:foreground "#98971A")))) - ;; Open agenda in current window - (setq org-agenda-window-setup 'current-window) + ;; Open agenda in current window + (setq org-agenda-window-setup 'current-window) - ;; Set default first day of agenda - (setq org-agenda-start-day nil) - (setq org-agenda-start-on-weekday 1) - (setq org-agenda-span 7) + ;; Set default first day of agenda + (setq org-agenda-start-day nil) + (setq org-agenda-start-on-weekday 1) + (setq org-agenda-span 7) - (setq org-agenda-prefix-format - '((agenda . " %?-12t% s") - (todo . "") ;; Don't show the filename for reading agenda - (tags . " %-12:c") - (search . " %-12:c")) - ) - ) + (setq org-agenda-prefix-format + '((agenda . " %?-12t% s") + (todo . "") ;; Don't show the filename for reading agenda + (tags . " %-12:c") + (search . " %-12:c")) + ) + ) #+end_src Org Agenda Custom Views #+begin_src emacs-lisp - (after! org-agenda - (defun tdh-org-agenda-skip-scheduled () - (org-agenda-skip-entry-if 'scheduled 'deadline 'regexp "\n]+>")) +(after! org-agenda + (defun tdh-org-agenda-skip-scheduled () + (org-agenda-skip-entry-if 'scheduled 'deadline 'regexp "\n]+>")) - (setq org-agenda-custom-commands - '(("w" "Work" - ((org-ql-block '(and (tags "@work") - (todo "TODO") - (priority "A")) - ((org-ql-block-header "Important TODOs"))) - (org-ql-block '(and (tags "@work") - (todo "TODO") - (priority "B")) - ((org-ql-block-header "TODOs"))) - (org-ql-block '(and (tags "@work") - (todo "TODO") - (priority "C")) - ((org-ql-block-header "Not important TODOs"))))) - ("h" "Home" - ((org-ql-block '(and (tags "@home") - (todo "TODO") - (priority "A")) - ((org-ql-block-header "Things to do"))) - (org-ql-block '(and (tags "@home") - (todo "TODO") - (priority "B")) - ((org-ql-block-header "Things to do"))) - (org-ql-block '(and (tags "@home") - (todo "TODO") - (priority "C")) - ((org-ql-block-header "Things to do"))))) - ("q" "Questions to ask" - ((org-ql-block '(and (todo "QUES") - (tags "@christophe")) - ((org-ql-block-header "Questions to Christophe"))) - (org-ql-block '(and (todo "QUES") - (tags "@veijo")) - ((org-ql-block-header "Questions to Veijo"))) - (org-ql-block '(and (todo "QUES") - (not (tags "@veijo" "@christophe"))) - ((org-ql-block-header "Other Questions"))))) - ("R" "Already read Articles and Books" - ((org-ql-block '(and (todo "DONE") - (level 1) - (tags "article" "inproceedings" "techreport" "inbook")) - ((org-ql-block-header "Articles"))) - (org-ql-block '(and (todo "DONE") - (level 1) - (tags "book")) - ((org-ql-block-header "Books"))) - (org-ql-block '(and (todo "DONE") - (level 1) - (tags "phdthesis")) - ((org-ql-block-header "Phd Thesis"))) - (org-ql-block '(and (todo "DONE") - (level 1) - (not (tags "article" "inproceedings" "techreport" "inbook" "book" "phdthesis"))) - ((org-ql-block-header "Other Things")))) - ((org-agenda-files '("~/Cloud/brain/")))) - ("r" "Articles and Books to read" - ((org-ql-block '(and (todo "READ") - (level 1) - (tags "article" "inproceedings" "techreport" "inbook")) - ((org-ql-block-header "Article to Read"))) - (org-ql-block '(and (todo "READ") - (level 1) - (tags "book")) - ((org-ql-block-header "Books to Read"))) - (org-ql-block '(and (todo "READ") - (level 1) - (tags "phdthesis")) - ((org-ql-block-header "Phd Thesis to Read"))) - (org-ql-block '(and (todo "READ") - (level 1) - (not (tags "article" "inproceedings" "techreport" "inbook" "book" "phdthesis"))) - ((org-ql-block-header "Other Things to Read")))) - ((org-agenda-files '("~/Cloud/brain/"))))) - ) - ) + (setq org-agenda-custom-commands + '(("w" "Work" + ((org-ql-block '(and (tags "@work") + (todo "TODO") + (priority "A")) + ((org-ql-block-header "Important TODOs"))) + (org-ql-block '(and (tags "@work") + (todo "TODO") + (priority "B")) + ((org-ql-block-header "TODOs"))) + (org-ql-block '(and (tags "@work") + (todo "TODO") + (priority "C")) + ((org-ql-block-header "Not important TODOs"))))) + ("h" "Home" + ((org-ql-block '(and (tags "@home") + (todo "TODO") + (priority "A")) + ((org-ql-block-header "Things to do"))) + (org-ql-block '(and (tags "@home") + (todo "TODO") + (priority "B")) + ((org-ql-block-header "Things to do"))) + (org-ql-block '(and (tags "@home") + (todo "TODO") + (priority "C")) + ((org-ql-block-header "Things to do"))))) + ("q" "Questions to ask" + ((org-ql-block '(and (todo "QUES") + (tags "@christophe")) + ((org-ql-block-header "Questions to Christophe"))) + (org-ql-block '(and (todo "QUES") + (tags "@veijo")) + ((org-ql-block-header "Questions to Veijo"))) + (org-ql-block '(and (todo "QUES") + (not (tags "@veijo" "@christophe"))) + ((org-ql-block-header "Other Questions"))))) + ("R" "Already read Articles and Books" + ((org-ql-block '(and (todo "DONE") + (level 1) + (tags "article" "inproceedings" "techreport" "inbook")) + ((org-ql-block-header "Articles"))) + (org-ql-block '(and (todo "DONE") + (level 1) + (tags "book")) + ((org-ql-block-header "Books"))) + (org-ql-block '(and (todo "DONE") + (level 1) + (tags "phdthesis")) + ((org-ql-block-header "Phd Thesis"))) + (org-ql-block '(and (todo "DONE") + (level 1) + (not (tags "article" "inproceedings" "techreport" "inbook" "book" "phdthesis"))) + ((org-ql-block-header "Other Things")))) + ((org-agenda-files '("~/Cloud/brain/")))) + ("r" "Articles and Books to read" + ((org-ql-block '(and (todo "READ") + (level 1) + (tags "article" "inproceedings" "techreport" "inbook")) + ((org-ql-block-header "Article to Read"))) + (org-ql-block '(and (todo "READ") + (level 1) + (tags "book")) + ((org-ql-block-header "Books to Read"))) + (org-ql-block '(and (todo "READ") + (level 1) + (tags "phdthesis")) + ((org-ql-block-header "Phd Thesis to Read"))) + (org-ql-block '(and (todo "READ") + (level 1) + (not (tags "article" "inproceedings" "techreport" "inbook" "book" "phdthesis"))) + ((org-ql-block-header "Other Things to Read")))) + ((org-agenda-files '("~/Cloud/brain/"))))) + ) + ) #+end_src ** Org Fancy Priority #+begin_src emacs-lisp - (use-package! org-fancy-priorities ; priority icons - :hook (org-mode . org-fancy-priorities-mode) - :config (setq org-fancy-priorities-list '("■" "■" "■"))) +(use-package! org-fancy-priorities ; priority icons + :hook (org-mode . org-fancy-priorities-mode) + :config (setq org-fancy-priorities-list '("■" "■" "■"))) #+end_src ** Org Notification based on calendar event https://emacs.stackexchange.com/questions/3844/good-methods-for-setting-up-alarms-audio-visual-triggered-by-org-mode-events #+begin_src emacs-lisp - (after! org-agenda - (setq appt-message-warning-time 5) - (defun tdh-org-agenda-to-appt () - (interactive) - (setq appt-time-msg-list nil) - (org-agenda-to-appt)) +(after! org-agenda + (setq appt-message-warning-time 5) + (defun tdh-org-agenda-to-appt () + (interactive) + (setq appt-time-msg-list nil) + (org-agenda-to-appt)) - (tdh-org-agenda-to-appt) - ; Display appointments as a window manager notification - (setq appt-disp-window-function 'tdh-appt-display) - (setq appt-delete-window-function (lambda () t)) + (tdh-org-agenda-to-appt) + ; Display appointments as a window manager notification + (setq appt-disp-window-function 'tdh-appt-display) + (setq appt-delete-window-function (lambda () t)) - (setq tdh-appt-notification-app (concat (getenv "HOME") "/bin/appt-notification")) - (defun tdh-appt-display (min-to-app new-time msg) - (if (atom min-to-app) - (start-process "tdh-appt-notification-app" nil tdh-appt-notification-app min-to-app msg) - (dolist (i (number-sequence 0 (1- (length min-to-app)))) - (start-process "tdh-appt-notification-app" nil tdh-appt-notification-app (nth i min-to-app) (nth i msg))))) - ) + (setq tdh-appt-notification-app (concat (getenv "HOME") "/bin/appt-notification")) + (defun tdh-appt-display (min-to-app new-time msg) + (if (atom min-to-app) + (start-process "tdh-appt-notification-app" nil tdh-appt-notification-app min-to-app msg) + (dolist (i (number-sequence 0 (1- (length min-to-app)))) + (start-process "tdh-appt-notification-app" nil tdh-appt-notification-app (nth i min-to-app) (nth i msg))))) + ) #+end_src *** appt-notification script #+begin_src bash :tangle ~/.config/doom/bin/appt-notification :shebang "#!/usr/bin/env bash" :comments none :mkdirp yes - TIME="$1"TODO - MSG="$2" +TIME="$1"TODO +MSG="$2" - dunstify --replace=85401 "Event in $TIME minutes" "$MSG" +dunstify --replace=85401 "Event in $TIME minutes" "$MSG" #+end_src ** Org Structure Template #+begin_src emacs-lisp - (after! org - (require 'org-tempo) - (setq org-structure-template-alist - '(("c" . "center") - ("C" . "comment") - ("mm" . "src matlab") - ("mf" . "src matlab :exports none") - ("mv" . "src matlab :results value replace :exports none :tangle no") - ("l" . "src emacs-lisp") - ("q" . "quote") - ("s" . "src") - ("ba" . "answer") - ("bd" . "definition") - ("be" . "exampl") - ("bx" . "exercice") - ("bq" . "question") - ("bs" . "summary") - ("bS" . "seealso") - ("bh" . "hint") - ("bn" . "note") - ("bi" . "important") - ("bc" . "caution") - ("bw" . "warning") - )) - ) +(after! org + (require 'org-tempo) + (setq org-structure-template-alist + '(("c" . "center") + ("C" . "comment") + ("mm" . "src matlab") + ("mf" . "src matlab :exports none") + ("mv" . "src matlab :results value replace :exports none :tangle no") + ("l" . "src emacs-lisp") + ("q" . "quote") + ("s" . "src") + ("ba" . "answer") + ("bd" . "definition") + ("be" . "exampl") + ("bx" . "exercice") + ("bq" . "question") + ("bs" . "summary") + ("bS" . "seealso") + ("bh" . "hint") + ("bn" . "note") + ("bi" . "important") + ("bc" . "caution") + ("bw" . "warning") + )) +) #+end_src ** Org Capture @@ -688,168 +688,168 @@ Documentation: - Capture protocol: https://orgmode.org/manual/capture-protocol.html #+begin_src emacs-lisp - (after! org - (setq org-capture-templates - (quote (("t" ; key - "Todo" ; name - entry ; type - (file+headline "~/Cloud/org/work-notebook.org" "Inbox") ; target - "** TODO %?\n%U\n" ; template - ) - ("M" ; key - "Meeting" ; name - entry ; type - (file+headline "~/Cloud/org/work-notebook.org" "Meetings") ; target - "** %?\n%(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n" ; template - ) - ("m" ; key - "Mail" ; name - entry ; type - (file+headline "~/Cloud/org/work-notebook.org" "Mails") ; target - "** TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n" ; template - ) - ("r" ; key - "Reference" ; name - entry ; type - (file+headline "~/Cloud/org/inbox-ereader.org" "Things to Read") ; target - "** TODO [#B] %?\n" ; template - ) - ("pm" - "Org-Protocol Mail" - entry - (file+headline "~/Cloud/org/work-notebook.org" "Mails") - "* MAIL %:description [[message:%:link][link]]\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n\n" - :immediate-finish t - ) - ("pu" - "Org-Protocol Url" - entry - (file+headline "~/Cloud/org/work-notebook.org" "Inbox") - "* [[%:link][%:description]]\nCaptured On: %U\n\n" - :immediate-finish t - ) - ("pt" - "Org-Protocol text" - entry - (file+headline "~/Cloud/org/work-notebook.org" "Inbox") - "* %:description\nSource: %:link\nCaptured On: %U\n\n#+begin_quote\n%i\n#+end_quote\n\n" - :immediate-finish t - ) - ))) - ) +(after! org + (setq org-capture-templates + (quote (("t" ; key + "Todo" ; name + entry ; type + (file+headline "~/Cloud/org/work-notebook.org" "Inbox") ; target + "** TODO %?\n%U\n" ; template + ) + ("M" ; key + "Meeting" ; name + entry ; type + (file+headline "~/Cloud/org/work-notebook.org" "Meetings") ; target + "** %?\n%(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n" ; template + ) + ("m" ; key + "Mail" ; name + entry ; type + (file+headline "~/Cloud/org/work-notebook.org" "Mails") ; target + "** TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n" ; template + ) + ("r" ; key + "Reference" ; name + entry ; type + (file+headline "~/Cloud/org/inbox-ereader.org" "Things to Read") ; target + "** TODO [#B] %?\n" ; template + ) + ("pm" + "Org-Protocol Mail" + entry + (file+headline "~/Cloud/org/work-notebook.org" "Mails") + "* MAIL %:description [[message:%:link][link]]\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n\n" + :immediate-finish t + ) + ("pu" + "Org-Protocol Url" + entry + (file+headline "~/Cloud/org/work-notebook.org" "Inbox") + "* [[%:link][%:description]]\nCaptured On: %U\n\n" + :immediate-finish t + ) + ("pt" + "Org-Protocol text" + entry + (file+headline "~/Cloud/org/work-notebook.org" "Inbox") + "* %:description\nSource: %:link\nCaptured On: %U\n\n#+begin_quote\n%i\n#+end_quote\n\n" + :immediate-finish t + ) + ))) + ) #+end_src ** Org Export Basic configuration: #+begin_src emacs-lisp - (after! org - ;; How many levels of headline to export - (setq org-export-headline-levels 4) +(after! org + ;; How many levels of headline to export + (setq org-export-headline-levels 4) - ;; Authorize BIND to set local variables - (setq org-export-allow-bind-keywords t) + ;; Authorize BIND to set local variables + (setq org-export-allow-bind-keywords t) - ;; Use doc instead of odt - (setq org-odt-preferred-output-format "doc") - ) + ;; Use doc instead of odt + (setq org-odt-preferred-output-format "doc") + ) #+end_src Some defaults: #+begin_src emacs-lisp - (after! org - (setq org-export-with-author t) - (setq org-export-with-creator nil) - (setq org-export-with-date t) - (setq org-export-with-toc t) - (setq org-export-with-drawers nil) - (setq org-export-with-sub-superscripts nil) - (setq org-export-with-todo-keywords nil) - ) +(after! org + (setq org-export-with-author t) + (setq org-export-with-creator nil) + (setq org-export-with-date t) + (setq org-export-with-toc t) + (setq org-export-with-drawers nil) + (setq org-export-with-sub-superscripts nil) + (setq org-export-with-todo-keywords nil) + ) #+end_src Do not export headline with the =:ignore:= tag: #+begin_src emacs-lisp - ;; Used to not export headings with :ignore: tag - (after! org - (require 'ox-extra) - (ox-extras-activate '(ignore-headlines))) +;; Used to not export headings with :ignore: tag +(after! org + (require 'ox-extra) + (ox-extras-activate '(ignore-headlines))) #+end_src ** HTML Export *** HTML Defaults #+begin_src emacs-lisp - (after! org - (setq org-html-head "") - (setq org-html-head-extra "") +(after! org + (setq org-html-head "") + (setq org-html-head-extra "") - (setq org-html-head-include-default-style nil) - (setq org-html-head-include-scripts nil) + (setq org-html-head-include-default-style nil) + (setq org-html-head-include-scripts nil) - (setq org-html-viewport nil) + (setq org-html-viewport nil) - (setq org-html-html5-fancy t) - (setq org-html-doctype "xhtml-strict") + (setq org-html-html5-fancy t) + (setq org-html-doctype "xhtml-strict") - (setq org-html-wrap-src-lines nil) + (setq org-html-wrap-src-lines nil) - ;; Export with css class instead of inline css - (setq org-html-htmlize-output-type 'css) - ) + ;; Export with css class instead of inline css + (setq org-html-htmlize-output-type 'css) + ) #+end_src *** Footnotes #+begin_src emacs-lisp - (after! org - (setq org-html-footnotes-section - "
    \n

    %s

    \n
    \n%s\n
    \n
    ")) +(after! org + (setq org-html-footnotes-section + "
    \n

    %s

    \n
    \n%s\n
    \n
    ")) #+end_src *** MathJax #+begin_src emacs-lisp - (after! org - (setq org-html-mathjax-template - " - ") +(after! org + (setq org-html-mathjax-template + " + ") - (setq org-html-mathjax-options - '((path "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js" ) - (scale "1") - (autonumber "ams") - (tagindent ".8em") - (tagside "right"))) - ) + (setq org-html-mathjax-options + '((path "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js" ) + (scale "1") + (autonumber "ams") + (tagindent ".8em") + (tagside "right"))) + ) #+end_src *** MP4 Video - =video= link #+begin_src emacs-lisp - (defun org-video-link-export (path desc backend) - (let ((ext (file-name-extension path))) - (cond - ((eq 'html backend) - (format "" ext path)) - ;; fall-through case for everything else - (t - path)))) +(defun org-video-link-export (path desc backend) + (let ((ext (file-name-extension path))) + (cond + ((eq 'html backend) + (format "" ext path)) + ;; fall-through case for everything else + (t + path)))) - (after! org - (org-link-set-parameters "video" :export 'org-video-link-export) +(after! org + (org-link-set-parameters "video" :export 'org-video-link-export) - (org-export-string-as "video:xxx.mp4" 'html t) - ) + (org-export-string-as "video:xxx.mp4" 'html t) + ) #+end_src *** TODO Ensuring useful HTML Anchors @@ -859,623 +859,623 @@ Do not export headline with the =:ignore:= tag: This is not working #+begin_src emacs-lisp :tangle no - (define-minor-mode unpackaged/org-export-html-with-useful-ids-mode - "Attempt to export Org as HTML with useful link IDs. - Instead of random IDs like \"#orga1b2c3\", use heading titles, - made unique when necessary." - :global t - (if unpackaged/org-export-html-with-useful-ids-mode - (advice-add #'org-export-get-reference :override #'unpackaged/org-export-get-reference) - (advice-remove #'org-export-get-reference #'unpackaged/org-export-get-reference))) +(define-minor-mode unpackaged/org-export-html-with-useful-ids-mode + "Attempt to export Org as HTML with useful link IDs. +Instead of random IDs like \"#orga1b2c3\", use heading titles, +made unique when necessary." + :global t + (if unpackaged/org-export-html-with-useful-ids-mode + (advice-add #'org-export-get-reference :override #'unpackaged/org-export-get-reference) + (advice-remove #'org-export-get-reference #'unpackaged/org-export-get-reference))) - (defun unpackaged/org-export-get-reference (datum info) - "Like `org-export-get-reference', except uses heading titles instead of random numbers." - (let ((cache (plist-get info :internal-references))) - (or (car (rassq datum cache)) - (let* ((crossrefs (plist-get info :crossrefs)) - (cells (org-export-search-cells datum)) - ;; Preserve any pre-existing association between - ;; a search cell and a reference, i.e., when some - ;; previously published document referenced a location - ;; within current file (see - ;; `org-publish-resolve-external-link'). - ;; - ;; However, there is no guarantee that search cells are - ;; unique, e.g., there might be duplicate custom ID or - ;; two headings with the same title in the file. - ;; - ;; As a consequence, before re-using any reference to - ;; an element or object, we check that it doesn't refer - ;; to a previous element or object. - (new (or (cl-some - (lambda (cell) - (let ((stored (cdr (assoc cell crossrefs)))) - (when stored - (let ((old (org-export-format-reference stored))) - (and (not (assoc old cache)) stored))))) - cells) - (when (org-element-property :raw-value datum) - ;; Heading with a title - (unpackaged/org-export-new-named-reference datum cache)) - (when (member (car datum) '(src-block table example fixed-width property-drawer)) - ;; Nameable elements - (unpackaged/org-export-new-named-reference datum cache)) - ;; NOTE: This probably breaks some Org Export - ;; feature, but if it does what I need, fine. - (org-export-format-reference - (org-export-new-reference cache)))) - (reference-string new)) - ;; Cache contains both data already associated to - ;; a reference and in-use internal references, so as to make - ;; unique references. - (dolist (cell cells) (push (cons cell new) cache)) - ;; Retain a direct association between reference string and - ;; DATUM since (1) not every object or element can be given - ;; a search cell (2) it permits quick lookup. - (push (cons reference-string datum) cache) - (plist-put info :internal-references cache) - reference-string)))) +(defun unpackaged/org-export-get-reference (datum info) + "Like `org-export-get-reference', except uses heading titles instead of random numbers." + (let ((cache (plist-get info :internal-references))) + (or (car (rassq datum cache)) + (let* ((crossrefs (plist-get info :crossrefs)) + (cells (org-export-search-cells datum)) + ;; Preserve any pre-existing association between + ;; a search cell and a reference, i.e., when some + ;; previously published document referenced a location + ;; within current file (see + ;; `org-publish-resolve-external-link'). + ;; + ;; However, there is no guarantee that search cells are + ;; unique, e.g., there might be duplicate custom ID or + ;; two headings with the same title in the file. + ;; + ;; As a consequence, before re-using any reference to + ;; an element or object, we check that it doesn't refer + ;; to a previous element or object. + (new (or (cl-some + (lambda (cell) + (let ((stored (cdr (assoc cell crossrefs)))) + (when stored + (let ((old (org-export-format-reference stored))) + (and (not (assoc old cache)) stored))))) + cells) + (when (org-element-property :raw-value datum) + ;; Heading with a title + (unpackaged/org-export-new-named-reference datum cache)) + (when (member (car datum) '(src-block table example fixed-width property-drawer)) + ;; Nameable elements + (unpackaged/org-export-new-named-reference datum cache)) + ;; NOTE: This probably breaks some Org Export + ;; feature, but if it does what I need, fine. + (org-export-format-reference + (org-export-new-reference cache)))) + (reference-string new)) + ;; Cache contains both data already associated to + ;; a reference and in-use internal references, so as to make + ;; unique references. + (dolist (cell cells) (push (cons cell new) cache)) + ;; Retain a direct association between reference string and + ;; DATUM since (1) not every object or element can be given + ;; a search cell (2) it permits quick lookup. + (push (cons reference-string datum) cache) + (plist-put info :internal-references cache) + reference-string)))) - (defun unpackaged/org-export-new-named-reference (datum cache) - "Return new reference for DATUM that is unique in CACHE." - (cl-macrolet ((inc-suffixf (place) - `(progn - (string-match (rx bos - (minimal-match (group (1+ anything))) - (optional "--" (group (1+ digit))) - eos) - ,place) - ;; HACK: `s1' instead of a gensym. - (-let* (((s1 suffix) (list (match-string 1 ,place) - (match-string 2 ,place))) - (suffix (if suffix - (string-to-number suffix) - 0))) - (setf ,place (format "%s--%s" s1 (cl-incf suffix))))))) - (let* ((headline-p (eq (car datum) 'headline)) - (title (if headline-p - (org-element-property :raw-value datum) - (or (org-element-property :name datum) - (concat (org-element-property :raw-value - (org-element-property :parent - (org-element-property :parent datum))))))) - ;; get ascii-only form of title without needing percent-encoding - (ref (concat (org-reference-contraction (substring-no-properties title)) - (unless (or headline-p (org-element-property :name datum)) - (concat "," - (pcase (car datum) - ('src-block "code") - ('example "example") - ('fixed-width "mono") - ('property-drawer "properties") - (_ (symbol-name (car datum)))) - "--1")))) - (parent (when headline-p (org-element-property :parent datum)))) - (while (--any (equal ref (car it)) - cache) - ;; Title not unique: make it so. - (if parent - ;; Append ancestor title. - (setf title (concat (org-element-property :raw-value parent) - "--" title) - ;; get ascii-only form of title without needing percent-encoding - ref (org-reference-contraction (substring-no-properties title)) - parent (when headline-p (org-element-property :parent parent))) - ;; No more ancestors: add and increment a number. - (inc-suffixf ref))) - ref))) +(defun unpackaged/org-export-new-named-reference (datum cache) + "Return new reference for DATUM that is unique in CACHE." + (cl-macrolet ((inc-suffixf (place) + `(progn + (string-match (rx bos + (minimal-match (group (1+ anything))) + (optional "--" (group (1+ digit))) + eos) + ,place) + ;; HACK: `s1' instead of a gensym. + (-let* (((s1 suffix) (list (match-string 1 ,place) + (match-string 2 ,place))) + (suffix (if suffix + (string-to-number suffix) + 0))) + (setf ,place (format "%s--%s" s1 (cl-incf suffix))))))) + (let* ((headline-p (eq (car datum) 'headline)) + (title (if headline-p + (org-element-property :raw-value datum) + (or (org-element-property :name datum) + (concat (org-element-property :raw-value + (org-element-property :parent + (org-element-property :parent datum))))))) + ;; get ascii-only form of title without needing percent-encoding + (ref (concat (org-reference-contraction (substring-no-properties title)) + (unless (or headline-p (org-element-property :name datum)) + (concat "," + (pcase (car datum) + ('src-block "code") + ('example "example") + ('fixed-width "mono") + ('property-drawer "properties") + (_ (symbol-name (car datum)))) + "--1")))) + (parent (when headline-p (org-element-property :parent datum)))) + (while (--any (equal ref (car it)) + cache) + ;; Title not unique: make it so. + (if parent + ;; Append ancestor title. + (setf title (concat (org-element-property :raw-value parent) + "--" title) + ;; get ascii-only form of title without needing percent-encoding + ref (org-reference-contraction (substring-no-properties title)) + parent (when headline-p (org-element-property :parent parent))) + ;; No more ancestors: add and increment a number. + (inc-suffixf ref))) + ref))) - (add-hook 'org-load-hook #'unpackaged/org-export-html-with-useful-ids-mode) +(add-hook 'org-load-hook #'unpackaged/org-export-html-with-useful-ids-mode) #+end_src *** TODO Folded Drawers Adapt this from https://github.com/alhassy/emacs.d to do something similar for source blocks. #+begin_src emacs-lisp :tangle no - (defun my/org-drawer-format (name contents) - "Export to HTML the drawers named with prefix ‘fold_’, ignoring case. +(defun my/org-drawer-format (name contents) + "Export to HTML the drawers named with prefix ‘fold_’, ignoring case. - The resulting drawer is a ‘code-details’ and so appears folded; - the user clicks it to see the information therein. - Henceforth, these are called ‘fold drawers’. +The resulting drawer is a ‘code-details’ and so appears folded; +the user clicks it to see the information therein. +Henceforth, these are called ‘fold drawers’. - Drawers without such a prefix may be nonetheless exported if their - body contains ‘:export: t’ ---this switch does not appear in the output. - Thus, we are biased to generally not exporting non-fold drawers. +Drawers without such a prefix may be nonetheless exported if their +body contains ‘:export: t’ ---this switch does not appear in the output. +Thus, we are biased to generally not exporting non-fold drawers. - One may suspend export of fold drawers by having ‘:export: nil’ - in their body definition. +One may suspend export of fold drawers by having ‘:export: nil’ +in their body definition. - Fold drawers naturally come with a title. - Either it is specfied in the drawer body by ‘:title: ⋯’, - or otherwise the drawer's name is used with all underscores replaced - by spaces. - " - (let* ((contents′ (replace-regexp-in-string ":export:.*\n?" "" contents)) - (fold? (s-prefix? "fold_" name 'ignore-case)) - (export? (string-match ":export:\s+t" contents)) - (not-export? (string-match ":export:\s+nil" contents)) - (title′ (and (string-match ":title:\\(.*\\)\n" contents) - (match-string 1 contents)))) +Fold drawers naturally come with a title. +Either it is specfied in the drawer body by ‘:title: ⋯’, +or otherwise the drawer's name is used with all underscores replaced +by spaces. +" + (let* ((contents′ (replace-regexp-in-string ":export:.*\n?" "" contents)) + (fold? (s-prefix? "fold_" name 'ignore-case)) + (export? (string-match ":export:\s+t" contents)) + (not-export? (string-match ":export:\s+nil" contents)) + (title′ (and (string-match ":title:\\(.*\\)\n" contents) + (match-string 1 contents)))) - ;; Ensure we have a title. - (unless title′ (setq title′ (s-join " " (cdr (s-split "_" name))))) + ;; Ensure we have a title. + (unless title′ (setq title′ (s-join " " (cdr (s-split "_" name))))) - ;; Output - (cond - ((and export? (not fold?)) contents′) - (not-export? nil) - (fold? - (thread-last contents′ - (replace-regexp-in-string ":title:.*\n" "") - (format "
    - %s - %s
    " title′)))))) + ;; Output + (cond + ((and export? (not fold?)) contents′) + (not-export? nil) + (fold? + (thread-last contents′ + (replace-regexp-in-string ":title:.*\n" "") + (format "
    + %s + %s
    " title′)))))) - (setq org-html-format-drawer-function 'my/org-drawer-format) +(setq org-html-format-drawer-function 'my/org-drawer-format) #+end_src ** Org LaTeX *** LaTeX Fragments #+begin_src emacs-lisp - (after! org - ;; Highligh latex parts in org mode - (setq org-highlight-latex-and-related '(latex script entities)) +(after! org + ;; Highligh latex parts in org mode + (setq org-highlight-latex-and-related '(latex script entities)) - ;; Use F9 to globally generate all the latex fragments - (map! :map org-mode-map - :n "" - (lambda () (interactive) (org-preview-latex-fragment 16))) + ;; Use F9 to globally generate all the latex fragments + (map! :map org-mode-map + :n "" + (lambda () (interactive) (org-preview-latex-fragment 16))) - ;; Put all the preview images in some directory - (setq org-preview-latex-image-directory "~/.ltximg/") + ;; Put all the preview images in some directory + (setq org-preview-latex-image-directory "~/.ltximg/") - ;; Define backends to preview LaTeX fragments - (setq org-preview-latex-process-alist '((imagemagick - :programs ("pdflatex" "convert") - :description "pdf > png" - :message "you need to install the programs: pdflatex and imagemagick." - :image-input-type "pdf" - :image-output-type "png" - :image-size-adjust (1.0 . 1.0) - :latex-compiler ("pdflatex -interaction nonstopmode -output-directory %o %f") - :image-converter ("convert -density %D -trim -antialias %f -quality 100 %O")) - (dvipng - :programs ("latex" "dvipng") - :description "dvi > png" - :message "you need to install the programs: latex and dvipng." - :image-input-type "dvi" - :image-output-type "png" - :image-size-adjust (0.4 . 0.4) - :latex-compiler ("latex -interaction nonstopmode -output-directory %o %f") - :image-converter ("dvipng -D %D -T tight -o %O %f")) - (dvisvgm - :programs ("pdflatex" "dvisvgm") - :description "dvi > svg" - :message "you need to install the programs: latex and dvisvgm." - :image-input-type "dvi" - :image-output-type "svg" - :image-size-adjust (0.6 . 0.6) - :latex-compiler ("latex -interaction nonstopmode -output-directory %o %f") - :image-converter ("dvisvgm %f -n -b min -c %S -o %O")) - )) + ;; Define backends to preview LaTeX fragments + (setq org-preview-latex-process-alist '((imagemagick + :programs ("pdflatex" "convert") + :description "pdf > png" + :message "you need to install the programs: pdflatex and imagemagick." + :image-input-type "pdf" + :image-output-type "png" + :image-size-adjust (1.0 . 1.0) + :latex-compiler ("pdflatex -interaction nonstopmode -output-directory %o %f") + :image-converter ("convert -density %D -trim -antialias %f -quality 100 %O")) + (dvipng + :programs ("latex" "dvipng") + :description "dvi > png" + :message "you need to install the programs: latex and dvipng." + :image-input-type "dvi" + :image-output-type "png" + :image-size-adjust (0.4 . 0.4) + :latex-compiler ("latex -interaction nonstopmode -output-directory %o %f") + :image-converter ("dvipng -D %D -T tight -o %O %f")) + (dvisvgm + :programs ("pdflatex" "dvisvgm") + :description "dvi > svg" + :message "you need to install the programs: latex and dvisvgm." + :image-input-type "dvi" + :image-output-type "svg" + :image-size-adjust (0.6 . 0.6) + :latex-compiler ("latex -interaction nonstopmode -output-directory %o %f") + :image-converter ("dvisvgm %f -n -b min -c %S -o %O")) + )) - ;; Use imagemagick/dvisvgm to generate png from pdf - (setq org-preview-latex-default-process 'dvisvgm) + ;; Use imagemagick/dvisvgm to generate png from pdf + (setq org-preview-latex-default-process 'dvisvgm) - ;; Don't change the font size for subscripts and superscripts in latex fragments. - ;; This cause the orgmode tables not to be well aligned. - (setq font-latex-fontify-script nil) + ;; Don't change the font size for subscripts and superscripts in latex fragments. + ;; This cause the orgmode tables not to be well aligned. + (setq font-latex-fontify-script nil) - ;; Colors of latex fragments - (setq org-format-latex-options (plist-put org-format-latex-options :foreground 'default)) - (setq org-format-latex-options (plist-put org-format-latex-options :background 'default)) - ) + ;; Colors of latex fragments + (setq org-format-latex-options (plist-put org-format-latex-options :foreground 'default)) + (setq org-format-latex-options (plist-put org-format-latex-options :background 'default)) + ) #+end_src *** LaTeX Classes #+begin_src emacs-lisp - (after! org - ;; Custom classes to use when exporting to latex - (add-to-list 'org-latex-classes - '("beamer" - ,(concat "\\documentclass[presentation]{beamer}\n" - "[DEFAULT-PACKAGES]" - "[PACKAGES]" - "[EXTRA]\n") - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))) - (add-to-list 'org-latex-classes - '("clean-cheatsheet" - "\\documentclass{clean-cheatsheet}" - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}") - ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) - ) - (add-to-list 'org-latex-classes - '("clean-beamer" - "\\documentclass{clean-beamer}" - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}") - ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) - ) - (add-to-list 'org-latex-classes - '("cleanreport" - "\\documentclass{cleanreport}" - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}") - ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) - ) - (add-to-list 'org-latex-classes - '("scrartcl" - "\\documentclass{scrartcl}" - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}") - ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) - ) - (add-to-list 'org-latex-classes - '("scrreprt" - "\\documentclass[a4paper, 10pt, DIV=12, parskip=full]{scrreprt}" - ("\\chapter{%s}" . "\\chapter*{%s}") - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}") - ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) - ) - (add-to-list 'org-latex-classes - '("biblioreport" - "\\documentclass{biblioreport}" - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}") - ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) - ) - (add-to-list 'org-latex-classes - '("moderncv" - "\\documentclass{moderncv}" - ("\\section{%s}" . "\\section*{%s}") - ("\\subsection{%s}" . "\\subsection*{%s}") - ("\\subsubsection{%s}" . "\\subsubsection*{%s}") - ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) - ) +(after! org +;; Custom classes to use when exporting to latex +(add-to-list 'org-latex-classes + '("beamer" + ,(concat "\\documentclass[presentation]{beamer}\n" + "[DEFAULT-PACKAGES]" + "[PACKAGES]" + "[EXTRA]\n") + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))) +(add-to-list 'org-latex-classes + '("clean-cheatsheet" + "\\documentclass{clean-cheatsheet}" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) + ) +(add-to-list 'org-latex-classes + '("clean-beamer" + "\\documentclass{clean-beamer}" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) + ) +(add-to-list 'org-latex-classes + '("cleanreport" + "\\documentclass{cleanreport}" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) + ) +(add-to-list 'org-latex-classes + '("scrartcl" + "\\documentclass{scrartcl}" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) + ) +(add-to-list 'org-latex-classes + '("scrreprt" + "\\documentclass[a4paper, 10pt, DIV=12, parskip=full]{scrreprt}" + ("\\chapter{%s}" . "\\chapter*{%s}") + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) + ) +(add-to-list 'org-latex-classes + '("biblioreport" + "\\documentclass{biblioreport}" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) + ) +(add-to-list 'org-latex-classes + '("moderncv" + "\\documentclass{moderncv}" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) + ) - ) +) #+end_src *** Ox Latex Subfigure package #+begin_src emacs-lisp - ;; (use-package! ox-latex-subfigure - ;; :after org - ;; :config (require 'ox-latex-subfigure)) +;; (use-package! ox-latex-subfigure +;; :after org +;; :config (require 'ox-latex-subfigure)) #+end_src #+begin_src emacs-lisp - (use-package! ox-latex-subfigure - :load-path "~/.config/doom/packages/ox-latex-subfigure/" - :config (require 'ox-latex-subfigure)) +(use-package! ox-latex-subfigure + :load-path "~/.config/doom/packages/ox-latex-subfigure/" + :config (require 'ox-latex-subfigure)) #+end_src *** Clear page before heading https://emacs.stackexchange.com/questions/30575/adding-latex-newpage-before-a-heading/30892 #+begin_src emacs-lisp - (after! org - (defun tdh-get-headline-string-element (headline backend info) - (let ((prop-point (next-property-change 0 headline))) - (if prop-point (plist-get (text-properties-at prop-point headline) :parent)))) +(after! org + (defun tdh-get-headline-string-element (headline backend info) + (let ((prop-point (next-property-change 0 headline))) + (if prop-point (plist-get (text-properties-at prop-point headline) :parent)))) - (defun tdh-ensure-latex-clearpage (headline backend info) - (when (org-export-derived-backend-p backend 'latex) - (let ((elmnt (tdh-get-headline-string-element headline backend info))) - (when (and elmnt (org-element-property :CLEARPAGE elmnt)) - (concat "\\clearpage\n" headline))))) + (defun tdh-ensure-latex-clearpage (headline backend info) + (when (org-export-derived-backend-p backend 'latex) + (let ((elmnt (tdh-get-headline-string-element headline backend info))) + (when (and elmnt (org-element-property :CLEARPAGE elmnt)) + (concat "\\clearpage\n" headline))))) - (add-to-list 'org-export-filter-headline-functions - 'tdh-ensure-latex-clearpage) - ) + (add-to-list 'org-export-filter-headline-functions + 'tdh-ensure-latex-clearpage) + ) #+end_src *** TODO Default added packages #+begin_src emacs-lisp - (after! org - (setq org-latex-default-packages-alist - '(("AUTO" "inputenc" t ("pdflatex")) ;; for basic font and character selection - ("T1" "fontenc" t ("pdflatex")) ;; for basic font and character selection - ("" "graphicx" t) ;; for including images - ("" "grffile" t) ;; allow periods and spaces in graphics file names - ("" "longtable" nil) ;; For multipage tables - ("" "wrapfig" nil) ;; for figure placement - ("" "rotating" nil) ;; for sideways figures and tables - ("normalem" "ulem" t) ;; for underline and strike-through - ("" "amsmath" t) ;; for subscript and superscript and math environments - ("" "textcomp" t) ;; for various symbols - ("" "amssymb" t) ;; for various symbols - ("" "capt-of" nil) ;; for captions outside of floats - ("" "hyperref" nil)) ;; for cross references - ) - ) +(after! org + (setq org-latex-default-packages-alist + '(("AUTO" "inputenc" t ("pdflatex")) ;; for basic font and character selection + ("T1" "fontenc" t ("pdflatex")) ;; for basic font and character selection + ("" "graphicx" t) ;; for including images + ("" "grffile" t) ;; allow periods and spaces in graphics file names + ("" "longtable" nil) ;; For multipage tables + ("" "wrapfig" nil) ;; for figure placement + ("" "rotating" nil) ;; for sideways figures and tables + ("normalem" "ulem" t) ;; for underline and strike-through + ("" "amsmath" t) ;; for subscript and superscript and math environments + ("" "textcomp" t) ;; for various symbols + ("" "amssymb" t) ;; for various symbols + ("" "capt-of" nil) ;; for captions outside of floats + ("" "hyperref" nil)) ;; for cross references + ) + ) #+end_src #+begin_src emacs-lisp - (after! org - (add-to-list 'org-latex-packages-alist '("" "siunitx" t)) - (add-to-list 'org-latex-packages-alist '("" "array" t)) - (add-to-list 'org-latex-packages-alist '("" "tabularx" t)) - (add-to-list 'org-latex-packages-alist '("" "booktabs" t)) - (add-to-list 'org-latex-packages-alist '("" "bm" t)) - (add-to-list 'org-latex-packages-alist '("most" "tcolorbox" t)) - ) +(after! org + (add-to-list 'org-latex-packages-alist '("" "siunitx" t)) + (add-to-list 'org-latex-packages-alist '("" "array" t)) + (add-to-list 'org-latex-packages-alist '("" "tabularx" t)) + (add-to-list 'org-latex-packages-alist '("" "booktabs" t)) + (add-to-list 'org-latex-packages-alist '("" "bm" t)) + (add-to-list 'org-latex-packages-alist '("most" "tcolorbox" t)) + ) #+end_src *** Some configurations #+begin_src emacs-lisp - (after! org - ;; Setup default option for image size when exporting to LaTeX - (setq org-latex-image-default-scale "") - (setq org-latex-image-default-width "") - (setq org-latex-image-default-height "") - (setq org-latex-image-default-option "scale=1") +(after! org + ;; Setup default option for image size when exporting to LaTeX + (setq org-latex-image-default-scale "") + (setq org-latex-image-default-width "") + (setq org-latex-image-default-height "") + (setq org-latex-image-default-option "scale=1") - ;; Use define labels instead of automatic generated ones - (setq org-latex-prefer-user-labels t) + ;; Use define labels instead of automatic generated ones + (setq org-latex-prefer-user-labels t) - ;; Captions above the table - (setq org-latex-caption-above '(table)) + ;; Captions above the table + (setq org-latex-caption-above '(table)) - ;; Settings to export code with `minted' instead of `verbatim'. - (setq org-latex-listings 'minted) + ;; Settings to export code with `minted' instead of `verbatim'. + (setq org-latex-listings 'minted) - ;; Set the following as images - (setq org-latex-inline-image-rules '(("file" . "\\.\\(pdf\\|jpeg\\|jpg\\|png\\|ps\\|eps\\|tikz\\|pgf\\|svg\\|gif\\)\\'"))) + ;; Set the following as images + (setq org-latex-inline-image-rules '(("file" . "\\.\\(pdf\\|jpeg\\|jpg\\|png\\|ps\\|eps\\|tikz\\|pgf\\|svg\\|gif\\)\\'"))) - ;; Command used when exporting to pdf - (setq org-latex-pdf-process - '("latexmk -cd -pdflatex=\"pdflatex -synctex=1 -shell-escape -interaction nonstopmode -output-directory %o\" -pdf -bibtex -f %f")) - ) + ;; Command used when exporting to pdf + (setq org-latex-pdf-process + '("latexmk -cd -pdflatex=\"pdflatex -synctex=1 -shell-escape -interaction nonstopmode -output-directory %o\" -pdf -bibtex -f %f")) + ) #+end_src *** Beamer Bold Text #+begin_src emacs-lisp - (after! org - (defun tdh-my-beamer-bold (contents backend info) - (when (eq backend 'beamer) - (replace-regexp-in-string - (concat "\\`\\\\" "[A-Za-z0-9]+") ;; If not, orgmode is crazy... - "\\\\textbf" - contents))) +(after! org + (defun tdh-my-beamer-bold (contents backend info) + (when (eq backend 'beamer) + (replace-regexp-in-string + (concat "\\`\\\\" "[A-Za-z0-9]+") ;; If not, orgmode is crazy... + "\\\\textbf" + contents))) - (add-to-list 'org-export-filter-bold-functions 'tdh-my-beamer-bold) - ) + (add-to-list 'org-export-filter-bold-functions 'tdh-my-beamer-bold) + ) #+end_src Special Environments - [ ] Make some comment those special environments #+begin_src emacs-lisp - (after! org - (add-to-list 'org-beamer-environments-extra - '("cbox" ;; Name of environment - "m" ;; Selection key - "\\onslide%a{\\begin{cbox}[%h]%O" - "\\end{cbox}}\\vspace{0.5em}")) - (add-to-list 'org-beamer-environments-extra - '("csubbox" ;; Name of environment - "M" ;; Selection key - "\\onslide%a{\\tcbsubtitle{%h}" - "}")) - ) +(after! org + (add-to-list 'org-beamer-environments-extra + '("cbox" ;; Name of environment + "m" ;; Selection key + "\\onslide%a{\\begin{cbox}[%h]%O" + "\\end{cbox}}\\vspace{0.5em}")) + (add-to-list 'org-beamer-environments-extra + '("csubbox" ;; Name of environment + "M" ;; Selection key + "\\onslide%a{\\tcbsubtitle{%h}" + "}")) + ) #+end_src *** TODO Custom Export - Add Page and Label for LaTeX export https://emacs.stackexchange.com/questions/156/emacs-function-to-convert-an-arbitrary-org-property-into-an-arbitrary-string-na?rq=1 #+begin_src emacs-lisp :tangle no - (defcustom tdh-org-property-mapping - '((latex ("CUSTOM_PAGE" . tdh-insert-org-page-latex) - ("CUSTOM_LABEL" . tdh-insert-org-label-latex))) - "List of mappings from org property to arbitrary strings. - Each element is a list: - (BACKEND (PROPERTY1 . FUNCTION1) (PROPERTY2 . FUNCTION2) ...) - FUNCTION are functions which get called with a single - argument (the value of PROPERTY) and are responsible for doing - whatever should be done." - :type '(repeat (cons symbol (repeat (cons string string))))) +(defcustom tdh-org-property-mapping + '((latex ("CUSTOM_PAGE" . tdh-insert-org-page-latex) + ("CUSTOM_LABEL" . tdh-insert-org-label-latex))) + "List of mappings from org property to arbitrary strings. +Each element is a list: + (BACKEND (PROPERTY1 . FUNCTION1) (PROPERTY2 . FUNCTION2) ...) +FUNCTION are functions which get called with a single +argument (the value of PROPERTY) and are responsible for doing +whatever should be done." + :type '(repeat (cons symbol (repeat (cons string string))))) #+end_src #+begin_src emacs-lisp :tangle no - (defun tdh-replace-org-property (backend) - "Convert org properties using `tdh-org-property-mapping'. - Lookup BACKEND in `tdh-org-property-mapping' for a list of - (PROPERTY REPLACEMENT). For each healine being exported, if it has a - PROPERTY listed insert a string immediately after the healine given by - (format REPLACEMENT PROPERTY-VALUE)" - (let ((map (cdr (assoc backend tdh-org-property-mapping))) - value replacement) - (when map - (org-map-entries - (lambda () - (dolist (it map) - (save-excursion - (when (setq value (org-entry-get (point) (car it))) - (funcall (cdr it) value))))))))) +(defun tdh-replace-org-property (backend) + "Convert org properties using `tdh-org-property-mapping'. +Lookup BACKEND in `tdh-org-property-mapping' for a list of +(PROPERTY REPLACEMENT). For each healine being exported, if it has a +PROPERTY listed insert a string immediately after the healine given by + (format REPLACEMENT PROPERTY-VALUE)" + (let ((map (cdr (assoc backend tdh-org-property-mapping))) + value replacement) + (when map + (org-map-entries + (lambda () + (dolist (it map) + (save-excursion + (when (setq value (org-entry-get (point) (car it))) + (funcall (cdr it) value))))))))) - (add-hook 'org-export-before-processing-hook #'tdh-replace-org-property) +(add-hook 'org-export-before-processing-hook #'tdh-replace-org-property) #+end_src #+begin_src emacs-lisp :tangle no - (defun tdh-insert-org-label-latex (label) - "Insert \"\\\\label{LABEL}\\n\" after the :PROPERTY: drawer." - (search-forward-regexp org-property-end-re) - (forward-char 1) - (insert (format "\\label{%s}\n" label))) - (defun tdh-insert-org-page-latex (page) - "Insert \"\\\\page{PAGE}\\n\" after the :PROPERTY: drawer." - (search-forward-regexp org-property-end-re) - (forward-char 1) - (insert (format "\\page{%s}\n" page))) +(defun tdh-insert-org-label-latex (label) + "Insert \"\\\\label{LABEL}\\n\" after the :PROPERTY: drawer." + (search-forward-regexp org-property-end-re) + (forward-char 1) + (insert (format "\\label{%s}\n" label))) +(defun tdh-insert-org-page-latex (page) + "Insert \"\\\\page{PAGE}\\n\" after the :PROPERTY: drawer." + (search-forward-regexp org-property-end-re) + (forward-char 1) + (insert (format "\\page{%s}\n" page))) #+end_src *** Number Equations https://kitchingroup.cheme.cmu.edu/blog/2016/11/07/Better-equation-numbering-in-LaTeX-fragments-in-org-mode/ #+begin_src emacs-lisp - (after! org - (defun tdh-org-renumber-environment (orig-func &rest args) - "A function to inject numbers in LaTeX fragment previews." - (let ((results '()) - (counter -1) - (numberp)) +(after! org + (defun tdh-org-renumber-environment (orig-func &rest args) + "A function to inject numbers in LaTeX fragment previews." + (let ((results '()) + (counter -1) + (numberp)) - (setq results (loop for (begin . env) in - (org-element-map (org-element-parse-buffer) 'latex-environment - (lambda (env) - (cons - (org-element-property :begin env) - (org-element-property :value env)))) - collect - (cond - ((and (string-match "\\\\begin{equation}" env) - (not (string-match "\\\\tag{" env))) - (incf counter) - (cons begin counter)) - ((string-match "\\\\begin{align}" env) - (prog2 - (incf counter) - (cons begin counter) - (with-temp-buffer - (insert env) - (goto-char (point-min)) - ;; \\ is used for a new line. Each one leads to a number - (incf counter (count-matches "\\\\$")) - ;; unless there are nonumbers. - (goto-char (point-min)) - (decf counter (count-matches "\\nonumber"))))) - (t - (cons begin nil))))) + (setq results (loop for (begin . env) in + (org-element-map (org-element-parse-buffer) 'latex-environment + (lambda (env) + (cons + (org-element-property :begin env) + (org-element-property :value env)))) + collect + (cond + ((and (string-match "\\\\begin{equation}" env) + (not (string-match "\\\\tag{" env))) + (incf counter) + (cons begin counter)) + ((string-match "\\\\begin{align}" env) + (prog2 + (incf counter) + (cons begin counter) + (with-temp-buffer + (insert env) + (goto-char (point-min)) + ;; \\ is used for a new line. Each one leads to a number + (incf counter (count-matches "\\\\$")) + ;; unless there are nonumbers. + (goto-char (point-min)) + (decf counter (count-matches "\\nonumber"))))) + (t + (cons begin nil))))) - (when (setq numberp (cdr (assoc (point) results))) - (setf (car args) - (concat - (format "\\setcounter{equation}{%s}\n" numberp) - (car args))))) + (when (setq numberp (cdr (assoc (point) results))) + (setf (car args) + (concat + (format "\\setcounter{equation}{%s}\n" numberp) + (car args))))) - (apply orig-func args)) + (apply orig-func args)) - (advice-add 'org-create-formula-image :around #'tdh-org-renumber-environment) - ) + (advice-add 'org-create-formula-image :around #'tdh-org-renumber-environment) + ) #+end_src ** LaTeX macro both for LaTeX and HTML export https://www.reddit.com/r/orgmode/comments/7u2n0h/tip_for_defining_latex_macros_for_use_in_both/ #+begin_src emacs-lisp - (after! org - (add-to-list 'org-src-lang-modes '("latex-macros" . latex)) +(after! org + (add-to-list 'org-src-lang-modes '("latex-macros" . latex)) - (defvar org-babel-default-header-args:latex-macros - '((:results . "raw") - (:exports . "results"))) + (defvar org-babel-default-header-args:latex-macros + '((:results . "raw") + (:exports . "results"))) - (defun prefix-all-lines (pre body) - (with-temp-buffer - (insert body) - (string-insert-rectangle (point-min) (point-max) pre) - (buffer-string))) + (defun prefix-all-lines (pre body) + (with-temp-buffer + (insert body) + (string-insert-rectangle (point-min) (point-max) pre) + (buffer-string))) - (defun org-babel-execute:latex-macros (body _params) - (concat - "\n#+begin_export html\n
    \\(\n" - body - "\n\\)
    \n#+end_export\n")) - ) + (defun org-babel-execute:latex-macros (body _params) + (concat + "\n#+begin_export html\n
    \\(\n" + body + "\n\\)
    \n#+end_export\n")) + ) #+end_src ** Org Projects #+begin_src emacs-lisp - (setq org-publish-project-alist - '(("config" - :base-directory "~/.config/literate-dotfiles/" - :publishing-directory "~/.config/literate-dotfiles/docs/" - :recursive nil - :publishing-function org-html-publish-to-html - :auto-sitemap nil - :section-numbers nil - :table-of-contents nil) - ("stewart-simscape" - :base-directory "~/Cloud/thesis/matlab/stewart-simscape/org/" - :base-extension "org" - :publishing-directory "~/Cloud/thesis/matlab/stewart-simscape/docs/" - :author "Dehaeze Thomas" - :email "dehaeze.thomas@gmail.com/" - :recursive nil - :publishing-function org-html-publish-to-html - :auto-preamble t - :auto-sitemap nil - :html-link-up "index.html" - :html-link-home "index.html" - :with-todo-keywords nil - :html-wrap-src-lines nil - :table-of-contents nil) - ("nass-simscape" - :base-directory "~/Cloud/thesis/matlab/nass-simscape/org/" - :base-extension "org" - :publishing-directory "~/Cloud/thesis/matlab/nass-simscape/docs/" - :author "Dehaeze Thomas" - :email "dehaeze.thomas@gmail.com/" - :recursive nil - :publishing-function org-html-publish-to-html - :auto-preamble t - :auto-sitemap nil - :html-link-up "index.html" - :html-link-home "index.html" - :with-todo-keywords nil - :html-wrap-src-lines nil - :table-of-contents nil) - ("tikz-maker" - :base-directory "~/Cloud/tikz/org/" - :base-extension "org" - :publishing-directory "~/Cloud/tikz/docs/" - :author "Dehaeze Thomas" - :email "dehaeze.thomas@gmail.com/" - :recursive nil - :publishing-function org-html-publish-to-html - :auto-preamble t - :auto-sitemap nil - :html-link-up "index.html" - :html-link-home "index.html" - :with-todo-keywords nil - :html-wrap-src-lines nil - :table-of-contents nil))) +(setq org-publish-project-alist + '(("config" + :base-directory "~/.config/literate-dotfiles/" + :publishing-directory "~/.config/literate-dotfiles/docs/" + :recursive nil + :publishing-function org-html-publish-to-html + :auto-sitemap nil + :section-numbers nil + :table-of-contents nil) + ("stewart-simscape" + :base-directory "~/Cloud/thesis/matlab/stewart-simscape/org/" + :base-extension "org" + :publishing-directory "~/Cloud/thesis/matlab/stewart-simscape/docs/" + :author "Dehaeze Thomas" + :email "dehaeze.thomas@gmail.com/" + :recursive nil + :publishing-function org-html-publish-to-html + :auto-preamble t + :auto-sitemap nil + :html-link-up "index.html" + :html-link-home "index.html" + :with-todo-keywords nil + :html-wrap-src-lines nil + :table-of-contents nil) + ("nass-simscape" + :base-directory "~/Cloud/thesis/matlab/nass-simscape/org/" + :base-extension "org" + :publishing-directory "~/Cloud/thesis/matlab/nass-simscape/docs/" + :author "Dehaeze Thomas" + :email "dehaeze.thomas@gmail.com/" + :recursive nil + :publishing-function org-html-publish-to-html + :auto-preamble t + :auto-sitemap nil + :html-link-up "index.html" + :html-link-home "index.html" + :with-todo-keywords nil + :html-wrap-src-lines nil + :table-of-contents nil) + ("tikz-maker" + :base-directory "~/Cloud/tikz/org/" + :base-extension "org" + :publishing-directory "~/Cloud/tikz/docs/" + :author "Dehaeze Thomas" + :email "dehaeze.thomas@gmail.com/" + :recursive nil + :publishing-function org-html-publish-to-html + :auto-preamble t + :auto-sitemap nil + :html-link-up "index.html" + :html-link-home "index.html" + :with-todo-keywords nil + :html-wrap-src-lines nil + :table-of-contents nil))) #+end_src ** Automatically run =startblock= when opening org-mode files #+begin_src emacs-lisp - (after! org - (defun tdh-eval-startblock () - (if (member "startblock" (org-babel-src-block-names)) - (save-excursion - (org-babel-goto-named-src-block "startblock") - (org-babel-execute-src-block)) - nil - ) +(after! org + (defun tdh-eval-startblock () + (if (member "startblock" (org-babel-src-block-names)) + (save-excursion + (org-babel-goto-named-src-block "startblock") + (org-babel-execute-src-block)) + nil ) - - (add-hook 'org-mode-hook 'tdh-eval-startblock) ) + + (add-hook 'org-mode-hook 'tdh-eval-startblock) + ) #+end_src ** Some function @@ -1500,178 +1500,178 @@ http://pragmaticemacs.com/emacs/a-workflow-to-quickly-add-photos-to-org-mode-not - [ ] One function to copy file from =~/Cloud/Photos/= folder (where the pictures from phone are taken) to current directory (and ask for the new name of the picture) and insert org link. #+begin_src emacs-lisp :tangle no - ;; required libraries - (require 'dash) - ;; (require 'swiper) - (require 's) +;; required libraries +(require 'dash) +;; (require 'swiper) +(require 's) - ;; start directory - (defvar tdh-image-dir (expand-file-name "/home/thomas/Pictures")) +;; start directory +(defvar tdh-image-dir (expand-file-name "/home/thomas/Pictures")) - (defun tdh-insert-conference-image () - "Insert image from conference directory, rename and add link in current file. +(defun tdh-insert-conference-image () + "Insert image from conference directory, rename and add link in current file. - The file is taken from a start directory set by `tdh-image-dir' and moved to the current directory, renamed and embedded at the point as an org-mode link. The user is presented with a list of files in the start directory, from which to select the file to move, sorted by most recent first." - (interactive) - (let (file-list target-dir file-list-sorted start-file start-file-full file-ext end-file end-file-base end-file-full file-number) - ;; Clean directories from list but keep times - (setq file-list - (-remove (lambda (x) (nth 1 x)) - (directory-files-and-attributes tdh-image-dir))) +The file is taken from a start directory set by `tdh-image-dir' and moved to the current directory, renamed and embedded at the point as an org-mode link. The user is presented with a list of files in the start directory, from which to select the file to move, sorted by most recent first." + (interactive) + (let (file-list target-dir file-list-sorted start-file start-file-full file-ext end-file end-file-base end-file-full file-number) + ;; Clean directories from list but keep times + (setq file-list + (-remove (lambda (x) (nth 1 x)) + (directory-files-and-attributes tdh-image-dir))) - ;; Get target directory - (setq target-dir (file-name-directory (buffer-file-name))) + ;; Get target directory + (setq target-dir (file-name-directory (buffer-file-name))) - ;; Sort list by most recent - (setq file-list-sorted - (mapcar #'car - (sort file-list - #'(lambda (x y) (time-less-p (nth 6 y) (nth 6 x)))))) + ;; Sort list by most recent + (setq file-list-sorted + (mapcar #'car + (sort file-list + #'(lambda (x y) (time-less-p (nth 6 y) (nth 6 x)))))) - ;; Use ivy to select start-file - (setq start-file (ivy-read - (concat "Move selected file to " target-dir ":") - file-list-sorted - :re-builder #'ivy--regex - :sort nil - :initial-input nil)) + ;; Use ivy to select start-file + (setq start-file (ivy-read + (concat "Move selected file to " target-dir ":") + file-list-sorted + :re-builder #'ivy--regex + :sort nil + :initial-input nil)) - ;; add full path to start file and end-file - (setq start-file-full - (expand-file-name start-file tdh-image-dir)) + ;; add full path to start file and end-file + (setq start-file-full + (expand-file-name start-file tdh-image-dir)) - ;; final file name including path - (setq end-file-full - (expand-file-name start-file target-dir)) + ;; final file name including path + (setq end-file-full + (expand-file-name start-file target-dir)) - ;; rename file - (rename-file start-file-full end-file-full) - (message "moved %s to %s" start-file-full start-file) + ;; rename file + (rename-file start-file-full end-file-full) + (message "moved %s to %s" start-file-full start-file) - ;; insert link - (insert (org-make-link-string (format "file:%s" start-file))) + ;; insert link + (insert (org-make-link-string (format "file:%s" start-file))) - ;; display image - (org-display-inline-images t t))) + ;; display image + (org-display-inline-images t t))) #+end_src ** Render Tables https://www.reddit.com/r/emacs/comments/d3a8or/pretty_org_tables_in_the_buffer_chapter_2_it/ #+begin_src emacs-lisp - (after! org - (defun tdh-render-org-table-at-point () - (interactive) - (save-excursion - (beginning-of-line) - ;; removes the overlay is already there - (if (overlays-at (point)) - (delete-overlay (car (overlays-at (point)))) +(after! org + (defun tdh-render-org-table-at-point () + (interactive) + (save-excursion + (beginning-of-line) + ;; removes the overlay is already there + (if (overlays-at (point)) + (delete-overlay (car (overlays-at (point)))) - (let* ((element-type (org-element-type (org-element-at-point)))) - (if (and (not (eq element-type 'table)) - (not (eq element-type 'table-row))) - (error "not at an org table") + (let* ((element-type (org-element-type (org-element-at-point)))) + (if (and (not (eq element-type 'table)) + (not (eq element-type 'table-row))) + (error "not at an org table") - (while (not (eq 'table (org-element-type (org-element-at-point)))) - (forward-line -1)) - (tdh-render-org-table (org-element-at-point)) - ))))) + (while (not (eq 'table (org-element-type (org-element-at-point)))) + (forward-line -1)) + (tdh-render-org-table (org-element-at-point)) + ))))) - (defun tdh-render-org-table (table) - (interactive) - (let* ((begin (org-element-property :begin table)) - (end (let ((pos (org-element-property :end table))) - (goto-char pos) - (beginning-of-line) - ;; skip possible space after table - (while (not (looking-at " *[|#]")) - (setq pos (point)) - (forward-line -1)) - pos)) - (tabletxt (buffer-substring-no-properties begin end)) - (img (with-temp-buffer - (insert tabletxt) - (mark-whole-buffer) - (org-latex-convert-region-to-latex) - (org-latex-preview) - (goto-char (point-min)) - (overlay-get (car (overlays-at (point))) 'display))) - (overlay (make-overlay begin end))) - (overlay-put overlay 'display img) - (forward-line -1)) - ) - - - (defun tdh-render-org-tables-in-buffer () - (save-excursion - (org-element-map (org-element-parse-buffer) 'table 'tdh-render-org-table))) - - ;; Use F9 to globally generate tables - (map! :map org-mode-map :n "" (lambda () (interactive) (tdh-render-org-table-at-point))) + (defun tdh-render-org-table (table) + (interactive) + (let* ((begin (org-element-property :begin table)) + (end (let ((pos (org-element-property :end table))) + (goto-char pos) + (beginning-of-line) + ;; skip possible space after table + (while (not (looking-at " *[|#]")) + (setq pos (point)) + (forward-line -1)) + pos)) + (tabletxt (buffer-substring-no-properties begin end)) + (img (with-temp-buffer + (insert tabletxt) + (mark-whole-buffer) + (org-latex-convert-region-to-latex) + (org-latex-preview) + (goto-char (point-min)) + (overlay-get (car (overlays-at (point))) 'display))) + (overlay (make-overlay begin end))) + (overlay-put overlay 'display img) + (forward-line -1)) ) + + + (defun tdh-render-org-tables-in-buffer () + (save-excursion + (org-element-map (org-element-parse-buffer) 'table 'tdh-render-org-table))) + + ;; Use F9 to globally generate tables + (map! :map org-mode-map :n "" (lambda () (interactive) (tdh-render-org-table-at-point))) + ) #+end_src ** Org Special Block Extras #+begin_src emacs-lisp - (after! org - (require 'org-special-block-extras) - ) +(after! org + (require 'org-special-block-extras) + ) #+end_src ** Org Inline Task #+begin_src emacs-lisp - (after! org - (require 'org-inlinetask) - ) +(after! org + (require 'org-inlinetask) + ) #+end_src ** Org Links *** Youtube Links #+begin_src emacs-lisp - (after! org - (setq yt-iframe-format - ;; You may want to change your width and height. - (concat "
    ")) +(after! org + (setq yt-iframe-format + ;; You may want to change your width and height. + (concat "
    ")) - (org-add-link-type - "yt" - (lambda (handle) - (browse-url - (concat "https://www.youtube.com/embed/" - handle))) - (lambda (path desc backend) - (cl-case backend - (html (format yt-iframe-format - path (or desc ""))) - (md (format "{{< youtube %s >}}" - path)) - (latex (format "\\href{%s}{%s}" - (concat "https://www.youtube.com/embed/" - path) (or desc "video")))))) - ) + (org-add-link-type + "yt" + (lambda (handle) + (browse-url + (concat "https://www.youtube.com/embed/" + handle))) + (lambda (path desc backend) + (cl-case backend + (html (format yt-iframe-format + path (or desc ""))) + (md (format "{{< youtube %s >}}" + path)) + (latex (format "\\href{%s}{%s}" + (concat "https://www.youtube.com/embed/" + path) (or desc "video")))))) + ) #+end_src ** Org Gcal - https://cestlaz.github.io/posts/using-emacs-26-gcal/#.WIqBud9vGAk #+begin_src emacs-lisp - (use-package! org-gcal - :after org - :init - :config - (setq org-gcal-client-id "396102378658-dcmbcmrnthbe925519otsjbd921otq0v.apps.googleusercontent.com" - org-gcal-client-secret "4M5PWrbhQjwYEMXGK85lDYX9" - org-gcal-file-alist '(("dehaeze.thomas@gmail.com" . "~/Cloud/org/gcal.org") - ("8kjmhe2ar0abnm054ill1fb0gc@group.calendar.google.com" . "~/Cloud/org/gcal_phd.org"))) - ;; Automatic fetch of the new events - ;; (add-hook 'org-agenda-mode-hook (lambda () (org-gcal-fetch) )) - ) +(use-package! org-gcal + :after org + :init + :config + (setq org-gcal-client-id "396102378658-dcmbcmrnthbe925519otsjbd921otq0v.apps.googleusercontent.com" + org-gcal-client-secret "4M5PWrbhQjwYEMXGK85lDYX9" + org-gcal-file-alist '(("dehaeze.thomas@gmail.com" . "~/Cloud/org/gcal.org") + ("8kjmhe2ar0abnm054ill1fb0gc@group.calendar.google.com" . "~/Cloud/org/gcal_phd.org"))) + ;; Automatic fetch of the new events + ;; (add-hook 'org-agenda-mode-hook (lambda () (org-gcal-fetch) )) + ) #+end_src ** Citeproc-Org @@ -1684,28 +1684,28 @@ https://www.reddit.com/r/emacs/comments/d3a8or/pretty_org_tables_in_the_buffer_c ** Org Wild Notifier #+begin_src emacs-lisp - (use-package! org-wild-notifier - :after org - :init - (setq alert-default-style 'libnotify) - :config - (setq org-wild-notifier-alert-time '(10 5)) - (setq org-wild-notifier-notification-title "Org Agenda") - (org-wild-notifier-mode) - ) +(use-package! org-wild-notifier + :after org + :init + (setq alert-default-style 'libnotify) + :config + (setq org-wild-notifier-alert-time '(10 5)) + (setq org-wild-notifier-notification-title "Org Agenda") + (org-wild-notifier-mode) +) #+end_src ** TODO Orch #+begin_src emacs-lisp :tangle no - (use-package! web-server - :init - :config - ) +(use-package! web-server + :init + :config +) #+end_src #+begin_src emacs-lisp :tangle no - (add-to-list 'load-path "~/.config/doom/packages/orch/") - (autoload 'orch-toggle "orch" nil t) +(add-to-list 'load-path "~/.config/doom/packages/orch/") +(autoload 'orch-toggle "orch" nil t) #+end_src ** TODO [#A] Custom Keybindings - =,= leader key and =C-c= @@ -1717,107 +1717,107 @@ https://www.reddit.com/r/emacs/comments/d3a8or/pretty_org_tables_in_the_buffer_c | =C-c l= | Org Link | #+begin_src emacs-lisp - (after! org - (map! :map org-mode-map - (:desc "Org Agenda" - :ni "C-c a" 'org-agenda) - (:desc "Archive" - :n "C-c A" 'org-archive-subtree) - (:desc "Org Capture" - :ni "C-c c" 'org-capture) - (:desc "Store Link" - :ni "C-c l" 'org-store-link) - (:desc "Narrow Subtree" - :ni "C-c n" 'org-toggle-narrow-to-subtree) - (:desc "Org Noter" - :ni "C-c N" 'org-noter) - (:desc "Align Block" - :ni "C-c =" 'tdh-align-src-block) - (:desc "Insert Reference" - :ni "C-c r" 'org-ref-insert-ref-link) - (:desc "Insert Image" - :ni "C-c i" 'tdh-insert-image-org-link) - (:desc "Insert Image SXIV" - :ni "C-c I" 'tdh-insert-image-org-link-sxiv) - (:desc "Link to next Figure" - :ni "C-c f" 'tdh-insert-link-to-next-figure) - (:desc "Link to previous Figure" - :ni "C-c F" 'tdh-insert-link-to-previous-figure) - (:desc "Insert Screenshot" - :ni "C-c s" 'tdh-insert-screenshot-org-link) - (:desc "Find Roam" - :ni "C-c r" 'orb-find-non-ref-file) - (:desc "Insert Roam" - :ni "C-c R" 'orb-insert-non-ref) - )) +(after! org + (map! :map org-mode-map + (:desc "Org Agenda" + :ni "C-c a" 'org-agenda) + (:desc "Archive" + :n "C-c A" 'org-archive-subtree) + (:desc "Org Capture" + :ni "C-c c" 'org-capture) + (:desc "Store Link" + :ni "C-c l" 'org-store-link) + (:desc "Narrow Subtree" + :ni "C-c n" 'org-toggle-narrow-to-subtree) + (:desc "Org Noter" + :ni "C-c N" 'org-noter) + (:desc "Align Block" + :ni "C-c =" 'tdh-align-src-block) + (:desc "Insert Reference" + :ni "C-c r" 'org-ref-insert-ref-link) + (:desc "Insert Image" + :ni "C-c i" 'tdh-insert-image-org-link) + (:desc "Insert Image SXIV" + :ni "C-c I" 'tdh-insert-image-org-link-sxiv) + (:desc "Link to next Figure" + :ni "C-c f" 'tdh-insert-link-to-next-figure) + (:desc "Link to previous Figure" + :ni "C-c F" 'tdh-insert-link-to-previous-figure) + (:desc "Insert Screenshot" + :ni "C-c s" 'tdh-insert-screenshot-org-link) + (:desc "Find Roam" + :ni "C-c r" 'orb-find-non-ref-file) + (:desc "Insert Roam" + :ni "C-c R" 'orb-insert-non-ref) + )) #+end_src *** Insert Elements =,i= Insert Link to paper #+begin_src emacs-lisp - (defun tdh-insert-paper-org-link (paper) - "Insert an org link to some paper, choosing the file with completion" - (interactive - (list (read-file-name "Paper: " "~/Cloud/pdfs/" nil t))) - (insert (format "[[papers:%s]]" (file-name-base paper)))) +(defun tdh-insert-paper-org-link (paper) + "Insert an org link to some paper, choosing the file with completion" + (interactive + (list (read-file-name "Paper: " "~/Cloud/pdfs/" nil t))) + (insert (format "[[papers:%s]]" (file-name-base paper)))) #+end_src Insert Link to notes #+begin_src emacs-lisp - (defun tdh-insert-note-org-link (note) - "Insert an org link to some note, choosing the file with completion" - (interactive - (list (read-file-name "Note: " "~/Cloud/pdfs/" nil t))) - (insert (format "[[notes:%s]]" (file-name-base note)))) +(defun tdh-insert-note-org-link (note) + "Insert an org link to some note, choosing the file with completion" + (interactive + (list (read-file-name "Note: " "~/Cloud/pdfs/" nil t))) + (insert (format "[[notes:%s]]" (file-name-base note)))) #+end_src Insert Image that is in the figs folder #+begin_src emacs-lisp - (defun tdh-insert-image-org-link (img) - "Insert an org image link, choosing the file with completion - and starting from `my-default-image-directory'." - (interactive - (list (file-relative-name (read-file-name "Image: " (concat default-directory "figs/")) default-directory))) - (insert (format "[[file:%s]]" img))) +(defun tdh-insert-image-org-link (img) + "Insert an org image link, choosing the file with completion +and starting from `my-default-image-directory'." + (interactive + (list (file-relative-name (read-file-name "Image: " (concat default-directory "figs/")) default-directory))) + (insert (format "[[file:%s]]" img))) #+end_src Insert Image that is in the =figs= folder using SXIV #+begin_src emacs-lisp - (defun tdh-insert-image-org-link-sxiv () - "Insert an org image link, choosing the file with completion - and starting from `my-default-image-directory'." - (interactive) - (setq img (shell-command-to-string "ls figs/*.{jpg,jpeg,bmp,png,gif} 2> /dev/null | sxiv -i -t -o | tail -1 | tr -d '\n'")) - (unless (equal "" img) - (insert (format "[[file:%s]]" img))) - ) +(defun tdh-insert-image-org-link-sxiv () + "Insert an org image link, choosing the file with completion +and starting from `my-default-image-directory'." + (interactive) + (setq img (shell-command-to-string "ls figs/*.{jpg,jpeg,bmp,png,gif} 2> /dev/null | sxiv -i -t -o | tail -1 | tr -d '\n'")) + (unless (equal "" img) + (insert (format "[[file:%s]]" img))) + ) #+end_src Copy picture from phone folder using SXIV and insert it #+begin_src emacs-lisp - (defun tdh-insert-phone-picture () - (interactive) - (setq img (shell-command-to-string "~/.config/doom/bin/copy-phone-picture.sh")) - (unless (equal "" img) - (insert (format "[[file:%s]]" img))) - ) +(defun tdh-insert-phone-picture () + (interactive) + (setq img (shell-command-to-string "~/.config/doom/bin/copy-phone-picture.sh")) + (unless (equal "" img) + (insert (format "[[file:%s]]" img))) + ) #+end_src Bash script for copying pictures taken by phone. #+begin_src bash :comments both :mkdirp yes :shebang "#!/usr/bin/env bash" :tangle ~/.config/doom/bin/copy-phone-picture.sh - if [ -z "$1" ]; then - oldpath=$(ls -t ~/Cloud/photos/phone/*.jpg | sxiv -i -t -o | tail -1); - else - oldpath=$(ls -t $1 | sxiv -i -t -o | tail -1); - fi +if [ -z "$1" ]; then + oldpath=$(ls -t ~/Cloud/photos/phone/*.jpg | sxiv -i -t -o | tail -1); +else + oldpath=$(ls -t $1 | sxiv -i -t -o | tail -1); +fi - if [ -n "$oldpath" ]; then - newfilename=$(basename $oldpath .jpg | rofi -i -dmenu -p "Filename") - if [ -n "$newfilename" ]; then - cp $oldpath "figs/$newfilename.jpg" - printf "figs/$newfilename.jpg" - fi - fi +if [ -n "$oldpath" ]; then + newfilename=$(basename $oldpath .jpg | rofi -i -dmenu -p "Filename") + if [ -n "$newfilename" ]; then + cp $oldpath "figs/$newfilename.jpg" + printf "figs/$newfilename.jpg" + fi +fi #+end_src Take Screenshot and insert a link: @@ -1826,393 +1826,393 @@ Take Screenshot and insert a link: - Then insert the following to the buffer #+begin_src emacs-lisp - (defun tdh-insert-screenshot-org-link () - "Capture screenshot and insert the resulting file. - The screenshot tool is determined by `org-download-screenshot-method'." - (interactive) - (if (string-match "_" (file-name-base buffer-file-name)) - (setq filename (read-string "Enter file name:" (car (split-string (file-name-base buffer-file-name) "_")))) - (setq filename (read-string "Enter file name:"))) - (setq filepath (concat "./figs/" filename ".png")) - (shell-command (concat "maim -u -s " filepath)) - (insert (format "#+name: fig:%s\n#+caption:\n[[file:%s]]" filename filepath)) - (search-backward "caption") - (end-of-line) - ) +(defun tdh-insert-screenshot-org-link () + "Capture screenshot and insert the resulting file. +The screenshot tool is determined by `org-download-screenshot-method'." + (interactive) + (if (string-match "_" (file-name-base buffer-file-name)) + (setq filename (read-string "Enter file name:" (car (split-string (file-name-base buffer-file-name) "_")))) + (setq filename (read-string "Enter file name:"))) + (setq filepath (concat "./figs/" filename ".png")) + (shell-command (concat "maim -u -s " filepath)) + (insert (format "#+name: fig:%s\n#+caption:\n[[file:%s]]" filename filepath)) + (search-backward "caption") + (end-of-line) + ) #+end_src Insert link to next figure: #+begin_src emacs-lisp - (defun tdh-insert-link-to-next-figure () - (interactive) - (save-excursion - (re-search-forward "^#\\+name:\s*\\(fig:.*\\)" nil t 1)) - (insert (concat "[[" (match-string 1) "]]")) - ) +(defun tdh-insert-link-to-next-figure () + (interactive) + (save-excursion + (re-search-forward "^#\\+name:\s*\\(fig:.*\\)" nil t 1)) + (insert (concat "[[" (match-string 1) "]]")) + ) #+end_src Insert link to previous figure: #+begin_src emacs-lisp - (defun tdh-insert-link-to-previous-figure () - (interactive) - (save-excursion - (re-search-backward "^#\\+name:\s*\\(fig:.*\\)" nil t 1)) - (insert (concat "[[" (match-string 1) "]]")) - ) +(defun tdh-insert-link-to-previous-figure () + (interactive) + (save-excursion + (re-search-backward "^#\\+name:\s*\\(fig:.*\\)" nil t 1)) + (insert (concat "[[" (match-string 1) "]]")) + ) #+end_src Map Keys #+begin_src emacs-lisp - (after! org - (map! :map org-mode-map - (:prefix (",i" . "Insert") - :n "p" 'tdh-insert-paper-org-link - :n "n" 'tdh-insert-note-org-link - :n "f" 'tdh-insert-image-org-link - :n "F" 'tdh-insert-image-org-link-sxiv - :n "i" 'tdh-insert-phone-picture - :n "l" 'tdh-insert-link-to-next-figure - :n "L" 'tdh-insert-link-to-previous-figure - :n "s" 'tdh-insert-screenshot-org-link))) +(after! org + (map! :map org-mode-map + (:prefix (",i" . "Insert") + :n "p" 'tdh-insert-paper-org-link + :n "n" 'tdh-insert-note-org-link + :n "f" 'tdh-insert-image-org-link + :n "F" 'tdh-insert-image-org-link-sxiv + :n "i" 'tdh-insert-phone-picture + :n "l" 'tdh-insert-link-to-next-figure + :n "L" 'tdh-insert-link-to-previous-figure + :n "s" 'tdh-insert-screenshot-org-link))) #+end_src *** LaTeX =,l= #+begin_src emacs-lisp - (defun tdh-latex-watch () - "Watch LaTeX file using latexmk" - (interactive) - (start-process-shell-command "latexmk-watch" "*latexmk-watch-output*" - "latexmk" (format "-pdflatex=\"xelatex -synctex=1 -shell-escape -interaction nonstopmode -output-directory='%s'\" -pdf -pvc -bibtex -f %s.tex" - (file-name-directory buffer-file-name) - (file-name-base buffer-file-name)))) +(defun tdh-latex-watch () + "Watch LaTeX file using latexmk" + (interactive) + (start-process-shell-command "latexmk-watch" "*latexmk-watch-output*" + "latexmk" (format "-pdflatex=\"xelatex -synctex=1 -shell-escape -interaction nonstopmode -output-directory='%s'\" -pdf -pvc -bibtex -f %s.tex" + (file-name-directory buffer-file-name) + (file-name-base buffer-file-name)))) #+end_src #+begin_src emacs-lisp - (defun tdh-latex-watch-kill () - "Kill the currently running TeX job." - (interactive) - (delete-process "latexmk-watch") - ) -#+end_src - -#+begin_src emacs-lisp - (after! org - (map! :map org-mode-map - (:prefix (",l" . "LaTeX") - :n "w" 'tdh-latex-watch - :n "k" 'tdh-latex-watch-kill - :n "l" 'org-latex-export-to-latex))) -#+end_src - -*** Org LaTeX Automatic fragment -#+begin_src emacs-lisp - (use-package! org-fragtog - :after org - :config - (add-hook 'org-mode-hook 'org-fragtog-mode) +(defun tdh-latex-watch-kill () + "Kill the currently running TeX job." + (interactive) + (delete-process "latexmk-watch") ) #+end_src #+begin_src emacs-lisp - (defun tdh-automatic-latex-fragment-activate () - (interactive) - (add-hook 'org-mode-hook 'org-fragtog-mode)) +(after! org + (map! :map org-mode-map + (:prefix (",l" . "LaTeX") + :n "w" 'tdh-latex-watch + :n "k" 'tdh-latex-watch-kill + :n "l" 'org-latex-export-to-latex))) +#+end_src - (defun tdh-automatic-latex-fragment-deactivate () - (interactive) - (remove-hook 'org-mode-hook 'org-fragtog-mode)) +*** Org LaTeX Automatic fragment +#+begin_src emacs-lisp +(use-package! org-fragtog + :after org + :config + (add-hook 'org-mode-hook 'org-fragtog-mode) +) #+end_src #+begin_src emacs-lisp - (after! org - (map! :map org-mode-map - (:prefix (",l" . "LaTeX") - :n "f" 'tdh-automatic-latex-fragment-activate - :n "F" 'tdh-automatic-latex-fragment-deactivate))) +(defun tdh-automatic-latex-fragment-activate () + (interactive) + (add-hook 'org-mode-hook 'org-fragtog-mode)) + +(defun tdh-automatic-latex-fragment-deactivate () + (interactive) + (remove-hook 'org-mode-hook 'org-fragtog-mode)) +#+end_src + +#+begin_src emacs-lisp +(after! org + (map! :map org-mode-map + (:prefix (",l" . "LaTeX") + :n "f" 'tdh-automatic-latex-fragment-activate + :n "F" 'tdh-automatic-latex-fragment-deactivate))) #+end_src *** Bibtex =,r= #+begin_src emacs-lisp - (after! org - (map! :map org-mode-map - (:prefix (",r" . "References") - :n "b" 'helm-bibtex - :n "B" 'helm-bibtex-with-local-bibliography - :n "f" 'tdh-helm-bibtex-favorites - :n "r" 'helm-resume))) +(after! org + (map! :map org-mode-map + (:prefix (",r" . "References") + :n "b" 'helm-bibtex + :n "B" 'helm-bibtex-with-local-bibliography + :n "f" 'tdh-helm-bibtex-favorites + :n "r" 'helm-resume))) #+end_src *** Open ranger in current directory =,o= #+begin_src emacs-lisp - (defun tdh-open-ranger-in-workdir () - (interactive) - (call-process-shell-command - (concat "termite --directory=" default-directory " --exec=ranger") nil 0)) +(defun tdh-open-ranger-in-workdir () + (interactive) + (call-process-shell-command + (concat "termite --directory=" default-directory " --exec=ranger") nil 0)) #+end_src #+begin_src emacs-lisp - (after! org - (map! :map org-mode-map - :n ",o" 'tdh-open-ranger-in-workdir)) +(after! org + (map! :map org-mode-map + :n ",o" 'tdh-open-ranger-in-workdir)) #+end_src *** View in External programs =,v= Open PDF output with =zathura= #+begin_src emacs-lisp - (defun tdh-open-org-pdf-externally () - (interactive) - (call-process "zathura" nil 0 nil (concat (file-name-sans-extension (buffer-file-name)) ".pdf")) - ) +(defun tdh-open-org-pdf-externally () + (interactive) + (call-process "zathura" nil 0 nil (concat (file-name-sans-extension (buffer-file-name)) ".pdf")) + ) #+end_src Open HTML output externally #+begin_src emacs-lisp - (defun tdh-open-org-html-externally () - (interactive) - (call-process "xdg-open" nil 0 nil (concat (file-name-sans-extension (buffer-file-name)) ".html")) - ) +(defun tdh-open-org-html-externally () + (interactive) + (call-process "xdg-open" nil 0 nil (concat (file-name-sans-extension (buffer-file-name)) ".html")) + ) #+end_src #+begin_src emacs-lisp - (after! org - (map! :map org-mode-map - (:prefix (",v" . "View") - :n "p" 'tdh-open-org-pdf-externally - :n "h" 'tdh-open-org-html-externally))) +(after! org + (map! :map org-mode-map + (:prefix (",v" . "View") + :n "p" 'tdh-open-org-pdf-externally + :n "h" 'tdh-open-org-html-externally))) #+end_src * Org Babel ** Main configuration Don't ask for confirmation when evaluating following blocs #+begin_src emacs-lisp - (defun tdh-org-confirm-babel-evaluate (lang body) - (not (member lang '("emacs-lisp" "latex" "matlab" "sh" "latex-macros" "python")))) +(defun tdh-org-confirm-babel-evaluate (lang body) + (not (member lang '("emacs-lisp" "latex" "matlab" "sh" "latex-macros" "python")))) - (after! org - (setq org-confirm-babel-evaluate 'tdh-org-confirm-babel-evaluate)) +(after! org + (setq org-confirm-babel-evaluate 'tdh-org-confirm-babel-evaluate)) #+end_src Default header arguments. #+begin_src emacs-lisp - (after! org - (setq org-babel-default-header-args '((:eval . "no-export")))) +(after! org + (setq org-babel-default-header-args '((:eval . "no-export")))) #+end_src Use the current window for C-c ' source editing #+begin_src emacs-lisp - (after! org - (setq org-src-window-setup 'current-window)) +(after! org + (setq org-src-window-setup 'current-window)) #+end_src ** Appearance of source blocks #+begin_src emacs-lisp - (defun tdh-org-prettify-symbols () - (mapc (apply-partially 'add-to-list 'prettify-symbols-alist) - (cl-reduce 'append - (mapcar (lambda (x) (list x (cons (upcase (car x)) (cdr x)))) - `(("#+begin_src" . ?✎) - ("#+end_src" . ?□) - ("#+begin_quote" . ?«) - ("#+end_quote" . ?»))))) - (turn-on-prettify-symbols-mode)) - (add-hook 'org-mode-hook #'tdh-org-prettify-symbols) +(defun tdh-org-prettify-symbols () + (mapc (apply-partially 'add-to-list 'prettify-symbols-alist) + (cl-reduce 'append + (mapcar (lambda (x) (list x (cons (upcase (car x)) (cdr x)))) + `(("#+begin_src" . ?✎) + ("#+end_src" . ?□) + ("#+begin_quote" . ?«) + ("#+end_quote" . ?»))))) + (turn-on-prettify-symbols-mode)) +(add-hook 'org-mode-hook #'tdh-org-prettify-symbols) #+end_src ** Indentation #+begin_src emacs-lisp - (after! org - ;; Don't change indentation when toggling - (setq org-src-preserve-indentation t) - ) +(after! org + ;; Don't change indentation when toggling + (setq org-src-preserve-indentation t) + ) #+end_src ** Library of Babel Add all named source blocks to =org-babel-library-of-babel= ([[file:emacs-library-babel.org][link]]). #+begin_src emacs-lisp - (after! org - (org-babel-lob-ingest "~/.config/literate-dotfiles/emacs-library-babel.org")) +(after! org + (org-babel-lob-ingest "~/.config/literate-dotfiles/emacs-library-babel.org")) #+end_src ** Org-Babel Matlab #+begin_src emacs-lisp - (after! org - (setq org-babel-matlab-shell-command "/home/thomas/.local/bin/matlab -softwareopengl -nodesktop -nosplash") - ) +(after! org + (setq org-babel-matlab-shell-command "/home/thomas/.local/bin/matlab -softwareopengl -nodesktop -nosplash") + ) #+end_src Default options for Matlab code #+begin_src emacs-lisp - (after! org - (setq org-babel-default-header-args:matlab - '((:results . "none") - (:session . "*MATLAB*") - (:comments . "org") - (:exports . "both") - (:cache . "no") - (:noweb . "no") - (:hlines . "no") - (:tangle . "yes") - (:mkdir . "yes") - (:eval . "no-export"))) - ) +(after! org + (setq org-babel-default-header-args:matlab + '((:results . "none") + (:session . "*MATLAB*") + (:comments . "org") + (:exports . "both") + (:cache . "no") + (:noweb . "no") + (:hlines . "no") + (:tangle . "yes") + (:mkdir . "yes") + (:eval . "no-export"))) + ) #+end_src Better format the output results for Matlab ([[https://www.reddit.com/r/emacs/comments/fy98bs/orgbabels_matlab_session_output_is_malformed/?utm_source=share&utm_medium=web2x][link]]). #+begin_src emacs-lisp - (after! org - (defun org-babel-octave-evaluate-session - (session body result-type &optional matlabp) - "Evaluate BODY in SESSION." - (let* ((tmp-file (org-babel-temp-file (if matlabp "matlab-" "octave-"))) - (wait-file (org-babel-temp-file "matlab-emacs-link-wait-signal-")) - (full-body - (pcase result-type - (`output +(after! org + (defun org-babel-octave-evaluate-session + (session body result-type &optional matlabp) + "Evaluate BODY in SESSION." + (let* ((tmp-file (org-babel-temp-file (if matlabp "matlab-" "octave-"))) + (wait-file (org-babel-temp-file "matlab-emacs-link-wait-signal-")) + (full-body + (pcase result-type + (`output + (mapconcat + #'org-babel-chomp + (list (if matlabp + (multi-replace-regexp-in-string + '(("%.*$" . "") ;Remove comments + (";\\s-*\n+" . "; ") ;Concatenate lines + ("\\(\\.\\)\\{3\\}\\s-*\n+" . " ") ;Handle continuations + (",*\\s-*\n+" . ", ")) ;Concatenate lines + body) + body) + org-babel-octave-eoe-indicator) "\n")) + (`value + (if (and matlabp org-babel-matlab-with-emacs-link) + (concat + (format org-babel-matlab-emacs-link-wrapper-method + body + (org-babel-process-file-name tmp-file 'noquote) + (org-babel-process-file-name tmp-file 'noquote) wait-file) "\n") (mapconcat #'org-babel-chomp - (list (if matlabp - (multi-replace-regexp-in-string - '(("%.*$" . "") ;Remove comments - (";\\s-*\n+" . "; ") ;Concatenate lines - ("\\(\\.\\)\\{3\\}\\s-*\n+" . " ") ;Handle continuations - (",*\\s-*\n+" . ", ")) ;Concatenate lines - body) - body) - org-babel-octave-eoe-indicator) "\n")) - (`value - (if (and matlabp org-babel-matlab-with-emacs-link) - (concat - (format org-babel-matlab-emacs-link-wrapper-method - body - (org-babel-process-file-name tmp-file 'noquote) - (org-babel-process-file-name tmp-file 'noquote) wait-file) "\n") - (mapconcat - #'org-babel-chomp - (list (format org-babel-octave-wrapper-method - body - (org-babel-process-file-name tmp-file 'noquote) - (org-babel-process-file-name tmp-file 'noquote)) - org-babel-octave-eoe-indicator) "\n"))))) - (raw (if (and matlabp org-babel-matlab-with-emacs-link) - (save-window-excursion - (with-temp-buffer - (insert full-body) - (write-region "" 'ignored wait-file nil nil nil 'excl) - (matlab-shell-run-region (point-min) (point-max)) - (message "Waiting for Matlab Emacs Link") - (while (file-exists-p wait-file) (sit-for 0.01)) - "")) ;; matlab-shell-run-region doesn't seem to - ;; make *matlab* buffer contents easily - ;; available, so :results output currently - ;; won't work - (org-babel-comint-with-output - (session - (if matlabp - org-babel-octave-eoe-indicator - org-babel-octave-eoe-output) - t full-body) - (insert full-body) (comint-send-input nil t)))) results) - (pcase result-type - (`value - (org-babel-octave-import-elisp-from-file tmp-file)) - (`output - (setq results - (if matlabp - (cdr (reverse (delete "" (mapcar #'org-strip-quotes - (mapcar #'org-trim (remove-car-upto-newline raw)))))) - (cdr (member org-babel-octave-eoe-output - (reverse (mapcar #'org-strip-quotes - (mapcar #'org-trim raw))))))) - (mapconcat #'identity (reverse results) "\n"))))) + (list (format org-babel-octave-wrapper-method + body + (org-babel-process-file-name tmp-file 'noquote) + (org-babel-process-file-name tmp-file 'noquote)) + org-babel-octave-eoe-indicator) "\n"))))) + (raw (if (and matlabp org-babel-matlab-with-emacs-link) + (save-window-excursion + (with-temp-buffer + (insert full-body) + (write-region "" 'ignored wait-file nil nil nil 'excl) + (matlab-shell-run-region (point-min) (point-max)) + (message "Waiting for Matlab Emacs Link") + (while (file-exists-p wait-file) (sit-for 0.01)) + "")) ;; matlab-shell-run-region doesn't seem to + ;; make *matlab* buffer contents easily + ;; available, so :results output currently + ;; won't work + (org-babel-comint-with-output + (session + (if matlabp + org-babel-octave-eoe-indicator + org-babel-octave-eoe-output) + t full-body) + (insert full-body) (comint-send-input nil t)))) results) + (pcase result-type + (`value + (org-babel-octave-import-elisp-from-file tmp-file)) + (`output + (setq results + (if matlabp + (cdr (reverse (delete "" (mapcar #'org-strip-quotes + (mapcar #'org-trim (remove-car-upto-newline raw)))))) + (cdr (member org-babel-octave-eoe-output + (reverse (mapcar #'org-strip-quotes + (mapcar #'org-trim raw))))))) + (mapconcat #'identity (reverse results) "\n"))))) - (defun remove-car-upto-newline (raw) - "Truncate each string in a list of strings up to the first newline" - (cons (mapconcat #'identity - (cdr (split-string-and-unquote (car raw) "\n")) - "\n") (cdr raw))) + (defun remove-car-upto-newline (raw) + "Truncate each string in a list of strings up to the first newline" + (cons (mapconcat #'identity + (cdr (split-string-and-unquote (car raw) "\n")) + "\n") (cdr raw))) - (defun multi-replace-regexp-in-string (replacements-list string &optional rest) - (interactive) - "Replace multiple regexps in a string. Order matters." - (if (null replacements-list) - string - (let ((regex (caar replacements-list)) - (replacement (cdar replacements-list))) - (multi-replace-regexp-in-string (cdr replacements-list) - (replace-regexp-in-string regex replacement - string rest))))) - ) + (defun multi-replace-regexp-in-string (replacements-list string &optional rest) + (interactive) + "Replace multiple regexps in a string. Order matters." + (if (null replacements-list) + string + (let ((regex (caar replacements-list)) + (replacement (cdar replacements-list))) + (multi-replace-regexp-in-string (cdr replacements-list) + (replace-regexp-in-string regex replacement + string rest))))) + ) #+end_src ** Some functions for using Matlab with Org Babel =,m= =whos= matlab function #+begin_src emacs-lisp - (defun tdh-matlab-whos (&optional start end) - "Get what is in the Matlab workspace" - (interactive) - (if (use-region-p) - (let ((regionp (buffer-substring (region-beginning) (region-end)))) - (process-send-string "*MATLAB*" (concat "whosEmacs " regionp "\n"))) - (process-send-string "*MATLAB*" (concat "whosEmacs" "\n")))) +(defun tdh-matlab-whos (&optional start end) +"Get what is in the Matlab workspace" + (interactive) + (if (use-region-p) + (let ((regionp (buffer-substring (region-beginning) (region-end)))) + (process-send-string "*MATLAB*" (concat "whosEmacs " regionp "\n"))) + (process-send-string "*MATLAB*" (concat "whosEmacs" "\n")))) #+end_src =help= matlab function #+begin_src emacs-lisp - (defun tdh-matlab-help (&optional start end) - "Get help on the selected function" - (interactive) - (if (use-region-p) - (let ((regionp (buffer-substring (region-beginning) (region-end)))) - (process-send-string "*MATLAB*" (concat "help " regionp "\n"))) - (process-send-string "*MATLAB*" (concat "help " (read-string "Matlab help:") "\n"))) - ) +(defun tdh-matlab-help (&optional start end) + "Get help on the selected function" + (interactive) + (if (use-region-p) + (let ((regionp (buffer-substring (region-beginning) (region-end)))) + (process-send-string "*MATLAB*" (concat "help " regionp "\n"))) + (process-send-string "*MATLAB*" (concat "help " (read-string "Matlab help:") "\n"))) + ) #+end_src Specify a Matlab command to run #+begin_src emacs-lisp (defun tdh-matlab-run-command () - "Prompt user to enter a matlab command" - (interactive) - (process-send-string "*MATLAB*" (concat (read-string "Matlab Command: ") "\n"))) +"Prompt user to enter a matlab command" +(interactive) +(process-send-string "*MATLAB*" (concat (read-string "Matlab Command: ") "\n"))) #+end_src Specify a Matlab command to run and show output in mini-buffer #+begin_src emacs-lisp - (defun tdh-matlab-run-command-show-output () - "Prompt user to enter a matlab command" - (interactive) - (process-send-string "*MATLAB*" (concat "evalEmacs('" (read-string "Matlab Command: ") "')\n"))) +(defun tdh-matlab-run-command-show-output () + "Prompt user to enter a matlab command" + (interactive) + (process-send-string "*MATLAB*" (concat "evalEmacs('" (read-string "Matlab Command: ") "')\n"))) #+end_src Org-Babel Tangle File and Execute with Matlab #+begin_src emacs-lisp (defun tdh-matlab-tangle-and-execute () - "Jump to tangle file for the source block at point." - (interactive) - (let (file org-babel-pre-tangle-hook org-babel-post-tangle-hook) - (cl-letf (((symbol-function 'write-region) (lambda (start end filename &rest _ignore) - (setq file filename))) - ((symbol-function 'delete-file) #'ignore)) - (org-babel-tangle '(4))) - (when file - (setq file (expand-file-name file)) - (if (file-readable-p file) - (process-send-string "*MATLAB*" (concat "run " file "\n")) - (error "Cannot open tangle file %S" file))))) +"Jump to tangle file for the source block at point." +(interactive) +(let (file org-babel-pre-tangle-hook org-babel-post-tangle-hook) + (cl-letf (((symbol-function 'write-region) (lambda (start end filename &rest _ignore) + (setq file filename))) + ((symbol-function 'delete-file) #'ignore)) + (org-babel-tangle '(4))) + (when file + (setq file (expand-file-name file)) + (if (file-readable-p file) + (process-send-string "*MATLAB*" (concat "run " file "\n")) + (error "Cannot open tangle file %S" file))))) #+end_src Map Functions #+begin_src emacs-lisp - (after! org - (map! :map org-mode-map - (:prefix (",m" . "Matlab") - :n "e" 'tdh-matlab-run-command - :n "E" 'tdh-matlab-run-command-show-output - :n "T" 'tdh-matlab-tangle-and-execute - :nv "h" 'tdh-matlab-help - :nv "w" 'tdh-matlab-whos))) +(after! org + (map! :map org-mode-map + (:prefix (",m" . "Matlab") + :n "e" 'tdh-matlab-run-command + :n "E" 'tdh-matlab-run-command-show-output + :n "T" 'tdh-matlab-tangle-and-execute + :nv "h" 'tdh-matlab-help + :nv "w" 'tdh-matlab-whos))) #+end_src ** Remap =ctrl-ret= used to execute the src block and go to the next one @@ -2222,96 +2222,96 @@ Remap =ctrl-ret= to execute the source block and go to the next source block when inside a source block. Otherwise, keep the normal behavior for =ctrl-ret=. #+begin_src emacs-lisp - (defun tdh-ctrl-ret () - (interactive) - (defun tdh-in-src-block-p () - "Returns t when the point is inside a source code block" - (string= "src" (org-in-block-p '("src")))) +(defun tdh-ctrl-ret () + (interactive) + (defun tdh-in-src-block-p () + "Returns t when the point is inside a source code block" + (string= "src" (org-in-block-p '("src")))) - (if (tdh-in-src-block-p) - (progn - (org-babel-execute-src-block) - (org-babel-next-src-block)) - (+org--insert-item 'below))) + (if (tdh-in-src-block-p) + (progn + (org-babel-execute-src-block) + (org-babel-next-src-block)) + (+org--insert-item 'below))) #+end_src #+begin_src emacs-lisp - (map! :after evil-org - :map evil-org-mode-map - :n "" #'tdh-ctrl-ret) +(map! :after evil-org + :map evil-org-mode-map + :n "" #'tdh-ctrl-ret) #+end_src ** Remap =ctrl-shift-ret= used to execute the (matlab) src block in the background and go to the next one *** =tdh-org-babel-execute-matlab-background= #+begin_src emacs-lisp - (defun tdh-org-babel-execute-matlab-background (&optional arg info params) - (interactive) - (let* ((org-babel-current-src-block-location - (or org-babel-current-src-block-location - (nth 5 info) - (org-babel-where-is-src-block-head))) - (info (if info (copy-tree info) (org-babel-get-src-block-info)))) - ;; Merge PARAMS with INFO before considering source block - ;; evaluation since both could disagree. - (cl-callf org-babel-merge-params (nth 2 info) params) - (when (org-babel-check-evaluate info) - (cl-callf org-babel-process-params (nth 2 info)) - (let* ((params (nth 2 info)) - (cache (let ((c (cdr (assq :cache params)))) - (and (not arg) c (string= "yes" c)))) - (new-hash (and cache (org-babel-sha1-hash info :eval))) - (old-hash (and cache (org-babel-current-result-hash))) - (current-cache (and new-hash (equal new-hash old-hash)))) - (cond - (current-cache - (save-excursion ;Return cached result. - (goto-char (org-babel-where-is-src-block-result nil info)) - (forward-line) - (skip-chars-forward " \t") - (let ((result (org-babel-read-result))) - (message (replace-regexp-in-string "%" "%%" (format "%S" result))) - result))) - ((org-babel-confirm-evaluate info) - (let* ((lang (nth 0 info)) - (result-params (cdr (assq :result-params params))) - ;; Expand noweb references in BODY and remove any - ;; coderef. - (body - (let ((coderef (nth 6 info)) - (expand - (if (org-babel-noweb-p params :eval) - (org-babel-expand-noweb-references info) - (nth 1 info)))) - (if (not coderef) expand - (replace-regexp-in-string - (org-src-coderef-regexp coderef) "" expand nil nil 1)))) - (dir (cdr (assq :dir params))) - (mkdirp (cdr (assq :mkdirp params))) - (default-directory - (cond - ((not dir) default-directory) - ((member mkdirp '("no" "nil" nil)) - (file-name-as-directory (expand-file-name dir))) - (t - (let ((d (file-name-as-directory (expand-file-name dir)))) - (make-directory d 'parents) - d)))) - (cmd (intern (concat "org-babel-execute:" lang))) - result) - (process-send-string "*MATLAB*" (concat body "\n")) - result)) - ))) - ) +(defun tdh-org-babel-execute-matlab-background (&optional arg info params) + (interactive) + (let* ((org-babel-current-src-block-location + (or org-babel-current-src-block-location + (nth 5 info) + (org-babel-where-is-src-block-head))) + (info (if info (copy-tree info) (org-babel-get-src-block-info)))) + ;; Merge PARAMS with INFO before considering source block + ;; evaluation since both could disagree. + (cl-callf org-babel-merge-params (nth 2 info) params) + (when (org-babel-check-evaluate info) + (cl-callf org-babel-process-params (nth 2 info)) + (let* ((params (nth 2 info)) + (cache (let ((c (cdr (assq :cache params)))) + (and (not arg) c (string= "yes" c)))) + (new-hash (and cache (org-babel-sha1-hash info :eval))) + (old-hash (and cache (org-babel-current-result-hash))) + (current-cache (and new-hash (equal new-hash old-hash)))) + (cond + (current-cache + (save-excursion ;Return cached result. + (goto-char (org-babel-where-is-src-block-result nil info)) + (forward-line) + (skip-chars-forward " \t") + (let ((result (org-babel-read-result))) + (message (replace-regexp-in-string "%" "%%" (format "%S" result))) + result))) + ((org-babel-confirm-evaluate info) + (let* ((lang (nth 0 info)) + (result-params (cdr (assq :result-params params))) + ;; Expand noweb references in BODY and remove any + ;; coderef. + (body + (let ((coderef (nth 6 info)) + (expand + (if (org-babel-noweb-p params :eval) + (org-babel-expand-noweb-references info) + (nth 1 info)))) + (if (not coderef) expand + (replace-regexp-in-string + (org-src-coderef-regexp coderef) "" expand nil nil 1)))) + (dir (cdr (assq :dir params))) + (mkdirp (cdr (assq :mkdirp params))) + (default-directory + (cond + ((not dir) default-directory) + ((member mkdirp '("no" "nil" nil)) + (file-name-as-directory (expand-file-name dir))) + (t + (let ((d (file-name-as-directory (expand-file-name dir)))) + (make-directory d 'parents) + d)))) + (cmd (intern (concat "org-babel-execute:" lang))) + result) + (process-send-string "*MATLAB*" (concat body "\n")) + result)) + ))) ) + ) #+end_src *** =tdh-matlab-execute-selected= #+begin_src emacs-lisp - (defun tdh-matlab-execute-selected (start end) - "Execute selected text in the *MATLAB* buffer" - (interactive "r") - (let ((regionp (buffer-substring start end))) - (process-send-string "*MATLAB*" (concat regionp "\n")))) +(defun tdh-matlab-execute-selected (start end) +"Execute selected text in the *MATLAB* buffer" + (interactive "r") + (let ((regionp (buffer-substring start end))) + (process-send-string "*MATLAB*" (concat regionp "\n")))) #+end_src *** Remap =ctrl-shift-ref= @@ -2323,84 +2323,84 @@ This function: if no region is selected, it runs all the code blocks and goes to the next block #+begin_src emacs-lisp - (defun tdh-ctrl-shift-ret () - (interactive) - (defun tdh-in-src-block-p () - "Returns t when the point is inside a source code block" - (string= "src" (org-in-block-p '("src")))) +(defun tdh-ctrl-shift-ret () + (interactive) + (defun tdh-in-src-block-p () + "Returns t when the point is inside a source code block" + (string= "src" (org-in-block-p '("src")))) - (if (tdh-in-src-block-p) - (let ((lang (nth 0 (org-babel-get-src-block-info)))) - (if (string= lang "matlab") - (if (region-active-p) - (tdh-matlab-execute-selected (region-beginning) (region-end)) - (progn (tdh-org-babel-execute-matlab-background) - (org-babel-next-src-block))) - (tdh-ctrl-ret)) - ) - ) + (if (tdh-in-src-block-p) + (let ((lang (nth 0 (org-babel-get-src-block-info)))) + (if (string= lang "matlab") + (if (region-active-p) + (tdh-matlab-execute-selected (region-beginning) (region-end)) + (progn (tdh-org-babel-execute-matlab-background) + (org-babel-next-src-block))) + (tdh-ctrl-ret)) + ) ) + ) #+end_src #+begin_src emacs-lisp - (map! :after evil-org - :map evil-org-mode-map - :n "" #'tdh-ctrl-shift-ret) +(map! :after evil-org + :map evil-org-mode-map + :n "" #'tdh-ctrl-shift-ret) #+end_src ** Align Source Blocks #+begin_src emacs-lisp - (defun tdh-align-src-block () - (interactive) - (defun tdh-in-src-block-p () - "Returns t when the point is inside a source code block" - (string= "src" (org-in-block-p '("src")))) +(defun tdh-align-src-block () + (interactive) + (defun tdh-in-src-block-p () + "Returns t when the point is inside a source code block" + (string= "src" (org-in-block-p '("src")))) - (if (tdh-in-src-block-p) - (progn - (org-edit-special) - (evil-indent (point-min) (point-max)) - (org-edit-src-exit)) - (org-table-eval-formula))) + (if (tdh-in-src-block-p) + (progn + (org-edit-special) + (evil-indent (point-min) (point-max)) + (org-edit-src-exit)) + (org-table-eval-formula))) #+end_src ** Helping Functions - Tangling =,b= Org-Babel Tangle Sub-tree #+begin_src emacs-lisp - (defun tdh-org-babel-tangle-subtree () - "Tangle the current subtree" - (interactive) - (progn - (org-narrow-to-subtree) - (org-babel-tangle) - (widen)) - ) +(defun tdh-org-babel-tangle-subtree () + "Tangle the current subtree" + (interactive) + (progn + (org-narrow-to-subtree) + (org-babel-tangle) + (widen)) + ) #+end_src Org-Tangle and Org-Babel Jump to Tangle File #+begin_src emacs-lisp - (defun tdh-org-babel-jump-to-tangle-file () - "Jump to tangle file for the source block at point." - (interactive) - (let (file org-babel-pre-tangle-hook org-babel-post-tangle-hook) - (cl-letf (((symbol-function 'write-region) (lambda (start end filename &rest _ignore) - (setq file filename))) - ((symbol-function 'delete-file) #'ignore)) - (org-babel-tangle '(4))) - (when file - (setq file (expand-file-name file)) - (if (file-readable-p file) - (find-file file) - (error "Cannot open tangle file %S" file))))) +(defun tdh-org-babel-jump-to-tangle-file () + "Jump to tangle file for the source block at point." + (interactive) + (let (file org-babel-pre-tangle-hook org-babel-post-tangle-hook) + (cl-letf (((symbol-function 'write-region) (lambda (start end filename &rest _ignore) + (setq file filename))) + ((symbol-function 'delete-file) #'ignore)) + (org-babel-tangle '(4))) + (when file + (setq file (expand-file-name file)) + (if (file-readable-p file) + (find-file file) + (error "Cannot open tangle file %S" file))))) #+end_src Map Functions #+begin_src emacs-lisp - (after! org - (map! :map org-mode-map - (:prefix (",b" . "Tangle") - :n "F" 'tdh-org-babel-jump-to-tangle-file - :n "T" 'tdh-org-babel-tangle-subtree))) +(after! org + (map! :map org-mode-map + (:prefix (",b" . "Tangle") + :n "F" 'tdh-org-babel-jump-to-tangle-file + :n "T" 'tdh-org-babel-tangle-subtree))) #+end_src * Bibliography Management @@ -2420,352 +2420,352 @@ Nice Functions: - =org-ref-clean-bibtex-entry= #+begin_src emacs-lisp - (use-package! org-ref - :after org - :init - :config - ;; Folder where the notes files are located (or file if just one Note file) - (setq org-ref-notes-directory "~/Cloud/brain") - (setq org-ref-bibliography-notes "~/Cloud/brain") +(use-package! org-ref + :after org + :init + :config + ;; Folder where the notes files are located (or file if just one Note file) + (setq org-ref-notes-directory "~/Cloud/brain") + (setq org-ref-bibliography-notes "~/Cloud/brain") - ;; Bibliography File - (setq reftex-default-bibliography '("~/Cloud/brain/biblio/references.bib")) - (setq org-ref-default-bibliography '("~/Cloud/brain/biblio/references.bib")) + ;; Bibliography File + (setq reftex-default-bibliography '("~/Cloud/brain/biblio/references.bib")) + (setq org-ref-default-bibliography '("~/Cloud/brain/biblio/references.bib")) - ;; Folder where all the pdf are located - (setq org-ref-pdf-directory "~/Cloud/pdfs") + ;; Folder where all the pdf are located + (setq org-ref-pdf-directory "~/Cloud/pdfs") - (setq org-ref-bibliography-entry-format - '(("article" . "%a, %t, %j, v(%n), %p (%y).") - ("book" . "%a, %t, %u (%y).") - ("techreport" . "%a, %t, %i, %u (%y).") - ("phdthesis" . "%a, %t (%y).") - ("proceedings" . "%e, %t in %S, %u (%y).") - ("inproceedings" . "%a, %t, %p, in %b, edited by %e, %u (%y)"))) + (setq org-ref-bibliography-entry-format + '(("article" . "%a, %t, %j, v(%n), %p (%y).") + ("book" . "%a, %t, %u (%y).") + ("techreport" . "%a, %t, %i, %u (%y).") + ("phdthesis" . "%a, %t (%y).") + ("proceedings" . "%e, %t in %S, %u (%y).") + ("inproceedings" . "%a, %t, %p, in %b, edited by %e, %u (%y)"))) - ;; Tell org-ref to let helm-bibtex find notes for it - (setq org-ref-notes-function - (lambda (thekey) - (let ((bibtex-completion-bibliography (org-ref-find-bibliography))) - (bibtex-completion-edit-notes - (list (car (org-ref-get-bibtex-key-and-file thekey))))))) + ;; Tell org-ref to let helm-bibtex find notes for it + (setq org-ref-notes-function + (lambda (thekey) + (let ((bibtex-completion-bibliography (org-ref-find-bibliography))) + (bibtex-completion-edit-notes + (list (car (org-ref-get-bibtex-key-and-file thekey))))))) - ;; Problem with speed: don't display broken links - (setq org-ref-show-broken-links t) - ;; Display information on the citation - (setq org-ref-show-citation-on-enter t) + ;; Problem with speed: don't display broken links + (setq org-ref-show-broken-links t) + ;; Display information on the citation + (setq org-ref-show-citation-on-enter t) - (add-to-list 'org-ref-helm-user-candidates - '("Open pdf in Zathura" . (lambda () (call-process "zathura" nil 0 nil (concat - (file-name-as-directory org-ref-pdf-directory) - (car (org-ref-get-bibtex-key-and-file)) - ".pdf")))) - t) + (add-to-list 'org-ref-helm-user-candidates + '("Open pdf in Zathura" . (lambda () (call-process "zathura" nil 0 nil (concat + (file-name-as-directory org-ref-pdf-directory) + (car (org-ref-get-bibtex-key-and-file)) + ".pdf")))) + t) - (add-to-list 'org-ref-helm-user-candidates - '("Drag and Drop" . (lambda () (call-process "/bin/bash" nil 0 nil "-c" (concat - "dragon-drag-and-drop " - (file-name-as-directory org-ref-pdf-directory) - (car (org-ref-get-bibtex-key-and-file)) - ".pdf")))) - t) + (add-to-list 'org-ref-helm-user-candidates + '("Drag and Drop" . (lambda () (call-process "/bin/bash" nil 0 nil "-c" (concat + "dragon-drag-and-drop " + (file-name-as-directory org-ref-pdf-directory) + (car (org-ref-get-bibtex-key-and-file)) + ".pdf")))) + t) - ;; Let Mathjax deals with equation reference - (defun org-ref-eqref-export (keyword desc format) - (cond - ((eq format 'latex) (format "\\eqref{%s}" keyword)) - ((eq format 'html) (format "\\eqref{%s}" keyword)) - ((eq format 'md) (format "\\eqref{%s}" keyword)))) - ) + ;; Let Mathjax deals with equation reference + (defun org-ref-eqref-export (keyword desc format) + (cond + ((eq format 'latex) (format "\\eqref{%s}" keyword)) + ((eq format 'html) (format "\\eqref{%s}" keyword)) + ((eq format 'md) (format "\\eqref{%s}" keyword)))) + ) #+end_src #+begin_src emacs-lisp - (defun tdh-org-ref-open-pdf-at-point () - "Open the pdf in external program for bibtex key under point if it exists." - (interactive) - (let* ((results (org-ref-get-bibtex-key-and-file)) - (key (car results)) - (pdf-file (funcall org-ref-get-pdf-filename-function key))) - (if (file-exists-p pdf-file) - (call-process "zathura" nil 0 nil pdf-file) - (message "no pdf found for %s" key)))) +(defun tdh-org-ref-open-pdf-at-point () + "Open the pdf in external program for bibtex key under point if it exists." + (interactive) + (let* ((results (org-ref-get-bibtex-key-and-file)) + (key (car results)) + (pdf-file (funcall org-ref-get-pdf-filename-function key))) + (if (file-exists-p pdf-file) + (call-process "zathura" nil 0 nil pdf-file) + (message "no pdf found for %s" key)))) #+end_src ** Org Noter ([[https://github.com/weirdNox/org-noter][link]]) #+begin_src emacs-lisp - (use-package! org-noter - :defer t - :after (:any org pdf-view) - :config - (setq org-noter-always-create-frame nil) +(use-package! org-noter + :defer t + :after (:any org pdf-view) + :config + (setq org-noter-always-create-frame nil) - (setq org-noter-kill-frame-at-session-end nil) + (setq org-noter-kill-frame-at-session-end nil) - ;; Fraction of the frame that the document window will occupy when split - (setq org-noter-doc-split-fraction '(0.6 . 0.6)) + ;; Fraction of the frame that the document window will occupy when split + (setq org-noter-doc-split-fraction '(0.6 . 0.6)) - ;; Save the last visited location automatically; when starting a new session, go to that location - (setq org-noter-auto-save-last-location nil) + ;; Save the last visited location automatically; when starting a new session, go to that location + (setq org-noter-auto-save-last-location nil) - ;; Add an empty line between each note's heading and content - (setq org-noter-separate-notes-from-heading t) + ;; Add an empty line between each note's heading and content + (setq org-noter-separate-notes-from-heading t) - ;; List of paths to check (non recursively) when searching for a notes file - (setq org-noter-notes-search-path "~/Cloud/brain") + ;; List of paths to check (non recursively) when searching for a notes file + (setq org-noter-notes-search-path "~/Cloud/brain") - (defun org-noter-init-pdf-view () - (pdf-view-fit-page-to-window) - (pdf-view-auto-slice-minor-mode) - (run-at-time "0.5 sec" nil #'org-noter)) - (add-hook 'pdf-view-mode-hook 'org-noter-init-pdf-view) + (defun org-noter-init-pdf-view () + (pdf-view-fit-page-to-window) + (pdf-view-auto-slice-minor-mode) + (run-at-time "0.5 sec" nil #'org-noter)) + (add-hook 'pdf-view-mode-hook 'org-noter-init-pdf-view) - (map! - :map pdf-view-mode-map - (:desc "Insert Note" - :n "i" #'org-noter-insert-note)) - ) + (map! + :map pdf-view-mode-map + (:desc "Insert Note" + :n "i" #'org-noter-insert-note)) + ) #+end_src ** Org Roam ([[https://github.com/jethrokuan/org-roam/][link]]) #+begin_src emacs-lisp - (use-package! org-roam - :custom-face - (org-roam-link ((t (:inherit org-link :foreground "#cc241d")))) - :config - (setq org-roam-directory "~/Cloud/brain/") - (setq org-roam-completion-system 'helm) - (setq org-roam-tag-sources '(prop last-directory)) - (setq org-roam-capture-templates - `(("d" "default" plain (function org-roam--capture-get-point) - "%?" - :file-name "${slug}" - :head ,(concat "#+title: ${title}\n" - "#+setupfile: ./setup/org-setup-file.org\n" - "#+hugo_section: zettels\n" - "\n" - "- Tags ::\n" - "\n" - "* Bibliography :ignore:\n" - "bibliography:./biblio/references.bib" - ) - :unnarrowed t))) - (setq org-roam-capture-ref-templates - `(("r" "ref" plain (function org-roam--capture-get-point) - "%?" - :file-name "${slug}" - :head ,(concat "#+title: ${title}\n" - "#+setupfile: ./setup/org-setup-file.org\n" - "#+hugo_section: websites\n" - "#+roam_key: ${ref}\n" - "\n" - "- Tags ::\n" - ) - :unnarrowed t))) - ) +(use-package! org-roam + :custom-face + (org-roam-link ((t (:inherit org-link :foreground "#cc241d")))) + :config + (setq org-roam-directory "~/Cloud/brain/") + (setq org-roam-completion-system 'helm) + (setq org-roam-tag-sources '(prop last-directory)) + (setq org-roam-capture-templates + `(("d" "default" plain (function org-roam--capture-get-point) + "%?" + :file-name "${slug}" + :head ,(concat "#+title: ${title}\n" + "#+setupfile: ./setup/org-setup-file.org\n" + "#+hugo_section: zettels\n" + "\n" + "- Tags ::\n" + "\n" + "* Bibliography :ignore:\n" + "bibliography:./biblio/references.bib" + ) + :unnarrowed t))) + (setq org-roam-capture-ref-templates + `(("r" "ref" plain (function org-roam--capture-get-point) + "%?" + :file-name "${slug}" + :head ,(concat "#+title: ${title}\n" + "#+setupfile: ./setup/org-setup-file.org\n" + "#+hugo_section: websites\n" + "#+roam_key: ${ref}\n" + "\n" + "- Tags ::\n" + ) + :unnarrowed t))) + ) #+end_src Automatic export of backlinks #+begin_src emacs-lisp - (after! (org org-roam) - (defun tdh-org-roam--backlinks-list (file) - (when (org-roam--org-roam-file-p file) - (mapcar #'car (org-roam-db-query [:select :distinct [from] - :from links - :where (= to $s1) - :and from :not :like $s2] file "%private%")))) - (defun tdh-org-export-preprocessor (_backend) - (when-let ((links (tdh-org-roam--backlinks-list (buffer-file-name)))) - (insert "\nBacklinks:\n") - (dolist (link links) - (insert (format "- [[file:%s][%s]]\n" - (file-relative-name link org-roam-directory) - (org-roam--get-title-or-slug link)))))) - (add-hook 'org-export-before-processing-hook #'tdh-org-export-preprocessor) +(after! (org org-roam) + (defun tdh-org-roam--backlinks-list (file) + (when (org-roam--org-roam-file-p file) + (mapcar #'car (org-roam-db-query [:select :distinct [from] + :from links + :where (= to $s1) + :and from :not :like $s2] file "%private%")))) + (defun tdh-org-export-preprocessor (_backend) + (when-let ((links (tdh-org-roam--backlinks-list (buffer-file-name)))) + (insert "\nBacklinks:\n") + (dolist (link links) + (insert (format "- [[file:%s][%s]]\n" + (file-relative-name link org-roam-directory) + (org-roam--get-title-or-slug link)))))) + (add-hook 'org-export-before-processing-hook #'tdh-org-export-preprocessor) - (defun tdh-org-roam-export-all () - "Re-exports all Org-roam files to Hugo markdown." - (interactive) - (dolist (f (org-roam--list-all-files)) - (with-current-buffer (find-file f) - (when (s-contains? "SETUPFILE" (buffer-string)) - (org-hugo-export-wim-to-md))))) - ) + (defun tdh-org-roam-export-all () + "Re-exports all Org-roam files to Hugo markdown." + (interactive) + (dolist (f (org-roam--list-all-files)) + (with-current-buffer (find-file f) + (when (s-contains? "SETUPFILE" (buffer-string)) + (org-hugo-export-wim-to-md))))) + ) #+end_src Create Org-Roam file from heading ([[https://ag91.github.io/blog/2020/11/12/write-org-roam-notes-via-elisp/][link]]) #+begin_src emacs-lisp - (defun tdh/make-roam-filepath (title) - "Make filename from note TITLE." - (concat - org-roam-directory - (org-roam--title-to-slug title) - ".org")) +(defun tdh/make-roam-filepath (title) + "Make filename from note TITLE." + (concat + org-roam-directory + (org-roam--title-to-slug title) + ".org")) - (defun tdh/insert-org-roam-file (file-path title text) - "Insert org roam file in FILE-PATH with TITLE, LINKS, SOURCES, TEXT, QUOTE." - (with-temp-file file-path - (insert - "#+title: " title "\n" - "#+setupfile: ./setup/org-setup-file.org\n" - "#+hugo_section: zettels\n" - "\n" - "- Tags ::\n" - "\n" - text - "\n" - "\n" - "* Bibliography :ignore:\n" - "bibliography:./biblio/references.bib" - "\n" - ))) +(defun tdh/insert-org-roam-file (file-path title text) + "Insert org roam file in FILE-PATH with TITLE, LINKS, SOURCES, TEXT, QUOTE." + (with-temp-file file-path + (insert + "#+title: " title "\n" + "#+setupfile: ./setup/org-setup-file.org\n" + "#+hugo_section: zettels\n" + "\n" + "- Tags ::\n" + "\n" + text + "\n" + "\n" + "* Bibliography :ignore:\n" + "bibliography:./biblio/references.bib" + "\n" + ))) - (defun tdh/convert-task-to-org-note () - "Convert a task in a `org-roam' note." - (interactive) - (let* ((heading (org-get-heading t t t t)) - (body (org-get-entry)) - (filepath (tdh/make-roam-filepath heading))) - (tdh/insert-org-roam-file - filepath - heading - body) - (find-file filepath))) +(defun tdh/convert-task-to-org-note () + "Convert a task in a `org-roam' note." + (interactive) + (let* ((heading (org-get-heading t t t t)) + (body (org-get-entry)) + (filepath (tdh/make-roam-filepath heading))) + (tdh/insert-org-roam-file + filepath + heading + body) + (find-file filepath))) #+end_src ** Helm-Bibtex ([[https://github.com/tmalsburg/helm-bibtex][link]]) #+begin_src emacs-lisp - (use-package! helm-bibtex - :after-call helm-bibtex - :init - :config - ;; Bibliography file - (setq bibtex-completion-bibliography '("~/Cloud/brain/biblio/references.bib" - "~/Cloud/acoustic/resources/acoustics.bib")) +(use-package! helm-bibtex + :after-call helm-bibtex + :init + :config + ;; Bibliography file + (setq bibtex-completion-bibliography '("~/Cloud/brain/biblio/references.bib" + "~/Cloud/acoustic/resources/acoustics.bib")) - ;; Directory with all the pdfs - (setq bibtex-completion-library-path '("~/Cloud/pdfs/" - "~/Cloud/acoustic/resources/pdfs/")) + ;; Directory with all the pdfs + (setq bibtex-completion-library-path '("~/Cloud/pdfs/" + "~/Cloud/acoustic/resources/pdfs/")) - ;; Directory with notes files - (setq bibtex-completion-notes-path "~/Cloud/brain/") - (setq bibtex-completion-notes-extension ".org") - (setq bibtex-completion-pdf-extension '(".pdf" ".djvu")) + ;; Directory with notes files + (setq bibtex-completion-notes-path "~/Cloud/brain/") + (setq bibtex-completion-notes-extension ".org") + (setq bibtex-completion-pdf-extension '(".pdf" ".djvu")) - (setq bibtex-completion-additional-search-fields '(keywords)) + (setq bibtex-completion-additional-search-fields '(keywords)) - ;; Use "keywords" field when looking for bib entries - (setq helm-bibtex-additional-search-fields '(keywords)) + ;; Use "keywords" field when looking for bib entries + (setq helm-bibtex-additional-search-fields '(keywords)) - (setq helm-bibtex-full-frame nil) + (setq helm-bibtex-full-frame nil) - ;; Display of bibtex entries with helm - (setq bibtex-completion-display-formats - '((t . "${author:36} ${title:*} ${year:4} ${=type=:7} ${=has-note=:1}"))) + ;; Display of bibtex entries with helm + (setq bibtex-completion-display-formats + '((t . "${author:36} ${title:*} ${year:4} ${=type=:7} ${=has-note=:1}"))) - ;; Special symbols for notes and pdf - (setq bibtex-completion-pdf-symbol "⌘") - (setq bibtex-completion-notes-symbol "✎") + ;; Special symbols for notes and pdf + (setq bibtex-completion-pdf-symbol "⌘") + (setq bibtex-completion-notes-symbol "✎") - ;; Template used when creating new Note file - (setq bibtex-completion-notes-template-multiple-files (concat "#+title: ${title}\n" - "#+setupfile: ./setup/org-setup-file.org\n" - "#+hugo_section: ${=type=}\n" - "#+roam_key: ${=key=}\n" - "\n" - "- Tags ::\n" - "- Reference :: cite:${=key=}\n" - "- Author(s) :: ${author}\n" - "- Year :: ${year}\n" - "\n" - "* ${author-abbrev} (${year}): ${title} :${=type=}:ignore:\n" - ":PROPERTIES:\n" - ":NOTER_DOCUMENT: ../pdfs/${=key=}.pdf\n" - ":END:\n" - "\n" - "* Bibliography :ignore:\n" - "bibliography:./biblio/references.bib" - )) + ;; Template used when creating new Note file + (setq bibtex-completion-notes-template-multiple-files (concat "#+title: ${title}\n" + "#+setupfile: ./setup/org-setup-file.org\n" + "#+hugo_section: ${=type=}\n" + "#+roam_key: ${=key=}\n" + "\n" + "- Tags ::\n" + "- Reference :: cite:${=key=}\n" + "- Author(s) :: ${author}\n" + "- Year :: ${year}\n" + "\n" + "* ${author-abbrev} (${year}): ${title} :${=type=}:ignore:\n" + ":PROPERTIES:\n" + ":NOTER_DOCUMENT: ../pdfs/${=key=}.pdf\n" + ":END:\n" + "\n" + "* Bibliography :ignore:\n" + "bibliography:./biblio/references.bib" + )) - ;; Make "Edit notes" the default action - (helm-delete-action-from-source "Edit notes" helm-source-bibtex) - (helm-add-action-to-source "Edit notes" 'helm-bibtex-edit-notes helm-source-bibtex 0) + ;; Make "Edit notes" the default action + (helm-delete-action-from-source "Edit notes" helm-source-bibtex) + (helm-add-action-to-source "Edit notes" 'helm-bibtex-edit-notes helm-source-bibtex 0) - (helm-delete-action-from-source "Open PDF Externally" helm-source-bibtex) - (helm-add-action-to-source "Open PDF Externally" 'tdh-open-pdf-externally helm-source-bibtex 1) + (helm-delete-action-from-source "Open PDF Externally" helm-source-bibtex) + (helm-add-action-to-source "Open PDF Externally" 'tdh-open-pdf-externally helm-source-bibtex 1) - (helm-add-action-to-source "Insert Link to Note" 'tdh-insert-link-to-note helm-source-bibtex 2) + (helm-add-action-to-source "Insert Link to Note" 'tdh-insert-link-to-note helm-source-bibtex 2) - (helm-add-action-to-source "Insert E-Reader Link" 'tdh-insert-link-to-pdf-entry helm-source-bibtex 3) - ) + (helm-add-action-to-source "Insert E-Reader Link" 'tdh-insert-link-to-pdf-entry helm-source-bibtex 3) + ) #+end_src #+begin_src emacs-lisp - (defun tdh-insert-link-to-pdf-entry (key) - "Insert a link to a pdf associated with the bibtex entry." - (let* - ((entry (bibtex-completion-get-entry key)) - (title (bibtex-completion-get-value "title" entry))) - (insert (concat "[[file:Download/" key ".pdf][" title "]] (cite:" key ")")) - ) +(defun tdh-insert-link-to-pdf-entry (key) + "Insert a link to a pdf associated with the bibtex entry." + (let* + ((entry (bibtex-completion-get-entry key)) + (title (bibtex-completion-get-value "title" entry))) + (insert (concat "[[file:Download/" key ".pdf][" title "]] (cite:" key ")")) ) + ) #+end_src #+begin_src emacs-lisp - (defun tdh-insert-link-to-note (key) - "Insert a link to a note associated with the bibtex entry." - (if (and bibtex-completion-notes-path - (f-directory? bibtex-completion-notes-path)) - (let* ((path (f-join bibtex-completion-notes-path - (s-concat key bibtex-completion-notes-extension)))) - (if (file-exists-p path) - (insert (concat "[[file:" (file-relative-name path) "][Notes]]")) - (message "No note file associated")) - ))) +(defun tdh-insert-link-to-note (key) + "Insert a link to a note associated with the bibtex entry." + (if (and bibtex-completion-notes-path + (f-directory? bibtex-completion-notes-path)) + (let* ((path (f-join bibtex-completion-notes-path + (s-concat key bibtex-completion-notes-extension)))) + (if (file-exists-p path) + (insert (concat "[[file:" (file-relative-name path) "][Notes]]")) + (message "No note file associated")) + ))) #+end_src Open pdf externally #+begin_src emacs-lisp - (defun tdh-open-pdf-externally (key) - (call-process "zathura" nil 0 nil (nth 0 (-cons-to-list (bibtex-completion-find-pdf key))))) +(defun tdh-open-pdf-externally (key) + (call-process "zathura" nil 0 nil (nth 0 (-cons-to-list (bibtex-completion-find-pdf key))))) #+end_src Special Commands #+begin_src emacs-lisp - (defun tdh-helm-bibtex-favorites (&optional arg) - "Search Favorite BibTeX entries" - (interactive "P") - (helm-bibtex arg nil "favorite ")) +(defun tdh-helm-bibtex-favorites (&optional arg) + "Search Favorite BibTeX entries" + (interactive "P") + (helm-bibtex arg nil "favorite ")) #+end_src List all element of the bibliography without pdf associated #+begin_src emacs-lisp - (defun tdh-list-bib-without-pdf-associated () - (interactive) - (bibtex-completion-init) - (setq candidates (bibtex-completion-candidates)) +(defun tdh-list-bib-without-pdf-associated () + (interactive) + (bibtex-completion-init) + (setq candidates (bibtex-completion-candidates)) - (defun canditate-is-pdf-present (candidate) - (bibtex-completion-find-pdf-in-library (cdr (assoc "=key=" candidate))) - ) - - (setq candidates-without-pdf (remove-if #'canditate-is-pdf-present candidates)) - - (setq candidate-without-pdf-names (mapcar - (lambda (x) (cdr (assoc "title" x))) - candidates-without-pdf)) - - (with-output-to-temp-buffer "*bib-without-pdf*" (princ (string-join candidate-without-pdf-names "\n"))) - (switch-to-buffer-other-window "*bib-without-pdf*") + (defun canditate-is-pdf-present (candidate) + (bibtex-completion-find-pdf-in-library (cdr (assoc "=key=" candidate))) ) + + (setq candidates-without-pdf (remove-if #'canditate-is-pdf-present candidates)) + + (setq candidate-without-pdf-names (mapcar + (lambda (x) (cdr (assoc "title" x))) + candidates-without-pdf)) + + (with-output-to-temp-buffer "*bib-without-pdf*" (princ (string-join candidate-without-pdf-names "\n"))) + (switch-to-buffer-other-window "*bib-without-pdf*") + ) #+end_src ** Deft #+begin_src emacs-lisp - (use-package! deft - :custom - (deft-directory "~/Cloud/brain/")) +(use-package! deft + :custom + (deft-directory "~/Cloud/brain/")) #+end_src ** Org-Roam-Bibtex ([[https://github.com/Zaeph/org-roam-bibtex][link]]) @@ -2775,53 +2775,53 @@ Provides nice functions such as: - =orb-note-action= #+begin_src emacs-lisp - (use-package! org-roam-bibtex - :hook (org-roam-mode . org-roam-bibtex-mode) - :config - (setq orb-preformat-keywords `("=key=" "title" "author" "year" "author-abbrev" "=type=")) +(use-package! org-roam-bibtex + :hook (org-roam-mode . org-roam-bibtex-mode) + :config + (setq orb-preformat-keywords `("=key=" "title" "author" "year" "author-abbrev" "=type=")) - (setq orb-templates - `(("r" "ref" plain (function org-roam-capture--get-point) "" - :file-name "${=key=}" - :head ,(concat "#+title: ${title}\n" - "#+setupfile: ./setup/org-setup-file.org\n" - "#+hugo_section: ${=type=}\n" - "#+roam_key: ${ref}\n" - "\n" - "- Tags ::\n" - "- Reference :: ${ref}\n" - "- Author(s) :: ${author}\n" - "- Year :: ${year}\n" - "\n" - "* ${author-abbrev} (${year}): ${title} :${=type=}:ignore:\n" - ":PROPERTIES:\n" - ":NOTER_DOCUMENT: ../pdfs/${=key=}.pdf\n" - ":END:\n" - "\n" - "* Bibliography :ignore:\n" - "bibliography:./biblio/references.bib" - ) - :unnarrowed t))) + (setq orb-templates + `(("r" "ref" plain (function org-roam-capture--get-point) "" + :file-name "${=key=}" + :head ,(concat "#+title: ${title}\n" + "#+setupfile: ./setup/org-setup-file.org\n" + "#+hugo_section: ${=type=}\n" + "#+roam_key: ${ref}\n" + "\n" + "- Tags ::\n" + "- Reference :: ${ref}\n" + "- Author(s) :: ${author}\n" + "- Year :: ${year}\n" + "\n" + "* ${author-abbrev} (${year}): ${title} :${=type=}:ignore:\n" + ":PROPERTIES:\n" + ":NOTER_DOCUMENT: ../pdfs/${=key=}.pdf\n" + ":END:\n" + "\n" + "* Bibliography :ignore:\n" + "bibliography:./biblio/references.bib" + ) + :unnarrowed t))) - (setq orb-note-actions-user '(("Open with Zathura" . tdh-open-bib-with-zathura))) - ) + (setq orb-note-actions-user '(("Open with Zathura" . tdh-open-bib-with-zathura))) + ) #+end_src #+begin_src emacs-lisp - (defun tdh-open-bib-with-zathura (key) - "Open the pdf corresponding to the reference KEY with Zathura" - (if (listp key) - (setq key (car key))) - (call-process "zathura" nil 0 nil (org-ref-get-pdf-filename key))) +(defun tdh-open-bib-with-zathura (key) + "Open the pdf corresponding to the reference KEY with Zathura" + (if (listp key) + (setq key (car key))) + (call-process "zathura" nil 0 nil (org-ref-get-pdf-filename key))) #+end_src ** Citeproc-org ([[https://github.com/andras-simonyi/citeproc-org][link]]) #+begin_src emacs-lisp - (use-package! citeproc-org - :after org - :config - (citeproc-org-setup) - (setq citeproc-org-html-backends '(html))) +(use-package! citeproc-org + :after org + :config + (citeproc-org-setup) + (setq citeproc-org-html-backends '(html))) #+end_src * LaTeX @@ -2830,15 +2830,15 @@ Provides nice functions such as: ** Basic Config #+begin_src emacs-lisp - (after! auctex - (setq +latex-viewers '(zathura pdf-tools))) +(after! auctex + (setq +latex-viewers '(zathura pdf-tools))) #+end_src ** Bibtex #+begin_src emacs-lisp - (use-package! bibtex - :config - (bibtex-set-dialect 'BibTeX)) +(use-package! bibtex + :config + (bibtex-set-dialect 'BibTeX)) #+end_src * Matlab @@ -2846,97 +2846,97 @@ Provides nice functions such as: ** Setup Matlab Mode #+begin_src emacs-lisp - (setq matlab-shell-command "/home/thomas/.local/bin/matlab") - (setq matlab-shell-command-switches (list "-softwareopengl -nodesktop -nosplash")) - (setq matlab-indent-function t) - (setq mlint-programs '("mlint" "/home/thomas/.local/bin/mlint")) +(setq matlab-shell-command "/home/thomas/.local/bin/matlab") +(setq matlab-shell-command-switches (list "-softwareopengl -nodesktop -nosplash")) +(setq matlab-indent-function t) +(setq mlint-programs '("mlint" "/home/thomas/.local/bin/mlint")) #+end_src ** Setup Flycheck to work with =mlint= #+begin_src emacs-lisp - (defvar mlint-executable "/home/thomas/.local/bin/mlint") +(defvar mlint-executable "/home/thomas/.local/bin/mlint") - (flycheck-define-command-checker 'matlab-mlint - "A Matlab checker based on mlint." - :command `(,mlint-executable source) - :error-patterns - '((warning line-start "L " line " (C " (1+ digit) "): " (message) line-end)) - :modes '(matlab-mode)) +(flycheck-define-command-checker 'matlab-mlint + "A Matlab checker based on mlint." + :command `(,mlint-executable source) + :error-patterns + '((warning line-start "L " line " (C " (1+ digit) "): " (message) line-end)) + :modes '(matlab-mode)) - (add-to-list 'flycheck-checkers 'matlab-mlint) +(add-to-list 'flycheck-checkers 'matlab-mlint) - ;; Automatic startup of flycheck for matlab - (add-hook 'matlab-mode-hook 'flycheck-mode) +;; Automatic startup of flycheck for matlab +(add-hook 'matlab-mode-hook 'flycheck-mode) #+end_src ** Completion in the Matlab Shell #+begin_src emacs-lisp - (map! :map matlab-shell-mode-map - :i "" 'matlab-shell-tab) +(map! :map matlab-shell-mode-map + :i "" 'matlab-shell-tab) #+end_src ** Beautify code #+begin_src emacs-lisp - (defun tdh-matlab-beautify-buffer () - "Beautify Current Matlab Buffer" - (interactive) - ;; First verifies is the current file is a Matlab file - (if (string= (file-name-extension (buffer-file-name)) "m") - (progn - (save-buffer) - (matlab-shell-run-command (concat "MBeautify.formatFileNoEditor(\"" (buffer-file-name) "\", \"" (buffer-file-name) "\")")) - (revert-buffer :ignore-auto :noconfirm)) - (message "Current buffer is not a matlab file") - ) +(defun tdh-matlab-beautify-buffer () + "Beautify Current Matlab Buffer" + (interactive) + ;; First verifies is the current file is a Matlab file + (if (string= (file-name-extension (buffer-file-name)) "m") + (progn + (save-buffer) + (matlab-shell-run-command (concat "MBeautify.formatFileNoEditor(\"" (buffer-file-name) "\", \"" (buffer-file-name) "\")")) + (revert-buffer :ignore-auto :noconfirm)) + (message "Current buffer is not a matlab file") ) + ) #+end_src ** Key Bindings #+begin_src emacs-lisp - (defun tdh-matlab-add-breakpoint () - (interactive) - (matlab-shell-run-command (concat "dbstop in " (buffer-name) " at " (number-to-string (line-number-at-pos nil))))) +(defun tdh-matlab-add-breakpoint () + (interactive) + (matlab-shell-run-command (concat "dbstop in " (buffer-name) " at " (number-to-string (line-number-at-pos nil))))) - (defun tdh-matlab-remove-breakpoint () - (interactive) - (matlab-shell-run-command (concat "dbclear in " (buffer-name) " at " (number-to-string (line-number-at-pos nil))))) +(defun tdh-matlab-remove-breakpoint () + (interactive) + (matlab-shell-run-command (concat "dbclear in " (buffer-name) " at " (number-to-string (line-number-at-pos nil))))) - (defun tdh-matlab-list-breakpoints () - (interactive) - (matlab-shell-run-command (concat "dbstatus " (buffer-name)))) +(defun tdh-matlab-list-breakpoints () + (interactive) + (matlab-shell-run-command (concat "dbstatus " (buffer-name)))) - (defun tdh-matlab-clear-breakpoints () - (interactive) - (matlab-shell-run-command (concat "dbclear in " (buffer-name)))) +(defun tdh-matlab-clear-breakpoints () + (interactive) + (matlab-shell-run-command (concat "dbclear in " (buffer-name)))) - (defun tdh-matlab-no-debug-on-error () - (interactive) - (matlab-shell-run-command (concat "dbclear if error"))) +(defun tdh-matlab-no-debug-on-error () + (interactive) + (matlab-shell-run-command (concat "dbclear if error"))) - (defun tdh-matlab-debug-on-error () - (interactive) - (matlab-shell-run-command (concat "dbstop if error"))) +(defun tdh-matlab-debug-on-error () + (interactive) + (matlab-shell-run-command (concat "dbstop if error"))) - (defun tdh-matlab-go-to-file-directory () - (interactive) - (matlab-shell-run-command (concat "cd " (file-name-directory buffer-file-name)))) +(defun tdh-matlab-go-to-file-directory () + (interactive) + (matlab-shell-run-command (concat "cd " (file-name-directory buffer-file-name)))) #+end_src #+begin_src emacs-lisp - (map! :map matlab-mode-map - (:prefix ("," . "prefix") - :n "g" 'tdh-matlab-go-to-file-directory - (:prefix ("d" . "Debug") - :n "de" 'tdh-matlab-debug-on-error - :n "dE" 'tdh-matlab-no-debug-on-error - :n "da" 'tdh-matlab-add-breakpoint - :n "dr" 'tdh-matlab-remove-breakpoint - :n "dL" 'tdh-matlab-list-breakpoints - :n "dc" 'tdh-matlab-clear-breakpoints - :n "dl" 'gud-cont - :n "ds" 'gud-step - :n "dn" 'gud-next - :n "dq" 'gud-finish))) +(map! :map matlab-mode-map + (:prefix ("," . "prefix") + :n "g" 'tdh-matlab-go-to-file-directory + (:prefix ("d" . "Debug") + :n "de" 'tdh-matlab-debug-on-error + :n "dE" 'tdh-matlab-no-debug-on-error + :n "da" 'tdh-matlab-add-breakpoint + :n "dr" 'tdh-matlab-remove-breakpoint + :n "dL" 'tdh-matlab-list-breakpoints + :n "dc" 'tdh-matlab-clear-breakpoints + :n "dl" 'gud-cont + :n "ds" 'gud-step + :n "dn" 'gud-next + :n "dq" 'gud-finish))) #+end_src * Mu4e @@ -2965,270 +2965,270 @@ Send math and source code: ** Helping function This is a helper to help determine which account context I am in based on the folder in my maildir the email (eg. ~/.mail/nine27) is located in. #+begin_src emacs-lisp - (defun mu4e-message-maildir-matches (msg rx) - (when rx - (if (listp rx) - ;; If rx is a list, try each one for a match - (or (mu4e-message-maildir-matches msg (car rx)) - (mu4e-message-maildir-matches msg (cdr rx))) - ;; Not a list, check rx - (string-match rx (mu4e-message-field msg :maildir))))) +(defun mu4e-message-maildir-matches (msg rx) + (when rx + (if (listp rx) + ;; If rx is a list, try each one for a match + (or (mu4e-message-maildir-matches msg (car rx)) + (mu4e-message-maildir-matches msg (cdr rx))) + ;; Not a list, check rx + (string-match rx (mu4e-message-field msg :maildir))))) #+end_src Choose account label to feed msmtp -a option based on From header in Message buffer; This function must be added to message-send-mail-hook for on-the-fly change of From address before sending message since message-send-mail-hook is processed right before sending message. #+begin_src emacs-lisp - (defun choose-msmtp-account () - (if (message-mail-p) - (save-excursion - (let* - ((from (save-restriction - (message-narrow-to-headers) - (message-fetch-field "from"))) - (account - (cond - ((string-match "dehaeze.thomas@gmail.com" from) "gmail") - ((string-match "thomas.dehaeze@esrf.fr" from) "esrf")))) - (setq message-sendmail-extra-arguments (list '"-a" account)))))) +(defun choose-msmtp-account () + (if (message-mail-p) + (save-excursion + (let* + ((from (save-restriction + (message-narrow-to-headers) + (message-fetch-field "from"))) + (account + (cond + ((string-match "dehaeze.thomas@gmail.com" from) "gmail") + ((string-match "thomas.dehaeze@esrf.fr" from) "esrf")))) + (setq message-sendmail-extra-arguments (list '"-a" account)))))) #+end_src ** Basic Config #+begin_src emacs-lisp - (use-package! mu4e - :config - (setq mail-user-agent 'mu4e-user-agent - mu4e-mu-binary "/usr/bin/mu" - mu4e-maildir "~/.mail" - mu4e-compose-format-flowed t - mu4e-compose-in-new-frame nil - mu4e-view-show-images t - mu4e-html2text-command "w3m -dump -T text/html" - mu4e-use-fancy-chars t - mu4e-headers-include-related t - mu4e-attachment-dir "~/Downloads" - message-kill-buffer-on-exit t - mu4e-compose-signature-auto-include t - mu4e-view-show-images t - mu4e-view-show-addresses t) - ) +(use-package! mu4e + :config + (setq mail-user-agent 'mu4e-user-agent + mu4e-mu-binary "/usr/bin/mu" + mu4e-maildir "~/.mail" + mu4e-compose-format-flowed t + mu4e-compose-in-new-frame nil + mu4e-view-show-images t + mu4e-html2text-command "w3m -dump -T text/html" + mu4e-use-fancy-chars t + mu4e-headers-include-related t + mu4e-attachment-dir "~/Downloads" + message-kill-buffer-on-exit t + mu4e-compose-signature-auto-include t + mu4e-view-show-images t + mu4e-view-show-addresses t) + ) #+end_src ** Additional config #+begin_src emacs-lisp - (use-package! mu4e - :config - ;; Use imagemagick, if available. - (when (fboundp 'imagemagick-register-types) - (imagemagick-register-types)) +(use-package! mu4e + :config + ;; Use imagemagick, if available. + (when (fboundp 'imagemagick-register-types) + (imagemagick-register-types)) - ;; Sometimes html email is just not readable in a text based client, this lets me open the - ;; email in my browser. - (add-to-list 'mu4e-view-actions '("View in browser" . mu4e-action-view-in-browser) t) + ;; Sometimes html email is just not readable in a text based client, this lets me open the + ;; email in my browser. + (add-to-list 'mu4e-view-actions '("View in browser" . mu4e-action-view-in-browser) t) - ;; Spell checking ftw. - (add-hook 'mu4e-compose-mode-hook 'flyspell-mode) + ;; Spell checking ftw. + (add-hook 'mu4e-compose-mode-hook 'flyspell-mode) - ;; Use Helm to select mailboxes - (setq mu4e-completing-read-function 'completing-read) - ;; Don't ask for a 'context' upon opening mu4e - (setq mu4e-context-policy 'pick-first) - ;; Don't ask to quit... why is this the default? - (setq mu4e-confirm-quit nil) - ) + ;; Use Helm to select mailboxes + (setq mu4e-completing-read-function 'completing-read) + ;; Don't ask for a 'context' upon opening mu4e + (setq mu4e-context-policy 'pick-first) + ;; Don't ask to quit... why is this the default? + (setq mu4e-confirm-quit nil) + ) #+end_src ** Provide Information #+begin_src emacs-lisp - (use-package! mu4e - :config - (setq mu4e-user-mail-address-list '("dehaeze.thomas@gmail.com" "thomas.dehaeze@esrf.fr") - mu4e-compose-signature "Thomas Dehaeze\n" - user-mail-address "dehaeze.thomas@gmail.com") - ;; Default Folders - (setq mu4e-sent-folder "/gmail/Sent" - mu4e-drafts-folder "/gmail/Drafts" - mu4e-trash-folder "/gmail/Trash" - mu4e-refile-folder "/gmail/Archive") - ) +(use-package! mu4e + :config + (setq mu4e-user-mail-address-list '("dehaeze.thomas@gmail.com" "thomas.dehaeze@esrf.fr") + mu4e-compose-signature "Thomas Dehaeze\n" + user-mail-address "dehaeze.thomas@gmail.com") + ;; Default Folders + (setq mu4e-sent-folder "/gmail/Sent" + mu4e-drafts-folder "/gmail/Drafts" + mu4e-trash-folder "/gmail/Trash" + mu4e-refile-folder "/gmail/Archive") + ) #+end_src ** Receiving emails using mbsync #+begin_src emacs-lisp - (use-package! mu4e - :config - (setq mu4e-get-mail-command "checkmail" - mu4e-update-interval nil - mu4e-change-filenames-when-moving t) ;; Fix for mbsync - ) +(use-package! mu4e + :config + (setq mu4e-get-mail-command "checkmail" + mu4e-update-interval nil + mu4e-change-filenames-when-moving t) ;; Fix for mbsync + ) #+end_src ** Contexts #+begin_src emacs-lisp - (use-package! mu4e - :config - (setq mu4e-contexts - `( ,(make-mu4e-context - :name "gmail" - :enter-func (lambda () (mu4e-message "Switch to the gmail context")) - :match-func (lambda (msg) (when msg - (string-prefix-p "/gmail" (mu4e-message-field msg :maildir)))) - :leave-func (lambda () (mu4e-clear-caches)) - :vars '( - (user-mail-address . "dehaeze.thomas@gmail.com") - (user-full-name . "Thomas Dehaeze") - (mu4e-sent-folder . "/gmail/Sent") - (mu4e-trash-folder . "/gmail/Trash") - (mu4e-drafts-folder . "/gmail/Drafts") - (mu4e-refile-folder . "/gmail/Archive") - (mu4e-compose-signature . "Thomas Dehaeze\n") - )) - ,(make-mu4e-context - :name "esrf" - :enter-func (lambda () (mu4e-message "Switch to the esrf context")) - :match-func (lambda (msg) (when msg - (string-prefix-p "/esrf" (mu4e-message-field msg :maildir)))) - :leave-func (lambda () (mu4e-clear-caches)) - :vars '( - (user-mail-address . "thomas.dehaeze@esrf.fr") - (user-full-name . "Thomas Dehaeze") - (mu4e-sent-folder . "/esrf/Sent") - (mu4e-trash-folder . "/esrf/Trash") - (mu4e-drafts-folder . "/esrf/Drafts") - (mu4e-refile-folder . "/esrf/Archive") - (mu4e-compose-signature . "Thomas Dehaeze\n") - )) - )) - ) +(use-package! mu4e + :config + (setq mu4e-contexts + `( ,(make-mu4e-context + :name "gmail" + :enter-func (lambda () (mu4e-message "Switch to the gmail context")) + :match-func (lambda (msg) (when msg + (string-prefix-p "/gmail" (mu4e-message-field msg :maildir)))) + :leave-func (lambda () (mu4e-clear-caches)) + :vars '( + (user-mail-address . "dehaeze.thomas@gmail.com") + (user-full-name . "Thomas Dehaeze") + (mu4e-sent-folder . "/gmail/Sent") + (mu4e-trash-folder . "/gmail/Trash") + (mu4e-drafts-folder . "/gmail/Drafts") + (mu4e-refile-folder . "/gmail/Archive") + (mu4e-compose-signature . "Thomas Dehaeze\n") + )) + ,(make-mu4e-context + :name "esrf" + :enter-func (lambda () (mu4e-message "Switch to the esrf context")) + :match-func (lambda (msg) (when msg + (string-prefix-p "/esrf" (mu4e-message-field msg :maildir)))) + :leave-func (lambda () (mu4e-clear-caches)) + :vars '( + (user-mail-address . "thomas.dehaeze@esrf.fr") + (user-full-name . "Thomas Dehaeze") + (mu4e-sent-folder . "/esrf/Sent") + (mu4e-trash-folder . "/esrf/Trash") + (mu4e-drafts-folder . "/esrf/Drafts") + (mu4e-refile-folder . "/esrf/Archive") + (mu4e-compose-signature . "Thomas Dehaeze\n") + )) + )) + ) #+end_src ** Sending mails #+begin_src emacs-lisp - (use-package! mu4e - :config - (setq message-send-mail-function 'message-send-mail-with-sendmail - sendmail-program "/usr/bin/msmtp" - user-full-name "Thomas Dehaeze") +(use-package! mu4e + :config + (setq message-send-mail-function 'message-send-mail-with-sendmail + sendmail-program "/usr/bin/msmtp" + user-full-name "Thomas Dehaeze") - ;; This prevents saving the email to the Sent folder since gmail will do this for us on their end. - (setq mu4e-sent-messages-behavior 'delete) + ;; This prevents saving the email to the Sent folder since gmail will do this for us on their end. + (setq mu4e-sent-messages-behavior 'delete) - ;; Use the correct account context when sending mail based on the from header. - (setq message-sendmail-envelope-from 'header) - (add-hook 'message-send-mail-hook 'choose-msmtp-account) - ) + ;; Use the correct account context when sending mail based on the from header. + (setq message-sendmail-envelope-from 'header) + (add-hook 'message-send-mail-hook 'choose-msmtp-account) + ) #+end_src ** Bookmarks #+begin_src emacs-lisp - (use-package! mu4e - :config - (setq mu4e-bookmarks `(,(make-mu4e-bookmark - :name "All Inboxes" - :query "maildir:/gmail/Inbox OR maildir:/esrf/Inbox" - :key ?i) - ("flag:unread" "Unread messages" ?u) - ("date:today..now" "Today's messages" ?t) - ("date:7d..now" "Last 7 days" ?w))) - ) +(use-package! mu4e + :config + (setq mu4e-bookmarks `(,(make-mu4e-bookmark + :name "All Inboxes" + :query "maildir:/gmail/Inbox OR maildir:/esrf/Inbox" + :key ?i) + ("flag:unread" "Unread messages" ?u) + ("date:today..now" "Today's messages" ?t) + ("date:7d..now" "Last 7 days" ?w))) + ) #+end_src * Doom =init.el= #+begin_src emacs-lisp :tangle ~/.config/doom/init.el - (when noninteractive - (after! undo-tree - (global-undo-tree-mode -1))) +(when noninteractive + (after! undo-tree + (global-undo-tree-mode -1))) - (doom! :completion - company ; the ultimate code completion backend - helm ; the *other* search engine for love and life - ivy ; a search engine for love and life +(doom! :completion + company ; the ultimate code completion backend + helm ; the *other* search engine for love and life + ivy ; a search engine for love and life - :ui - doom ; what makes DOOM look the way it does - deft - hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW - hydra - modeline - ophints ; highlight the region an operation acts on - (popup ; tame sudden yet inevitable temporary windows - +all ; catch all popups that start with an asterix - +defaults) ; default popup rules - unicode ; extended unicode support for various languages - vc-gutter ; vcs diff in the fringe - vi-tilde-fringe ; fringe tildes to mark beyond EOB - workspaces ; tab emulation, persistence & separate workspaces - (emoji +unicode) + :ui + doom ; what makes DOOM look the way it does + deft + hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW + hydra + modeline + ophints ; highlight the region an operation acts on + (popup ; tame sudden yet inevitable temporary windows + +all ; catch all popups that start with an asterix + +defaults) ; default popup rules + unicode ; extended unicode support for various languages + vc-gutter ; vcs diff in the fringe + vi-tilde-fringe ; fringe tildes to mark beyond EOB + workspaces ; tab emulation, persistence & separate workspaces + (emoji +unicode) - :editor - (evil +everywhere); come to the dark side, we have cookies - fold ; (nigh) universal code folding - rotate-text ; cycle region at point between text candidates - snippets ; my elves. They type so I don't have to - word-wrap ; soft wrapping with language-aware indent + :editor + (evil +everywhere); come to the dark side, we have cookies + fold ; (nigh) universal code folding + rotate-text ; cycle region at point between text candidates + snippets ; my elves. They type so I don't have to + word-wrap ; soft wrapping with language-aware indent - :emacs - (dired +icons) ; making dired pretty [functional] - electric ; smarter, keyword-based electric-indent - (ibuffer +icons) ; interactive buffer management - vc ; version-control and Emacs, sitting in a tree - undo + :emacs + (dired +icons) ; making dired pretty [functional] + electric ; smarter, keyword-based electric-indent + (ibuffer +icons) ; interactive buffer management + vc ; version-control and Emacs, sitting in a tree + undo - :term - eshell ; a consistent, cross-platform shell (WIP) - vterm + :term + eshell ; a consistent, cross-platform shell (WIP) + vterm - :tools - debugger ; Stepping through code, to help you add bugs - (eval +overlay) ; run code, run (also, repls) - (lookup ; helps you navigate your code and documentation - +docsets) ; ...or in Dash docsets locally - lsp - magit ; a git porcelain for Emacs - docker - ;;pass ; password manager for nerds - pdf ; pdf enhancements - eval - biblio - (lookup +dictionary) + :tools + debugger ; Stepping through code, to help you add bugs + (eval +overlay) ; run code, run (also, repls) + (lookup ; helps you navigate your code and documentation + +docsets) ; ...or in Dash docsets locally + lsp + magit ; a git porcelain for Emacs + docker + ;;pass ; password manager for nerds + pdf ; pdf enhancements + eval + biblio + (lookup +dictionary) - :checkers - syntax ; tasing you for every semicolon you forget - (spell +aspell) ; tasing you for misspelling mispelling + :checkers + syntax ; tasing you for every semicolon you forget + (spell +aspell) ; tasing you for misspelling mispelling - :lang - data ; config/data formats - emacs-lisp ; drown in parentheses - go - (javascript - +lsp) - (latex - +latexmk - +lsp) - ;; markdown ; writing docs for people to ignore - (org ; organize your plain life in plain text - +dragndrop ; drag & drop files/images into org buffers - +hugo ; use Emacs for hugo blogging - +roam ; - +gnuplot - +present) ; using org-mode for presentations - python ; beautiful is better than ugly - (sh ; she sells {ba,z,fi}sh shells on the C xor - +lsp) - (web - +lsp) - yaml + :lang + data ; config/data formats + emacs-lisp ; drown in parentheses + go + (javascript + +lsp) + (latex + +latexmk + +lsp) + ;; markdown ; writing docs for people to ignore + (org ; organize your plain life in plain text + +dragndrop ; drag & drop files/images into org buffers + +hugo ; use Emacs for hugo blogging + +roam ; + +gnuplot + +present) ; using org-mode for presentations + python ; beautiful is better than ugly + (sh ; she sells {ba,z,fi}sh shells on the C xor + +lsp) + (web + +lsp) + yaml - :email - (mu4e +gmail) + :email + (mu4e +gmail) - :app - calendar - ;;(rss +org) ; emacs as an RSS reader - ;;write ; emacs for writers (fiction, notes, papers, etc.) + :app + calendar + ;;(rss +org) ; emacs as an RSS reader + ;;write ; emacs for writers (fiction, notes, papers, etc.) - :config - literate - (default +bindings) - ) + :config + literate + (default +bindings) + ) #+end_src * Doom =packages.el= @@ -3237,86 +3237,86 @@ Choose account label to feed msmtp -a option based on From header in Message buf :END: #+begin_src emacs-lisp - ;; Vimrc - (package! vimrc-mode) +;; Vimrc +(package! vimrc-mode) #+end_src #+begin_src emacs-lisp - ;; Automatic toggling of LaTeX fragments - (package! org-fragtog) +;; Automatic toggling of LaTeX fragments +(package! org-fragtog) #+end_src #+begin_src emacs-lisp - ;; custom blocks and links for org-mode - (package! org-special-block-extras) +;; custom blocks and links for org-mode +(package! org-special-block-extras) #+end_src #+begin_src emacs-lisp - ;; Nice theme - (package! poet-theme) +;; Nice theme +(package! poet-theme) #+end_src #+begin_src emacs-lisp - ;; Major mode for SPICE - (package! spice-mode) +;; Major mode for SPICE +(package! spice-mode) #+end_src #+begin_src emacs-lisp - ;; Import file to Org-mode - (package! org-pandoc-import - :recipe (:host github - :repo "tecosaur/org-pandoc-import" - :files ("*.el" "filters" "preprocessors"))) +;; Import file to Org-mode +(package! org-pandoc-import + :recipe (:host github + :repo "tecosaur/org-pandoc-import" + :files ("*.el" "filters" "preprocessors"))) #+end_src #+begin_src emacs-lisp - ;; Renders Org-mode citations in CSL styles - (package! citeproc-org) +;; Renders Org-mode citations in CSL styles +(package! citeproc-org) #+end_src #+begin_src emacs-lisp - ;; Org-mode modules for citations, cross-references, bibliographies - (package! org-ref) +;; Org-mode modules for citations, cross-references, bibliographies +(package! org-ref) #+end_src #+begin_src emacs-lisp - ;; Alert notifications for org-agenda - (package! org-wild-notifier) +;; Alert notifications for org-agenda +(package! org-wild-notifier) #+end_src #+begin_src emacs-lisp - ;; Display Google Calendar in org-calendar - (package! org-gcal) +;; Display Google Calendar in org-calendar +(package! org-gcal) #+end_src #+begin_src emacs-lisp - ;; Turn table into subfigure - (package! ox-latex-subfigure - :recipe (:host github :repo "linktohack/ox-latex-subfigure")) +;; Turn table into subfigure +(package! ox-latex-subfigure + :recipe (:host github :repo "linktohack/ox-latex-subfigure")) #+end_src #+begin_src emacs-lisp - ;; Major Mode for Matlab - (package! matlab-mode - :recipe (:host github :repo "matlab-mode/mirror")) +;; Major Mode for Matlab +(package! matlab-mode + :recipe (:host github :repo "matlab-mode/mirror")) #+end_src #+begin_src emacs-lisp - ;; Org-mode query language - (package! org-ql) +;; Org-mode query language +(package! org-ql) #+end_src #+begin_src emacs-lisp - ;; Display Org Mode priorities as custom strings - (package! org-fancy-priorities) +;; Display Org Mode priorities as custom strings +(package! org-fancy-priorities) #+end_src #+begin_src emacs-lisp :tangle no - ;; Web Server - (package! web-server) +;; Web Server +(package! web-server) #+end_src #+begin_src emacs-lisp - ;; Don't use this default package in Doom - (package! evil-escape :disable t) +;; Don't use this default package in Doom +(package! evil-escape :disable t) #+end_src diff --git a/emacs-library-babel.org b/emacs-library-babel.org index 285f87e..0bd3c4f 100644 --- a/emacs-library-babel.org +++ b/emacs-library-babel.org @@ -5,29 +5,29 @@ #+name: get-password #+begin_src bash :var passname=""" - pass $passname | sed -n 1p +pass $passname | sed -n 1p #+end_src * =pdf2svg= - Export to pdf/png/svg at the same time #+name: pdf2svg #+begin_src sh :var file="" :var ext="svg" :results output - _mydir="$(pwd)"; - file=$(echo "$file" | cut -f 2- -d ':'); - _figdir=$(dirname "$file"); - cd $_figdir; - filename=$(echo "${file##*/}" | cut -f 1 -d '.'); - pdftocairo -png -transp -singlefile "$filename.pdf"; - pdftocairo -svg "$filename.pdf"; - cd "$_mydir"; - echo "[[file:$_figdir/$filename.$ext]]" +_mydir="$(pwd)"; +file=$(echo "$file" | cut -f 2- -d ':'); +_figdir=$(dirname "$file"); +cd $_figdir; +filename=$(echo "${file##*/}" | cut -f 1 -d '.'); +pdftocairo -png -transp -singlefile "$filename.pdf"; +pdftocairo -svg "$filename.pdf"; +cd "$_mydir"; +echo "[[file:$_figdir/$filename.$ext]]" #+end_src * =addhdr= - Add hline to tables #+name: addhdr #+begin_src emacs-lisp :var tbl="" - (cons (car tbl) (cons 'hline (cdr tbl))) +(cons (car tbl) (cons 'hline (cdr tbl))) #+end_src * Matlab Related @@ -35,22 +35,22 @@ #+name: matlab-dir #+begin_src matlab :tangle no :results none :exports none :var current_dir="" - %% Go to current Directory - cd(current_dir); +%% Go to current Directory +cd(current_dir); - %% Initialize ans with org-babel - ans = 0; +%% Initialize ans with org-babel +ans = 0; #+end_src ** =matlab-init= Initialize matlab #+name: matlab-init #+begin_src matlab :results none :exports none - %% Clear Workspace and Close figures - clear; close all; clc; +%% Clear Workspace and Close figures +clear; close all; clc; - %% Intialize Laplace variable - s = zpk('s'); +%% Intialize Laplace variable +s = zpk('s'); #+end_src ** =plt-matlab= Plot figures @@ -60,13 +60,13 @@ Some variable can be set by block that expands this org source code block: #+name: plt-matlab #+begin_src matlab :results value raw replace :exports code :var filepath="" :var figsize="normal-normal" - if ~exist('filepath') || length(filepath) < 2 - symbols = ['a':'z' 'A':'Z' '0':'9']; - random_string = symbols(randi(numel(symbols),[1 5])); - filepath = ['/tmp/matlab-fig-', random_string]; - end +if ~exist('filepath') || length(filepath) < 2 + symbols = ['a':'z' 'A':'Z' '0':'9']; + random_string = symbols(randi(numel(symbols),[1 5])); + filepath = ['/tmp/matlab-fig-', random_string]; +end - size_strings = strsplit(figsize, '-'); +size_strings = strsplit(figsize, '-'); - ans = exportFig(filepath, 'width', size_strings{1}, 'height', size_strings{2}); +ans = exportFig(filepath, 'width', size_strings{1}, 'height', size_strings{2}); #+end_src diff --git a/emacs-snippets.org b/emacs-snippets.org index c9d4cd6..3def7d2 100644 --- a/emacs-snippets.org +++ b/emacs-snippets.org @@ -289,15 +289,15 @@ $0 ** Wrap Figure #+begin_src conf :tangle ~/.config/doom/snippets/org-mode/wrapfig - #contributor : Thomas Dehaeze - #name :Wrap Figure - # -- - ,#+attr_latex: :options {${1:rl}}{${2:0.45\textwidth}} - ,#+begin_wrapfigure - ,#+attr_latex: :${3:width \linewidth} - [[file:figs/${4:figure_name.pdf}]] - ,#+end_wrapfigure - $0 +#contributor : Thomas Dehaeze +#name :Wrap Figure +# -- +,#+attr_latex: :options {${1:rl}}{${2:0.45\textwidth}} +,#+begin_wrapfigure +,#+attr_latex: :${3:width \linewidth} +[[file:figs/${4:figure_name.pdf}]] +,#+end_wrapfigure +$0 #+end_src ** Multicolumn diff --git a/git.org b/git.org index bbc91ce..6bee296 100644 --- a/git.org +++ b/git.org @@ -188,9 +188,9 @@ ** Github #+BEGIN_SRC conf - [github] - user = tdehaeze - oauth-token = 8cc5b41120f7e9a869c24fa3678667d3d8422e6f +[github] + user = tdehaeze + oauth-token = 8cc5b41120f7e9a869c24fa3678667d3d8422e6f #+END_SRC * =~/.gitignore_global= - Global Git Ignore @@ -212,12 +212,12 @@ Session.vim :END: #+BEGIN_SRC conf - [github.com*] - target=github.com/tdehaeze +[github.com*] +target=github.com/tdehaeze - [git.tdehaeze.xyz*] - target=git.tdehaeze.xyz/tdehaeze +[git.tdehaeze.xyz*] +target=git.tdehaeze.xyz/tdehaeze - [gitlab.esrf.fr*] - target=gitlab.esrf.fr/dehaeze +[gitlab.esrf.fr*] +target=gitlab.esrf.fr/dehaeze #+END_SRC diff --git a/gtk.org b/gtk.org index fe8e1fd..5fca80f 100644 --- a/gtk.org +++ b/gtk.org @@ -8,21 +8,21 @@ :END: #+BEGIN_SRC conf - gtk-theme-name="Arc-Dark" - gtk-icon-theme-name="Arc" - gtk-font-name="Hack Nerd Font Mono 10" - gtk-cursor-theme-name="xcursor-breeze" - gtk-cursor-theme-size=0 - gtk-toolbar-style=GTK_TOOLBAR_BOTH - gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR - gtk-button-images=1 - gtk-menu-images=1 - gtk-enable-event-sounds=1 - gtk-enable-input-feedback-sounds=1 - gtk-xft-antialias=1 - gtk-xft-hinting=1 - gtk-xft-hintstyle="hintfull" - gtk-xft-rgba="rgb" +gtk-theme-name="Arc-Dark" +gtk-icon-theme-name="Arc" +gtk-font-name="Hack Nerd Font Mono 10" +gtk-cursor-theme-name="xcursor-breeze" +gtk-cursor-theme-size=0 +gtk-toolbar-style=GTK_TOOLBAR_BOTH +gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR +gtk-button-images=1 +gtk-menu-images=1 +gtk-enable-event-sounds=1 +gtk-enable-input-feedback-sounds=1 +gtk-xft-antialias=1 +gtk-xft-hinting=1 +gtk-xft-hintstyle="hintfull" +gtk-xft-rgba="rgb" #+END_SRC * GTK-3.0 @@ -32,20 +32,20 @@ :END: #+BEGIN_SRC conf - [Settings] - gtk-theme-name=Arc-Dark - gtk-icon-theme-name=Arc - gtk-font-name=Hack Nerd Font Mono 10 - gtk-cursor-theme-name=xcursor-breeze - gtk-cursor-theme-size=0 - gtk-toolbar-style=GTK_TOOLBAR_BOTH - gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR - gtk-button-images=1 - gtk-menu-images=1 - gtk-enable-event-sounds=1 - gtk-enable-input-feedback-sounds=1 - gtk-xft-antialias=1 - gtk-xft-hinting=1 - gtk-xft-hintstyle=hintfull - gtk-xft-rgba=rgb +[Settings] +gtk-theme-name=Arc-Dark +gtk-icon-theme-name=Arc +gtk-font-name=Hack Nerd Font Mono 10 +gtk-cursor-theme-name=xcursor-breeze +gtk-cursor-theme-size=0 +gtk-toolbar-style=GTK_TOOLBAR_BOTH +gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR +gtk-button-images=1 +gtk-menu-images=1 +gtk-enable-event-sounds=1 +gtk-enable-input-feedback-sounds=1 +gtk-xft-antialias=1 +gtk-xft-hinting=1 +gtk-xft-hintstyle=hintfull +gtk-xft-rgba=rgb #+END_SRC diff --git a/i3.org b/i3.org index 91ac826..f62aa70 100644 --- a/i3.org +++ b/i3.org @@ -131,6 +131,7 @@ for_window [title="Simulink Library Browser"] floating enable for_window [class="Floating"] floating enable, resize set 800 600, move position 1100 460 for_window [class="mpv"] floating enable for_window [class="Sxiv"] floating enable, resize set 800 600, move position center +for_window [title="khal"] floating enable for_window [title="nmtui"] floating enable, resize set 800 600 #+end_src diff --git a/image.org b/image.org index 4979b79..08fd9c8 100644 --- a/image.org +++ b/image.org @@ -8,15 +8,15 @@ Press =C-x= to activate to key handler. #+begin_src conf - while read file - do - case "$1" in - "C-d") - mv "$file" ~/.trash ;; - "C-r") - convert -rotate 90 "$file" "$file" ;; - "C-c") - echo -n "$file" | xsel -ib ;; - esac - done +while read file +do + case "$1" in + "C-d") + mv "$file" ~/.trash ;; + "C-r") + convert -rotate 90 "$file" "$file" ;; + "C-c") + echo -n "$file" | xsel -ib ;; + esac +done #+end_src diff --git a/index.org b/index.org index 0921195..608c62e 100644 --- a/index.org +++ b/index.org @@ -35,6 +35,6 @@ There are Specific configuration files for: - *Desktop Applications*: [[file:applications.org][.desktop files]] - *Computation*: [[file:matlab.org][Matlab]] - *GUI Toolkit*: [[file:gtk.org][GTK]] -- [[file:config.org][Other Configurations]] and some data +- [[file:config.org][Other Configurations]] and some [[file:data.org][data]] I also have a nice Home-Server which configuration files can be found [[file:nas.org][here]]. diff --git a/install.org b/install.org index 3694156..748772b 100644 --- a/install.org +++ b/install.org @@ -429,6 +429,7 @@ Addons: - [[https://addons.mozilla.org/fr/firefox/addon/ublock-origin/][uBlock Origin]] - [[https://addons.mozilla.org/en-US/firefox/addon/adblock-plus/][Adblock Plus]] - [[https://addons.mozilla.org/fr/firefox/addon/bukubrow/][Bukurow]] +- [[https://addons.mozilla.org/fr/firefox/addon/i-dont-care-about-cookies/][I don't care about cookies]] * =xrandr= - Monitor Manager #+begin_src bash @@ -1560,10 +1561,10 @@ To see next timers | =msmtp= | SMTP client that can be used as an SMTP plugin for Mutt | | =isync= | Synchronize a maildir with an IMAP server | | =vdirsyncer= | Synchronize calendars and contacts | +| =abook= | Address book with mutt support | | =urlview= | URL extractor/launcher | | =w3m= | Pager/text based browser | -| =abook= | Address book with mutt support | -| =elinks= | Text mode web browser | +| =lynx= | Text mode web browser | | =lbdb= | Little brother's database for the mutt mail reader | | =mu= | Tool for searching e-mail messages stored in the maildir-format | | =ripmime= | Extract attachments out of MIME encoded email packages | @@ -1615,3 +1616,4 @@ To see next timers | =hugo= | Configurable static site generator | | =markdown= | Text-to-HTML conversion tool | | =pandoc= | Swiss-army knife of markup format conversion | +| =uni= | Query the Unicode database from the commandline | diff --git a/mail.org b/mail.org index b563087..0f4b979 100644 --- a/mail.org +++ b/mail.org @@ -1,6 +1,11 @@ #+TITLE: Mail Configuration #+SETUPFILE: ./setup/org-setup-file.org +Installation: +#+begin_src bash :tangle no +yay -S mbsync msmtp mu neomutt lynx +#+end_src + * =mbsync= - Synchronize Mailboxes :PROPERTIES: :header-args:conf: :tangle ~/.mbsyncrc @@ -11,246 +16,246 @@ http://isync.sourceforge.net/ ** Global Defaults #+BEGIN_SRC conf - # Automatically create missing mailboxes, both locally and on the server - Create Both - # Save the synchronization state files in the relevant directory - SyncState * - # Permanently remove all messages [on the Master/Slave] marked for deletion. - Expunge Both +# Automatically create missing mailboxes, both locally and on the server +Create Both +# Save the synchronization state files in the relevant directory +SyncState * +# Permanently remove all messages [on the Master/Slave] marked for deletion. +Expunge Both #+END_SRC ** Gmail Account #+BEGIN_SRC conf - IMAPAccount gmail - Host imap.gmail.com - User dehaeze.thomas@gmail.com - PassCmd "pass email/dehaeze.thomas@gmail.com" - SSLType IMAPS - AuthMechs LOGIN - CertificateFile /etc/ssl/certs/ca-certificates.crt +IMAPAccount gmail +Host imap.gmail.com +User dehaeze.thomas@gmail.com +PassCmd "pass email/dehaeze.thomas@gmail.com" +SSLType IMAPS +AuthMechs LOGIN +CertificateFile /etc/ssl/certs/ca-certificates.crt #+END_SRC #+BEGIN_SRC conf - IMAPStore gmail-remote - Account gmail +IMAPStore gmail-remote +Account gmail - MaildirStore gmail-local - Path ~/.mail/gmail/ - Inbox ~/.mail/gmail/Inbox +MaildirStore gmail-local +Path ~/.mail/gmail/ +Inbox ~/.mail/gmail/Inbox - Channel gmail-Home - Master :gmail-remote:"INBOX" - Slave :gmail-local:Inbox +Channel gmail-Home +Master :gmail-remote:"INBOX" +Slave :gmail-local:Inbox - Channel gmail-Drafts - Master :gmail-remote:"[Gmail]/Drafts" - Slave :gmail-local:Drafts +Channel gmail-Drafts +Master :gmail-remote:"[Gmail]/Drafts" +Slave :gmail-local:Drafts - Channel gmail-Sent - Master :gmail-remote:"[Gmail]/Sent Mail" - Slave :gmail-local:Sent +Channel gmail-Sent +Master :gmail-remote:"[Gmail]/Sent Mail" +Slave :gmail-local:Sent - Channel gmail-Trash - Master :gmail-remote:"[Gmail]/Trash" - Slave :gmail-local:Trash +Channel gmail-Trash +Master :gmail-remote:"[Gmail]/Trash" +Slave :gmail-local:Trash - Channel gmail-All - Master :gmail-remote:"[Gmail]/All Mail" - Slave :gmail-local:Archive +Channel gmail-All +Master :gmail-remote:"[Gmail]/All Mail" +Slave :gmail-local:Archive #+END_SRC #+BEGIN_SRC conf - # Catch-all for everything else: note that the `Patterns` have to exclude both - # the remote and local names for all the folders we want to exclude (except - # "INBOX", which is special-cased, it would seem). - Channel gmail - Master :gmail-remote: - Slave :gmail-local: - # Exclude everything under the internal [Gmail] folder, except the interesting folders - Patterns * - Patterns !INBOX - Patterns ![Gmail]* - Patterns !Archive - Patterns !Drafts - Patterns !Sent Mail - Patterns !Trash - Patterns !Spam - Patterns !Starred +# Catch-all for everything else: note that the `Patterns` have to exclude both +# the remote and local names for all the folders we want to exclude (except +# "INBOX", which is special-cased, it would seem). +Channel gmail +Master :gmail-remote: +Slave :gmail-local: +# Exclude everything under the internal [Gmail] folder, except the interesting folders +Patterns * +Patterns !INBOX +Patterns ![Gmail]* +Patterns !Archive +Patterns !Drafts +Patterns !Sent Mail +Patterns !Trash +Patterns !Spam +Patterns !Starred #+END_SRC #+BEGIN_SRC conf - # For doing a quick sync of just the INBOX with `mbsync gmail-download`. - Channel gmail-download - Master :gmail-remote:"INBOX" - Slave :gmail-local:Inbox - Create Slave - Expunge Slave - Sync Pull +# For doing a quick sync of just the INBOX with `mbsync gmail-download`. +Channel gmail-download +Master :gmail-remote:"INBOX" +Slave :gmail-local:Inbox +Create Slave +Expunge Slave +Sync Pull #+END_SRC ** ESRF Account #+BEGIN_SRC conf - IMAPAccount esrf - Host imaps.esrf.fr - User dehaeze - PassCmd "pass email/thomas.dehaeze@esrf.fr" - SSLType IMAPS - AuthMechs LOGIN +IMAPAccount esrf +Host imaps.esrf.fr +User dehaeze +PassCmd "pass email/thomas.dehaeze@esrf.fr" +SSLType IMAPS +AuthMechs LOGIN #+END_SRC #+BEGIN_SRC conf - IMAPStore esrf-remote - Account esrf +IMAPStore esrf-remote +Account esrf - MaildirStore esrf-local - Path ~/.mail/esrf/ - Inbox ~/.mail/esrf/Inbox +MaildirStore esrf-local +Path ~/.mail/esrf/ +Inbox ~/.mail/esrf/Inbox - Channel esrf-Home - Master :esrf-remote:"Inbox" - Slave :esrf-local:Inbox +Channel esrf-Home +Master :esrf-remote:"Inbox" +Slave :esrf-local:Inbox - Channel esrf-Drafts - Master :esrf-remote:"Drafts" - Slave :esrf-local:Drafts +Channel esrf-Drafts +Master :esrf-remote:"Drafts" +Slave :esrf-local:Drafts - Channel esrf-Archive - Master :esrf-remote:"Archive" - Slave :esrf-local:Archive +Channel esrf-Archive +Master :esrf-remote:"Archive" +Slave :esrf-local:Archive - Channel esrf-Sent - Master :esrf-remote:"Sent" - Slave :esrf-local:Sent +Channel esrf-Sent +Master :esrf-remote:"Sent" +Slave :esrf-local:Sent - Channel esrf-Trash - Master :esrf-remote:"Trash" - Slave :esrf-local:Trash +Channel esrf-Trash +Master :esrf-remote:"Trash" +Slave :esrf-local:Trash #+END_SRC #+BEGIN_SRC conf - Channel esrf - Master :esrf-remote: - Slave :esrf-local: +Channel esrf +Master :esrf-remote: +Slave :esrf-local: #+END_SRC For doing a quick sync of just the INBOX with `mbsync esrf-download`. #+BEGIN_SRC conf - Channel esrf-download - Master :esrf-remote:"INBOX" - Slave :esrf-local:Inbox - Create Slave - Expunge Slave - Sync Pull +Channel esrf-download +Master :esrf-remote:"INBOX" +Slave :esrf-local:Inbox +Create Slave +Expunge Slave +Sync Pull #+END_SRC ** ULG Student Account #+BEGIN_SRC conf - IMAPAccount ulg - Host mail.ulg.ac.be - User thomas.dehaeze@doct.uliege.be - PassCmd "pass email/thomas.dehaeze@doct.uliege.be" - SSLType IMAPS - AuthMechs LOGIN +IMAPAccount ulg +Host mail.ulg.ac.be +User thomas.dehaeze@doct.uliege.be +PassCmd "pass email/thomas.dehaeze@doct.uliege.be" +SSLType IMAPS +AuthMechs LOGIN #+END_SRC #+BEGIN_SRC conf - IMAPStore ulg-remote - Account ulg +IMAPStore ulg-remote +Account ulg - MaildirStore ulg-local - Path ~/.mail/ulg/ - Inbox ~/.mail/ulg/Inbox +MaildirStore ulg-local +Path ~/.mail/ulg/ +Inbox ~/.mail/ulg/Inbox - Channel ulg-Home - Master :ulg-remote:"Inbox" - Slave :ulg-local:Inbox +Channel ulg-Home +Master :ulg-remote:"Inbox" +Slave :ulg-local:Inbox - Channel ulg-Drafts - Master :ulg-remote:"Drafts" - Slave :ulg-local:Drafts +Channel ulg-Drafts +Master :ulg-remote:"Drafts" +Slave :ulg-local:Drafts - Channel ulg-Archive - Master :ulg-remote:"Archive" - Slave :ulg-local:Archive +Channel ulg-Archive +Master :ulg-remote:"Archive" +Slave :ulg-local:Archive - Channel ulg-Sent - Master :ulg-remote:"Sent" - Slave :ulg-local:Sent +Channel ulg-Sent +Master :ulg-remote:"Sent" +Slave :ulg-local:Sent - Channel ulg-Trash - Master :ulg-remote:"Trash" - Slave :ulg-local:Trash +Channel ulg-Trash +Master :ulg-remote:"Trash" +Slave :ulg-local:Trash #+END_SRC #+BEGIN_SRC conf - Channel ulg - Master :ulg-remote: - Slave :ulg-local: +Channel ulg +Master :ulg-remote: +Slave :ulg-local: #+END_SRC For doing a quick sync of just the INBOX with `mbsync ulg-download`. #+BEGIN_SRC conf - Channel ulg-download - Master :ulg-remote:"Inbox" - Slave :ulg-local:Inbox - Create Slave - Expunge Slave - Sync Pull +Channel ulg-download +Master :ulg-remote:"Inbox" +Slave :ulg-local:Inbox +Create Slave +Expunge Slave +Sync Pull #+END_SRC ** ULG Personal Account #+BEGIN_SRC conf - IMAPAccount uliege - Host mail.ulg.ac.be - User tdehaeze@uliege.be - PassCmd "pass email/tdehaeze@uliege.be" - SSLType IMAPS - AuthMechs LOGIN +IMAPAccount uliege +Host mail.ulg.ac.be +User tdehaeze@uliege.be +PassCmd "pass email/tdehaeze@uliege.be" +SSLType IMAPS +AuthMechs LOGIN #+END_SRC #+BEGIN_SRC conf - IMAPStore uliege-remote - Account uliege +IMAPStore uliege-remote +Account uliege - MaildirStore uliege-local - Path ~/.mail/uliege/ - Inbox ~/.mail/uliege/Inbox +MaildirStore uliege-local +Path ~/.mail/uliege/ +Inbox ~/.mail/uliege/Inbox - Channel uliege-Home - Master :uliege-remote:"Inbox" - Slave :uliege-local:Inbox +Channel uliege-Home +Master :uliege-remote:"Inbox" +Slave :uliege-local:Inbox - Channel uliege-Drafts - Master :uliege-remote:"Drafts" - Slave :uliege-local:Drafts +Channel uliege-Drafts +Master :uliege-remote:"Drafts" +Slave :uliege-local:Drafts - Channel uliege-Archive - Master :uliege-remote:"Archive" - Slave :uliege-local:Archive +Channel uliege-Archive +Master :uliege-remote:"Archive" +Slave :uliege-local:Archive - Channel uliege-Sent - Master :uliege-remote:"Sent" - Slave :uliege-local:Sent +Channel uliege-Sent +Master :uliege-remote:"Sent" +Slave :uliege-local:Sent - Channel uliege-Trash - Master :uliege-remote:"Trash" - Slave :uliege-local:Trash +Channel uliege-Trash +Master :uliege-remote:"Trash" +Slave :uliege-local:Trash #+END_SRC #+BEGIN_SRC conf - Channel uliege - Master :uliege-remote: - Slave :uliege-local: +Channel uliege +Master :uliege-remote: +Slave :uliege-local: #+END_SRC For doing a quick sync of just the INBOX with `mbsync uliege-download`. #+BEGIN_SRC conf - Channel uliege-download - Master :uliege-remote:"Inbox" - Slave :uliege-local:Inbox - Create Slave - Expunge Slave - Sync Pull +Channel uliege-download +Master :uliege-remote:"Inbox" +Slave :uliege-local:Inbox +Create Slave +Expunge Slave +Sync Pull #+END_SRC * =msmtp= - Send Mails @@ -263,62 +268,62 @@ https://marlam.de/msmtp/ ** Defaults #+BEGIN_SRC conf - defaults - auth on - tls on - tls_certcheck off +defaults +auth on +tls on +tls_certcheck off #+END_SRC ** Gmail Account #+BEGIN_SRC conf - account gmail - host smtp.gmail.com - port 587 - protocol smtp - from dehaeze.thomas@gmail.com - user dehaeze.thomas@gmail.com - passwordeval "pass email/dehaeze.thomas@gmail.com" +account gmail +host smtp.gmail.com +port 587 +protocol smtp +from dehaeze.thomas@gmail.com +user dehaeze.thomas@gmail.com +passwordeval "pass email/dehaeze.thomas@gmail.com" #+END_SRC ** ESRF Account #+BEGIN_SRC conf - account esrf - host smtps.esrf.fr - port 465 - protocol smtp - from thomas.dehaeze@esrf.fr - user dehaeze - tls_starttls off - passwordeval "pass email/thomas.dehaeze@esrf.fr" +account esrf +host smtps.esrf.fr +port 465 +protocol smtp +from thomas.dehaeze@esrf.fr +user dehaeze +tls_starttls off +passwordeval "pass email/thomas.dehaeze@esrf.fr" #+END_SRC ** ULG Account #+BEGIN_SRC conf - account ulg - host smtp.ulg.ac.be - port 587 - protocol smtp - from thomas.dehaeze@doct.uliege.be - user s177313 - tls_starttls on - passwordeval "pass email/thomas.dehaeze@doct.uliege.be" +account ulg +host smtp.ulg.ac.be +port 587 +protocol smtp +from thomas.dehaeze@doct.uliege.be +user s177313 +tls_starttls on +passwordeval "pass email/thomas.dehaeze@doct.uliege.be" #+END_SRC ** ULIEGE Account #+BEGIN_SRC conf - account uliege - host smtp.ulg.ac.be - port 587 - protocol smtp - from tdehaeze@uliege.be - user u231244 - tls_starttls on - passwordeval "pass email/tdehaeze@uliege.be" +account uliege +host smtp.ulg.ac.be +port 587 +protocol smtp +from tdehaeze@uliege.be +user u231244 +tls_starttls on +passwordeval "pass email/tdehaeze@uliege.be" #+END_SRC ** Default Account #+BEGIN_SRC conf - account default : gmail +account default : gmail #+END_SRC * =mu= - Mail Indexer @@ -333,7 +338,7 @@ Useful commands are described in the [[http://www.djcbsoftware.nl/code/mu/cheats For instance, to find mails with =pdf= attachments: #+begin_src bash :eval no :tangle no - mu find 'mime:application/pdf' +mu find 'mime:application/pdf' #+end_src * =neomutt= - Mail Client @@ -346,446 +351,446 @@ https://neomutt.org/ Documentation: #+begin_src bash :results none :exports code :tangle no - man neomutt - man neomuttrc +man neomutt +man neomuttrc #+end_src ** Bindings *** Unding all the key bindings #+begin_src conf - bind generic,pager,editor,index a noop - bind generic,pager,editor,index b noop - bind generic,pager,editor,index c noop - bind generic,pager,editor,index d noop - bind generic,pager,editor,index e noop - bind generic,pager,editor,index f noop - bind generic,pager,editor,index g noop - bind generic,pager,editor,index h noop - bind generic,pager,editor,index i noop - bind generic,pager,editor,index j noop - bind generic,pager,editor,index k noop - bind generic,pager,editor,index l noop - bind generic,pager,editor,index m noop - bind generic,pager,editor,index n noop - bind generic,pager,editor,index o noop - bind generic,pager,editor,index p noop - bind generic,pager,editor,index q noop - bind generic,pager,editor,index r noop - bind generic,pager,editor,index s noop - bind generic,pager,editor,index t noop - bind generic,pager,editor,index u noop - bind generic,pager,editor,index v noop - bind generic,pager,editor,index w noop - bind generic,pager,editor,index x noop - bind generic,pager,editor,index y noop - bind generic,pager,editor,index z noop - bind generic,pager,editor,index A noop - bind generic,pager,editor,index B noop - bind generic,pager,editor,index C noop - bind generic,pager,editor,index D noop - bind generic,pager,editor,index E noop - bind generic,pager,editor,index F noop - bind generic,pager,editor,index G noop - bind generic,pager,editor,index H noop - bind generic,pager,editor,index I noop - bind generic,pager,editor,index J noop - bind generic,pager,editor,index K noop - bind generic,pager,editor,index L noop - bind generic,pager,editor,index M noop - bind generic,pager,editor,index N noop - bind generic,pager,editor,index O noop - bind generic,pager,editor,index P noop - bind generic,pager,editor,index Q noop - bind generic,pager,editor,index R noop - bind generic,pager,editor,index S noop - bind generic,pager,editor,index T noop - bind generic,pager,editor,index U noop - bind generic,pager,editor,index V noop - bind generic,pager,editor,index W noop - bind generic,pager,editor,index X noop - bind generic,pager,editor,index Y noop - bind generic,pager,editor,index Z noop +bind generic,pager,editor,index a noop +bind generic,pager,editor,index b noop +bind generic,pager,editor,index c noop +bind generic,pager,editor,index d noop +bind generic,pager,editor,index e noop +bind generic,pager,editor,index f noop +bind generic,pager,editor,index g noop +bind generic,pager,editor,index h noop +bind generic,pager,editor,index i noop +bind generic,pager,editor,index j noop +bind generic,pager,editor,index k noop +bind generic,pager,editor,index l noop +bind generic,pager,editor,index m noop +bind generic,pager,editor,index n noop +bind generic,pager,editor,index o noop +bind generic,pager,editor,index p noop +bind generic,pager,editor,index q noop +bind generic,pager,editor,index r noop +bind generic,pager,editor,index s noop +bind generic,pager,editor,index t noop +bind generic,pager,editor,index u noop +bind generic,pager,editor,index v noop +bind generic,pager,editor,index w noop +bind generic,pager,editor,index x noop +bind generic,pager,editor,index y noop +bind generic,pager,editor,index z noop +bind generic,pager,editor,index A noop +bind generic,pager,editor,index B noop +bind generic,pager,editor,index C noop +bind generic,pager,editor,index D noop +bind generic,pager,editor,index E noop +bind generic,pager,editor,index F noop +bind generic,pager,editor,index G noop +bind generic,pager,editor,index H noop +bind generic,pager,editor,index I noop +bind generic,pager,editor,index J noop +bind generic,pager,editor,index K noop +bind generic,pager,editor,index L noop +bind generic,pager,editor,index M noop +bind generic,pager,editor,index N noop +bind generic,pager,editor,index O noop +bind generic,pager,editor,index P noop +bind generic,pager,editor,index Q noop +bind generic,pager,editor,index R noop +bind generic,pager,editor,index S noop +bind generic,pager,editor,index T noop +bind generic,pager,editor,index U noop +bind generic,pager,editor,index V noop +bind generic,pager,editor,index W noop +bind generic,pager,editor,index X noop +bind generic,pager,editor,index Y noop +bind generic,pager,editor,index Z noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop - bind generic,pager,editor,index | noop +bind generic,pager,editor,index | noop - bind generic,pager,editor,index 1 noop - bind generic,pager,editor,index 2 noop - bind generic,pager,editor,index 3 noop - bind generic,pager,editor,index 4 noop - bind generic,pager,editor,index 5 noop - bind generic,pager,editor,index 6 noop - bind generic,pager,editor,index 7 noop - bind generic,pager,editor,index 8 noop - bind generic,pager,editor,index 9 noop - bind generic,pager,editor,index 0 noop - bind generic,pager,editor,index ! noop - bind generic,pager,editor,index @ noop - bind generic,pager,editor,index $ noop - bind generic,pager,editor,index % noop - bind generic,pager,editor,index ^ noop - bind generic,pager,editor,index & noop - bind generic,pager,editor,index * noop - bind generic,pager,editor,index ( noop - bind generic,pager,editor,index ) noop +bind generic,pager,editor,index 1 noop +bind generic,pager,editor,index 2 noop +bind generic,pager,editor,index 3 noop +bind generic,pager,editor,index 4 noop +bind generic,pager,editor,index 5 noop +bind generic,pager,editor,index 6 noop +bind generic,pager,editor,index 7 noop +bind generic,pager,editor,index 8 noop +bind generic,pager,editor,index 9 noop +bind generic,pager,editor,index 0 noop +bind generic,pager,editor,index ! noop +bind generic,pager,editor,index @ noop +bind generic,pager,editor,index $ noop +bind generic,pager,editor,index % noop +bind generic,pager,editor,index ^ noop +bind generic,pager,editor,index & noop +bind generic,pager,editor,index * noop +bind generic,pager,editor,index ( noop +bind generic,pager,editor,index ) noop - bind generic,pager,editor,index \Ca noop - bind generic,pager,editor,index \Cb noop - bind generic,pager,editor,index \Cc noop - bind generic,pager,editor,index \Cd noop - bind generic,pager,editor,index \Ce noop - bind generic,pager,editor,index \Cf noop - bind generic,pager,editor,index \Cg noop - bind generic,pager,editor,index \Ch noop - bind generic,pager,editor,index \Ci noop - bind generic,pager,editor,index \Cj noop - bind generic,pager,editor,index \Ck noop - bind generic,pager,editor,index \Cl noop - bind generic,pager,editor,index \Cm noop - bind generic,pager,editor,index \Cn noop - bind generic,pager,editor,index \Co noop - bind generic,pager,editor,index \Cp noop - bind generic,pager,editor,index \Cq noop - bind generic,pager,editor,index \Cr noop - bind generic,pager,editor,index \Cs noop - bind generic,pager,editor,index \Ct noop - bind generic,pager,editor,index \Cu noop - bind generic,pager,editor,index \Cv noop - bind generic,pager,editor,index \Cw noop - bind generic,pager,editor,index \Cx noop - bind generic,pager,editor,index \Cy noop - bind generic,pager,editor,index \Cz noop - bind generic,pager,editor,index \CA noop - bind generic,pager,editor,index \CB noop - bind generic,pager,editor,index \CC noop - bind generic,pager,editor,index \CD noop - bind generic,pager,editor,index \CE noop - bind generic,pager,editor,index \CF noop - bind generic,pager,editor,index \CG noop - bind generic,pager,editor,index \CH noop - bind generic,pager,editor,index \CI noop - bind generic,pager,editor,index \CJ noop - bind generic,pager,editor,index \CK noop - bind generic,pager,editor,index \CL noop - bind generic,pager,editor,index \CM noop - bind generic,pager,editor,index \CN noop - bind generic,pager,editor,index \CO noop - bind generic,pager,editor,index \CP noop - bind generic,pager,editor,index \CQ noop - bind generic,pager,editor,index \CR noop - bind generic,pager,editor,index \CS noop - bind generic,pager,editor,index \CT noop - bind generic,pager,editor,index \CU noop - bind generic,pager,editor,index \CV noop - bind generic,pager,editor,index \CW noop - bind generic,pager,editor,index \CX noop - bind generic,pager,editor,index \CY noop - bind generic,pager,editor,index \CZ noop +bind generic,pager,editor,index \Ca noop +bind generic,pager,editor,index \Cb noop +bind generic,pager,editor,index \Cc noop +bind generic,pager,editor,index \Cd noop +bind generic,pager,editor,index \Ce noop +bind generic,pager,editor,index \Cf noop +bind generic,pager,editor,index \Cg noop +bind generic,pager,editor,index \Ch noop +bind generic,pager,editor,index \Ci noop +bind generic,pager,editor,index \Cj noop +bind generic,pager,editor,index \Ck noop +bind generic,pager,editor,index \Cl noop +bind generic,pager,editor,index \Cm noop +bind generic,pager,editor,index \Cn noop +bind generic,pager,editor,index \Co noop +bind generic,pager,editor,index \Cp noop +bind generic,pager,editor,index \Cq noop +bind generic,pager,editor,index \Cr noop +bind generic,pager,editor,index \Cs noop +bind generic,pager,editor,index \Ct noop +bind generic,pager,editor,index \Cu noop +bind generic,pager,editor,index \Cv noop +bind generic,pager,editor,index \Cw noop +bind generic,pager,editor,index \Cx noop +bind generic,pager,editor,index \Cy noop +bind generic,pager,editor,index \Cz noop +bind generic,pager,editor,index \CA noop +bind generic,pager,editor,index \CB noop +bind generic,pager,editor,index \CC noop +bind generic,pager,editor,index \CD noop +bind generic,pager,editor,index \CE noop +bind generic,pager,editor,index \CF noop +bind generic,pager,editor,index \CG noop +bind generic,pager,editor,index \CH noop +bind generic,pager,editor,index \CI noop +bind generic,pager,editor,index \CJ noop +bind generic,pager,editor,index \CK noop +bind generic,pager,editor,index \CL noop +bind generic,pager,editor,index \CM noop +bind generic,pager,editor,index \CN noop +bind generic,pager,editor,index \CO noop +bind generic,pager,editor,index \CP noop +bind generic,pager,editor,index \CQ noop +bind generic,pager,editor,index \CR noop +bind generic,pager,editor,index \CS noop +bind generic,pager,editor,index \CT noop +bind generic,pager,editor,index \CU noop +bind generic,pager,editor,index \CV noop +bind generic,pager,editor,index \CW noop +bind generic,pager,editor,index \CX noop +bind generic,pager,editor,index \CY noop +bind generic,pager,editor,index \CZ noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop +bind generic,pager,editor,index \C noop - bind generic,pager,editor,index \C1 noop - bind generic,pager,editor,index \C2 noop - bind generic,pager,editor,index \C3 noop - bind generic,pager,editor,index \C4 noop - bind generic,pager,editor,index \C5 noop - bind generic,pager,editor,index \C6 noop - bind generic,pager,editor,index \C7 noop - bind generic,pager,editor,index \C8 noop - bind generic,pager,editor,index \C9 noop - bind generic,pager,editor,index \C0 noop - bind generic,pager,editor,index \C! noop - bind generic,pager,editor,index \C$ noop - bind generic,pager,editor,index \C% noop - bind generic,pager,editor,index \C^ noop - bind generic,pager,editor,index \C& noop - bind generic,pager,editor,index \C* noop - bind generic,pager,editor,index \C( noop - bind generic,pager,editor,index \C) noop +bind generic,pager,editor,index \C1 noop +bind generic,pager,editor,index \C2 noop +bind generic,pager,editor,index \C3 noop +bind generic,pager,editor,index \C4 noop +bind generic,pager,editor,index \C5 noop +bind generic,pager,editor,index \C6 noop +bind generic,pager,editor,index \C7 noop +bind generic,pager,editor,index \C8 noop +bind generic,pager,editor,index \C9 noop +bind generic,pager,editor,index \C0 noop +bind generic,pager,editor,index \C! noop +bind generic,pager,editor,index \C$ noop +bind generic,pager,editor,index \C% noop +bind generic,pager,editor,index \C^ noop +bind generic,pager,editor,index \C& noop +bind generic,pager,editor,index \C* noop +bind generic,pager,editor,index \C( noop +bind generic,pager,editor,index \C) noop - bind generic,pager,editor,index a noop - bind generic,pager,editor,index b noop - bind generic,pager,editor,index c noop - bind generic,pager,editor,index d noop - bind generic,pager,editor,index e noop - bind generic,pager,editor,index f noop - bind generic,pager,editor,index g noop - bind generic,pager,editor,index h noop - bind generic,pager,editor,index i noop - bind generic,pager,editor,index j noop - bind generic,pager,editor,index k noop - bind generic,pager,editor,index l noop - bind generic,pager,editor,index m noop - bind generic,pager,editor,index n noop - bind generic,pager,editor,index o noop - bind generic,pager,editor,index p noop - bind generic,pager,editor,index q noop - bind generic,pager,editor,index r noop - bind generic,pager,editor,index s noop - bind generic,pager,editor,index t noop - bind generic,pager,editor,index u noop - bind generic,pager,editor,index v noop - bind generic,pager,editor,index w noop - bind generic,pager,editor,index x noop - bind generic,pager,editor,index y noop - bind generic,pager,editor,index z noop - bind generic,pager,editor,index A noop - bind generic,pager,editor,index B noop - bind generic,pager,editor,index C noop - bind generic,pager,editor,index D noop - bind generic,pager,editor,index E noop - bind generic,pager,editor,index F noop - bind generic,pager,editor,index G noop - bind generic,pager,editor,index H noop - bind generic,pager,editor,index I noop - bind generic,pager,editor,index J noop - bind generic,pager,editor,index K noop - bind generic,pager,editor,index L noop - bind generic,pager,editor,index M noop - bind generic,pager,editor,index N noop - bind generic,pager,editor,index O noop - bind generic,pager,editor,index P noop - bind generic,pager,editor,index Q noop - bind generic,pager,editor,index R noop - bind generic,pager,editor,index S noop - bind generic,pager,editor,index T noop - bind generic,pager,editor,index U noop - bind generic,pager,editor,index V noop - bind generic,pager,editor,index W noop - bind generic,pager,editor,index X noop - bind generic,pager,editor,index Y noop - bind generic,pager,editor,index Z noop +bind generic,pager,editor,index a noop +bind generic,pager,editor,index b noop +bind generic,pager,editor,index c noop +bind generic,pager,editor,index d noop +bind generic,pager,editor,index e noop +bind generic,pager,editor,index f noop +bind generic,pager,editor,index g noop +bind generic,pager,editor,index h noop +bind generic,pager,editor,index i noop +bind generic,pager,editor,index j noop +bind generic,pager,editor,index k noop +bind generic,pager,editor,index l noop +bind generic,pager,editor,index m noop +bind generic,pager,editor,index n noop +bind generic,pager,editor,index o noop +bind generic,pager,editor,index p noop +bind generic,pager,editor,index q noop +bind generic,pager,editor,index r noop +bind generic,pager,editor,index s noop +bind generic,pager,editor,index t noop +bind generic,pager,editor,index u noop +bind generic,pager,editor,index v noop +bind generic,pager,editor,index w noop +bind generic,pager,editor,index x noop +bind generic,pager,editor,index y noop +bind generic,pager,editor,index z noop +bind generic,pager,editor,index A noop +bind generic,pager,editor,index B noop +bind generic,pager,editor,index C noop +bind generic,pager,editor,index D noop +bind generic,pager,editor,index E noop +bind generic,pager,editor,index F noop +bind generic,pager,editor,index G noop +bind generic,pager,editor,index H noop +bind generic,pager,editor,index I noop +bind generic,pager,editor,index J noop +bind generic,pager,editor,index K noop +bind generic,pager,editor,index L noop +bind generic,pager,editor,index M noop +bind generic,pager,editor,index N noop +bind generic,pager,editor,index O noop +bind generic,pager,editor,index P noop +bind generic,pager,editor,index Q noop +bind generic,pager,editor,index R noop +bind generic,pager,editor,index S noop +bind generic,pager,editor,index T noop +bind generic,pager,editor,index U noop +bind generic,pager,editor,index V noop +bind generic,pager,editor,index W noop +bind generic,pager,editor,index X noop +bind generic,pager,editor,index Y noop +bind generic,pager,editor,index Z noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop - bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop +bind generic,pager,editor,index noop - bind generic,pager,editor,index 1 noop - bind generic,pager,editor,index 2 noop - bind generic,pager,editor,index 3 noop - bind generic,pager,editor,index 4 noop - bind generic,pager,editor,index 5 noop - bind generic,pager,editor,index 6 noop - bind generic,pager,editor,index 7 noop - bind generic,pager,editor,index 8 noop - bind generic,pager,editor,index 9 noop - bind generic,pager,editor,index 0 noop - bind generic,pager,editor,index ! noop - bind generic,pager,editor,index @ noop - bind generic,pager,editor,index $ noop - bind generic,pager,editor,index % noop - bind generic,pager,editor,index ^ noop - bind generic,pager,editor,index & noop - bind generic,pager,editor,index * noop - bind generic,pager,editor,index ( noop - bind generic,pager,editor,index ) noop +bind generic,pager,editor,index 1 noop +bind generic,pager,editor,index 2 noop +bind generic,pager,editor,index 3 noop +bind generic,pager,editor,index 4 noop +bind generic,pager,editor,index 5 noop +bind generic,pager,editor,index 6 noop +bind generic,pager,editor,index 7 noop +bind generic,pager,editor,index 8 noop +bind generic,pager,editor,index 9 noop +bind generic,pager,editor,index 0 noop +bind generic,pager,editor,index ! noop +bind generic,pager,editor,index @ noop +bind generic,pager,editor,index $ noop +bind generic,pager,editor,index % noop +bind generic,pager,editor,index ^ noop +bind generic,pager,editor,index & noop +bind generic,pager,editor,index * noop +bind generic,pager,editor,index ( noop +bind generic,pager,editor,index ) noop #+end_src *** Quit Neomutt #+begin_src conf - bind index,pager,compose Q exit - macro index q "if [ $TMUX ]; then tmux detach; fi" +bind index,pager,compose Q exit +macro index q "if [ $TMUX ]; then tmux detach; fi" #+end_src *** Generic #+begin_src conf - bind generic Q exit +bind generic Q exit - bind generic select-entry - bind generic l select-entry +bind generic select-entry +bind generic l select-entry - bind generic,index k previous-entry - bind generic,index j next-entry +bind generic,index k previous-entry +bind generic,index j next-entry - bind generic,index 0 first-entry - bind generic,index $ last-entry +bind generic,index 0 first-entry +bind generic,index $ last-entry - bind generic,index \031 previous-entry # Mouse wheel - bind generic,index \005 next-entry # Mouse wheel +bind generic,index \031 previous-entry # Mouse wheel +bind generic,index \005 next-entry # Mouse wheel - bind generic,index gg first-entry - bind generic,index G last-entry +bind generic,index gg first-entry +bind generic,index G last-entry - bind generic,index,pager \Cu half-up - bind generic,index,pager \Cd half-down +bind generic,index,pager \Cu half-up +bind generic,index,pager \Cd half-down - bind generic,index,pager \Ce next-line - bind generic,index,pager \Cy previous-line +bind generic,index,pager \Ce next-line +bind generic,index,pager \Cy previous-line #+end_src *** Index and Pager #+BEGIN_SRC conf - bind pager k previous-line - bind pager j next-line +bind pager k previous-line +bind pager j next-line - bind index collapse-thread +bind index collapse-thread - bind index,pager K previous-entry - bind index,pager J next-entry +bind index,pager K previous-entry +bind index,pager J next-entry - bind index l display-message - bind index display-message - bind pager l view-attachments +bind index l display-message +bind index display-message +bind pager l view-attachments - bind pager gg top - bind pager 0 top +bind pager gg top +bind pager 0 top - bind pager G bottom - bind pager $ bottom +bind pager G bottom +bind pager $ bottom - macro index h "?" "Go back to the list of mailboxes" - bind pager h exit - bind pager q exit +macro index h "?" "Go back to the list of mailboxes" +bind pager h exit +bind pager q exit - macro index c "?" "change folder" +macro index c "?" "change folder" - bind index,pager u undelete-message +bind index,pager u undelete-message - bind index,pager P print-message +bind index,pager P print-message - # Compose a new email (not a reply) to the sender - bind index,pager @ compose-to-sender +# Compose a new email (not a reply) to the sender +bind index,pager @ compose-to-sender - # Marl All message as read - macro index \Cr \ - "~NN." \ - "mark all new as read" +# Marl All message as read +macro index \Cr \ + "~NN." \ + "mark all new as read" #+END_SRC #+begin_src conf - bind index za collapse-thread - bind index zA collapse-all # Missing :folddisable/foldenable +bind index za collapse-thread +bind index zA collapse-all # Missing :folddisable/foldenable #+end_src Write/Reply/Forward mail #+BEGIN_SRC conf - bind index,pager p recall-message - bind index,pager m mail - bind index,pager M resend-message - bind index,pager r reply - bind index,pager R group-reply - bind index,pager b bounce-message - bind index,pager f forward-message +bind index,pager p recall-message +bind index,pager m mail +bind index,pager M resend-message +bind index,pager r reply +bind index,pager R group-reply +bind index,pager b bounce-message +bind index,pager f forward-message #+END_SRC Sync Mailbox #+begin_src conf - bind index,pager s sync-mailbox +bind index,pager s sync-mailbox #+end_src Sync email #+BEGIN_SRC conf - macro index,pager o "$HOME/.config/neomutt/bin/get_new_mail.sh" - macro index,pager O "$HOME/.config/neomutt/bin/get_new_mail.sh -a" +macro index,pager o "$HOME/.config/neomutt/bin/get_new_mail.sh" +macro index,pager O "$HOME/.config/neomutt/bin/get_new_mail.sh -a" #+END_SRC Make quick html view macro #+BEGIN_SRC conf - macro index,pager H "html" +macro index,pager H "html" #+END_SRC Open mail with Vim #+begin_src conf - macro index,pager V "plain" +macro index,pager V "plain" #+end_src #+begin_src conf - # bind index,pager U toggle-new +# bind index,pager U toggle-new #+end_src Labels #+BEGIN_SRC conf - bind index,pager y edit-label - bind index,pager Y modify-labels +bind index,pager y edit-label +bind index,pager Y modify-labels #+END_SRC *** Limit #+begin_src conf - bind index L limit - macro index a all +bind index L limit +macro index a all #+end_src *** Search #+begin_src conf - bind generic,index,pager / search +bind generic,index,pager / search - bind index,pager n search-next - bind index,pager N search-opposite +bind index,pager n search-next +bind index,pager N search-opposite #+end_src *** Attachments #+begin_src conf - bind attach l view-attach +bind attach l view-attach - bind attach h exit - bind attach q exit +bind attach h exit +bind attach q exit - bind attach view-mailcap +bind attach view-mailcap - macro attach W ~/Downloads/y "Save entry" +macro attach W ~/Downloads/y "Save entry" #+end_src *** Compose #+BEGIN_SRC conf - bind compose p postpone-message +bind compose p postpone-message - bind compose R rename-attachment +bind compose R rename-attachment - bind compose a attach-file +bind compose a attach-file #+END_SRC Open another instance of neomutt in readonly mode while composing #+BEGIN_SRC conf - macro compose M "$TERMINAL -e \"neomutt -R\"" +macro compose M "$TERMINAL -e \"neomutt -R\"" #+END_SRC Attach multiple files using ranger #+begin_src conf - macro compose A "bash $HOME/.config/neomutt/bin/rangerpicksource /tmp/rangerpickbash $HOME/.config/neomutt/bin/rangerpick clean" "Attach with Ranger" +macro compose A "bash $HOME/.config/neomutt/bin/rangerpicksource /tmp/rangerpickbash $HOME/.config/neomutt/bin/rangerpick clean" "Attach with Ranger" #+end_src Attach file by drooping from GUI #+begin_src conf - macro compose B "bash $HOME/.config/neomutt/bin/rangerpick dragonsource /tmp/rangerpickbash $HOME/.config/neomutt/bin/rangerpick clean" "Attach with Ranger" +macro compose B "bash $HOME/.config/neomutt/bin/rangerpick dragonsource /tmp/rangerpickbash $HOME/.config/neomutt/bin/rangerpick clean" "Attach with Ranger" #+end_src **** Attach with Ranger Script @@ -795,76 +800,76 @@ Attach file by drooping from GUI :header-args+: :shebang "#!/usr/bin/env bash" :END: #+begin_src bash - tmpfile=/tmp/rangerpick - if [ -z "$1" ]; then - ranger --choosefiles $tmpfile && sed -i 's/\s/\\ /g' $tmpfile && echo "$(awk 'BEGIN {printf "%s", "push "} {printf "%s", ""$0""}' $tmpfile)" > $tmpfile - elif [ $1 == "dragon" ]; then - dragon-drag-and-drop --target --print-path --keep > $tmpfile && sed -i 's/\s/\\ /g' $tmpfile && echo "$(awk 'BEGIN {printf "%s", "push "} {printf "%s", ""$0""}' $tmpfile)" > $tmpfile - elif [ $1 == "clean" ]; then - ls $tmpfile - fi +tmpfile=/tmp/rangerpick +if [ -z "$1" ]; then + ranger --choosefiles $tmpfile && sed -i 's/\s/\\ /g' $tmpfile && echo "$(awk 'BEGIN {printf "%s", "push "} {printf "%s", ""$0""}' $tmpfile)" > $tmpfile +elif [ $1 == "dragon" ]; then + dragon-drag-and-drop --target --print-path --keep > $tmpfile && sed -i 's/\s/\\ /g' $tmpfile && echo "$(awk 'BEGIN {printf "%s", "push "} {printf "%s", ""$0""}' $tmpfile)" > $tmpfile +elif [ $1 == "clean" ]; then + ls $tmpfile +fi #+end_src **** Send HTML mails using Markdown Write html emails using markdown #+BEGIN_SRC conf - # macro compose M "F pandoc -s -f markdown -t html \ny^T^Utext/html; charset=us-ascii\n" +# macro compose M "F pandoc -s -f markdown -t html \ny^T^Utext/html; charset=us-ascii\n" #+END_SRC *** Browser #+begin_src conf - bind browser l select-entry - macro browser h "" +bind browser l select-entry +macro browser h "" - bind browser t tag-entry +bind browser t tag-entry - bind browser q exit +bind browser q exit #+end_src *** Generic Enter Command #+begin_src conf - bind generic,index,pager : enter-command +bind generic,index,pager : enter-command #+end_src *** Copy and move mails #+BEGIN_SRC conf - macro index C "?" "copy a message to a mailbox" - macro index M "?" "move a message to a mailbox" +macro index C "?" "copy a message to a mailbox" +macro index M "?" "move a message to a mailbox" #+END_SRC *** Sidebar #+BEGIN_SRC conf - bind index,pager \Cp sidebar-prev - bind index,pager \Cn sidebar-next - bind index,pager \Co sidebar-open +bind index,pager \Cp sidebar-prev +bind index,pager \Cn sidebar-next +bind index,pager \Co sidebar-open - bind index,pager \Ch sidebar-toggle-visible +bind index,pager \Ch sidebar-toggle-visible #+END_SRC *** Reload Configuration #+begin_src conf - macro generic,index,pager,editor , ":source ~/.config/neomutt/neomuttrc\n" "Reload mutt's configuration file" +macro generic,index,pager,editor , ":source ~/.config/neomutt/neomuttrc\n" "Reload mutt's configuration file" #+end_src *** urlview - Open URL in emails Use =urlview= to extract urls from the mail. #+begin_src conf - macro attach,compose,index,pager \cw "\ - :set my_tmp_pipe_decode=\$pipe_decode\n\ - :set pipe_decode\n\ - urlview\n\ - :set pipe_decode=\$my_tmp_pipe_decode\n\ - :unset my_tmp_pipe_decode\n" \ - 'call urlview to extract URLs out of a message' +macro attach,compose,index,pager \cw "\ + :set my_tmp_pipe_decode=\$pipe_decode\n\ + :set pipe_decode\n\ + urlview\n\ + :set pipe_decode=\$my_tmp_pipe_decode\n\ + :unset my_tmp_pipe_decode\n" \ + 'call urlview to extract URLs out of a message' #+end_src *** Searching using Mu #+begin_src conf - macro index,pager \Cf "mu find --clearlinks --format=links --linksdir=~/.mail/search " \ - "mu find" - macro index,pager gf "~/.mail/search" \ - "mu find results" +macro index,pager \Cf "mu find --clearlinks --format=links --linksdir=~/.mail/search " \ + "mu find" +macro index,pager gf "~/.mail/search" \ + "mu find results" #+end_src *** Link to Orgmode @@ -872,7 +877,7 @@ https://www.donarmstrong.com/posts/org_mode_mutt_capture/ https://upsilon.cc/~zack/blog/posts/2010/02/integrating_Mutt_with_Org-mode/ #+begin_src conf - macro index,pager S "$HOME/.config/neomutt/bin/mutt-save-org-link.py\n" +macro index,pager S "$HOME/.config/neomutt/bin/mutt-save-org-link.py\n" #+end_src **** Link mail to orgmode - Script @@ -882,77 +887,77 @@ https://upsilon.cc/~zack/blog/posts/2010/02/integrating_Mutt_with_Org-mode/ :header-args+: :shebang "#!/usr/bin/env python3" :END: #+begin_src python - import sys - import email - import subprocess - import urllib.parse +import sys +import email +import subprocess +import urllib.parse - # Parse the email from standard input - message_bytes = sys.stdin.buffer.read() - message = email.message_from_bytes(message_bytes) +# Parse the email from standard input +message_bytes = sys.stdin.buffer.read() +message = email.message_from_bytes(message_bytes) - # Grab the relevant message headers - message_id = urllib.parse.quote(message['message-id'].strip()[1:-1]) - subject = message['subject'].replace('[', '{').replace(']', '}').replace('\n', ' ') - subject = (subject[:75] + '..') if len(subject) > 75 else subject +# Grab the relevant message headers +message_id = urllib.parse.quote(message['message-id'].strip()[1:-1]) +subject = message['subject'].replace('[', '{').replace(']', '}').replace('\n', ' ') +subject = (subject[:75] + '..') if len(subject) > 75 else subject - # Ask emacsclient to save a link to the message - p = subprocess.Popen([ - 'emacsclient', - f'org-protocol://capture?template=pm&url={message_id}&title={subject}' - ]) +# Ask emacsclient to save a link to the message +p = subprocess.Popen([ + 'emacsclient', + f'org-protocol://capture?template=pm&url={message_id}&title={subject}' +]) - p.wait() +p.wait() #+end_src ** Colors *** Basic colors #+BEGIN_SRC conf - color normal color021 color000 - color error color021 color000 - color tilde color021 color000 - color message color021 color000 - color markers color021 color000 - color attachment color021 color000 - color search color000 color003 - color status color016 color000 - color indicator color000 color021 - color tree color021 color000 - color progress color000 color021 +color normal color021 color000 +color error color021 color000 +color tilde color021 color000 +color message color021 color000 +color markers color021 color000 +color attachment color021 color000 +color search color000 color003 +color status color016 color000 +color indicator color000 color021 +color tree color021 color000 +color progress color000 color021 - # basic monocolor screen - mono bold bold - mono underline underline - mono indicator reverse - mono error bold +# basic monocolor screen +mono bold bold +mono underline underline +mono indicator reverse +mono error bold #+END_SRC *** Index #+begin_src conf - color index color021 color000 "~A" # All messages - color index brightcolor006 color000 "~N" # New messages - color index color020 color000 "~O" # Old messages - color index color020 color000 "~Q" # messages that have been replied to - color index color021 color000 "~R" # read messages - color index color006 color000 "~U" # unread messages - color index color021 color000 "~R~p!~F" # messages to me - color index brightcolor006 color000 "~N~p!~F" # new messages to me - color index brightcolor006 color000 "~U~p!~F" # unread messages to me - color index color005 color000 "~F" # flagged messages - color index color005 color000 "~F~p" # flagged messages to me - color index brightcolor006 color000 "~N~F" # new flagged messages - color index brightcolor006 color000 "~N~F~p" # new flagged messages to me - color index brightcolor006 color000 "~U~F~p" # new flagged messages to me - color index brightcolor000 color001 "~D" # deleted messages +color index color021 color000 "~A" # All messages +color index brightcolor006 color000 "~N" # New messages +color index color020 color000 "~O" # Old messages +color index color020 color000 "~Q" # messages that have been replied to +color index color021 color000 "~R" # read messages +color index color006 color000 "~U" # unread messages +color index color021 color000 "~R~p!~F" # messages to me +color index brightcolor006 color000 "~N~p!~F" # new messages to me +color index brightcolor006 color000 "~U~p!~F" # unread messages to me +color index color005 color000 "~F" # flagged messages +color index color005 color000 "~F~p" # flagged messages to me +color index brightcolor006 color000 "~N~F" # new flagged messages +color index brightcolor006 color000 "~N~F~p" # new flagged messages to me +color index brightcolor006 color000 "~U~F~p" # new flagged messages to me +color index brightcolor000 color001 "~D" # deleted messages - color index brightcolor021 color019 "~v~(!~N)" # collapsed thread with no unread - color index brightcolor006 color019 "~v~(~N)" # collapsed thread with some unread - color index brightcolor006 color019 "~N~v~(~N)" # collapsed thread with unread parent - color index brightcolor005 color019 "~v~(~F)!~N" # collapsed thread with flagged, no unread - color index brightcolor006 color019 "~v~(~F~N)" # collapsed thread with some unread & flagged - color index brightcolor006 color019 "~N~v~(~F~N)" # collapsed thread with unread parent & flagged - color index brightcolor005 color019 "~N~v~(~F)" # collapsed thread with unread parent, no unread inside, but some flagged - color index brightcolor000 color001 "~v~(~D)" # thread with deleted (doesn't differentiate between all or partial) +color index brightcolor021 color019 "~v~(!~N)" # collapsed thread with no unread +color index brightcolor006 color019 "~v~(~N)" # collapsed thread with some unread +color index brightcolor006 color019 "~N~v~(~N)" # collapsed thread with unread parent +color index brightcolor005 color019 "~v~(~F)!~N" # collapsed thread with flagged, no unread +color index brightcolor006 color019 "~v~(~F~N)" # collapsed thread with some unread & flagged +color index brightcolor006 color019 "~N~v~(~F~N)" # collapsed thread with unread parent & flagged +color index brightcolor005 color019 "~N~v~(~F)" # collapsed thread with unread parent, no unread inside, but some flagged +color index brightcolor000 color001 "~v~(~D)" # thread with deleted (doesn't differentiate between all or partial) #+end_src *** Sidebar @@ -965,133 +970,133 @@ https://upsilon.cc/~zack/blog/posts/2010/02/integrating_Mutt_with_Org-mode/ *** Message headers #+BEGIN_SRC conf - color hdrdefault color006 color000 - color header brightcolor006 color000 "^(From)" - color header brightcolor004 color000 "^(Subject)" +color hdrdefault color006 color000 +color header brightcolor006 color000 "^(From)" +color header brightcolor004 color000 "^(Subject)" #+END_SRC *** Attachments #+begin_src conf - # Color if the attachment is autoviewed - color attach_headers brightgreen default "Autoview" - # Color only the brackets around the headers - color attach_headers brightyellow default "^\\[--" - color attach_headers brightyellow default "--]$" - # Color the mime type and the size - color attach_headers green default "Type: [a-z]+/[a-z0-9\-]+" - color attach_headers green default "Size: [0-9\.]+[KM]" - # Color GPGME signature checks - color attach_headers brightgreen default "Good signature from.*" - color attach_headers brightred default "Bad signature from.*" - color attach_headers brightred default "BAD signature from.*" - color attach_headers brightred default "Note: This key has expired!" - color attach_headers brightmagenta default "Problem signature from.*" - color attach_headers brightmagenta default "WARNING: This key is not certified with a trusted signature!" - color attach_headers brightmagenta default " There is no indication that the signature belongs to the owner." - color attach_headers brightmagenta default "can't handle these multiple signatures" - color attach_headers brightmagenta default "signature verification suppressed" - color attach_headers brightmagenta default "invalid node with packet of type" +# Color if the attachment is autoviewed +color attach_headers brightgreen default "Autoview" +# Color only the brackets around the headers +color attach_headers brightyellow default "^\\[--" +color attach_headers brightyellow default "--]$" +# Color the mime type and the size +color attach_headers green default "Type: [a-z]+/[a-z0-9\-]+" +color attach_headers green default "Size: [0-9\.]+[KM]" +# Color GPGME signature checks +color attach_headers brightgreen default "Good signature from.*" +color attach_headers brightred default "Bad signature from.*" +color attach_headers brightred default "BAD signature from.*" +color attach_headers brightred default "Note: This key has expired!" +color attach_headers brightmagenta default "Problem signature from.*" +color attach_headers brightmagenta default "WARNING: This key is not certified with a trusted signature!" +color attach_headers brightmagenta default " There is no indication that the signature belongs to the owner." +color attach_headers brightmagenta default "can't handle these multiple signatures" +color attach_headers brightmagenta default "signature verification suppressed" +color attach_headers brightmagenta default "invalid node with packet of type" #+end_src *** Body #+BEGIN_SRC conf - color quoted color002 color000 - color quoted1 color003 color000 - color quoted2 color004 color000 - color quoted3 color005 color000 - color quoted4 color006 color000 +color quoted color002 color000 +color quoted1 color003 color000 +color quoted2 color004 color000 +color quoted3 color005 color000 +color quoted4 color006 color000 - color signature color021 color000 - color bold brightcolor021 color000 - color underline brightcolor021 color000 - color normal color021 color000 +color signature color021 color000 +color bold brightcolor021 color000 +color underline brightcolor021 color000 +color normal color021 color000 #+END_SRC *** PGP #+BEGIN_SRC conf - color body color001 color000 "(BAD signature)" - color body color002 color000 "(Good signature)" - color body color002 color000 "^gpg: Good signature .*" - color body color002 color000 "^gpg: " - color body color002 color000 "^gpg: BAD signature from.*" +color body color001 color000 "(BAD signature)" +color body color002 color000 "(Good signature)" +color body color002 color000 "^gpg: Good signature .*" +color body color002 color000 "^gpg: " +color body color002 color000 "^gpg: BAD signature from.*" #+END_SRC *** Urls #+BEGIN_SRC conf - color body color006 color000 "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]" +color body color006 color000 "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]" #+END_SRC *** Emails #+BEGIN_SRC conf - color body color006 color000 "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])" +color body color006 color000 "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])" #+END_SRC ** Contacts with Mu #+BEGIN_SRC conf - set query_command="mu cfind '%s' -o mutt-ab" +set query_command="mu cfind '%s' -o mutt-ab" - bind editor complete-query +bind editor complete-query #+END_SRC ** Paths #+BEGIN_SRC conf - set folder = ~/.mail # mail location - set alias_file = ~/.config/neomutt/alias # where to store aliases - set header_cache = ~/.config/neomutt/cache/headers # where to store headers - set message_cachedir = ~/.config/neomutt/cache/bodies # where to store bodies - set certificate_file = ~/.config/neomutt/certificates # where to store certs - set mailcap_path = ~/.config/neomutt/mailcap # entries for filetypes - set tmpdir = ~/.config/neomutt/temp # where to keep temp files +set folder = ~/.mail # mail location +set alias_file = ~/.config/neomutt/alias # where to store aliases +set header_cache = ~/.config/neomutt/cache/headers # where to store headers +set message_cachedir = ~/.config/neomutt/cache/bodies # where to store bodies +set certificate_file = ~/.config/neomutt/certificates # where to store certs +set mailcap_path = ~/.config/neomutt/mailcap # entries for filetypes +set tmpdir = ~/.config/neomutt/temp # where to keep temp files #+END_SRC ** Print https://unix.stackexchange.com/questions/20456/pretty-print-mails-from-mutt #+BEGIN_SRC conf - # set print_command="/usr/bin/muttprint %s -p ctb110c1u" +# set print_command="/usr/bin/muttprint %s -p ctb110c1u" #+END_SRC ** Accounts #+BEGIN_SRC conf - set spoolfile = "+gmail/Inbox" # Default inbox - set realname = "Dehaeze Thomas" - set from = "dehaeze.thomas@gmail.com" +set spoolfile = "+gmail/Inbox" # Default inbox +set realname = "Dehaeze Thomas" +set from = "dehaeze.thomas@gmail.com" - folder-hook gmail/* source ~/.config/neomutt/accounts/gmail - folder-hook esrf/* source ~/.config/neomutt/accounts/esrf - folder-hook ulg/* source ~/.config/neomutt/accounts/ulg - folder-hook uliege/* source ~/.config/neomutt/accounts/uliege +folder-hook gmail/* source ~/.config/neomutt/accounts/gmail +folder-hook esrf/* source ~/.config/neomutt/accounts/esrf +folder-hook ulg/* source ~/.config/neomutt/accounts/ulg +folder-hook uliege/* source ~/.config/neomutt/accounts/uliege - macro index,pager gl "+uliege/Inbox" "go to inbox" - macro index,pager gu "+ulg/Inbox" "go to inbox" - macro index,pager ge "+esrf/Inbox" "go to inbox" - macro index,pager gm "+gmail/Inbox" "go to inbox" +macro index,pager gl "+uliege/Inbox" "go to inbox" +macro index,pager gu "+ulg/Inbox" "go to inbox" +macro index,pager ge "+esrf/Inbox" "go to inbox" +macro index,pager gm "+gmail/Inbox" "go to inbox" #+END_SRC *** Gmail **** Configuration #+begin_src conf :tangle ~/.config/neomutt/accounts/gmail :comments none - set from = "dehaeze.thomas@gmail.com" - set sendmail = "~/.config/neomutt/bin/send_mail.sh gmail" +set from = "dehaeze.thomas@gmail.com" +set sendmail = "~/.config/neomutt/bin/send_mail.sh gmail" - # Other special folders. - set mbox = "+gmail/Archive" - unset record # Don't copy send message to Sent folder: Gmail does that for us - set postponed = "+gmail/Drafts" +# Other special folders. +set mbox = "+gmail/Archive" +unset record # Don't copy send message to Sent folder: Gmail does that for us +set postponed = "+gmail/Drafts" - set signature = "~/.config/neomutt/accounts/gmail.signature" +set signature = "~/.config/neomutt/accounts/gmail.signature" - macro index,pager d \ - "+gmail/Archive" \ - "Move message to the Archive" +macro index,pager d \ + "+gmail/Archive" \ + "Move message to the Archive" - macro index,pager D \ - "+gmail/Trash" \ - "Move message to the Trash" +macro index,pager D \ + "+gmail/Trash" \ + "Move message to the Trash" #+end_src **** Signature #+begin_src conf :tangle ~/.config/neomutt/accounts/gmail.signature :comments none :padline no - Thomas Dehaeze +Thomas Dehaeze #+end_src This empty code block is used to add a new line after signature #+begin_src conf :tangle ~/.config/neomutt/accounts/gmail.signature :comments none :padline no @@ -1100,28 +1105,28 @@ This empty code block is used to add a new line after signature *** ESRF **** Configuration #+begin_src conf :tangle ~/.config/neomutt/accounts/esrf :comments none - set from = "thomas.dehaeze@esrf.fr" - set sendmail = "~/.config/neomutt/bin/send_mail.sh esrf" +set from = "thomas.dehaeze@esrf.fr" +set sendmail = "~/.config/neomutt/bin/send_mail.sh esrf" - # Other special folders. - set mbox = "+esrf/Archive" - set record = "+esrf/Sent" - set postponed = "+esrf/Drafts" +# Other special folders. +set mbox = "+esrf/Archive" +set record = "+esrf/Sent" +set postponed = "+esrf/Drafts" - set signature = "~/.config/neomutt/accounts/esrf.signature" +set signature = "~/.config/neomutt/accounts/esrf.signature" - macro index,pager d \ - "+esrf/Archive" \ - "Move message to the Archive" +macro index,pager d \ + "+esrf/Archive" \ + "Move message to the Archive" - macro index,pager D \ - "+esrf/Trash" \ - "Move message to the Trash" +macro index,pager D \ + "+esrf/Trash" \ + "Move message to the Trash" #+end_src **** Signature #+begin_src conf :tangle ~/.config/neomutt/accounts/esrf.signature :comments none :padline no - Thomas Dehaeze +Thomas Dehaeze #+end_src This empty code block is used to add a new line after signature #+begin_src conf :tangle ~/.config/neomutt/accounts/esrf.signature :comments none :padline no @@ -1130,28 +1135,28 @@ This empty code block is used to add a new line after signature *** ULG **** Configuration #+begin_src conf :tangle ~/.config/neomutt/accounts/ulg :comments none - set from = "thomas.dehaeze@doct.uliege.be" - set sendmail = "~/.config/neomutt/bin/send_mail.sh ulg" +set from = "thomas.dehaeze@doct.uliege.be" +set sendmail = "~/.config/neomutt/bin/send_mail.sh ulg" - # Other special folders. - set mbox = "+ulg/Archive" - set record = "+ulg/Sent" - set postponed = "+ulg/Drafts" +# Other special folders. +set mbox = "+ulg/Archive" +set record = "+ulg/Sent" +set postponed = "+ulg/Drafts" - set signature = "~/.config/neomutt/accounts/ulg.signature" +set signature = "~/.config/neomutt/accounts/ulg.signature" - macro index,pager d \ - "+ulg/Archive" \ - "Move message to the Archive" +macro index,pager d \ + "+ulg/Archive" \ + "Move message to the Archive" - macro index,pager D \ - "+ulg/Trash" \ - "Move message to the Trash" +macro index,pager D \ + "+ulg/Trash" \ + "Move message to the Trash" #+end_src **** Signature #+begin_src conf :tangle ~/.config/neomutt/accounts/ulg.signature :comments none :padline no - Thomas Dehaeze +Thomas Dehaeze #+end_src This empty code block is used to add a new line after signature #+begin_src conf :tangle ~/.config/neomutt/accounts/ulg.signature :comments none :padline no @@ -1160,28 +1165,28 @@ This empty code block is used to add a new line after signature *** ULIEGE **** Configuration #+begin_src conf :tangle ~/.config/neomutt/accounts/uliege :comments none - set from = "tdehaeze@uliege.be" - set sendmail = "~/.config/neomutt/bin/send_mail.sh uliege" +set from = "tdehaeze@uliege.be" +set sendmail = "~/.config/neomutt/bin/send_mail.sh uliege" - # Other special folders. - set mbox = "+uliege/Archive" - set record = "+uliege/Sent" - set postponed = "+uliege/Drafts" +# Other special folders. +set mbox = "+uliege/Archive" +set record = "+uliege/Sent" +set postponed = "+uliege/Drafts" - set signature = "~/.config/neomutt/accounts/uliege.signature" +set signature = "~/.config/neomutt/accounts/uliege.signature" - macro index,pager d \ - "+uliege/Archive" \ - "Move message to the Archive" +macro index,pager d \ + "+uliege/Archive" \ + "Move message to the Archive" - macro index,pager D \ - "+uliege/Trash" \ - "Move message to the Trash" +macro index,pager D \ + "+uliege/Trash" \ + "Move message to the Trash" #+end_src **** Signature #+begin_src conf :tangle ~/.config/neomutt/accounts/uliege.signature :comments none :padline no - Thomas Dehaeze +Thomas Dehaeze #+end_src This empty code block is used to add a new line after signature #+begin_src conf :tangle ~/.config/neomutt/accounts/uliege.signature :comments none :padline no @@ -1189,188 +1194,188 @@ This empty code block is used to add a new line after signature ** Basic Options #+BEGIN_SRC conf - set wait_key = no # shut up, mutt - set mbox_type = Maildir # mailbox type - set help = no # No top bar - set timeout = 3 # idle time before scanning - set sleep_time = 0 # how long NeoMutt may wait after an error message - set mail_check = 0 # minimum time between scans - set delete # don't ask, just do - unset confirmappend # don't ask, just do! - set quit # don't ask, just do!! - set mark_old = no # read/new is good enough for me - set beep_new # bell on new mails - # set pipe_decode # strip headers and eval mimes when piping - set thorough_search # strip headers and eval mimes before searching - set send_charset="us-ascii:utf-8:iso-8859-1" - set sendmail_wait = 0 # no please don't silently fail, email is important - set use_from # respect the From: address the editor sends back +set wait_key = no # shut up, mutt +set mbox_type = Maildir # mailbox type +set help = no # No top bar +set timeout = 3 # idle time before scanning +set sleep_time = 0 # how long NeoMutt may wait after an error message +set mail_check = 0 # minimum time between scans +set delete # don't ask, just do +unset confirmappend # don't ask, just do! +set quit # don't ask, just do!! +set mark_old = no # read/new is good enough for me +set beep_new # bell on new mails +# set pipe_decode # strip headers and eval mimes when piping +set thorough_search # strip headers and eval mimes before searching +set send_charset="us-ascii:utf-8:iso-8859-1" +set sendmail_wait = 0 # no please don't silently fail, email is important +set use_from # respect the From: address the editor sends back - # Use Vim to compose email, with a few default options. - set editor = "nvim -c '/\\n--' -c ':noh' -c 'startinsert'" +# Use Vim to compose email, with a few default options. +set editor = "nvim -c '/\\n--' -c ':noh' -c 'startinsert'" #+END_SRC ** View Options *** Status Bar #+BEGIN_SRC conf - set status_on_top = no - set status_chars = " *%A" - set status_format = "───[ Folder: %f ]───[%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]───%>─%?p?( %p postponed )?───" +set status_on_top = no +set status_chars = " *%A" +set status_format = "───[ Folder: %f ]───[%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]───%>─%?p?( %p postponed )?───" #+END_SRC *** Index View Options #+BEGIN_SRC conf - set date_format = "%d/%m/%y %H:%M" - set index_format = "[%Z] %D %-20.20F %s" +set date_format = "%d/%m/%y %H:%M" +set index_format = "[%Z] %D %-20.20F %s" - set sort = threads # like gmail - set sort_aux = reverse-last-date-received # like gmail - set uncollapse_jump # don't collapse on an unread message - set sort_re # thread based on regex - set reply_regexp = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*" - set folder_format = "%2C %t %N %8s %f" +set sort = threads # like gmail +set sort_aux = reverse-last-date-received # like gmail +set uncollapse_jump # don't collapse on an unread message +set sort_re # thread based on regex +set reply_regexp = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*" +set folder_format = "%2C %t %N %8s %f" #+END_SRC *** Pager View Options #+BEGIN_SRC conf - set pager_index_lines = 10 # number of index lines to show - set pager_context = 3 # number of context lines to show - set pager_stop # don't go to next message automatically - set menu_scroll # scroll in menus - set tilde # show tildes like in vim - set markers = no # no ugly plus signs - set quote_regexp = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+" +set pager_index_lines = 10 # number of index lines to show +set pager_context = 3 # number of context lines to show +set pager_stop # don't go to next message automatically +set menu_scroll # scroll in menus +set tilde # show tildes like in vim +set markers = no # no ugly plus signs +set quote_regexp = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+" - auto_view text/html # view html automatically - alternative_order text/plain text/enriched text/html # save html for last +auto_view text/html # view html automatically +alternative_order text/plain text/enriched text/html # save html for last #+END_SRC *** Compose View Options #+BEGIN_SRC conf - set sig_dashes # dashes before sig - set sig_on_top # the signature is just below the response - set edit_headers # show headers when composing - set fast_reply # skip to compose when replying - set fcc_attach # save attachments with the body - set attribution = "On %d, %n wrote:" # format of quoting header - set reply_to # reply to Reply to: field - set reverse_name # reply as whomever it was to - set include # include message in replies +set sig_dashes # dashes before sig +set sig_on_top # the signature is just below the response +set edit_headers # show headers when composing +set fast_reply # skip to compose when replying +set fcc_attach # save attachments with the body +set attribution = "On %d, %n wrote:" # format of quoting header +set reply_to # reply to Reply to: field +set reverse_name # reply as whomever it was to +set include # include message in replies #+END_SRC *** Forward #+BEGIN_SRC conf - set forward_format = "Fwd: %s" # format of subject when forwarding - set forward_decode # decode when forwarding - set forward_quote # include message in forwards +set forward_format = "Fwd: %s" # format of subject when forwarding +set forward_decode # decode when forwarding +set forward_quote # include message in forwards #+END_SRC *** Headers #+BEGIN_SRC conf - ignore * # ignore all headers - unignore from: to: cc: date: subject: # show only these - unhdr_order * - hdr_order from: to: cc: date: subject: # and in this order +ignore * # ignore all headers +unignore from: to: cc: date: subject: # show only these +unhdr_order * +hdr_order from: to: cc: date: subject: # and in this order #+END_SRC ** Sidebar *** General Config #+BEGIN_SRC conf - # Should the Sidebar be shown? - set sidebar_visible = yes +# Should the Sidebar be shown? +set sidebar_visible = yes - # How wide should the Sidebar be in screen columns? - # Note: Some characters, e.g. Chinese, take up two columns each. - set sidebar_width = 20 +# How wide should the Sidebar be in screen columns? +# Note: Some characters, e.g. Chinese, take up two columns each. +set sidebar_width = 20 - # Should the mailbox paths be abbreviated? - set sidebar_short_path = yes +# Should the mailbox paths be abbreviated? +set sidebar_short_path = yes - # When abbreviating mailbox path names, use any of these characters as path - # separators. Only the part after the last separators will be shown. - # For file folders '/' is good. For IMAP folders, often '.' is useful. - set sidebar_delim_chars = '/.' +# When abbreviating mailbox path names, use any of these characters as path +# separators. Only the part after the last separators will be shown. +# For file folders '/' is good. For IMAP folders, often '.' is useful. +set sidebar_delim_chars = '/.' - # If the mailbox path is abbreviated, should it be indented? - set sidebar_folder_indent = yes +# If the mailbox path is abbreviated, should it be indented? +set sidebar_folder_indent = yes - # Indent mailbox paths with this string. - set sidebar_indent_string = ' ' +# Indent mailbox paths with this string. +set sidebar_indent_string = ' ' - # Make the Sidebar only display mailboxes that contain new, or flagged, - # mail. - set sidebar_new_mail_only = no +# Make the Sidebar only display mailboxes that contain new, or flagged, +# mail. +set sidebar_new_mail_only = no - # Any mailboxes that are whitelisted will always be visible, even if the - # sidebar_new_mail_only option is enabled. - # sidebar_whitelist '/home/user/mailbox1' - # sidebar_whitelist '/home/user/mailbox2' +# Any mailboxes that are whitelisted will always be visible, even if the +# sidebar_new_mail_only option is enabled. +# sidebar_whitelist '/home/user/mailbox1' +# sidebar_whitelist '/home/user/mailbox2' - # When searching for mailboxes containing new mail, should the search wrap - # around when it reaches the end of the list? - set sidebar_next_new_wrap = no +# When searching for mailboxes containing new mail, should the search wrap +# around when it reaches the end of the list? +set sidebar_next_new_wrap = no - # Show the Sidebar on the right-hand side of the screen - set sidebar_on_right = no +# Show the Sidebar on the right-hand side of the screen +set sidebar_on_right = no - # The character to use as the divider between the Sidebar and the other Mutt - # panels. - # Note: Only the first character of this string is used. - set sidebar_divider_char = '│' +# The character to use as the divider between the Sidebar and the other Mutt +# panels. +# Note: Only the first character of this string is used. +set sidebar_divider_char = '│' - # Enable extended buffy mode to calculate total, new, and flagged - # message counts for each mailbox. - set mail_check_stats +# Enable extended buffy mode to calculate total, new, and flagged +# message counts for each mailbox. +set mail_check_stats - # Display the Sidebar mailboxes using this format string. - set sidebar_format = '%D %* %?N?[%N]?' +# Display the Sidebar mailboxes using this format string. +set sidebar_format = '%D %* %?N?[%N]?' - # Sort the mailboxes in the Sidebar using this method: - # count - total number of messages - # flagged - number of flagged messages - # new - number of new messages - # path - mailbox path - # unsorted - do not sort the mailboxes - set sidebar_sort_method = 'unsorted' +# Sort the mailboxes in the Sidebar using this method: +# count - total number of messages +# flagged - number of flagged messages +# new - number of new messages +# path - mailbox path +# unsorted - do not sort the mailboxes +set sidebar_sort_method = 'unsorted' #+END_SRC *** Mailboxes to show in the sidebar. #+BEGIN_SRC conf - named-mailboxes "  Search" =search - named-mailboxes " GMAIL" =empty/gmail - named-mailboxes "  Inbox" =gmail/Inbox - named-mailboxes "  Sent" =gmail/Sent - named-mailboxes "  Drafts" =gmail/Drafts - named-mailboxes " ﮊ Archive" =gmail/Archive - named-mailboxes "  Trash" =gmail/Trash - named-mailboxes " ESRF" =empty/esrf - named-mailboxes "  Inbox" =esrf/Inbox - named-mailboxes "  Sent" =esrf/Sent - named-mailboxes "  Drafts" =esrf/Drafts - named-mailboxes " ﮊ Archive" =esrf/Archive - named-mailboxes "  Trash" =esrf/Trash - named-mailboxes " ULG" =empty/ulg - named-mailboxes "  Inbox" =ulg/Inbox - named-mailboxes "  Sent" =ulg/Sent - named-mailboxes "  Drafts" =ulg/Drafts - named-mailboxes " ﮊ Archive" =ulg/Archive - named-mailboxes "  Trash" =ulg/Trash - named-mailboxes " ULIEGE" =empty/uliege - named-mailboxes "  Inbox" =uliege/Inbox - named-mailboxes "  Sent" =uliege/Sent - named-mailboxes "  Drafts" =uliege/Drafts - named-mailboxes " ﮊ Archive" =uliege/Archive - named-mailboxes "  Trash" =uliege/Trash +named-mailboxes "  Search" =search +named-mailboxes " GMAIL" =empty/gmail +named-mailboxes "  Inbox" =gmail/Inbox +named-mailboxes "  Sent" =gmail/Sent +named-mailboxes "  Drafts" =gmail/Drafts +named-mailboxes " ﮊ Archive" =gmail/Archive +named-mailboxes "  Trash" =gmail/Trash +named-mailboxes " ESRF" =empty/esrf +named-mailboxes "  Inbox" =esrf/Inbox +named-mailboxes "  Sent" =esrf/Sent +named-mailboxes "  Drafts" =esrf/Drafts +named-mailboxes " ﮊ Archive" =esrf/Archive +named-mailboxes "  Trash" =esrf/Trash +named-mailboxes " ULG" =empty/ulg +named-mailboxes "  Inbox" =ulg/Inbox +named-mailboxes "  Sent" =ulg/Sent +named-mailboxes "  Drafts" =ulg/Drafts +named-mailboxes " ﮊ Archive" =ulg/Archive +named-mailboxes "  Trash" =ulg/Trash +named-mailboxes " ULIEGE" =empty/uliege +named-mailboxes "  Inbox" =uliege/Inbox +named-mailboxes "  Sent" =uliege/Sent +named-mailboxes "  Drafts" =uliege/Drafts +named-mailboxes " ﮊ Archive" =uliege/Archive +named-mailboxes "  Trash" =uliege/Trash #+END_SRC #+BEGIN_SRC conf - unset move +unset move #+END_SRC ** Attachments *** Attachment View Options #+BEGIN_SRC conf - set attach_format = "[%D %t] %2n [%-7.7m/%10.10M] %.40d %> [%s] " +set attach_format = "[%D %t] %2n [%-7.7m/%10.10M] %.40d %> [%s] " #+END_SRC *** Open Attachment @@ -1386,8 +1391,8 @@ Of ranger can be used with the =A= keybinding. *** Forgotten Attachment #+begin_src conf - set abort_noattach = ask-yes - set abort_noattach_regex = "\\<(attach(|ed|ments?)|(attaché|attachés|attache|attachons|joint|jointe|joints|jointes|joins|joignons))\\>" +set abort_noattach = ask-yes +set abort_noattach_regex = "\\<(attach(|ed|ments?)|(attaché|attachés|attache|attachons|joint|jointe|joints|jointes|joins|joignons))\\>" #+end_src ** Scripts and other config files @@ -1399,12 +1404,12 @@ Of ranger can be used with the =A= keybinding. :END: #+begin_src bash - msmtp -a $1 ${@:2} && \ - if [ $TMUX ]; then - tmux split -v -l 1 mbsync $1-Sent && tmux select-pane -U - else - mbsync $1-Sent - fi +msmtp -a $1 ${@:2} && \ + if [ $TMUX ]; then + tmux split -v -l 1 mbsync $1-Sent && tmux select-pane -U + else + mbsync $1-Sent + fi #+end_src *** Sync Mail Script @@ -1415,11 +1420,11 @@ Of ranger can be used with the =A= keybinding. :END: #+begin_src bash - if [ $TMUX ]; then - tmux split -v -l 1 checkmail $1 && tmux select-pane -U - else - checkmail $1 - fi +if [ $TMUX ]; then + tmux split -v -l 1 checkmail $1 && tmux select-pane -U +else + checkmail $1 +fi #+end_src *** Openfile Scripts @@ -1430,16 +1435,16 @@ Of ranger can be used with the =A= keybinding. :END: #+begin_src bash - base=$(basename "$1") - ext="${base##*.}" +base=$(basename "$1") +ext="${base##*.}" - file=$(mktemp -u --suffix=".$ext") +file=$(mktemp -u --suffix=".$ext") - rm -f "$file" +rm -f "$file" - cp "$1" "$file" +cp "$1" "$file" - setsid xdg-open "$file" >/dev/null 2>&1 & +setsid xdg-open "$file" >/dev/null 2>&1 & #+end_src *** urlview Config @@ -1449,9 +1454,9 @@ Of ranger can be used with the =A= keybinding. :END: #+BEGIN_SRC conf - REGEXP (((http|https|ftp|gopher)|mailto)[.:][^ >"\t]*|www\.[-a-z0-9.]+)[^ .,;\t>">\):] +REGEXP (((http|https|ftp|gopher)|mailto)[.:][^ >"\t]*|www\.[-a-z0-9.]+)[^ .,;\t>">\):] - COMMAND nohup qutebrowser %s /dev/null & +COMMAND nohup qutebrowser %s /dev/null & #+END_SRC *** Mailcap @@ -1462,84 +1467,84 @@ Of ranger can be used with the =A= keybinding. Generic #+BEGIN_SRC conf - text/plain; nvim %s - video/*; setsid mpv --quiet %s & - image/*; sxiv -a -b %s & - application/pdf; zathura %s & - audio/*; /usr/bin/xdg-open %s; copiousoutput - text/html; export DISPLAY=:0 && setsid qutebrowser %s; nametemplate=%s.html - text/html; w3m -I %{charset} -T text/html; copiousoutput; - text/calendar; khal import --batch -a home %s && khal printics %s; copiousoutput; - application/ics; khal import --batch -a home %s && khal printics %s; copiousoutput; +text/plain; nvim %s +video/*; setsid mpv --quiet %s & +image/*; sxiv -a -b %s & +application/pdf; zathura %s & +audio/*; /usr/bin/xdg-open %s; copiousoutput +text/html; export DISPLAY=:0 && setsid qutebrowser %s; nametemplate=%s.html +text/html; lynx -width ${COLUMNS:-80} -dump %s; nametemplate=%s.html; copiousoutput; +text/calendar; khal import --batch -a home %s && khal printics %s; copiousoutput; +application/ics; khal import --batch -a home %s && khal printics %s; copiousoutput; #+END_SRC Libreoffice #+begin_src conf - application/docx; libreoffice %s --nologo &; copiousoutput; - application/doc; libreoffice --nologo %s &; copiousoutput; +application/docx; libreoffice %s --nologo &; copiousoutput; +application/doc; libreoffice --nologo %s &; copiousoutput; - application/vnd.oasis.opendocument.database; libreoffice --nologo --base '%s'; copiousoutput - application/vnd.oasis.opendocument.chart; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.oasis.opendocument.spreadsheet; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.oasis.opendocument.spreadsheet-template; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.oasis.opendocument.graphics; libreoffice --nologo --draw '%s'; copiousoutput - application/vnd.oasis.opendocument.graphics-template; libreoffice --nologo --draw '%s'; copiousoutput - application/vnd.oasis.opendocument.presentation; libreoffice --nologo --impress '%s'; copiousoutput - application/vnd.oasis.opendocument.presentation-template; libreoffice --nologo --impress '%s'; copiousoutput - application/vnd.oasis.opendocument.formula; libreoffice --nologo --math '%s'; copiousoutput - application/vnd.oasis.opendocument.text; libreoffice --nologo --writer '%s'; copiousoutput - application/vnd.oasis.opendocument.text-master; libreoffice --nologo -global '%s'; copiousoutput - application/vnd.oasis.opendocument.text-template; libreoffice --nologo --writer '%s'; copiousoutput - application/vnd.oasis.opendocument.text-web; libreoffice --nologo -web '%s'; copiousoutput - application/vnd.sun.xml.base; libreoffice --nologo --writer '%s'; copiousoutput - application/vnd.sun.xml.calc; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.sun.xml.calc.template; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.sun.xml.draw; libreoffice --nologo --draw '%s'; copiousoutput - application/vnd.sun.xml.draw.template; libreoffice --nologo --draw '%s'; copiousoutput - application/vnd.stardivision.calc; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.stardivision.chart; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.stardivision.draw; libreoffice --nologo --draw '%s'; copiousoutput - application/vnd.stardivision.impress; libreoffice --nologo --impress '%s'; copiousoutput - application/vnd.stardivision.math; libreoffice --nologo --math '%s'; copiousoutput - application/vnd.stardivision.writer-global; libreoffice --nologo --writer '%s'; copiousoutput - application/vnd.stardivision.writer; libreoffice --nologo --writer '%s'; copiousoutput - application/vnd.sun.xml.impress; libreoffice --nologo --impress '%s'; copiousoutput - application/vnd.sun.xml.impress.template; libreoffice --nologo --impress '%s'; copiousoutput - application/vnd.sun.xml.math; libreoffice --nologo --math '%s'; copiousoutput - application/vnd.sun.xml.writer; libreoffice --nologo --writer '%s'; copiousoutput - application/vnd.sun.xml.writer.global; libreoffice --nologo -global '%s'; copiousoutput - application/vnd.sun.xml.writer.template; libreoffice --nologo --writer '%s'; copiousoutput - text/csv; libreoffice --nologo --calc '%s'; copiousoutput - text/spreadsheet; libreoffice --nologo --calc '%s'; copiousoutput - application/x-quattropro; libreoffice --nologo --calc '%s'; copiousoutput - application/x-dbf; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.ms-excel.sheet.macroEnabled.12; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.ms-excel.template.macroEnabled.12; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.openxmlformats-officedocument.spreadsheetml.template; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.lotus-1-2-3; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.ms-excel; libreoffice --nologo --calc '%s'; copiousoutput - application/msexcel; libreoffice --nologo --calc '%s'; copiousoutput - application/x-dbase; libreoffice --nologo --calc '%s'; copiousoutput - text/x-csv; libreoffice --nologo --calc '%s'; copiousoutput - application/vnd.ms-powerpoint.presentation.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput - application/vnd.ms-powerpoint.slideshow.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput - application/vnd.ms-powerpoint.template.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput - application/vnd.openxmlformats-officedocument.presentationml.presentation; libreoffice --nologo --impress '%s'; copiousoutput - application/vnd.openxmlformats-officedocument.presentationml.slideshow; libreoffice --nologo --impress '%s'; copiousoutput - application/vnd.openxmlformats-officedocument.presentationml.template; libreoffice --nologo --impress '%s'; copiousoutput - application/vnd.ms-powerpoint; libreoffice --nologo --impress '%s'; copiousoutput - application/mspowerpoint; libreoffice --nologo --impress '%s'; copiousoutput - text/mathml; libreoffice --nologo --math '%s'; copiousoutput - application/rtf; libreoffice --nologo --writer '%s'; copiousoutput - application/x-t602; libreoffice --nologo --writer '%s'; copiousoutput - application/vnd.wordperfect; libreoffice --nologo --writer '%s'; copiousoutput - application/vnd.ms-word.document.macroEnabled.12; libreoffice --nologo --writer '%s'; copiousoutput - application/vnd.ms-word.template.macroEnabled.12; libreoffice --nologo --writer '%s'; copiousoutput - application/vnd.openxmlformats-officedocument.wordprocessingml.document; libreoffice --nologo --writer '%s'; copiousoutput - application/vnd.openxmlformats-officedocument.wordprocessingml.template; libreoffice --nologo --writer '%s'; copiousoutput - application/vnd.ms-works; libreoffice --nologo --writer '%s'; copiousoutput - application/msword; libreoffice --nologo --writer '%s'; copiousoutput - application/wordperfect; libreoffice --nologo --writer '%s'; copiousoutput - text/rtf; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.oasis.opendocument.database; libreoffice --nologo --base '%s'; copiousoutput +application/vnd.oasis.opendocument.chart; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.oasis.opendocument.spreadsheet; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.oasis.opendocument.spreadsheet-template; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.oasis.opendocument.graphics; libreoffice --nologo --draw '%s'; copiousoutput +application/vnd.oasis.opendocument.graphics-template; libreoffice --nologo --draw '%s'; copiousoutput +application/vnd.oasis.opendocument.presentation; libreoffice --nologo --impress '%s'; copiousoutput +application/vnd.oasis.opendocument.presentation-template; libreoffice --nologo --impress '%s'; copiousoutput +application/vnd.oasis.opendocument.formula; libreoffice --nologo --math '%s'; copiousoutput +application/vnd.oasis.opendocument.text; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.oasis.opendocument.text-master; libreoffice --nologo -global '%s'; copiousoutput +application/vnd.oasis.opendocument.text-template; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.oasis.opendocument.text-web; libreoffice --nologo -web '%s'; copiousoutput +application/vnd.sun.xml.base; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.sun.xml.calc; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.sun.xml.calc.template; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.sun.xml.draw; libreoffice --nologo --draw '%s'; copiousoutput +application/vnd.sun.xml.draw.template; libreoffice --nologo --draw '%s'; copiousoutput +application/vnd.stardivision.calc; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.stardivision.chart; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.stardivision.draw; libreoffice --nologo --draw '%s'; copiousoutput +application/vnd.stardivision.impress; libreoffice --nologo --impress '%s'; copiousoutput +application/vnd.stardivision.math; libreoffice --nologo --math '%s'; copiousoutput +application/vnd.stardivision.writer-global; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.stardivision.writer; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.sun.xml.impress; libreoffice --nologo --impress '%s'; copiousoutput +application/vnd.sun.xml.impress.template; libreoffice --nologo --impress '%s'; copiousoutput +application/vnd.sun.xml.math; libreoffice --nologo --math '%s'; copiousoutput +application/vnd.sun.xml.writer; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.sun.xml.writer.global; libreoffice --nologo -global '%s'; copiousoutput +application/vnd.sun.xml.writer.template; libreoffice --nologo --writer '%s'; copiousoutput +text/csv; libreoffice --nologo --calc '%s'; copiousoutput +text/spreadsheet; libreoffice --nologo --calc '%s'; copiousoutput +application/x-quattropro; libreoffice --nologo --calc '%s'; copiousoutput +application/x-dbf; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.ms-excel.sheet.macroEnabled.12; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.ms-excel.template.macroEnabled.12; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.openxmlformats-officedocument.spreadsheetml.template; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.lotus-1-2-3; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.ms-excel; libreoffice --nologo --calc '%s'; copiousoutput +application/msexcel; libreoffice --nologo --calc '%s'; copiousoutput +application/x-dbase; libreoffice --nologo --calc '%s'; copiousoutput +text/x-csv; libreoffice --nologo --calc '%s'; copiousoutput +application/vnd.ms-powerpoint.presentation.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput +application/vnd.ms-powerpoint.slideshow.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput +application/vnd.ms-powerpoint.template.macroEnabled.12; libreoffice --nologo --impress '%s'; copiousoutput +application/vnd.openxmlformats-officedocument.presentationml.presentation; libreoffice --nologo --impress '%s'; copiousoutput +application/vnd.openxmlformats-officedocument.presentationml.slideshow; libreoffice --nologo --impress '%s'; copiousoutput +application/vnd.openxmlformats-officedocument.presentationml.template; libreoffice --nologo --impress '%s'; copiousoutput +application/vnd.ms-powerpoint; libreoffice --nologo --impress '%s'; copiousoutput +application/mspowerpoint; libreoffice --nologo --impress '%s'; copiousoutput +text/mathml; libreoffice --nologo --math '%s'; copiousoutput +application/rtf; libreoffice --nologo --writer '%s'; copiousoutput +application/x-t602; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.wordperfect; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.ms-word.document.macroEnabled.12; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.ms-word.template.macroEnabled.12; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.openxmlformats-officedocument.wordprocessingml.document; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.openxmlformats-officedocument.wordprocessingml.template; libreoffice --nologo --writer '%s'; copiousoutput +application/vnd.ms-works; libreoffice --nologo --writer '%s'; copiousoutput +application/msword; libreoffice --nologo --writer '%s'; copiousoutput +application/wordperfect; libreoffice --nologo --writer '%s'; copiousoutput +text/rtf; libreoffice --nologo --writer '%s'; copiousoutput #+end_src diff --git a/matlab.org b/matlab.org index 61ed1c6..93b0350 100644 --- a/matlab.org +++ b/matlab.org @@ -12,143 +12,143 @@ ** Setup LaTeX as a default interpreter #+begin_src matlab - set(groot, 'DefaultTextInterpreter', 'LaTeX'); - set(groot, 'DefaultAxesTickLabelInterpreter', 'LaTeX'); - set(groot, 'DefaultAxesFontName', 'LaTeX'); - set(groot, 'DefaultLegendInterpreter', 'LaTeX'); +set(groot, 'DefaultTextInterpreter', 'LaTeX'); +set(groot, 'DefaultAxesTickLabelInterpreter', 'LaTeX'); +set(groot, 'DefaultAxesFontName', 'LaTeX'); +set(groot, 'DefaultLegendInterpreter', 'LaTeX'); #+end_src ** Default Line Width #+begin_src matlab - set(groot, 'DefaultLineLineWidth', 1.5); - set(groot, 'DefaultAxesLineWidth', 0.5); +set(groot, 'DefaultLineLineWidth', 1.5); +set(groot, 'DefaultAxesLineWidth', 0.5); #+end_src ** Default grids on all axis #+begin_src matlab - set(groot, 'DefaultAxesXGrid','on'); - set(groot, 'DefaultAxesYGrid','on'); - set(groot, 'DefaultAxesZGrid','on'); +set(groot, 'DefaultAxesXGrid','on'); +set(groot, 'DefaultAxesYGrid','on'); +set(groot, 'DefaultAxesZGrid','on'); #+end_src ** Default Font Size #+begin_src matlab - set(groot, 'DefaultTextFontUnits', 'points'); - set(groot, 'DefaultTextFontSize', 10); - set(groot, 'DefaultAxesFontUnits', 'points'); - set(groot, 'DefaultAxesFontSize', 10); - set(groot, 'DefaultUicontrolFontSize', 10); +set(groot, 'DefaultTextFontUnits', 'points'); +set(groot, 'DefaultTextFontSize', 10); +set(groot, 'DefaultAxesFontUnits', 'points'); +set(groot, 'DefaultAxesFontSize', 10); +set(groot, 'DefaultUicontrolFontSize', 10); #+end_src ** Default Fonts #+begin_src matlab - set(groot, 'DefaultAxesFontName', 'Helvetica'); - set(groot, 'DefaultTextFontName', 'Helvetica'); +set(groot, 'DefaultAxesFontName', 'Helvetica'); +set(groot, 'DefaultTextFontName', 'Helvetica'); #+end_src ** Make figures into a Box #+begin_src matlab - set(groot, 'DefaultAxesBox', 'on'); +set(groot, 'DefaultAxesBox', 'on'); #+end_src ** Default Colors #+begin_src matlab - set(groot, 'DefaultAxesColor', 'w'); - set(groot, 'DefaultAxesXColor', 'k'); - set(groot, 'DefaultAxesYColor', 'k'); +set(groot, 'DefaultAxesColor', 'w'); +set(groot, 'DefaultAxesXColor', 'k'); +set(groot, 'DefaultAxesYColor', 'k'); - set(groot, 'DefaultFigureColor', 'w'); +set(groot, 'DefaultFigureColor', 'w'); #+end_src ** Default Plot Colors #+begin_src matlab - c1 = [ 0 0.4470 0.7410]; % Blue - c2 = [0.8500 0.3250 0.0980]; % Orange - c3 = [0.9290 0.6940 0.1250]; % Yellow - c4 = [0.4940 0.1840 0.5560]; % Purple - c5 = [0.4660 0.6740 0.1880]; % Green - c6 = [0.3010 0.7450 0.9330]; % Light Blue - c7 = [0.6350 0.0780 0.1840]; % Red +c1 = [ 0 0.4470 0.7410]; % Blue +c2 = [0.8500 0.3250 0.0980]; % Orange +c3 = [0.9290 0.6940 0.1250]; % Yellow +c4 = [0.4940 0.1840 0.5560]; % Purple +c5 = [0.4660 0.6740 0.1880]; % Green +c6 = [0.3010 0.7450 0.9330]; % Light Blue +c7 = [0.6350 0.0780 0.1840]; % Red - set(groot, 'defaultAxesColorOrder', [c1; c2; c3; c4; c5; c6; c7]) +set(groot, 'defaultAxesColorOrder', [c1; c2; c3; c4; c5; c6; c7]) #+end_src ** Figure paper and window style #+begin_src matlab - set(groot, 'DefaultFigurePaperType', 'A4'); - set(groot, 'DefaultFigureWindowStyle', 'normal'); +set(groot, 'DefaultFigurePaperType', 'A4'); +set(groot, 'DefaultFigureWindowStyle', 'normal'); #+end_src ** Set the display format #+begin_src matlab - format compact; - format long g; +format compact; +format long g; #+end_src ** Home Path #+begin_src matlab - toolboxes_path = '~/Cloud/thesis/matlab/toolboxes/'; +toolboxes_path = '~/Cloud/thesis/matlab/toolboxes/'; #+end_src ** Add to path Provides =vecfig3= for FRF fitting ([[https://www.sintef.no/projectweb/vectorfitting/downloads/][link]]). #+begin_src matlab - addpath([toolboxes_path 'matrix_fitting_toolbox_1']) +addpath([toolboxes_path 'matrix_fitting_toolbox_1']) #+end_src Apply and save color schemes in MATLAB with ease ([[https://github.com/scottclowe/matlab-schemer][link]]). #+begin_src matlab - addpath([toolboxes_path 'matlab-schemer']) +addpath([toolboxes_path 'matlab-schemer']) #+end_src Converts MATLAB figures to TikZ ([[https://github.com/matlab2tikz/matlab2tikz][link]]). #+begin_src matlab - addpath([toolboxes_path 'matlab2tikz/src']) +addpath([toolboxes_path 'matlab2tikz/src']) #+end_src MATLAB toolbox for exporting publication quality figures ([[https://github.com/altmany/export_fig][link]]). #+begin_src matlab - addpath([toolboxes_path 'export_fig']) +addpath([toolboxes_path 'export_fig']) #+end_src MATLAB source code formatter, beautifier ([[https://github.com/davidvarga/MBeautifier][link]]). #+begin_src matlab - addpath([toolboxes_path 'MBeautifier']) +addpath([toolboxes_path 'MBeautifier']) #+end_src Toolbox for Convex Programming ([[http://cvxr.com/cvx/][link]]). #+begin_src matlab - addpath([toolboxes_path 'CVX']) +addpath([toolboxes_path 'CVX']) #+end_src Useful functions to use with =orgmode= ([[https://github.com/tdehaeze/Org-Mode-Matlab][link]]). #+begin_src matlab - addpath([toolboxes_path 'Org-Mode-Toolbox/src']) +addpath([toolboxes_path 'Org-Mode-Toolbox/src']) #+end_src Some useful function ([[https://github.com/tdehaeze/matlab_useful_functions][link]]). #+begin_src matlab - addpath([toolboxes_path 'matlab_useful_functions/src']) +addpath([toolboxes_path 'matlab_useful_functions/src']) #+end_src H-Infinity Toolbox ([[https://github.com/tdehaeze/hinf-toolbox][link]]). #+begin_src matlab - % addpath([toolboxes_path 'Hinf-Toolbox/src']) +% addpath([toolboxes_path 'Hinf-Toolbox/src']) #+end_src Toolbox to work with Finite Element Models ([[https://github.com/tdehaeze/fem_matlab_toolbox][link]]). #+begin_src matlab - addpath([toolboxes_path 'fem_toolbox/src']) +addpath([toolboxes_path 'fem_toolbox/src']) #+end_src Toolbox to work with fractional order models ([[https://github.com/extall/fomcon-matlab][link]]). #+begin_src matlab - addpath(genpath([toolboxes_path 'fomcon-matlab'])) +addpath(genpath([toolboxes_path 'fomcon-matlab'])) #+end_src ** Clear #+begin_src matlab - clear; +clear; #+end_src * Setup @@ -160,5 +160,5 @@ This script should be run once after Matlab is installed. Import a nice color scheme. #+begin_src matlab - schemer_import('~/Cloud/thesis/matlab/toolboxes/Add-Ons/matlab-schemer/schemes/monokai.prf'); +schemer_import('~/Cloud/thesis/matlab/toolboxes/Add-Ons/matlab-schemer/schemes/monokai.prf'); #+end_src diff --git a/music.org b/music.org index cb6da4b..0dda1d7 100644 --- a/music.org +++ b/music.org @@ -9,14 +9,14 @@ :END: #+BEGIN_SRC conf - [window] - width=500 - height=400 - sinkInputType=1 - sourceOutputType=1 - sinkType=0 - sourceType=1 - showVolumeMeters=1 +[window] +width=500 +height=400 +sinkInputType=1 +sourceOutputType=1 +sinkType=0 +sourceType=1 +showVolumeMeters=1 #+END_SRC * =mopidy= - Music Server @@ -27,47 +27,47 @@ :END: #+begin_src conf - [spotify] - username = dehaeze.thomas@gmail.com - password = <> - client_id = 9dd02534-f038-46d8-946e-bfe72498204e - client_secret = <> - bitrate = 320 +[spotify] +username = dehaeze.thomas@gmail.com +password = <> +client_id = 9dd02534-f038-46d8-946e-bfe72498204e +client_secret = <> +bitrate = 320 - [mpd] - enabled = true - hostname = 127.0.0.1 - port = 6600 - password = - max_connections = 20 - connection_timeout = 60 - zeroconf = Mopidy MPD server on $hostname - command_blacklist = listall,listallinfo - default_playlist_scheme = m3u +[mpd] +enabled = true +hostname = 127.0.0.1 +port = 6600 +password = +max_connections = 20 +connection_timeout = 60 +zeroconf = Mopidy MPD server on $hostname +command_blacklist = listall,listallinfo +default_playlist_scheme = m3u - [jellyfin] - hostname = https://jellyfin.tdehaeze.xyz/ - username = tdehaeze - password = <> - libraries = Music - albumartistsort = True - album_format = {ProductionYear} - {Name} +[jellyfin] +hostname = https://jellyfin.tdehaeze.xyz/ +username = tdehaeze +password = <> +libraries = Music +albumartistsort = True +album_format = {ProductionYear} - {Name} - [file] - enabled = true - media_dirs = /home/thomas/Music - excluded_file_extensions = - .db - .directory - .html - .jpeg - .jpg - .log - .nfo - .pdf - .png - .txt - .zip +[file] +enabled = true +media_dirs = /home/thomas/Music +excluded_file_extensions = + .db + .directory + .html + .jpeg + .jpg + .log + .nfo + .pdf + .png + .txt + .zip #+end_src * =ncmpcpp= - Ncurses based MPD client @@ -86,38 +86,38 @@ Cheatsheet: https://pkgbuild.com/~jelle/ncmpcpp/ Configuration directory. #+begin_src conf - ncmpcpp_directory = ~/.config/ncmpcpp +ncmpcpp_directory = ~/.config/ncmpcpp #+end_src MPD Configuration. #+begin_src conf - mpd_host = localhost - mpd_port = 6600 - mpd_music_dir = ~/Music +mpd_host = localhost +mpd_port = 6600 +mpd_music_dir = ~/Music #+end_src Notification of song change. #+begin_src conf - execute_on_song_change = dunstify --replace=19845 "Now Playing ♫" "$(mpc current)" +execute_on_song_change = dunstify --replace=19845 "Now Playing ♫" "$(mpc current)" #+end_src Better user interface #+begin_src conf - user_interface = "alternative" - playlist_editor_display_mode = "columns" - search_engine_display_mode = "columns" - browser_display_mode = "columns" - playlist_display_mode = "columns" +user_interface = "alternative" +playlist_editor_display_mode = "columns" +search_engine_display_mode = "columns" +browser_display_mode = "columns" +playlist_display_mode = "columns" #+end_src Sorting by tracking number and then title #+begin_src conf - browser_sort_mode = "format" - browser_sort_format = '{%n - %t}|{%t}' +browser_sort_mode = "format" +browser_sort_format = '{%n - %t}|{%t}' #+end_src #+begin_src conf - ask_before_clearing_playlists = "no" +ask_before_clearing_playlists = "no" #+end_src ** Bindings @@ -126,43 +126,43 @@ Sorting by tracking number and then title :header-args:conf+: :comments none :mkdirp yes :END: - #+begin_src conf - def_key "q" - run_external_command "sh -c 'if [ $TMUX ] ; then tmux detach; fi'" - def_key "Q" - quit - def_key "g" - move_home - def_key "G" - move_end - def_key "j" - scroll_down - def_key "k" - scroll_up - def_key "ctrl-u" - page_up - def_key "ctrl-d" - page_down - def_key "l" - enter_directory - def_key "h" - jump_to_parent_directory - def_key "." - show_lyrics - def_key "n" - next_found_item - def_key "N" - previous_found_item - def_key "J" - move_sort_order_down - def_key "K" - move_sort_order_up - def_key "d" - delete_playlist_items - def_key "+" - volume_up - def_key "-" - volume_down +#+begin_src conf +def_key "q" + run_external_command "sh -c 'if [ $TMUX ] ; then tmux detach; fi'" +def_key "Q" + quit +def_key "g" + move_home +def_key "G" + move_end +def_key "j" + scroll_down +def_key "k" + scroll_up +def_key "ctrl-u" + page_up +def_key "ctrl-d" + page_down +def_key "l" + enter_directory +def_key "h" + jump_to_parent_directory +def_key "." + show_lyrics +def_key "n" + next_found_item +def_key "N" + previous_found_item +def_key "J" + move_sort_order_down +def_key "K" + move_sort_order_up +def_key "d" + delete_playlist_items +def_key "+" + volume_up +def_key "-" + volume_down #+end_src @@ -175,14 +175,14 @@ Sorting by tracking number and then title http://beets.io/ #+begin_src conf - directory: ~/Music - library: ~/Music/musiclibrary.db - art_filename: cover +directory: ~/Music +library: ~/Music/musiclibrary.db +art_filename: cover - import: - move: yes +import: + move: yes - plugins: fromfilename discogs +plugins: fromfilename discogs #+end_src * =curseradio= - Radio with curseradio @@ -193,24 +193,24 @@ http://beets.io/ :END: #+begin_src conf - [opml] - root = http://opml.radiotime.com/ +[opml] +root = http://opml.radiotime.com/ - [playback] - command = /usr/bin/mpv +[playback] +command = /usr/bin/mpv - [interface] - keymap = vi +[interface] +keymap = vi - [keymap.vi] - up = k - down = j - start = 0 - end = $ - pageup = u - pagedown = d - enter = l - stop = p - exit = q - favourite = f +[keymap.vi] +up = k +down = j +start = 0 +end = $ +pageup = u +pagedown = d +enter = l +stop = p +exit = q +favourite = f #+end_src diff --git a/nas.org b/nas.org index 91bad01..1abd72e 100644 --- a/nas.org +++ b/nas.org @@ -1,11 +1,6 @@ #+TITLE: Home Server #+SETUPFILE: ./setup/org-setup-file.org -#+NAME: startblock -#+BEGIN_SRC emacs-lisp :results none :exports none - (setq org-src-preserve-indentation t) -#+END_SRC - * Installation ** Hardware @@ -182,7 +177,7 @@ To check how the first part of the crontab works, check [[https://crontab.guru/] * Maintenance - How To ** Update System/Packages #+begin_src bash - sudo -- sh -c 'apt-get update; apt-get upgrade -y; apt-get dist-upgrade -y; apt-get autoremove -y; apt-get autoclean -y' +sudo -- sh -c 'apt-get update; apt-get upgrade -y; apt-get dist-upgrade -y; apt-get autoremove -y; apt-get autoclean -y' #+end_src ** Docker Commands @@ -196,13 +191,13 @@ To check how the first part of the crontab works, check [[https://crontab.guru/] Update All Containers #+begin_src bash :eval no - cd ~/docker/ && docker-compose pull --ignore-pull-failures && docker-compose up -d +cd ~/docker/ && docker-compose pull --ignore-pull-failures && docker-compose up -d #+end_src Clean up Docker environment This will delete all unused images, volumes and networks. #+begin_src bash :eval no - docker system prune -f && docker image prune -f && docker volume prune -f +docker system prune -f && docker image prune -f && docker volume prune -f #+end_src ** Add User and Password for Basic Authentication @@ -213,12 +208,12 @@ This will delete all unused images, volumes and networks. ** Snapraid To see all files "backed up" by snapraid, use: #+begin_src bash - docker exec -ti snapraid snapraid list | fzf +docker exec -ti snapraid snapraid list | fzf #+end_src In reality, snapraid in ran from the docker container: #+begin_src bash - docker exec -ti snapraid snapraid fix -f +docker exec -ti snapraid snapraid fix -f #+end_src The path to file should be relative: =/srv/storage/Cloud/org/file.org= -> =/Cloud/org/file.org= @@ -227,7 +222,7 @@ The path to file should be relative: =/srv/storage/Cloud/org/file.org= -> =/Clou To list backups: #+begin_src bash :dir /ssh:thomas@grenoble:/ :results output replace - docker exec restic restic snapshots +docker exec restic restic snapshots #+end_src #+RESULTS: @@ -241,7 +236,7 @@ To list backups: Force backup of folder: #+begin_src bash :dir /ssh:thomas@grenoble:/ :results output replace - docker exec restic restic backup /data/documents/manuals +docker exec restic restic backup /data/documents/manuals #+end_src #+RESULTS: @@ -255,24 +250,24 @@ Force backup of folder: Find the path to the file within the snapshot: #+begin_src bash :dir /ssh:thomas@grenoble:/ :results output replace - docker exec restic restic find file_name +docker exec restic restic find file_name #+end_src Find files only for a specific snapshot: #+begin_src bash :dir /ssh:thomas@grenoble:/ :results output replace - docker exec restic restic find -s latest file_name +docker exec restic restic find -s latest file_name #+end_src Backup files/folders: #+begin_src bash :dir /ssh:thomas@grenoble:/ :results output replace - docker exec restic restic restore --include /data/documents/manuals --target / 088e31a4 +docker exec restic restic restore --include /data/documents/manuals --target / 088e31a4 #+end_src You can use =latest= instead of the ID. * Docker-Compose :PROPERTIES: -:header-args: :tangle /ssh:thomas@grenoble:~/docker/test.yaml +:header-args: :tangle /ssh:thomas@grenoble:~/docker/docker-compose.yaml :header-args+: :comments none :mkdirp yes :END: @@ -373,6 +368,307 @@ services: # - 'traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User, Remote-Groups' #+end_src +** Homer +#+begin_src yaml + homer: + container_name: homer + image: b4bz/homer + restart: unless-stopped + networks: + - t2_proxy + environment: + - UID=$PUID + - GID=$PGID + - TZ=$TZ + volumes: + - $CONFIGDIR/homer/assets/:/www/assets + labels: + - "traefik.enable=true" + - "traefik.http.routers.homer-rtr.entrypoints=https" + - "traefik.http.routers.homer-rtr.rule=Host(`homer.$DOMAINNAME`)" + - "traefik.http.routers.homer-rtr.tls=true" + - "traefik.http.routers.homer-rtr.service=homer-svc" + - "traefik.http.services.homer-svc.loadbalancer.server.port=8080" +#+end_src + +*** =config.yml= +#+begin_src yaml :tangle /ssh:thomas@grenoble:~/docker/config/homer/assets/config.yml +--- +title: "Homepage" +subtitle: "Homer" +logo: "assets/homer.png" +header: false +footer: false + +columns: "auto" +connectivityCheck: false + +theme: default + +links: [] + +services: + - name: "Websites" + icon: "fas fa-desktop" + items: + - name: "Wiki" + logo: "/assets/tools/brain.png" + subtitle: "Digital Brain" + url: "https://brain.tdehaeze.xyz" + - name: "Research" + logo: "/assets/tools/orgmode.png" + subtitle: "Research Pages" + url: "https://research.tdehaeze.xyz" + - name: "Utilities" + icon: "fas fa-rss" + items: + - name: "Miniflux" + logo: "/assets/tools/miniflux.png" + subtitle: "RSS Feeds" + url: "https://rss.tdehaeze.xyz" + # - name: "Bitwarden" + # logo: "/assets/tools/bitwarden.png" + # subtitle: "Password Manager" + # url: "https://bw.tdehaeze.xyz" + - name: "Home Assistant" + logo: "/assets/tools/homeassistant.png" + subtitle: "Home Assistant" + url: "http://home.tdehaeze.xyz:8123" + - name: "Guacamole" + logo: "/assets/tools/guacamole.png" + subtitle: "SSH Access" + url: "https://guacamole.tdehaeze.xyz/" + - name: "Cloud" + icon: "fas fa-cloud" + items: + - name: "Cloud" + logo: "/assets/tools/cloud.png" + subtitle: "Simple Personnal Could" + url: "https://cloud.tdehaeze.xyz" + - name: "Syncthing" + logo: "/assets/tools/syncthing.png" + subtitle: "P2P Sync" + url: "https://syncthing.tdehaeze.xyz" + - name: "Gitea" + logo: "/assets/tools/gitea.png" + subtitle: "Git Server" + url: "https://git.tdehaeze.xyz" + - name: "Download" + icon: "fas fa-download" + items: + - name: "Transmission" + logo: "/assets/tools/transmission.png" + subtitle: "Torrents" + url: "https://torrent.tdehaeze.xyz/transmission/web/" + # - name: "transfer" + # logo: "/assets/tools/transfer.png" + # subtitle: "Transfer.sh" + # url: "https://file.tdehaeze.xyz" + - name: "deemix" + subtitle: "Download Music" + logo: "/assets/tools/deezer.png" + url: "https://deemix.tdehaeze.xyz" + # - name: "Aria2" + # logo: "/assets/tools/aria2.png" + # subtitle: "Direct Downloads" + # url: "https://dl.tdehaeze.xyz" + - name: "Media" + icon: "fas fa-film" + items: + - name: "Jellyfin" + logo: "/assets/tools/jellyfin.png" + subtitle: "Media Library" + url: "https://jellyfin.tdehaeze.xyz" + - name: "Config" + icon: "fas fa-cog" + items: + - name: "Portainer" + logo: "/assets/tools/portainer.png" + subtitle: "Manger Docker" + url: "https://portainer.tdehaeze.xyz" + - name: "Traefik" + logo: "/assets/tools/traefik.png" + subtitle: "Reverse Proxy" + url: "https://traefik.tdehaeze.xyz" + - name: "Local" + icon: "fas fa-home" + items: + # - name: "Jackett" + # logo: "/assets/tools/jackett.png" + # subtitle: "Download API" + # url: "http://192.168.1.150:9117/" + # - name: "Radarr" + # logo: "/assets/tools/radarr.png" + # subtitle: "Movie Manager" + # url: "http://192.168.1.150:7878/" + # - name: "Sonarr" + # logo: "/assets/tools/sonarr.png" + # subtitle: "TV Shows Manager" + # url: "http://192.168.1.150:8989/" + # - name: "Ombi" + # logo: "/assets/tools/ombi.png" + # subtitle: "Request Content" + # url: "https://ombi.tdehaeze.xyz/" + # - name: "Bazarr" + # logo: "/assets/tools/bazarr.png" + # subtitle: "Subtitles Manager" + # url: "http://192.168.1.150:6767/" + - name: "Scrutiny" + logo: "/assets/tools/scrutiny.png" + subtitle: "S.M.A.R.T" + url: "http://192.168.1.150:8089/web/dashboard" + - name: "OctoPrint" + logo: "/assets/tools/octoprint.png" + subtitle: "3D-Printing" + url: "http://192.168.1.56/" +#+end_src + +** Restic +#+begin_src yaml + restic: + container_name: restic + image: mazzolino/restic + restart: "no" + networks: + - t2_proxy + environment: + - RUN_ON_STARTUP=true + - BACKUP_CRON=0 30 0 * * * + - RESTIC_REPOSITORY=rclone:mega:mega + - RESTIC_PASSWORD="$RESTIC_PASSWORD" + - RESTIC_BACKUP_SOURCES=/data + - RESTIC_FORGET_ARGS=--keep-daily 7 --keep-weekly 4 --keep-monthly 12 + - UID=$PUID + - GID=$PGID + - TZ=$TZ + volumes: + - $CONFIGDIR/restic:/root/.config/rclone + - /srv/storage/Cloud/thesis:/data/thesis +#+end_src + +*** =rclone.conf= +#+begin_src conf :tangle /ssh:thomas@grenoble:~/docker/config/restic/rclone.conf +[mega] +type = mega +user = dehaeze.thomas@gmail.com +pass = <> +#+end_src + +** Snapraid +#+begin_src yaml + snapraid: + container_name: snapraid + image: xagaba/snapraid + restart: unless-stopped + privileged: true + volumes: + - /mnt:/mnt + - $CONFIGDIR/snapraid:/config + - type: "bind" + source: /dev/disk + target: /dev/disk + environment: + - PUID=$PUID + - PGID=$PGID + - TZ=$TZ +#+end_src + +*** =snapraid.conf= +#+begin_src conf :tangle /ssh:thomas@grenoble:~/docker/config/snapraid/snapraid.conf +# Defines the file to use as parity storage +# It must NOT be in a data disk +# Format: "parity FILE_PATH" +parity /mnt/parity/snapraid.parity + +# Defines the files to use as content list +# You can use multiple specification to store more copies +# You must have least one copy for each parity file plus one. Some more don't +# hurt +# They can be in the disks used for data, parity or boot, +# but each file must be in a different disk +# Format: "content FILE_PATH" +content /var/snapraid.content +content /mnt/disk0/.snapraid.content +content /mnt/disk1/.snapraid.content + +# Defines the data disks to use +# The order is relevant for parity, do not change it +# Format: "disk DISK_NAME DISK_MOUNT_POINT" +disk d0 /mnt/disk0 +disk d1 /mnt/disk1 + +# Excludes hidden files and directories (uncomment to enable). +#nohidden + +# Defines files and directories to exclude +# Remember that all the paths are relative at the mount points +# Format: "exclude FILE" +# Format: "exclude DIR/" +# Format: "exclude /PATH/FILE" +# Format: "exclude /PATH/DIR/" +exclude *.unrecoverable +exclude /tmp/ +exclude /lost+found/ +exclude *.!sync +exclude .AppleDouble +exclude ._AppleDouble +exclude .DS_Store +exclude ._.DS_Store +exclude .Thumbs.db +exclude .fseventsd +exclude .Spotlight-V100 +exclude .TemporaryItems +exclude .Trashes +exclude .AppleDB +#+end_src + +*** =snapraid-runner.conf= +#+begin_src conf :tangle /ssh:thomas@grenoble:~/docker/config/snapraid/snapraid-runner.conf +[snapraid] +; path to the snapraid executable (e.g. /bin/snapraid) +executable = /usr/bin/snapraid +; path to the snapraid config to be used +config = /config/snapraid.conf +; abort operation if there are more deletes than this, set to -1 to disable +deletethreshold = -1 +; if you want touch to be ran each time +touch = false + +[logging] +; logfile to write to, leave empty to disable +file = /config/snapraid.log +; maximum logfile size in KiB, leave empty for infinite +maxsize = 5000 + +; [email] +; ; when to send an email, comma-separated list of [success, error] +; sendon = success,error +; ; set to false to get full programm output via email +; short = true +; subject = [SnapRAID] Status Report: +; from = +; to = +; ; maximum email size in KiB +; maxsize = 500 +; +; [smtp] +; host = +; ; leave empty for default port +; port = +; ; set to "true" to activate +; ssl = false +; tls = false +; user = +; password = + +[scrub] +; set to true to run scrub after sync +enabled = false +percentage = 12 +older-than = 10 +#+end_src + + ** Portainer #+begin_src yaml portainer: @@ -400,32 +696,30 @@ services: - "traefik.http.services.portainer-svc.loadbalancer.server.port=9000" #+end_src -** Jellyfin +** Wireguard #+begin_src yaml - jellyfin: - container_name: jellyfin - image: linuxserver/jellyfin + wireguard: + container_name: wireguard + image: linuxserver/wireguard restart: unless-stopped networks: - t2_proxy - volumes: - - $CONFIGDIR/jellyfin:/config - - /srv/storage/TVShows:/data/tvshows - - /srv/storage/LiveMusic:/data/livemusic - - /srv/storage/Animes:/data/animes - - /srv/storage/Movies:/data/movies - - /srv/storage/Music:/data/music + cap_add: + - NET_ADMIN + - SYS_MODULE environment: - PUID=$PUID - PGID=$PGID - TZ=$TZ - labels: - - "traefik.enable=true" - - "traefik.http.routers.jellyfin-rtr.entrypoints=https" - - "traefik.http.routers.jellyfin-rtr.rule=Host(`jellyfin.$DOMAINNAME`)" - - "traefik.http.routers.jellyfin-rtr.tls=true" - - "traefik.http.routers.jellyfin-rtr.service=jellyfin-svc" - - "traefik.http.services.jellyfin-svc.loadbalancer.server.port=8096" + - SERVERURL=wireguard.tdehaeze.xyz + - SERVERPORT=51820 + - PEERS=3 + - PEERDNS=auto + volumes: + - $CONFIGDIR/wireguard:/config + - /lib/modules:/lib/modules + ports: + - 51820:51820/udp #+end_src ** Gitea @@ -475,32 +769,6 @@ services: - $CONFIGDIR/mariadb:/var/lib/mysql #+end_src -** Transfer.sh -#+begin_src yaml - transfer: - container_name: transfer - image: dutchcoders/transfer.sh - restart: unless-stopped - networks: - - t2_proxy - environment: - - PUID=$PUID - - PGID=$PGID - - TZ=$TZ - - UMASK_SET=022 - - BASEDIR=/tmp/ - - PROVIDER=local - volumes: - - /srv/storage/Uploads:/tmp/ - labels: - - "traefik.enable=true" - - "traefik.http.routers.transfer-rtr.entrypoints=https" - - "traefik.http.routers.transfer-rtr.rule=Host(`file.$DOMAINNAME`)" - - "traefik.http.routers.transfer-rtr.tls=true" - - "traefik.http.routers.transfer-rtr.service=transfer-svc" - - "traefik.http.services.transfer-svc.loadbalancer.server.port=8080" -#+end_src - ** Caddy #+begin_src yaml caddy: @@ -527,6 +795,40 @@ services: - "traefik.http.services.caddy-svc.loadbalancer.server.port=2015" #+end_src +*** =Caddyfile= +#+begin_src conf :tangle /ssh:thomas@grenoble:~/docker/config/caddy/Caddyfile +0.0.0.0:2015 { + root /srv/www/ + + git { + repo https://git.tdehaeze.xyz/tdehaeze/research-home-page + path /srv/www/ + interval -1 + hook /research-home-page/webhook QHZgAKjD8q2v54Ru + then git submodule update --init --recursive --merge + } +} +#+end_src + +** Hugo +#+begin_src yaml + hugo: + container_name: hugo + image: muninn/hugo-caddy + restart: unless-stopped + networks: + - t2_proxy + environment: + - REPO=git.tdehaeze.xyz/tdehaeze/digital-brain + labels: + - "traefik.enable=true" + - "traefik.http.routers.hugo-rtr.entrypoints=https" + - "traefik.http.routers.hugo-rtr.rule=Host(`brain.$DOMAINNAME`)" + - "traefik.http.routers.hugo-rtr.tls=true" + - "traefik.http.routers.hugo-rtr.service=hugo-svc" + - "traefik.http.services.hugo-svc.loadbalancer.server.port=2015" +#+end_src + ** Syncthing #+begin_src yaml syncthing: @@ -561,24 +863,6 @@ services: - "traefik.http.services.syncthing-svc.loadbalancer.server.port=8384" #+end_src -** Aria2 -#+begin_src yaml - aria2: - container_name: aria2 - image: p3terx/aria2-pro - restart: unless-stopped - networks: - - t2_proxy - environment: - - PUID=$PUID - - PGID=$PGID - volumes: - - $CONFIGDIR/aria2:/config - - /srv/storage/Downloads:/downloads - ports: - - 6800:6800 -#+end_src - ** Miniflux #+begin_src yaml miniflux: @@ -619,51 +903,6 @@ services: - $CONFIGDIR/miniflux_db:/var/lib/postgresql/data #+end_src -** Wireguard -#+begin_src yaml - wireguard: - container_name: wireguard - image: linuxserver/wireguard - restart: unless-stopped - networks: - - t2_proxy - cap_add: - - NET_ADMIN - - SYS_MODULE - environment: - - PUID=$PUID - - PGID=$PGID - - TZ=$TZ - - SERVERURL=wireguard.tdehaeze.xyz - - SERVERPORT=51820 - - PEERS=3 - - PEERDNS=auto - volumes: - - $CONFIGDIR/wireguard:/config - - /lib/modules:/lib/modules - ports: - - 51820:51820/udp -#+end_src - -** Snapraid -#+begin_src yaml - snapraid: - container_name: snapraid - image: xagaba/snapraid - restart: unless-stopped - privileged: true - volumes: - - /mnt:/mnt - - $CONFIGDIR/snapraid:/config - - type: "bind" - source: /dev/disk - target: /dev/disk - environment: - - PUID=$PUID - - PGID=$PGID - - TZ=$TZ -#+end_src - ** Home Assistant #+begin_src yaml homeassistant: @@ -701,6 +940,291 @@ services: #- "traefik.http.services.homeassistant-svc.loadbalancer.server.port=8123" #+end_src +** Jellyfin +#+begin_src yaml + jellyfin: + container_name: jellyfin + image: linuxserver/jellyfin + restart: unless-stopped + networks: + - t2_proxy + volumes: + - $CONFIGDIR/jellyfin:/config + - /srv/storage/TVShows:/data/tvshows + - /srv/storage/LiveMusic:/data/livemusic + - /srv/storage/Animes:/data/animes + - /srv/storage/Movies:/data/movies + - /srv/storage/Music:/data/music + environment: + - PUID=$PUID + - PGID=$PGID + - TZ=$TZ + labels: + - "traefik.enable=true" + - "traefik.http.routers.jellyfin-rtr.entrypoints=https" + - "traefik.http.routers.jellyfin-rtr.rule=Host(`jellyfin.$DOMAINNAME`)" + - "traefik.http.routers.jellyfin-rtr.tls=true" + - "traefik.http.routers.jellyfin-rtr.service=jellyfin-svc" + - "traefik.http.services.jellyfin-svc.loadbalancer.server.port=8096" +#+end_src + +** Filebrowser +#+begin_src yaml + filebrowser: + container_name: filebrowser + image: filebrowser/filebrowser + restart: unless-stopped + networks: + - t2_proxy + volumes: + - $CONFIGDIR/filebrowser/database.db:/database.db + - $CONFIGDIR/filebrowser/.filebrowser.json:/.filebrowser.json + - /srv/storage:/srv/storage + user: "${PUID}:${PGID}" + environment: + - PUID=$PUID + - PGID=$PGID + - TZ=$TZ + labels: + - "traefik.enable=true" + - "traefik.http.routers.filebrowser-rtr.entrypoints=https" + - "traefik.http.routers.filebrowser-rtr.rule=Host(`cloud.$DOMAINNAME`)" + - "traefik.http.routers.filebrowser-rtr.tls=true" + - "traefik.http.routers.filebrowser-rtr.service=filebrowser-svc" + - "traefik.http.services.filebrowser-svc.loadbalancer.server.port=80" +#+end_src + +*** =.filebrowser.json= + +#+begin_src json :tangle /ssh:thomas@grenoble:~/docker/config/filebrowser/.filebrowser.json +{ + "port": 80, + "baseURL": "", + "address": "", + "log": "stdout", + "database": "/database.db", + "root": "/srv/storage" +} +#+end_src + +** Scrutiny +#+begin_src yaml + scrutiny: + container_name: scrutiny + image: linuxserver/scrutiny + restart: unless-stopped + networks: + - backend + cap_add: + - SYS_RAWIO + - SYS_ADMIN + environment: + - PUID=$PUID + - PGID=$PGID + - SCRUTINY_API_ENDPOINT=http://localhost:8080 + - TZ=$TZ + - SCRUTINY_WEB=true + - SCRUTINY_COLLECTOR=true + volumes: + - $CONFIGDIR/scrutiny:/config + - /run/udev:/run/udev:ro + devices: + - /dev/sda:/dev/sda + - /dev/sdb:/dev/sdb + - /dev/sdc:/dev/sdc + - /dev/sdd:/dev/sdd + - /dev/nvme0n1:/dev/nvme0n1 + ports: + - 8089:8080 +#+end_src + +** Guacamole +#+begin_src yaml + guacamole: + image: oznu/guacamole + container_name: guacamole + restart: unless-stopped + networks: + - t2_proxy + - backend + environment: + - PUID=$PUID + - PGID=$PGID + - TZ=$TZ + volumes: + - $CONFIGDIR/guacamole:/config + labels: + - "traefik.enable=true" + - "traefik.http.routers.guacamole-rtr.entrypoints=https" + - "traefik.http.routers.guacamole-rtr.rule=Host(`guacamole.$DOMAINNAME`)" + - "traefik.http.routers.guacamole-rtr.tls=true" + - "traefik.http.routers.guacamole-rtr.service=guacamole-svc" + - "traefik.http.services.guacamole-svc.loadbalancer.server.port=8080" +#+end_src + +** Transmission +#+begin_src yaml + transmission-openvpn: + container_name: transmission + image: haugene/transmission-openvpn:2.13 + restart: unless-stopped + networks: + - t2_proxy + - backend + environment: + - PUID=$PUID + - PGID=$PGID + - CREATE_TUN_DEVICE=true + - ENABLE_UFW=true + - WEBPROXY_ENABLED=false + - TRANSMISSION_WEB_UI=combustion + - OPENVPN_PROVIDER=NORDVPN + - OPENVPN_USERNAME=$NORDVPN_NAME + - OPENVPN_PASSWORD=$NORDVPN_PASS + - NORDVPN_COUNTRY=FR + - NORDVPN_CATEGORY=P2P + - NORDVPN_PROTOCOL=tcp + - LOCAL_NETWORK=192.168.0.0/16 + volumes: + - /srv/storage/Downloads:/data + - /etc/localtime:/etc/localtime:ro + cap_add: + - NET_ADMIN + ports: + - 9091:9091 + - 51413:51413 + - 51413:51413/udp + labels: + - "traefik.enable=true" + - "traefik.http.routers.transmission-rtr.entrypoints=https" + - "traefik.http.routers.transmission-rtr.rule=Host(`torrent.$DOMAINNAME`)" + - "traefik.http.routers.transmission-rtr.tls=true" + - "traefik.http.routers.transmission-rtr.service=transmission-svc" + - "traefik.http.routers.transmission-rtr.middlewares=traefik-auth" + - "traefik.http.services.transmission-svc.loadbalancer.server.port=9091" +#+end_src + +** Aria2 - Daemon +#+begin_src yaml + aria2: + container_name: aria2 + image: opengg/aria2 + restart: unless-stopped + networks: + - t2_proxy + environment: + - PUID=$PUID + - PGID=$PGID + user: "${PUID}:${PGID}" + volumes: + - $CONFIGDIR/aria2:/config + - /srv/storage/Downloads:/downloads + ports: + - 6800:6800 +#+end_src + +*** =aria2.conf= +#+begin_src conf :tangle /ssh:thomas@grenoble:~/docker/config/aria2/aria2.conf +save-session=/config/aria2.session +input-file=/config/aria2.session +save-session-interval=60 + +dir=/downloads + +file-allocation=prealloc +disk-cache=128M + +enable-rpc=true +rpc-listen-port=6800 +rpc-allow-origin-all=true +rpc-listen-all=true + +rpc-secret=<> + +auto-file-renaming=false + +max-connection-per-server=16 +min-split-size=1M +split=16 +#+end_src + +** Deemix +#+begin_src yaml + deemix: + image: registry.gitlab.com/bockiii/deemix-docker + container_name: deemix + restart: unless-stopped + networks: + - t2_proxy + volumes: + - /srv/storage/Downloads:/downloads + - $CONFIGDIR/deemix:/config + environment: + - TZ=$TZ + - PUID=$PUID + - PGID=$PGID + - ARL=$DEEMIX_ARL + labels: + - "traefik.enable=true" + - "traefik.http.routers.deemix-rtr.entrypoints=https" + - "traefik.http.routers.deemix-rtr.rule=Host(`deemix.$DOMAINNAME`)" + - "traefik.http.routers.deemix-rtr.tls=true" + - "traefik.http.routers.deemix-rtr.service=deemix-svc" + - "traefik.http.routers.deemix-rtr.middlewares=traefik-auth" + - "traefik.http.services.deemix-svc.loadbalancer.server.port=6595" +#+end_src + +* Docker-Compose OLD :noexport: +** Transfer.sh +#+begin_src yaml + transfer: + container_name: transfer + image: dutchcoders/transfer.sh + restart: unless-stopped + networks: + - t2_proxy + environment: + - PUID=$PUID + - PGID=$PGID + - TZ=$TZ + - UMASK_SET=022 + - BASEDIR=/tmp/ + - PROVIDER=local + volumes: + - /srv/storage/Uploads:/tmp/ + labels: + - "traefik.enable=true" + - "traefik.http.routers.transfer-rtr.entrypoints=https" + - "traefik.http.routers.transfer-rtr.rule=Host(`file.$DOMAINNAME`)" + - "traefik.http.routers.transfer-rtr.tls=true" + - "traefik.http.routers.transfer-rtr.service=transfer-svc" + - "traefik.http.services.transfer-svc.loadbalancer.server.port=8080" +#+end_src + +** Ombi +#+begin_src yaml + ombi: + container_name: ombi + image: linuxserver/ombi + restart: unless-stopped + networks: + - t2_proxy + environment: + - PUID=$PUID + - PGID=$PGID + - TZ=$TZ + # - BASE_URL=/ombi #optional + volumes: + - $CONFIGDIR/ombi:/config + labels: + - "traefik.enable=true" + - "traefik.http.routers.ombi-rtr.entrypoints=https" + - "traefik.http.routers.ombi-rtr.rule=Host(`ombi.$DOMAINNAME`)" + - "traefik.http.routers.ombi-rtr.tls=true" + - "traefik.http.routers.ombi-rtr.service=ombi-svc" + - "traefik.http.services.ombi-svc.loadbalancer.server.port=3579" +#+end_src + ** Jackett #+begin_src yaml jackett: @@ -764,72 +1288,6 @@ services: - 8989:8989 #+end_src -** Ombi -#+begin_src yaml - ombi: - container_name: ombi - image: linuxserver/ombi - restart: unless-stopped - networks: - - t2_proxy - environment: - - PUID=$PUID - - PGID=$PGID - - TZ=$TZ - # - BASE_URL=/ombi #optional - volumes: - - $CONFIGDIR/ombi:/config - labels: - - "traefik.enable=true" - - "traefik.http.routers.ombi-rtr.entrypoints=https" - - "traefik.http.routers.ombi-rtr.rule=Host(`ombi.$DOMAINNAME`)" - - "traefik.http.routers.ombi-rtr.tls=true" - - "traefik.http.routers.ombi-rtr.service=ombi-svc" - - "traefik.http.services.ombi-svc.loadbalancer.server.port=3579" -#+end_src - -** Transmission -#+begin_src yaml - transmission-openvpn: - container_name: transmission - image: haugene/transmission-openvpn:2.13 - restart: unless-stopped - networks: - - t2_proxy - - backend - environment: - - PUID=$PUID - - PGID=$PGID - - CREATE_TUN_DEVICE=true - - ENABLE_UFW=true - - WEBPROXY_ENABLED=false - - TRANSMISSION_WEB_UI=combustion - - OPENVPN_PROVIDER=NORDVPN - - OPENVPN_USERNAME=$NORDVPN_NAME - - OPENVPN_PASSWORD=$NORDVPN_PASS - - NORDVPN_COUNTRY=FR - - NORDVPN_CATEGORY=P2P - - NORDVPN_PROTOCOL=tcp - - LOCAL_NETWORK=192.168.0.0/16 - volumes: - - /srv/storage/Downloads:/data - - /etc/localtime:/etc/localtime:ro - cap_add: - - NET_ADMIN - ports: - - 9091:9091 - - 51413:51413 - - 51413:51413/udp - labels: - - "traefik.enable=true" - - "traefik.http.routers.transmission-rtr.entrypoints=https" - - "traefik.http.routers.transmission-rtr.rule=Host(`torrent.$DOMAINNAME`)" - - "traefik.http.routers.transmission-rtr.tls=true" - - "traefik.http.routers.transmission-rtr.service=transmission-svc" - - "traefik.http.routers.transmission-rtr.middlewares=traefik-auth" - - "traefik.http.services.transmission-svc.loadbalancer.server.port=9091" -#+end_src - ** Bazarr #+begin_src yaml bazarr: @@ -851,23 +1309,46 @@ services: - 6767:6767 #+end_src -** Hugo +** Gotify #+begin_src yaml - hugo: - container_name: hugo - image: muninn/hugo-caddy + gotify: + container_name: gotify + image: gotify/server restart: unless-stopped networks: - t2_proxy environment: - - REPO=git.tdehaeze.xyz/tdehaeze/digital-brain + - PUID=$PUID + - PGID=$PGID + - TZ=$TZ + - GOTIFY_DEFAULTUSER_NAME=$GOTIFY_DEFAULTUSER_NAME + - GOTIFY_DEFAULTUSER_PASS=$GOTIFY_DEFAULTUSER_PASS + volumes: + - $CONFIGDIR/gotify:/app/data labels: - "traefik.enable=true" - - "traefik.http.routers.hugo-rtr.entrypoints=https" - - "traefik.http.routers.hugo-rtr.rule=Host(`brain.$DOMAINNAME`)" - - "traefik.http.routers.hugo-rtr.tls=true" - - "traefik.http.routers.hugo-rtr.service=hugo-svc" - - "traefik.http.services.hugo-svc.loadbalancer.server.port=2015" + - "traefik.http.routers.gotify-rtr.entrypoints=https" + - "traefik.http.routers.gotify-rtr.rule=Host(`notify.$DOMAINNAME`)" + - "traefik.http.routers.gotify-rtr.tls=true" + - "traefik.http.routers.gotify-rtr.service=gotify-svc" + - "traefik.http.services.gotify-svc.loadbalancer.server.port=80" +#+end_src + +** Mail-CLI +#+begin_src yaml + mail-cli: + image: tdehaeze/docker-mail-cli + container_name: mail-cli + restart: unless-stopped + volumes: + - $CONFIGDIR/mail-cli:/config + - /srv/storage/mail:/mail + - /srv/storage/Downloads:/data + environment: + - TZ=$TZ + - PUID=$PUID + - PGID=$PGID + tty: true #+end_src ** Bitwarden @@ -893,52 +1374,6 @@ services: - "traefik.http.services.bitwarden-svc.loadbalancer.server.port=80" #+end_src -** Homer -#+begin_src yaml - homer: - container_name: homer - image: b4bz/homer - restart: unless-stopped - networks: - - t2_proxy - environment: - - UID=$PUID - - GID=$PGID - - TZ=$TZ - volumes: - - $CONFIGDIR/homer/assets/:/www/assets - labels: - - "traefik.enable=true" - - "traefik.http.routers.homer-rtr.entrypoints=https" - - "traefik.http.routers.homer-rtr.rule=Host(`homer.$DOMAINNAME`)" - - "traefik.http.routers.homer-rtr.tls=true" - - "traefik.http.routers.homer-rtr.service=homer-svc" - - "traefik.http.services.homer-svc.loadbalancer.server.port=8080" -#+end_src - -** Restic -#+begin_src yaml - restic: - container_name: restic - image: mazzolino/restic - restart: "no" - networks: - - t2_proxy - environment: - - RUN_ON_STARTUP=true - - BACKUP_CRON=0 30 0 * * * - - RESTIC_REPOSITORY=rclone:mega:mega - - RESTIC_PASSWORD="$RESTIC_PASSWORD" - - RESTIC_BACKUP_SOURCES=/data - - RESTIC_FORGET_ARGS=--keep-daily 7 --keep-weekly 4 --keep-monthly 12 - - UID=$PUID - - GID=$PGID - - TZ=$TZ - volumes: - - $CONFIGDIR/restic:/root/.config/rclone - - /srv/storage/Cloud/thesis:/data/thesis -#+end_src - ** CloudCMD #+begin_src yaml cloudcmd: @@ -968,130 +1403,6 @@ services: - "traefik.http.services.cloudcmd-svc.loadbalancer.server.port=8000" #+end_src -** Gotify -#+begin_src yaml - gotify: - container_name: gotify - image: gotify/server - restart: unless-stopped - networks: - - t2_proxy - environment: - - PUID=$PUID - - PGID=$PGID - - TZ=$TZ - - GOTIFY_DEFAULTUSER_NAME=$GOTIFY_DEFAULTUSER_NAME - - GOTIFY_DEFAULTUSER_PASS=$GOTIFY_DEFAULTUSER_PASS - volumes: - - $CONFIGDIR/gotify:/app/data - labels: - - "traefik.enable=true" - - "traefik.http.routers.gotify-rtr.entrypoints=https" - - "traefik.http.routers.gotify-rtr.rule=Host(`notify.$DOMAINNAME`)" - - "traefik.http.routers.gotify-rtr.tls=true" - - "traefik.http.routers.gotify-rtr.service=gotify-svc" - - "traefik.http.services.gotify-svc.loadbalancer.server.port=80" -#+end_src - -** Scrutiny -#+begin_src yaml - scrutiny: - container_name: scrutiny - image: linuxserver/scrutiny - restart: unless-stopped - networks: - - backend - cap_add: - - SYS_RAWIO - - SYS_ADMIN - environment: - - PUID=$PUID - - PGID=$PGID - - SCRUTINY_API_ENDPOINT=http://localhost:8080 - - TZ=$TZ - - SCRUTINY_WEB=true - - SCRUTINY_COLLECTOR=true - volumes: - - $CONFIGDIR/scrutiny:/config - - /run/udev:/run/udev:ro - devices: - - /dev/sda:/dev/sda - - /dev/sdb:/dev/sdb - - /dev/sdc:/dev/sdc - - /dev/sdd:/dev/sdd - - /dev/nvme0n1:/dev/nvme0n1 - ports: - - 8089:8080 -#+end_src - -** Guacamole -#+begin_src yaml - guacamole: - image: oznu/guacamole - container_name: guacamole - restart: unless-stopped - networks: - - t2_proxy - - backend - environment: - - PUID=$PUID - - PGID=$PGID - - TZ=$TZ - volumes: - - $CONFIGDIR/guacamole:/config - labels: - - "traefik.enable=true" - - "traefik.http.routers.guacamole-rtr.entrypoints=https" - - "traefik.http.routers.guacamole-rtr.rule=Host(`guacamole.$DOMAINNAME`)" - - "traefik.http.routers.guacamole-rtr.tls=true" - - "traefik.http.routers.guacamole-rtr.service=guacamole-svc" - - "traefik.http.services.guacamole-svc.loadbalancer.server.port=8080" -#+end_src - -** Mail-CLI -#+begin_src yaml - mail-cli: - image: tdehaeze/docker-mail-cli - container_name: mail-cli - restart: unless-stopped - volumes: - - $CONFIGDIR/mail-cli:/config - - /srv/storage/mail:/mail - - /srv/storage/Downloads:/data - environment: - - TZ=$TZ - - PUID=$PUID - - PGID=$PGID - tty: true -#+end_src - -** Deemix -#+begin_src yaml - deemix: - image: registry.gitlab.com/bockiii/deemix-docker - container_name: deemix - restart: unless-stopped - networks: - - t2_proxy - volumes: - - /srv/storage/Downloads:/downloads - - $CONFIGDIR/deemix:/config - environment: - - TZ=$TZ - - PUID=$PUID - - PGID=$PGID - - ARL=$DEEMIX_ARL - labels: - - "traefik.enable=true" - - "traefik.http.routers.deemix-rtr.entrypoints=https" - - "traefik.http.routers.deemix-rtr.rule=Host(`deemix.$DOMAINNAME`)" - - "traefik.http.routers.deemix-rtr.tls=true" - - "traefik.http.routers.deemix-rtr.service=deemix-svc" - - "traefik.http.routers.deemix-rtr.middlewares=traefik-auth" - - "traefik.http.services.deemix-svc.loadbalancer.server.port=6595" -#+end_src - -* Docker-Compose OLD :noexport: ** Wallabag #+begin_src yaml wallabag: @@ -1247,31 +1558,6 @@ services: - /var/run/docker.sock:/var/run/docker.sock:ro #+end_src -** Filebrowser -#+begin_src yaml - filebrowser: - container_name: filebrowser - image: filebrowser/filebrowser - restart: unless-stopped - networks: - - t2_proxy - volumes: - - $CONFIGDIR/filebrowser/database.db:/filebrowser.db - - $CONFIGDIR/filebrowser/.filebrowser.json:/.filebrowser.json - - /srv/storage/Cloud:/srv - environment: - - PUID=$PUID - - PGID=$PGID - - TZ=$TZ - labels: - - "traefik.enable=true" - - "traefik.http.routers.filebrowser-rtr.entrypoints=https" - - "traefik.http.routers.filebrowser-rtr.rule=Host(`cloud.$DOMAINNAME`)" - - "traefik.http.routers.filebrowser-rtr.tls=true" - - "traefik.http.routers.filebrowser-rtr.service=filebrowser-svc" - - "traefik.http.services.filebrowser-svc.loadbalancer.server.port=80" -#+end_src - ** Gossa #+begin_src yaml gossa: @@ -1347,7 +1633,7 @@ services: - "traefik.http.services.pyload-svc.loadbalancer.server.port=8000" #+end_src -** Aria2 +** Aria2 - Webui #+begin_src yaml aria2: container_name: aria2 @@ -1377,6 +1663,28 @@ services: - "traefik.http.services.aria2-svc.loadbalancer.server.port=4040" #+end_src +** Aria2 - Daemon +#+begin_src yaml + aria2: + container_name: aria2 + image: p3terx/aria2-pro + restart: unless-stopped + networks: + - t2_proxy + environment: + - PUID=$PUID + - PGID=$PGID + logging: + driver: json-file + options: + max-size: 1m + volumes: + - $CONFIGDIR/aria2:/config + - /srv/storage/Downloads:/downloads + ports: + - 6800:6800 +#+end_src + ** Droppy #+begin_src yaml droppy: @@ -1637,254 +1945,3 @@ Type =crontab -e= and add this line: */5 * * * * /home/thomas/cron/caddy_update.sh >> /home/thomas/cron/caddy_update.log 2>&1 #+end_src -* Config -** Caddy -#+begin_src conf :tangle /ssh:thomas@grenoble:~/docker/config/caddy/Caddyfile -0.0.0.0:2015 { - root /srv/www/ - - git { - repo https://git.tdehaeze.xyz/tdehaeze/research-home-page - path /srv/www/ - interval -1 - hook /research-home-page/webhook QHZgAKjD8q2v54Ru - then git submodule update --init --recursive --merge - } -} -#+end_src - -** Homer -#+begin_src yaml :tangle /ssh:thomas@grenoble:~/docker/config/homer/assets ---- -title: "Homepage" -subtitle: "Homer" -logo: "assets/homer.png" -header: false -footer: false - -columns: "auto" -connectivityCheck: false - -theme: default - -links: [] - -services: - - name: "Websites" - icon: "fas fa-desktop" - items: - - name: "Wiki" - logo: "/assets/tools/brain.png" - subtitle: "Digital Brain" - url: "https://brain.tdehaeze.xyz" - - name: "Research" - logo: "/assets/tools/orgmode.png" - subtitle: "Research Pages" - url: "https://research.tdehaeze.xyz" - - name: "Utilities" - icon: "fas fa-rss" - items: - - name: "Miniflux" - logo: "/assets/tools/miniflux.png" - subtitle: "RSS Feeds" - url: "https://rss.tdehaeze.xyz" - - name: "Bitwarden" - logo: "/assets/tools/bitwarden.png" - subtitle: "Password Manager" - url: "https://bw.tdehaeze.xyz" - - name: "Home Assistant" - logo: "/assets/tools/homeassistant.png" - subtitle: "Home Assistant" - url: "http://home.tdehaeze.xyz:8123" - - name: "Guacamole" - logo: "/assets/tools/guacamole.png" - subtitle: "SSH Access" - url: "https://guacamole.tdehaeze.xyz/" - - name: "Cloud" - icon: "fas fa-cloud" - items: - - name: "Cloud" - logo: "/assets/tools/cloud.png" - subtitle: "Simple Personnal Could" - url: "https://cloud.tdehaeze.xyz" - - name: "Syncthing" - logo: "/assets/tools/syncthing.png" - subtitle: "P2P Sync" - url: "https://syncthing.tdehaeze.xyz" - - name: "Gitea" - logo: "/assets/tools/gitea.png" - subtitle: "Git Server" - url: "https://git.tdehaeze.xyz" - - name: "Download" - icon: "fas fa-download" - items: - - name: "Transmission" - logo: "/assets/tools/transmission.png" - subtitle: "Torrents" - url: "https://torrent.tdehaeze.xyz/transmission/web/" - - name: "transfer" - logo: "/assets/tools/transfer.png" - subtitle: "Transfer.sh" - url: "https://file.tdehaeze.xyz" - - name: "deemix" - subtitle: "Download Music" - logo: "/assets/tools/deezer.png" - url: "https://deemix.tdehaeze.xyz" - # - name: "Aria2" - # logo: "/assets/tools/aria2.png" - # subtitle: "Direct Downloads" - # url: "https://dl.tdehaeze.xyz" - - name: "Media" - icon: "fas fa-film" - items: - - name: "Jellyfin" - logo: "/assets/tools/jellyfin.png" - subtitle: "Media Library" - url: "https://jellyfin.tdehaeze.xyz" - - name: "Config" - icon: "fas fa-cog" - items: - - name: "Portainer" - logo: "/assets/tools/portainer.png" - subtitle: "Manger Docker" - url: "https://portainer.tdehaeze.xyz" - - name: "Traefik" - logo: "/assets/tools/traefik.png" - subtitle: "Reverse Proxy" - url: "https://traefik.tdehaeze.xyz" - - name: "Local" - icon: "fas fa-home" - items: - - name: "Jackett" - logo: "/assets/tools/jackett.png" - subtitle: "Download API" - url: "http://192.168.1.150:9117/" - - name: "Radarr" - logo: "/assets/tools/radarr.png" - subtitle: "Movie Manager" - url: "http://192.168.1.150:7878/" - - name: "Sonarr" - logo: "/assets/tools/sonarr.png" - subtitle: "TV Shows Manager" - url: "http://192.168.1.150:8989/" - - name: "Ombi" - logo: "/assets/tools/ombi.png" - subtitle: "Request Content" - url: "https://ombi.tdehaeze.xyz/" - - name: "Bazarr" - logo: "/assets/tools/bazarr.png" - subtitle: "Subtitles Manager" - url: "http://192.168.1.150:6767/" - - name: "Scrutiny" - logo: "/assets/tools/scrutiny.png" - subtitle: "S.M.A.R.T" - url: "http://192.168.1.150:8089/web/dashboard" - - name: "OctoPrint" - logo: "/assets/tools/octoprint.png" - subtitle: "3D-Printing" - url: "http://192.168.1.56/" -#+end_src - -** Restic -#+begin_src conf :tangle /ssh:thomas@grenoble:~/docker/config/restic/rclone.conf -[mega] -type = mega -user = dehaeze.thomas@gmail.com -pass = <> -#+end_src - -** Snapraid -*** =snapraid.conf= -#+begin_src conf :tangle /ssh:thomas@grenoble:~/docker/config/snapraid/snapraid.conf -# Defines the file to use as parity storage -# It must NOT be in a data disk -# Format: "parity FILE_PATH" -parity /mnt/parity/snapraid.parity - -# Defines the files to use as content list -# You can use multiple specification to store more copies -# You must have least one copy for each parity file plus one. Some more don't -# hurt -# They can be in the disks used for data, parity or boot, -# but each file must be in a different disk -# Format: "content FILE_PATH" -content /var/snapraid.content -content /mnt/disk0/.snapraid.content -content /mnt/disk1/.snapraid.content - -# Defines the data disks to use -# The order is relevant for parity, do not change it -# Format: "disk DISK_NAME DISK_MOUNT_POINT" -disk d0 /mnt/disk0 -disk d1 /mnt/disk1 - -# Excludes hidden files and directories (uncomment to enable). -#nohidden - -# Defines files and directories to exclude -# Remember that all the paths are relative at the mount points -# Format: "exclude FILE" -# Format: "exclude DIR/" -# Format: "exclude /PATH/FILE" -# Format: "exclude /PATH/DIR/" -exclude *.unrecoverable -exclude /tmp/ -exclude /lost+found/ -exclude *.!sync -exclude .AppleDouble -exclude ._AppleDouble -exclude .DS_Store -exclude ._.DS_Store -exclude .Thumbs.db -exclude .fseventsd -exclude .Spotlight-V100 -exclude .TemporaryItems -exclude .Trashes -exclude .AppleDB -#+end_src - -*** =snapraid-runner.conf= -#+begin_src conf :tangle /ssh:thomas@grenoble:~/docker/config/snapraid/snapraid-runner.conf -[snapraid] -; path to the snapraid executable (e.g. /bin/snapraid) -executable = /usr/bin/snapraid -; path to the snapraid config to be used -config = /config/snapraid.conf -; abort operation if there are more deletes than this, set to -1 to disable -deletethreshold = -1 -; if you want touch to be ran each time -touch = false - -[logging] -; logfile to write to, leave empty to disable -file = /config/snapraid.log -; maximum logfile size in KiB, leave empty for infinite -maxsize = 5000 - -; [email] -; ; when to send an email, comma-separated list of [success, error] -; sendon = success,error -; ; set to false to get full programm output via email -; short = true -; subject = [SnapRAID] Status Report: -; from = -; to = -; ; maximum email size in KiB -; maxsize = 500 -; -; [smtp] -; host = -; ; leave empty for default port -; port = -; ; set to "true" to activate -; ssl = false -; tls = false -; user = -; password = - -[scrub] -; set to true to run scrub after sync -enabled = false -percentage = 12 -older-than = 10 -#+end_src diff --git a/newsboat.org b/newsboat.org index 09dbbce..b624f87 100644 --- a/newsboat.org +++ b/newsboat.org @@ -12,105 +12,105 @@ https://newsboat.org/releases/2.12/docs/newsboat.html ** Reload configuration #+BEGIN_SRC conf - # All feeds will be automatically reloaded after a certain time has passed - auto-reload yes +# All feeds will be automatically reloaded after a certain time has passed +auto-reload yes - # The number of minutes between automatic reloads. - reload-time 120 +# The number of minutes between automatic reloads. +reload-time 120 - # The number of parallel reload threads that shall be started when all feeds are reloaded. - reload-threads 3 +# The number of parallel reload threads that shall be started when all feeds are reloaded. +reload-threads 3 - # If set to yes, then the first automatic reload will be suppressed if auto-reload is set to yes. - suppress-first-reload yes +# If set to yes, then the first automatic reload will be suppressed if auto-reload is set to yes. +suppress-first-reload yes #+END_SRC ** Basic configuration #+BEGIN_SRC conf - confirm-exit no +confirm-exit no - external-url-viewer "urlscan -dc -r 'linkhandler {}'" +external-url-viewer "urlscan -dc -r 'linkhandler {}'" - goto-first-unread no - goto-next-feed no +goto-first-unread no +goto-next-feed no - save-path "~/Documents/newsboat/saved" - download-path "~/Documents/newsboat/downloaded" +save-path "~/Documents/newsboat/saved" +download-path "~/Documents/newsboat/downloaded" - # If set to no, then the keymap hints on the bottom of screen will not be displayed. - show-keymap-hint no +# If set to no, then the keymap hints on the bottom of screen will not be displayed. +show-keymap-hint no - player "mpv" +player "mpv" #+END_SRC ** Queries #+begin_src conf - prepopulate-query-feeds yes +prepopulate-query-feeds yes #+end_src ** Filters #+begin_src conf :tangle no - define-filter "Unread Articles" "unread = \"yes\"" +define-filter "Unread Articles" "unread = \"yes\"" #+end_src ** Notifications #+BEGIN_SRC conf - notify-format "%n unread articles" - notify-program ~/.config/newsboat/scripts/newsboat-notify.sh - notify-always no +notify-format "%n unread articles" +notify-program ~/.config/newsboat/scripts/newsboat-notify.sh +notify-always no #+END_SRC *** Notification Script - :PROPERTIES: - :header-args: :tangle ~/.config/newsboat/scripts/newsboat-notify.sh - :header-args+: :comments both :mkdirp yes - :header-args+: :shebang "#!/usr/bin/env bash" - :END: +:PROPERTIES: +:header-args: :tangle ~/.config/newsboat/scripts/newsboat-notify.sh +:header-args+: :comments both :mkdirp yes +:header-args+: :shebang "#!/usr/bin/env bash" +:END: #+begin_src bash - dunstify --replace=38492 "Newsboat " "$1" +dunstify --replace=38492 "Newsboat " "$1" #+end_src ** Bindings #+BEGIN_SRC conf - bind-key j down - bind-key k up - bind-key j next articlelist - bind-key k prev articlelist - bind-key J next-feed articlelist - bind-key K prev-feed articlelist - bind-key G end - bind-key g home - bind-key ^D pagedown - bind-key ^U pageup +bind-key j down +bind-key k up +bind-key j next articlelist +bind-key k prev articlelist +bind-key J next-feed articlelist +bind-key K prev-feed articlelist +bind-key G end +bind-key g home +bind-key ^D pagedown +bind-key ^U pageup - bind-key q toggle-show-read-feeds - bind-key Q quit +bind-key q toggle-show-read-feeds +bind-key Q quit - bind-key l open - bind-key h quit +bind-key l open +bind-key h quit - bind-key a toggle-article-read +bind-key a toggle-article-read - bind-key n next-unread - bind-key N prev-unread +bind-key n next-unread +bind-key N prev-unread - bind-key D pb-download +bind-key D pb-download - bind-key U show-urls +bind-key U show-urls - bind-key t set-tag - bind-key T clear-tag +bind-key t set-tag +bind-key T clear-tag - bind-key r reload # Reload the currently selected feed - bind-key R reload-all # Reload all feeds +bind-key r reload # Reload the currently selected feed +bind-key R reload-all # Reload all feeds #+END_SRC ** Bookmarking #+begin_src conf - bookmark-autopilot no - bookmark-cmd "~/.config/newsboat/scripts/buku-add.sh" - bookmark-interactive no +bookmark-autopilot no +bookmark-cmd "~/.config/newsboat/scripts/buku-add.sh" +bookmark-interactive no #+end_src *** Buku Scripts @@ -121,59 +121,59 @@ https://newsboat.org/releases/2.12/docs/newsboat.html :END: #+begin_src bash - buku --add "$1" --title "$2" --comment "$3" && \ - dunstify "Buku" "Bookmark Added" && \ - exit 0 +buku --add "$1" --title "$2" --comment "$3" && \ + dunstify "Buku" "Bookmark Added" && \ + exit 0 #+end_src ** Macros - Starts with , key #+BEGIN_SRC conf - # Default Browser - browser linkhandler +# Default Browser +browser linkhandler - # Open in Browser - macro , open-in-browser +# Open in Browser +macro , open-in-browser - # Download Video with Youtube-DL - macro v set browser "cd ~/Documents/to-watch && ~/.local/bin/yt-video %u" ; open-in-browser ; set browser linkhandler +# Download Video with Youtube-DL +macro v set browser "cd ~/Documents/to-watch && ~/.local/bin/yt-video %u" ; open-in-browser ; set browser linkhandler - # Download Audio with Youtube-DL - macro a set browser "cd ~/Documents/to-watch && ~/.local/bin/yt-audio %u" ; open-in-browser ; set browser linkhandler +# Download Audio with Youtube-DL +macro a set browser "cd ~/Documents/to-watch && ~/.local/bin/yt-audio %u" ; open-in-browser ; set browser linkhandler - # Open Video with MPV - macro m set browser "setsid nohup mpv %u &> /dev/null &" ; open-in-browser ; set browser linkhandler +# Open Video with MPV +macro m set browser "setsid nohup mpv %u &> /dev/null &" ; open-in-browser ; set browser linkhandler - # Open With W3M - macro w set browser "w3m %u" ; open-in-browser ; set browser linkhandler +# Open With W3M +macro w set browser "w3m %u" ; open-in-browser ; set browser linkhandler - # Copy Address to clipboard - macro c set browser "xsel -b <<<" ; open-in-browser ; set browser linkhandler +# Copy Address to clipboard +macro c set browser "xsel -b <<<" ; open-in-browser ; set browser linkhandler - # Quit - macro q set browser "tmux detach" ; open-in-browser ; set browser linkhandler +# Quit +macro q set browser "tmux detach" ; open-in-browser ; set browser linkhandler #+END_SRC ** hide articles matching #+BEGIN_SRC conf :tangle no - ignore-article "*" "title =~ \"Sponsor\"" - ignore-article "*" "title =~ \"Advertisement\"" - ignore-mode "display" +ignore-article "*" "title =~ \"Sponsor\"" +ignore-article "*" "title =~ \"Advertisement\"" +ignore-mode "display" #+END_SRC ** Feedlist and Article Format #+BEGIN_SRC conf - feedlist-format "%4i %n %11u %t" - feedlist-title-format "N %V - Your feeds (%u unread, %t total)%?T? - tag `%T'&?" +feedlist-format "%4i %n %11u %t" +feedlist-title-format "N %V - Your feeds (%u unread, %t total)%?T? - tag `%T'&?" - articlelist-format "%3i %f %D %?T?|%-17T| ?%t" - articlelist-title-format "%N %V - Articles in feed '%T' (%u unread, %t total) - %U" +articlelist-format "%3i %f %D %?T?|%-17T| ?%t" +articlelist-title-format "%N %V - Articles in feed '%T' (%u unread, %t total) - %U" - itemview-title-format "Article '%T'" +itemview-title-format "Article '%T'" #+END_SRC ** Color Scheme #+BEGIN_SRC conf - include "~/.config/newsboat/colors" +include "~/.config/newsboat/colors" #+END_SRC * Colors @@ -183,18 +183,18 @@ https://newsboat.org/releases/2.12/docs/newsboat.html :END: #+BEGIN_SRC conf - color background default default - color listnormal default default - color listnormal_unread default default - color listfocus black yellow - color listfocus_unread black yellow - color info default black - color article default default +color background default default +color listnormal default default +color listnormal_unread default default +color listfocus black yellow +color listfocus_unread black yellow +color info default black +color article default default - # highlights - highlight article "^(Title):.*$" blue default - highlight article "https?://[^ ]+" red default - highlight article "\\[image\\ [0-9]+\\]" green default +# highlights +highlight article "^(Title):.*$" blue default +highlight article "https?://[^ ]+" red default +highlight article "\\[image\\ [0-9]+\\]" green default #+END_SRC * URLS @@ -205,301 +205,294 @@ https://newsboat.org/releases/2.12/docs/newsboat.html ** Queries #+begin_src conf :tangle no - "query:Unread:unread = \"yes\"" - "query:Unwatch - Youtube:unread = \"yes\" and tags # \"youtube\"" - "query:Unread - Linux:unread = \"yes\" and tags # \"linux\"" - "query:Unread - Emacs:unread = \"yes\" and tags # \"emacs\"" - "query:Unread - Sciences:unread = \"yes\" and tags # \"science\"" +"query:Unread:unread = \"yes\"" +"query:Unwatch - Youtube:unread = \"yes\" and tags # \"youtube\"" +"query:Unread - Linux:unread = \"yes\" and tags # \"linux\"" +"query:Unread - Emacs:unread = \"yes\" and tags # \"emacs\"" +"query:Unread - Sciences:unread = \"yes\" and tags # \"science\"" #+end_src ** Newsfeeds *** Matlab and Control #+begin_src conf - https://undocumentedmatlab.com/feed/ "~RSS undocumentedmatlab" matlab - http://blogs.mathworks.com/seth/feed/ "~RSS Guy on Simulink" matlab control - http://blogs.mathworks.com/loren/?feed=rss2 "~RSS Loren on the Art of MATLAB" matlab - http://blogs.mathworks.com/pick/feed/ "~RSS File Exchange Pick of the Week" matlab - https://enriquedelsol.com/feed/ "~RSS Enrique del Sol" control - http://brettbeauregard.com/blog/feed/ "~RSS Project Blog" control - https://mburkeonmbd.com/feed/ "~RSS Model-Based Design" control matlab - https://medium.com/feed/@mithi "~RSS Medium - Mithi" control +https://undocumentedmatlab.com/feed/ "~RSS undocumentedmatlab" matlab +http://blogs.mathworks.com/seth/feed/ "~RSS Guy on Simulink" matlab control +http://blogs.mathworks.com/loren/?feed=rss2 "~RSS Loren on the Art of MATLAB" matlab +http://blogs.mathworks.com/pick/feed/ "~RSS File Exchange Pick of the Week" matlab +https://enriquedelsol.com/feed/ "~RSS Enrique del Sol" control +http://brettbeauregard.com/blog/feed/ "~RSS Project Blog" control +https://mburkeonmbd.com/feed/ "~RSS Model-Based Design" control matlab +https://medium.com/feed/@mithi "~RSS Medium - Mithi" control #+end_src *** Audio and Electronics #+begin_src conf - http://jipihorn.wordpress.com/feed/ "~RSS Jipihorn's Blog" electronics audio - https://quantasylum.com/blogs/news.atom "~RSS QuantAsylum" audio - https://www.scrample.xyz/index.xml "~RSS Scrample" electronics +http://jipihorn.wordpress.com/feed/ "~RSS Jipihorn's Blog" electronics audio +https://quantasylum.com/blogs/news.atom "~RSS QuantAsylum" audio +https://www.scrample.xyz/index.xml "~RSS Scrample" electronics #+end_src *** Science #+begin_src conf - http://sciencetonnante.wordpress.com/feed/ "~RSS Science étonnante" science - https://brushingupscience.com/feed/ "~RSS Brushing Up Science" science +http://sciencetonnante.wordpress.com/feed/ "~RSS Science étonnante" science +https://brushingupscience.com/feed/ "~RSS Brushing Up Science" science #+end_src *** Linux, Emacs and Computer Science #+begin_src conf - https://yiufung.net/index.xml "~RSS yiufung" emacs - https://bzg.fr/index.xml "~RSS bzg" emacs - https://thomashartmann.dev/rss.xml "~RSS thomashartmann.dev" emacs linux - http://cachestocaches.com/feed/ "~RSS CachesToCaches" emacs - http://frederic.bezies.free.fr/blog/?feed=rss2 "~RSS Le Weblog de Frederic Bezies" linux - https://la-bibliotex.fr/feed/ "~RSS La biblioTeX" latex - https://so.nwalsh.com/feed/ "~RSS so..." emacs - http://karl-voit.at/feeds/lazyblorg-all.atom_1.0.links-and-content.xml "~RSS Public Voit" emacs - https://people.umass.edu/weikaichen/index.xml "~RSS Weikai Chen" emacs - https://babbagefiles.xyz/index.xml "~RSS The Neo-Babbage Files" linux emacs - https://write.as/dani/feed/ "~RSS Dani" emacs - https://lepisma.xyz/atom.xml "~RSS Lepisma" emacs - http://kitchingroup.cheme.cmu.edu/blog/feed "~RSS The Kitchin Research Group" emacs - http://lukesmith.xyz/rss.xml "~RSS The Latest from Luke" linux - http://manuel-uberti.github.io/feed.xml "~RSS Manuel Uberti" emacs - https://lord.re/index.xml "~RSS /home/lord" linux - https://beepb00p.xyz/rss.xml "~RSS beepb00p" linux emacs - http://pragmaticemacs.com/feed/ "~RSS Pragmatic Emacs" emacs - https://jonathanabennett.github.io/rss.xml "~RSS Jonathan Bennett's Blog" emacs - https://joshrollinswrites.com/index.xml "~RSS The Art of Not Asking Why" emacs linux - http://endlessparentheses.com/atom.xml "~RSS Endless Parentheses" emacs - https://www.gonsie.com/blorg/feed.xml "~RSS Elsa Gonsiorowski" emacs - http://tiagoweber.github.io/blog.xml "~RSS Tiago Oliveira Weber" matlab emacs science - https://shreyas.ragavan.co/index.xml "~RSS Shreyas Ragavan" emacs - https://pinecast.com/feed/emacscast "~RSS EmacsCast" emacs - http://amitp.blogspot.com/feeds/posts/default "~RSS Amit's Thoughts" emacs - http://sachachua.com/wp/category/emacs/feed/ "~RSS Sacha Chua" emacs - https://cestlaz.github.io/rss.xml "~RSS C'est la Z" emacs - https://www-public.imtbs-tsp.eu/~berger_o/weblog/tag/org-mode/feed/ "~RSS WebLog Pro Olivier Berger" emacs - https://scripter.co/index.xml "~RSS A Scripter's Notes" linux emacs - https://assortedarray.com/index.xml "~RSS Assorted Array" emacs - https://www.with-emacs.com/rss.xml "~RSS with-emacs" emacs - https://linktohack.com/index.xml "~RSS QL's blog" emacs - https://itsfoss.com/feed "~RSS It's FOSS" linux - https://llazarek.com/feeds/all.rss.xml "~RSS llazarek" emacs - https://200ok.ch/rss.xml "~RSS 200ok" emacs - http://irreal.org/blog/?feed=rss2 "~RSS Irreal" emacs - https://emacs.cafe/feed.xml "~RSS Emacs café" emacs - http://vxlabs.com/feed/ "~RSS vxlabs" emacs linux - https://www.rousette.org.uk/index.xml "~RSS But she's a Girl..." emacs - https://www.anand-iyer.com/feed.xml "~RSS Anand Iyer" emacs - https://addy-dclxvi.github.io/index.xml "~RSS Addy's Blog" linux - https://ekaschalk.github.io/index.xml "~RSS Modern Emacs" emacs - http://howardism.org/index.xml "~RSS Howardism" emacs - http://xkcd.com/rss.xml "~RSS XKCD" random - https://blog.jethro.dev/index.xml "~RSS Jethro Kuan" emacs - https://lord.re/posts/index.xml "~RSS Lord~" linux - https://rgoswami.me/posts/index.xml "~RSS Rohit Goswami~" linux emacs - https://translucentink.gitlab.io/rss.xml "~RSS Translucent Ink" emacs - https://jherrlin.github.io/index.xml "~RSS Jherrlin" emacs linux - https://camsaul.com/feed.xml "~RSS Camsaul" emacs - https://ag91.github.io/rss.xml "~RSS Were Parallels Cross" emacs - # https://jonathanh.co.uk/ +https://yiufung.net/index.xml "~RSS yiufung" emacs +https://bzg.fr/index.xml "~RSS bzg" emacs +https://thomashartmann.dev/rss.xml "~RSS thomashartmann.dev" emacs linux +http://cachestocaches.com/feed/ "~RSS CachesToCaches" emacs +http://frederic.bezies.free.fr/blog/?feed=rss2 "~RSS Le Weblog de Frederic Bezies" linux +https://la-bibliotex.fr/feed/ "~RSS La biblioTeX" latex +https://so.nwalsh.com/feed/ "~RSS so..." emacs +http://karl-voit.at/feeds/lazyblorg-all.atom_1.0.links-and-content.xml "~RSS Public Voit" emacs +https://people.umass.edu/weikaichen/index.xml "~RSS Weikai Chen" emacs +https://babbagefiles.xyz/index.xml "~RSS The Neo-Babbage Files" linux emacs +https://write.as/dani/feed/ "~RSS Dani" emacs +https://lepisma.xyz/atom.xml "~RSS Lepisma" emacs +http://kitchingroup.cheme.cmu.edu/blog/feed "~RSS The Kitchin Research Group" emacs +http://lukesmith.xyz/rss.xml "~RSS The Latest from Luke" linux +http://manuel-uberti.github.io/feed.xml "~RSS Manuel Uberti" emacs +https://lord.re/index.xml "~RSS /home/lord" linux +https://beepb00p.xyz/rss.xml "~RSS beepb00p" linux emacs +http://pragmaticemacs.com/feed/ "~RSS Pragmatic Emacs" emacs +https://jonathanabennett.github.io/rss.xml "~RSS Jonathan Bennett's Blog" emacs +https://joshrollinswrites.com/index.xml "~RSS The Art of Not Asking Why" emacs linux +http://endlessparentheses.com/atom.xml "~RSS Endless Parentheses" emacs +https://www.gonsie.com/blorg/feed.xml "~RSS Elsa Gonsiorowski" emacs +http://tiagoweber.github.io/blog.xml "~RSS Tiago Oliveira Weber" matlab emacs science +https://shreyas.ragavan.co/index.xml "~RSS Shreyas Ragavan" emacs +https://pinecast.com/feed/emacscast "~RSS EmacsCast" emacs +http://amitp.blogspot.com/feeds/posts/default "~RSS Amit's Thoughts" emacs +http://sachachua.com/wp/category/emacs/feed/ "~RSS Sacha Chua" emacs +https://cestlaz.github.io/rss.xml "~RSS C'est la Z" emacs +https://www-public.imtbs-tsp.eu/~berger_o/weblog/tag/org-mode/feed/ "~RSS WebLog Pro Olivier Berger" emacs +https://scripter.co/index.xml "~RSS A Scripter's Notes" linux emacs +https://assortedarray.com/index.xml "~RSS Assorted Array" emacs +https://www.with-emacs.com/rss.xml "~RSS with-emacs" emacs +https://linktohack.com/index.xml "~RSS QL's blog" emacs +https://itsfoss.com/feed "~RSS It's FOSS" linux +https://llazarek.com/feeds/all.rss.xml "~RSS llazarek" emacs +https://200ok.ch/rss.xml "~RSS 200ok" emacs +http://irreal.org/blog/?feed=rss2 "~RSS Irreal" emacs +https://emacs.cafe/feed.xml "~RSS Emacs café" emacs +http://vxlabs.com/feed/ "~RSS vxlabs" emacs linux +https://www.rousette.org.uk/index.xml "~RSS But she's a Girl..." emacs +https://www.anand-iyer.com/feed.xml "~RSS Anand Iyer" emacs +https://addy-dclxvi.github.io/index.xml "~RSS Addy's Blog" linux +https://ekaschalk.github.io/index.xml "~RSS Modern Emacs" emacs +http://howardism.org/index.xml "~RSS Howardism" emacs +http://xkcd.com/rss.xml "~RSS XKCD" random +https://blog.jethro.dev/index.xml "~RSS Jethro Kuan" emacs +https://lord.re/posts/index.xml "~RSS Lord~" linux +https://rgoswami.me/posts/index.xml "~RSS Rohit Goswami~" linux emacs +https://translucentink.gitlab.io/rss.xml "~RSS Translucent Ink" emacs +https://jherrlin.github.io/index.xml "~RSS Jherrlin" emacs linux +https://camsaul.com/feed.xml "~RSS Camsaul" emacs +https://ag91.github.io/rss.xml "~RSS Were Parallels Cross" emacs +# https://jonathanh.co.uk/ #+end_src ** Youtube *** Matlab and Control #+begin_src conf - https://www.youtube.com/feeds/videos.xml?channel_id=UCm5mt-A4w61lknZ9lCsZtBw "~YT Steve Brunton" youtube control science - https://www.youtube.com/feeds/videos.xml?channel_id=UCoUOaSVYkTV6W4uLvxvgiFA "~YT Nathan Kutz" youtube science control - https://www.youtube.com/feeds/videos.xml?channel_id=UCSlhlkPaq3RL1CP0Tv1xWBQ "~YT MIT Institute for Data, Systems, and Society" youtube science control - https://www.youtube.com/feeds/videos.xml?channel_id=UCmkP178NasnhR3TWQyyP4Gw "~YT How To Mechatronics" youtube science control - https://www.youtube.com/feeds/videos.xml?channel_id=UCGNxF654kRelnM0nKxM6QDQ "~YT Tom Oomen" youtube science control - https://www.youtube.com/feeds/videos.xml?channel_id=UCRCdl2SXma02BG384RuZPqg "~YT katkimshow" youtube science control - https://www.youtube.com/feeds/videos.xml?channel_id=UCq0imsn84ShAe9PBOFnoIrg "~YT Brian Douglas" youtube control - https://www.youtube.com/feeds/videos.xml?channel_id=UC7vVhkEfw4nOGp8TyDk7RcQ "~YT BostonDynamics" youtube control engineering - https://www.youtube.com/feeds/videos.xml?channel_id=UCPUuVY7w8brL0r__P8UBgyQ "~YT Christopher Lum" youtube matlab control - https://www.youtube.com/feeds/videos.xml?channel_id=UCNm2TzhsV5wGlFIAcpCx9hQ "~YT Jousef Murad" youtube engineering matlab - https://www.youtube.com/feeds/videos.xml?channel_id=UCMBXZxd-j6VqrynykO1dURw "~YT John Rossiter" youtube control +https://www.youtube.com/feeds/videos.xml?channel_id=UCm5mt-A4w61lknZ9lCsZtBw "~YT Steve Brunton" youtube control science +https://www.youtube.com/feeds/videos.xml?channel_id=UCoUOaSVYkTV6W4uLvxvgiFA "~YT Nathan Kutz" youtube science control +https://www.youtube.com/feeds/videos.xml?channel_id=UCSlhlkPaq3RL1CP0Tv1xWBQ "~YT MIT Institute for Data, Systems, and Society" youtube science control +https://www.youtube.com/feeds/videos.xml?channel_id=UCmkP178NasnhR3TWQyyP4Gw "~YT How To Mechatronics" youtube science control +https://www.youtube.com/feeds/videos.xml?channel_id=UCGNxF654kRelnM0nKxM6QDQ "~YT Tom Oomen" youtube science control +https://www.youtube.com/feeds/videos.xml?channel_id=UCRCdl2SXma02BG384RuZPqg "~YT katkimshow" youtube science control +https://www.youtube.com/feeds/videos.xml?channel_id=UCq0imsn84ShAe9PBOFnoIrg "~YT Brian Douglas" youtube control +https://www.youtube.com/feeds/videos.xml?channel_id=UC7vVhkEfw4nOGp8TyDk7RcQ "~YT BostonDynamics" youtube control engineering +https://www.youtube.com/feeds/videos.xml?channel_id=UCPUuVY7w8brL0r__P8UBgyQ "~YT Christopher Lum" youtube matlab control +https://www.youtube.com/feeds/videos.xml?channel_id=UCNm2TzhsV5wGlFIAcpCx9hQ "~YT Jousef Murad" youtube engineering matlab +https://www.youtube.com/feeds/videos.xml?channel_id=UCMBXZxd-j6VqrynykO1dURw "~YT John Rossiter" youtube control #+end_src *** Audio and Electronics #+begin_src conf - https://www.youtube.com/feeds/videos.xml?channel_id=UCI-FgEdZQxBASsm3HNcWKxQ "~YT Red Robbo's Workshop" youtube linux audio - https://www.youtube.com/feeds/videos.xml?channel_id=UCtpB66XKjAtFZfZyzmC-_Cg "~YT HexiBase" youtube audio - https://www.youtube.com/feeds/videos.xml?channel_id=UCGIr92yrDW4cRLD-QaZmS6w "~YT Ethan Winer" youtube audio - https://www.youtube.com/feeds/videos.xml?channel_id=UCslWMxX93gcaiXwxMv4asHA "~YT Jean Maurer Swiss Audio Manufacture SA" youtube audio - https://www.youtube.com/feeds/videos.xml?channel_id=UC6mzA8J7n0ylf0RnDpj-vrg "~YT PS Audio" youtube audio - https://www.youtube.com/feeds/videos.xml?channel_id=UCy0tKL1T7wFoYcxCe0xjN6Q "~YT Technology Connections" youtube audio engineering - https://www.youtube.com/feeds/videos.xml?channel_id=UCSqyMHDUsc1gs6wz4sUy91w "~YT jipihorn" youtube electronics audio - https://www.youtube.com/feeds/videos.xml?channel_id=UCOuow_HIYmeaIqi42zVs3qg "~YT Kirby Meets Audio" youtube audio - https://www.youtube.com/feeds/videos.xml?channel_id=UCWOhWAOydPUqillkpt5UlaA "~YT Dakoustics" youtube audio - https://www.youtube.com/feeds/videos.xml?channel_id=UCm2rchKqdoSKdB448TTVEnQ "~YT Impulse Audio" youtube audio - https://www.youtube.com/feeds/videos.xml?channel_id=UC5QPFDZ3Y4ylkkGJc6Y1OOA "~YT Philippe Demerliac" youtube electronics - https://www.youtube.com/feeds/videos.xml?channel_id=UCVqx3vXNghSqUcVg2nmegYA "~YT U꞊RI" youtube electronics diy - https://www.youtube.com/feeds/videos.xml?channel_id=UCUJQSGHlYC9Xyz-uNfSpSsA "~YT ElectronikHeart" youtube electronics - https://www.youtube.com/feeds/videos.xml?channel_id=UC74xmXx1NfeIIa44J1IU84w "~YT Audio Fest" youtube audio - https://www.youtube.com/feeds/videos.xml?channel_id=UCP_yR0wxxyLa46rRgsmje3Q "~YT DIY Speaker Building" youtube audio - https://www.youtube.com/feeds/videos.xml?channel_id=UCVryWqJ4cSlbTSETBHpBUWw "~YT Phil S" youtube electronics control +https://www.youtube.com/feeds/videos.xml?channel_id=UCI-FgEdZQxBASsm3HNcWKxQ "~YT Red Robbo's Workshop" youtube linux audio +https://www.youtube.com/feeds/videos.xml?channel_id=UCtpB66XKjAtFZfZyzmC-_Cg "~YT HexiBase" youtube audio +https://www.youtube.com/feeds/videos.xml?channel_id=UCGIr92yrDW4cRLD-QaZmS6w "~YT Ethan Winer" youtube audio +https://www.youtube.com/feeds/videos.xml?channel_id=UCslWMxX93gcaiXwxMv4asHA "~YT Jean Maurer Swiss Audio Manufacture SA" youtube audio +https://www.youtube.com/feeds/videos.xml?channel_id=UC6mzA8J7n0ylf0RnDpj-vrg "~YT PS Audio" youtube audio +https://www.youtube.com/feeds/videos.xml?channel_id=UCy0tKL1T7wFoYcxCe0xjN6Q "~YT Technology Connections" youtube audio engineering +https://www.youtube.com/feeds/videos.xml?channel_id=UCSqyMHDUsc1gs6wz4sUy91w "~YT jipihorn" youtube electronics audio +https://www.youtube.com/feeds/videos.xml?channel_id=UCOuow_HIYmeaIqi42zVs3qg "~YT Kirby Meets Audio" youtube audio +https://www.youtube.com/feeds/videos.xml?channel_id=UCWOhWAOydPUqillkpt5UlaA "~YT Dakoustics" youtube audio +https://www.youtube.com/feeds/videos.xml?channel_id=UCm2rchKqdoSKdB448TTVEnQ "~YT Impulse Audio" youtube audio +https://www.youtube.com/feeds/videos.xml?channel_id=UC5QPFDZ3Y4ylkkGJc6Y1OOA "~YT Philippe Demerliac" youtube electronics +https://www.youtube.com/feeds/videos.xml?channel_id=UCVqx3vXNghSqUcVg2nmegYA "~YT U꞊RI" youtube electronics diy +https://www.youtube.com/feeds/videos.xml?channel_id=UCUJQSGHlYC9Xyz-uNfSpSsA "~YT ElectronikHeart" youtube electronics +https://www.youtube.com/feeds/videos.xml?channel_id=UC74xmXx1NfeIIa44J1IU84w "~YT Audio Fest" youtube audio +https://www.youtube.com/feeds/videos.xml?channel_id=UCP_yR0wxxyLa46rRgsmje3Q "~YT DIY Speaker Building" youtube audio +https://www.youtube.com/feeds/videos.xml?channel_id=UCVryWqJ4cSlbTSETBHpBUWw "~YT Phil S" youtube electronics control #+end_src *** Linux, Emacs and Computer Science #+begin_src conf - https://www.youtube.com/feeds/videos.xml?channel_id=UCNqFXwI5gNcyxt2c1zTQAKw "~YT Yisrael Dov L" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA "~YT Luke Smith" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCkf4VIqu3Acnfzuk3kRIFwA "~YT gotbletu" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCVHICXXtKG7rZgtC5xonNdQ "~YT Howard Abrams" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCEfFUaIkjbI06PhALdcXNVA "~YT EmacsCast" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCzgkOWKcwy0uhYilE6bd1Lg "~YT Zaiste Programming" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UC5dAH2txWtKSsgmRglRB88A "~YT kyptin" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA "~YT Brodie Robertson" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCXPHFM88IlFn68OmLwtPmZA "~YT Greg Hurrell" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCxjDcP3Su59bg5VDnlwyt5A "~YT Bailey Ling" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCi8XrDg1bK_MJ0goOnbpTMQ "~YT budlabs" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCfbGTpcJyEOMwKP-eYz3_fg "~YT Rainer König" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCsnGwSIHyoYN0kiINAGUKxg "~YT Wolfgang's Channel" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCQp2VLAOlvq142YN3JO3y8w "~YT John Kitchin" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCFk8kgNu_bqsRZewxMGqkzQ "~YT Emacs SF" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCIFJHWyIlN0XFrW2vMKG6QA "~YT Alain M. Lafon" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCvA_wgsX6eFAOXI8Rbg_WiQ "~YT tutoriaLinux" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCUF4bHszxd8T4ulrvLejumA "~YT Alexander Fu" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCbW6-rTEn6nPj56K_9dLozQ "~YT Gilles Castel" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCUR1pFG_3XoZn3JNKjulqZg "~YT thoughtbot" youtube linux emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg "~YT DistroTube" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCDEtZ7AKmwS0_GNJog01D2g "~YT Uncle Dave" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCYnrHo7CDgKobmoJ3Borrnw "~YT Niklas Carlsson" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCljOhRB2a3sQgLCdK9CHQvQ "~YT Leafshade Software" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCwRXb5dUK4cvsHbx-rGzSgw "~YT Derek Banas" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCP2bshADPrVMoNrdJvZEQzw "~YT KeepItTechie" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCVRJ6D343dX-x730MRP8tNw "~YT cocadmin" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCxkMDXQ5qzYOgXPRnOBrp1w "~YT Mike Zamansky" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCgREucssIfY9e0Iy3yhse8w "~YT Conner McDaniel" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCkRmQ_G_NbdbCQMpALg6UPg "~YT emacsrocks" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UC0uTPqBCFIpZxlz_Lv1tk_g "~YT Protesilaos Stavrou" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCsJXkw_Ssp-1myJFm4_SMJA "~YT Seorenn" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCvrQyT2xhsxq2a4Xopf2JTA "~YT Zaeph" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCYnl1cugi7Lv1h8j6JNqNEg "~YT Dima Gerasimov" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCDKPGD9T00eS_l--D_DRTUQ "~YT Linuxtricks" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCcCeYbIBGQPB1G12psAPMKw "~YT Spudlyo" youtube emacs - https://www.youtube.com/feeds/videos.xml?channel_id=UCS97tchJDq17Qms3cux8wcA "~YT Chrisatmachine" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UCwFpzG5MK5Shg_ncAhrgr9g "~YT Awesome Open Source" youtube linux - https://www.youtube.com/feeds/videos.xml?channel_id=UC7YOGHUfC1Tb6E4pudI9STA "~YT Mental Outlaw" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCNqFXwI5gNcyxt2c1zTQAKw "~YT Yisrael Dov L" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA "~YT Luke Smith" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCkf4VIqu3Acnfzuk3kRIFwA "~YT gotbletu" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCVHICXXtKG7rZgtC5xonNdQ "~YT Howard Abrams" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCEfFUaIkjbI06PhALdcXNVA "~YT EmacsCast" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCzgkOWKcwy0uhYilE6bd1Lg "~YT Zaiste Programming" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UC5dAH2txWtKSsgmRglRB88A "~YT kyptin" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA "~YT Brodie Robertson" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCXPHFM88IlFn68OmLwtPmZA "~YT Greg Hurrell" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCxjDcP3Su59bg5VDnlwyt5A "~YT Bailey Ling" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCi8XrDg1bK_MJ0goOnbpTMQ "~YT budlabs" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCfbGTpcJyEOMwKP-eYz3_fg "~YT Rainer König" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCsnGwSIHyoYN0kiINAGUKxg "~YT Wolfgang's Channel" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCQp2VLAOlvq142YN3JO3y8w "~YT John Kitchin" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCFk8kgNu_bqsRZewxMGqkzQ "~YT Emacs SF" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCIFJHWyIlN0XFrW2vMKG6QA "~YT Alain M. Lafon" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCvA_wgsX6eFAOXI8Rbg_WiQ "~YT tutoriaLinux" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCUF4bHszxd8T4ulrvLejumA "~YT Alexander Fu" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCbW6-rTEn6nPj56K_9dLozQ "~YT Gilles Castel" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCUR1pFG_3XoZn3JNKjulqZg "~YT thoughtbot" youtube linux emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg "~YT DistroTube" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCDEtZ7AKmwS0_GNJog01D2g "~YT Uncle Dave" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCYnrHo7CDgKobmoJ3Borrnw "~YT Niklas Carlsson" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCljOhRB2a3sQgLCdK9CHQvQ "~YT Leafshade Software" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCwRXb5dUK4cvsHbx-rGzSgw "~YT Derek Banas" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCP2bshADPrVMoNrdJvZEQzw "~YT KeepItTechie" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCVRJ6D343dX-x730MRP8tNw "~YT cocadmin" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCxkMDXQ5qzYOgXPRnOBrp1w "~YT Mike Zamansky" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCgREucssIfY9e0Iy3yhse8w "~YT Conner McDaniel" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCkRmQ_G_NbdbCQMpALg6UPg "~YT emacsrocks" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UC0uTPqBCFIpZxlz_Lv1tk_g "~YT Protesilaos Stavrou" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCsJXkw_Ssp-1myJFm4_SMJA "~YT Seorenn" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCvrQyT2xhsxq2a4Xopf2JTA "~YT Zaeph" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCYnl1cugi7Lv1h8j6JNqNEg "~YT Dima Gerasimov" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCDKPGD9T00eS_l--D_DRTUQ "~YT Linuxtricks" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCcCeYbIBGQPB1G12psAPMKw "~YT Spudlyo" youtube emacs +https://www.youtube.com/feeds/videos.xml?channel_id=UCS97tchJDq17Qms3cux8wcA "~YT Chrisatmachine" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UCwFpzG5MK5Shg_ncAhrgr9g "~YT Awesome Open Source" youtube linux +https://www.youtube.com/feeds/videos.xml?channel_id=UC7YOGHUfC1Tb6E4pudI9STA "~YT Mental Outlaw" youtube linux #+end_src *** 3D-Printing and DIY #+begin_src conf - https://www.youtube.com/feeds/videos.xml?channel_id=UCGEBcDJ7QIY1LuEddDM9x9Q "~YT Oldies" youtube 3d-printing - https://www.youtube.com/feeds/videos.xml?channel_id=UCqdRx3JV3xRchi4_xwFJUTA "~YT 8FabLab" youtube diy - https://www.youtube.com/feeds/videos.xml?channel_id=UCCsdIja21VT7AKkbVI5y8bQ "~YT Alain Vaillancourt" youtube diy - https://www.youtube.com/feeds/videos.xml?channel_id=UCyi6pFP-lmaDD3Eb4dqsvdg "~YT ioduremetallique" youtube diy - https://www.youtube.com/feeds/videos.xml?channel_id=UCYI8olK-jH9Ubc2FaA2LgPw "~YT Egalistel" youtube 3d-printing - https://www.youtube.com/feeds/videos.xml?channel_id=UCSULDz1yaHLVQWHpm4g_GHA "~YT monsieur bidouille" youtube diy - https://www.youtube.com/feeds/videos.xml?channel_id=UC2UT8pPDlUvRbQXTVOf5Ocw "~YT Henri Hihacks" youtube diy - https://www.youtube.com/feeds/videos.xml?channel_id=UCLecVrux63S6aYiErxdiy4w "~YT BRUH Automation" youtube diy - https://www.youtube.com/feeds/videos.xml?channel_id=UCQfMyugsjrVUWU0v_ZxQs2Q "~YT Machine Tech Video Blog" youtube diy engineering - https://www.youtube.com/feeds/videos.xml?channel_id=UCjED9uS41ioeFuPfbR-OBlw "~YT Les Freres Poulain" youtube diy - https://www.youtube.com/feeds/videos.xml?channel_id=UCVSHXNNBitaPd5lYz48--yg "~YT Tech Ingredients" youtube diy - https://www.youtube.com/feeds/videos.xml?channel_id=UCPFChjpOgkUqckj3378jt5w "~YT Heliox" youtube 3d-printing - https://www.youtube.com/feeds/videos.xml?channel_id=UC9_nxvBohH1G2yR77XTdA2g "~YT Tommy Desrochers" youtube 3d-printing diy - https://www.youtube.com/feeds/videos.xml?channel_id=UC6mIxFTvXkWQVEHPsEdflzQ "~YT GreatScott" youtube diy -#+end_src - -*** Engineering -#+begin_src conf - +https://www.youtube.com/feeds/videos.xml?channel_id=UCGEBcDJ7QIY1LuEddDM9x9Q "~YT Oldies" youtube 3d-printing +https://www.youtube.com/feeds/videos.xml?channel_id=UCqdRx3JV3xRchi4_xwFJUTA "~YT 8FabLab" youtube diy +https://www.youtube.com/feeds/videos.xml?channel_id=UCCsdIja21VT7AKkbVI5y8bQ "~YT Alain Vaillancourt" youtube diy +https://www.youtube.com/feeds/videos.xml?channel_id=UCyi6pFP-lmaDD3Eb4dqsvdg "~YT ioduremetallique" youtube diy +https://www.youtube.com/feeds/videos.xml?channel_id=UCYI8olK-jH9Ubc2FaA2LgPw "~YT Egalistel" youtube 3d-printing +https://www.youtube.com/feeds/videos.xml?channel_id=UCSULDz1yaHLVQWHpm4g_GHA "~YT monsieur bidouille" youtube diy +https://www.youtube.com/feeds/videos.xml?channel_id=UC2UT8pPDlUvRbQXTVOf5Ocw "~YT Henri Hihacks" youtube diy +https://www.youtube.com/feeds/videos.xml?channel_id=UCLecVrux63S6aYiErxdiy4w "~YT BRUH Automation" youtube diy +https://www.youtube.com/feeds/videos.xml?channel_id=UCQfMyugsjrVUWU0v_ZxQs2Q "~YT Machine Tech Video Blog" youtube diy engineering +https://www.youtube.com/feeds/videos.xml?channel_id=UCjED9uS41ioeFuPfbR-OBlw "~YT Les Freres Poulain" youtube diy +https://www.youtube.com/feeds/videos.xml?channel_id=UCVSHXNNBitaPd5lYz48--yg "~YT Tech Ingredients" youtube diy +https://www.youtube.com/feeds/videos.xml?channel_id=UCPFChjpOgkUqckj3378jt5w "~YT Heliox" youtube 3d-printing +https://www.youtube.com/feeds/videos.xml?channel_id=UC9_nxvBohH1G2yR77XTdA2g "~YT Tommy Desrochers" youtube 3d-printing diy +https://www.youtube.com/feeds/videos.xml?channel_id=UC6mIxFTvXkWQVEHPsEdflzQ "~YT GreatScott" youtube diy #+end_src *** Interesting - General #+begin_src conf - https://www.youtube.com/feeds/videos.xml?channel_id=UC5eOLQO5VUEFJukNg9cl5jg "~YT Histoire Brève" youtube interesting - https://www.youtube.com/feeds/videos.xml?channel_id=UCMFcMhePnH4onVHt2-ItPZw "~YT Hygiène Mentale" youtube interesting - https://www.youtube.com/feeds/videos.xml?channel_id=UC9BnGZLT4iPaJtDOXYwQuHQ "~YT Primum Non Nocere" youtube interesting - https://www.youtube.com/feeds/videos.xml?channel_id=UCP46_MXP_WG_auH88FnfS1A "~YT Nota Bene" youtube interesting - https://www.youtube.com/feeds/videos.xml?channel_id=UCUR03ZSZlEvCO6EWwv4jU2w "~YT Absol Vidéos" youtube interesting - https://www.youtube.com/feeds/videos.xml?channel_id=UCWty1tzwZW_ZNSp5GVGteaA "~YT La statistique expliquée à mon chat" youtube interesting - https://www.youtube.com/feeds/videos.xml?channel_id=UCLbgxBMMEo6mAYe87esxGmg "~YT horror humanum est" youtube interesting - https://www.youtube.com/feeds/videos.xml?channel_id=UCOuIgj0CYCXCvjWywjDbauw "~YT Chat Sceptique" youtube interesting - +https://www.youtube.com/feeds/videos.xml?channel_id=UC5eOLQO5VUEFJukNg9cl5jg "~YT Histoire Brève" youtube interesting +https://www.youtube.com/feeds/videos.xml?channel_id=UCMFcMhePnH4onVHt2-ItPZw "~YT Hygiène Mentale" youtube interesting +https://www.youtube.com/feeds/videos.xml?channel_id=UC9BnGZLT4iPaJtDOXYwQuHQ "~YT Primum Non Nocere" youtube interesting +https://www.youtube.com/feeds/videos.xml?channel_id=UCP46_MXP_WG_auH88FnfS1A "~YT Nota Bene" youtube interesting +https://www.youtube.com/feeds/videos.xml?channel_id=UCUR03ZSZlEvCO6EWwv4jU2w "~YT Absol Vidéos" youtube interesting +https://www.youtube.com/feeds/videos.xml?channel_id=UCWty1tzwZW_ZNSp5GVGteaA "~YT La statistique expliquée à mon chat" youtube interesting +https://www.youtube.com/feeds/videos.xml?channel_id=UCLbgxBMMEo6mAYe87esxGmg "~YT horror humanum est" youtube interesting +https://www.youtube.com/feeds/videos.xml?channel_id=UCOuIgj0CYCXCvjWywjDbauw "~YT Chat Sceptique" youtube interesting #+end_src *** Science #+begin_src conf - https://www.youtube.com/feeds/videos.xml?channel_id=UCwgqYNmYaij2_8hq_tOFyZw "~YT Aurelien Barrau" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UCeR8BYZS7IHYjk_9Mh5JgkA "~YT Scilabus" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UC1Ue7TuX3iH4y8-Qrjj-hyg "~YT J'm'énerve pas, j'explique" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UCjsHDXUU3BjBCG7OaCbNDyQ "~YT Le Sense Of Wonder" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UC4PasDd25MXqlXBogBw9CAg "~YT Mickaël Launay" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UCsz9DiwPtgDvxJ-njWnieZw "~YT Passe-Science" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UC_GlthPB9gzdxfkTTEIVxMA "~YT Incroyables Expériences" youtube science engineering - https://www.youtube.com/feeds/videos.xml?channel_id=UCxqAWLTk1CmBvZFPzeZMd9A "~YT Domain of Science" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UCaNlbnghtwlsGF-KzAFThqA "~YT ScienceEtonnante" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UCeQEKFH31vvD-InkTGSvCrA "~YT brusspup" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UCHnyfMqiRRG1u-2MsSQLbXA "~YT Veritasium" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UCH6ppHEvV3_WIXEwmhv9HEg "~YT Deus Ex Silicium" youtube engineering science - https://www.youtube.com/feeds/videos.xml?channel_id=UC2LZO6swZ9SLUEOks3WnsfA "~YT 2veritasium" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UCvGag7MyHR8H9oRm9iL9Ifw "~YT Experimentboy" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UC6107grRI4m0o2-emgoDnAA "~YT SmarterEveryDay" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UCtqICqGbPSbTN09K1_7VZ3Q "~YT DirtyBiology" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UC_ZChHhr5nDrUymz7qsRqRw "~YT Confér'ENS" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UCNmLe68qKzdjuEpT_YTDFuA "~YT Etonnarium" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UCCSN5zJTKjl6UKvPcLzLuiw "~YT Macroscopie" youtube science - https://www.youtube.com/feeds/videos.xml?channel_id=UC7DdEm33SyaTDtWYGO2CwdA "~YT Physics Girl" youtube science - +https://www.youtube.com/feeds/videos.xml?channel_id=UCwgqYNmYaij2_8hq_tOFyZw "~YT Aurelien Barrau" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UCeR8BYZS7IHYjk_9Mh5JgkA "~YT Scilabus" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UC1Ue7TuX3iH4y8-Qrjj-hyg "~YT J'm'énerve pas, j'explique" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UCjsHDXUU3BjBCG7OaCbNDyQ "~YT Le Sense Of Wonder" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UC4PasDd25MXqlXBogBw9CAg "~YT Mickaël Launay" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UCsz9DiwPtgDvxJ-njWnieZw "~YT Passe-Science" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UC_GlthPB9gzdxfkTTEIVxMA "~YT Incroyables Expériences" youtube science engineering +https://www.youtube.com/feeds/videos.xml?channel_id=UCxqAWLTk1CmBvZFPzeZMd9A "~YT Domain of Science" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UCaNlbnghtwlsGF-KzAFThqA "~YT ScienceEtonnante" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UCeQEKFH31vvD-InkTGSvCrA "~YT brusspup" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UCHnyfMqiRRG1u-2MsSQLbXA "~YT Veritasium" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UCH6ppHEvV3_WIXEwmhv9HEg "~YT Deus Ex Silicium" youtube engineering science +https://www.youtube.com/feeds/videos.xml?channel_id=UC2LZO6swZ9SLUEOks3WnsfA "~YT 2veritasium" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UCvGag7MyHR8H9oRm9iL9Ifw "~YT Experimentboy" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UC6107grRI4m0o2-emgoDnAA "~YT SmarterEveryDay" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UCtqICqGbPSbTN09K1_7VZ3Q "~YT DirtyBiology" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UC_ZChHhr5nDrUymz7qsRqRw "~YT Confér'ENS" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UCNmLe68qKzdjuEpT_YTDFuA "~YT Etonnarium" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UCCSN5zJTKjl6UKvPcLzLuiw "~YT Macroscopie" youtube science +https://www.youtube.com/feeds/videos.xml?channel_id=UC7DdEm33SyaTDtWYGO2CwdA "~YT Physics Girl" youtube science #+end_src *** Keyboard #+begin_src conf - https://www.youtube.com/feeds/videos.xml?channel_id=UC5ClFK9Ko4ACRgXjRZc_GfA "~YT Rhinofeed" youtube keyboards - https://www.youtube.com/feeds/videos.xml?channel_id=UC2yitP8oH86YBRVU4anycoA "~YT Quentin Lebastard" youtube keyboards +https://www.youtube.com/feeds/videos.xml?channel_id=UC5ClFK9Ko4ACRgXjRZc_GfA "~YT Rhinofeed" youtube keyboards +https://www.youtube.com/feeds/videos.xml?channel_id=UC2yitP8oH86YBRVU4anycoA "~YT Quentin Lebastard" youtube keyboards #+end_src *** Music #+begin_src conf - https://www.youtube.com/feeds/videos.xml?channel_id=UC3gZqwD45zGCsduBn-Q2lew "~YT Gabrielle Grau" youtube music - https://www.youtube.com/feeds/videos.xml?channel_id=UCZHPwKyeypWwU8SNJSzQhCw "~YT Révisons nos Classiques" youtube music - https://www.youtube.com/feeds/videos.xml?channel_id=UCPpNtkHeCnwN7Tl5oLq4AAg "~YT Une chanson, l'addition" youtube music - https://www.youtube.com/feeds/videos.xml?channel_id=UC_17P1ruDpCVujf7C_SxhOA "~YT Metalliquoi" youtube music - https://www.youtube.com/feeds/videos.xml?channel_id=UCzabZYC0MYRR2MFkq62d6yQ "~YT Florent Garcia" youtube music +https://www.youtube.com/feeds/videos.xml?channel_id=UC3gZqwD45zGCsduBn-Q2lew "~YT Gabrielle Grau" youtube music +https://www.youtube.com/feeds/videos.xml?channel_id=UCZHPwKyeypWwU8SNJSzQhCw "~YT Révisons nos Classiques" youtube music +https://www.youtube.com/feeds/videos.xml?channel_id=UCPpNtkHeCnwN7Tl5oLq4AAg "~YT Une chanson, l'addition" youtube music +https://www.youtube.com/feeds/videos.xml?channel_id=UC_17P1ruDpCVujf7C_SxhOA "~YT Metalliquoi" youtube music +https://www.youtube.com/feeds/videos.xml?channel_id=UCzabZYC0MYRR2MFkq62d6yQ "~YT Florent Garcia" youtube music #+end_src *** Space #+begin_src conf - https://www.youtube.com/feeds/videos.xml?channel_id=UCdL3UpiseRlvxXuORJjmqZw "~YT Stardust" youtube space - https://www.youtube.com/feeds/videos.xml?channel_id=UC5X4e8ScZI2AFd_vkjSoyoQ "~YT AstronoGeek" youtube space +https://www.youtube.com/feeds/videos.xml?channel_id=UCdL3UpiseRlvxXuORJjmqZw "~YT Stardust" youtube space +https://www.youtube.com/feeds/videos.xml?channel_id=UC5X4e8ScZI2AFd_vkjSoyoQ "~YT AstronoGeek" youtube space #+end_src *** Engineering #+begin_src conf - https://www.youtube.com/feeds/videos.xml?channel_id=UCotwjyJnb-4KW7bmsOoLfkg "~YT Art of the Problem" youtube engineering - https://www.youtube.com/feeds/videos.xml?channel_id=UCR1IuLEqb6UEA_zQ81kwXfg "~YT Real Engineering" youtube engineering - https://www.youtube.com/feeds/videos.xml?channel_id=UCfsznjef2zGJnrCRQBXqo6Q "~YT Machine Thinking" youtube engineering - https://www.youtube.com/feeds/videos.xml?channel_id=UC2bkHVIDjXS7sgrgjFtzOXQ "~YT engineerguy" youtube engineering - https://www.youtube.com/feeds/videos.xml?channel_id=UCivA7_KLKWo43tFcCkFvydw "~YT Applied Science" youtube science engineering - https://www.youtube.com/feeds/videos.xml?channel_id=UCk0fGHsCEzGig-rSzkfCjMw "~YT The Engineering Mindset" youtube engineering - https://www.youtube.com/feeds/videos.xml?channel_id=UC5_Y-BKzq1uW_2rexWkUzlA "~YT New Mind" youtube engineering +https://www.youtube.com/feeds/videos.xml?channel_id=UCotwjyJnb-4KW7bmsOoLfkg "~YT Art of the Problem" youtube engineering +https://www.youtube.com/feeds/videos.xml?channel_id=UCR1IuLEqb6UEA_zQ81kwXfg "~YT Real Engineering" youtube engineering +https://www.youtube.com/feeds/videos.xml?channel_id=UCfsznjef2zGJnrCRQBXqo6Q "~YT Machine Thinking" youtube engineering +https://www.youtube.com/feeds/videos.xml?channel_id=UC2bkHVIDjXS7sgrgjFtzOXQ "~YT engineerguy" youtube engineering +https://www.youtube.com/feeds/videos.xml?channel_id=UCivA7_KLKWo43tFcCkFvydw "~YT Applied Science" youtube science engineering +https://www.youtube.com/feeds/videos.xml?channel_id=UCk0fGHsCEzGig-rSzkfCjMw "~YT The Engineering Mindset" youtube engineering +https://www.youtube.com/feeds/videos.xml?channel_id=UC5_Y-BKzq1uW_2rexWkUzlA "~YT New Mind" youtube engineering #+end_src + *** Random - Fun - Others #+begin_src conf - https://www.youtube.com/feeds/videos.xml?channel_id=UCJM10Rp7G0h9j5S92QszJ5Q "~YT Tales From The Click" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCCMxHHciWRBBouzk-PGzmtQ "~YT Bazar du Grenier" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCTt2AnK--mnRmICnf-CCcrw "~YT Le Rire Jaune" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCJRljQ8OcyfzHBYpS_bDbow "~YT La Mezzanine" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCVTAmJvZOxuj9Kto8Ty9L8Q "~YT Rapha Gaming" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCTafEJoRl5myC8A50plIrng "~YT FabienOlicard" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCZeyUZmGAyRLDfM2ir3q-OQ "~YT Captain Popcorn" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCwzxu1j19ICnfW5zrBvUw-w "~YT Une bière et Jivay" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCPF7JOWMDWZmnP_cQfyAezg "~YT Scinéma" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCUK0HBIBWgM2c4vsPhkYY4w "~YT The Slow Mo Guys" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCxeA1l2E5AYrtpkqUbBEg3A "~YT Pierre Lecourt" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCYD22MFqaNqXp-ogTMosW_A "~YT Le Show Jaune" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UC4HANn7TBY-xcION-eL3rLA "~YT Daniil le Russe" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCf0mOxfawezlHIVuHd3L2VA "~YT Didi Chandouidoui" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCw3tZ7g_FljNjzGprCuptpA "~YT Taupe10" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCfXXAQ-mp1uUcvSpvMcAAtw "~YT LinksTheSun" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCWeg2Pkate69NFdBeuRFTAw "~YT Squeezie" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCtI6_1vGanPlH5lgVIDjJGQ "~YT MrAntoineDaniel" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCm3C3OSgcyzaTBXrNRupB3Q "~YT Le Woop" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCuBzVunAVbcwzMfQaJVacuw "~YT LE ROI DES RATS" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCyWqModMQlbIo8274Wh_ZsQ "~YT Cyprien" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCAFQjCZo5okIPkHUQlBZM-g "~YT Bonjour Tristesse" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCoZoRz4-y6r87ptDp4Jk74g "~YT Palmashow" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCww2zZWg4Cf5xcRKG-ThmXQ "~YT NORMAN FAIT DES VIDÉOS" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCkEa1AfdeB93-he4VziKGFg "~YT JIGMÉ" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCND0gjuG9ltEWDvh82VJITg "~YT Jeannot Nymouce" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCP5tjEmvPItGyLhmjdwP7Ww "~YT RealLifeLore" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCwbV8cTR4yBgFdfa_BXV2OA "~YT Le Fossoyeur de Films" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCGgvKW19IWVvUUblrr8EgHA "~YT Experimentboy 2" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCJZ94qp4dtCw0Q5UQqAkg7w "~YT larsandersen23" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UCDPK_MTu3uTUFJXRVcTJcEw "~YT Mcfly et Carlito" youtube random - https://www.youtube.com/feeds/videos.xml?channel_id=UC2_OG1L8DLTzQ7UrZVOk7OA "~YT Axolot" youtube random - +https://www.youtube.com/feeds/videos.xml?channel_id=UCJM10Rp7G0h9j5S92QszJ5Q "~YT Tales From The Click" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCCMxHHciWRBBouzk-PGzmtQ "~YT Bazar du Grenier" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCTt2AnK--mnRmICnf-CCcrw "~YT Le Rire Jaune" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCJRljQ8OcyfzHBYpS_bDbow "~YT La Mezzanine" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCVTAmJvZOxuj9Kto8Ty9L8Q "~YT Rapha Gaming" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCTafEJoRl5myC8A50plIrng "~YT FabienOlicard" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCZeyUZmGAyRLDfM2ir3q-OQ "~YT Captain Popcorn" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCwzxu1j19ICnfW5zrBvUw-w "~YT Une bière et Jivay" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCPF7JOWMDWZmnP_cQfyAezg "~YT Scinéma" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCUK0HBIBWgM2c4vsPhkYY4w "~YT The Slow Mo Guys" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCxeA1l2E5AYrtpkqUbBEg3A "~YT Pierre Lecourt" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCYD22MFqaNqXp-ogTMosW_A "~YT Le Show Jaune" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UC4HANn7TBY-xcION-eL3rLA "~YT Daniil le Russe" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCf0mOxfawezlHIVuHd3L2VA "~YT Didi Chandouidoui" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCw3tZ7g_FljNjzGprCuptpA "~YT Taupe10" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCfXXAQ-mp1uUcvSpvMcAAtw "~YT LinksTheSun" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCWeg2Pkate69NFdBeuRFTAw "~YT Squeezie" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCtI6_1vGanPlH5lgVIDjJGQ "~YT MrAntoineDaniel" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCm3C3OSgcyzaTBXrNRupB3Q "~YT Le Woop" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCuBzVunAVbcwzMfQaJVacuw "~YT LE ROI DES RATS" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCyWqModMQlbIo8274Wh_ZsQ "~YT Cyprien" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCAFQjCZo5okIPkHUQlBZM-g "~YT Bonjour Tristesse" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCoZoRz4-y6r87ptDp4Jk74g "~YT Palmashow" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCww2zZWg4Cf5xcRKG-ThmXQ "~YT NORMAN FAIT DES VIDÉOS" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCkEa1AfdeB93-he4VziKGFg "~YT JIGMÉ" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCND0gjuG9ltEWDvh82VJITg "~YT Jeannot Nymouce" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCP5tjEmvPItGyLhmjdwP7Ww "~YT RealLifeLore" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCwbV8cTR4yBgFdfa_BXV2OA "~YT Le Fossoyeur de Films" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCGgvKW19IWVvUUblrr8EgHA "~YT Experimentboy 2" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCJZ94qp4dtCw0Q5UQqAkg7w "~YT larsandersen23" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UCDPK_MTu3uTUFJXRVcTJcEw "~YT Mcfly et Carlito" youtube random +https://www.youtube.com/feeds/videos.xml?channel_id=UC2_OG1L8DLTzQ7UrZVOk7OA "~YT Axolot" youtube random #+end_src diff --git a/notifications.org b/notifications.org index 5d40dce..c94974c 100644 --- a/notifications.org +++ b/notifications.org @@ -5,232 +5,232 @@ * Global #+begin_src conf - [global] +[global] #+end_src ** Display #+begin_src conf - # Which monitor should the notifications be displayed on. - monitor = 0 +# Which monitor should the notifications be displayed on. +monitor = 0 - # Display notification on focused monitor. Possible modes are: - # mouse: follow mouse pointer - # keyboard: follow window with keyboard focus - # none: don't follow anything - # - # "keyboard" needs a windowmanager that exports the - # _NET_ACTIVE_WINDOW property. - # This should be the case for almost all modern windowmanagers. - # - # If this option is set to mouse or keyboard, the monitor option - # will be ignored. - follow = keyboard +# Display notification on focused monitor. Possible modes are: +# mouse: follow mouse pointer +# keyboard: follow window with keyboard focus +# none: don't follow anything +# +# "keyboard" needs a windowmanager that exports the +# _NET_ACTIVE_WINDOW property. +# This should be the case for almost all modern windowmanagers. +# +# If this option is set to mouse or keyboard, the monitor option +# will be ignored. +follow = keyboard - # The geometry of the window: - # [{width}]x{height}[+/-{x}+/-{y}] - # The geometry of the message window. - # The height is measured in number of notifications everything else - # in pixels. If the width is omitted but the height is given - # ("-geometry x2"), the message window expands over the whole screen - # (dmenu-like). If width is 0, the window expands to the longest - # message displayed. A positive x is measured from the left, a - # negative from the right side of the screen. Y is measured from - # the top and down respectevly. - # The width can be negative. In this case the actual width is the - # screen width minus the width defined in within the geometry option. - geometry = "250x50-10+37" +# The geometry of the window: +# [{width}]x{height}[+/-{x}+/-{y}] +# The geometry of the message window. +# The height is measured in number of notifications everything else +# in pixels. If the width is omitted but the height is given +# ("-geometry x2"), the message window expands over the whole screen +# (dmenu-like). If width is 0, the window expands to the longest +# message displayed. A positive x is measured from the left, a +# negative from the right side of the screen. Y is measured from +# the top and down respectevly. +# The width can be negative. In this case the actual width is the +# screen width minus the width defined in within the geometry option. +geometry = "250x50-10+37" - # Show how many messages are currently hidden (because of geometry). - indicate_hidden = yes +# Show how many messages are currently hidden (because of geometry). +indicate_hidden = yes - # Shrink window if it's smaller than the width. Will be ignored if - # width is 0. - shrink = no +# Shrink window if it's smaller than the width. Will be ignored if +# width is 0. +shrink = no - # The transparency of the window. Range: [0; 100]. - # This option will only work if a compositing windowmanager is - # present (e.g. xcompmgr, compiz, etc.). - transparency = 0 +# The transparency of the window. Range: [0; 100]. +# This option will only work if a compositing windowmanager is +# present (e.g. xcompmgr, compiz, etc.). +transparency = 0 - # The height of the entire notification. If the height is smaller - # than the font height and padding combined, it will be raised - # to the font height and padding. - notification_height = 0 +# The height of the entire notification. If the height is smaller +# than the font height and padding combined, it will be raised +# to the font height and padding. +notification_height = 0 - # Draw a line of "separator_height" pixel height between two - # notifications. - # Set to 0 to disable. - separator_height = 4 +# Draw a line of "separator_height" pixel height between two +# notifications. +# Set to 0 to disable. +separator_height = 4 - # Padding between text and separator. - padding = 16 +# Padding between text and separator. +padding = 16 - # Horizontal padding. - horizontal_padding = 16 +# Horizontal padding. +horizontal_padding = 16 - # Defines width in pixels of frame around the notification window. - # Set to 0 to disable. - frame_width = 2 +# Defines width in pixels of frame around the notification window. +# Set to 0 to disable. +frame_width = 2 - # Defines color of the frame around the notification window. - frame_color = "#32302f" +# Defines color of the frame around the notification window. +frame_color = "#32302f" - # Define a color for the separator. - # possible values are: - # * auto: dunst tries to find a color fitting to the background; - # * foreground: use the same color as the foreground; - # * frame: use the same color as the frame; - # * anything else will be interpreted as a X color. - separator_color = frame +# Define a color for the separator. +# possible values are: +# * auto: dunst tries to find a color fitting to the background; +# * foreground: use the same color as the foreground; +# * frame: use the same color as the frame; +# * anything else will be interpreted as a X color. +separator_color = frame - # Don't remove messages, if the user is idle (no mouse or keyboard input) - # for longer than idle_threshold seconds. - # Set to 0 to disable. - # default 120 - idle_threshold = 120 +# Don't remove messages, if the user is idle (no mouse or keyboard input) +# for longer than idle_threshold seconds. +# Set to 0 to disable. +# default 120 +idle_threshold = 120 - # Sort messages by urgency. - sort = yes +# Sort messages by urgency. +sort = yes #+end_src ** Text #+begin_src conf - font = Hack Nerd Font 10 +font = Hack Nerd Font 10 - # The height of a single line. If the height is smaller than the - # font height, it will get raised to the font height. - # This adds empty space above and under the text. - line_height = 4 +# The height of a single line. If the height is smaller than the +# font height, it will get raised to the font height. +# This adds empty space above and under the text. +line_height = 4 - # Possible values are: - # full: Allow a small subset of html markup in notifications: - # bold - # italic - # strikethrough - # underline - # - # For a complete reference see - # . - # - # strip: This setting is provided for compatibility with some broken - # clients that send markup even though it's not enabled on the - # server. Dunst will try to strip the markup but the parsing is - # simplistic so using this option outside of matching rules for - # specific applications *IS GREATLY DISCOURAGED*. - # - # no: Disable markup parsing, incoming notifications will be treated as - # plain text. Dunst will not advertise that it has the body-markup - # capability if this is set as a global setting. - # - # It's important to note that markup inside the format option will be parsed - # regardless of what this is set to. - markup = full +# Possible values are: +# full: Allow a small subset of html markup in notifications: +# bold +# italic +# strikethrough +# underline +# +# For a complete reference see +# . +# +# strip: This setting is provided for compatibility with some broken +# clients that send markup even though it's not enabled on the +# server. Dunst will try to strip the markup but the parsing is +# simplistic so using this option outside of matching rules for +# specific applications *IS GREATLY DISCOURAGED*. +# +# no: Disable markup parsing, incoming notifications will be treated as +# plain text. Dunst will not advertise that it has the body-markup +# capability if this is set as a global setting. +# +# It's important to note that markup inside the format option will be parsed +# regardless of what this is set to. +markup = full - # The format of the message. Possible variables are: - # %a appname - # %s summary - # %b body - # %i iconname (including its path) - # %I iconname (without its path) - # %p progress value if set ([ 0%] to [100%]) or nothing - # %n progress value if set without any extra characters - # Markup is allowed - format = "%s\n%b" +# The format of the message. Possible variables are: +# %a appname +# %s summary +# %b body +# %i iconname (including its path) +# %I iconname (without its path) +# %p progress value if set ([ 0%] to [100%]) or nothing +# %n progress value if set without any extra characters +# Markup is allowed +format = "%s\n%b" - # Alignment of message text. - # Possible values are "left", "center" and "right". - alignment = left +# Alignment of message text. +# Possible values are "left", "center" and "right". +alignment = left - # Show age of message if message is older than show_age_threshold - # seconds. - # Set to -1 to disable. - show_age_threshold = 300 +# Show age of message if message is older than show_age_threshold +# seconds. +# Set to -1 to disable. +show_age_threshold = 300 - # Split notifications into multiple lines if they don't fit into - # geometry. - word_wrap = yes +# Split notifications into multiple lines if they don't fit into +# geometry. +word_wrap = yes - # Ignore newlines '\n' in notifications. - ignore_newline = no +# Ignore newlines '\n' in notifications. +ignore_newline = no - # Merge multiple notifications with the same content - stack_duplicates = false +# Merge multiple notifications with the same content +stack_duplicates = false - # Hide the count of merged notifications with the same content - hide_duplicate_count = false +# Hide the count of merged notifications with the same content +hide_duplicate_count = false - # Display indicators for URLs (U) and actions (A). - show_indicators = yes +# Display indicators for URLs (U) and actions (A). +show_indicators = yes #+end_src ** Icons #+begin_src conf - # Align icons left/right/off - icon_position = off +# Align icons left/right/off +icon_position = off - # Limit icons size. - max_icon_size=32 +# Limit icons size. +max_icon_size=32 - # Paths to default icons. - icon_path = /usr/share/icons/Arc/16x16/status/:/usr/share/icons/Arc/16x16/devices/ +# Paths to default icons. +icon_path = /usr/share/icons/Arc/16x16/status/:/usr/share/icons/Arc/16x16/devices/ #+end_src ** History #+begin_src conf - # Should a notification popped up from history be sticky or timeout - # as if it would normally do. - sticky_history = yes +# Should a notification popped up from history be sticky or timeout +# as if it would normally do. +sticky_history = yes - # Maximum amount of notifications kept in history - history_length = 20 +# Maximum amount of notifications kept in history +history_length = 20 #+end_src ** Misc/Advanced #+BEGIN_SRC conf - # dmenu path. - dmenu = /usr/bin/dmenu -p dunst: +# dmenu path. +dmenu = /usr/bin/dmenu -p dunst: - # Browser for opening urls in context menu. - browser = $BROWSER +# Browser for opening urls in context menu. +browser = $BROWSER - # Always run rule-defined scripts, even if the notification is suppressed - always_run_script = true +# Always run rule-defined scripts, even if the notification is suppressed +always_run_script = true - # Define the title of the windows spawned by dunst - title = Dunst +# Define the title of the windows spawned by dunst +title = Dunst - # Define the class of the windows spawned by dunst - class = Dunst +# Define the class of the windows spawned by dunst +class = Dunst - # Print a notification on startup. - # This is mainly for error detection, since dbus (re-)starts dunst - # automatically after a crash. - startup_notification = false +# Print a notification on startup. +# This is mainly for error detection, since dbus (re-)starts dunst +# automatically after a crash. +startup_notification = false #+end_src * Shortcuts #+BEGIN_SRC conf - [shortcuts] - # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2", - # "mod3" and "mod4" (windows-key). - close = mod1+space - history = mod1+Escape +[shortcuts] +# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2", +# "mod3" and "mod4" (windows-key). +close = mod1+space +history = mod1+Escape #+end_src * Urgency #+BEGIN_SRC conf - [urgency_low] - background = "#32302f" - foreground = "#ebdbb2" - timeout = 4 +[urgency_low] +background = "#32302f" +foreground = "#ebdbb2" +timeout = 4 - [urgency_normal] - background = "#32302f" - foreground = "#ebdbb2" - timeout = 6 +[urgency_normal] +background = "#32302f" +foreground = "#ebdbb2" +timeout = 6 - [urgency_critical] - background = "#32302f" - foreground = "#cc241d" - timeout = 0 +[urgency_critical] +background = "#32302f" +foreground = "#cc241d" +timeout = 0 #+END_SRC diff --git a/pcmanfm.org b/pcmanfm.org index 2d58041..1807750 100644 --- a/pcmanfm.org +++ b/pcmanfm.org @@ -7,36 +7,36 @@ * Config #+BEGIN_SRC conf - [config] - bm_open_method=0 +[config] +bm_open_method=0 #+END_SRC * Volume #+BEGIN_SRC conf - [volume] - mount_on_startup=0 - mount_removable=0 - autorun=0 +[volume] +mount_on_startup=0 +mount_removable=0 +autorun=0 #+END_SRC * UI #+BEGIN_SRC conf - [ui] - always_show_tabs=0 - max_tab_chars=32 - win_width=1263 - win_height=690 - splitter_pos=150 - media_in_new_tab=0 - desktop_folder_new_win=0 - change_tab_on_drop=1 - close_on_unmount=1 - focus_previous=0 - side_pane_mode=places - view_mode=icon - show_hidden=0 - sort=mtime;descending; - toolbar=newtab;navigation;home; - show_statusbar=1 - pathbar_mode_buttons=0 +[ui] +always_show_tabs=0 +max_tab_chars=32 +win_width=1263 +win_height=690 +splitter_pos=150 +media_in_new_tab=0 +desktop_folder_new_win=0 +change_tab_on_drop=1 +close_on_unmount=1 +focus_previous=0 +side_pane_mode=places +view_mode=icon +show_hidden=0 +sort=mtime;descending; +toolbar=newtab;navigation;home; +show_statusbar=1 +pathbar_mode_buttons=0 #+END_SRC diff --git a/polybar.org b/polybar.org index 0c56279..5ed1438 100644 --- a/polybar.org +++ b/polybar.org @@ -6,343 +6,343 @@ * Colors #+begin_src conf - [colors] - bg = ${xrdb:background} - red = ${xrdb:color1} - green = ${xrdb:color2} - yellow = ${xrdb:color3} - blue = ${xrdb:color4} - purple = ${xrdb:color5} - aqua = ${xrdb:color6} - gray = ${colors.color7} - darkgray = ${colors.color8} - darkred = ${xrdb:color9} - darkgreen = ${xrdb:color10} - darkyellow = ${xrdb:color11} - darkblue = ${xrdb:color12} - darkpurple = ${xrdb:color13} - darkaqua = ${xrdb:color14} - fg = ${xrdb:foreground} +[colors] +bg = ${xrdb:background} +red = ${xrdb:color1} +green = ${xrdb:color2} +yellow = ${xrdb:color3} +blue = ${xrdb:color4} +purple = ${xrdb:color5} +aqua = ${xrdb:color6} +gray = ${colors.color7} +darkgray = ${colors.color8} +darkred = ${xrdb:color9} +darkgreen = ${xrdb:color10} +darkyellow = ${xrdb:color11} +darkblue = ${xrdb:color12} +darkpurple = ${xrdb:color13} +darkaqua = ${xrdb:color14} +fg = ${xrdb:foreground} #+end_src * VM #+begin_src conf - [global/wm] - margin-top = 0 - margin-bottom = 0 +[global/wm] +margin-top = 0 +margin-bottom = 0 #+end_src * Top Bar #+BEGIN_SRC conf - [bar/top] - enable-ipc = true - override-redirect = false - bottom = false - fixed-center = false +[bar/top] +enable-ipc = true +override-redirect = false +bottom = false +fixed-center = false - width = 100% - height = 27 - radius = 0.0 +width = 100% +height = 27 +radius = 0.0 - background = ${colors.bg} - foreground = ${colors.fg} +background = ${colors.bg} +foreground = ${colors.fg} - line-size = 2 +line-size = 2 - border-size = 0 +border-size = 0 - padding-left = 2 - padding-right = 12 +padding-left = 2 +padding-right = 12 - module-margin-left = 1 - module-margin-right = 1 +module-margin-left = 1 +module-margin-right = 1 - font-0 = Hack Nerd Font:style=Medium,Regular:pixelsize=10;1 - font-1 = unifont:fontformat=truetype:size=8:antialias=false;0 - font-2 = Weather Icons:size=10;1 +font-0 = Hack Nerd Font:style=Medium,Regular:pixelsize=10;1 +font-1 = unifont:fontformat=truetype:size=8:antialias=false;0 +font-2 = Weather Icons:size=10;1 - modules-left = i3 bspwm xwindow - modules-center = - modules-right = pulseaudio wired-network wireless-network nordvpn bluetooth redshift lockscreen dunst packages unread_news unread_mail calendar temperature battery date +modules-left = i3 bspwm xwindow +modules-center = +modules-right = pulseaudio wired-network wireless-network nordvpn bluetooth redshift lockscreen dunst packages unread_news unread_mail calendar temperature battery date - wm-restack = i3 +wm-restack = i3 - tray-position = right - tray-detached = true - tray-padding = 0 - tray-background = ${colors.bg} +tray-position = right +tray-detached = true +tray-padding = 0 +tray-background = ${colors.bg} #+END_SRC * Show Windows Title #+BEGIN_SRC conf - [module/xwindow] - type = internal/xwindow - label = %title:0:30:...% +[module/xwindow] +type = internal/xwindow +label = %title:0:30:...% #+END_SRC * I3 - Information about workspaces and active one #+BEGIN_SRC conf - [module/i3] - type = internal/i3 +[module/i3] +type = internal/i3 - enable-scroll = false - wrapping-scroll = false +enable-scroll = false +wrapping-scroll = false #+END_SRC #+BEGIN_SRC conf - format = - index-sort = true +format = +index-sort = true #+END_SRC #+BEGIN_SRC conf - label-mode-foreground = ${colors.bg} - label-mode-background = ${colors.fg} - label-mode-padding = 1 +label-mode-foreground = ${colors.bg} +label-mode-background = ${colors.fg} +label-mode-padding = 1 - # focused = Active workspace on focused monitor - label-focused = %icon% %index% - label-focused-foreground = ${colors.fg} - label-focused-background = ${colors.bg} - label-focused-underline = ${colors.aqua} - label-focused-padding = 1 +# focused = Active workspace on focused monitor +label-focused = %icon% %index% +label-focused-foreground = ${colors.fg} +label-focused-background = ${colors.bg} +label-focused-underline = ${colors.aqua} +label-focused-padding = 1 - # unfocused = Inactive workspace on any monitor - label-unfocused = %icon% %index% - label-unfocused-foreground = ${colors.fg} - label-unfocused-background = ${colors.bg} - label-unfocused-underline = ${colors.bg} - label-unfocused-padding = 1 +# unfocused = Inactive workspace on any monitor +label-unfocused = %icon% %index% +label-unfocused-foreground = ${colors.fg} +label-unfocused-background = ${colors.bg} +label-unfocused-underline = ${colors.bg} +label-unfocused-padding = 1 - # visible = Active workspace on unfocused monitor - label-visible = %icon% %index% - label-visible-background = ${colors.bg} - label-visible-underline = ${colors.aqua} - label-visible-padding = 1 +# visible = Active workspace on unfocused monitor +label-visible = %icon% %index% +label-visible-background = ${colors.bg} +label-visible-underline = ${colors.aqua} +label-visible-padding = 1 - # urgent = Workspace with urgency hint set - label-urgent = %icon% %index% - label-urgent-background = ${colors.red} - label-urgent-padding = 1 +# urgent = Workspace with urgency hint set +label-urgent = %icon% %index% +label-urgent-background = ${colors.red} +label-urgent-padding = 1 #+END_SRC * BSPWM #+begin_src conf - [module/bspwm] - type = internal/bspwm +[module/bspwm] +type = internal/bspwm - pin-workspaces = true - enable-click = true - enable-scroll = false +pin-workspaces = true +enable-click = true +enable-scroll = false - ; Use fuzzy (partial) matching on labels when assigning - ; icons to workspaces - ; Example: code;♚ will apply the icon to all workspaces - ; containing 'code' in the label - fuzzy-match = false +; Use fuzzy (partial) matching on labels when assigning +; icons to workspaces +; Example: code;♚ will apply the icon to all workspaces +; containing 'code' in the label +fuzzy-match = false - ws-icon-0 = code; - ws-icon-1 = web; - ws-icon-2 = mail; - ws-icon-3 = misc; - ws-icon-4 = figs;ﬧ - ws-icon-default = +ws-icon-0 = code; +ws-icon-1 = web; +ws-icon-2 = mail; +ws-icon-3 = misc; +ws-icon-4 = figs;ﬧ +ws-icon-default = - label-focused = %icon% - label-focused-foreground = ${colors.bg} - label-focused-background = ${colors.aqua} - label-focused-underline= ${colors.aqua} - label-focused-padding = 1 +label-focused = %icon% +label-focused-foreground = ${colors.bg} +label-focused-background = ${colors.aqua} +label-focused-underline= ${colors.aqua} +label-focused-padding = 1 - label-occupied = %icon% - label-occupied-underline = ${colors.fg} - label-occupied-padding = 1 +label-occupied = %icon% +label-occupied-underline = ${colors.fg} +label-occupied-padding = 1 - label-urgent = %icon% - label-urgent-background = ${colors.red} - label-urgent-padding = 1 +label-urgent = %icon% +label-urgent-background = ${colors.red} +label-urgent-padding = 1 - label-empty = %icon% - label-empty-foreground = ${colors.fg} - label-empty-padding = 1 +label-empty = %icon% +label-empty-foreground = ${colors.fg} +label-empty-padding = 1 #+end_src * Music using MPD #+BEGIN_SRC conf - [module/mpd] - type = internal/mpd - format-online = %{A1:$TERMINAL -e "ncmpcpp" &:}%{A} +[module/mpd] +type = internal/mpd +format-online = %{A1:$TERMINAL -e "ncmpcpp" &:}%{A} - format-online-spacing = 0 - format-online-padding = 0 +format-online-spacing = 0 +format-online-padding = 0 - label-offline = mpd is offline - format-offline = - format-offline-foreground = #777 +label-offline = mpd is offline +format-offline = +format-offline-foreground = #777 - label-song = %artist% - %title% - label-song-maxlen = 30 - label-song-ellipsis = true +label-song = %artist% - %title% +label-song-maxlen = 30 +label-song-ellipsis = true - icon-prev = 寧 - icon-stop = 栗 - icon-play = 契 - icon-pause =  - icon-next = 嶺 - icon-random = 咽 - icon-repeat = 凌 +icon-prev = 寧 +icon-stop = 栗 +icon-play = 契 +icon-pause =  +icon-next = 嶺 +icon-random = 咽 +icon-repeat = 凌 - # Used to display the state of random/repeat/repeatone/single - # Only applies if is used - toggle-on-foreground = ${colors.fg} - toggle-off-foreground = ${colors.gray} +# Used to display the state of random/repeat/repeatone/single +# Only applies if is used +toggle-on-foreground = ${colors.fg} +toggle-off-foreground = ${colors.gray} - bar-progress-width = 15 - bar-progress-indicator = | - bar-progress-fill = ─ - bar-progress-empty = ─ +bar-progress-width = 15 +bar-progress-indicator = | +bar-progress-fill = ─ +bar-progress-empty = ─ #+END_SRC * Backlight level #+BEGIN_SRC conf - [module/xbacklight] - type = internal/xbacklight +[module/xbacklight] +type = internal/xbacklight - format = - ramp-0 =  - ramp-1 =  - ramp-2 =  - ramp-3 =  - ramp-4 =  - ramp-5 =  - ramp-6 =  - ramp-7 =  - ramp-8 =  - ramp-9 =  - ramp-10 =  - ramp-11 =  +format = +ramp-0 =  +ramp-1 =  +ramp-2 =  +ramp-3 =  +ramp-4 =  +ramp-5 =  +ramp-6 =  +ramp-7 =  +ramp-8 =  +ramp-9 =  +ramp-10 =  +ramp-11 =  #+END_SRC * CPU Usage #+BEGIN_SRC conf - [module/cpu] - type = internal/cpu - interval = 2 +[module/cpu] +type = internal/cpu +interval = 2 - format-prefix-foreground = ${colors.fg} - format-underline = ${colors.bg} +format-prefix-foreground = ${colors.fg} +format-underline = ${colors.bg} - label = %{A1:$TERMINAL -e "htop" &:}﬙ %percentage:2%%%{A} +label = %{A1:$TERMINAL -e "htop" &:}﬙ %percentage:2%%%{A} #+END_SRC * Date #+BEGIN_SRC conf - [module/date] - type = internal/date - interval = 1 +[module/date] +type = internal/date +interval = 1 - # Open google calendar on left right - date = %{A1:$TERMINAL -e "ikhal" &:} %d-%m%{A} - date-alt = "%{A1:$TERMINAL -e \"ikhal\" &:} %d-%m-%Y%{A}" +# Open google calendar on left right +date = %{A1:$TERMINAL -e "ikhal" &:} %d-%m%{A} +date-alt = "%{A1:$TERMINAL -e \"ikhal\" &:} %d-%m-%Y%{A}" - time =  %H:%M - time-alt =  %H:%M:%S +time =  %H:%M +time-alt =  %H:%M:%S - label = %date% %time% +label = %date% %time% #+END_SRC * Sound Volume #+BEGIN_SRC conf - [module/pulseaudio] - type = internal/pulseaudio +[module/pulseaudio] +type = internal/pulseaudio - sink = alsa_output.pci-0000_00_1f.3.analog-stereo +sink = alsa_output.pci-0000_00_1f.3.analog-stereo - # Open pavucontrol on left right - format-volume =%{A1:pavucontrol &:} %{A} +# Open pavucontrol on left right +format-volume =%{A1:pavucontrol &:} %{A} - label-volume = %percentage%% - label-volume-foreground = ${root.foreground} +label-volume = %percentage%% +label-volume-foreground = ${root.foreground} - label-muted = ﱝ muted +label-muted = ﱝ muted - bar-volume-width = 10 - bar-volume-foreground-0 = ${colors.green} - bar-volume-foreground-1 = ${colors.green} - bar-volume-foreground-2 = ${colors.blue} - bar-volume-foreground-3 = ${colors.blue} - bar-volume-foreground-4 = ${colors.red} - bar-volume-foreground-5 = ${colors.red} - bar-volume-foreground-6 = ${colors.red} - bar-volume-gradient = false - bar-volume-indicator = | - bar-volume-indicator-font = 2 - bar-volume-fill = ─ - bar-volume-fill-font = 2 - bar-volume-empty = ─ - bar-volume-empty-font = 2 - bar-volume-empty-foreground = ${colors.fg} +bar-volume-width = 10 +bar-volume-foreground-0 = ${colors.green} +bar-volume-foreground-1 = ${colors.green} +bar-volume-foreground-2 = ${colors.blue} +bar-volume-foreground-3 = ${colors.blue} +bar-volume-foreground-4 = ${colors.red} +bar-volume-foreground-5 = ${colors.red} +bar-volume-foreground-6 = ${colors.red} +bar-volume-gradient = false +bar-volume-indicator = | +bar-volume-indicator-font = 2 +bar-volume-fill = ─ +bar-volume-fill-font = 2 +bar-volume-empty = ─ +bar-volume-empty-font = 2 +bar-volume-empty-foreground = ${colors.fg} #+END_SRC * Battery #+BEGIN_SRC conf - [module/battery] - type = internal/battery +[module/battery] +type = internal/battery - battery = BAT0 - adapter = AC - full-at = 95 +battery = BAT0 +adapter = AC +full-at = 95 - format-charging = %{A1:xfce4-power-manager-settings &:} %{A} - format-charging-underline = ${colors.blue} +format-charging = %{A1:xfce4-power-manager-settings &:} %{A} +format-charging-underline = ${colors.blue} - format-discharging = %{A1:xfce4-power-manager-settings &:} %{A} - format-discharging-underline = ${colors.red} +format-discharging = %{A1:xfce4-power-manager-settings &:} %{A} +format-discharging-underline = ${colors.red} - label-full = %{A1:xfce4-power-manager-settings &:} %{A} - format-full-underline = ${colors.bg} +label-full = %{A1:xfce4-power-manager-settings &:} %{A} +format-full-underline = ${colors.bg} - ramp-capacity-0 =  - ramp-capacity-1 =  - ramp-capacity-2 =  - ramp-capacity-3 =  - ramp-capacity-4 =  +ramp-capacity-0 =  +ramp-capacity-1 =  +ramp-capacity-2 =  +ramp-capacity-3 =  +ramp-capacity-4 =  #+END_SRC * Temperature #+begin_src conf - [module/temperature] - type = internal/temperature - interval = 2 - thermal-zone = 0 - warn-temperature = 70 - hwmon-path = /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input - units = false - format = %{A1:$TERMINAL --class="Floating" -e "watch sensors" &:}