#+title: rc.org #+property: header-args :comments link :mkdirp yes :results silent * About This org file contains the configuration files of pretty much every program I use. The files are tangled (i.e. exported, or derived) from this file using =org-babel=. Note: This file is best viewed inside Emacs with org mode. * Configs This section contains the configuration files (dotfiles) of various programs I use. ** [[https://github.com/afewmail/afew][afew]] :PROPERTIES: :header-args+: :tangle ~/.config/afew/config :END: #+begin_quote an initial tagging script for notmuch mail #+end_quote #+begin_src conf # This is the default filter chain [SpamFilter] #[ClassifyingFilter] [KillThreadsFilter] #[ListMailsFilter] [ArchiveSentMailsFilter] sent_tag = sent [InboxFilter] #[Filter.1] #query = 'folder:amin/lists/.haskell-cafe' #tags = +lists;+lists/haskell-cafe #message = lists/haskell-cafe #[Filter.2] #query = 'folder:amin/lists/.haskell-weekly' #tags = +lists;+lists/haskell-weekly #message = lists/haskell-weekly #[Filter.3] #query = 'folder:amin/lists/.hackernewsletter' #tags = +lists;+lists/hackernewsletter #message = lists/hackernewsletter #[FolderNameFilter] #folder_blacklist = Inbox #maildir_separator = /. #folder_transforms = Drafts:draft Junk:spam Trash:deleted Sent:sent Archive:archive lists/haskell-cafe:lists/haskell-cafe #+end_src ** bspwm *** bspwmrc :PROPERTIES: :header-args+: :tangle ~/.config/bspwm/bspwmrc :shebang "#!/bin/sh" :END: #+begin_src sh sxhkd & sh ~/.fehbg & xfce4-panel -d & #compton & sleep 0.5 && pasystray --notify=all & bspc monitor -d I II III IV V VI VII VIII IX X #bspc monitor eDP-1 -d I II III IV V #bspc monitor HDMI-1 -d VI VII VIII IX X #bspc config border_width 2 #bspc config window_gap 8 bspc config window_gap 0 bspc config bottom_padding 26 bspc config split_ratio 0.52 bspc config borderless_monocle true bspc config gapless_monocle true bspc config click_to_focus button1 bspc config directional_focus_tightness low bspc rule -a Firefox desktop='^1' follow=on bspc rule -a Nightly desktop='^1' follow=on bspc rule -a Emacs desktop='^2' state=tiled follow=on #bspc rule -a Chromium desktop='^4' follow=on bspc rule -a URxvt state=floating bspc rule -a URxvt:tiled state=tiled bspc rule -a Connman-gtk state=floating bspc rule -a Xfce4-panel state=floating bspc rule -a TelegramDesktop state=floating bspc rule -a Ec state=floating bspc rule -a Pavucontrol state=floating bspc rule -a Eog state=floating bspc rule -a Seahorse state=floating bspc rule -a mpv state=floating bspc rule -a Evince state=floating bspc rule -a Meld state=floating bspc rule -a Autokey-gtk state=floating bspc rule -a Mousepad state=floating bspc rule -a Wrapper-1.0 state=floating bspc rule -a File-roller state=floating bspc rule -a Gnome-disks state=floating bspc rule -a Termite state=floating bspc rule -a Termite:tiled state=tiled bspc rule -a Thunderbird:Calendar state=floating bspc rule -a Audacity state=floating bspc rule -a Proof state=floating # pvs x-show-proof bspc rule -a Nm-connection-editor state=floating bspc rule -a Wire state=floating bspc rule -a discord state=floating bspc rule -a X2goclient state=floating bspc rule -a SimpleScreenRecorder state=floating bspc rule -a Gimp state=floating bspc rule -a Wrapper-2.0 state=floating bspc rule -a Zathura state=tiled #+end_src *** sxhkdrc :PROPERTIES: :header-args+: :tangle ~/.config/sxhkd/sxhkdrc :END: #+begin_src conf # # wm independent hotkeys # # terminal emulator super + {_,shift} + Return urxvt{_, -name tiled} #super + {_,shift} + Return # termite{_, --name=tiled} # program launcher super + space rofi -show run -display-run '> ' -display-window ' 🗔 ' super + alt + space xfce4-popup-whiskermenu # window finder super + backslash rofi -show window -display-run '> ' -display-window ' 🗔 ' # password manager alt + space rofi-pass # firefox #super + r # firefox # chromium #super + c # chromium -incognito # emacs super + e emacs # make sxhkd reload its configuration files: super + Escape pkill -USR1 -x sxhkd # volume {up,down} XF86Audio{Raise,Lower}Volume pamixer --allow-boost --{in,de}crease 5 # mute XF86AudioMute pamixer --toggle-mute # playback control XF86Audio{Play,Prev,Next} mpc {toggle,prev,next} # lock the screen super + shift + q light-locker-command -l # Toggle keyboard layout super + F7 toggle-layout # Toggle Xfce presentation mode XF86LaunchB toggle-presentation-mode # monitor brightness XF86MonBrightness{Up,Down} light -{A,U} 5 super + apostrophe rofi-light # keyboard brightness #XF86KbdBrightness{Up,Down} # kbdlight {up,down} # # bspwm hotkeys # # quit bspwm normally super + alt + Escape bspc quit # close and kill super + {w,q} bspc node -{c,k} # alternate between the tiled and monocle layout super + m bspc desktop -l next # send the newest marked node to the newest preselected node super + y bspc node newest.marked.local -n newest.!automatic.local # swap the current node and the biggest node super + g bspc node -s biggest # # state/flags # # set the window state super + {t,shift + t,s,f} bspc node -t {tiled,pseudo_tiled,floating,fullscreen} # set the node flags super + ctrl + {m,x,y,z} bspc node -g {marked,locked,sticky,private} # # focus/swap # # focus the node in the given direction super + {_,shift + }{h,j,k,l} bspc node -{f,s} {west,south,north,east} # focus the node for the given path jump super + {p,b,comma,period} bspc node -f @{parent,brother,first,second} # focus the next/previous node in the current desktop super + {_,shift + }c bspc node -f {next,prev}.local # focus the next/previous desktop in the current monitor super + bracket{left,right} bspc desktop -f {prev,next}.local # send to next/prev desktop super + shift + bracket{left,right} bspc node -d {prev,next} --follow # focus the last node/desktop super + {grave,Tab} bspc {node,desktop} -f last # focus the older or newer node in the focus history super + {o,i} bspc wm -h off; \ bspc node {older,newer} -f; \ bspc wm -h on # focus or send to the given desktop super + {_,shift + }{1-9,0} bspc {desktop -f,node -d} '^{1-9,10}' # # preselect # # preselect the direction super + ctrl + {h,j,k,l} bspc node -p {west,south,north,east} # preselect the ratio super + ctrl + {1-9} bspc node -o 0.{1-9} # cancel the preselection for the focused node super + ctrl + space bspc node -p cancel # cancel the preselection for the focused desktop super + ctrl + shift + space bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel # # move/resize # # expand a window by moving one of its side outward super + alt + {h,j,k,l} bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0} # contract a window by moving one of its side inward super + alt + shift + {h,j,k,l} bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0} # move a floating window super + {Left,Down,Up,Right} bspc node -v {-20 0,0 20,0 -20,20 0} #alt + bracket{left,right} # xdotool key --clearmodifiers ctrl+Page_{Up,Down} #+end_src ** compton :PROPERTIES: :header-args+: :tangle ~/.config/compton.conf :END: #+begin_src conf # Shadow shadow = false; # Enabled client-side shadows on windows. no-dock-shadow = true; # Avoid drawing shadows on dock/panel windows. no-dnd-shadow = true; # Don't draw shadows on DND windows. clear-shadow = true; # Zero the part of the shadow's mask behind the # window. Fix some weirdness with ARGB windows. shadow-radius = 5; # The blur radius for shadows. (default 12) shadow-offset-x = -5; # The left offset for shadows. (default -15) shadow-offset-y = -5; # The top offset for shadows. (default -15) # shadow-opacity = 0.7; # The translucency for shadows. (default .75) # shadow-red = 0.0; # Red color value of shadow. (0.0 - 1.0, defaults to 0) # shadow-green = 0.0; # Green color value of shadow. (0.0 - 1.0, defaults to 0) # shadow-blue = 0.0; # Blue color value of shadow. (0.0 - 1.0, defaults to 0) shadow-exclude = [ "n:e:Notification", "class_g = 'Chromium'", "class_g = 'Dmenu'", "class_g = 'Firefox' && argb" ]; # Exclude conditions for shadows. # shadow-exclude = "n:e:Notification"; #shadow-exclude = [ "_GTK_FRAME_EXTENTS@:c" ] # Fix dual shadow on some gtk3 powered applications shadow-ignore-shaped = true; # Avoid drawing shadow on all shaped windows # (see also: --detect-rounded-corners) # Opacity menu-opacity = 1.0; # The opacity for menus. (default 1.0) #inactive-opacity = 0.9; # Default opacity of inactive windows. (0.0 - 1.0) # active-opacity = 0.8; # Default opacity for active windows. (0.0 - 1.0) frame-opacity = 1.0; # Opacity of window titlebars and borders. (0.1 - 1.0) # inactive-opacity-override = true; # Let inactive opacity set by 'inactive-opacity' overrides # value of _NET_WM_OPACITY. Bad choice. alpha-step = 0.06; # XRender backend: Step size for alpha pictures. Increasing # it may result in less X resource usage, # Yet fading may look bad. #inactive-dim = 0.5; # Dim inactive windows. (0.0 - 1.0) #inactive-dim-fixed = true; # Do not let dimness adjust based on window opacity. # blur-background = true; # Blur background of transparent windows. # Bad performance with X Render backend. # GLX backend is preferred. # blur-background-frame = true; # Blur background of opaque windows with transparent # frames as well. blur-background-fixed = true; # Do not let blur radius adjust based on window opacity. blur-background-exclude = [ "window_type = 'dock'", "window_type = 'desktop'" ]; # Exclude conditions for background blur. # Fading fading = false; # Fade windows during opacity changes. fade-delta = 3; # The time between steps in a fade in milliseconds. (default 10). fade-in-step = 0.03; # Opacity change between steps while fading in. (default 0.028). fade-out-step = 0.03; # Opacity change between steps while fading out. (default 0.03). # no-fading-openclose = true; # Avoid fade windows in/out when opening/closing. fade-exclude = [ ]; # Exclude conditions for fading. # Other backend = "glx" # Backend to use: "xrender" or "glx". GLX backend is typically # much faster but depends on a sane driver. mark-wmwin-focused = true; # Try to detect WM windows and mark them as active. mark-ovredir-focused = true; # Mark all non-WM but override-redirect windows active (e.g. menus). use-ewmh-active-win = true; # Use EWMH _NET_WM_ACTIVE_WINDOW to determine which window is focused # instead of using FocusIn/Out events. Usually more reliable but # depends on a EWMH-compliant WM. detect-rounded-corners = false; # Detect rounded corners and treat them as rectangular when --shadow-ignore- shaped is on. detect-client-opacity = true; # Detect _NET_WM_OPACITY on client windows, useful for window # managers not passing _NET_WM_OPACITY of client windows to frame # windows. refresh-rate = 0; # For --sw-opti: Specify refresh rate of the screen. 0 for auto. vsync = "drm"; # "none", "drm", "opengl", "opengl-oml", "opengl-swc", "opengl-mswc" # See man page for more details. dbe = false; # Enable DBE painting mode. Rarely needed. paint-on-overlay = true; # Painting on X Composite overlay window. Recommended. sw-opti = false; # Limit compton to repaint at most once every 1 / refresh_rate. # Incompatible with certain VSync methods. unredir-if-possible = false; # Unredirect all windows if a full-screen opaque window is # detected, to maximize performance for full-screen windows. focus-exclude = [ ]; # A list of conditions of windows that should always be considered # focused. detect-transient = true; # Use WM_TRANSIENT_FOR to group windows, and consider windows in # the same group focused at the same time. detect-client-leader = true; # Use WM_CLIENT_LEADER to group windows. invert-color-include = [ ]; # Conditions for windows to be painted with inverted color. # GLX backend # GLX backend fine-tune options. See man page for more info. glx-no-stencil = true; # Recommended. glx-copy-from-front = false; # Useful with --glx-swap-method, # glx-use-copysubbuffermesa = true; # Recommended if it works. Breaks VSync. # glx-no-rebind-pixmap = true; # Recommended if it works. glx-no-rebind-pixmap = true; # Recommended if it works. #glx-swap-method = "4"; # See man page. glx-swap-method = "4"; # See man page. # Window type settings wintypes: { tooltip = { fade = true; shadow = false; opacity = 1; focus = true; }; menu = { shadow = false; }; dropdown_menu = { shadow = false; }; popup_menu = { shadow = false; }; utility = { shadow = false; }; # fade: Fade the particular type of windows. # shadow: Give those windows shadow # opacity: Default opacity for the type of windows. # focus: Whether to always consider windows of this type focused. }; #+end_src ** Dunst :PROPERTIES: :header-args+: :tangle ~/.config/dunst/dunstrc :END: #+begin_src conf [global] #font = Ubuntu Mono 10.5 font = Inconsolata 11 # Path to default icons. icon_folders = /usr/share/icons/Moka/16x16/status/:/usr/share/icons/Moka/16x16/devices/:/usr/share/icons/Faba-Mono/16x16/status/:/usr/share/icons/Faba-Mono/16x16/devices/:/usr/share/icons/Moka/16x16/actions/:/usr/share/icons/Moka/16x16/categories/:/usr/share/icons/Moka/16x16/mimetypes/:/usr/share/icons/Moka/16x16/apps/:/usr/share/icons/Moka/16x16/places/:/usr/share/icons/Paper/16x16/status/ icon_position = left # bold # italic # strikethrough # underline 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 # Markup is allowed format = "%s\n%b" # Sort messages by urgency sort = yes # Show how many messages are currently hidden (because of geometry) indicate_hiddenl= no # Alignment of message text. # Possible values are "left", "center" and "right" alignment = center # The frequency with wich text that is longer than the notification # window allows bounces back and forth. # This option conflicts with 'word_wrap'. # Set to 0 to disable bounce_freq = 3 # show age of message if message is older than show_age_threshold seconds. # set to -1 to disable show_age_threshold = -1 # split notifications into multiple lines if they don't fit into geometry word_wrap = yes # ignore newlines '\n' in notifications ignore_newline = no # The geometry of the message window. # geometry [{width}]x{height}][+/-{x}+/-{y}] # 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 = "410x12-12+12" #geometry = "0x0-30-30" geometry = "260x12-30-30" # 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 # 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. idle_threshold = 120 # 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 # should a notification popped up from history be sticky or # timeout as if it would normally do. sticky_history = yes # 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 = 0 show_indicators = yes # Draw a line of 'separatpr_height' pixel height between two notifications. # Set to 0 to disable separator_height = 3 # padding between text and separator padding = 8 # horizontal padding horizontal_padding = 8 # 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 = foreground # print a notification on startup # This is mainly for error detection, since dbus (re-)starts dunst # automatically after a crash. startup_notification = false # dmenu path #dmenu = /usr/bin/dmenu -p dunst: dmenu = /usr/bin/rofi -dmenu -p dunst: # browser for opening urls in context menu browser = /usr/bin/firefox -new-tab [frame] width = 0 color = "#377222" [shortcuts] # shortcuts are specified as [modifier+][modifier+]...key # available modifiers are 'ctrl', 'mod1' (the alt-key), 'mod2', 'mod3' # and 'mod4' (windows-key) # xev might be helpful to find names for keys # close notification close = ctrl+space # close all notifications close_all = ctrl+shift+space # redisplay last message(s) # On the US keyboard layout 'grave' is normally above TAB and left of '1'. history = ctrl+shift+h # context menu context = ctrl+shift+period [urgency_low] # IMPORTANT: colors have to be defined in quotation marks. # Otherwise the '#' and following would be interpreted as a comment. background = "#1d2a30" foreground = "#71c2af" timeout = 3 [urgency_normal] background = "#1d2a30" foreground = "#71c2af" timeout = 0 [urgency_critical] background = "#1d2a30" foreground = "#ff9982" timeout = 0 # Every section that isn't one of the above is interpreted as a rules # to override settings for certain messages. # Messages can be matched by 'appname', 'summary', 'body' or 'icon' # and you can override the 'timeout', 'urgency', 'foreground', 'background' # and 'format'. # Shell-like globbing will get expanded. # # SCRIPTING # you can specify a script that gets run when the rule matches by setting # the 'script' option. # The script will be called as follows: # script appname summary body icon urgency # where urgency can be "LOW", "NORMAL" or "CRITICAL". # # NOTE: if you don't want a notification to be displayed, set the format to "" # NOTE: It might be helpful to run dunst -print in a terminal in order to find # fitting options for rules. #[espeak] # summary = "*" # script = dunst_espeak.sh #[script-test] # summary = "*script*" # script = dunst_test.sh #[ignore] ## This notification will not be displayed # summary = "foobar" # format = "" #[signed_on] # appname = Pidgin # summary = "*signed on*" # urgency = low # #[signed_off] # appname = Pidgin # summary = *signed off* # urgency = low # #[says] # appname = Pidgin # summary = *says* # urgency = critical # #[twitter] # appname = Pidgin # summary = *twitter.com* # urgency = normal # [xfpm-backlight] summary = *Brightness* urgency = low #+end_src ** Fontconfig :PROPERTIES: :header-args+: :tangle ~/.config/fontconfig/fonts.conf :END: #+begin_src xml rgb true hintslight true lcddefault ~/.fonts Helvetica Liberation Sans #+end_src ** Git *** gitconfig :PROPERTIES: :header-args+: :tangle ~/.gitconfig :END: **** user #+begin_src conf [user] name = Amin Bandali email = amin@aminb.org # signingkey = 4E05246AB0BF7FFB #+end_src **** signing #+begin_src conf # [commit] # gpgsign = true # [format] # signoff = true #+end_src **** core #+begin_src conf [core] autocrlf = input # CRLF -> LF on commit editor = emacsclient -t excludesfile = ~/.gitignore_global pager = "less" #+end_src **** gpg #+begin_src conf [gpg] program = gpg2 #+end_src **** alias #+begin_src conf [alias] git = !exec git # handle nested git calls, e.g. git git status aliases = config --get-regexp '^alias\\.' a = add s = status sl = status --long c = checkout cb = checkout -b b = branch r = rebase p = pull pr = pull --rebase ps = push psf = push --force #+end_src **** color #+begin_src conf [color] ui = auto [color "status"] added = green bold changed = red bold untracked = red bold [color "branch"] current = green bold remote = magenta bold [color "diff"] new = green bold old = red bold #+end_src **** status #+begin_src conf [status] # showUntrackedFiles = all short=true branch=true #+end_src **** github #+begin_src conf [github] user = aminb #+end_src *** gitignore :PROPERTIES: :header-args+: :tangle ~/.gitignore_global :END: #+begin_src conf *.orig *.py[co] *.sublime-workspace *~ .DS_Store *.elc *-autoloads.el #+end_src ** Latexmk :PROPERTIES: :header-args+: :tangle ~/.latexmkrc :END: #+begin_src conf $pdf_previewer = "start zathura %O %S"; $clean_ext = "aux out"; # $pdf_update_method = 4; # $pdf_update_command = "zathura %O %S"; # Synctex allows one to jump to from the PDF in Zathura to the source in Emacs # by Ctrl+click in the PDF. # Tell latexmk to use Zathura as a previewer, and run emacsclient as the Synctex # editor. # $pdf_previewer = 'exec zathura --synctex-forward -x \'emacsclient --no-wait +%{line} %{input}\' %O %S'; #+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. ** rofi-light :PROPERTIES: :header-args+: :tangle ~/.local/bin/rofi-light :shebang "#!/bin/bash" :END: #+begin_src sh cur=$(light -G) val=$(rofi -dmenu -mesg "light $cur" -p "light -S " -l 0 -width 8) light -S $val #+end_src ** toggle-layout :PROPERTIES: :header-args+: :tangle ~/.local/bin/toggle-layout :shebang "#!/bin/bash" :END: #+begin_src sh lang="$(setxkbmap -print | grep xkb_symbols | cut -d'+' -f 2)" if [ "$lang" = "us" ]; then setxkbmap ir else setxkbmap us # xmodmap $HOME/.Xmodmap fi #+end_src ** toggle-presentation-mode :PROPERTIES: :header-args+: :tangle ~/.local/bin/toggle-presentation-mode :shebang "#!/bin/bash" :END: #+begin_src sh xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/presentation-mode -T #+end_src