#+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. ** compton :PROPERTIES: :header-args+: :tangle ~/.config/compton.conf :END: #+begin_src conf :tangle no # 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 ** dovecot :PROPERTIES: :header-args+: :tangle "/sudo::/etc/dovecot/dovecot.conf" :END: #+begin_src conf protocols = imap listen = 127.0.0.1 log_path = /var/log/dovecot.log info_log_path = /var/log/dovecot-info.log ssl = no disable_plaintext_auth = no auth_verbose = yes auth_mechanisms = plain passdb { driver = passwd-file args = /etc/dovecot/passwd } userdb { driver = static args = uid=amin gid=amin home=/home/amin/mail/%d/%n default_fields = mail=maildir:/home/amin/mail/%d/%n/mail } # mail_home = /home/amin/mail/%d/%n # mail_location = maildir:/home/amin/mail/%d/%n/mail:LAYOUT=fs:INBOX=/home/amin/mail/%d/%n/mail/Inbox # namespace { # inbox = yes # separator = / # } mail_plugins = $mail_plugins fts fts_lucene plugin { fts = lucene fts_lucene = whitespace_chars=@. fts_autoindex = yes } #+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 :comments none :END: #+begin_src xml rgb true hintslight true lcddefault ~/.fonts Helvetica Liberation Sans #+end_src ** getmail *** getmailrc :PROPERTIES: :header-args+: :tangle ~/.getmail/getmailrc :END: #+begin_src conf [retriever] type = SimplePOP3SSLRetriever server = fencepost.gnu.org username = bandali password_command = ("gpg2", "--no-tty", "-q", "-d", "/home/amin/.passwd/gnu.gpg") port = 995 use_apop = True [destination] type = Maildir path = ~/mail/gnu/Inbox/ # [destination] # type = MDA_external # path = /usr/lib/dovecot/deliver # arguments = ('-d', 'amin@aminb.org') [options] delete = True #+end_src *** getmail.service :PROPERTIES: :header-args+: :tangle ~/.config/systemd/user/getmail.service :END: #+begin_src conf :tangle no [Unit] Description=getmail service [Service] Type=oneshot ExecStart=/usr/bin/getmail StandardOutput=syslog StandardError=syslog #+end_src *** getmail.timer :PROPERTIES: :header-args+: :tangle ~/.config/systemd/user/getmail.timer :END: #+begin_src conf :tangle no [Unit] Description=getmail timer [Timer] OnCalendar=*:0/30 Persistent=true Unit=getmail.service [Install] WantedBy=timers.target #+end_src ** Git *** gitconfig :PROPERTIES: :header-args+: :tangle ~/.gitconfig :END: **** user #+begin_src conf [user] name = Amin Bandali email = bandali@gnu.org signingkey = BE6273738E616D6D1B3A08E8A21A020248816103 #+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 nmam = "!f() { notmuch show --format=raw $1 | git am -; }; f" nmam3 = "!f() { notmuch show --format=raw $1 | git am -3 -; }; f" #+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 **** send-email #+begin_src conf [sendemail] smtpuser = bandali smtpserver = fencepost.gnu.org smtpserverport = 587 smtpencryption = tls annotate = yes #+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 ** GnuPG :PROPERTIES: :header-args+: :tangle ~/.gnupg/gpg-agent.conf :END: #+begin_src conf default-cache-ttl 43200 max-cache-ttl 43200 default-cache-ttl-ssh 10800 max-cache-ttl-ssh 10800 # pinentry-program /usr/bin/pinentry-qt #+end_src ** GTK *** gtk-2.0 :PROPERTIES: :header-args+: :tangle ~/.gtkrc-2.0 :END: #+begin_src conf gtk-theme-name="Greybird" gtk-icon-theme-name="Paper" gtk-font-name="Ubuntu 10" gtk-menu-images=0 # gtk-key-theme-name = "Emacs" #+end_src *** gtk-3.0 :PROPERTIES: :header-args+: :tangle ~/.config/gtk-3.0/settings.ini :END: #+begin_src conf :tangle no [Settings] gtk-icon-theme-name = Paper # gtk-theme-name = Adwaita gtk-theme-name = Greybird # gtk-theme-name = Arc-Darker # gtk-theme-name = Numix-ArchBlue gtk-font-name = Ubuntu 10 # gtk-key-theme-name = Emacs #+end_src ** [[https://github.com/Leinnan/i3gs][i3gs]] :PROPERTIES: :header-args+: :tangle ~/.config/i3gs/config :END: #+begin_src conf :comments none :tangle no borders_width=0 0 2 0 separator_width=10 #[mpd] #preset=MPD #title= #borders_color=#7FDBFF [ram] preset=RAM title= borders_color=#3D9970 #[cpu] #preset=CPU #title= #borders_color=#2ECC40 #[hdd] #preset=HDD #title= #borders_color=#01FF70 [volume] command=volume-info title= borders_color=#7FDBFF [battery] preset=BAT command=battery-percentage-time title= borders_color=#39CCCC [wifi] preset=WIFI title= borders_color=#01FF70 [date] preset=DATE command=date '+%-I:%M, %a %b %d ' title= borders_color=#FFDC00 separator_width=0 #+end_src ** i3status :PROPERTIES: :header-args+: :tangle ~/.config/i3status/config :END: #+begin_src conf :comments none # i3status configuration file. # see "man i3status" for documentation. # It is important that this file is edited as UTF-8. # The following line should contain a sharp s: # ß # If the above line is not correctly displayed, fix your editor first! general { colors = true interval = 5 output_format = "i3bar" } # order += "ipv6" order += "disk /" order += "disk /data" # order += "wireless _first_" order += "ethernet _first_" order += "battery 0" order += "volume master" order += "load" order += "tztime local" wireless _first_ { format_up = "W:%quality %essid %ip" format_down = "W: down" } ethernet _first_ { # if you use %speed, i3status requires root privileges format_up = "E: %ip (%speed)" format_down = "E: down" } battery 0 { format = "%status %percentage %remaining (%consumption)" path = "/sys/class/power_supply/BAT%d/uevent" low_threshold = "10" threshold_type = "percentage" last_full_capacity = true integer_battery_capacity = true hide_seconds = true } tztime local { format = "%-I:%M%P %a %b %d" } volume master { format = "♪ %volume" format_muted = "🔇 %volume" device = "pulse" } load { format = "%1min" } disk "/" { format = "/ %avail" } disk "/data" { format = "/data %avail" } #+end_src ** isync *** mbsyncrc :PROPERTIES: :header-args+: :tangle ~/.mbsyncrc :END: #+begin_src conf # Global defaults CopyArrivalDate yes Create Both Expunge Both ###### IMAPAccount amin Host mail.aminb.org User amin@aminb.org PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/amin.gpg" SSLType IMAPS IMAPStore amin-remote Account amin IMAPAccount amin-dovecot Host 127.0.0.1 Port 143 User amin@aminb.org PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/amin-dovecot.gpg" SSLType None IMAPStore amin-local Account amin-dovecot Channel amin Master :amin-remote: Slave :amin-local: Patterns * ###### IMAPAccount uwaterloo Host connect.uwaterloo.ca User abandali PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/uwaterloo.gpg" SSLType IMAPS IMAPStore uwaterloo-remote Account uwaterloo IMAPAccount uwaterloo-dovecot Host 127.0.0.1 Port 143 User abandali@uwaterloo.ca PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/uwaterloo-dovecot.gpg" SSLType None IMAPStore uwaterloo-local Account uwaterloo-dovecot Channel uwaterloo Master :uwaterloo-remote: Slave :uwaterloo-local: Patterns * ###### IMAPAccount csclub Host mail.csclub.uwaterloo.ca User abandali PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/csclub.gpg" SSLType IMAPS IMAPStore csclub-remote Account csclub IMAPAccount csclub-dovecot Host 127.0.0.1 Port 143 User abandali@csclub.uw PassCmd "gpg -q --for-your-eyes-only --no-tty -d ~/.passwd/csclub-dovecot.gpg" SSLType None IMAPStore csclub-local Account csclub-dovecot Channel csclub Master :csclub-remote: Slave :csclub-local: Patterns * #+end_src *** mbsync.service :PROPERTIES: :header-args+: :tangle ~/.config/systemd/user/mbsync.service :END: #+begin_src conf :tangle no [Unit] Description=mbsync service [Service] Type=oneshot ExecStart=/usr/bin/mbsync -Va StandardOutput=syslog StandardError=syslog #+end_src *** mbsync.timer :PROPERTIES: :header-args+: :tangle ~/.config/systemd/user/mbsync.timer :END: #+begin_src conf :tangle no [Unit] Description=mbsync timer [Timer] OnCalendar=*:0/15 Persistent=true Unit=mbsync.service [Install] WantedBy=timers.target #+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 ** libinput Improve XPS 15 9560's touchpad experience. # begin_src conf :tangle (when (and (eq system-type 'gnu/linux) (string= (system-name) "plasma")) "/sudo::/etc/X11/xorg.conf.d/30-touchpad.conf") #+begin_src conf :tangle no Section "InputClass" Identifier "libinput touchpad catchall" Driver "libinput" MatchIsTouchpad "on" Option "ClickMethod" "clickfinger" Option "NaturalScrolling" "true" Option "Tapping" "on" Option "TappingButtonMap" "lrm" EndSection #+end_src ** mkinitcpio #+begin_src conf :tangle /sudo::/etc/mkinitcpio.conf :comments none # vim:set ft=sh # MODULES # The following modules are loaded before any boot hooks are # run. Advanced users may wish to specify all system modules # in this array. For instance: # MODULES=(piix ide_disk reiserfs) MODULES=(i915) # BINARIES # This setting includes any additional binaries a given user may # wish into the CPIO image. This is run last, so it may be used to # override the actual binaries included by a given hook # BINARIES are dependency parsed, so you may safely ignore libraries BINARIES=() # FILES # This setting is similar to BINARIES above, however, files are added # as-is and are not parsed in any way. This is useful for config files. FILES=() # HOOKS # This is the most important setting in this file. The HOOKS control the # modules and scripts added to the image, and what happens at boot time. # Order is important, and it is recommended that you do not change the # order in which HOOKS are added. Run 'mkinitcpio -H ' for # help on a given hook. # 'base' is _required_ unless you know precisely what you are doing. # 'udev' is _required_ in order to automatically load modules # 'filesystems' is _required_ unless you specify your fs modules in MODULES # Examples: ## This setup specifies all modules in the MODULES setting above. ## No raid, lvm2, or encrypted root is needed. # HOOKS=(base) # ## This setup will autodetect all modules for your system and should ## work as a sane default # HOOKS=(base udev autodetect block filesystems) # ## This setup will generate a 'full' image which supports most systems. ## No autodetection is done. # HOOKS=(base udev block filesystems) # ## This setup assembles a pata mdadm array with an encrypted root FS. ## Note: See 'mkinitcpio -H mdadm' for more information on raid devices. # HOOKS=(base udev block mdadm encrypt filesystems) # ## This setup loads an lvm2 volume group on a usb device. # HOOKS=(base udev block lvm2 filesystems) # ## NOTE: If you have /usr on a separate partition, you MUST include the # usr, fsck and shutdown hooks. HOOKS=(base udev autodetect modconf block keyboard encrypt lvm2 resume filesystems fsck) # COMPRESSION # Use this to compress the initramfs image. By default, gzip compression # is used. Use 'cat' to create an uncompressed image. #COMPRESSION="gzip" #COMPRESSION="bzip2" #COMPRESSION="lzma" #COMPRESSION="xz" #COMPRESSION="lzop" #COMPRESSION="lz4" # COMPRESSION_OPTIONS # Additional options for the compressor #COMPRESSION_OPTIONS=() #+end_src ** mpd :PROPERTIES: :header-args+: :tangle ~/.config/mpd/mpd.conf :END: #+begin_src conf # An example configuration file for MPD. # Read the user manual for documentation: http://www.musicpd.org/doc/user/ # Files and directories ####################################################### # # This setting controls the top directory which MPD will search to discover the # available audio files and add them to the daemon's online database. This # setting defaults to the XDG directory, otherwise the music directory will be # be disabled and audio files will only be accepted over ipc socket (using # file:// protocol) or streaming files over an accepted protocol. # music_directory "~/usr/music" # # This setting sets the MPD internal playlist directory. The purpose of this # directory is storage for playlists created by MPD. The server will use # playlist files not created by the server but only if they are in the MPD # format. This setting defaults to playlist saving being disabled. # playlist_directory "~/.mpd/playlists" # # This setting sets the location of the MPD database. This file is used to # load the database at server start up and store the database while the # server is not up. This setting defaults to disabled which will allow # MPD to accept files over ipc socket (using file:// protocol) or streaming # files over an accepted protocol. # db_file "~/.mpd/database" # # These settings are the locations for the daemon log files for the daemon. # These logs are great for troubleshooting, depending on your log_level # settings. # # The special value "syslog" makes MPD use the local syslog daemon. This # setting defaults to logging to syslog, otherwise logging is disabled. # log_file "~/.mpd/log" # # This setting sets the location of the file which stores the process ID # for use of mpd --kill and some init scripts. This setting is disabled by # default and the pid file will not be stored. # pid_file "~/.mpd/pid" # # This setting sets the location of the file which contains information about # most variables to get MPD back into the same general shape it was in before # it was brought down. This setting is disabled by default and the server # state will be reset on server start up. # state_file "~/.mpd/state" # # The location of the sticker database. This is a database which # manages dynamic information attached to songs. # sticker_file "~/.mpd/sticker.sql" # ############################################################################### # General music daemon options ################################################ # # This setting specifies the user that MPD will run as. MPD should never run as # root and you may use this setting to make MPD change its user ID after # initialization. This setting is disabled by default and MPD is run as the # current user. # #user "nobody" # # This setting specifies the group that MPD will run as. If not specified # primary group of user specified with "user" setting will be used (if set). # This is useful if MPD needs to be a member of group such as "audio" to # have permission to use sound card. # #group "nogroup" # # This setting sets the address for the daemon to listen on. Careful attention # should be paid if this is assigned to anything other then the default, any. # This setting can deny access to control of the daemon. Not effective if # systemd socket activiation is in use. # # For network #bind_to_address "any" # # And for Unix Socket #bind_to_address "~/.mpd/socket" # # This setting is the TCP port that is desired for the daemon to get assigned # to. # #port "6600" # # This setting controls the type of information which is logged. Available # setting arguments are "default", "secure" or "verbose". The "verbose" setting # argument is recommended for troubleshooting, though can quickly stretch # available resources on limited hardware storage. # #log_level "default" # # If you have a problem with your MP3s ending abruptly it is recommended that # you set this argument to "no" to attempt to fix the problem. If this solves # the problem, it is highly recommended to fix the MP3 files with vbrfix # (available from ), at which # point gapless MP3 playback can be enabled. # #gapless_mp3_playback "yes" # # Setting "restore_paused" to "yes" puts MPD into pause mode instead # of starting playback after startup. # #restore_paused "no" # # This setting enables MPD to create playlists in a format usable by other # music players. # #save_absolute_paths_in_playlists "no" # # This setting defines a list of tag types that will be extracted during the # audio file discovery process. The complete list of possible values can be # found in the user manual. #metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" # # This setting enables automatic update of MPD's database when files in # music_directory are changed. # #auto_update "yes" # # Limit the depth of the directories being watched, 0 means only watch # the music directory itself. There is no limit by default. # #auto_update_depth "3" # ############################################################################### # Symbolic link behavior ###################################################### # # If this setting is set to "yes", MPD will discover audio files by following # symbolic links outside of the configured music_directory. # #follow_outside_symlinks "yes" # # If this setting is set to "yes", MPD will discover audio files by following # symbolic links inside of the configured music_directory. # #follow_inside_symlinks "yes" # ############################################################################### # Zeroconf / Avahi Service Discovery ########################################## # # If this setting is set to "yes", service information will be published with # Zeroconf / Avahi. # #zeroconf_enabled "yes" # # The argument to this setting will be the Zeroconf / Avahi unique name for # this MPD server on the network. # #zeroconf_name "Music Player" # ############################################################################### # Permissions ################################################################# # # If this setting is set, MPD will require password authorization. The password # setting can be specified multiple times for different password profiles. # #password "password@read,add,control,admin" # # This setting specifies the permissions a user has who has not yet logged in. # #default_permissions "read,add,control,admin" # ############################################################################### # Database ####################################################################### # #database { # plugin "proxy" # host "other.mpd.host" # port "6600" #} # Input ####################################################################### # input { plugin "curl" # proxy "proxy.isp.com:8080" # proxy_user "user" # proxy_password "password" } # ############################################################################### # Audio Output ################################################################ # audio_output { type "pulse" name "pulse audio" } audio_output { type "fifo" name "my_fifo" path "/tmp/mpd.fifo" format "44100:16:2" } # MPD supports various audio output types, as well as playing through multiple # audio outputs at the same time, through multiple audio_output settings # blocks. Setting this block is optional, though the server will only attempt # autodetection for one sound card. # # An example of an ALSA output: # #audio_output { # type "alsa" # name "My ALSA Device" ## device "hw:0,0" # optional ## mixer_type "hardware" # optional ## mixer_device "default" # optional ## mixer_control "PCM" # optional ## mixer_index "0" # optional #} # # An example of an OSS output: # #audio_output { # type "oss" # name "My OSS Device" ## device "/dev/dsp" # optional ## mixer_type "hardware" # optional ## mixer_device "/dev/mixer" # optional ## mixer_control "PCM" # optional #} # # An example of a shout output (for streaming to Icecast): # #audio_output { # type "shout" # encoder "vorbis" # optional # name "My Shout Stream" # host "localhost" # port "8000" # mount "/mpd.ogg" # password "hackme" # quality "5.0" # bitrate "128" # format "44100:16:1" ## protocol "icecast2" # optional ## user "source" # optional ## description "My Stream Description" # optional ## url "http://example.com" # optional ## genre "jazz" # optional ## public "no" # optional ## timeout "2" # optional ## mixer_type "software" # optional #} # # An example of a recorder output: # #audio_output { # type "recorder" # name "My recorder" # encoder "vorbis" # optional, vorbis or lame # path "/var/lib/mpd/recorder/mpd.ogg" ## quality "5.0" # do not define if bitrate is defined # bitrate "128" # do not define if quality is defined # format "44100:16:1" #} # # An example of a httpd output (built-in HTTP streaming server): # #audio_output { # type "httpd" # name "My HTTP Stream" # encoder "vorbis" # optional, vorbis or lame # port "8000" # bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 ## quality "5.0" # do not define if bitrate is defined # bitrate "128" # do not define if quality is defined # format "44100:16:1" # max_clients "0" # optional 0=no limit #} # # An example of a pulseaudio output (streaming to a remote pulseaudio server) # #audio_output { # type "pulse" # name "My Pulse Output" ## server "remote_server" # optional ## sink "remote_server_sink" # optional #} # # An example of a winmm output (Windows multimedia API). # #audio_output { # type "winmm" # name "My WinMM output" ## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional # or ## device "0" # optional ## mixer_type "hardware" # optional #} # # An example of an openal output. # #audio_output { # type "openal" # name "My OpenAL output" ## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional #} # # An example of an sndio output. # #audio_output { # type "sndio" # name "sndio output" # mixer_type "software" #} # # An example of an OS X output: # #audio_output { # type "osx" # name "My OS X Device" ## device "Built-in Output" # optional ## channel_map "-1,-1,0,1" # optional #} # ## Example "pipe" output: # #audio_output { # type "pipe" # name "my pipe" # command "aplay -f cd 2>/dev/null" ## Or if you're want to use AudioCompress # command "AudioCompress -m | aplay -f cd 2>/dev/null" ## Or to send raw PCM stream through PCM: # command "nc example.org 8765" # format "44100:16:2" #} # ## An example of a null output (for no audio output): # #audio_output { # type "null" # name "My Null Output" # mixer_type "none" # optional #} # ############################################################################### # Normalization automatic volume adjustments ################################## # # This setting specifies the type of ReplayGain to use. This setting can have # the argument "off", "album", "track" or "auto". "auto" is a special mode that # chooses between "track" and "album" depending on the current state of # random playback. If random playback is enabled then "track" mode is used. # See for more details about ReplayGain. # This setting is off by default. # #replaygain "album" # # This setting sets the pre-amp used for files that have ReplayGain tags. By # default this setting is disabled. # #replaygain_preamp "0" # # This setting sets the pre-amp used for files that do NOT have ReplayGain tags. # By default this setting is disabled. # #replaygain_missing_preamp "0" # # This setting enables or disables ReplayGain limiting. # MPD calculates actual amplification based on the ReplayGain tags # and replaygain_preamp / replaygain_missing_preamp setting. # If replaygain_limit is enabled MPD will never amplify audio signal # above its original level. If replaygain_limit is disabled such amplification # might occur. By default this setting is enabled. # #replaygain_limit "yes" # # This setting enables on-the-fly normalization volume adjustment. This will # result in the volume of all playing audio to be adjusted so the output has # equal "loudness". This setting is disabled by default. # #volume_normalization "no" # ############################################################################### # Character Encoding ########################################################## # # If file or directory names do not display correctly for your locale then you # may need to modify this setting. # #filesystem_charset "UTF-8" # ############################################################################### #+end_src ** msmtp :PROPERTIES: :header-args+: :tangle ~/.msmtprc :END: #+begin_src conf # Set default values for all following accounts. defaults port 587 tls on auth on #tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile ~/.msmtp.log # aminb account aminb host mail.aminb.org # use `msmtp -a aminb --serverinfo --tls --tls-certcheck=off --tls-fingerprint=` to get the current fingerprint tls_fingerprint DE:5F:73:0C:F7:9A:7B:1D:55:AA:49:28:E7:28:49:24:A4:08:55:00:7A:7E:D8:7F:30:06:26:24:11:29:61:07 tls_starttls on from amin@aminb.org user amin@aminb.org passwordeval gpg2 --no-tty -q -d ~/.passwd/amin.gpg account bandali-me : aminb from amin@bandali.me # gnu account gnu host fencepost.gnu.org # use `msmtp -a gnu --serverinfo --tls --tls-certcheck=off --tls-fingerprint=` to get the current fingerprint tls_fingerprint FB:DB:E3:7D:96:22:22:20:9F:4A:FD:70:96:99:50:5C:39:B2:29:D9:47:47:52:A8:5A:4A:DF:70:9D:21:DE:C4 tls_starttls on from bandali@gnu.org user bandali passwordeval gpg2 --no-tty -q -d ~/.passwd/gnu.gpg # gnu (old) account gnu-aminb : gnu from aminb@gnu.org account gnu-amin : gnu from amin@gnu.org account gnu-mab : gnu from mab@gnu.org # uwaterloo account uwaterloo host connect.uwaterloo.ca tls_starttls on from abandali@uwaterloo.ca user abandali passwordeval gpg2 --no-tty -q -d ~/.passwd/uwaterloo.gpg tls_trust_file /etc/ssl/certs/ca-certificates.crt # csclub account csclub host mail.csclub.uwaterloo.ca tls_starttls on from abandali@csclub.uwaterloo.ca user abandali passwordeval gpg2 --no-tty -q -d ~/.passwd/csclub.gpg tls_trust_file /etc/ssl/certs/ca-certificates.crt # Set a default account account default : aminb #+end_src ** ncmpcpp *** config :PROPERTIES: :header-args+: :tangle ~/.ncmpcpp/config :END: #+begin_src conf :tangle no ############################################################## ## This is the example configuration file. Copy it to ## ## $HOME/.ncmpcpp/config or $XDG_CONFIG_HOME/ncmpcpp/config ## ## and set up your preferences. ## ############################################################## # ##### directories ###### ## ## Directory for storing ncmpcpp related files. ## Changing it is useful if you want to store ## everything somewhere else and provide command ## line setting for alternative location to config ## file which defines that while launching ncmpcpp. ## # ncmpcpp_directory = ~/.ncmpcpp # ## ## Directory for storing downloaded lyrics. It ## defaults to ~/.lyrics since other MPD clients ## (eg. ncmpc) also use that location. ## # #lyrics_directory = ~/.lyrics # ##### connection settings ##### # #mpd_host = localhost # #mpd_port = 6600 # #mpd_connection_timeout = 5 # ## Needed for tag editor and file operations to work. ## mpd_music_dir = ~/usr/music # #mpd_crossfade_time = 5 # ##### music visualizer ##### ## ## Note: In order to make music visualizer work you'll ## need to use mpd fifo output, whose format parameter ## has to be set to 44100:16:1 for mono visualization ## or 44100:16:2 for stereo visualization. Example ## configuration (it has to be put into mpd.conf): ## ## audio_output { ## type "fifo" ## name "Visualizer feed" ## path "/tmp/mpd.fifo" ## format "44100:16:2" ## } ## # visualizer_fifo_path = /tmp/mpd.fifo # ## ## Note: Below parameter is needed for ncmpcpp ## to determine which output provides data for ## visualizer and thus allow syncing between ## visualization and sound as currently there ## are some problems with it. ## # visualizer_output_name = my fifo # ## ## If you set format to 44100:16:2, make it 'yes'. ## visualizer_in_stereo = yes # ## ## Multiply received samples by given value. Very ## useful for proper visualization of quiet music. ## #visualizer_sample_multiplier = 1 # ## ## Note: Below parameter defines how often ncmpcpp ## has to "synchronize" visualizer and audio outputs. ## 30 seconds is optimal value, but if you experience ## synchronization problems, set it to lower value. ## Keep in mind that sane values start with >=10. ## # visualizer_sync_interval = 30 # ## ## Note: To enable spectrum frequency visualization ## you need to compile ncmpcpp with fftw3 support. ## # ## Available values: spectrum, wave, wave_filled, ellipse. ## visualizer_type = spectrum # #visualizer_look = ●▮ visualizer_look = "●•" # #visualizer_color = blue, cyan, green, yellow, magenta, red # ## Alternative subset of 256 colors for terminals that support it. ## #visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161 # ##### system encoding ##### ## ## ncmpcpp should detect your charset encoding ## but if it failed to do so, you can specify ## charset encoding you are using here. ## ## Note: You can see whether your ncmpcpp build ## supports charset detection by checking output ## of `ncmpcpp --version`. ## ## Note: Since MPD uses UTF-8 by default, setting ## this option makes sense only if your encoding ## is different. ## # #system_encoding = "" # ##### delays ##### # ## Time of inactivity (in seconds) after playlist ## highlighting will be disabled (0 = always on). ## #playlist_disable_highlight_delay = 5 # ## Defines how long messages are supposed to be visible. ## #message_delay_time = 5 # ##### song format ##### ## ## For a song format you can use: ## ## %l - length ## %f - filename ## %D - directory ## %a - artist ## %A - album artist ## %t - title ## %b - album ## %y - date ## %n - track number (01/12 -> 01) ## %N - full track info (01/12 -> 01/12) ## %g - genre ## %c - composer ## %p - performer ## %d - disc ## %C - comment ## %P - priority ## $R - begin right alignment ## ## If you want to make sure that a part of the format is displayed ## only when certain tags are present, you can archieve it by ## grouping them with brackets, e.g. '{%a - %t}' will be evaluated ## to 'ARTIST - TITLE' if both tags are present or '' otherwise. ## It is also possible to define a list of alternatives by providing ## several groups and separating them with '|', e.g. '{%t}|{%f}' ## will be evaluated to 'TITLE' or 'FILENAME' if the former is not ## present. ## ## Note: If you want to set limit on maximal length of a tag, just ## put the appropriate number between % and character that defines ## tag type, e.g. to make album take max. 20 terminal cells, use '%20b'. ## ## In addition, formats support markers used for text attributes. ## They are followed by character '$'. After that you can put: ## ## - 0 - default window color (discards all other colors) ## - 1 - black ## - 2 - red ## - 3 - green ## - 4 - yellow ## - 5 - blue ## - 6 - magenta ## - 7 - cyan ## - 8 - white ## - 9 - end of current color ## - b - bold text ## - u - underline text ## - r - reverse colors ## - a - use alternative character set ## ## If you don't want to use a non-color attribute anymore, just put it ## again, but this time insert character '/' between '$' and attribute ## character, e.g. {$b%t$/b}|{$r%f$/r} will display bolded title tag ## or filename with reversed colors. ## ## If you want to use 256 colors and/or background colors in formats ## (the naming scheme is described below in section about color ## definitions), it can be done with the syntax $(COLOR), e.g. to set ## the artist tag to one of the non-standard colors and make it have ## yellow background, you need to write $(197_yellow)%a$(end). Note ## that for standard colors this is interchangable with attributes ## listed above. ## ## Note: colors can be nested. ## # #song_list_format = {%a - }{%t}|{$8%f$9}$R{$3(%l)$9} # #song_status_format = {{%a{ "%b"{ (%y)}} - }{%t}}|{%f} # #song_library_format = {%n - }{%t}|{%f} # # #alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b # #alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D} # #now_playing_prefix = $b # #now_playing_suffix = $/b # #browser_playlist_prefix = "$2playlist$9 " # #selected_item_prefix = $6 # #selected_item_suffix = $9 # #modified_item_prefix = $3> $9 # ## ## Note: attributes are not supported for the following variables. ## #song_window_title_format = {%a - }{%t}|{%f} ## ## Note: Below variables are used for sorting songs in browser. ## The sort mode determines how songs are sorted, and can be used ## in combination with a sort format to specify a custom sorting format. ## Available values for browser_sort_mode are "name", "mtime", "format" ## and "noop". ## # #browser_sort_mode = name # #browser_sort_format = {%a - }{%t}|{%f} {(%l)} # ##### columns settings ##### ## ## syntax of song columns list format is "column column etc." ## ## - syntax for each column is: ## ## (width of the column)[color of the column]{displayed tag} ## ## Note: Width is by default in %, if you want a column to ## have fixed size, add 'f' after the value, e.g. (10)[white]{a} ## will be the column that take 10% of screen (so the real width ## will depend on actual screen size), whereas (10f)[white]{a} ## will take 10 terminal cells, no matter how wide the screen is. ## ## - color is optional (if you want the default one, ## leave the field empty). ## ## Note: You can give a column additional attributes by putting appropriate ## character after displayed tag character. Available attributes are: ## ## - r - column will be right aligned ## - E - if tag is empty, empty tag marker won't be displayed ## ## You can also: ## ## - give a column custom name by putting it after attributes, ## separated with character ':', e.g. {lr:Length} gives you ## right aligned column of lengths named "Length". ## ## - define sequence of tags, that have to be displayed in case ## predecessor is empty in a way similar to the one in classic ## song format, i.e. using '|' character, e.g. {a|c|p:Owner} ## creates column named "Owner" that tries to display artist ## tag and then composer and performer if previous ones are ## not available. ## # #song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l} # ##### various settings ##### # ## ## Note: Custom command that will be executed each ## time song changes. Useful for notifications etc. ## #execute_on_song_change = "" # #playlist_show_mpd_host = no # #playlist_show_remaining_time = no # #playlist_shorten_total_times = no # #playlist_separate_albums = no # ## ## Note: Possible display modes: classic, columns. ## #playlist_display_mode = columns # #browser_display_mode = classic # #search_engine_display_mode = classic # #playlist_editor_display_mode = classic # #discard_colors_if_item_is_selected = yes # #incremental_seeking = yes # #seek_time = 1 # #volume_change_step = 2 # #autocenter_mode = no # #centered_cursor = no # ## ## Note: You can specify third character which will ## be used to build 'empty' part of progressbar. ## #progressbar_look = => progressbar_look = "─╼╶" #progressbar_look = "─⊙╶" # #progressbar_boldness = yes # ## Available values: database, playlist. ## #default_place_to_search_in = database # ## Available values: classic, alternative. ## #user_interface = classic # #data_fetching_delay = yes # ## Available values: artist, album_artist, date, genre, composer, performer. ## #media_library_primary_tag = artist # ## Available values: wrapped, normal. ## #default_find_mode = wrapped # #default_tag_editor_pattern = %n - %t # #header_visibility = yes # #statusbar_visibility = yes # #titles_visibility = yes # #header_text_scrolling = yes # #cyclic_scrolling = no # #lines_scrolled = 2 # #follow_now_playing_lyrics = no # #fetch_lyrics_for_current_song_in_background = no # #store_lyrics_in_song_dir = no # #generate_win32_compatible_filenames = yes # #allow_for_physical_item_deletion = no # ## ## Note: If you set this variable, ncmpcpp will try to ## get info from last.fm in language you set and if it ## fails, it will fall back to english. Otherwise it will ## use english the first time. ## ## Note: Language has to be expressed as an ISO 639 alpha-2 code. ## #lastfm_preferred_language = en # #show_hidden_files_in_local_browser = no # ## ## How shall screen switcher work? ## ## - "previous" - switch between the current and previous screen. ## - "screen1,...,screenN" - switch between given sequence of screens. ## ## Screens available for use: help, playlist, browser, search_engine, ## media_library, playlist_editor, tag_editor, outputs, visualizer, clock. ## #screen_switcher_mode = playlist, browser # ## ## Note: You can define startup screen ## by choosing screen from the list above. ## #startup_screen = playlist # ## ## Note: You can define startup slave screen ## by choosing screen from the list above or ## an empty value for no slave screen. ## #startup_slave_screen = "" # #startup_slave_screen_focus = no # ## ## Default width of locked screen (in %). ## Acceptable values are from 20 to 80. ## # #locked_screen_width_part = 50 # #ask_for_locked_screen_width_part = yes # #jump_to_now_playing_song_at_start = yes # #ask_before_clearing_playlists = yes # #clock_display_seconds = no # #display_volume_level = yes # #display_bitrate = no # #display_remaining_time = no # ## Available values: none, basic, extended, perl. ## #regular_expressions = perl # ## ## Note: If below is enabled, ncmpcpp will ignore leading ## "The" word while sorting items in browser, tags in ## media library, etc. ## #ignore_leading_the = no # #block_search_constraints_change_if_items_found = yes # #mouse_support = yes # #mouse_list_scroll_whole_page = yes # #empty_tag_marker = # #tags_separator = " | " # #tag_editor_extended_numeration = no # #media_library_sort_by_mtime = no # #enable_window_title = yes # ## ## Note: You can choose default search mode for search ## engine. Available modes are: ## ## - 1 - use mpd built-in searching (no regexes, pattern matching) ## - 2 - use ncmpcpp searching (pattern matching with support for regexes, ## but if your mpd is on a remote machine, downloading big database ## to process it can take a while ## - 3 - match only exact values (this mode uses mpd function for searching ## in database and local one for searching in current playlist) ## # #search_engine_default_search_mode = 1 # #external_editor = nano # ## Note: set to yes if external editor is a console application. ## #use_console_editor = yes # ##### colors definitions ##### ## ## It is possible to set a background color by setting a color ## value "_", e.g. red_black will set ## foregound color to red and background color to black. ## ## In addition, for terminals that support 256 colors it ## is possible to set one of them by using a number in range ## [1, 256] instead of color name, e.g. numerical value ## corresponding to red_black is 2_1. To find out if the ## terminal supports 256 colors, run ncmpcpp and check out ## the bottom of the help screen for list of available colors ## and their numerical values. ## ## Note: due to technical limitations of ncurses, if 256 colors ## are used, it is possible to either use only the colors with ## default background color, or all pairs from 1_1 up to 254_127, ## depending on the ncurses version used. ## # #colors_enabled = yes # #empty_tag_color = cyan # #header_window_color = default # #volume_color = default # #state_line_color = default # #state_flags_color = default # #main_window_color = yellow # #color1 = white # #color2 = green # #main_window_highlight_color = yellow # #progressbar_color = black # #progressbar_elapsed_color = green # #statusbar_color = default # #alternative_ui_separator_color = black # #active_column_color = red # #window_border_color = green # #active_window_border = red # #+end_src *** bindings :PROPERTIES: :header-args+: :tangle ~/.ncmpcpp/bindings :END: #+begin_src conf :tangle no def_key "j" scroll_down def_key "k" scroll_up def_key "ctrl-u" page_up def_key "ctrl-d" page_down def_key "h" previous_column def_key "l" next_column 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 #+end_src ** notmuch *** notmuch-config :PROPERTIES: :header-args+: :tangle ~/.notmuch-config :END: #+begin_src conf # .notmuch-config - Configuration file for the notmuch mail system # # For more information about notmuch, see https://notmuchmail.org # Database configuration # # The only value supported here is 'path' which should be the top-level # directory where your mail currently exists and to where mail will be # delivered in the future. Files should be individual email messages. # Notmuch will store its database within a sub-directory of the path # configured here named ".notmuch". # [database] path=/home/amin/oldmail # User configuration # # Here is where you can let notmuch know how you would like to be # addressed. Valid settings are # # name Your full name. # primary_email Your primary email address. # other_email A list (separated by ';') of other email addresses # at which you receive email. # # Notmuch will use the various email addresses configured here when # formatting replies. It will avoid including your own addresses in the # recipient list of replies, and will set the From address based on the # address to which the original email was addressed. # [user] name=Amin Bandali primary_email=amin@aminb.org other_email=bandali@gnu.org;abandali@uwaterloo.ca; # Configuration for "notmuch new" # # The following options are supported here: # # tags A list (separated by ';') of the tags that will be # added to all messages incorporated by "notmuch new". # # ignore A list (separated by ';') of file and directory names # that will not be searched for messages by "notmuch new". # # NOTE: *Every* file/directory that goes by one of those # names will be ignored, independent of its depth/location # in the mail store. # [new] tags=new; #tags=unread;inbox; ignore=.uidvalidity;.mbsyncstate;/.*/dovecot*/ # Search configuration # # The following option is supported here: # # exclude_tags # A ;-separated list of tags that will be excluded from # search results by default. Using an excluded tag in a # query will override that exclusion. # [search] exclude_tags=deleted;spam; # Maildir compatibility configuration # # The following option is supported here: # # synchronize_flags Valid values are true and false. # # If true, then the following maildir flags (in message filenames) # will be synchronized with the corresponding notmuch tags: # # Flag Tag # ---- ------- # D draft # F flagged # P passed # R replied # S unread (added when 'S' flag is not present) # # The "notmuch new" command will notice flag changes in filenames # and update tags, while the "notmuch tag" and "notmuch restore" # commands will notice tag changes and update flags in filenames # [maildir] synchronize_flags=true # Cryptography related configuration # # The following option is supported here: # # gpg_path # binary name or full path to invoke gpg. # [crypto] gpg_path=gpg #+end_src *** pre-new hook :PROPERTIES: :header-args+: :tangle ~/mail/.notmuch/hooks/pre-new :shebang "#!/bin/sh" :END: #+begin_src sh touch /tmp/gnusieve.log sieve-filter -eW -o postmaster_address=postmaster@aminb.org \ -o mail_location=maildir:$MAILDIR/gnu:LAYOUT=fs:INBOX=$MAILDIR/gnu/Inbox ~/sieve/gnu.sieve INBOX delete &>>/tmp/gnusieve.log #+end_src *** post-new hook :PROPERTIES: :header-args+: :tangle ~/mail/.notmuch/hooks/post-new :shebang "#!/bin/sh" :END: #+begin_src sh # apply sent tag to messages sent by me notmuch tag -new +sent -- from:amin@aminb.org or from:bandali@gnu.org or from:aminb@gnu.org or from:amin@gnu.org or from:mab@gnu.org or from:abandali@uwaterloo.ca # initial tagging notmuch tag -latest -- tag:latest notmuch tag +inbox +unread +latest -new -- tag:new # apply tags to lists # notmuch tag -inbox +lists/hackernewsletter -- folder:amin/lists/hackernewsletter notmuch tag -inbox +lists/haskell-weekly -- folder:amin/lists/haskell-weekly notmuch tag -inbox +pay -- folder:amin/pay notmuch tag -inbox +banking -- folder:amin/banking notmuch tag -inbox +work -- folder:amin/work # # notmuch tag -inbox +uw/cs136 -- folder:uwaterloo/lists/cs136 notmuch tag -inbox +uw/cs846 -- folder:uwaterloo/lists/cs846 notmuch tag -inbox +uw/ece750 -- folder:uwaterloo/lists/ece750 notmuch tag -inbox +uw/se212 -- folder:uwaterloo/lists/se212 notmuch tag -inbox +uw/se463 -- folder:uwaterloo/lists/se463 notmuch tag -inbox +lists/alloytools -- folder:uwaterloo/lists/alloytools notmuch tag -inbox +lists/clvsingle -- folder:uwaterloo/lists/Clvsingle notmuch tag -inbox +lists/gsa -- folder:uwaterloo/lists/GSA notmuch tag -inbox +lists/math-grad -- folder:uwaterloo/lists/Math-grad notmuch tag -inbox +lists/scs-grads -- folder:uwaterloo/lists/scs-grads notmuch tag -inbox +lists/watform-students -- folder:uwaterloo/lists/Watform-students # # notmuch tag -inbox +l/emacs-devel -- folder:gnu/l/emacs-devel notmuch tag -inbox +l/emacs-orgmode -- folder:gnu/l/emacs-orgmode notmuch tag -inbox +l/emacsconf-discuss -- folder:gnu/l/emacsconf-discuss notmuch tag -inbox +l/fencepost-users -- folder:gnu/l/fencepost-users notmuch tag -inbox +l/guix-devel -- folder:gnu/l/guix-devel notmuch tag -inbox +l/guile-devel -- folder:gnu/l/guile-devel notmuch tag -inbox +l/help-gnu-emacs -- folder:gnu/l/help-gnu-emacs notmuch tag -inbox +l/info-gnu-emacs -- folder:gnu/l/info-gnu-emacs notmuch tag -inbox +l/www-commits -- folder:gnu/l/www-commits notmuch tag -inbox +l/www-discuss -- folder:gnu/l/www-discuss notmuch tag -inbox +webmasters -- folder:gnu/webmasters notmuch tag -inbox +l/deepspec -- folder:gnu/l/deepspec notmuch tag -inbox +l/haskell-cafe -- folder:gnu/l/haskell-cafe notmuch tag -inbox +l/haskell-art -- folder:gnu/l/haskell-art notmuch tag -inbox +l/notmuch -- folder:gnu/l/notmuch notmuch tag -inbox +l/~aminb/test-priv -- folder:gnu/l/~aminb/test-priv notmuch tag -inbox +l/~sircmpwn/sr.ht-admins -- folder:gnu/l/~sircmpwn/sr.ht-admins notmuch tag -inbox +l/~sircmpwn/sr.ht-announce -- folder:gnu/l/~sircmpwn/sr.ht-announce notmuch tag -inbox +l/~sircmpwn/sr.ht-dev -- folder:gnu/l/~sircmpwn/sr.ht-dev notmuch tag -inbox +l/~sircmpwn/sr.ht-discuss -- folder:gnu/l/~sircmpwn/sr.ht-discuss # notmuch tag -inbox -unread +archive/notmuch -- path:archive/notmuch/** notmuch tag -inbox -unread +archive/emacs-devel -- path:archive/emacs-devel/** #+end_src *** notmuch.service :PROPERTIES: :header-args+: :tangle ~/.config/systemd/user/notmuch.service :END: #+begin_src conf :tangle no [Unit] Description=notmuch service [Service] Type=oneshot ExecStart=/usr/bin/notmuch new StandardOutput=syslog StandardError=syslog #+end_src *** notmuch.timer :PROPERTIES: :header-args+: :tangle ~/.config/systemd/user/notmuch.timer :END: #+begin_src conf :tangle no [Unit] Description=notmuch timer [Timer] OnCalendar=*:0/5 Persistent=true Unit=notmuch.service [Install] WantedBy=timers.target #+end_src ** pacman *** conf #+begin_src conf :tangle /sudo::/etc/pacman.conf :comments none # # /etc/pacman.conf # # See the pacman.conf(5) manpage for option and repository directives # # GENERAL OPTIONS # [options] # The following paths are commented out with their default values listed. # If you wish to use different paths, uncomment and update the paths. #RootDir = / #DBPath = /var/lib/pacman/ #CacheDir = /var/cache/pacman/pkg/ #LogFile = /var/log/pacman.log #GPGDir = /etc/pacman.d/gnupg/ #HookDir = /etc/pacman.d/hooks/ HoldPkg = pacman glibc #XferCommand = /usr/bin/curl -L -C - -f -o %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #CleanMethod = KeepInstalled #UseDelta = 0.7 Architecture = auto # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup #IgnorePkg = #IgnoreGroup = #NoUpgrade = #NoExtract = # Misc options #UseSyslog Color TotalDownload CheckSpace VerbosePkgLists # By default, pacman accepts packages signed by keys that its local keyring # trusts (see pacman-key and its man page), as well as unsigned packages. SigLevel = Required DatabaseOptional LocalFileSigLevel = Optional #RemoteFileSigLevel = Required # NOTE: You must run `pacman-key --init` before first using pacman; the local # keyring can then be populated with the keys of all Arch/Parabola packagers # with `pacman-key --populate archlinux` and `pacman-key --populate parabola`. # # REPOSITORIES # - can be defined here or included from another file # - pacman will search repositories in the order defined here # - local/custom mirrors can be added here or in separate files # - repositories listed first will take precedence when packages # have identical names, regardless of version number # - URLs will have $repo replaced by the name of the current repo # - URLs will have $arch replaced by the name of the architecture # # Repository entries are of the format: # [repo-name] # Server = ServerName # Include = IncludePath # # The header [repo-name] is crucial - it must be present and # uncommented to enable the repo. # # The testing repositories are disabled by default. To enable, uncomment the # repo name header and Include lines. You can add preferred servers immediately # after the header, and they will be used before the default mirrors. # NOTE: Nonprism is a particular repository that aims to provide software built # and patched without services under global data surveillance programs like PRISM, # XKeyscore and Tempora. For more info see: https://wiki.parabola.nu/Nonprism #[nonprism-testing] #Include = /etc/pacman.d/mirrorlist #[nonprism] #Include = /etc/pacman.d/mirrorlist [libre-testing] Include = /etc/pacman.d/mirrorlist [libre] Include = /etc/pacman.d/mirrorlist #[testing] #Include = /etc/pacman.d/mirrorlist [core] Include = /etc/pacman.d/mirrorlist [extra] Include = /etc/pacman.d/mirrorlist #[community-testing] #Include = /etc/pacman.d/mirrorlist [community] Include = /etc/pacman.d/mirrorlist # The PCR (Parabola Community Repository) contains packages maintained by trusted # members of the Parabola community. It also contains packages maintained by # Parabola developers, but that the developer decided didn't belong in core/libre. #[pcr-testing] #Include = /etc/pacman.d/mirrorlist [pcr] Include = /etc/pacman.d/mirrorlist # If you want to run 32 bit applications on your x86_64 system, # enable the libre-multilib, multilib and pcr-multilib repositories as required here. #[nonprism-multilib-testing] #Include = /etc/pacman.d/mirrorlist #[nonprism-multilib] #Include = /etc/pacman.d/mirrorlist #[libre-multilib-testing] #Include = /etc/pacman.d/mirrorlist #[libre-multilib] #Include = /etc/pacman.d/mirrorlist #[multilib-testing] #Include = /etc/pacman.d/mirrorlist #[multilib] #Include = /etc/pacman.d/mirrorlist #[pcr-multilib-testing] #Include = /etc/pacman.d/mirrorlist #[pcr-multilib] #Include = /etc/pacman.d/mirrorlist # Parabola also supports another community projects and personal repositories, to # find them check out this wiki page: https://wiki.parabola.nu/Repositories # An example of a custom package repository. See the pacman manpage for # tips on creating your own repositories. #[custom] #SigLevel = Optional TrustAll #Server = file:///home/custompkgs Include = /etc/pacman.d/*.conf #+end_src *** mirrorlist #+begin_src conf :tangle /sudo::/etc/pacman.d/mirrorlist :comments none # Parabola GNU/Linux-libre - Last Updated: Wed Dec 20 02:59:35 GMT 2017 Server = http://mirror.fsf.org/parabola/$repo/os/$arch Server = http://mirror.fsf.org/parabola/$repo/os/$arch Server = http://mirror.fsf.org/parabola/$repo/os/$arch Server = http://mirror.fsf.org/parabola/$repo/os/$arch # Location: London, UK # Responsible: Parabola Project # Note: Not really a mirror, automatically redirects you to an Arch # mirror when possible. Works best specifying it a few times in a # row (404s workaround). # Server = http://redirector.parabola.nu/$repo/os/$arch Server = https://redirector.parabola.nu/$repo/os/$arch # Location: Reykjavík, Iceland # Responsible: Parabola Project # Note: Not really a mirror, automatically redirects you to a Parabola # mirror that has the file you are looking for. # Server = http://repomirror.parabola.nu/$repo/os/$arch Server = https://repomirror.parabola.nu/$repo/os/$arch # Location: Falkenstein, Germany # Server = http://mirror.grapentin.org/parabola/$repo/os/$arch Server = https://mirror.grapentin.org/parabola/$repo/os/$arch # Location: Volendam, Netherlands Server = https://jeweet.net/repo/parabola/$repo/os/$arch # Location: Amsterdam, Netherlands # Note: Not really a mirror, but a high-speed 10GiB cache for # mirror.yandex.ru/mirrors/parabola # Server = http://parabola.isacdaavid.info:8080/$repo/os/$arch Server = https://parabola.isacdaavid.info:8081/$repo/os/$arch # Location: Moscow, Russian Federation # Server = http://mirror.yandex.ru/mirrors/parabola/$repo/os/$arch Server = https://mirror.yandex.ru/mirrors/parabola/$repo/os/$arch # Location: Ho Chi Minh City, Vietnam # Server = http://mirror.freedif.org/Parabola/$repo/os/$arch Server = https://mirror.freedif.org/Parabola/$repo/os/$arch # Location: Los Angeles, CA, USA # Note: Also visit http://alfplayer.com/ for its SNAPSHOTS ARCHIVE Server = http://alfplayer.com/parabola/$repo/os/$arch # Location: Boston, MA, USA Server = http://mirror.fsf.org/parabola/$repo/os/$arch # Location: Austin, TX, USA # Server = http://parabola.serverpit.com/ Server = https://parabola.serverpit.com/ # Location: Reykjavík, Iceland # Responsible: Parabola Project # Note: Currently pointing to repomirror.parabola.nu # Server = http://repo.parabola.nu/$repo/os/$arch Server = https://repo.parabola.nu/$repo/os/$arch #+end_src ** pigeonhole *** amin.sieve :PROPERTIES: :header-args+: :tangle ~/mail/aminb.org/amin/sieve/amin.sieve :comments none :END: #+begin_src conf require ["regex", "variables", "fileinto", "envelope", "mailbox", "imap4flags", "include"]; # webmasters if anyof ( address :is "from" ["webmasters@gnu.org", "webmasters-comment@gnu.org"]) { fileinto :create "gnu.webmasters"; stop; } include :personal "lists"; #+end_src *** lists.sieve :PROPERTIES: :header-args+: :tangle ~/mail/aminb.org/amin/sieve/lists.sieve :comments none :END: #+begin_src conf require ["regex", "variables", "fileinto", "envelope", "mailbox", "imap4flags", "include"]; # mailing lists if anyof ( header :contains "list-id" [ "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ] ) { if header :regex "list-id" "<([a-z_0-9-]+)[.@]" { set :lower "listname" "${1}"; fileinto :create "gnu.${listname}"; stop; } } # sr.ht lists, with dots ('.') omitted if anyof ( header :contains "list-id" [ "<~bandali/public-inbox@lists.sr.ht>" , "<~sircmpwn/sr.ht-admins@lists.sr.ht>" , "<~sircmpwn/sr.ht-announce@lists.sr.ht>" , "<~sircmpwn/sr.ht-dev@lists.sr.ht>" , "<~sircmpwn/sr.ht-discuss@lists.sr.ht>" ] ) { if header :regex "list-id" "(~[a-z_0-9-]+)/([^.]*)\\.?([^.]*)\\.?([^.]*)\\.?([^.]*)\\.?([^.]*)\\.?([^.]*)@" { set :lower "username" "${1}"; set :lower "listname" "${2}${3}${4}${5}${6}${7}"; fileinto :create "gnu.${username}.${listname}"; stop; } } #+end_src ** PowerTOP :PROPERTIES: :header-args+: :tangle "/sudo::/etc/systemd/system/powertop.service" :END: #+begin_src conf [Unit] Description=Powertop tunings [Service] ExecStart=/usr/bin/powertop --auto-tune RemainAfterExit=true [Install] WantedBy=multi-user.target #+end_src ** redshift :PROPERTIES: :header-args+: :tangle ~/.config/redshift.conf :comments none :END: #+begin_src conf ; Global settings for redshift [redshift] ; Set the day and night screen temperatures (Neutral is 6500K) ;temp-day=5700 ;temp-night=3500 ;temp-day=6500 temp-day=6200 ;temp-night=4800 ;temp-night=5000 ;temp-night=4500 temp-night=4000 ; Enable/Disable a smooth transition between day and night ; 0 will cause a direct change from day to night screen temperature. ; 1 will gradually increase or decrease the screen temperature. transition=1 ; Set the screen brightness. Default is 1.0. ;brightness=0.9 ; It is also possible to use different settings for day and night ; since version 1.8. ;brightness-day=0.7 ;brightness-night=0.4 ; Set the screen gamma (for all colors, or each color channel ; individually) ;gamma=0.8 ;gamma=1.0 ;gamma=0.8:0.7:0.8 ; This can also be set individually for day and night since ; version 1.10. ;gamma-day=0.8:0.7:0.8 ;gamma-night=0.6 ; Set the location-provider: 'geoclue2' or 'manual' ; type 'redshift -l list' to see possible values. ; The location provider settings are in a different section. ;location-provider=manual location-provider=geoclue2 ; Set the adjustment-method: 'randr', 'vidmode' ; type 'redshift -m list' to see all possible values. ; 'randr' is the preferred method, 'vidmode' is an older API. ; but works in some cases when 'randr' does not. ; The adjustment method settings are in a different section. adjustment-method=randr ; Configuration of the location-provider: ; type 'redshift -l PROVIDER:help' to see the settings. ; ex: 'redshift -l manual:help' ; Keep in mind that longitudes west of Greenwich (e.g. the Americas) ; are negative numbers. ;[manual] ;lat=48.1 ;lon=11.6 ; Configuration of the adjustment-method ; type 'redshift -m METHOD:help' to see the settings. ; ex: 'redshift -m randr:help' ; In this example, randr is configured to adjust screen 1. ; Note that the numbering starts from 0, so this is actually the ; second screen. If this option is not specified, Redshift will try ; to adjust _all_ screens. ;[randr] ;screen=1 #+end_src ** rofi :PROPERTIES: :header-args+: :tangle ~/.config/rofi/config :END: #+begin_src conf ! rofi.font: Ubuntu Mono 13 ! rofi.font: Inconsolata 16 ! rofi.font: Iosevka 13 ! rofi.font: Source Code Pro 11 rofi.font: Source Code Pro 10.5 rofi.modi: run,window ! rofi.width: 640 rofi.width: 600 !rofi.location: 2 !rofi.yoffset: 200 rofi.monitor: -1 !rofi.lines: 10 !rofi.theme: /usr/share/rofi/themes//Arc.rasi !rofi.theme: /usr/share/rofi/themes//Paper.rasi !rofi.theme: /usr/share/rofi/themes//sidebar.rasi rofi.theme: /usr/share/rofi/themes//gruvbox-light.rasi #+end_src ** rofi-pass :PROPERTIES: :header-args+: :tangle ~/.config/rofi-pass/config :END: #+begin_src conf # permanently set alternative root dir # root=/path/to/root # rofi command. Make sure to have "$@" as last argument _rofi () { #rofi -no-auto-select -kb-accept-entry "!Return" -i -no-levenshtein-sort "$@" rofi -i -no-auto-select -kb-accept-entry "!Return" "$@" } # xdotool needs the keyboard layout to be set using setxkbmap # You can do this in your autostart scripts (e.g. xinitrc) # If for some reason, you cannot do this, you can set the command here. # and set fix_layout to true fix_layout=false layout_cmd () { setxkbmap us } # fields to be used URL_field='url' USERNAME_field='user' AUTOTYPE_field='autotype' # delay to be used for :delay keyword delay=2 ## Programs to be used # Editor EDITOR='gvim -f' # Browser BROWSER='chromium' ## Misc settings default_do='menu' # menu, autotype, copyPass, typeUser, typePass, copyUser, copyUrl, viewEntry, typeMenu, actionMenu, copyMenu, openUrl auto_enter='false' notify='false' default_autotype='user :tab pass' # color of the help messages # leave empty for autodetection help_color="#4872FF" # Clipboard settings # Possible options: primary, clipboard, both clip=primary # Options for generating new password entries # default_user is also used for password files that have no user field. default_user=aminb default_user2=bandali password_length=30 # Custom Keybindings #autotype="Alt+1" autotype="Alt+m" type_user="Alt+2" type_pass="Alt+3" open_url="Alt+4" copy_name="Alt+u" copy_url="Alt+l" copy_pass="Alt+p" show="Alt+o" copy_entry="Alt+2" type_entry="Alt+1" copy_menu="Alt+c" action_menu="Alt+a" type_menu="Alt+t" help="Alt+h" switch="Alt+x" insert_pass="Alt+n" #+end_src ** sway *** main :PROPERTIES: :header-args+: :tangle ~/.config/sway/config :END: #+begin_src conf ### Variables # super set $mod Mod4 # alt set $mod2 Mod1 set $left h set $down j set $up k set $right l set $term urxvt set $menu rofi -show run -display-run '> ' -display-window ' 🗔 ' ### Output configuration # # Default wallpaper (more resolutions are available in __DATADIR__/backgrounds/sway/) output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill # # Example configuration: # # output HDMI-A-1 resolution 1920x1080 position 1920,0 # # You can get the names of your outputs by running: swaymsg -t get_outputs ### Idle configuration exec swayidle \ timeout 120 '[ -f ~/.nosleep ] || swaymsg "output * dpms off"' \ resume '[ -f ~/.nosleep ] || swaymsg "output * dpms on"' \ ### Key bindings # # Basics: # # start a terminal bindsym $mod+Return exec $term -name floating bindsym $mod+Shift+Return exec $term for_window [class="URxvt" instance="floating"] floating enable # kill focused window bindsym $mod+Shift+q kill # start your launcher bindsym $mod+d exec $menu # password manager bindsym $mod2+space exec rofi-pass # Drag floating windows by holding down $mod and left mouse button. # Resize them with right mouse button + $mod. # Despite the name, also works for non-floating windows. # Change normal to inverse to use left mouse button for resizing and right # mouse button for dragging. floating_modifier $mod normal # reload the configuration file bindsym $mod+Shift+c reload # exit sway (logs you out of your wayland session) # bindsym $mod+Shift+e exit bindsym $mod+apostrophe exec rofi-light # rofi-based brightness chooser bindsym XF86MonBrightnessUp exec light -A 5 # increase screen brightness bindsym XF86MonBrightnessDown exec light -U 5 # decrease screen brightness bindsym XF86AudioRaiseVolume exec pamixer --allow-boost --increase 5 bindsym XF86AudioLowerVolume exec pamixer --allow-boost --decrease 5 bindsym XF86AudioMute exec pamixer --toggle-mute bindsym XF86AudioMicMute exec pactl set-source-mute 1 toggle bindsym $mod+Shift+apostrophe exec rofi-remmina.py # choose remmina connection # original sway workspace switch and window move bindsym $mod+bracketleft workspace prev bindsym $mod+bracketright workspace next bindsym $mod+braceleft move container to workspace prev bindsym $mod+braceright move container to workspace next # bspwm-esque workspace switch and window move bindsym $mod2+bracketleft exec sway-ws-util switch prev bindsym $mod2+bracketright exec sway-ws-util switch next bindsym $mod2+braceleft exec sway-ws-util move prev follow bindsym $mod2+braceright exec sway-ws-util move next follow # # Moving around: # # Move your focus around bindsym $mod+$left focus left bindsym $mod+$down focus down bindsym $mod+$up focus up bindsym $mod+$right focus right # or use $mod+[up|down|left|right] bindsym $mod+Left focus left bindsym $mod+Down focus down bindsym $mod+Up focus up bindsym $mod+Right focus right # _move_ the focused window with the same, but add Shift bindsym $mod+Shift+$left move left bindsym $mod+Shift+$down move down bindsym $mod+Shift+$up move up bindsym $mod+Shift+$right move right # ditto, with arrow keys bindsym $mod+Shift+Left move left bindsym $mod+Shift+Down move down bindsym $mod+Shift+Up move up bindsym $mod+Shift+Right move right # # Workspaces: # # switch to workspace bindsym $mod+1 workspace 1 bindsym $mod+2 workspace 2 bindsym $mod+3 workspace 3 bindsym $mod+4 workspace 4 bindsym $mod+5 workspace 5 bindsym $mod+6 workspace 6 bindsym $mod+7 workspace 7 bindsym $mod+8 workspace 8 bindsym $mod+9 workspace 9 bindsym $mod+0 workspace 10 # move focused container to workspace bindsym $mod+Shift+1 move container to workspace 1 bindsym $mod+Shift+2 move container to workspace 2 bindsym $mod+Shift+3 move container to workspace 3 bindsym $mod+Shift+4 move container to workspace 4 bindsym $mod+Shift+5 move container to workspace 5 bindsym $mod+Shift+6 move container to workspace 6 bindsym $mod+Shift+7 move container to workspace 7 bindsym $mod+Shift+8 move container to workspace 8 bindsym $mod+Shift+9 move container to workspace 9 bindsym $mod+Shift+0 move container to workspace 10 # Note: workspaces can have any name you want, not just numbers. # We just use 1-10 as the default. # # Layout stuff: # # You can "split" the current object of your focus with # $mod+b or $mod+v, for horizontal and vertical splits # respectively. bindsym $mod+b splith bindsym $mod+v splitv # Switch the current container between different layout styles bindsym $mod+s layout stacking bindsym $mod+w layout tabbed bindsym $mod+e layout toggle split # Make the current focus fullscreen bindsym $mod+f fullscreen # Toggle sticky-ness of the current (floating) window bindsym $mod+$mod2+space sticky toggle # Toggle the current focus between tiling and floating mode bindsym $mod+Shift+space floating toggle # Swap focus between the tiling area and the floating area bindsym $mod+space focus mode_toggle # move focus to the parent container bindsym $mod+a focus parent # # Scratchpad: # # Sway has a "scratchpad", which is a bag of holding for windows. # You can send windows there and get them back later. # Move the currently focused window to the scratchpad bindsym $mod+Shift+minus move scratchpad # Show the next scratchpad window or hide the focused scratchpad window. # If there are multiple scratchpad windows, this command cycles through them. bindsym $mod+minus scratchpad show # # Resizing containers: # mode "resize" { # left will shrink the containers width # right will grow the containers width # up will shrink the containers height # down will grow the containers height bindsym $left resize shrink width 10px bindsym $down resize grow height 10px bindsym $up resize shrink height 10px bindsym $right resize grow width 10px # ditto, with arrow keys bindsym Left resize shrink width 10px bindsym Down resize grow height 10px bindsym Up resize shrink height 10px bindsym Right resize grow width 10px # return to default mode bindsym Return mode "default" bindsym Escape mode "default" } bindsym $mod+Shift+r mode "resize" # # Power button # set $mode_system System (l)ock, (e)xit sway, (s)uspend, (h)ibernate, (r)eboot, (S)hutdown mode "$mode_system" { bindsym l exec swaylock, mode "default" bindsym e exec swaymsg exit, mode "default" bindsym s exec systemctl suspend, mode "default" bindsym h exec systemctl hibernate, mode "default" bindsym r exec systemctl reboot, mode "default" bindsym Shift+s exec systemctl poweroff -i, mode "default" # back to normal: Enter, Escape, or q bindsym Return mode "default" bindsym Escape mode "default" bindsym q mode "default" } # bindsym XF86PowerOff mode "$mode_system" bindsym $mod+Shift+e mode "$mode_system" # # Presentation mode # bindsym $mod+$mod2+p exec ([ ! -e ~/.nosleep ] && touch ~/.nosleep || rm ~/.nosleep) && killall -USR1 i3status # # Notifications # bindsym $mod+Shift+n mode notifications mode notifications { bindsym Return exec makoctl invoke; exec makoctl dismiss; mode default bindsym d exec makoctl dismiss; mode default bindsym Shift+d exec makoctl dismiss -a; mode default bindsym Escape mode default bindsym q mode default } # # Screenshotting # bindsym $mod+Shift+s mode screenshot mode screenshot { bindsym a exec grim $(xdg-user-dir PICTURES)/shots/$(date +'%Y-%m-%d-%H%M%S.png'); mode default bindsym r exec slurp | grim -g - $(xdg-user-dir PICTURES)/shots/$(date +'%Y-%m-%d-%H%M%S.png'); mode default bindsym Escape mode default bindsym q mode default } # # Window configurations # for_window [class="mpv"] floating enable for_window [class="TelegramDesktop"] floating enable for_window [app_id="pavucontrol"] floating enable for_window [app_id="meld"] floating enable for_window [app_id="nm-connection-editor"] floating enable # # Status Bar: # # Read `man 5 sway-bar` for more information about this section. bar { position bottom colors { statusline #ffffff background #212121 inactive_workspace #21212100 #21212100 #5c5c5c } status_command i3status | my-i3status.py } # font pango: benis uushi 9 # font pango: Ubuntu Mono 11 # font pango: Inconsolata 11 font pango: DejaVu Sans Mono 9 # font pango: Liberation Mono 9 exec xrdb .Xresources # exec pgrep -x "systemd-inhibit" || \ # systemd-inhibit --what=handle-power-key --who=aminb \ # --why="Handle power button in sway" sleep infinity exec mako 2>&1 >/tmp/mako.log exec /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 include /etc/sway/config.d/* include ~/.config/sway/`hostname` exec systemd-notify --ready || true #+end_src *** langa :PROPERTIES: :header-args+: :tangle ~/.config/sway/langa :END: #+begin_src conf input "2:7:SynPS/2_Synaptics_TouchPad" { events disabled dwt enabled tap enabled natural_scroll enabled click_method clickfinger } input "1:1:AT_Translated_Set_2_keyboard" { repeat_delay 200 repeat_rate 45 xkb_layout us_ab,ir xkb_options ctrl:nocaps,altwin:swap_alt_win,grp:shifts_toggle } #+end_src *** shemshak :PROPERTIES: :header-args+: :tangle ~/.config/sway/shemshak :END: #+begin_src conf input "1739:31251:DLL07BE:01_06CB:7A13_Touchpad" { dwt enabled tap enabled natural_scroll enabled middle_emulation enabled click_method clickfinger } input "1:1:AT_Translated_Set_2_keyboard" { repeat_delay 200 repeat_rate 45 xkb_layout us,ir xkb_options ctrl:nocaps,altwin:swap_alt_win,ctrl:rctrl_ralt,grp:shifts_toggle } #+end_src ** swaylock :PROPERTIES: :header-args+: :tangle ~/.config/swaylock/config :END: #+begin_src conf image=/home/amin/usr/pics/wp/wp2445784-blurred-wallpapers.jpg scaling=fill #+end_src ** systemd Keep boot messages on tty1 (see [[https://wiki.archlinux.org/index.php/getty#Have_boot_messages_stay_on_tty1][here]]) #+begin_src conf :tangle /sudo::/etc/systemd/system/getty@tty1.service.d/noclear.conf [Service] TTYVTDisallocate=no #+end_src ** TLP *** langa #+begin_src conf :tangle (when (and (eq system-type 'gnu/linux) (string= (system-name) "langa")) "/sudo::/etc/default/tlp") # ------------------------------------------------------------------------------ # tlp - Parameters for power saving # See full explanation: http://linrunner.de/en/tlp/docs/tlp-configuration.html # Hint: some features are disabled by default, remove the leading # to enable # them. # Set to 0 to disable, 1 to enable TLP. TLP_ENABLE=1 # Operation mode when no power supply can be detected: AC, BAT. # Concerns some desktop and embedded hardware only. TLP_DEFAULT_MODE=AC # Operation mode select: 0=depend on power source, 1=always use TLP_DEFAULT_MODE # Hint: use in conjunction with TLP_DEFAULT_MODE=BAT for BAT settings on AC. TLP_PERSISTENT_DEFAULT=0 # Seconds laptop mode has to wait after the disk goes idle before doing a sync. # Non-zero value enables, zero disables laptop mode. DISK_IDLE_SECS_ON_AC=0 DISK_IDLE_SECS_ON_BAT=2 # Dirty page values (timeouts in secs). MAX_LOST_WORK_SECS_ON_AC=15 MAX_LOST_WORK_SECS_ON_BAT=60 # Hint: CPU parameters below are disabled by default, remove the leading # # to enable them, otherwise kernel default values are used. # Select a CPU frequency scaling governor. # Intel Core i processor with intel_pstate driver: # powersave(*), performance. # Older hardware with acpi-cpufreq driver: # ondemand(*), powersave, performance, conservative, schedutil. # (*) is recommended. # Hint: use tlp-stat -p to show the active driver and available governors. # Important: # powersave for intel_pstate and ondemand for acpi-cpufreq are power # efficient for *almost all* workloads and therefore kernel and most # distributions have chosen them as defaults. If you still want to change, # you should know what you're doing! You *must* disable your distribution's # governor settings or conflicts will occur. #CPU_SCALING_GOVERNOR_ON_AC=powersave #CPU_SCALING_GOVERNOR_ON_BAT=powersave # Set the min/max frequency available for the scaling governor. # Possible values strongly depend on your CPU. For available frequencies see # the output of tlp-stat -p. #CPU_SCALING_MIN_FREQ_ON_AC=0 #CPU_SCALING_MAX_FREQ_ON_AC=0 #CPU_SCALING_MIN_FREQ_ON_BAT=0 #CPU_SCALING_MAX_FREQ_ON_BAT=0 # Set energy performance hints (HWP) for Intel P-state governor: # performance, balance_performance, default, balance_power, power # Values are given in order of increasing power saving. # Note: Intel Skylake or newer CPU and Kernel >= 4.10 required. CPU_HWP_ON_AC=balance_performance CPU_HWP_ON_BAT=balance_power # Set Intel P-state performance: 0..100 (%). # Limit the max/min P-state to control the power dissipation of the CPU. # Values are stated as a percentage of the available performance. # Requires an Intel Core i processor with intel_pstate driver. #CPU_MIN_PERF_ON_AC=0 #CPU_MAX_PERF_ON_AC=100 #CPU_MIN_PERF_ON_BAT=0 #CPU_MAX_PERF_ON_BAT=30 # Set the CPU "turbo boost" feature: 0=disable, 1=allow # Requires an Intel Core i processor. # Important: # - This may conflict with your distribution's governor settings # - A value of 1 does *not* activate boosting, it just allows it #CPU_BOOST_ON_AC=1 #CPU_BOOST_ON_BAT=0 # Minimize number of used CPU cores/hyper-threads under light load conditions: # 0=disable, 1=enable. SCHED_POWERSAVE_ON_AC=0 SCHED_POWERSAVE_ON_BAT=1 # Kernel NMI Watchdog: # 0=disable (default, saves power), 1=enable (for kernel debugging only). NMI_WATCHDOG=0 # Change CPU voltages aka "undervolting" - Kernel with PHC patch required. # Frequency voltage pairs are written to: # /sys/devices/system/cpu/cpu0/cpufreq/phc_controls # CAUTION: only use this, if you thoroughly understand what you are doing! #PHC_CONTROLS="F:V F:V F:V F:V" # Set CPU performance versus energy savings policy: # performance, balance-performance, default, balance-power, power. # Values are given in order of increasing power saving. # Requires kernel module msr and x86_energy_perf_policy from linux-tools. ENERGY_PERF_POLICY_ON_AC=performance ENERGY_PERF_POLICY_ON_BAT=balance-power # Disk devices; separate multiple devices with spaces (default: sda). # Devices can be specified by disk ID also (lookup with: tlp diskid). DISK_DEVICES="sda sdb" # Disk advanced power management level: 1..254, 255 (max saving, min, off). # Levels 1..127 may spin down the disk; 255 allowable on most drives. # Separate values for multiple disks with spaces. Use the special value 'keep' # to keep the hardware default for the particular disk. DISK_APM_LEVEL_ON_AC="254 254" DISK_APM_LEVEL_ON_BAT="128 128" # Hard disk spin down timeout: # 0: spin down disabled # 1..240: timeouts from 5s to 20min (in units of 5s) # 241..251: timeouts from 30min to 5.5 hours (in units of 30min) # See 'man hdparm' for details. # Separate values for multiple disks with spaces. Use the special value 'keep' # to keep the hardware default for the particular disk. #DISK_SPINDOWN_TIMEOUT_ON_AC="0 0" #DISK_SPINDOWN_TIMEOUT_ON_BAT="0 0" # Select IO scheduler for the disk devices: cfq, deadline, noop (Default: cfq). # Separate values for multiple disks with spaces. Use the special value 'keep' # to keep the kernel default scheduler for the particular disk. #DISK_IOSCHED="cfq cfq" # AHCI link power management (ALPM) for disk devices: # min_power, med_power_with_dipm(*), medium_power, max_performance. # (*) Kernel >= 4.15 required, then recommended. # Multiple values separated with spaces are tried sequentially until success. SATA_LINKPWR_ON_AC="med_power_with_dipm max_performance" SATA_LINKPWR_ON_BAT="med_power_with_dipm min_power" # Exclude host devices from AHCI link power management. # Separate multiple hosts with spaces. #SATA_LINKPWR_BLACKLIST="host1" # Runtime Power Management for AHCI host and disks devices: # on=disable, auto=enable. # EXPERIMENTAL ** WARNING: auto will most likely cause system lockups/data loss. #AHCI_RUNTIME_PM_ON_AC=on #AHCI_RUNTIME_PM_ON_BAT=on # Seconds of inactivity before disk is suspended. AHCI_RUNTIME_PM_TIMEOUT=15 # PCI Express Active State Power Management (PCIe ASPM): # default, performance, powersave. PCIE_ASPM_ON_AC=performance PCIE_ASPM_ON_BAT=powersave # Radeon graphics clock speed (profile method): low, mid, high, auto, default; # auto = mid on BAT, high on AC; default = use hardware defaults. RADEON_POWER_PROFILE_ON_AC=high RADEON_POWER_PROFILE_ON_BAT=low # Radeon dynamic power management method (DPM): battery, performance. RADEON_DPM_STATE_ON_AC=performance RADEON_DPM_STATE_ON_BAT=battery # Radeon DPM performance level: auto, low, high; auto is recommended. RADEON_DPM_PERF_LEVEL_ON_AC=auto RADEON_DPM_PERF_LEVEL_ON_BAT=auto # WiFi power saving mode: on=enable, off=disable; not supported by all adapters. WIFI_PWR_ON_AC=off WIFI_PWR_ON_BAT=on # Disable wake on LAN: Y/N. WOL_DISABLE=Y # Enable audio power saving for Intel HDA, AC97 devices (timeout in secs). # A value of 0 disables, >=1 enables power saving (recommended: 1). SOUND_POWER_SAVE_ON_AC=0 SOUND_POWER_SAVE_ON_BAT=0 # Disable controller too (HDA only): Y/N. SOUND_POWER_SAVE_CONTROLLER=N # Power off optical drive in UltraBay/MediaBay: 0=disable, 1=enable. # Drive can be powered on again by releasing (and reinserting) the eject lever # or by pressing the disc eject button on newer models. # Note: an UltraBay/MediaBay hard disk is never powered off. BAY_POWEROFF_ON_AC=0 BAY_POWEROFF_ON_BAT=0 # Optical drive device to power off (default sr0). BAY_DEVICE="sr0" # Runtime Power Management for PCI(e) bus devices: on=disable, auto=enable. RUNTIME_PM_ON_AC=on RUNTIME_PM_ON_BAT=auto # Exclude PCI(e) device adresses the following list from Runtime PM # (separate with spaces). Use lspci to get the adresses (1st column). #RUNTIME_PM_BLACKLIST="bb:dd.f 11:22.3 44:55.6" # Exclude PCI(e) devices assigned to the listed drivers from Runtime PM. # Default when unconfigured is "amdgpu nouveau nvidia radeon" which # prevents accidential power-on of dGPU in hybrid graphics setups. # Use "" to disable the feature completely. # Separate multiple drivers with spaces. #RUNTIME_PM_DRIVER_BLACKLIST="amdgpu nouveau nvidia radeon" # Set to 0 to disable, 1 to enable USB autosuspend feature. USB_AUTOSUSPEND=1 # Exclude listed devices from USB autosuspend (separate with spaces). # Use lsusb to get the ids. # Note: input devices (usbhid) are excluded automatically #USB_BLACKLIST="1111:2222 3333:4444" # Bluetooth devices are excluded from USB autosuspend: # 0=do not exclude, 1=exclude. USB_BLACKLIST_BTUSB=0 # Phone devices are excluded from USB autosuspend: # 0=do not exclude, 1=exclude (enable charging). USB_BLACKLIST_PHONE=0 # Printers are excluded from USB autosuspend: # 0=do not exclude, 1=exclude. USB_BLACKLIST_PRINTER=1 # WWAN devices are excluded from USB autosuspend: # 0=do not exclude, 1=exclude. USB_BLACKLIST_WWAN=1 # Include listed devices into USB autosuspend even if already excluded # by the blacklists above (separate with spaces). # Use lsusb to get the ids. #USB_WHITELIST="1111:2222 3333:4444" # Set to 1 to disable autosuspend before shutdown, 0 to do nothing # (workaround for USB devices that cause shutdown problems). #USB_AUTOSUSPEND_DISABLE_ON_SHUTDOWN=1 # Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown # on system startup: 0=disable, 1=enable. # Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below # are ignored when this is enabled! #RESTORE_DEVICE_STATE_ON_STARTUP=0 RESTORE_DEVICE_STATE_ON_STARTUP=1 # Radio devices to disable on startup: bluetooth, wifi, wwan. # Separate multiple devices with spaces. #DEVICES_TO_DISABLE_ON_STARTUP="bluetooth wifi wwan" # Radio devices to enable on startup: bluetooth, wifi, wwan. # Separate multiple devices with spaces. #DEVICES_TO_ENABLE_ON_STARTUP="wifi" # Radio devices to disable on shutdown: bluetooth, wifi, wwan. # (workaround for devices that are blocking shutdown). #DEVICES_TO_DISABLE_ON_SHUTDOWN="bluetooth wifi wwan" # Radio devices to enable on shutdown: bluetooth, wifi, wwan. # (to prevent other operating systems from missing radios). #DEVICES_TO_ENABLE_ON_SHUTDOWN="wwan" # Radio devices to enable on AC: bluetooth, wifi, wwan. #DEVICES_TO_ENABLE_ON_AC="bluetooth wifi wwan" # Radio devices to disable on battery: bluetooth, wifi, wwan. #DEVICES_TO_DISABLE_ON_BAT="bluetooth wifi wwan" DEVICES_TO_DISABLE_ON_BAT="bluetooth" # Radio devices to disable on battery when not in use (not connected): # bluetooth, wifi, wwan. #DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE="bluetooth wifi wwan" # Battery charge thresholds (ThinkPad only, tp-smapi or acpi-call kernel module # required). Charging starts when the remaining capacity falls below the # START_CHARGE_THRESH value and stops when exceeding the STOP_CHARGE_THRESH value. # Main / Internal battery (values in %) #START_CHARGE_THRESH_BAT0=75 #STOP_CHARGE_THRESH_BAT0=80 # Ultrabay / Slice / Replaceable battery (values in %) #START_CHARGE_THRESH_BAT1=75 #STOP_CHARGE_THRESH_BAT1=80 # Restore charge thresholds when AC is unplugged: 0=disable, 1=enable. #RESTORE_THRESHOLDS_ON_BAT=1 # ------------------------------------------------------------------------------ # tlp-rdw - Parameters for the radio device wizard # Possible devices: bluetooth, wifi, wwan. # Hints: # - Parameters are disabled by default, remove the leading # to enable them # - Separate multiple radio devices with spaces # Radio devices to disable on connect. #DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan" #DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan" #DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi" # Radio devices to enable on disconnect. #DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan" #DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT="" #DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT="" # Radio devices to enable/disable when docked. #DEVICES_TO_ENABLE_ON_DOCK="" #DEVICES_TO_DISABLE_ON_DOCK="" # Radio devices to enable/disable when undocked. #DEVICES_TO_ENABLE_ON_UNDOCK="wifi" #DEVICES_TO_DISABLE_ON_UNDOCK="" #+end_src *** shemshak #+begin_src conf :tangle (when (and (eq system-type 'gnu/linux) (string= (system-name) "shemshak")) "/sudo::/etc/default/tlp") # ------------------------------------------------------------------------------ # tlp - Parameters for power saving # See full explanation: http://linrunner.de/en/tlp/docs/tlp-configuration.html # Hint: some features are disabled by default, remove the leading # to enable # them. # Set to 0 to disable, 1 to enable TLP. TLP_ENABLE=1 # Operation mode when no power supply can be detected: AC, BAT. # Concerns some desktop and embedded hardware only. TLP_DEFAULT_MODE=AC # Operation mode select: 0=depend on power source, 1=always use TLP_DEFAULT_MODE # Hint: use in conjunction with TLP_DEFAULT_MODE=BAT for BAT settings on AC. TLP_PERSISTENT_DEFAULT=0 # Seconds laptop mode has to wait after the disk goes idle before doing a sync. # Non-zero value enables, zero disables laptop mode. DISK_IDLE_SECS_ON_AC=0 DISK_IDLE_SECS_ON_BAT=2 # Dirty page values (timeouts in secs). MAX_LOST_WORK_SECS_ON_AC=15 MAX_LOST_WORK_SECS_ON_BAT=60 # Hint: CPU parameters below are disabled by default, remove the leading # # to enable them, otherwise kernel default values are used. # Select a CPU frequency scaling governor. # Intel Core i processor with intel_pstate driver: # powersave(*), performance. # Older hardware with acpi-cpufreq driver: # ondemand(*), powersave, performance, conservative, schedutil. # (*) is recommended. # Hint: use tlp-stat -p to show the active driver and available governors. # Important: # powersave for intel_pstate and ondemand for acpi-cpufreq are power # efficient for *almost all* workloads and therefore kernel and most # distributions have chosen them as defaults. If you still want to change, # you should know what you're doing! You *must* disable your distribution's # governor settings or conflicts will occur. #CPU_SCALING_GOVERNOR_ON_AC=powersave #CPU_SCALING_GOVERNOR_ON_BAT=powersave # Set the min/max frequency available for the scaling governor. # Possible values strongly depend on your CPU. For available frequencies see # the output of tlp-stat -p. #CPU_SCALING_MIN_FREQ_ON_AC=0 #CPU_SCALING_MAX_FREQ_ON_AC=0 #CPU_SCALING_MIN_FREQ_ON_BAT=0 #CPU_SCALING_MAX_FREQ_ON_BAT=0 # Set energy performance hints (HWP) for Intel P-state governor: # performance, balance_performance, default, balance_power, power # Values are given in order of increasing power saving. # Note: Intel Skylake or newer CPU and Kernel >= 4.10 required. CPU_HWP_ON_AC=balance_performance CPU_HWP_ON_BAT=balance_power # Set Intel P-state performance: 0..100 (%). # Limit the max/min P-state to control the power dissipation of the CPU. # Values are stated as a percentage of the available performance. # Requires an Intel Core i processor with intel_pstate driver. #CPU_MIN_PERF_ON_AC=0 #CPU_MAX_PERF_ON_AC=100 #CPU_MIN_PERF_ON_BAT=0 #CPU_MAX_PERF_ON_BAT=30 # Set the CPU "turbo boost" feature: 0=disable, 1=allow # Requires an Intel Core i processor. # Important: # - This may conflict with your distribution's governor settings # - A value of 1 does *not* activate boosting, it just allows it #CPU_BOOST_ON_AC=1 #CPU_BOOST_ON_BAT=0 # Minimize number of used CPU cores/hyper-threads under light load conditions: # 0=disable, 1=enable. SCHED_POWERSAVE_ON_AC=0 SCHED_POWERSAVE_ON_BAT=1 # Kernel NMI Watchdog: # 0=disable (default, saves power), 1=enable (for kernel debugging only). NMI_WATCHDOG=0 # Change CPU voltages aka "undervolting" - Kernel with PHC patch required. # Frequency voltage pairs are written to: # /sys/devices/system/cpu/cpu0/cpufreq/phc_controls # CAUTION: only use this, if you thoroughly understand what you are doing! #PHC_CONTROLS="F:V F:V F:V F:V" # Set CPU performance versus energy savings policy: # performance, balance-performance, default, balance-power, power. # Values are given in order of increasing power saving. # Requires kernel module msr and x86_energy_perf_policy from linux-tools. ENERGY_PERF_POLICY_ON_AC=performance ENERGY_PERF_POLICY_ON_BAT=balance-power # Disk devices; separate multiple devices with spaces (default: sda). # Devices can be specified by disk ID also (lookup with: tlp diskid). DISK_DEVICES="sda sdb" # Disk advanced power management level: 1..254, 255 (max saving, min, off). # Levels 1..127 may spin down the disk; 255 allowable on most drives. # Separate values for multiple disks with spaces. Use the special value 'keep' # to keep the hardware default for the particular disk. DISK_APM_LEVEL_ON_AC="254 254" DISK_APM_LEVEL_ON_BAT="128 128" # Hard disk spin down timeout: # 0: spin down disabled # 1..240: timeouts from 5s to 20min (in units of 5s) # 241..251: timeouts from 30min to 5.5 hours (in units of 30min) # See 'man hdparm' for details. # Separate values for multiple disks with spaces. Use the special value 'keep' # to keep the hardware default for the particular disk. #DISK_SPINDOWN_TIMEOUT_ON_AC="0 0" #DISK_SPINDOWN_TIMEOUT_ON_BAT="0 0" # Select IO scheduler for the disk devices: cfq, deadline, noop (Default: cfq). # Separate values for multiple disks with spaces. Use the special value 'keep' # to keep the kernel default scheduler for the particular disk. #DISK_IOSCHED="cfq cfq" # AHCI link power management (ALPM) for disk devices: # min_power, med_power_with_dipm(*), medium_power, max_performance. # (*) Kernel >= 4.15 required, then recommended. # Multiple values separated with spaces are tried sequentially until success. SATA_LINKPWR_ON_AC="med_power_with_dipm max_performance" SATA_LINKPWR_ON_BAT="med_power_with_dipm min_power" # Exclude host devices from AHCI link power management. # Separate multiple hosts with spaces. #SATA_LINKPWR_BLACKLIST="host1" # Runtime Power Management for AHCI host and disks devices: # on=disable, auto=enable. # EXPERIMENTAL ** WARNING: auto will most likely cause system lockups/data loss. #AHCI_RUNTIME_PM_ON_AC=on #AHCI_RUNTIME_PM_ON_BAT=on # Seconds of inactivity before disk is suspended. AHCI_RUNTIME_PM_TIMEOUT=15 # PCI Express Active State Power Management (PCIe ASPM): # default, performance, powersave. PCIE_ASPM_ON_AC=performance PCIE_ASPM_ON_BAT=powersave # Radeon graphics clock speed (profile method): low, mid, high, auto, default; # auto = mid on BAT, high on AC; default = use hardware defaults. RADEON_POWER_PROFILE_ON_AC=high RADEON_POWER_PROFILE_ON_BAT=low # Radeon dynamic power management method (DPM): battery, performance. RADEON_DPM_STATE_ON_AC=performance RADEON_DPM_STATE_ON_BAT=battery # Radeon DPM performance level: auto, low, high; auto is recommended. RADEON_DPM_PERF_LEVEL_ON_AC=auto RADEON_DPM_PERF_LEVEL_ON_BAT=auto # WiFi power saving mode: on=enable, off=disable; not supported by all adapters. WIFI_PWR_ON_AC=off WIFI_PWR_ON_BAT=on # Disable wake on LAN: Y/N. WOL_DISABLE=Y # Enable audio power saving for Intel HDA, AC97 devices (timeout in secs). # A value of 0 disables, >=1 enables power saving (recommended: 1). SOUND_POWER_SAVE_ON_AC=0 SOUND_POWER_SAVE_ON_BAT=0 # Disable controller too (HDA only): Y/N. SOUND_POWER_SAVE_CONTROLLER=N # Power off optical drive in UltraBay/MediaBay: 0=disable, 1=enable. # Drive can be powered on again by releasing (and reinserting) the eject lever # or by pressing the disc eject button on newer models. # Note: an UltraBay/MediaBay hard disk is never powered off. BAY_POWEROFF_ON_AC=0 BAY_POWEROFF_ON_BAT=0 # Optical drive device to power off (default sr0). BAY_DEVICE="sr0" # Runtime Power Management for PCI(e) bus devices: on=disable, auto=enable. RUNTIME_PM_ON_AC=on RUNTIME_PM_ON_BAT=auto # Exclude PCI(e) device adresses the following list from Runtime PM # (separate with spaces). Use lspci to get the adresses (1st column). #RUNTIME_PM_BLACKLIST="bb:dd.f 11:22.3 44:55.6" RUNTIME_PM_BLACKLIST="01:00.0" # Exclude PCI(e) devices assigned to the listed drivers from Runtime PM. # Default when unconfigured is "amdgpu nouveau nvidia radeon" which # prevents accidential power-on of dGPU in hybrid graphics setups. # Use "" to disable the feature completely. # Separate multiple drivers with spaces. #RUNTIME_PM_DRIVER_BLACKLIST="amdgpu nouveau nvidia radeon" # Set to 0 to disable, 1 to enable USB autosuspend feature. USB_AUTOSUSPEND=1 # Exclude listed devices from USB autosuspend (separate with spaces). # Use lsusb to get the ids. # Note: input devices (usbhid) are excluded automatically #USB_BLACKLIST="1111:2222 3333:4444" # Bluetooth devices are excluded from USB autosuspend: # 0=do not exclude, 1=exclude. USB_BLACKLIST_BTUSB=0 # Phone devices are excluded from USB autosuspend: # 0=do not exclude, 1=exclude (enable charging). USB_BLACKLIST_PHONE=0 # Printers are excluded from USB autosuspend: # 0=do not exclude, 1=exclude. USB_BLACKLIST_PRINTER=1 # WWAN devices are excluded from USB autosuspend: # 0=do not exclude, 1=exclude. USB_BLACKLIST_WWAN=1 # Include listed devices into USB autosuspend even if already excluded # by the blacklists above (separate with spaces). # Use lsusb to get the ids. #USB_WHITELIST="1111:2222 3333:4444" # Set to 1 to disable autosuspend before shutdown, 0 to do nothing # (workaround for USB devices that cause shutdown problems). #USB_AUTOSUSPEND_DISABLE_ON_SHUTDOWN=1 # Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown # on system startup: 0=disable, 1=enable. # Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below # are ignored when this is enabled! #RESTORE_DEVICE_STATE_ON_STARTUP=0 RESTORE_DEVICE_STATE_ON_STARTUP=1 # Radio devices to disable on startup: bluetooth, wifi, wwan. # Separate multiple devices with spaces. #DEVICES_TO_DISABLE_ON_STARTUP="bluetooth wifi wwan" # Radio devices to enable on startup: bluetooth, wifi, wwan. # Separate multiple devices with spaces. #DEVICES_TO_ENABLE_ON_STARTUP="wifi" # Radio devices to disable on shutdown: bluetooth, wifi, wwan. # (workaround for devices that are blocking shutdown). #DEVICES_TO_DISABLE_ON_SHUTDOWN="bluetooth wifi wwan" # Radio devices to enable on shutdown: bluetooth, wifi, wwan. # (to prevent other operating systems from missing radios). #DEVICES_TO_ENABLE_ON_SHUTDOWN="wwan" # Radio devices to enable on AC: bluetooth, wifi, wwan. #DEVICES_TO_ENABLE_ON_AC="bluetooth wifi wwan" # Radio devices to disable on battery: bluetooth, wifi, wwan. #DEVICES_TO_DISABLE_ON_BAT="bluetooth wifi wwan" # Radio devices to disable on battery when not in use (not connected): # bluetooth, wifi, wwan. #DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE="bluetooth wifi wwan" # Battery charge thresholds (ThinkPad only, tp-smapi or acpi-call kernel module # required). Charging starts when the remaining capacity falls below the # START_CHARGE_THRESH value and stops when exceeding the STOP_CHARGE_THRESH value. # Main / Internal battery (values in %) #START_CHARGE_THRESH_BAT0=75 #STOP_CHARGE_THRESH_BAT0=80 # Ultrabay / Slice / Replaceable battery (values in %) #START_CHARGE_THRESH_BAT1=75 #STOP_CHARGE_THRESH_BAT1=80 # Restore charge thresholds when AC is unplugged: 0=disable, 1=enable. #RESTORE_THRESHOLDS_ON_BAT=1 # ------------------------------------------------------------------------------ # tlp-rdw - Parameters for the radio device wizard # Possible devices: bluetooth, wifi, wwan. # Hints: # - Parameters are disabled by default, remove the leading # to enable them # - Separate multiple radio devices with spaces # Radio devices to disable on connect. #DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan" #DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan" #DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi" # Radio devices to enable on disconnect. #DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan" #DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT="" #DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT="" # Radio devices to enable/disable when docked. #DEVICES_TO_ENABLE_ON_DOCK="" #DEVICES_TO_DISABLE_ON_DOCK="" # Radio devices to enable/disable when undocked. #DEVICES_TO_ENABLE_ON_UNDOCK="wifi" #DEVICES_TO_DISABLE_ON_UNDOCK="" #+end_src ** X *** xprofile :PROPERTIES: :header-args+: :tangle ~/.xprofile :END: =~/.xprofile= is similar in style to =~/.xinitrc=, but on the contrary, it's automatically sourced by LightDM, my display manager of choice. #+begin_src sh :tangle no xset -b # disable bell xset r rate 200 45 # repeat delay (ms) and rate (repeats/sec) # setxkbmap -option compose:ralt setxkbmap -option ctrl:nocaps # turn capslock into control setxkbmap -option altwin:swap_alt_win # swap alt and super if [ $(hostname) = "plasma" ] then setxkbmap -option ctrl:rctrl_ralt # turn right control into right alt fi if [ $(hostname) = "enigma" ] then xmodmap -e "keycode 135 = Alt_R" # remap menu key to alt fi light -Scrs "intel_backlight" 2 source $HOME/.zprofile export _JAVA_AWT_WM_NONREPARENTING=1 export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true' if [ $(hostname) = "plasma" ] then unlock-def-gk.py & fi bspwm & #+end_src *** X resources **** Xresources :PROPERTIES: :header-args+: :tangle (when (eq system-type 'gnu/linux) "~/.Xresources") :END: #+begin_src conf-xdefaults #include ".Xresources.d/fonts" ! #include ".Xresources.d/colors" #include ".Xresources.d/emacs" #include ".Xresources.d/rxvt-unicode" #+end_src **** Xresources.d ***** fonts :PROPERTIES: :header-args+: :tangle (when (eq system-type 'gnu/linux) "~/.Xresources.d/fonts") :END: #+begin_src conf-xdefaults Xft.lcdfilter: lcddefault Xft.antialias: true Xft.autohint: 0 Xft.hinting: true Xft.hintstyle: hintslight ! Xft.hintstyle: hintfull Xft.rgba: rgb Xft.dpi: 96 #+end_src ***** colors :PROPERTIES: :header-args+: :tangle (when (eq system-type 'gnu/linux) "~/.Xresources.d/colors") :END: #+begin_src conf-xdefaults :tangle no #include "gruvbox-light.xresources" ! #include "gruvbox-dark.xresources" #include "gruvbox-urxvt256.xresources" #+end_src #+begin_src conf-xdefaults :tangle no ! ----------------------------------------------------------------------------- ! File: gruvbox-light.xresources ! Description: Retro groove colorscheme generalized ! Author: morhetz ! Source: https://github.com/morhetz/gruvbox-generalized ! Last Modified: 6 Sep 2014 ! ----------------------------------------------------------------------------- ! hard contrast: *background: #f9f5d7 *background: #fbf1c7 ! soft contrast: *background: #f2e5bc *foreground: #3c3836 ! Black + DarkGrey *color0: #fdf4c1 *color8: #928374 ! DarkRed + Red *color1: #cc241d *color9: #9d0006 ! DarkGreen + Green *color2: #98971a *color10: #79740e ! DarkYellow + Yellow *color3: #d79921 *color11: #b57614 ! DarkBlue + Blue *color4: #458588 *color12: #076678 ! DarkMagenta + Magenta *color5: #b16286 *color13: #8f3f71 ! DarkCyan + Cyan *color6: #689d6a *color14: #427b58 ! LightGrey + White *color7: #7c6f64 *color15: #3c3836 #+end_src #+begin_src conf-xdefaults :tangle no ! ----------------------------------------------------------------------------- ! File: gruvbox-dark.xresources ! Description: Retro groove colorscheme generalized ! Author: morhetz ! Source: https://github.com/morhetz/gruvbox-generalized ! Last Modified: 6 Sep 2014 ! ----------------------------------------------------------------------------- ! hard contrast: *background: #1d2021 *background: #282828 ! soft contrast: *background: #32302f *foreground: #ebdbb2 ! Black + DarkGrey *color0: #282828 *color8: #928374 ! DarkRed + Red *color1: #cc241d *color9: #fb4934 ! DarkGreen + Green *color2: #98971a *color10: #b8bb26 ! DarkYellow + Yellow *color3: #d79921 *color11: #fabd2f ! DarkBlue + Blue *color4: #458588 *color12: #83a598 ! DarkMagenta + Magenta *color5: #b16286 *color13: #d3869b ! DarkCyan + Cyan *color6: #689d6a *color14: #8ec07c ! LightGrey + White *color7: #a89984 *color15: #ebdbb2 #+end_src #+begin_src conf-xdefaults :tangle no ! ----------------------------------------------------------------------------- ! File: gruvbox-urxvt256.xresources ! Description: Retro groove colorscheme generalized ! Author: morhetz ! Source: https://github.com/morhetz/gruvbox-generalized ! Last Modified: 13 Dec 2013 ! ----------------------------------------------------------------------------- URxvt.color24: #076678 URxvt.color66: #427b58 URxvt.color88: #9d0006 URxvt.color96: #8f3f71 URxvt.color100: #79740e URxvt.color108: #8ec07c URxvt.color109: #83a598 URxvt.color130: #af3a03 URxvt.color136: #b57614 URxvt.color142: #b8bb26 URxvt.color167: #fb4934 URxvt.color175: #d3869b URxvt.color208: #fe8019 URxvt.color214: #fabd2f URxvt.color223: #ebdbb2 URxvt.color228: #f2e5bc URxvt.color229: #fbf1c7 URxvt.color230: #f9f5d7 URxvt.color234: #1d2021 URxvt.color235: #282828 URxvt.color236: #32302f URxvt.color237: #3c3836 URxvt.color239: #504945 URxvt.color241: #665c54 URxvt.color243: #7c6f64 URxvt.color244: #928374 URxvt.color245: #928374 URxvt.color246: #a89984 URxvt.color248: #bdae93 URxvt.color250: #d5c4a1 #+end_src ***** emacs :PROPERTIES: :header-args+: :tangle (when (eq system-type 'gnu/linux) "~/.Xresources.d/emacs") :END: #+begin_src conf-xdefaults Emacs.menuBar: off Emacs.toolBar: off Emacs.verticalScrollBars: off Emacs.cursorBlink: off Emacs.FontBackend: xft,x ! Emacs.font: Ubuntu Mono-12 ! Emacs.font: Triplicate T4C-11 ! Emacs.font: Ubuntu Mono-10.5 ! Emacs.font: Ubuntu Mono-12 ! Emacs.font: Iosevka-11 ! Emacs.font: Fira Mono:size=15 ! Emacs.font: DejaVu Sans Mono:size=15 ! Emacs.font: Inconsolata:size=17 ! Emacs.font: Inconsolata:size=16 ! Emacs.font: Inconsolata LGC:size=14 ! Emacs.font: Source Code Pro Medium-10.5 Emacs.font: Source Code Pro:size=14 ! Emacs.font: Ubuntu Mono:size=16 ! Emacs.font: Iosevka:size=16 #+end_src ***** rxvt-unicode :PROPERTIES: :header-args+: :tangle (when (eq system-type 'gnu/linux) "~/.Xresources.d/rxvt-unicode") :END: #+begin_src conf-xdefaults ! Font URxvt.font: xft:source code pro:pixelsize=14:antialias=true:hinting=true, xft:dejavu sans mono:pixelsize=15:antialias=true:hinting=true URxvt.boldFont: xft:source code pro:semibold:pixelsize=14:antialias=true:hinting=true:bold, xft:dejavu sans mono:pixelsize=15:antialias=true:hinting=true:bold URxvt.italicFont: xft:source code pro:italic:pixelsize=14:antialias=true:hinting=true:italic, xft:dejavu sans mono:pixelsize=15:antialias=true:hinting=true:italic URxvt.bolditalicFont: xft:source code pro:semibold:italic:pixelsize=14:antialias=true:hinting=true:bold:italic, xft:dejavu sans mono:pixelsize=15:antialias=true:hinting=true:bolditalic URxvt.xftAntialias: true URxvt.letterSpace: 0 URxvt.depth: 0 URxvt.loginShell: true URxvt.saveLines: 100000 URxvt.internalBorder: 3 URxvt.lineSpace: 0 URxvt.scrollBar: false URxvt.scrollStyle: rxvt URxvt*scrollTtyOutput: false URxvt*scrollWithBuffer: true URxvt*scrollTtyKeypress: true URxvt.keysym.Shift-Up: command:\033]720;1\007 URxvt.keysym.Shift-Down: command:\033]721;1\007 URxvt.perl-ext-common: default,clipboard,url-select,keyboard-select URxvt.url-select.launcher: firefox URxvt.url-select.underline: true URxvt.keysym.M-u: perl:url-select:select_next URxvt.keysym.M-Escape: perl:keyboard-select:activate URxvt.keysym.M-s: perl:keyboard-select:search URxvt.url-launcher: /usr/bin/firefox URxvt.matcher.button: 1 URxvt.iso14755: false URxvt.iso14755_53: false URxvt.keysym.M-c: perl:clipboard:copy URxvt.keysym.M-v: perl:clipboard:paste URxvt.keysym.C-A-V: perl:clipboard:paste_escaped URxvt.keysym.C-Up: font-size:increase URxvt.keysym.C-Down: font-size:decrease URxvt.keysym.C-S-Up: font-size:incglobal URxvt.keysym.C-S-Down: font-size:decglobal URxvt.keysym.C-equal: font-size:reset !URxvt.keysym.C-question: font-size:show URxvt.iconFile: /usr/share/icons/Paper/48x48/apps/utilities-terminal.png !urxvt*foreground: white !urxvt*background: black !*color0: #2E3436 !*color1: #a40000 !*color2: #4E9A06 !*color3: #C4A000 !*color4: #3465A4 !*color5: #75507B !*color6: #ce5c00 !*color7: #babdb9 !*color8: #555753 !*color9: #EF2929 !*color10: #8AE234 !*color11: #FCE94F !*color12: #729FCF !*color13: #AD7FA8 !*color14: #fcaf3e !*color15: #EEEEEC !URxvt.foreground: #C8C8C8 !URxvt.background: #FFFFFF !! black !*color0: #2E3436 !*color8: #555753 !! red !*color1: #a40000 !*color9: #EF2929 !! green !*color2: #4E9A06 !*color10: #8AE234 !! yellow !*color3: #C4A000 !*color11: #FCE94F !! blue !*color4: #3465A4 !*color12: #729FCF !! purple !*color5: #75507B !*color13: #AD7FA8 !! orange (replaces cyan) !*color6: #ce5c00 !*color14: #fcaf3e !! white !*color7: #babdb9 !*color15: #EEEEEC ! Tango colour theme for rxvt-unicode URxvt.background: #FFFFFF URxvt.foreground: #000000 ! Black URxvt.color0: #2E3436 URxvt.color8: #757773 ! Red URxvt.color1: #CC0000 URxvt.color9: #EF2929 ! Green URxvt.color2: #4E9A06 URxvt.color10: #8AE234 ! Yellow URxvt.color3: #C4A000 URxvt.color11: #FCE94F ! Blue URxvt.color4: #3465A4 URxvt.color12: #729FCF ! Magenta URxvt.color5: #75507B URxvt.color13: #AD7FA8 !! Cyan !URxvt.color6: #06989A !URxvt.color14: #34E2E2 ! orange (replaces cyan) ,*color6: #ce5c00 ,*color14: #fcaf3e ! White URxvt.color7: #D3D7CF URxvt.color15: #EEEEEC #+end_src *** xkb us_ab keyboard layout #+begin_src conf :tangle "/sudo::/usr/share/X11/xkb/symbols/us_ab" :comments none default partial alphanumeric_keys xkb_symbols "us_ab" { include "us(basic)" name[Group1]= "English (US)(aminb)"; key { [ Alt_R ] }; }; #+end_src ** XDG :PROPERTIES: :header-args+: :tangle ~/.config/user-dirs.dirs :END: #+begin_src conf XDG_DESKTOP_DIR="$HOME/Desktop" XDG_DOCUMENTS_DIR="$HOME/usr/docs" XDG_DOWNLOAD_DIR="$HOME/usr/dls" XDG_MUSIC_DIR="$HOME/usr/music" XDG_PICTURES_DIR="$HOME/usr/pics" XDG_PUBLICSHARE_DIR="$HOME/usr/Public" XDG_TEMPLATES_DIR="$HOME/usr/Templates" XDG_VIDEOS_DIR="$HOME/usr/vids" #+end_src ** Zathura :PROPERTIES: :header-args+: :tangle ~/.config/zathura/zathurarc :END: #+begin_src conf set smooth-scroll true set selection-clipboard clipboard set zoom-step 05 set default-bg "#272727" set statusbar-bg "#272727" set inputbar-bg "#373737" #+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-layout :PROPERTIES: :header-args+: :tangle ~/.local/bin/toggle-layout :shebang "#!/bin/bash" :END: #+begin_src bash :tangle no 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 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 ** unlock-def-gk.py :PROPERTIES: :header-args+: :tangle ~/.local/bin/unlock-def-gk.py :shebang "#!/usr/bin/env python2" :END: #+begin_src python :tangle no import gnomekeyring as gk # list_item_ids_sync('login')[0] == 1L gk.unlock_sync('Default_keyring',gk.item_get_info_sync('login',1L).get_secret()) #+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 ** wp My little wallpaper changer script. *** wp :PROPERTIES: :header-args+: :tangle ~/.local/bin/wp :shebang "#!/bin/bash" :END: #+begin_src bash :tangle no export DISPLAY=:0 case "$1" in "day") feh --bg-scale $HOME/usr/pics/island_day_by_arsenixc-d6ctqon.jpg ;; "night") feh --bg-scale $HOME/usr/pics/island_night_by_arsenixc-d6cz757.jpg ;; *) echo $"Usage: $0 {day|night}" exit 1 esac #+end_src *** wp-auto :PROPERTIES: :header-args+: :tangle ~/.local/bin/wp-auto :shebang "#!/bin/bash" :END: #+begin_src bash :tangle no SED=$(which sed) ROFI=$(which rofi) export DISPLAY=:0 HOUR=$(date +%H) if [ -z "${SED}" ] then echo "Did not find 'sed', script cannot continue." exit 1 fi if [ -z "${ROFI}" ] then echo "Did not find rofi, there is no point to continue." exit 1 fi ### # Create if not exists, then removes #include of .theme file (if present) and add the selected theme to the end. # Repeated calls should leave the config clean-ish ### function set_theme() { CDIR="${HOME}/.config/rofi/" if [ ! -d "${CDIR}" ] then mkdir -p ${CDIR} fi if [ -f "${CDIR}/config" ] then ${SED} -i "/rofi\.theme: .*\.rasi$/d" "${CDIR}/config" fi echo "rofi.theme: ${1}" >> "${CDIR}/config" } if [ "$HOUR" -gt "19" ] || [ "$HOUR" -lt "7" ] then feh --bg-scale $HOME/usr/pics/island_night_by_arsenixc-d6cz757.jpg xrdb -merge $HOME/.Xresources.d/gruvbox-dark.xresources set_theme "/usr/share/rofi/themes//gruvbox-dark.rasi" else feh --bg-scale $HOME/usr/pics/island_day_by_arsenixc-d6ctqon.jpg xrdb -merge $HOME/.Xresources.d/gruvbox-light.xresources set_theme "/usr/share/rofi/themes//gruvbox-light.rasi" fi #+end_src *** wp.service :PROPERTIES: :header-args+: :tangle ~/.config/systemd/user/wp.service :END: #+begin_src conf :tangle no [Unit] Description=wallpaper service [Service] Type=oneshot ExecStart=/usr/bin/bash -c %h/.local/bin/wp-auto #+end_src *** wp.timer :PROPERTIES: :header-args+: :tangle ~/.config/systemd/user/wp.timer :END: #+begin_src conf :tangle no [Unit] [Unit] Description=wallpaper timer [Timer] OnCalendar=07,21:00 Unit=wp.service Persistent=true [Install] WantedBy=timers.target #+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 ** Fun :) *** eat-em :PROPERTIES: :header-args+: :tangle ~/.local/bin/eat-em :shebang "#!/bin/sh" :END: #+begin_src sh # Original Posted at http://crunchbang.org/forums/viewtopic.php?pid=126921%23p126921#p126921 # [ESC] character in original post removed here. # ANSI Color -- use these variables to easily have different color # and format output. Make sure to output the reset sequence after # colors (f = foreground, b = background), and use the 'off' # feature for anything you turn on. initializeANSI() { esc="$(echo -en '\e')" blackf="${esc}[30m"; redf="${esc}[31m"; greenf="${esc}[32m" yellowf="${esc}[33m" bluef="${esc}[34m"; purplef="${esc}[35m" cyanf="${esc}[36m"; whitef="${esc}[37m" blackb="${esc}[40m"; redb="${esc}[41m"; greenb="${esc}[42m" yellowb="${esc}[43m" blueb="${esc}[44m"; purpleb="${esc}[45m" cyanb="${esc}[46m"; whiteb="${esc}[47m" boldon="${esc}[1m"; boldoff="${esc}[22m" italicson="${esc}[3m"; italicsoff="${esc}[23m" ulon="${esc}[4m"; uloff="${esc}[24m" invon="${esc}[7m"; invoff="${esc}[27m" reset="${esc}[0m" } # note in this first use that switching colors doesn't require a reset # first - the new color overrides the old one. #clear initializeANSI cat << EOF ${yellowf} ▄███████▄${reset} ${redf} ▄██████▄${reset} ${greenf} ▄██████▄${reset} ${bluef} ▄██████▄${reset} ${purplef} ▄██████▄${reset} ${cyanf} ▄██████▄${reset} ${yellowf}▄█████████▀▀${reset} ${redf}▄${whitef}█▀█${redf}██${whitef}█▀█${redf}██▄${reset} ${greenf}▄${whitef}█▀█${greenf}██${whitef}█▀█${greenf}██▄${reset} ${bluef}▄${whitef}█▀█${bluef}██${whitef}█▀█${bluef}██▄${reset} ${purplef}▄${whitef}█▀█${purplef}██${whitef}█▀█${purplef}██▄${reset} ${cyanf}▄${whitef}█▀█${cyanf}██${whitef}█▀█${cyanf}██▄${reset} ${yellowf}███████▀${reset} ${redf}█${whitef}▄▄█${redf}██${whitef}▄▄█${redf}███${reset} ${greenf}█${whitef}▄▄█${greenf}██${whitef}▄▄█${greenf}███${reset} ${bluef}█${whitef}▄▄█${bluef}██${whitef}▄▄█${bluef}███${reset} ${purplef}█${whitef}▄▄█${purplef}██${whitef}▄▄█${purplef}███${reset} ${cyanf}█${whitef}▄▄█${cyanf}██${whitef}▄▄█${cyanf}███${reset} ${yellowf}███████▄${reset} ${redf}████████████${reset} ${greenf}████████████${reset} ${bluef}████████████${reset} ${purplef}████████████${reset} ${cyanf}████████████${reset} ${yellowf}▀█████████▄▄${reset} ${redf}██▀██▀▀██▀██${reset} ${greenf}██▀██▀▀██▀██${reset} ${bluef}██▀██▀▀██▀██${reset} ${purplef}██▀██▀▀██▀██${reset} ${cyanf}██▀██▀▀██▀██${reset} ${yellowf} ▀███████▀${reset} ${redf}▀ ▀ ▀ ▀${reset} ${greenf}▀ ▀ ▀ ▀${reset} ${bluef}▀ ▀ ▀ ▀${reset} ${purplef}▀ ▀ ▀ ▀${reset} ${cyanf}▀ ▀ ▀ ▀${reset} ${boldon}${yellowf} ▄███████▄ ${redf} ▄██████▄ ${greenf} ▄██████▄ ${bluef} ▄██████▄ ${purplef} ▄██████▄ ${cyanf} ▄██████▄${reset} ${boldon}${yellowf}▄█████████▀▀ ${redf}▄${whitef}█▀█${redf}██${whitef}█▀█${redf}██▄ ${greenf}▄${whitef}█▀█${greenf}██${whitef}█▀█${greenf}██▄ ${bluef}▄${whitef}█▀█${bluef}██${whitef}█▀█${bluef}██▄ ${purplef}▄${whitef}█▀█${purplef}██${whitef}█▀█${purplef}██▄ ${cyanf}▄${whitef}█▀█${cyanf}██${whitef}█▀█${cyanf}██▄${reset} ${boldon}${yellowf}███████▀ ${redf}█${whitef}▄▄█${redf}██${whitef}▄▄█${redf}███ ${greenf}█${whitef}▄▄█${greenf}██${whitef}▄▄█${greenf}███ ${bluef}█${whitef}▄▄█${bluef}██${whitef}▄▄█${bluef}███ ${purplef}█${whitef}▄▄█${purplef}██${whitef}▄▄█${purplef}███ ${cyanf}█${whitef}▄▄█${cyanf}██${whitef}▄▄█${cyanf}███${reset} ${boldon}${yellowf}███████▄ ${redf}████████████ ${greenf}████████████ ${bluef}████████████ ${purplef}████████████ ${cyanf}████████████${reset} ${boldon}${yellowf}▀█████████▄▄ ${redf}██▀██▀▀██▀██ ${greenf}██▀██▀▀██▀██ ${bluef}██▀██▀▀██▀██ ${purplef}██▀██▀▀██▀██ ${cyanf}██▀██▀▀██▀██${reset} ${boldon}${yellowf} ▀███████▀ ${redf}▀ ▀ ▀ ▀ ${greenf}▀ ▀ ▀ ▀ ${bluef}▀ ▀ ▀ ▀ ${purplef}▀ ▀ ▀ ▀ ${cyanf}▀ ▀ ▀ ▀${reset} EOF #+end_src *** invade-em :PROPERTIES: :header-args+: :tangle ~/.local/bin/invade-em :shebang "#!/bin/bash" :END: #+begin_src bash # # ANSI color scheme script featuring Space Invaders # # Original: http://crunchbang.org/forums/viewtopic.php?pid=126921%23p126921#p126921 # Modified by lolilolicon # f=3 b=4 for j in f b; do for i in {0..7}; do printf -v $j$i %b "\e[${!j}${i}m" done done bld=$'\e[1m' rst=$'\e[0m' cat << EOF $f1 ▀▄ ▄▀ $f2 ▄▄▄████▄▄▄ $f3 ▄██▄ $f4 ▀▄ ▄▀ $f5 ▄▄▄████▄▄▄ $f6 ▄██▄ $rst $f1 ▄█▀███▀█▄ $f2███▀▀██▀▀███ $f3▄█▀██▀█▄ $f4 ▄█▀███▀█▄ $f5███▀▀██▀▀███ $f6▄█▀██▀█▄$rst $f1█▀███████▀█ $f2▀▀███▀▀███▀▀ $f3▀█▀██▀█▀ $f4█▀███████▀█ $f5▀▀███▀▀███▀▀ $f6▀█▀██▀█▀$rst $f1▀ ▀▄▄ ▄▄▀ ▀ $f2 ▀█▄ ▀▀ ▄█▀ $f3▀▄ ▄▀ $f4▀ ▀▄▄ ▄▄▀ ▀ $f5 ▀█▄ ▀▀ ▄█▀ $f6▀▄ ▄▀$rst $bld$f1▄ ▀▄ ▄▀ ▄ $f2 ▄▄▄████▄▄▄ $f3 ▄██▄ $f4▄ ▀▄ ▄▀ ▄ $f5 ▄▄▄████▄▄▄ $f6 ▄██▄ $rst $bld$f1█▄█▀███▀█▄█ $f2███▀▀██▀▀███ $f3▄█▀██▀█▄ $f4█▄█▀███▀█▄█ $f5███▀▀██▀▀███ $f6▄█▀██▀█▄$rst $bld$f1▀█████████▀ $f2▀▀▀██▀▀██▀▀▀ $f3▀▀█▀▀█▀▀ $f4▀█████████▀ $f5▀▀▀██▀▀██▀▀▀ $f6▀▀█▀▀█▀▀$rst $bld$f1 ▄▀ ▀▄ $f2▄▄▀▀ ▀▀ ▀▀▄▄ $f3▄▀▄▀▀▄▀▄ $f4 ▄▀ ▀▄ $f5▄▄▀▀ ▀▀ ▀▀▄▄ $f6▄▀▄▀▀▄▀▄$rst $f7▌$rst $f7▌$rst $f7 ▄█▄ $rst $f7▄█████████▄$rst $f7▀▀▀▀▀▀▀▀▀▀▀$rst EOF #+end_src