X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/ec80f07afe6f0985de1aff4d321292c93b3cb4ef..47d195d98de6df54558a7764c54b7cb871cb9c84:/rc.org diff --git a/rc.org b/rc.org index e73ff10..85cd0e2 100644 --- a/rc.org +++ b/rc.org @@ -2309,551 +2309,3 @@ xkb_symbols "us_ab" { }; #+end_src -** Zsh - -My zsh setup is built on [[https://github.com/zimfw/zimfw][Zim]]. Further, my zshrc references [[https://github.com/junegunn/fzf][fzf]], -[[https://github.com/zsh-users/zsh-autosuggestions][zsh-autosuggestions]], and [[https://github.com/hlissner/zsh-autopair][zsh-autopair]]; so be sure to have them -installed. - -*** zimrc -:PROPERTIES: -:header-args+: :tangle ~/.zimrc -:END: - -#+begin_src sh -################# -# CORE SETTINGS # -################# - -# -# Zim settings -# - -# Select what modules you would like enabled. -# The second line of modules may depend on options set by modules in the first -# line. These dependencies are noted on the respective module's README.md. -zmodules=(directory environment git git-info history input ssh utility custom \ - syntax-highlighting history-substring-search prompt completion) - - -################### -# MODULE SETTINGS # -################### - -# -# Prompt -# - -# Set your desired prompt here -zprompt_theme='pure' -#PURE_PROMPT_SYMBOL=λ -#PURE_PROMPT_SYMBOL=δ -PURE_PROMPT_SYMBOL=➜ - -# -# Completion -# - -# set an optional host-specific filename for the completion cache file -# if none is provided, the default '.zcompdump' is used. -#zcompdump_file=".zcompdump-${HOST}-${ZSH_VERSION}" - -# -# Utility -# - -# Uncomment to enable command correction prompts -# See: http://zsh.sourceforge.net/Doc/Release/Options.html#Input_002fOutput -setopt CORRECT - -# -# Environment -# - -# Set the string below to the desired terminal title format string. -# The terminal title is redrawn upon directory change, however, variables like -# ${PWD} are only evaluated once. Use prompt expansion strings for dynamic data: -# http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Simple-Prompt-Escapes -# The example below uses the following format: 'username@host:/current/directory' -ztermtitle='%n@%m:%~' - -# -# Input -# - -# Uncomment to enable double-dot expansion. -# This appends '../' to your input for each '.' you type after an initial '..' -#zdouble_dot_expand='true' - -# -# Syntax-Highlighting -# - -# This determines what highlighters will be used with the syntax-highlighting module. -# Documentation of the highlighters can be found here: -# https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md -# For (u)rxvt, termite and gnome-terminal users, -# removing the 'cursor' highlighter will fix the disappearing cursor problem -#zhighlighters=(main brackets cursor) -zhighlighters=(main brackets pattern) - -# -# SSH -# - -# Load these ssh identities with the ssh module -zssh_ids=(id_ed25519_bandali) - -# -# Pacman -# - -# Set (optional) pacman front-end. -zpacman_frontend='yay' - -# Load any helper scripts as defined here -#zpacman_helper=(aur) - - -#+end_src - -*** zlogin -:PROPERTIES: -:header-args+: :tangle ~/.zlogin -:END: - -#+begin_src sh -# -# User configuration sourced by login shells -# - -# Initialize zim -[[ -s ${ZIM_HOME}/login_init.zsh ]] && source ${ZIM_HOME}/login_init.zsh - -#+end_src - -*** zprofile -:PROPERTIES: -:header-args+: :tangle ~/.zprofile -:END: - -#+begin_src sh -#PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH" -#PATH=$HOME/.gem/ruby/2.4.0/bin:$PATH -export PATH=$HOME/.local/bin:$HOME/.cabal/bin:$HOME/.cargo/bin:$HOME/.elan/bin:$PATH -export XDG_CONFIG_HOME=$HOME/.config -export XDG_DATA_HOME=$HOME/.local/share -export XDG_DATA_DIRS=/usr/local/share:/usr/share -export MAILDIR="$HOME/mail" -export CVS_RSH=ssh -#export MATHMODELS=$HOME/src/eiffel/mathmodels -#export RUST_SRC_PATH=~/.multirust/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src -#export PATH=$PATH:$HOME/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/ - -# Eiffel2Java stuff -#export JAVA_HOME=/usr/lib/jvm/default -#export CPATH=$CPATH:"$JAVA_HOME/include:$JAVA_HOME/include/linux" -#export LIBRARY_PATH=$LIBRARY_PATH:"$JAVA_HOME/jre/lib/amd64/server" -#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$JAVA_HOME/jre/lib/amd64/server" - -#export PATH="$HOME/usr/build/pvs:$PATH" -#export SBCLISP_HOME=/usr/share/sbcl-source -#export PVS_LIBRARY_PATH="$HOME/usr/build/pvs/nasalib" - -export MOZ_USE_XINPUT2=1 # precise scrolling in firefox - -#export JAVA_HOME=/usr/lib/jvm/java-8-openjdk -#export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G" - -export NIXPKGS=$HOME/src/git/nixpkgs - -if [ -e /home/amin/.nix-profile/etc/profile.d/nix.sh ]; then . /home/amin/.nix-profile/etc/profile.d/nix.sh; fi # added by Nix installer - -export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" -export PATH="/$HOME/.config/guix/current/bin${PATH:+:}$PATH" -export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs" -export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt" -export GIT_SSL_CAINFO="$SSL_CERT_FILE" -#+end_src - -*** zshenv -:PROPERTIES: -:header-args+: :tangle ~/.zshenv -:END: - -#+begin_src sh -# Ensure that a non-login, non-interactive shell has a defined environment. -if [[ "$SHLVL" -eq 1 && ! -o LOGIN && -s "${ZDOTDIR:-$HOME}/.zprofile" ]]; then - source "${ZDOTDIR:-$HOME}/.zprofile" -fi -#+end_src - -*** zshrc -:PROPERTIES: -:header-args+: :tangle ~/.zshrc -:END: - -#+begin_src sh -# Bash-like navigation -#export WORDCHARS='*?_-.[]~=&;!#$%^(){}<>' -#export WORDCHARS='*?-[]~=&;!#$%^(){}<>' -export WORDCHARS='*?[]~=&;!#$%^(){}<>' -#ZLE_SPACE_SUFFIX_CHARS=$'|&' - -#disable -r time # disable shell reserved word -#alias time='time -p' # -p for POSIX output - -# rehash if last command was pacaur or pacman -# (so that zsh picks up changes in $PATH immediately) -TRAPUSR1() { rehash}; precmd() { [[ $history[$[ HISTCMD -1 ]] == *(pacaur|pacman)* ]] && killall -USR1 zsh } - -# -# User configuration sourced by interactive shells -# - -# Define zim location -export ZIM_HOME=${ZDOTDIR:-${HOME}}/.zim - -# Start zim -[[ -s ${ZIM_HOME}/init.zsh ]] && source ${ZIM_HOME}/init.zsh - -ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red') -#ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red,bold' - -setopt globdots - -source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh -# source ~/.zsh/zsh-autopair/autopair.zsh - - -### fzf ### - -source /usr/share/fzf/key-bindings.zsh -source /usr/share/fzf/completion.zsh - -# Accept history selection instead of putting it on -# the command line -fzf-history-widget-accept() { - fzf-history-widget - zle accept-line -} -#zle -N fzf-history-widget-accept -#bindkey '^R' fzf-history-widget-accept - -# alt+c preview -export FZF_ALT_C_OPTS="--preview 'tree -C {} | head -200'" - -### fzf ### - - -# aliases -alias mpv="mpv --ytdl-format mp4" -alias mv="mv -iv" -alias cp="cp -iv" -alias scl=systemctl -alias jcl=journalctl -alias m="mbsync csclub; mbsync uwaterloo; mbsync amin" -alias best="youtube-dl -f best" -alias sd="ssh deb" -alias sf="ssh fp" -alias sn="ssh nix" - -aur() { - cd ~/usr/build - git clone https://aur.archlinux.org/${1}.git - cd ${1} -} - -# i-beam cursor -echo -e "\033[5 q" -#echo -e "\033[6 q" - -#+end_src - -* Scripts - -This section contains various useful scripts and the ones used by the -programs above. For instance, =toggle-tablet= for switching to and -from tablet mode on my X220T, =toggle-presentation-mode= for toggling -Xfce's presentation mode which keeps the screen awake, and -=rofi-light= a small utility that uses [[https://github.com/DaveDavenport/rofi][Rofi]] to ask and [[https://github.com/haikarainen/light][light]] to set an -exact brightness value. - -** battery-percentage-time -:PROPERTIES: -:header-args+: :tangle ~/.local/bin/battery-percentage-time :shebang "#!/bin/sh" -:END: - -#+begin_src sh :tangle no -dbus_send() { - label=$1 - dbus-send --print-reply=literal --system \ - --dest=org.freedesktop.UPower \ - /org/freedesktop/UPower/devices/battery_BAT0 \ - org.freedesktop.DBus.Properties.Get \ - string:org.freedesktop.UPower.Device \ - string:"${label}" | awk '{print $3}' -} - -perc=$(dbus_send 'Percentage') -state=$(dbus_send 'State') - -if [ "$state" -eq 2 ]; then # Discharging - secs=$(dbus_send 'TimeToEmpty') -elif [ "$state" -eq 1 ]; then # Charging - secs=$(dbus_send 'TimeToFull') -fi - -printf '%s%%%%%2dh%02dm \n' "$perc" $((secs / 3600)) $((secs % 3600 / 60)) -#+end_src - -** my-i3status.py -:PROPERTIES: -:header-args+: :tangle ~/.local/bin/my-i3status.py :shebang "#!/usr/bin/env python2" -:END: - -#+begin_src python :comments none -# -*- coding: utf-8 -*- - -# This script is a simple wrapper which prefixes each i3status line with custom -# information. It is based on: -# https://github.com/i3/i3status/blob/master/contrib/wrapper.py -# -# In ~/.i3status.conf, add the following line: -# output_format = "i3bar" -# in the 'general' section. -# Then, in ~/.config/i3/config or ~/.config/sway/config add: -# status_command i3status | my-i3status.py -# in the 'bar' section. Make sure my-i3status.py is in $PATH. -# -# © 2012 Valentin Haenel -# © 2018 Amin Bandali -# -# This program is free software. It comes without any warranty, to the extent -# permitted by applicable law. You can redistribute it and/or modify it under -# the terms of the Do What The Fuck You Want To Public License (WTFPL), Version -# 2, as published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more -# details. - -import sys -import json -import os - -def get_nosleep(): - """ Return true if ~/.nosleep exists. """ - return os.path.isfile(os.path.expanduser("~/.nosleep")) - -def print_line(message): - """ Non-buffered printing to stdout. """ - sys.stdout.write(message + '\n') - sys.stdout.flush() - -def read_line(): - """ Interrupted respecting reader for stdin. """ - # try reading a line, removing any extra whitespace - try: - line = sys.stdin.readline().strip() - # i3status sends EOF, or an empty line - if not line: - sys.exit(3) - return line - # exit on ctrl-c - except KeyboardInterrupt: - sys.exit() - -if __name__ == '__main__': - # Skip the first line which contains the version header. - print_line(read_line()) - - # The second line contains the start of the infinite array. - print_line(read_line()) - - while True: - line, prefix = read_line(), '' - # ignore comma at start of lines - if line.startswith(','): - line, prefix = line[1:], ',' - - if get_nosleep(): - j = json.loads(line) - # insert information into the start of the json, but could be anywhere - j.insert(0, {'full_text' : '•', 'name' : 'nosleep'}) - # and echo back new encoded json - print_line(prefix+json.dumps(j)) - else: - print_line(prefix+line) -#+end_src - -** rofi-light -:PROPERTIES: -:header-args+: :tangle ~/.local/bin/rofi-light :shebang "#!/bin/bash" -:END: - -#+begin_src bash -cur=$(light -G) -val=$(rofi -dmenu -mesg "light $cur" -p "light -S " -l 0 -width 12) -[ -n "$val" ] && light -S $val -#+end_src - -** rofi-remmina.py -:PROPERTIES: -:header-args+: :tangle ~/.local/bin/rofi-remmina.py :shebang "#!/usr/bin/env python2" -:END: - -#+begin_src python -import ConfigParser -import os -from subprocess import Popen, PIPE - -remmina_dir = os.path.expanduser("~/.local/share/remmina") - -fdict = dict() - -for f in os.listdir(remmina_dir): - fp = os.path.join(remmina_dir, f) - c = ConfigParser.ConfigParser() - c.read(fp) - n = c.get('remmina', 'name') - fdict[n] = fp - -lines = max(min(15, len(fdict)), 1); -width = len(max(fdict.keys(), key=len)) -rofi = Popen(["rofi", "-i", "-dmenu", \ - "-l", str(lines), "-width", str(width), \ - "-p", "connection"], stdout=PIPE, stdin=PIPE) -selected = rofi.communicate("\n" \ - .join(fdict.keys()) \ - .encode("utf-8"))[0] \ - .decode("utf-8") \ - .strip() -rofi.wait() - -r = Popen(["remmina", "-c", fdict[selected]]) -r.wait() -#+end_src - -** s (run sway) -:PROPERTIES: -:header-args+: :tangle ~/.local/bin/s :shebang "#!/bin/bash" -:END: - -#+begin_src bash -export _JAVA_AWT_WM_NONREPARENTING=1 -export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true' -light -Nr 2 -source $HOME/.zprofile -sway -#+end_src - -** sway-ws-util -:PROPERTIES: -:header-args+: :tangle ~/.local/bin/sway-ws-util :shebang "#!/bin/bash" -:END: - -#+begin_src bash -curr_ws=$(swaymsg -t get_workspaces | jq -r '.[] | select(.focused==true).name') -[[ $curr_ws -eq 1 ]] && prev_ws=10 || prev_ws=$((curr_ws-1)) -[[ $curr_ws -eq 10 ]] && next_ws=1 || next_ws=$((curr_ws+1)) -dest_ws=-1 -op=-1 - -if [ "$1" = "switch" ] || [ "$1" = "move" ]; then - op="$1" - if [ "$2" = "prev" ]; then - dest_ws="$prev_ws" - elif [ "$2" = "next" ]; then - dest_ws="$next_ws" - else - echo "Usage: $0 $1 {prev|next} [follow]" - exit 1 - fi -else - echo "Usage: $0 {switch|move} {prev|next} [follow]" - exit 1 -fi - -if [ "$op" = "switch" ]; then - sway workspace "$dest_ws" -elif [ "$op" = "move" ]; then - sway move container to workspace "$dest_ws" - if [ "$3" = "follow" ]; then - sway workspace "$dest_ws" - fi -fi -#+end_src - -** toggle-presentation-mode -:PROPERTIES: -:header-args+: :tangle ~/.local/bin/toggle-presentation-mode :shebang "#!/bin/bash" -:END: - -#+begin_src bash :tangle no -xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/presentation-mode -T -#+end_src - -** toggle-tablet -:PROPERTIES: -:header-args+: :tangle ~/.local/bin/toggle-tablet :shebang "#!/bin/bash" -:END: - -This script toggles between a 'normal' mode and a 'tablet' mode, doing -a few things: - -- rotates the screen using =xrandr=, so that rotating the physical - display of my X220t would have the laptop's battery on the right - hand side, -- enables touch screen, -- properly rotates the stylus pen and touch screen pointers, and -- toggles between RGB and Vertical BGR sub-pixel order. - -#+begin_src bash :tangle no -case $(xfconf-query -c pointers -p /Wacom_ISDv4_E6_Pen_stylus/Properties/Wacom_Rotation) in - 0) # Screen is not rotated, we should rotate it right (90°) - xrandr -o 3 - xfconf-query -c pointers -p /Wacom_ISDv4_E6_Pen_stylus/Properties/Wacom_Rotation -s 1 - xfconf-query -c pointers -p /Wacom_ISDv4_E6_Finger_touch/Properties/Device_Enabled -s 1 - xfconf-query -c pointers -p /Wacom_ISDv4_E6_Finger_touch/Properties/Wacom_Rotation -s 1 - xfconf-query -c xsettings -p /Xft/RGBA -s vbgr - ;; - 1) # Currently top is rotated right, we should set it normal (0°) - xrandr -o 0 - xfconf-query -c pointers -p /Wacom_ISDv4_E6_Pen_stylus/Properties/Wacom_Rotation -s 0 - xfconf-query -c pointers -p /Wacom_ISDv4_E6_Finger_touch/Properties/Wacom_Rotation -s 0 - xfconf-query -c pointers -p /Wacom_ISDv4_E6_Finger_touch/Properties/Device_Enabled -s 0 - xfconf-query -c xsettings -p /Xft/RGBA -s rgb - ;; - *) - echo "Unknown result from 'xfconf-query -c pointers -p /Wacom_ISDv4_E6_Pen_stylus/Properties/Wacom_Rotation'" >&2 - exit 1 - ;; -esac -#+end_src - -** volume-info -:PROPERTIES: -:header-args+: :tangle ~/.local/bin/volume-info :shebang "#!/bin/sh" -:END: - -#+begin_src sh :tangle no -cur_vol=$(pamixer --get-volume) - -if [ $(pamixer --get-mute) = true ]; then - printf 'mt \n' "$cur_vol" -else - printf '%02d \n' "$cur_vol" -fi -#+end_src - -** zathura-sync.sh -:PROPERTIES: -:header-args+: :tangle ~/.local/bin/zathura-sync.sh :shebang "#!/bin/sh" -:END: - -#+begin_src sh -pos="$1" -pdffile="$2" -zathura --synctex-forward "$pos" "$pdffile" || \ - ( - zathura -x "emacsclient --eval '(progn (switch-to-buffer (file-name-nondirectory \"%{input}\")) (goto-line %{line}))'" "$pdffile" & - sleep 1; zathura --synctex-forward "$pos" "$pdffile" ) -#+end_src