diff --git a/.gitmodules b/.gitmodules
index b1846ad..c6736bf 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -49,3 +49,9 @@
[submodule "tmux/oh-my-tmux"]
path = tmux/oh-my-tmux
url = https://github.com/gpakosz/.tmux.git
+[submodule "tmux/tmux-open"]
+ path = tmux/tmux-open
+ url = https://github.com/tmux-plugins/tmux-open
+[submodule "i3/helpers/recently_used"]
+ path = i3/helpers/recently_used
+ url = https://github.com/xenomachina/recently_used
diff --git a/TODO.md b/TODO.md
index 943395f..0a48b81 100644
--- a/TODO.md
+++ b/TODO.md
@@ -1,16 +1,24 @@
# Things to clean up
-* Premade launchers for Firefox (one for each profile), IDEs, Discord, Spotify, which start the profiles on the correct workspace.
-* Brightness and volume indicators when pressing the respective shortcuts - yad?
+* Keybind launchers for IDEs, some file explorer, which start the apps on the correct workspace and switch to that workspace.
* Configure Barista bar
* Include mail notifier (count of unread/read messages in INBOX)
* Include calendar notifier (next event name+time, events today/tomorrow)
* Include yubikey notifier (U2F waiting to trigger)
-* Configure Rofi more intimately
+* Configure Rofi more intimately as a multi-launcher
+* Use Rofi for the confirmation dialogue for exiting
+* Use dunstify for a notification after reloading the i3 config
* Include the mozc and dunst configs and rofi configs in here
-* Configure alacritty and make it the new i3 terminal
-* Set up the xscreensaver config to be shared between machines
-* Group the fonts together to be sent to gubal and make Lilex the primary alacritty font, while Gohu is the primary i3 font.
+* Install+configure (or is it configure+install?) xst and make it the new i3 terminal
+* Store the Ubuntu NerdFonts on Gubal.
* Wrap the lock process in a wrapper which pauses dunst and then unpauses it
-* Add a fortune to the start of each new terminal session
-* Enable some form of gamma shifting (if it's even possible...)
+* Enable automatic gamma shifting with gammastep using the randr method
+* Replace i3 shell scripts with Go binaries - or maybe just one Go binary with many options, busybox-style?
+* Set up picom as compositor for i3, and embed its config here
+* Set up individual desktop entries for the two firefox profiles with their -P and --class settings.
+* Theme Rofi, dunst, i3, and xst - maybe use user scripts below?
+* Add battery warning for low battery, and persistent battery warning for critical battery
+* Add shutdown and reboot options to the main rofi menu - maybe use user scripts below?
+* Upgrade rofi to the latest - v 1.6.1 - from source
+* Add user scripts to rofi to make it prettier and more useful: https://github.com/davatorium/rofi/wiki/User-scripts or https://github.com/topics/rofi
+* Set up a desktop background
diff --git a/alacritty/alacritty.yml b/alacritty/alacritty.yml
new file mode 100644
index 0000000..acb55ef
--- /dev/null
+++ b/alacritty/alacritty.yml
@@ -0,0 +1,852 @@
+# Configuration for Alacritty, the GPU enhanced terminal emulator.
+
+# Import additional configuration files
+#
+# Imports are loaded in order, skipping all missing files, with the importing
+# file being loaded last. If a field is already present in a previous import, it
+# will be replaced.
+#
+# All imports must either be absolute paths starting with `/`, or paths relative
+# to the user's home directory starting with `~/`.
+import:
+ - ~/.config/alacritty/themes/tokyo-night.yml
+
+# Any items in the `env` entry below will be added as
+# environment variables. Some entries may override variables
+# set by alacritty itself.
+#env:
+ # TERM variable
+ #
+ # This value is used to set the `$TERM` environment variable for
+ # each instance of Alacritty. If it is not present, alacritty will
+ # check the local terminfo database and use `alacritty` if it is
+ # available, otherwise `xterm-256color` is used.
+ #TERM: alacritty
+
+window:
+ # Window dimensions (changes require restart)
+ #
+ # Number of lines/columns (not pixels) in the terminal. The number of columns
+ # must be at least `2`, while using a value of `0` for columns and lines will
+ # fall back to the window manager's recommended size.
+ #dimensions:
+ # columns: 0
+ # lines: 0
+
+ # Window position (changes require restart)
+ #
+ # Specified in number of pixels.
+ # If the position is not set, the window manager will handle the placement.
+ #position:
+ # x: 0
+ # y: 0
+
+ # Window padding (changes require restart)
+ #
+ # Blank space added around the window in pixels. This padding is scaled
+ # by DPI and the specified value is always added at both opposing sides.
+ #padding:
+ # x: 0
+ # y: 0
+
+ # Spread additional padding evenly around the terminal content.
+ #dynamic_padding: false
+
+ # Window decorations
+ #
+ # Values for `decorations`:
+ # - full: Borders and title bar
+ # - none: Neither borders nor title bar
+ #
+ # Values for `decorations` (macOS only):
+ # - transparent: Title bar, transparent background and title bar buttons
+ # - buttonless: Title bar, transparent background and no title bar buttons
+ decorations: none
+
+ # Startup Mode (changes require restart)
+ #
+ # Values for `startup_mode`:
+ # - Windowed
+ # - Maximized
+ # - Fullscreen
+ #
+ # Values for `startup_mode` (macOS only):
+ # - SimpleFullscreen
+ #startup_mode: Windowed
+
+ # Window title
+ #title: Alacritty
+
+ # Allow terminal applications to change Alacritty's window title.
+ #dynamic_title: true
+
+ # Window class (Linux/BSD only):
+ #class:
+ # Application instance name
+ #instance: Alacritty
+ # General application class
+ #general: Alacritty
+
+ # GTK theme variant (Linux/BSD only)
+ #
+ # Override the variant of the GTK theme. Commonly supported values are `dark`
+ # and `light`. Set this to `None` to use the default theme variant.
+ #gtk_theme_variant: None
+
+scrolling:
+ # Maximum number of lines in the scrollback buffer.
+ # Specifying '0' will disable scrolling.
+ history: 0 # tmux can handle scrollback itself; no need to have alacritty do it
+
+ # Scrolling distance multiplier.
+ #multiplier: 3
+
+# Font configuration
+font:
+ # Normal (roman) font face
+ normal:
+ # Font family
+ #
+ # Default:
+ # - (macOS) Menlo
+ # - (Linux/BSD) monospace
+ # - (Windows) Consolas
+ family: Lilex Nerd Font Mono
+
+ # The `style` can be specified to pick a specific face.
+ style: Regular
+
+ # Bold font face
+ bold:
+ # Font family
+ #
+ # If the bold family is not specified, it will fall back to the
+ # value specified for the normal font.
+ family: Lilex Nerd Font Mono
+
+ # The `style` can be specified to pick a specific face.
+ style: Bold
+
+ # Italic font face
+ italic:
+ # Font family
+ #
+ # If the italic family is not specified, it will fall back to the
+ # value specified for the normal font.
+ family: UbuntuMono Nerd Font Mono
+
+ # The `style` can be specified to pick a specific face.
+ style: Italic
+
+ # Bold italic font face
+ bold_italic:
+ # Font family
+ #
+ # If the bold italic family is not specified, it will fall back to the
+ # value specified for the normal font.
+ family: UbuntuMono Nerd Font Mono
+
+ # The `style` can be specified to pick a specific face.
+ style: Bold Italic
+
+ # Point size
+ size: 6.0
+
+ # Offset is the extra space around each character. `offset.y` can be thought
+ # of as modifying the line spacing, and `offset.x` as modifying the letter
+ # spacing.
+ #offset:
+ # x: 0
+ # y: 0
+
+ # Glyph offset determines the locations of the glyphs within their cells with
+ # the default being at the bottom. Increasing `x` moves the glyph to the
+ # right, increasing `y` moves the glyph upward.
+ #glyph_offset:
+ # x: 0
+ # y: 0
+
+ # Thin stroke font rendering (macOS only)
+ #
+ # Thin strokes are suitable for retina displays, but for non-retina screens
+ # it is recommended to set `use_thin_strokes` to `false`.
+ #use_thin_strokes: true
+
+# If `true`, bold text is drawn using the bright color variants.
+#draw_bold_text_with_bright_colors: false
+
+# Colors (Tomorrow Night)
+#colors:
+ # Default colors
+ #primary:
+ # background: '#1d1f21'
+ # foreground: '#c5c8c6'
+
+ # Bright and dim foreground colors
+ #
+ # The dimmed foreground color is calculated automatically if it is not
+ # present. If the bright foreground color is not set, or
+ # `draw_bold_text_with_bright_colors` is `false`, the normal foreground
+ # color will be used.
+ #dim_foreground: '#828482'
+ #bright_foreground: '#eaeaea'
+
+ # Cursor colors
+ #
+ # Colors which should be used to draw the terminal cursor.
+ #
+ # Allowed values are CellForeground/CellBackground, which reference the
+ # affected cell, or hexadecimal colors like #ff00ff.
+ #cursor:
+ # text: CellBackground
+ # cursor: CellForeground
+
+ # Vi mode cursor colors
+ #
+ # Colors for the cursor when the vi mode is active.
+ #
+ # Allowed values are CellForeground/CellBackground, which reference the
+ # affected cell, or hexadecimal colors like #ff00ff.
+ #vi_mode_cursor:
+ # text: CellBackground
+ # cursor: CellForeground
+
+ # Search colors
+ #
+ # Colors used for the search bar and match highlighting.
+ #search:
+ # Allowed values are CellForeground/CellBackground, which reference the
+ # affected cell, or hexadecimal colors like #ff00ff.
+ #matches:
+ # foreground: '#000000'
+ # background: '#ffffff'
+ #focused_match:
+ # foreground: '#ffffff'
+ # background: '#000000'
+
+ #bar:
+ # background: '#c5c8c6'
+ # foreground: '#1d1f21'
+
+ # Keyboard regex hints
+ #hints:
+ # Fist character in the hint label
+ #
+ # Allowed values are CellForeground/CellBackground, which reference the
+ # affected cell, or hexadecimal colors like #ff00ff.
+ #start:
+ # foreground: '#1d1f21'
+ # background: '#e9ff5e'
+
+ # All characters after the first one in the hint label
+ #
+ # Allowed values are CellForeground/CellBackground, which reference the
+ # affected cell, or hexadecimal colors like #ff00ff.
+ #end:
+ # foreground: '#e9ff5e'
+ # background: '#1d1f21'
+
+ # Line indicator
+ #
+ # Color used for the indicator displaying the position in history during
+ # search and vi mode.
+ #
+ # By default, these will use the opposing primary color.
+ #line_indicator:
+ # foreground: None
+ # background: None
+
+ # Selection colors
+ #
+ # Colors which should be used to draw the selection area.
+ #
+ # Allowed values are CellForeground/CellBackground, which reference the
+ # affected cell, or hexadecimal colors like #ff00ff.
+ #selection:
+ # text: CellBackground
+ # background: CellForeground
+
+ # Normal colors
+ #normal:
+ # black: '#1d1f21'
+ # red: '#cc6666'
+ # green: '#b5bd68'
+ # yellow: '#f0c674'
+ # blue: '#81a2be'
+ # magenta: '#b294bb'
+ # cyan: '#8abeb7'
+ # white: '#c5c8c6'
+
+ # Bright colors
+ #bright:
+ # black: '#666666'
+ # red: '#d54e53'
+ # green: '#b9ca4a'
+ # yellow: '#e7c547'
+ # blue: '#7aa6da'
+ # magenta: '#c397d8'
+ # cyan: '#70c0b1'
+ # white: '#eaeaea'
+
+ # Dim colors
+ #
+ # If the dim colors are not set, they will be calculated automatically based
+ # on the `normal` colors.
+ #dim:
+ # black: '#131415'
+ # red: '#864343'
+ # green: '#777c44'
+ # yellow: '#9e824c'
+ # blue: '#556a7d'
+ # magenta: '#75617b'
+ # cyan: '#5b7d78'
+ # white: '#828482'
+
+ # Indexed Colors
+ #
+ # The indexed colors include all colors from 16 to 256.
+ # When these are not set, they're filled with sensible defaults.
+ #
+ # Example:
+ # `- { index: 16, color: '#ff00ff' }`
+ #
+ #indexed_colors: []
+
+# Bell
+#
+# The bell is rung every time the BEL control character is received.
+bell:
+ # Visual Bell Animation
+ #
+ # Animation effect for flashing the screen when the visual bell is rung.
+ #
+ # Values for `animation`:
+ # - Ease
+ # - EaseOut
+ # - EaseOutSine
+ # - EaseOutQuad
+ # - EaseOutCubic
+ # - EaseOutQuart
+ # - EaseOutQuint
+ # - EaseOutExpo
+ # - EaseOutCirc
+ # - Linear
+ animation: EaseOutCubic
+
+ # Duration of the visual bell flash in milliseconds. A `duration` of `0` will
+ # disable the visual bell animation.
+ duration: 400
+
+ # Visual bell animation color.
+ color: '#FF8811'
+
+ # Bell Command
+ #
+ # This program is executed whenever the bell is rung.
+ #
+ # When set to `command: None`, no command will be executed.
+ #
+ # Example:
+ # command:
+ # program: notify-send
+ # args: ["Hello, World!"]
+ #
+ #command: None
+
+# Background opacity
+#
+# Window opacity as a floating point number from `0.0` to `1.0`.
+# The value `0.0` is completely transparent and `1.0` is opaque.
+background_opacity: 1.0
+
+#selection:
+ # This string contains all characters that are used as separators for
+ # "semantic words" in Alacritty.
+ #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"
+
+ # When set to `true`, selected text will be copied to the primary clipboard.
+ #save_to_clipboard: false
+
+cursor:
+ # Cursor style
+ style:
+ # Cursor shape
+ #
+ # Values for `shape`:
+ # - ▇ Block
+ # - _ Underline
+ # - | Beam
+ shape: Block
+
+ # Cursor blinking state
+ #
+ # Values for `blinking`:
+ # - Never: Prevent the cursor from ever blinking
+ # - Off: Disable blinking by default
+ # - On: Enable blinking by default
+ # - Always: Force the cursor to always blink
+ blinking: On
+
+ # Vi mode cursor style
+ #
+ # If the vi mode cursor style is `None` or not specified, it will fall back to
+ # the style of the active value of the normal cursor.
+ #
+ # See `cursor.style` for available options.
+ vi_mode_style: None
+
+ # Cursor blinking interval in milliseconds.
+ blink_interval: 750
+
+ # If this is `true`, the cursor will be rendered as a hollow box when the
+ # window is not focused.
+ unfocused_hollow: true
+
+ # Thickness of the cursor relative to the cell width as floating point number
+ # from `0.0` to `1.0`.
+ #thickness: 0.15
+
+# Live config reload (changes require restart)
+live_config_reload: true
+
+# Shell
+#
+# You can set `shell.program` to the path of your favorite shell, e.g.
+# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the
+# shell.
+#
+# Default:
+# - (macOS) /bin/bash --login
+# - (Linux/BSD) user login shell
+# - (Windows) powershell
+#shell:
+# program: /bin/bash
+# args:
+# - --login
+
+# Startup directory
+#
+# Directory the shell is started in. If this is unset, or `None`, the working
+# directory of the parent process will be used.
+#working_directory: None
+
+# Send ESC (\x1b) before characters when alt is pressed.
+#alt_send_esc: true
+
+mouse:
+ # Click settings
+ #
+ # The `double_click` and `triple_click` settings control the time
+ # alacritty should wait for accepting multiple clicks as one double
+ # or triple click.
+ double_click: { threshold: 300 }
+ triple_click: { threshold: 300 }
+
+ # If this is `true`, the cursor is temporarily hidden when typing.
+ hide_when_typing: false
+
+# Regex hints
+#
+# Terminal hints can be used to find text in the visible part of the terminal
+# and pipe it to other applications.
+hints:
+ # Keys used for the hint labels.
+ alphabet: "jfkdls;ahgurieowpq"
+
+ # List with all available hints
+ #
+ # Each hint must have a `regex` and either an `action` or a `command` field.
+ # The fields `mouse`, `binding` and `post_processing` are optional.
+ #
+ # The fields `command`, `binding.key`, `binding.mods` and `mouse.mods` accept
+ # the same values as they do in the `key_bindings` section.
+ #
+ # The `mouse.enabled` field controls if the hint should be underlined while
+ # the mouse with all `mouse.mods` keys held or the vi mode cursor is above it.
+ #
+ # If the `post_processing` field is set to `true`, heuristics will be used to
+ # shorten the match if there are characters likely not to be part of the hint
+ # (e.g. a trailing `.`). This is most useful for URIs.
+ #
+ # Values for `action`:
+ # - Copy
+ # Copy the hint's text to the clipboard.
+ # - Paste
+ # Paste the hint's text to the terminal or search.
+ # - Select
+ # Select the hint's text.
+ # - MoveViModeCursor
+ # Move the vi mode cursor to the beginning of the hint.
+ enabled:
+ - regex: "(mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\
+ [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+"
+ command: xdg-open
+ post_processing: true
+ mouse:
+ enabled: true
+ mods: None
+ binding:
+ key: U
+ mods: Control|Shift
+
+# Mouse bindings
+#
+# Mouse bindings are specified as a list of objects, much like the key
+# bindings further below.
+#
+# To trigger mouse bindings when an application running within Alacritty
+# captures the mouse, the `Shift` modifier is automatically added as a
+# requirement.
+#
+# Each mouse binding will specify a:
+#
+# - `mouse`:
+#
+# - Middle
+# - Left
+# - Right
+# - Numeric identifier such as `5`
+#
+# - `action` (see key bindings)
+#
+# And optionally:
+#
+# - `mods` (see key bindings)
+#mouse_bindings:
+# - { mouse: Middle, action: PasteSelection }
+
+# Key bindings
+#
+# Key bindings are specified as a list of objects. For example, this is the
+# default paste binding:
+#
+# `- { key: V, mods: Control|Shift, action: Paste }`
+#
+# Each key binding will specify a:
+#
+# - `key`: Identifier of the key pressed
+#
+# - A-Z
+# - F1-F24
+# - Key0-Key9
+#
+# A full list with available key codes can be found here:
+# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants
+#
+# Instead of using the name of the keys, the `key` field also supports using
+# the scancode of the desired key. Scancodes have to be specified as a
+# decimal number. This command will allow you to display the hex scancodes
+# for certain keys:
+#
+# `showkey --scancodes`.
+#
+# Then exactly one of:
+#
+# - `chars`: Send a byte sequence to the running application
+#
+# The `chars` field writes the specified string to the terminal. This makes
+# it possible to pass escape sequences. To find escape codes for bindings
+# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside
+# of tmux. Note that applications use terminfo to map escape sequences back
+# to keys. It is therefore required to update the terminfo when changing an
+# escape sequence.
+#
+# - `action`: Execute a predefined action
+#
+# - ToggleViMode
+# - SearchForward
+# Start searching toward the right of the search origin.
+# - SearchBackward
+# Start searching toward the left of the search origin.
+# - Copy
+# - Paste
+# - IncreaseFontSize
+# - DecreaseFontSize
+# - ResetFontSize
+# - ScrollPageUp
+# - ScrollPageDown
+# - ScrollHalfPageUp
+# - ScrollHalfPageDown
+# - ScrollLineUp
+# - ScrollLineDown
+# - ScrollToTop
+# - ScrollToBottom
+# - ClearHistory
+# Remove the terminal's scrollback history.
+# - Hide
+# Hide the Alacritty window.
+# - Minimize
+# Minimize the Alacritty window.
+# - Quit
+# Quit Alacritty.
+# - ToggleFullscreen
+# - SpawnNewInstance
+# Spawn a new instance of Alacritty.
+# - ClearLogNotice
+# Clear Alacritty's UI warning and error notice.
+# - ClearSelection
+# Remove the active selection.
+# - ReceiveChar
+# - None
+#
+# - Vi mode exclusive actions:
+#
+# - Open
+# Perform the action of the first matching hint under the vi mode cursor
+# with `mouse.enabled` set to `true`.
+# - ToggleNormalSelection
+# - ToggleLineSelection
+# - ToggleBlockSelection
+# - ToggleSemanticSelection
+# Toggle semantic selection based on `selection.semantic_escape_chars`.
+#
+# - Vi mode exclusive cursor motion actions:
+#
+# - Up
+# One line up.
+# - Down
+# One line down.
+# - Left
+# One character left.
+# - Right
+# One character right.
+# - First
+# First column, or beginning of the line when already at the first column.
+# - Last
+# Last column, or beginning of the line when already at the last column.
+# - FirstOccupied
+# First non-empty cell in this terminal row, or first non-empty cell of
+# the line when already at the first cell of the row.
+# - High
+# Top of the screen.
+# - Middle
+# Center of the screen.
+# - Low
+# Bottom of the screen.
+# - SemanticLeft
+# Start of the previous semantically separated word.
+# - SemanticRight
+# Start of the next semantically separated word.
+# - SemanticLeftEnd
+# End of the previous semantically separated word.
+# - SemanticRightEnd
+# End of the next semantically separated word.
+# - WordLeft
+# Start of the previous whitespace separated word.
+# - WordRight
+# Start of the next whitespace separated word.
+# - WordLeftEnd
+# End of the previous whitespace separated word.
+# - WordRightEnd
+# End of the next whitespace separated word.
+# - Bracket
+# Character matching the bracket at the cursor's location.
+# - SearchNext
+# Beginning of the next match.
+# - SearchPrevious
+# Beginning of the previous match.
+# - SearchStart
+# Start of the match to the left of the vi mode cursor.
+# - SearchEnd
+# End of the match to the right of the vi mode cursor.
+#
+# - Search mode exclusive actions:
+# - SearchFocusNext
+# Move the focus to the next search match.
+# - SearchFocusPrevious
+# Move the focus to the previous search match.
+# - SearchConfirm
+# - SearchCancel
+# - SearchClear
+# Reset the search regex.
+# - SearchDeleteWord
+# Delete the last word in the search regex.
+# - SearchHistoryPrevious
+# Go to the previous regex in the search history.
+# - SearchHistoryNext
+# Go to the next regex in the search history.
+#
+# - macOS exclusive actions:
+# - ToggleSimpleFullscreen
+# Enter fullscreen without occupying another space.
+#
+# - Linux/BSD exclusive actions:
+#
+# - CopySelection
+# Copy from the selection buffer.
+# - PasteSelection
+# Paste from the selection buffer.
+#
+# - `command`: Fork and execute a specified command plus arguments
+#
+# The `command` field must be a map containing a `program` string and an
+# `args` array of command line parameter strings. For example:
+# `{ program: "alacritty", args: ["-e", "vttest"] }`
+#
+# And optionally:
+#
+# - `mods`: Key modifiers to filter binding actions
+#
+# - Command
+# - Control
+# - Option
+# - Super
+# - Shift
+# - Alt
+#
+# Multiple `mods` can be combined using `|` like this:
+# `mods: Control|Shift`.
+# Whitespace and capitalization are relevant and must match the example.
+#
+# - `mode`: Indicate a binding for only specific terminal reported modes
+#
+# This is mainly used to send applications the correct escape sequences
+# when in different modes.
+#
+# - AppCursor
+# - AppKeypad
+# - Search
+# - Alt
+# - Vi
+#
+# A `~` operator can be used before a mode to apply the binding whenever
+# the mode is *not* active, e.g. `~Alt`.
+#
+# Bindings are always filled by default, but will be replaced when a new
+# binding with the same triggers is defined. To unset a default binding, it can
+# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for
+# a no-op if you do not wish to receive input characters for that binding.
+#
+# If the same trigger is assigned to multiple actions, all of them are executed
+# in the order they were defined in.
+#key_bindings:
+ #- { key: Paste, action: Paste }
+ #- { key: Copy, action: Copy }
+ #- { key: L, mods: Control, action: ClearLogNotice }
+ #- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" }
+ #- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp, }
+ #- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown }
+ #- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop, }
+ #- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom }
+
+ # Vi Mode
+ #- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom }
+ #- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode }
+ #- { key: Escape, mode: Vi|~Search, action: ClearSelection }
+ #- { key: I, mode: Vi|~Search, action: ScrollToBottom }
+ #- { key: I, mode: Vi|~Search, action: ToggleViMode }
+ #- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode }
+ #- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp }
+ #- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown }
+ #- { key: G, mode: Vi|~Search, action: ScrollToTop }
+ #- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom }
+ #- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp }
+ #- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown }
+ #- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp }
+ #- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown }
+ #- { key: Y, mode: Vi|~Search, action: Copy }
+ #- { key: Y, mode: Vi|~Search, action: ClearSelection }
+ #- { key: Copy, mode: Vi|~Search, action: ClearSelection }
+ #- { key: V, mode: Vi|~Search, action: ToggleNormalSelection }
+ #- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection }
+ #- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection }
+ #- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection }
+ #- { key: Return, mode: Vi|~Search, action: Open }
+ #- { key: K, mode: Vi|~Search, action: Up }
+ #- { key: J, mode: Vi|~Search, action: Down }
+ #- { key: H, mode: Vi|~Search, action: Left }
+ #- { key: L, mode: Vi|~Search, action: Right }
+ #- { key: Up, mode: Vi|~Search, action: Up }
+ #- { key: Down, mode: Vi|~Search, action: Down }
+ #- { key: Left, mode: Vi|~Search, action: Left }
+ #- { key: Right, mode: Vi|~Search, action: Right }
+ #- { key: Key0, mode: Vi|~Search, action: First }
+ #- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last }
+ #- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied }
+ #- { key: H, mods: Shift, mode: Vi|~Search, action: High }
+ #- { key: M, mods: Shift, mode: Vi|~Search, action: Middle }
+ #- { key: L, mods: Shift, mode: Vi|~Search, action: Low }
+ #- { key: B, mode: Vi|~Search, action: SemanticLeft }
+ #- { key: W, mode: Vi|~Search, action: SemanticRight }
+ #- { key: E, mode: Vi|~Search, action: SemanticRightEnd }
+ #- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft }
+ #- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight }
+ #- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd }
+ #- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket }
+ #- { key: Slash, mode: Vi|~Search, action: SearchForward }
+ #- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward }
+ #- { key: N, mode: Vi|~Search, action: SearchNext }
+ #- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious }
+
+ # Search Mode
+ #- { key: Return, mode: Search|Vi, action: SearchConfirm }
+ #- { key: Escape, mode: Search, action: SearchCancel }
+ #- { key: C, mods: Control, mode: Search, action: SearchCancel }
+ #- { key: U, mods: Control, mode: Search, action: SearchClear }
+ #- { key: W, mods: Control, mode: Search, action: SearchDeleteWord }
+ #- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious }
+ #- { key: N, mods: Control, mode: Search, action: SearchHistoryNext }
+ #- { key: Up, mode: Search, action: SearchHistoryPrevious }
+ #- { key: Down, mode: Search, action: SearchHistoryNext }
+ #- { key: Return, mode: Search|~Vi, action: SearchFocusNext }
+ #- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious }
+
+ # (Windows, Linux, and BSD only)
+ #- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste }
+ #- { key: C, mods: Control|Shift, action: Copy }
+ #- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward }
+ #- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward }
+ #- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection }
+ #- { key: Insert, mods: Shift, action: PasteSelection }
+ #- { key: Key0, mods: Control, action: ResetFontSize }
+ #- { key: Equals, mods: Control, action: IncreaseFontSize }
+ #- { key: Plus, mods: Control, action: IncreaseFontSize }
+ #- { key: NumpadAdd, mods: Control, action: IncreaseFontSize }
+ #- { key: Minus, mods: Control, action: DecreaseFontSize }
+ #- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize }
+
+ # (Windows only)
+ #- { key: Return, mods: Alt, action: ToggleFullscreen }
+
+ # (macOS only)
+ #- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" }
+ #- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory }
+ #- { key: Key0, mods: Command, action: ResetFontSize }
+ #- { key: Equals, mods: Command, action: IncreaseFontSize }
+ #- { key: Plus, mods: Command, action: IncreaseFontSize }
+ #- { key: NumpadAdd, mods: Command, action: IncreaseFontSize }
+ #- { key: Minus, mods: Command, action: DecreaseFontSize }
+ #- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize }
+ #- { key: V, mods: Command, action: Paste }
+ #- { key: C, mods: Command, action: Copy }
+ #- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection }
+ #- { key: H, mods: Command, action: Hide }
+ #- { key: H, mods: Command|Alt, action: HideOtherApplications }
+ #- { key: M, mods: Command, action: Minimize }
+ #- { key: Q, mods: Command, action: Quit }
+ #- { key: W, mods: Command, action: Quit }
+ #- { key: N, mods: Command, action: SpawnNewInstance }
+ #- { key: F, mods: Command|Control, action: ToggleFullscreen }
+ #- { key: F, mods: Command, mode: ~Search, action: SearchForward }
+ #- { key: B, mods: Command, mode: ~Search, action: SearchBackward }
+
+#debug:
+ # Display the time it takes to redraw each frame.
+ #render_timer: false
+
+ # Keep the log file after quitting Alacritty.
+ #persistent_logging: false
+
+ # Log level
+ #
+ # Values for `log_level`:
+ # - Off
+ # - Error
+ # - Warn
+ # - Info
+ # - Debug
+ # - Trace
+ #log_level: Warn
+
+ # Print all received window events.
+ #print_events: false
diff --git a/alacritty/themes/tokyo-night.yaml b/alacritty/themes/tokyo-night.yaml
new file mode 100644
index 0000000..a88fd9b
--- /dev/null
+++ b/alacritty/themes/tokyo-night.yaml
@@ -0,0 +1,29 @@
+# Colors (Tokyo Night)
+# Source: https://github.com/zatchheems/tokyo-night-alacritty-theme
+colors:
+ # Default colors
+ primary:
+ background: '0x1a1b26'
+ foreground: '0xa9b1d6'
+
+ # Normal colors
+ normal:
+ black: '0x32344a'
+ red: '0xf7768e'
+ green: '0x9ece6a'
+ yellow: '0xe0af68'
+ blue: '0x7aa2f7'
+ magenta: '0xad8ee6'
+ cyan: '0x449dab'
+ white: '0x787c99'
+
+ # Bright colors
+ bright:
+ black: '0x444b6a'
+ red: '0xff7a93'
+ green: '0xb9f27c'
+ yellow: '0xff9e64'
+ blue: '0x7da6ff'
+ magenta: '0xbb9af7'
+ cyan: '0x0db9d7'
+ white: '0xacb0d0'
diff --git a/bash/bash_aliases.sh b/bash/bash_aliases.sh
index 2faa265..b2e4afe 100644
--- a/bash/bash_aliases.sh
+++ b/bash/bash_aliases.sh
@@ -13,6 +13,10 @@ export SSH_AUTH_SOCK="$HOME/.ssh/ssh_auth_sock"
# Install EDITOR
export EDITOR='nvim'
+# Install PAGER
+export PAGER='less --mouse'
+# Install BROWSER
+export BROWSER='firefox -P Mari --class Firefox.Main'
# Set up the vim config path
export VIM_CONFIG_DIR=$__COMMON_CONFIGS/vim
diff --git a/bash/bash_tmux.sh b/bash/bash_tmux.sh
index 3142daa..bb0fc7d 100644
--- a/bash/bash_tmux.sh
+++ b/bash/bash_tmux.sh
@@ -11,7 +11,7 @@ function tmux_running() {
}
function tmux_init() {
- tmux -2 new-session -d -s "Nexus" -n "Misc."
+ tmux -2 new-session -d -s "Nexus" -n "Misc." 'LC_ALL=C.UTF-8 fortune | cowsay -f eyes -W "$COLUMNS"; exec "$SHELL" -i'
}
function go_tmux ()
diff --git a/gammastep/config.ini b/gammastep/config.ini
new file mode 100644
index 0000000..6385797
--- /dev/null
+++ b/gammastep/config.ini
@@ -0,0 +1,10 @@
+[general]
+temp-day=6500
+temp-night=3600
+fade=1
+brightness-day=0.5
+brightness-night=0.5
+dawn-time=08:00-09:00
+dusk-time=19:00-20:00
+adjustment-method=randr
+location-provider=manual
diff --git a/i3/brightness-display.sh b/i3/brightness-display.sh
deleted file mode 100644
index ed7a042..0000000
--- a/i3/brightness-display.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-yad --progress --image=display-brightness-symbolic --splash --no-buttons --on-top --no-focus --undecorated --text='Brightness' --text-align=center --sticky --percentage=$(( $(brightnessctl get) * 100 / $(brightnessctl max) )) --no-escape --borders=10 --skip-taskbar --center
diff --git a/i3/config b/i3/config
index b699d61..184c5b5 100644
--- a/i3/config
+++ b/i3/config
@@ -13,7 +13,7 @@ set $mod Mod4
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
-font pango:monospace 8
+font pango:Ubuntu Mono, UbuntuMono Nerd Font 10
# This font is widely installed, provides lots of unicode glyphs, right-to-left
# text rendering and scalability on retina/hidpi displays (thanks to pango).
@@ -25,9 +25,6 @@ font pango:monospace 8
# 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 -c 0081a7 -e
-# Enable the X screensaver system.
-exec --no-startup-id xscreensaver
-
# 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.
@@ -39,6 +36,12 @@ exec --no-startup-id /usr/libexec/gnome-settings-daemon-localeexec
# Fix a bug in gnome-settings-daemon: http://feeding.cloud.geek.nz/posts/creating-a-modern-tiling-desktop-environment-using-i3/
exec --no-startup-id dconf write /org/gnome/settings-daemon/plugins/cursor/active false
+# Initialize a tmux session on startup
+exec --no-startup-id zsh -ic "tmux_init"
+
+# Start up the gammastep color temperature adjustment daemon.
+exec --no-startup-id gammastep
+
# Enable the relevant xkb options to allow the capslock remapping to proceed
exec --no-startup-id setxkbmap -option shift:both_capslock,caps:hyper
# Set up xcape to switch input modes for mozc with caps lock
@@ -49,21 +52,38 @@ exec --no-startup-id xcape -e 'Control_L=Escape'
exec --no-startup-id xcape -e 'Super_L=Control_L|a'
# 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
+set $refresh_i4status killall -SIGUSR1 i3status
+bindsym XF86AudioRaiseVolume exec --no-startup-id ~/.config/i3/helpers/volume.sh up
+bindsym XF86AudioLowerVolume exec --no-startup-id ~/.config/i3/helpers/volume.sh down
+bindsym Shift+XF86AudioLowerVolume exec --no-startup-id ~/.config/i3/helpers/volume.sh off
+bindsym Shift+XF86AudioRaiseVolume exec --no-startup-id ~/.config/i3/helpers/volume.sh max
+bindsym XF86AudioMute exec --no-startup-id ~/.config/i3/helpers/volume.sh toggle_mute
+bindsym Shift+XF86AudioMute exec --no-startup-id ~/.config/i3/helpers/volume.sh full_mute
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
# Use brightnessctl to adjust screen brightness.
-bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set 10%+
-bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set --min-value=100 10%-
+bindsym XF86MonBrightnessUp exec --no-startup-id ~/.config/i3/helpers/brightness.sh up
+bindsym XF86MonBrightnessDown exec --no-startup-id ~/.config/i3/helpers/brightness.sh down
+bindsym Shift+XF86MonBrightnessUp exec --no-startup-id ~/.config/i3/helpers/brightness.sh max
+bindsym Shift+XF86MonBrightnessDown exec --no-startup-id ~/.config/i3/helpers/brightness.sh off
+
+# Use the screenshot wrapper script.
+bindsym Print --release exec --no-startup-id ~/.config/i3/helpers/screenshot.sh screen
+bindsym Shift+Print --release exec --no-startup-id ~/.config/i3/helpers/screenshot.sh area
+# This is Alt+Print, but it's actually registered as a different key (on laptops at least).
+bindsym Sys_Req --release exec --no-startup-id ~/.config/i3/helpers/screenshot.sh current_window
+bindsym Shift+Sys_Req --release exec --no-startup-id ~/.config/i3/helpers/screenshot.sh select_window
+# Nonetheless, we bind the same Alt+Printscreen shortcut just in case.
+bindsym Mod1+Print --release exec --no-startup-id ~/.config/i3/helpers/screenshot.sh current_window
+bindsym Shift+Mod1+Print --release exec --no-startup-id ~/.config/i3/helpers/screenshot.sh select_window
+# Use Control instead of Alt in case Alt+Printscreen is ignored by i3.
+bindsym Control+Print --release exec --no-startup-id ~/.config/i3/helpers/screenshot.sh current_window
+bindsym Shift+Control+Print --release exec --no-startup-id ~/.config/i3/helpers/screenshot.sh select_window
+
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
-# start a terminal
-bindsym $mod+Return exec
# kill focused window
bindsym $mod+Shift+q kill
@@ -73,7 +93,7 @@ bindsym $mod+Shift+l exec --no-startup-id loginctl lock-session
# start dmenu (a program launcher)
# bindsym $mod+d exec --no-startup-id dmenu_run
# A more modern dmenu replacement is rofi:
-bindsym $mod+d exec "rofi -modi drun,run -show drun -show-icons"
+bindsym $mod+d --release exec "rofi -modi drun,run -show drun -show-icons"
# bindcode $mod+40 exec "rofi -modi drun,run -show drun"
# There also is i3-dmenu-desktop which only displays applications shipping a
# .desktop file. It is a wrapper around dmenu, so you need that installed.
@@ -136,11 +156,11 @@ set $ws2 "2: Media"
set $ws3 "3: Chat"
set $ws4 "4: IDE"
set $ws5 "5: Terminal"
-set $ws6 "6"
+set $ws6 "6: Files"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
-set $ws10 "10"
+set $ws10 "10: Lewd Zone"
# switch to workspace
bindsym $mod+1 workspace number $ws1
@@ -200,6 +220,41 @@ mode "resize" {
bindsym $mod+r mode "resize"
+# new_window none
+default_border pixel 3
+default_floating_border pixel 5
+hide_edge_borders smart
+
+# Place normal firefox windows on workspace 1.
+assign [class="^Firefox\.Main$"] workspace number $ws1
+bindsym $mod+Control+1 workspace $ws1 ; exec firefox -P "Mari" --class "Firefox.Main"
+
+# Place Spotify windows on workspace 2.
+for_window [class="^Spotify$"] move to workspace number $ws2
+bindsym $mod+Control+2 workspace $ws2 ; exec spotify
+
+# Place Discord windows on workspace 3.
+assign [class="^discord$"] workspace number $ws3
+bindsym $mod+Control+3 workspace $ws3 ; exec discord
+
+# Make the JetBrains IDEs' opening windows float
+for_window [class="^jetbrains-.*$" title="win0"] floating enable
+# Make the JetBrains IDEs place their windows on desktop 4
+assign [class="^jetbrains-.*$"] workspace number $ws4
+
+# start a terminal
+assign [class="^Lxterminal$"] workspace number $ws5
+bindsym $mod+Control+5 workspace $ws5 ; exec lxterminal -e '$SHELL -ic "go_tmux -x"'
+bindsym $mod+Return workspace $ws5 ; exec lxterminal -e '$SHELL -ic "go_tmux -x"'
+
+# open a file manager
+assign [class="^Org\.gnome\.Nautilus$"] workspace number $ws6
+bindsym $mod+Control+6 workspace $ws6 ; exec nautilus
+
+# Place lewd firefox windows on workspace 10.
+assign [class="^Firefox\.Lewd$"] workspace number $ws10
+bindsym $mod+Control+0 workspace $ws10 ; exec firefox -P "Reya" --class "Firefox.Lewd"
+
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
diff --git a/i3/barista-bar.go b/i3/helpers/barista/barista-bar.go
similarity index 100%
rename from i3/barista-bar.go
rename to i3/helpers/barista/barista-bar.go
diff --git a/i3/build-barista-bar.sh b/i3/helpers/barista/build-barista-bar.sh
similarity index 100%
rename from i3/build-barista-bar.sh
rename to i3/helpers/barista/build-barista-bar.sh
diff --git a/i3/go.mod b/i3/helpers/barista/go.mod
similarity index 100%
rename from i3/go.mod
rename to i3/helpers/barista/go.mod
diff --git a/i3/go.sum b/i3/helpers/barista/go.sum
similarity index 100%
rename from i3/go.sum
rename to i3/helpers/barista/go.sum
diff --git a/i3/helpers/brightness.sh b/i3/helpers/brightness.sh
new file mode 100755
index 0000000..1ddf49c
--- /dev/null
+++ b/i3/helpers/brightness.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+case $1 in
+ up)
+ brightnessctl set 10%+
+ ;;
+ down)
+ brightnessctl set --min-value=1 10%-
+ ;;
+ off)
+ brightnessctl set 0
+ ;;
+ max)
+ brightnessctl set 100%
+ ;;
+esac
+ID_LOCATION=/run/user/$(id -u)/i3-helpers/brightness-notification-id
+OLD_ID=$(<"$ID_LOCATION")
+BRIGHTNESS=$(( $(brightnessctl get) * 100 / $(brightnessctl max) ))
+NEW_ID=$(dunstify --appname=brightness.sh --timeout=3000 --hints="int:value:$BRIGHTNESS" --printid "${OLD_ID:+--replace="${OLD_ID}"}" "Brightness" "${BRIGHTNESS}%" )
+mkdir -p $(dirname "$ID_LOCATION")
+echo "$NEW_ID" >"$ID_LOCATION"
diff --git a/i3/helpers/picom.conf b/i3/helpers/picom.conf
new file mode 100644
index 0000000..797c867
--- /dev/null
+++ b/i3/helpers/picom.conf
@@ -0,0 +1,419 @@
+#################################
+# 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. 'WM_TRANSIENT_FOR' has higher priority if
+# detect-transient is enabled, too.
+#
+# detect-client-leader = false
+detect-client-leader = true;
+
+# 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; }
+};
diff --git a/i3/helpers/recently_used b/i3/helpers/recently_used
new file mode 160000
index 0000000..214f15d
--- /dev/null
+++ b/i3/helpers/recently_used
@@ -0,0 +1 @@
+Subproject commit 214f15d38dac18d23b32d310b290491d91fff958
diff --git a/i3/helpers/screenshot.sh b/i3/helpers/screenshot.sh
new file mode 100755
index 0000000..8f1af09
--- /dev/null
+++ b/i3/helpers/screenshot.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+function area() {
+ maim --select --tolerance 0 "$@" && \
+ echo "the selected area"
+}
+
+function screen() {
+ maim "$@" && \
+ echo "the full screen"
+}
+
+function current_window() {
+ WINDOW_ID=$(xdotool getwindowfocus) && \
+ WINDOW_NAME=$(xdotool getwindowname "$WINDOW_ID") && \
+ maim --window="$WINDOW_ID" "$@" && \
+ echo "the current window ($WINDOW_NAME)"
+}
+
+function select_window() {
+ maim --select --tolerance 999999 "$@" && \
+ echo "the selected window"
+}
+
+OPTION=$1
+shift
+OPTION_TYPE=$(type -t "$OPTION")
+if [[ $OPTION_TYPE != function ]]; then
+ >&2 echo "Must give the type of screenshot: area, screen, current_window, or select_window, but gave ${OPTION:-(nothing)} which was ${OPTION_TYPE:-undefined}"
+ exit 1
+fi
+
+SCREENSHOT_DIR=~/Screenshots
+if [[ ! -d $SCREENSHOT_DIR ]]; then
+ if [[ ! -t 2 ]]; then
+ if [[ -z $SCREENSHOT_DIR ]]; then
+ dunstify --appname=screenshot.sh --timeout 3000 "Screenshot Failed" "Failed to take screenshot: Screenshot directory not set"
+ else
+ dunstify --appname=screenshot.sh --timeout 3000 "Screenshot Failed" "Failed to take screenshot: No such directory ${SCREENSHOT_DIR}"
+ fi
+ else
+ >&2 echo "Must give the screenshot directory, which must exist and be a directory, but gave ${SCREENSHOT_DIR:-(nothing)}"
+ fi
+ exit 2
+fi
+
+FILENAME=${SCREENSHOT_DIR}/Screenshot\ from\ $(date '+%Y-%m-%d %H-%M-%S').png
+AREA=$("$OPTION" "$@" "$FILENAME") && \
+ xclip -selection clipboard -t image/png < "$FILENAME" && \
+ dunstify --appname=screenshot.sh --timeout 3000 --raw_icon="$FILENAME" "Screenshot Captured" "Saved screenshot of $AREA to clipboard and $FILENAME" && \
+ "$(readlink -e "$( dirname "$(realpath -e "${BASH_SOURCE[0]}")" )")/recently_used/recently_used.py" -A screenshot.sh "$FILENAME"
diff --git a/i3/helpers/volume.sh b/i3/helpers/volume.sh
new file mode 100755
index 0000000..4de5226
--- /dev/null
+++ b/i3/helpers/volume.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+function volumedelta() {
+ local CURRENT_VOLUME=$( pacmd list-sinks | grep -A 15 '* index' | awk '/volume: front/{ print $5 }' | sed 's/[%|,]//g')
+ local NEW_VOLUME=$(( $CURRENT_VOLUME + $1 ))
+ local NEW_VOLUME=$(( $NEW_VOLUME > 100 ? 100 : $NEW_VOLUME ))
+ local NEW_VOLUME=$(( $NEW_VOLUME < 0 ? 0 : $NEW_VOLUME ))
+ pactl set-sink-volume '@DEFAULT_SINK@' "${NEW_VOLUME}%"
+}
+case $1 in
+ up)
+ volumedelta 10
+ pactl set-sink-mute '@DEFAULT_SINK@' 0
+ ;;
+ down)
+ volumedelta -10
+ ;;
+ off)
+ volumedelta -9999
+ ;;
+ max)
+ volumedelta 9999
+ pactl set-sink-mute '@DEFAULT_SINK@' 0
+ ;;
+ toggle_mute)
+ pactl set-sink-mute '@DEFAULT_SINK@' toggle
+ ;;
+ full_mute)
+ pactl set-sink-mute '@DEFAULT_SINK@' 1
+ pactl set-sink-volume '@DEFAULT_SINK@' 0
+ ;;
+esac
+pkill -SIGUSR1 i3status
+VOLUME=$( pacmd list-sinks | grep -A 15 '* index' | awk '/volume: front/{ print $5 }' | sed 's/[%|,]//g' )
+MUTED=$( pacmd list-sinks | grep -A 15 '* index' | awk '/muted:/{ print $2 }' | grep -m1 yes )
+ID_LOCATION=/run/user/$(id -u)/i3-helpers/volume-notification-id
+OLD_ID=$(<"$ID_LOCATION")
+NEW_ID=$(dunstify --appname=brightness.sh --timeout=3000 --hints="int:value:$VOLUME" --printid "${OLD_ID:+--replace="${OLD_ID}"}" "Volume" "${VOLUME}%${MUTED:+ (Muted)}" )
+mkdir -p $(dirname "$ID_LOCATION")
+echo "$NEW_ID" >"$ID_LOCATION"
diff --git a/per-host/costadelsol/.config/alacritty/alacritty.yml b/per-host/costadelsol/.config/alacritty/alacritty.yml
new file mode 120000
index 0000000..0fed743
--- /dev/null
+++ b/per-host/costadelsol/.config/alacritty/alacritty.yml
@@ -0,0 +1 @@
+../../../../alacritty/alacritty.yml
\ No newline at end of file
diff --git a/per-host/costadelsol/.config/alacritty/themes b/per-host/costadelsol/.config/alacritty/themes
new file mode 120000
index 0000000..b48d7ee
--- /dev/null
+++ b/per-host/costadelsol/.config/alacritty/themes
@@ -0,0 +1 @@
+../../../../alacritty/themes
\ No newline at end of file
diff --git a/per-host/crystarium/.config/alacritty/alacritty.yml b/per-host/crystarium/.config/alacritty/alacritty.yml
new file mode 120000
index 0000000..0fed743
--- /dev/null
+++ b/per-host/crystarium/.config/alacritty/alacritty.yml
@@ -0,0 +1 @@
+../../../../alacritty/alacritty.yml
\ No newline at end of file
diff --git a/per-host/crystarium/.config/alacritty/themes b/per-host/crystarium/.config/alacritty/themes
new file mode 120000
index 0000000..b48d7ee
--- /dev/null
+++ b/per-host/crystarium/.config/alacritty/themes
@@ -0,0 +1 @@
+../../../../alacritty/themes
\ No newline at end of file
diff --git a/per-host/goldsaucer/.config/alacritty/alacritty.yml b/per-host/goldsaucer/.config/alacritty/alacritty.yml
new file mode 120000
index 0000000..0fed743
--- /dev/null
+++ b/per-host/goldsaucer/.config/alacritty/alacritty.yml
@@ -0,0 +1 @@
+../../../../alacritty/alacritty.yml
\ No newline at end of file
diff --git a/per-host/goldsaucer/.config/alacritty/themes b/per-host/goldsaucer/.config/alacritty/themes
new file mode 120000
index 0000000..b48d7ee
--- /dev/null
+++ b/per-host/goldsaucer/.config/alacritty/themes
@@ -0,0 +1 @@
+../../../../alacritty/themes
\ No newline at end of file
diff --git a/per-host/gubal/.config/alacritty/alacritty.yml b/per-host/gubal/.config/alacritty/alacritty.yml
new file mode 120000
index 0000000..0fed743
--- /dev/null
+++ b/per-host/gubal/.config/alacritty/alacritty.yml
@@ -0,0 +1 @@
+../../../../alacritty/alacritty.yml
\ No newline at end of file
diff --git a/per-host/gubal/.config/alacritty/themes b/per-host/gubal/.config/alacritty/themes
new file mode 120000
index 0000000..b48d7ee
--- /dev/null
+++ b/per-host/gubal/.config/alacritty/themes
@@ -0,0 +1 @@
+../../../../alacritty/themes
\ No newline at end of file
diff --git a/per-host/mordhona/.config/alacritty/alacritty.yml b/per-host/mordhona/.config/alacritty/alacritty.yml
new file mode 120000
index 0000000..0fed743
--- /dev/null
+++ b/per-host/mordhona/.config/alacritty/alacritty.yml
@@ -0,0 +1 @@
+../../../../alacritty/alacritty.yml
\ No newline at end of file
diff --git a/per-host/mordhona/.config/alacritty/themes b/per-host/mordhona/.config/alacritty/themes
new file mode 120000
index 0000000..b48d7ee
--- /dev/null
+++ b/per-host/mordhona/.config/alacritty/themes
@@ -0,0 +1 @@
+../../../../alacritty/themes
\ No newline at end of file
diff --git a/per-host/template/.config/alacritty/alacritty.yml b/per-host/template/.config/alacritty/alacritty.yml
new file mode 120000
index 0000000..0fed743
--- /dev/null
+++ b/per-host/template/.config/alacritty/alacritty.yml
@@ -0,0 +1 @@
+../../../../alacritty/alacritty.yml
\ No newline at end of file
diff --git a/per-host/template/.config/alacritty/themes b/per-host/template/.config/alacritty/themes
new file mode 120000
index 0000000..b48d7ee
--- /dev/null
+++ b/per-host/template/.config/alacritty/themes
@@ -0,0 +1 @@
+../../../../alacritty/themes
\ No newline at end of file
diff --git a/rofi/config.rasi b/rofi/config.rasi
new file mode 100644
index 0000000..d504267
--- /dev/null
+++ b/rofi/config.rasi
@@ -0,0 +1,145 @@
+configuration {
+ modi: "drun,run,window,ssh";
+/* width: 50;*/
+/* lines: 15;*/
+/* columns: 1;*/
+/* font: "mono 12";*/
+/* bw: 1;*/
+/* location: 0;*/
+/* padding: 5;*/
+/* yoffset: 0;*/
+/* xoffset: 0;*/
+/* fixed-num-lines: true;*/
+/* show-icons: false;*/
+/* terminal: "rofi-sensible-terminal";*/
+/* ssh-client: "ssh";*/
+/* ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";*/
+/* run-command: "{cmd}";*/
+/* run-list-command: "";*/
+/* run-shell-command: "{terminal} -e {cmd}";*/
+/* window-command: "wmctrl -i -R {window}";*/
+/* window-match-fields: "all";*/
+/* icon-theme: ;*/
+/* drun-match-fields: "name,generic,exec,categories";*/
+/* drun-show-actions: false;*/
+/* drun-display-format: "{name} [({generic})]";*/
+/* disable-history: false;*/
+/* ignored-prefixes: "";*/
+/* sort: false;*/
+/* sorting-method: ;*/
+/* case-sensitive: false;*/
+/* cycle: true;*/
+/* sidebar-mode: false;*/
+/* eh: 1;*/
+ auto-select: true;
+/* parse-hosts: false;*/
+/* parse-known-hosts: true;*/
+/* combi-modi: "window,run";*/
+/* matching: "normal";*/
+/* tokenize: true;*/
+/* m: "-5";*/
+/* line-margin: 2;*/
+/* line-padding: 1;*/
+/* filter: ;*/
+/* separator-style: "dash";*/
+/* hide-scrollbar: false;*/
+/* fullscreen: false;*/
+/* fake-transparency: false;*/
+/* dpi: -1;*/
+/* threads: 0;*/
+/* scrollbar-width: 8;*/
+/* scroll-method: 0;*/
+/* fake-background: "screenshot";*/
+/* window-format: "{w} {c} {t}";*/
+/* click-to-exit: true;*/
+/* show-match: true;*/
+/* theme: ;*/
+/* color-normal: ;*/
+/* color-urgent: ;*/
+/* color-active: ;*/
+/* color-window: ;*/
+/* max-history-size: 25;*/
+/* combi-hide-mode-prefix: false;*/
+/* matching-negate-char: '-' /* unsupported */;*/
+/* cache-dir: ;*/
+/* pid: "/run/user/1000/rofi.pid";*/
+/* display-window: ;*/
+/* display-windowcd: ;*/
+/* display-run: ;*/
+/* display-ssh: ;*/
+/* display-drun: ;*/
+/* display-combi: ;*/
+/* display-keys: ;*/
+/* kb-primary-paste: "Control+V,Shift+Insert";*/
+/* kb-secondary-paste: "Control+v,Insert";*/
+/* kb-clear-line: "Control+w";*/
+/* kb-move-front: "Control+a";*/
+/* kb-move-end: "Control+e";*/
+/* kb-move-word-back: "Alt+b,Control+Left";*/
+/* kb-move-word-forward: "Alt+f,Control+Right";*/
+/* kb-move-char-back: "Left,Control+b";*/
+/* kb-move-char-forward: "Right,Control+f";*/
+/* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/
+/* kb-remove-word-forward: "Control+Alt+d";*/
+/* kb-remove-char-forward: "Delete,Control+d";*/
+/* kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";*/
+/* kb-remove-to-eol: "Control+k";*/
+/* kb-remove-to-sol: "Control+u";*/
+/* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/
+/* kb-accept-custom: "Control+Return";*/
+/* kb-accept-alt: "Shift+Return";*/
+/* kb-delete-entry: "Shift+Delete";*/
+/* kb-mode-next: "Shift+Right,Control+Tab";*/
+/* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/
+/* kb-row-left: "Control+Page_Up";*/
+/* kb-row-right: "Control+Page_Down";*/
+/* kb-row-up: "Up,Control+p,ISO_Left_Tab";*/
+/* kb-row-down: "Down,Control+n";*/
+/* kb-row-tab: "Tab";*/
+/* kb-page-prev: "Page_Up";*/
+/* kb-page-next: "Page_Down";*/
+/* kb-row-first: "Home,KP_Home";*/
+/* kb-row-last: "End,KP_End";*/
+/* kb-row-select: "Control+space";*/
+/* kb-screenshot: "Alt+S";*/
+/* kb-ellipsize: "Alt+period";*/
+/* kb-toggle-case-sensitivity: "grave,dead_grave";*/
+/* kb-toggle-sort: "Alt+grave";*/
+/* kb-cancel: "Escape,Control+g,Control+bracketleft";*/
+/* kb-custom-1: "Alt+1";*/
+/* kb-custom-2: "Alt+2";*/
+/* kb-custom-3: "Alt+3";*/
+/* kb-custom-4: "Alt+4";*/
+/* kb-custom-5: "Alt+5";*/
+/* kb-custom-6: "Alt+6";*/
+/* kb-custom-7: "Alt+7";*/
+/* kb-custom-8: "Alt+8";*/
+/* kb-custom-9: "Alt+9";*/
+/* kb-custom-10: "Alt+0";*/
+/* kb-custom-11: "Alt+exclam";*/
+/* kb-custom-12: "Alt+at";*/
+/* kb-custom-13: "Alt+numbersign";*/
+/* kb-custom-14: "Alt+dollar";*/
+/* kb-custom-15: "Alt+percent";*/
+/* kb-custom-16: "Alt+dead_circumflex";*/
+/* kb-custom-17: "Alt+ampersand";*/
+/* kb-custom-18: "Alt+asterisk";*/
+/* kb-custom-19: "Alt+parenleft";*/
+/* kb-select-1: "Super+1";*/
+/* kb-select-2: "Super+2";*/
+/* kb-select-3: "Super+3";*/
+/* kb-select-4: "Super+4";*/
+/* kb-select-5: "Super+5";*/
+/* kb-select-6: "Super+6";*/
+/* kb-select-7: "Super+7";*/
+/* kb-select-8: "Super+8";*/
+/* kb-select-9: "Super+9";*/
+/* kb-select-10: "Super+0";*/
+/* ml-row-left: "ScrollLeft";*/
+/* ml-row-right: "ScrollRight";*/
+/* ml-row-up: "ScrollUp";*/
+/* ml-row-down: "ScrollDown";*/
+/* me-select-entry: "MousePrimary";*/
+/* me-accept-entry: "MouseDPrimary";*/
+/* me-accept-custom: "Control+MouseDPrimary";*/
+}
diff --git a/tmux/tmux-open b/tmux/tmux-open
new file mode 160000
index 0000000..5b09bd9
--- /dev/null
+++ b/tmux/tmux-open
@@ -0,0 +1 @@
+Subproject commit 5b09bd955292ae33ef6d3519df09b5bc1b0ff49e
diff --git a/tmux/tmux.conf b/tmux/tmux.conf
index 96ab554..d4ffbd6 100644
--- a/tmux/tmux.conf
+++ b/tmux/tmux.conf
@@ -546,7 +546,8 @@ tmux_conf_theme_right_separator_sub='\uE0B3' # PowerlineSymbols.otf font, see
# - #{username}
# - #{username_ssh}
tmux_conf_theme_status_left=" #{host_short}#[blink,fg=$tmux_conf_theme_colour_8]#{reboot}#[noblink,fg=$tmux_conf_theme_colour_6] | #S#{root} "
-tmux_conf_theme_status_right=" , #{?battery_status,#{battery_status}, OK }#{?battery_bar,#{battery_bar},}#{?battery_percentage, #{battery_percentage},} | #{prefix}#{mouse}| %b %d | %R "
+tmux_conf_theme_status_right="#{prefix}#{mouse}| %a %b %d | %R "
+# battery: , #{?battery_status,#{battery_status}, OK }#{?battery_bar,#{battery_bar},}#{?battery_percentage, #{battery_percentage},} |
# uptime: up #{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,}
# status left style
tmux_conf_theme_status_left_fg="$tmux_conf_theme_colour_6,$tmux_conf_theme_colour_7"
@@ -554,8 +555,8 @@ tmux_conf_theme_status_left_bg="$tmux_conf_theme_colour_9,$tmux_conf_theme_colou
tmux_conf_theme_status_left_attr="bold,none"
# status right style
-tmux_conf_theme_status_right_fg="$tmux_conf_theme_colour_3,$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14"
-tmux_conf_theme_status_right_bg="$tmux_conf_theme_colour_1,$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17"
+tmux_conf_theme_status_right_fg="$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14"
+tmux_conf_theme_status_right_bg="$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17"
tmux_conf_theme_status_right_attr="none,none,none,bold"
# pairing indicator
@@ -652,6 +653,7 @@ set -g mouse on
#set -g status-keys vi
#set -g mode-keys vi
source-file $TMUX_CONF_DIR/screen.conf
+run-shell $TMUX_CONF_DIR/tmux-open/open.tmux
# replace C-b by C-a instead of using both prefixes
set -gu prefix2
@@ -660,7 +662,7 @@ unbind C-b
set -g prefix C-a
set-option -g base-index 1
set-option -g history-limit 99999
-# bind C-a send-prefix
+bind C-a send-prefix
# move status line to top
#set -g status-position top
diff --git a/zsh/customizations/zsh_aliases.zsh b/zsh/customizations/zsh_aliases.zsh
index 65e4807..8f7ead1 100644
--- a/zsh/customizations/zsh_aliases.zsh
+++ b/zsh/customizations/zsh_aliases.zsh
@@ -5,6 +5,10 @@ stty -ixon
# Install EDITOR
export EDITOR='nvim'
+# Install PAGER
+export PAGER='less --mouse'
+# Install BROWSER
+export BROWSER='firefox -P Mari --class Firefox.Main'
# Set up the vim config path
export VIM_CONFIG_DIR=$__COMMON_CONFIGS/vim
# Set the SSH auth sock to the central location
diff --git a/zsh/customizations/zsh_tmux.zsh b/zsh/customizations/zsh_tmux.zsh
index 37184d0..4b638f1 100644
--- a/zsh/customizations/zsh_tmux.zsh
+++ b/zsh/customizations/zsh_tmux.zsh
@@ -6,7 +6,7 @@ function tmux_running() {
}
function tmux_init() {
- tmux -2 new-session -d -s "Nexus" -n "Misc."
+ tmux -2 new-session -d -s "Nexus" -n "Misc." 'LC_ALL=C.UTF-8 fortune | cowsay -f eyes -W "$COLUMNS"; exec "$SHELL" -i'
}
function go_tmux() {