#+TITLE: Desktop Configuration This =.org= document is where I store all of my small time user-level configuration. I prefer to use programs that I can extend the functionality of via configuration files and source code. * Sway *** Variables #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes # Directional Keys set $left h set $down j set $up k set $right l # Mod Key set $mod Mod4 # Terminal set $term alacritty # Application Launcher set $menu killall wofi || wofi #+end_src *** General #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes # Start a terminal bindsym $mod+Return exec $term # Start wofi bindsym $mod+d exec $menu # Kill focused window bindsym $mod+Shift+q kill # Lock SwayWM bindsym Control+Shift+l exec swaylock # 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+x exec swaymsg -r exit #+end_src *** Media/Brightness #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes ## Volume bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle ## Volume for non-media button keyboards bindsym $mod+Shift+n exec pactl set-sink-volume @DEFAULT_SINK@ +5% bindsym $mod+Shift+b exec pactl set-sink-volume @DEFAULT_SINK@ -5% bindsym $mod+Shift+m exec pactl set-sink-mute @DEFAULT_SINK@ toggle # Media playerctl bindsym XF86AudioNext exec playerctl next bindsym XF86AudioPrev exec playerctl previous bindsym XF86AudioPlay exec playerctl play-pause # Backlight bindsym XF86MonBrightnessUp exec light -A 10 && notify-send "󰃞 Light" "Brightness: $(light)%" --hint="int:value:$(light)" bindsym XF86MonBrightnessDown exec light -U 10 && notify-send "󰃞 Light" "Brightness: $(light)%" --hint="int:value:$(light)" #+end_src *** Navigation & Focus #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes # 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 #+end_src *** Layout #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes # 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 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+r mode "resize" #+end_src *** Screenshot #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes # Screenshot (Grimshot) # Captures the currently active window bindsym $mod+g exec grimshot save active # Allows manually selecting a rectangular region bindsym $mod+Shift+g exec grimshot save area # Captures currently active output bindsym $mod+Mod1+g exec grimshot save output # Allows manually selecting a single window bindsym $mod+Ctrl+g exec grimshot save window # Screenshot (Grimshot) #+end_src *** Swaynag #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes # Turn the system off bindsym $mod+Shift+e exec swaynag -t custom -m 'What action would you like to perform?' -b 'Shutdown' 'poweroff' -b 'Restart' 'poweroff --reboot' -b 'Suspend' 'systemctl suspend' #+end_src *** Autostart #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes # Notifications exec_always --no-startup-id dunst # Wlsunset (Night Light) exec_always wlsunset -l 47.6 -L -122.3 -t 3000 -T 6500 # Clamshell Mode Script exec_always ~/.config/sway/clamshell.sh # udiskie - auto usb mounting exec --no-startup-id /usr/bin/udiskie # polkit #exec /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 # Network Manager tray applet exec /usr/bin/nm-applet --indicator # Keepassxc for_window [class="KeepassXC"] { move scratchpad } exec /usr/bin/keepassxc # flash focus exec_always flashfocus #+end_src *** Opacity #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes set $opacity 0.98 for_window [class=".*"] opacity $opacity for_window [app_id=".*"] opacity $opacity #+end_src *** Borders/Gaps #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes # Window Borders default_border none default_floating_border none # Gaps smart_gaps on gaps inner 5 gaps outer 2 #+end_src *** App Window Behavior #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes for_window [app_id="galendae"] floating enable, sticky enable, move position cursor, move down 35 #+end_src *** Idle Behavior #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes # Idle configuration exec swayidle -w \ timeout 120 'swaylock -f' \ timeout 600 'swaymsg "output * dpms off"' \ timeout 15 'if pgrep -x swaylock; then swaymsg "output * dpms off"; fi' \ resume 'swaymsg "output * dpms on"' \ before-sleep 'swaylock -f' #+end_src *** Input **** Keyboard #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes ### Input configuration # # Example configuration: # # input "2:14:SynPS/2_Synaptics_TouchPad" { # dwt enabled # tap enabled # natural_scroll enabled # middle_emulation enabled # } # # You can get the names of your inputs by running: swaymsg -t get_inputs # Read `man 5 sway-input` for more information about this section. input type:keyboard { # Capslock key should work as escape key # See /usr/share/X11/xkb/rules/xorg.lst for options xkb_layout "us(altgr-intl)" xkb_options caps:escape repeat_delay 250 repeat_rate 45 } #+end_src **** Mouse #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes # Hide mouse cursor after inactivity seat * hide_cursor 10000 #+end_src *** Clamshell Mode #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes set $laptop eDP-1 bindswitch --reload --locked lid:on output $laptop disable bindswitch --reload --locked lid:off output $laptop enable #+end_src When reloading sway while using clamshell mode, the displays may reset (i.e. enable the displays). We use a bash script to mitigate this: #+begin_src shell :tangle ~/.config/sway/clamshell.sh :mkdirp yes #!/usr/bin/bash if grep -q open /proc/acpi/button/lid/LID/state; then swaymsg output eDP-1 enable else swaymsg output eDP-1 disable fi #+end_src *** Wallpaper & Monitor(s) #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes #### WORK ##### # Monitors # You can get the names of your outputs by running: swaymsg -t get_outputs output eDP-1 scale 1 output eDP-1 pos 2560 0 res 1920x1080 bg ~/opalfiles/.config/wallpapers/priest.jpg fill output HDMI-A-1 scale 1 output HDMI-A-1 pos 0 0 res 2560x1440 bg ~/opalfiles/.config/wallpapers/priest.jpg fill #+end_src *** Workspaces #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes # Assign workspaces to numbers set $ws1 number 1 set $ws2 number 2 set $ws3 number 3 set $ws4 number 4 set $ws5 number 5 set $ws6 "work" # Switch to workspace bindsym $mod+1 workspace $ws1 bindsym $mod+2 workspace $ws2 bindsym $mod+3 workspace $ws3 bindsym $mod+4 workspace $ws4 bindsym $mod+5 workspace $ws5 bindsym $mod+6 workspace $ws6 # Move focused container to workspace bindsym $mod+Shift+1 move container to workspace $ws1 bindsym $mod+Shift+2 move container to workspace $ws2 bindsym $mod+Shift+3 move container to workspace $ws3 bindsym $mod+Shift+4 move container to workspace $ws4 bindsym $mod+Shift+5 move container to workspace $ws5 bindsym $mod+Shift+6 move container to workspace $ws6 #+end_src *** Status Bar #+begin_src shell :tangle ~/.config/sway/config :mkdirp yes # Status Bar: bar { swaybar_command waybar } #+end_src * Swaynag #+begin_src shell :tangle ~/.config/swaynag/config :mkdirp yes [custom] font=Iosevka 13 dismiss-button=Dismiss background=0f0f0f border=262626 border-bottom=262626 button-background=262626 text=f0f0f0 border-bottom-size=2 message-padding=5 details-border-size=2 button-border-size=0 button-gap=5 button-dismiss-gap=5 button-margin-right=5 button-padding=5 #+end_src * Swaylock #+begin_src shell :tangle ~/.config/swaylock/config :mkdirp yes # Image image=~/.config/wallpapers/wallpaper-town.jpg scaling=fill # Indicator ignore-empty-password indicator-caps-lock # Behavior show-failed-attempts #+end_src * Waybar *** waybar/config #+begin_src shell :tangle ~/.config/waybar/config :mkdirp yes { "layer": "top", "position": "top", "height": 35, "modules-left": ["sway/workspaces"], "modules-center": ["clock", "backlight"], "modules-right": ["idle_inhibitor", "pulseaudio", "network", "battery", "tray"], "sway/workspaces": { // "persistent_workspaces": { // "": ["HDMI-A-1"], // "": ["HDMI-A-1"], // "": ["HDMI-A-1"], // "": ["HDMI-A-1"], // "": ["HDMI-A-1"], // "": ["HDMI-A-1"], // }, "disable-scroll": true, "all-outputs": true, "format": "{icon}", // "format-icons": { // "1": "", // "2": "", // "3": "", // "4": "", // "5": "", // "6": "", // "7": "", // "urgent": "", // "focused": " ", // "default": "", // }, }, "sway/mode": { "format": "{}" }, "tray": { "icon-size": 18, "spacing": 8 }, "clock": { "format": "{: %I:%M %A %B %d}", "tooltip": false, "on-click": "galendae -c $HOME/.config/galendae-cal/galendae.conf" }, "battery": { "interval": 30, "states": { // "good": 95, "warning": 30, "critical": 15 }, "full-at": "99", "format": " {capacity}%", "format-good": " {capacity}%", // An empty format will hide the module "format-full": " Full", "format-charging": " {capacity}% " }, "network": { "interval": 5, "format-wifi": " {essid}", "format-ethernet": " {ifname}", "format-disconnected": "", "tooltip-format-wifi": "{essid}:{signalStrength}\nSpeed:{bandwidthDownBits} \n{ipaddr}" }, "pulseaudio": { "scroll-step": 1, "on-scroll-up": "amixer set Master 3%+", "on-click": "pavucontrol", "on-scroll-down": "amixer set Master 3%-", "format": "", "format": "{icon} {volume}%", "format-source": "{icon} {volume}%", "format-muted": " Muted", "format-icons": { "headset": "", "headphone": "", "default": ["", ""] }, }, "backlight": { "device": "intel_backlight", "format": "", "format-icons": ["", ""], // "on-scroll-up": "brightnessctl set 1%+", // "on-scroll-down": "brightnessctl set 1%-", "on-click": "wlsunset -l 47.6 -L -122.3 -t 3000 -T 6500" }, "idle_inhibitor": { "format": "{icon}", "format-icons": { "activated": " Idle Inhibit On", "deactivated": " Idle Inhibit Off", }, }, } #+end_src *** waybar/style.css #+begin_src shell :tangle ~/.config/waybar/style.css :mkdirp yes \* { border: none; border-radius: 0; font-family: Iosevka, FontAwesome; font-size: 15px; min-height: 0; } window#waybar { opacity: 0.7; background: #000000; color: #bebebe; } #workspaces button { color: #bebebe; background: transparent; padding: 0px 5px 0px 5px; margin: 5px 10px 0 10px; } #workspaces button.focused { color: white; margin: 5px 10px 0 10px; } #workspaces button.active { color: white; margin: 5px 10px 0 10px; } #workspaces button.urgent{ margin: 5px 10px 0 10px; padding: 0px 8px 0px 8px; animation-duration: 0.5s; animation-timing-function: linear; animation-iteration-count: infinite; animation-direction: alternate; border-radius: 7px; } #mode { font-family: "Iosevka"; margin: 0px 15px 0px 15px; padding: 0px 12px 0px 12px; color: black; background: white; } #battery{ margin:7px 4px 0 4px; border-radius: 5px; padding: 0px 8px 0px 8px; } #network { margin:7px 4px 0 4px; border-radius: 6px; padding: 0px 8px 0px 8px; } @keyframes critical { to { background: rgba(187,56,0, 1); border-radius: 7px; margin:7px 4px 0 4px; padding: 3px 8px 2px 8px; } } @keyframes urgent { to { background: rgba(212,140,0, 1); color: black; border-radius: 7px; } } #battery.critical:not(.charging) { padding: 0px 6px 0px 6px; color: white; animation-name: critical; animation-duration: 0.5s; animation-timing-function: linear; animation-iteration-count: infinite; animation-direction: alternate; } #clock { margin:7px 0 0 13px; font-family: Manjari; font-size: 16.5px; border-radius: 6px; padding: 3px 6px 2px 0px; } #clock:hover { background: rgba(40,40,40, .95); } #backlight { margin:7px 4px 0 4px; border-radius: 5px; padding: 3px 8px 2px 8px; } #pulseaudio { margin:7px 4px 0 4px; border-radius: 5px; padding: 0px 8px 0px 8px; } #tray { margin: 7px 15px 0 4px; background: rgba(40,40,40, .65); border-radius: 6px; padding: 0px 5px 0px 5px; } #idle_inhibitor { margin: 7px 4px 0 4px; border-radius: 6px; padding: 0px 5px 0px 5px; } #+end_src #+RESULTS: *** extra #+begin_src shell "sway/workspaces": { "disable-scroll": true, "all-outputs": false, "format": "{icon}", "format-icons": { "1": "", "2": "", "3": "", "4": "", "5": "", "6": "", "7": "", } #+end_src * Wofi *** wofi/config #+begin_src shell :tangle ~/.config/wofi/config :mkdirp yes style=/home/opal/.config/wofi/style.css show=drun width=1000 height=300 always_parse_args=true show_all=true print_command=true layer=overlay insensitive=true prompt=Search... term=alacritty #+end_src *** wofi/style.css #+begin_src shell :tangle ~/.config/wofi/style.css :mkdirp yes *{ font-family: monospace; } window { background-color: #7C818C; } #input { margin: 5px; border-radius: 0px; border: none; border-bottom: 3px solid black; background-color: #383C4A; color: white; } #inner-box { background-color: #383C4A; } #outer-box { margin: 5px; padding:20px; background-color: #383C4A; } #scroll { } #text { padding: 5px; color: white; } #entry:nth-child(even){ background-color: #404552; } #entry:selected { background-color: #5291e2; } #text:selected { } #+end_src * Dunst #+begin_src shell :tangle ~/.config/dunst/dunstrc :mkdirp yes [global] monitor = 0 follow = keyboard geometry = "250x50-24+24" indicate_hidden = yes shrink = no separator_height = 0 padding = 16 horizontal_padding = 24 frame_width = 2 sort = no idle_threshold = 120 font = Noto Sans 8 line_height = 4 markup = full format = "%s\n%b" alignment = left show_age_threshold = 60 word_wrap = yes ignore_newline = no stack_duplicates = false hide_duplicate_count = yes show_indicators = no icon_position = off sticky_history = yes history_length = 20 browser = /usr/bin/icecat -new-tab always_run_script = true title = Dunst class = Dunst [shortcuts] close = ctrl+space close_all = ctrl+shift+space history = ctrl+grave context = ctrl+shift+period [urgency_low] background = "#2f343f" foreground = "#d8dee8" timeout = 2 [urgency_normal] background = "#2f343f" foreground = "#d8dee8" timeout = 4 [urgency_critical] background = "#2f343f" foreground = "#d8dee8" frame_color = "#bf616a" timeout = 0 #+end_src * Galendae (Calendar Popup) #+begin_src shell :tangle ~/.config/galendae-cal/galendae.conf ### WINDOW SETTINGS # Stick window to all workspaces: 0=No, 1=Yes stick=1 # Undecorated window: 0=No, 1=Yes undecorated=1 # Close the window if it loses focus: 0=No, 1=Yes close_on_unfocus=1 # Initial window position: 'center', 'mouse' or 'none' position=mouse # Move the window horizontally from its intial position x_offset=1 # Move the window vertically from its initial position y_offset=1 ### COLORS # Window background specified with CSS color background_color=#000000 # Text color specified with CSS color foreground_color=#dfdfdf # Dates of previous and following months, colored with CSS fringe_date_color=#404040 # Highlight color for the current date highlight_color=#c61740 ### FONTS # Month font with CSS size and weight month_font_size=xx-large month_font_weight=normal # Weekday column header font with CSS size and weight day_font_size=75% day_font_weight=normal # Date number font with CSS size and weight date_font_size=x-large date_font_weight=bold # Arrow font, ie '<' and '>' with CSS size and weight arrow_font_size = xx-large arrow_font_weight = bold ### CALENDAR SETTINGS # Sunday=0, Monday=1, Tuesday=2, Wednesday=3 # Thursday=4, Friday=5, Saturday=6 week_start=1 #+end_src * Qutebrowser #+begin_src shell :tangle ~/.config/qutebrowser/config.py #!/usr/bin/env python3 config.load_autoconfig() c.content.javascript.enabled = False c.content.user_stylesheets = [ "stylesheet.css" ] c.downloads.location.directory = "~/downloads" c.editor.command = [ "alacritty", "-e", "vim", "{}" ] c.editor.encoding = "utf-8" c.url.searchengines = { "DEFAULT" : "https://search.brave.com/search?q={}", } c.url.start_pages = [ "https://search.brave.com" ] config.bind('', 'hint links spawn --detach mpv --force-window yes {hint-url}') #+end_src * Zsh Aside from using e-shell for quick command line usage, I mainly use vterm with Zsh. It's a bit of a complicated setup but allows for the maximum number of files possible to live in .config instead of littering my home directory. ** zshrc #+begin_src shell :tangle ~/opalfiles/.config/zsh/.zshrc :mkdirp yes #### ~~~~ General ~~~~ ##### HISTFILE=$XDG_CONFIG_HOME/zsh/.history #### ~~~~ Path Additions ~~~~ ##### export PATH=/home/opal/scripts:$PATH # Scripts export PATH=/home/opal/.config/emacs/bin:$PATH # Doom Path export PATH=/home/opal/.local/bin:$PATH # .local path #### ~~~~ Locale ~~~~ ##### export LANG=en_US.UTF-8 # #### ~~~~ Import ~~~~ ##### ALIAS_LOCATION="$XDG_CONFIG_HOME/zsh/zsh_aliases" FUNCTION_LOCATION="$XDG_CONFIG_HOME/zsh/zsh_functions" . $ALIAS_LOCATION . $FUNCTION_LOCATION #### ~~~~ Prompt ~~~~ #### git_prompt_status() { local INDEX STATUS INDEX=$(command git status --porcelain -b 2> /dev/null) STATUS="" if $(echo "$INDEX" | command grep -E '^\?\? ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$STATUS" fi if $(echo "$INDEX" | grep '^A ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" elif $(echo "$INDEX" | grep '^M ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" elif $(echo "$INDEX" | grep '^MM ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" fi if $(echo "$INDEX" | grep '^ M ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" elif $(echo "$INDEX" | grep '^MM ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" fi if $(echo "$INDEX" | grep '^R ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_RENAMED$STATUS" fi if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" elif $(echo "$INDEX" | grep '^D ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" fi if $(command git rev-parse --verify refs/stash >/dev/null 2>&1); then STATUS="$ZSH_THEME_GIT_PROMPT_STASHED$STATUS" fi if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$STATUS" fi if $(echo "$INDEX" | grep '^## [^ ]\+ .*ahead' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_AHEAD$STATUS" fi if $(echo "$INDEX" | grep '^## [^ ]\+ .*behind' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_BEHIND$STATUS" fi if $(echo "$INDEX" | grep '^## [^ ]\+ .*diverged' &> /dev/null); then STATUS="$ZSH_THEME_GIT_PROMPT_DIVERGED$STATUS" fi if [[ ! -z "$STATUS" ]]; then echo " [ $STATUS]" fi } prompt_git_branch() { autoload -Uz vcs_info precmd_vcs_info() { vcs_info } precmd_functions+=( precmd_vcs_info ) setopt prompt_subst zstyle ':vcs_info:git:*' formats '%b' } prompt_git_info() { [ ! -z "$vcs_info_msg_0_" ] && echo "$ZSH_THEME_GIT_PROMPT_PREFIX%F{white}$vcs_info_msg_0_%f$ZSH_THEME_GIT_PROMPT_SUFFIX" } prompt_purity_precmd() { # Pass a line before each prompt print -P '' } prompt_purification_setup() { # Display git branch autoload -Uz add-zsh-hook add-zsh-hook precmd prompt_purity_precmd ZSH_THEME_GIT_PROMPT_PREFIX=" %F{red}λ%f:" ZSH_THEME_GIT_PROMPT_DIRTY="" ZSH_THEME_GIT_PROMPT_CLEAN="" ZSH_THEME_GIT_PROMPT_ADDED="%F{green}+%f " ZSH_THEME_GIT_PROMPT_MODIFIED="%F{blue}%f " ZSH_THEME_GIT_PROMPT_DELETED="%F{red}x%f " ZSH_THEME_GIT_PROMPT_RENAMED="%F{magenta}➜%f " ZSH_THEME_GIT_PROMPT_UNMERGED="%F{yellow}═%f " ZSH_THEME_GIT_PROMPT_UNTRACKED="%F{white}%f " ZSH_THEME_GIT_PROMPT_STASHED="%B%F{red}%f%b " ZSH_THEME_GIT_PROMPT_BEHIND="%B%F{red}%f%b " ZSH_THEME_GIT_PROMPT_AHEAD="%B%F{green}%f%b " prompt_git_branch RPROMPT='$(prompt_git_info) $(git_prompt_status)' PROMPT=$'%F{white}%~ %B%F{blue}>%f%b ' } prompt_purification_setup bindkey "^[[1;5C" forward-word bindkey "^[[1;5D" backward-word source /home/opal/bin/zsh-autocomplete/zsh-autocomplete.plugin.zsh #source <(kubectl completion zsh) #+end_src ** zsh_aliases #+begin_src shell :tangle ~/opalfiles/.config/zsh/zsh_aliases # ~ Pacman ~ # alias install="sudo pacman -S" alias remove="sudo pacman -R" alias search="pacman -Ss" alias update="sudo pacman -Syyu" # ~ Commands ~ # alias ip="ip -c" alias rm='echo "This is not the command you are looking for."; false' alias cls='ls-awk' # ~ Heck the GNU Coreutils ~ # alias ls="exa" alias cat="bat" alias grep="rg" alias dog="dog-dig" # ~ Derp ~ # alias unmount="umount" alias please="sudo" # ~ Source Zsh Configuration ~ # alias zshrcsource="source ~/.config/zsh/.zshrc" #+end_src ** zsh_functions #+begin_src shell :tangle ~/opalfiles/.config/zsh/zsh_functions # Make directory and CD into i. mkcd () { mkdir -p -- "$1" && cd -P -- "$1" } ls-awk () { ls -l --color=always | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \ ,*2^(8-i));if(k)printf("%0o ",k);print}' } dog-dig () { dog "$1" A AAAA MX NS TXT SOA } #+end_src ** zprofile #+begin_src shell :tangle ~/opalfiles/.config/zsh/.zprofile :mkdirp yes # Each new shell auto-imports all environment variables. # Hence exporting needs to be done only once. # Also, all non-login shells are descendants of a login shell. # Ergo, exports need to be done in the login shell only. # Hence, we put exports in .zprofile # Only vars needed by external commands should be exported. # Note that you can export vars w/out assigning a value to them. eval $(keychain --eval --quiet ry_ecdsa) export XDG_CURRENT_DESKTOP=Unity export BROWSER=/usr/bin/qutebrowser export BW_SESSION="yWLHouCQOUDNWXOgK7eX/7lN4hvkqwyyjhfvhKlDwGjJOEpNX6G9dA/FLUqJ+QCpHxnGrVFDhmYjpGPmZZ+cnA==" export XDG_CONFIG_HOME=~/.config export XDG_CACHE_HOME=~/.cache export XDG_DATA_HOME=~/.local/share export XDG_STATE_HOME=~/.config/zsh export EDITOR=vim export VISUAL=vim #+end_src ** zshenv #+begin_src shell :tangle ~/opalfiles/.zshenv :mkdirp yes if [[ -z "$XDG_CONFIG_HOME" ]] then export XDG_CONFIG_HOME="$HOME/.config" fi if [[ -d "$XDG_CONFIG_HOME/zsh" ]] then export ZDOTDIR="$XDG_CONFIG_HOME/zsh" fi #+end_src #+RESULTS: * Alacritty #+begin_src sh :tangle ~/opalfiles/.config/alacritty/alacritty.yml :mkdirp yes # Env env: TERM: xterm-256color # Font configuration size: 14 offset: x: 0 y: 0 #+end_src * XDG User Directories #+begin_src shell :tangle ~/opalfiles/.config/user-dirs.dirs :mkdirp yes # This file is written by xdg-user-dirs-update # If you want to change or add directories, just edit the line you're # interested in. All local changes will be retained on the next run. # Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped # homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an # absolute path. No other format is supported. # XDG_DESKTOP_DIR="$HOME" XDG_DOWNLOAD_DIR="$HOME/downloads" XDG_TEMPLATES_DIR="$HOME" XDG_PUBLICSHARE_DIR="$HOME" XDG_DOCUMENTS_DIR="$HOME/documents" XDG_MUSIC_DIR="$HOME/music" XDG_PICTURES_DIR="$HOME/pictures" XDG_VIDEOS_DIR="$HOME/videos" #+end_src * Archive Programs that I've retired for one reason or another, and their configurations. ** i3 #+begin_src shell # Autostart # Background exec_always --no-startup-id feh --bg-scale ~/.config/wallpapers/fog-wallpaper.jpg # Redshift exec_always --no-startup-id redshift # Picom exec_always --no-startup-id picom & # Turn Caps Lock into Escape because Caps Lock is useless unless you're a DB admin. exec_always --no-startup-id xmodmap ~/.config/xmodmap/xmodmap # Set key repeat rate so text cursors move faster. exec_always --no-startup-id xset r rate 200 35 # Dunst exec_always --no-startup-id dunst # xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the # screen before suspend. Use loginctl lock-session to lock your screen. # exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork # NetworkManager is the most popular way to manage wireless networks on Linux, # and nm-applet is a desktop environment-independent system tray GUI for it. exec --no-startup-id nm-applet # i3 config file (v4) set $mod Mod4 # Title Bars for_window [class="*"] border pixel 0 # Gaps smart_gaps on gaps inner 10 gaps outer 10 # Font for window titles. Will also be used by the bar unless a different font # is used in the bar {} block below. font pango:Fira Code Regular 12 # This font is widely installed, provides lots of unicode glyphs, right-to-left # text rendering and scalability on retina/hidpi displays (thanks to pango). # font pango:DejaVu Sans Mono 8 # The combination of xss-lock, nm-applet and pactl is a popular choice, so # they are included here as an example. Modify as you see fit. # Use pactl to adjust volume in PulseAudio. set $refresh_i3status killall -SIGUSR1 i3status bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status # Use Mouse+$mod to drag floating windows to their wanted position floating_modifier $mod # Lock bindsym Control+Shift+e exec loginctl lock-session # start a terminal bindsym $mod+Return exec alacritty # kill focused window bindsym $mod+Shift+q kill # start dmenu (a program launcher) bindsym $mod+d exec rofi -show drun -columns 3 -theme ~/.config/rofi/config.rasi # There also is the (new) i3-dmenu-desktop which only displays applications # shipping a .desktop file. It is a wrapper around dmenu, so you need that # installed. # bindsym $mod+d exec --no-startup-id i3-dmenu-desktop # change focus bindsym $mod+h focus left bindsym $mod+j focus down bindsym $mod+k focus up bindsym $mod+l focus right # move focused window bindsym $mod+Shift+h move left bindsym $mod+Shift+j move down bindsym $mod+Shift+k move up bindsym $mod+Shift+l move right # split in horizontal orientation bindsym $mod+b split h # split in vertical orientation bindsym $mod+v split v # enter fullscreen mode for the focused container bindsym $mod+f fullscreen toggle # change container layout (stacked, tabbed, toggle split) bindsym $mod+s layout stacking bindsym $mod+w layout tabbed bindsym $mod+e layout toggle split # toggle tiling / floating bindsym $mod+Shift+space floating toggle # change focus between tiling / floating windows bindsym $mod+space focus mode_toggle # focus the parent container bindsym $mod+a focus parent # focus the child container #bindsym $mod+d focus child # Define names for default workspaces for which we configure key bindings later on. # We use variables to avoid repeating the names in multiple places. set $ws1 "1" set $ws2 "2" set $ws3 "3" set $ws4 "4" set $ws5 "5" set $ws6 "6" set $ws7 "7" set $ws8 "8" set $ws9 "9" set $ws10 "10" # switch to workspace bindsym $mod+1 workspace number $ws1 bindsym $mod+2 workspace number $ws2 bindsym $mod+3 workspace number $ws3 bindsym $mod+4 workspace number $ws4 bindsym $mod+5 workspace number $ws5 bindsym $mod+6 workspace number $ws6 bindsym $mod+7 workspace number $ws7 bindsym $mod+8 workspace number $ws8 bindsym $mod+9 workspace number $ws9 bindsym $mod+0 workspace number $ws10 # move focused container to workspace bindsym $mod+Shift+1 move container to workspace number $ws1 bindsym $mod+Shift+2 move container to workspace number $ws2 bindsym $mod+Shift+3 move container to workspace number $ws3 bindsym $mod+Shift+4 move container to workspace number $ws4 bindsym $mod+Shift+5 move container to workspace number $ws5 bindsym $mod+Shift+6 move container to workspace number $ws6 bindsym $mod+Shift+7 move container to workspace number $ws7 bindsym $mod+Shift+8 move container to workspace number $ws8 bindsym $mod+Shift+9 move container to workspace number $ws9 bindsym $mod+Shift+0 move container to workspace number $ws10 # reload the configuration file bindsym $mod+Shift+c reload # restart i3 inplace (preserves your layout/session, can be used to upgrade i3) bindsym $mod+Shift+r restart # exit i3 (logs you out of your X session) bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" # resize window (you can also use the mouse for that) mode "resize" { # These bindings trigger as soon as you enter the resize mode # Pressing left will shrink the window’s width. # Pressing right will grow the window’s width. # Pressing up will shrink the window’s height. # Pressing down will grow the window’s height. bindsym j resize shrink width 10 px or 10 ppt bindsym k resize grow height 10 px or 10 ppt bindsym l resize shrink height 10 px or 10 ppt bindsym semicolon resize grow width 10 px or 10 ppt # same bindings, but for the arrow keys bindsym Left resize shrink width 10 px or 10 ppt bindsym Down resize grow height 10 px or 10 ppt bindsym Up resize shrink height 10 px or 10 ppt bindsym Right resize grow width 10 px or 10 ppt # back to normal: Enter or Escape or $mod+r bindsym Return mode "default" bindsym Escape mode "default" bindsym $mod+r mode "default" } bindsym $mod+r mode "resize" # Start i3bar to display a workspace bar (plus the system information i3status # finds out, if available) # panel bar { colors { background #2f343f statusline #2f343f separator #4b5262 # colour of border, background, and text focused_workspace #2f343f #bf616a #d8dee8 active_workspace #2f343f #2f343f #d8dee8 inactive_workspace #2f343f #2f343f #d8dee8 urgent_workspacei #2f343f #ebcb8b #2f343f } status_command i3status position top } #+end_src ** i3status #+begin_src shell general { output_format = "i3bar" colors = false markup = pango interval = 5 color_good = '#2f343f' color_degraded = '#ebcb8b' color_bad = '#ba5e57' } order += "load" order += "cpu_temperature 0" order += "disk /" order += "disk /home" order += "ethernet enp0s13f0u2u1" order += "wireless wlp0s20f3" order += "volume master" order += "battery 0" order += "tztime local" load { format = "  %5min Load " } cpu_temperature 0 { format = "  %degrees °C " path = "/sys/class/thermal/thermal_zone0/temp" } disk "/" { format = "  %free Free " } disk "/home" { format = "  %free Free " } ethernet enp0s13f0u2u1 { format_up = "  %ip " format_down = "  Disconnected " } wireless wlp0s20f3 { format_up = "  %essid " format_down = "  Disconnected " } volume master { format = "  %volume " format_muted = "  Muted " device = "default" mixer = "Master" mixer_idx = 0 } battery 0 { last_full_capacity = true format = "  %status %percentage " format_down = "No Battery" status_chr = "Charging" status_bat = "Battery" status_unk = "Unknown" status_full = "Charged" path = "/sys/class/power_supply/BAT0/uevent" low_threshold = 10 } tztime local { format = " %time " format_time = " %a %-d %b %H:%M" } #+end_src ** Rofi #+begin_src shell configuration { modi: "drun"; font: "Fira Code Regular 10"; show-icons: true; icon-theme: "Reversal-dark"; display-drun: ""; drun-display-format: "{name}"; sidebar-mode: false; } @theme "/dev/null" * { bg: #151515; fg: #e8e8d3; accent: #687363; button: #1c1c1c; background-color: @bg; text-color: @fg; } window { border-radius: 7px; width: 50%; padding: 32px; } prompt { background-color: @button; enabled: true; padding: 0.5% 32px 0% -0.5%; font: "Rubik 10"; } entry { placeholder: "Search"; background-color: @button; placeholder-color: @fg; expand: true; padding: 0.15% 0% 0% 0%; } inputbar { children: [ prompt, entry ]; background-color: @button; expand: false; border-radius: 6px; margin: 0%; padding: 10px; } listview { columns: 4; lines: 3; cycle: false; dynamic: true; layout: vertical; } mainbox { children: [ inputbar, listview ]; spacing: 2%; padding: 2% 1% 2% 1%; } element { orientation: vertical; padding: 2% 0% 2% 0%; } element-icon { size: 48px; horizontal-align: 0.5; } element-text { expand: true; horizontal-align: 0.5; vertical-align: 0.5; margin: 0.5% 0.5% -0.5% 0.5%; } element-text, element-icon { background-color: inherit; text-color: inherit; } element selected { background-color: @button; border-radius: 6px; } #+end_src ** Picom #+begin_src shell ################################# # Shadows # ################################# # Enabled client-side shadows on windows. Note desktop windows # (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow, # unless explicitly requested using the wintypes option. # # shadow = false shadow = true; # The blur radius for shadows, in pixels. (defaults to 12) # shadow-radius = 12 shadow-radius = 7; # The opacity of shadows. (0.0 - 1.0, defaults to 0.75) # shadow-opacity = .75 # The left offset for shadows, in pixels. (defaults to -15) # shadow-offset-x = -15 shadow-offset-x = -7; # The top offset for shadows, in pixels. (defaults to -15) # shadow-offset-y = -15 shadow-offset-y = -7; # Red color value of shadow (0.0 - 1.0, defaults to 0). # shadow-red = 0 # Green color value of shadow (0.0 - 1.0, defaults to 0). # shadow-green = 0 # Blue color value of shadow (0.0 - 1.0, defaults to 0). # shadow-blue = 0 # Hex string color value of shadow (#000000 - #FFFFFF, defaults to #000000). This option will override options set shadow-(red/green/blue) # shadow-color = "#000000" # Specify a list of conditions of windows that should have no shadow. # # examples: # shadow-exclude = "n:e:Notification"; # # shadow-exclude = [] shadow-exclude = [ "name = 'Notification'", "class_g = 'Conky'", "class_g ?= 'Notify-osd'", "class_g = 'Cairo-clock'", "_GTK_FRAME_EXTENTS@:c" ]; # Specify a list of conditions of windows that should have no shadow painted over, such as a dock window. # clip-shadow-above = [] # Specify a X geometry that describes the region in which shadow should not # be painted in, such as a dock window region. Use # shadow-exclude-reg = "x10+0+0" # for example, if the 10 pixels on the bottom of the screen should not have shadows painted on. # # shadow-exclude-reg = "" # Crop shadow of a window fully on a particular Xinerama screen to the screen. # xinerama-shadow-crop = false ################################# # Fading # ################################# # Fade windows in/out when opening/closing and when opacity changes, # unless no-fading-openclose is used. # fading = false fading = true; # Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) # fade-in-step = 0.028 fade-in-step = 0.03; # Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) # fade-out-step = 0.03 fade-out-step = 0.03; # The time between steps in fade step, in milliseconds. (> 0, defaults to 10) # fade-delta = 10 # Specify a list of conditions of windows that should not be faded. # fade-exclude = [] # Do not fade on window open/close. # no-fading-openclose = false # Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc. # no-fading-destroyed-argb = false ################################# # Transparency / Opacity # ################################# # Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0) # inactive-opacity = 1 inactive-opacity = 0.8; # Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default) # frame-opacity = 1.0 frame-opacity = 0.7; # Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows. # inactive-opacity-override = true inactive-opacity-override = false; # Default opacity for active windows. (0.0 - 1.0, defaults to 1.0) # active-opacity = 1.0 # Dim inactive windows. (0.0 - 1.0, defaults to 0.0) # inactive-dim = 0.0 # Specify a list of conditions of windows that should never be considered focused. # focus-exclude = [] focus-exclude = [ "class_g = 'Cairo-clock'" ]; # Use fixed inactive dim value, instead of adjusting according to window opacity. # inactive-dim-fixed = 1.0 # Specify a list of opacity rules, in the format `PERCENT:PATTERN`, # like `50:name *= "Firefox"`. picom-trans is recommended over this. # Note we don't make any guarantee about possible conflicts with other # programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows. # example: # opacity-rule = [ "80:class_g = 'URxvt'" ]; # # opacity-rule = [] ################################# # Corners # ################################# # Sets the radius of rounded window corners. When > 0, the compositor will # round the corners of windows. Does not interact well with # `transparent-clipping`. corner-radius = 0 # Exclude conditions for rounded corners. rounded-corners-exclude = [ "window_type = 'dock'", "window_type = 'desktop'" ]; ################################# # Background-Blurring # ################################# # Parameters for background blurring, see the *BLUR* section for more information. # blur-method = # blur-size = 12 # # blur-deviation = false # # blur-strength = 5 # Blur background of semi-transparent / ARGB windows. # Bad in performance, with driver-dependent behavior. # The name of the switch may change without prior notifications. # # blur-background = false # Blur background of windows when the window frame is not opaque. # Implies: # blur-background # Bad in performance, with driver-dependent behavior. The name may change. # # blur-background-frame = false # Use fixed blur strength rather than adjusting according to window opacity. # blur-background-fixed = false # Specify the blur convolution kernel, with the following format: # example: # blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"; # # blur-kern = "" blur-kern = "3x3box"; # Exclude conditions for background blur. # blur-background-exclude = [] blur-background-exclude = [ "window_type = 'dock'", "window_type = 'desktop'", "_GTK_FRAME_EXTENTS@:c" ]; ################################# # General Settings # ################################# # Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers. # daemon = false # Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`. # `xrender` is the default one. # # backend = "glx" backend = "xrender"; # Enable/disable VSync. # vsync = false vsync = true; # Enable remote control via D-Bus. See the *D-BUS API* section below for more details. # dbus = false # Try to detect WM windows (a non-override-redirect window with no # child that has 'WM_STATE') and mark them as active. # # mark-wmwin-focused = false mark-wmwin-focused = true; # Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused. # mark-ovredir-focused = false mark-ovredir-focused = true; # Try to detect windows with rounded corners and don't consider them # shaped windows. The accuracy is not very high, unfortunately. # # detect-rounded-corners = false detect-rounded-corners = true; # Detect '_NET_WM_OPACITY' on client windows, useful for window managers # not passing '_NET_WM_OPACITY' of client windows to frame windows. # # detect-client-opacity = false detect-client-opacity = true; # Specify refresh rate of the screen. If not specified or 0, picom will # try detecting this with X RandR extension. # # refresh-rate = 60 refresh-rate = 0; # Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window, # rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy, # provided that the WM supports it. # # use-ewmh-active-win = false # Unredirect all windows if a full-screen opaque window is detected, # to maximize performance for full-screen windows. Known to cause flickering # when redirecting/unredirecting windows. # # unredir-if-possible = false # Delay before unredirecting the window, in milliseconds. Defaults to 0. # unredir-if-possible-delay = 0 # Conditions of windows that shouldn't be considered full-screen for unredirecting screen. # unredir-if-possible-exclude = [] # Use 'WM_TRANSIENT_FOR' to group windows, and consider windows # in the same group focused at the same time. # # detect-transient = false detect-transient = true; # Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same # group focused at the same time. This usually means windows from the same application # will be considered focused or unfocused at the same time. # 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too. # # detect-client-leader = false # Resize damaged region by a specific number of pixels. # A positive value enlarges it while a negative one shrinks it. # If the value is positive, those additional pixels will not be actually painted # to screen, only used in blur calculation, and such. (Due to technical limitations, # with use-damage, those pixels will still be incorrectly painted to screen.) # Primarily used to fix the line corruption issues of blur, # in which case you should use the blur radius value here # (e.g. with a 3x3 kernel, you should use `--resize-damage 1`, # with a 5x5 one you use `--resize-damage 2`, and so on). # May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly. # # resize-damage = 1 # Specify a list of conditions of windows that should be painted with inverted color. # Resource-hogging, and is not well tested. # # invert-color-include = [] # GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer. # Might cause incorrect opacity when rendering transparent content (but never # practically happened) and may not work with blur-background. # My tests show a 15% performance boost. Recommended. # # glx-no-stencil = false # GLX backend: Avoid rebinding pixmap on window damage. # Probably could improve performance on rapid window content changes, # but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.). # Recommended if it works. # # glx-no-rebind-pixmap = false # Disable the use of damage information. # This cause the whole screen to be redrawn everytime, instead of the part of the screen # has actually changed. Potentially degrades the performance, but might fix some artifacts. # The opposing option is use-damage # # no-use-damage = false use-damage = true; # Use X Sync fence to sync clients' draw calls, to make sure all draw # calls are finished before picom starts drawing. Needed on nvidia-drivers # with GLX backend for some users. # # xrender-sync-fence = false # GLX backend: Use specified GLSL fragment shader for rendering window contents. # See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl` # in the source tree for examples. # # glx-fshader-win = "" # Force all windows to be painted with blending. Useful if you # have a glx-fshader-win that could turn opaque pixels transparent. # # force-win-blend = false # Do not use EWMH to detect fullscreen windows. # Reverts to checking if a window is fullscreen based only on its size and coordinates. # # no-ewmh-fullscreen = false # Dimming bright windows so their brightness doesn't exceed this set value. # Brightness of a window is estimated by averaging all pixels in the window, # so this could comes with a performance hit. # Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0) # # max-brightness = 1.0 # Make transparent windows clip other windows like non-transparent windows do, # instead of blending on top of them. # # transparent-clipping = false # Set the log level. Possible values are: # "trace", "debug", "info", "warn", "error" # in increasing level of importance. Case doesn't matter. # If using the "TRACE" log level, it's better to log into a file # using *--log-file*, since it can generate a huge stream of logs. # # log-level = "debug" log-level = "warn"; # Set the log file. # If *--log-file* is never specified, logs will be written to stderr. # Otherwise, logs will to written to the given file, though some of the early # logs might still be written to the stderr. # When setting this option from the config file, it is recommended to use an absolute path. # # log-file = "/path/to/your/log/file" # Show all X errors (for debugging) # show-all-xerrors = false # Write process ID to a file. # write-pid-path = "/path/to/your/log/file" # Window type settings # # 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard: # "unknown", "desktop", "dock", "toolbar", "menu", "utility", # "splash", "dialog", "normal", "dropdown_menu", "popup_menu", # "tooltip", "notification", "combo", and "dnd". # # Following per window-type options are available: :: # # fade, shadow::: # Controls window-type-specific shadow and fade settings. # # opacity::: # Controls default opacity of the window type. # # focus::: # Controls whether the window of this type is to be always considered focused. # (By default, all window types except "normal" and "dialog" has this on.) # # full-shadow::: # Controls whether shadow is drawn under the parts of the window that you # normally won't be able to see. Useful when the window has parts of it # transparent, and you want shadows in those areas. # # clip-shadow-above::: # Controls wether shadows that would have been drawn above the window should # be clipped. Useful for dock windows that should have no shadow painted on top. # # redir-ignore::: # Controls whether this type of windows should cause screen to become # redirected again after been unredirected. If you have unredir-if-possible # set, and doesn't want certain window to cause unnecessary screen redirection, # you can set this to `true`. # wintypes: { tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; }; dock = { shadow = false; clip-shadow-above = true; } dnd = { shadow = false; } popup_menu = { opacity = 0.8; } dropdown_menu = { opacity = 0.8; } }; #+end_src ** Redshift #+begin_src shell [redshift] temp-day=5700 temp-night=3400 fade=1 location-provider=manual adjustment-method=randr [manual] lat=47.6 lon=-122.3 #+end_src