Compare commits
85 Commits
154bffbc82
...
master
Author | SHA1 | Date | |
---|---|---|---|
539102d713
|
|||
82f581d0a5
|
|||
276bb1c239
|
|||
f386c25a22
|
|||
81c5870943
|
|||
ad43053789
|
|||
418c44e47d
|
|||
17e5212f76
|
|||
d21cb6a169
|
|||
4c2b8eb267
|
|||
4356256836
|
|||
d4415cf264
|
|||
525d0a6fab
|
|||
68d65ab43f
|
|||
a520a68d04
|
|||
c84aa26825
|
|||
6e18cca897
|
|||
8f53c7fa5c
|
|||
2ebf5090e0
|
|||
d88642c3d3
|
|||
190e1cd550
|
|||
634e44346c
|
|||
d96d8d6550
|
|||
5d285d1677
|
|||
30ce3d5e1d
|
|||
e33ac6ffcb
|
|||
0e7a2b7b1e
|
|||
6847354160
|
|||
c38e7d8280
|
|||
26cad4107e
|
|||
5c684c084f | |||
113496cc2b
|
|||
50fab353e2
|
|||
b468cf8c94
|
|||
c7a14964b0
|
|||
3f5393758e
|
|||
f4465c4056
|
|||
96fb353c2c
|
|||
01bb3f6d3a
|
|||
b3a7212ff7 | |||
7f024d3cff
|
|||
811e10f04d
|
|||
188e055677
|
|||
79cf112ad4
|
|||
ee09822398
|
|||
75ebcd48e3
|
|||
8b23f5748e
|
|||
144e015223
|
|||
dd44606a6f
|
|||
a1eb0994fd
|
|||
936385d111
|
|||
808e06eaf8
|
|||
6d568a8c94
|
|||
59d99715ab
|
|||
f1b55c6be9
|
|||
afa622369b
|
|||
50bb7df89e
|
|||
4d6353ed2a
|
|||
3ddb4f58f4
|
|||
a644fc60e2
|
|||
918f0958b1
|
|||
feb6efa204
|
|||
e5a8d48de9
|
|||
2524b0d6cd
|
|||
447d81051f
|
|||
bb3f0556ee | |||
151e3b1f91
|
|||
7dc73b94c3
|
|||
3a0beefd2e
|
|||
8f4161b832
|
|||
c7fd75d787
|
|||
d70d22ea05
|
|||
7b90092dfe
|
|||
07f87a3064
|
|||
d1338a46b3
|
|||
5017944487
|
|||
7955023b24 | |||
2f56e4f90f
|
|||
dd382d2694
|
|||
429d9747dd
|
|||
b6cdee3d35
|
|||
99239045f2
|
|||
aa565f0d57
|
|||
188f89e7dc
|
|||
109dcf2032
|
69
.Xresources
69
.Xresources
@ -1,69 +0,0 @@
|
|||||||
!
|
|
||||||
! .Xresources file
|
|
||||||
! Man pages: xrdb, Xsession
|
|
||||||
!
|
|
||||||
! --------------------------------------------
|
|
||||||
! Note that $HOME/.Xdefaults is a relic from
|
|
||||||
! X Version 10 (and X11R1) days, before
|
|
||||||
! app-defaults files were implemented.
|
|
||||||
! It has been deprecated for over ten years
|
|
||||||
! .Xresources should be used instead.
|
|
||||||
! --------------------------------------------
|
|
||||||
|
|
||||||
!-------------------------------------------------------------------------------
|
|
||||||
! Xft settings
|
|
||||||
!-------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Xft.autohint: 0
|
|
||||||
Xft.lcdfilter: lcddefault
|
|
||||||
Xft.hintstyle: hintfull
|
|
||||||
Xft.hinting: 1
|
|
||||||
Xft.antialias: 1
|
|
||||||
Xft.rgba: rgb
|
|
||||||
|
|
||||||
!---- URxvt - General settings
|
|
||||||
URxvt*cursorBlink: true
|
|
||||||
URxvt*font: xft:Monospace:size=12
|
|
||||||
URxvt*boldFont: xft:Monospace:size=12
|
|
||||||
URxvt*jumpScroll: true
|
|
||||||
URxvt*scrollBar: false
|
|
||||||
URxvt*scrollTtyOutput: false
|
|
||||||
URxvt*scrollTtyKeypress: true
|
|
||||||
URxvt*urgentOnBell: true
|
|
||||||
URxvt*visualBell: false
|
|
||||||
URxvt.termName: xterm-256color
|
|
||||||
URxvt.depth: 32
|
|
||||||
URxvt.scrollBar: false
|
|
||||||
URxvt*letterSpace: -1
|
|
||||||
|
|
||||||
! disable the Ctrl-Shift keycap insert mode,
|
|
||||||
! it interferes with GNOME key combos for
|
|
||||||
! moving windows to other desktops
|
|
||||||
URxvt.iso14755: false
|
|
||||||
|
|
||||||
!---- Default URxvt (Solarized Dark)
|
|
||||||
URxvt*fading: 30
|
|
||||||
URxvt*background: #002b36
|
|
||||||
URxvt*foreground: #839496
|
|
||||||
URxvt*fadeColor: #002b36
|
|
||||||
URxvt*cursorColor: #839496
|
|
||||||
URxvt*pointerColorBackground: #586e75
|
|
||||||
URxvt*pointerColorForeground: #93a1a1
|
|
||||||
URxvt*colorUL: #859900
|
|
||||||
URxvt*colorBD: #268bd2
|
|
||||||
URxvt*color0: #073642
|
|
||||||
URxvt*color8: #002b36
|
|
||||||
URxvt*color1: #dc322f
|
|
||||||
URxvt*color9: #cb4b16
|
|
||||||
URxvt*color2: #859900
|
|
||||||
URxvt*color10: #586e75
|
|
||||||
URxvt*color3: #b58900
|
|
||||||
URxvt*color11: #657b83
|
|
||||||
URxvt*color4: #268bd2
|
|
||||||
URxvt*color12: #839496
|
|
||||||
URxvt*color5: #d33682
|
|
||||||
URxvt*color13: #6c71c4
|
|
||||||
URxvt*color6: #2aa198
|
|
||||||
URxvt*color14: #93a1a1
|
|
||||||
URxvt*color7: #eee8d5
|
|
||||||
URxvt*color15: #fdf6e3
|
|
@ -1,762 +0,0 @@
|
|||||||
# 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:
|
|
||||||
# - /path/to/alacritty.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.
|
|
||||||
# 2020-04-01: avoid errors on remote systems when using less etc.
|
|
||||||
TERM: xterm-256color
|
|
||||||
|
|
||||||
#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: full
|
|
||||||
|
|
||||||
# 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 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: 10000
|
|
||||||
|
|
||||||
# Scrolling distance multiplier.
|
|
||||||
#multiplier: 3
|
|
||||||
|
|
||||||
# Font configuration
|
|
||||||
font:
|
|
||||||
# Normal (roman) font face
|
|
||||||
normal:
|
|
||||||
# Font family
|
|
||||||
#
|
|
||||||
# Default:
|
|
||||||
# - (macOS) Menlo
|
|
||||||
# - (Linux) monospace
|
|
||||||
# - (Windows) Consolas
|
|
||||||
family: Cascadia Mono PL
|
|
||||||
|
|
||||||
# The `style` can be specified to pick a specific face.
|
|
||||||
style: Medium
|
|
||||||
|
|
||||||
# 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: Cascadia Mono PL
|
|
||||||
|
|
||||||
# The `style` can be specified to pick a specific face.
|
|
||||||
style: Semibold
|
|
||||||
|
|
||||||
# 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: Cascadia Mono PL
|
|
||||||
|
|
||||||
# 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: Cascadia Mono PL
|
|
||||||
|
|
||||||
# The `style` can be specified to pick a specific face.
|
|
||||||
style: Semibold Italic
|
|
||||||
|
|
||||||
# Point size
|
|
||||||
size: 12.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 (Selenized dark)
|
|
||||||
colors:
|
|
||||||
primary:
|
|
||||||
background: '0x103c48'
|
|
||||||
foreground: '0xadbcbc'
|
|
||||||
normal:
|
|
||||||
black: '0x184956'
|
|
||||||
red: '0xfa5750'
|
|
||||||
green: '0x75b938'
|
|
||||||
yellow: '0xdbb32d'
|
|
||||||
blue: '0x4695f7'
|
|
||||||
magenta: '0xf275be'
|
|
||||||
cyan: '0x41c7b9'
|
|
||||||
white: '0x72898f'
|
|
||||||
bright:
|
|
||||||
black: '0x2d5b69'
|
|
||||||
red: '0xff665c'
|
|
||||||
green: '0x84c747'
|
|
||||||
yellow: '0xebc13d'
|
|
||||||
blue: '0x58a3ff'
|
|
||||||
magenta: '0xff84cd'
|
|
||||||
cyan: '0x53d6c7'
|
|
||||||
white: '0xcad8d9'
|
|
||||||
|
|
||||||
# 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: EaseOutExpo
|
|
||||||
|
|
||||||
# Duration of the visual bell flash in milliseconds. A `duration` of `0` will
|
|
||||||
# disable the visual bell animation.
|
|
||||||
#duration: 0
|
|
||||||
|
|
||||||
# Visual bell animation color.
|
|
||||||
#color: '#ffffff'
|
|
||||||
|
|
||||||
# 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:
|
|
||||||
#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: Off
|
|
||||||
|
|
||||||
# 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`, `binding.mode` 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: "(ipfs:|ipns:|magnet:|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: ~Search, action: ToggleViMode }
|
|
||||||
#- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom }
|
|
||||||
#- { key: Escape, mode: Vi|~Search, action: ClearSelection }
|
|
||||||
#- { key: I, mode: Vi|~Search, action: ToggleViMode }
|
|
||||||
#- { key: I, mode: Vi|~Search, action: ScrollToBottom }
|
|
||||||
#- { 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
|
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
dotdrop.sh
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[submodule "dotdrop"]
|
||||||
|
path = dotdrop
|
||||||
|
url = https://github.com/deadc0de6/dotdrop.git
|
@ -1,151 +0,0 @@
|
|||||||
# vim: filetype=muttrc
|
|
||||||
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# make sure that you are using mutt linked against slang, not ncurses, or
|
|
||||||
# suffer the consequences of weird color issues. use "mutt -v" to check this.
|
|
||||||
|
|
||||||
# custom body highlights -----------------------------------------------
|
|
||||||
# highlight my name and other personally relevant strings
|
|
||||||
#color body yellow default "(ethan|schoonover)"
|
|
||||||
# custom index highlights ----------------------------------------------
|
|
||||||
# messages which mention my name in the body
|
|
||||||
#color index yellow default "~b \"phil(_g|\!| gregory| gold)|pgregory\" !~N !~T !~F !~p !~P"
|
|
||||||
#color index J_cream brightwhite "~b \"phil(_g|\!| gregory| gold)|pgregory\" ~N !~T !~F !~p !~P"
|
|
||||||
#color index yellow cyan "~b \"phil(_g|\!| gregory| gold)|pgregory\" ~T !~F !~p !~P"
|
|
||||||
#color index yellow J_magent "~b \"phil(_g|\!| gregory| gold)|pgregory\" ~F !~p !~P"
|
|
||||||
## messages which are in reference to my mails
|
|
||||||
#color index J_magent default "~x \"(mithrandir|aragorn)\\.aperiodic\\.net|thorin\\.hillmgt\\.com\" !~N !~T !~F !~p !~P"
|
|
||||||
#color index J_magent brightwhite "~x \"(mithrandir|aragorn)\\.aperiodic\\.net|thorin\\.hillmgt\\.com\" ~N !~T !~F !~p !~P"
|
|
||||||
#color index J_magent cyan "~x \"(mithrandir|aragorn)\\.aperiodic\\.net|thorin\\.hillmgt\\.com\" ~T !~F !~p !~P"
|
|
||||||
#color index J_magent red "~x \"(mithrandir|aragorn)\\.aperiodic\\.net|thorin\\.hillmgt\\.com\" ~F !~p !~P"
|
|
||||||
|
|
||||||
# for background in 16 color terminal, valid background colors include:
|
|
||||||
# base03, bg, black, any of the non brights
|
|
||||||
|
|
||||||
# basic colors ---------------------------------------------------------
|
|
||||||
color normal brightyellow default
|
|
||||||
color error red default
|
|
||||||
color tilde black default
|
|
||||||
color message cyan default
|
|
||||||
color markers red white
|
|
||||||
color attachment white default
|
|
||||||
color search brightmagenta default
|
|
||||||
#color status J_black J_status
|
|
||||||
color status brightyellow black
|
|
||||||
color indicator brightblack yellow
|
|
||||||
color tree yellow default # arrow in threads
|
|
||||||
|
|
||||||
# basic monocolor screen
|
|
||||||
mono bold bold
|
|
||||||
mono underline underline
|
|
||||||
mono indicator reverse
|
|
||||||
mono error bold
|
|
||||||
|
|
||||||
# index ----------------------------------------------------------------
|
|
||||||
|
|
||||||
#color index red default "~D(!~p|~p)" # deleted
|
|
||||||
#color index black default ~F # flagged
|
|
||||||
#color index brightred default ~= # duplicate messages
|
|
||||||
#color index brightgreen default "~A!~N!~T!~p!~Q!~F!~D!~P" # the rest
|
|
||||||
#color index J_base default "~A~N!~T!~p!~Q!~F!~D" # the rest, new
|
|
||||||
color index red default "~A" # all messages
|
|
||||||
color index brightred default "~E" # expired messages
|
|
||||||
color index blue default "~N" # new messages
|
|
||||||
color index blue default "~O" # old messages
|
|
||||||
color index brightmagenta default "~Q" # messages that have been replied to
|
|
||||||
color index brightgreen default "~R" # read messages
|
|
||||||
color index blue default "~U" # unread messages
|
|
||||||
color index blue default "~U~$" # unread, unreferenced messages
|
|
||||||
color index brightyellow default "~v" # messages part of a collapsed thread
|
|
||||||
color index brightyellow default "~P" # messages from me
|
|
||||||
color index cyan default "~p!~F" # messages to me
|
|
||||||
color index cyan default "~N~p!~F" # new messages to me
|
|
||||||
color index cyan default "~U~p!~F" # unread messages to me
|
|
||||||
color index brightgreen default "~R~p!~F" # messages to me
|
|
||||||
color index red default "~F" # flagged messages
|
|
||||||
color index red default "~F~p" # flagged messages to me
|
|
||||||
color index red default "~N~F" # new flagged messages
|
|
||||||
color index red default "~N~F~p" # new flagged messages to me
|
|
||||||
color index red default "~U~F~p" # new flagged messages to me
|
|
||||||
color index black red "~D" # deleted messages
|
|
||||||
color index brightcyan default "~v~(!~N)" # collapsed thread with no unread
|
|
||||||
color index yellow default "~v~(~N)" # collapsed thread with some unread
|
|
||||||
color index green default "~N~v~(~N)" # collapsed thread with unread parent
|
|
||||||
# statusbg used to indicated flagged when foreground color shows other status
|
|
||||||
# for collapsed thread
|
|
||||||
color index red black "~v~(~F)!~N" # collapsed thread with flagged, no unread
|
|
||||||
color index yellow black "~v~(~F~N)" # collapsed thread with some unread & flagged
|
|
||||||
color index green black "~N~v~(~F~N)" # collapsed thread with unread parent & flagged
|
|
||||||
color index green black "~N~v~(~F)" # collapsed thread with unread parent, no unread inside, but some flagged
|
|
||||||
color index cyan black "~v~(~p)" # collapsed thread with unread parent, no unread inside, some to me directly
|
|
||||||
color index yellow red "~v~(~D)" # thread with deleted (doesn't differentiate between all or partial)
|
|
||||||
#color index yellow default "~(~N)" # messages in threads with some unread
|
|
||||||
#color index green default "~S" # superseded messages
|
|
||||||
#color index red default "~T" # tagged messages
|
|
||||||
#color index brightred red "~=" # duplicated messages
|
|
||||||
|
|
||||||
# message headers ------------------------------------------------------
|
|
||||||
|
|
||||||
#color header brightgreen default "^"
|
|
||||||
color hdrdefault brightgreen default
|
|
||||||
color header brightyellow default "^(From)"
|
|
||||||
color header blue default "^(Subject)"
|
|
||||||
|
|
||||||
# body -----------------------------------------------------------------
|
|
||||||
|
|
||||||
color quoted blue default
|
|
||||||
color quoted1 cyan default
|
|
||||||
color quoted2 yellow default
|
|
||||||
color quoted3 red default
|
|
||||||
color quoted4 brightred default
|
|
||||||
|
|
||||||
color signature brightgreen default
|
|
||||||
color bold black default
|
|
||||||
color underline black default
|
|
||||||
color normal default default
|
|
||||||
#
|
|
||||||
color body brightcyan default "[;:][-o][)/(|]" # emoticons
|
|
||||||
color body brightcyan default "[;:][)(|]" # emoticons
|
|
||||||
color body brightcyan default "[*]?((N)?ACK|CU|LOL|SCNR|BRB|BTW|CWYL|\
|
|
||||||
|FWIW|vbg|GD&R|HTH|HTHBE|IMHO|IMNSHO|\
|
|
||||||
|IRL|RTFM|ROTFL|ROFL|YMMV)[*]?"
|
|
||||||
color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon?
|
|
||||||
color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon?
|
|
||||||
|
|
||||||
## pgp
|
|
||||||
|
|
||||||
color body red default "(BAD signature)"
|
|
||||||
color body cyan default "(Good signature)"
|
|
||||||
color body brightblack default "^gpg: Good signature .*"
|
|
||||||
color body brightyellow default "^gpg: "
|
|
||||||
color body brightyellow red "^gpg: BAD signature from.*"
|
|
||||||
mono body bold "^gpg: Good signature"
|
|
||||||
mono body bold "^gpg: BAD signature from.*"
|
|
||||||
|
|
||||||
# yes, an insance URL regex
|
|
||||||
color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
|
|
||||||
# and a heavy handed email regex
|
|
||||||
#color body J_magent default "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])"
|
|
||||||
|
|
||||||
# Various smilies and the like
|
|
||||||
#color body brightwhite default "<[Gg]>" # <g>
|
|
||||||
#color body brightwhite default "<[Bb][Gg]>" # <bg>
|
|
||||||
#color body yellow default " [;:]-*[})>{(<|]" # :-) etc...
|
|
||||||
# *bold*
|
|
||||||
#color body blue default "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)"
|
|
||||||
#mono body bold "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)"
|
|
||||||
# _underline_
|
|
||||||
#color body blue default "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)"
|
|
||||||
#mono body underline "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)"
|
|
||||||
# /italic/ (Sometimes gets directory names)
|
|
||||||
#color body blue default "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)"
|
|
||||||
#mono body underline "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)"
|
|
||||||
|
|
||||||
# Border lines.
|
|
||||||
#color body blue default "( *[-+=#*~_]){6,}"
|
|
||||||
|
|
||||||
#folder-hook . "color status J_black J_status "
|
|
||||||
#folder-hook gmail/inbox "color status J_black yellow "
|
|
||||||
#folder-hook gmail/important "color status J_black yellow "
|
|
||||||
|
|
77
.muttrc
77
.muttrc
@ -1,77 +0,0 @@
|
|||||||
# Mutt configuration file
|
|
||||||
# See: http://stevelosh.com/blog/2012/10/the-homely-mutt/#configuring
|
|
||||||
# See: http://www.linuxuser.co.uk/tutorials/get-started-with-mutt
|
|
||||||
|
|
||||||
# Paths
|
|
||||||
set alias_file = ~/.mutt/alias # where to store aliases
|
|
||||||
set header_cache = ~/.mutt/cache/headers # where to store headers
|
|
||||||
set message_cachedir = ~/.mutt/cache/bodies # where to store bodies
|
|
||||||
set tmpdir = ~/.mutt/temp # where to keep temp files, must exist
|
|
||||||
set signature = ~/.signature.gmail # signature file
|
|
||||||
|
|
||||||
# Basic Options
|
|
||||||
set wait_key = no # shut up, mutt
|
|
||||||
set mbox_type = Maildir # mailbox type
|
|
||||||
set timeout = 15 # idle time before scanning (seconds)
|
|
||||||
set mail_check = 60 # minimum time between scans (seconds)
|
|
||||||
unset move # gmail does that
|
|
||||||
unset mark_old # read/new is good enough for me
|
|
||||||
set beep_new # bell on new mails
|
|
||||||
set pipe_decode # strip headers and eval mimes when piping
|
|
||||||
set thorough_search # strip headers and eval mimes before searching
|
|
||||||
|
|
||||||
# Header Options
|
|
||||||
# Hide some of the extra email headers we don't care about
|
|
||||||
ignore * # ignore all headers
|
|
||||||
unignore from: to: cc: bcc: date: subject: # show only these
|
|
||||||
unhdr_order * # some distros order things by default
|
|
||||||
hdr_order from: to: cc: bcc: date: subject: # and in this order
|
|
||||||
|
|
||||||
# Incoming
|
|
||||||
set imap_user = 'alan.orth@gmail.com'
|
|
||||||
|
|
||||||
# Outgoing
|
|
||||||
set smtp_url = 'smtp://alan.orth@gmail.com@smtp.gmail.com:587/'
|
|
||||||
set from = 'alan.orth@gmail.com'
|
|
||||||
set realname = 'Alan Orth'
|
|
||||||
|
|
||||||
# Mailbox settings
|
|
||||||
set folder = 'imaps://imap.gmail.com/'
|
|
||||||
set spoolfile = '+INBOX' # '+' is a shortcut for the folder path
|
|
||||||
set record = '' # don't save sent mails to Sent folder, gmail does this
|
|
||||||
set postponed = '+[Gmail]/Drafts'
|
|
||||||
|
|
||||||
# Check all labels/folders
|
|
||||||
set imap_check_subscribed
|
|
||||||
|
|
||||||
# Index configuration (main screen)
|
|
||||||
# Index view Options ---------------------------------
|
|
||||||
set date_format = '%m/%d'
|
|
||||||
set index_format = '[%Z] %D %-20.20F %s'
|
|
||||||
set sort = threads # like gmail
|
|
||||||
set sort_aux = reverse-last-date-received # like gmail
|
|
||||||
set uncollapse_jump # don't collapse on an unread message
|
|
||||||
set sort_re # thread based on regex
|
|
||||||
set reply_regexp = '^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*'
|
|
||||||
|
|
||||||
# Index key Bindings ---------------------------------
|
|
||||||
bind index gg first-entry
|
|
||||||
bind index G last-entry
|
|
||||||
|
|
||||||
# Writing mail
|
|
||||||
set envelope_from # which from?
|
|
||||||
set sig_dashes # dashes before sig
|
|
||||||
set edit_headers # show headers when composing
|
|
||||||
set fast_reply # skip to compose when replying
|
|
||||||
set fcc_attach # save attachments with the body
|
|
||||||
unset mime_forward # forward attachments as part of body
|
|
||||||
set forward_format = 'Fwd: %s' # format of subject when forwarding
|
|
||||||
set forward_decode # decode when forwarding
|
|
||||||
set attribution = 'On %d, %n wrote:' # format of quoting header
|
|
||||||
set reply_to # reply to Reply to: field
|
|
||||||
set reverse_name # reply as whomever it was to
|
|
||||||
set include # include message in replies
|
|
||||||
set forward_quote # include message in forwards
|
|
||||||
|
|
||||||
# Color scheme
|
|
||||||
source ~/.mutt-colors-solarized-dark-16.muttrc
|
|
@ -1,3 +0,0 @@
|
|||||||
MOZ_ENABLE_WAYLAND=1
|
|
||||||
QT_QPA_PLATFORM=wayland-egl
|
|
||||||
XDG_CURRENT_DESKTOP=sway
|
|
41
README.md
41
README.md
@ -1,37 +1,26 @@
|
|||||||
# Alan's dotfiles
|
# Alan's dotfiles
|
||||||
Dotfiles for pretty much every Linux system I have access to. After setting up a new host, I do:
|
Alan's dotfiles are managed with [dotdrop](https://github.com/deadc0de6/dotdrop). To set up on a new Arch Linux machine install [dotdrop from AUR](https://aur.archlinux.org/packages/dotdrop) and do this:
|
||||||
|
|
||||||
|
## Setup on Arch Linux
|
||||||
|
Install [dotdrop from AUR](https://aur.archlinux.org/packages/dotdrop) and then install the dotfiles:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ mkdir ~/src/git
|
$ git clone --recursive https://git.mjanja.ch/alanorth/dotfiles.git
|
||||||
$ cd ~/src/git
|
$ dotdrop install
|
||||||
$ git clone https://github.com/alanorth/dotfiles.git
|
|
||||||
$ cd ~
|
|
||||||
$ ln -sf ~/src/git/dotfiles/.bashrc .
|
|
||||||
$ ln -sf ~/src/git/dotfiles/.vim .
|
|
||||||
$ ln -sf ~/src/git/dotfiles/.vimrc .
|
|
||||||
$ ln -sf ~/src/git/dotfiles/.tmux.conf .
|
|
||||||
$ ln -sf ~/src/git/dotfiles/.zshrc .
|
|
||||||
$ mkdir -p ~/.config
|
|
||||||
$ ln -sf ~/src/git/dotfiles/sway .config
|
|
||||||
$ ln -sf ~/src/git/dotfiles/foot .config
|
|
||||||
$ ln -sf ~/src/git/dotfiles/mako .config
|
|
||||||
$ ln -sf ~/src/git/dotfiles/kanshi .config
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## .bashrc
|
## Setup on Other Linux
|
||||||
Configures the shell to have a custom PS1 prompt, adds paths for Homebrew, adds some common aliases, Selenized dircolors, etc.
|
Bootstrap the repository's copy of dotdrop, prepare Python deps, and then install the dotfiles:
|
||||||
|
|
||||||
## .tmux.conf
|
```console
|
||||||
Solarized color scheme with key bindings like GNU screen.
|
$ git clone --recursive https://git.mjanja.ch/alanorth/dotfiles.git
|
||||||
|
$ ./dotdrop/bootstrap.sh
|
||||||
## .vim + .vimrc
|
$ pip3 install -r dotdrop/requirements.txt --user
|
||||||
Syntax highlighting, Selenized color scheme, tab stops to four spaces, etc.
|
$ ./dotdrop.sh install
|
||||||
|
```
|
||||||
## .zshrc
|
|
||||||
Configures the shell to have a custom PS1 prompt, adds paths for Homebrew, adds some common aliases, Selenized dircolors, etc.
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
Copyright (C) 2015–2020 Alan Orth
|
Copyright (C) 2015–2022 Alan Orth
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
154
config.yaml
Normal file
154
config.yaml
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
config:
|
||||||
|
backup: true
|
||||||
|
create: true
|
||||||
|
dotpath: dotfiles
|
||||||
|
dotfiles:
|
||||||
|
d_vim:
|
||||||
|
src: vim
|
||||||
|
dst: ~/.vim
|
||||||
|
f_vimrc:
|
||||||
|
src: vimrc
|
||||||
|
dst: ~/.vimrc
|
||||||
|
f_tmux.conf:
|
||||||
|
src: config/tmux/tmux.conf
|
||||||
|
dst: ~/.config/tmux/tmux.conf
|
||||||
|
f_foot.ini:
|
||||||
|
src: config/foot/foot.ini
|
||||||
|
dst: ~/.config/foot/foot.ini
|
||||||
|
f_mako_config:
|
||||||
|
src: config/mako/config
|
||||||
|
dst: ~/.config/mako/config
|
||||||
|
f_kanshi_config:
|
||||||
|
src: config/kanshi/config
|
||||||
|
dst: ~/.config/kanshi/config
|
||||||
|
d_wofi:
|
||||||
|
src: config/wofi
|
||||||
|
dst: ~/.config/wofi
|
||||||
|
f_zshrc:
|
||||||
|
src: zshrc
|
||||||
|
dst: ~/.zshrc
|
||||||
|
d_sway:
|
||||||
|
src: config/sway
|
||||||
|
dst: ~/.config/sway
|
||||||
|
f_kanshi.service:
|
||||||
|
src: config/systemd/user/kanshi.service
|
||||||
|
dst: ~/.config/systemd/user/kanshi.service
|
||||||
|
f_swayidle.service:
|
||||||
|
src: config/systemd/user/swayidle.service
|
||||||
|
dst: ~/.config/systemd/user/swayidle.service
|
||||||
|
f_wob.service:
|
||||||
|
src: config/systemd/user/wob.service
|
||||||
|
dst: ~/.config/systemd/user/wob.service
|
||||||
|
f_wob.socket:
|
||||||
|
src: config/systemd/user/wob.socket
|
||||||
|
dst: ~/.config/systemd/user/wob.socket
|
||||||
|
f_sway-session.target:
|
||||||
|
src: config/systemd/user/sway-session.target
|
||||||
|
dst: ~/.config/systemd/user/sway-session.target
|
||||||
|
f_psqlrc:
|
||||||
|
src: psqlrc
|
||||||
|
dst: ~/.psqlrc
|
||||||
|
f_bashrc:
|
||||||
|
src: bashrc
|
||||||
|
dst: ~/.bashrc
|
||||||
|
f_xdg_desktop_portal_wlr_config:
|
||||||
|
src: config/xdg-desktop-portal-wlr/config
|
||||||
|
dst: ~/.config/xdg-desktop-portal-wlr/config
|
||||||
|
f_geoclue-agent.service:
|
||||||
|
src: config/systemd/user/geoclue-agent.service
|
||||||
|
dst: ~/.config/systemd/user/geoclue-agent.service
|
||||||
|
d_local_bin:
|
||||||
|
src: local/bin
|
||||||
|
dst: ~/.local/bin
|
||||||
|
f_ssh_config:
|
||||||
|
src: ssh/config
|
||||||
|
dst: ~/.ssh/config
|
||||||
|
f_ssh-agent.service:
|
||||||
|
src: config/systemd/user/ssh-agent.service
|
||||||
|
dst: ~/.config/systemd/user/ssh-agent.service
|
||||||
|
d_waybar:
|
||||||
|
src: config/waybar
|
||||||
|
dst: ~/.config/waybar
|
||||||
|
f_fuzzel.ini:
|
||||||
|
src: config/fuzzel/fuzzel.ini
|
||||||
|
dst: ~/.config/fuzzel/fuzzel.ini
|
||||||
|
f_wezterm.lua:
|
||||||
|
src: wezterm.lua
|
||||||
|
dst: ~/.wezterm.lua
|
||||||
|
f_convert-libaom.sh:
|
||||||
|
src: local/bin/convert-libaom.sh
|
||||||
|
dst: ~/.local/bin/convert-libaom.sh
|
||||||
|
chmod: '755'
|
||||||
|
f_dark-mode-theme.sh:
|
||||||
|
src: local/share/dark-mode.d/01-gtk-theme.sh
|
||||||
|
dst: ~/.local/share/dark-mode.d/01-gtk-theme.sh
|
||||||
|
chmod: '755'
|
||||||
|
f_light-mode-theme.sh:
|
||||||
|
src: local/share/light-mode.d/01-gtk-theme.sh
|
||||||
|
dst: ~/.local/share/light-mode.d/01-gtk-theme.sh
|
||||||
|
chmod: '755'
|
||||||
|
f_darkman_config.yaml:
|
||||||
|
src: config/darkman/config.yaml
|
||||||
|
dst: ~/.config/darkman/config.yaml
|
||||||
|
profiles:
|
||||||
|
everywhere:
|
||||||
|
dotfiles:
|
||||||
|
- d_vim
|
||||||
|
- f_vimrc
|
||||||
|
- f_tmux.conf
|
||||||
|
- f_zshrc
|
||||||
|
balozi:
|
||||||
|
dotfiles:
|
||||||
|
- d_vim
|
||||||
|
- f_vimrc
|
||||||
|
- f_tmux.conf
|
||||||
|
- f_foot.ini
|
||||||
|
- f_mako_config
|
||||||
|
- f_kanshi_config
|
||||||
|
- d_wofi
|
||||||
|
- f_zshrc
|
||||||
|
- d_sway
|
||||||
|
- f_kanshi.service
|
||||||
|
- f_swayidle.service
|
||||||
|
- f_wob.service
|
||||||
|
- f_wob.socket
|
||||||
|
- f_sway-session.target
|
||||||
|
- f_psqlrc
|
||||||
|
- f_xdg_desktop_portal_wlr_config
|
||||||
|
- d_local_bin
|
||||||
|
- f_ssh-agent.service
|
||||||
|
- d_waybar
|
||||||
|
- f_fuzzel.ini
|
||||||
|
- f_wezterm.lua
|
||||||
|
- f_convert-libaom.sh
|
||||||
|
- f_dark-mode-theme.sh
|
||||||
|
- f_light-mode-theme.sh
|
||||||
|
- f_darkman_config.yaml
|
||||||
|
knafeh:
|
||||||
|
dotfiles:
|
||||||
|
- d_vim
|
||||||
|
- f_vimrc
|
||||||
|
- f_tmux.conf
|
||||||
|
- f_foot.ini
|
||||||
|
- f_mako_config
|
||||||
|
- f_kanshi_config
|
||||||
|
- d_wofi
|
||||||
|
- f_zshrc
|
||||||
|
- d_sway
|
||||||
|
- f_kanshi.service
|
||||||
|
- f_swayidle.service
|
||||||
|
- f_wob.service
|
||||||
|
- f_wob.socket
|
||||||
|
- f_sway-session.target
|
||||||
|
- f_psqlrc
|
||||||
|
- f_xdg_desktop_portal_wlr_config
|
||||||
|
- f_geoclue-agent.service
|
||||||
|
- d_local_bin
|
||||||
|
- f_ssh-agent.service
|
||||||
|
- d_waybar
|
||||||
|
- f_fuzzel.ini
|
||||||
|
- f_wezterm.lua
|
||||||
|
- f_convert-libaom.sh
|
||||||
|
- f_dark-mode-theme.sh
|
||||||
|
- f_light-mode-theme.sh
|
||||||
|
- f_darkman_config.yaml
|
1
dotdrop
Submodule
1
dotdrop
Submodule
Submodule dotdrop added at 296c179f62
1
dotfiles/config/darkman/config.yaml
Normal file
1
dotfiles/config/darkman/config.yaml
Normal file
@ -0,0 +1 @@
|
|||||||
|
usegeoclue: true
|
28
dotfiles/config/foot/foot.ini
Normal file
28
dotfiles/config/foot/foot.ini
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# -*- conf -*-
|
||||||
|
|
||||||
|
# 2021-01-20: avoid errors on remote systems when using less etc when the foot
|
||||||
|
# terminfo is not available. Check with `infocmp tmux-256color`.
|
||||||
|
term=xterm-256color
|
||||||
|
|
||||||
|
# Use fc-list to check fonts and styles
|
||||||
|
{%@@ if profile == "knafeh" @@%}
|
||||||
|
font=Cascadia Mono:style=Roman:size=12
|
||||||
|
font-bold=Cascadia Mono:style=SemiBold:size=12
|
||||||
|
font-italic=Cascadia Mono:style=Italic:size=12
|
||||||
|
{%@@ elif profile == "balozi" @@%}
|
||||||
|
font=Cascadia Mono:style=Roman:size=13.5
|
||||||
|
font-bold=Cascadia Mono:style=SemiBold:size=13.5
|
||||||
|
font-italic=Cascadia Mono:style=Italic:size=13.5
|
||||||
|
{%@@ endif @@%}
|
||||||
|
# I don't know where any bold italic is used, but this should work if I ever
|
||||||
|
# find any.
|
||||||
|
{%@@ if profile == "knafeh" @@%}
|
||||||
|
font-bold-italic=Cascadia Mono:style=Bold Italic:size=12
|
||||||
|
{%@@ elif profile == "balozi" @@%}
|
||||||
|
font-bold-italic=Cascadia Mono:style=Bold Italic:size=13.5
|
||||||
|
{%@@ endif @@%}
|
||||||
|
|
||||||
|
# Selenized dark
|
||||||
|
include=/usr/share/foot/themes/selenized-dark
|
||||||
|
|
||||||
|
# vim: ft=dosini
|
28
dotfiles/config/fuzzel/fuzzel.ini
Normal file
28
dotfiles/config/fuzzel/fuzzel.ini
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
dpi-aware=auto
|
||||||
|
# Use fc-list to check fonts and styles
|
||||||
|
font=Source Sans Pro:style=Roman:size=12
|
||||||
|
fields=name,generic,comment,categories,filename,keywords
|
||||||
|
terminal=foot -e
|
||||||
|
prompt="❯ "
|
||||||
|
layer=overlay
|
||||||
|
[colors]
|
||||||
|
# Selenized colors
|
||||||
|
# base03
|
||||||
|
background=103c48ff
|
||||||
|
# base0
|
||||||
|
text=adbcbcff
|
||||||
|
# magenta
|
||||||
|
match=f275beff
|
||||||
|
# base02
|
||||||
|
selection=184956ff
|
||||||
|
# base0
|
||||||
|
selection-text=adbcbcff
|
||||||
|
border=adbcbcfa
|
||||||
|
|
||||||
|
[border]
|
||||||
|
radius=20
|
||||||
|
|
||||||
|
[dmenu]
|
||||||
|
exit-immediately-if-empty=yes
|
||||||
|
|
||||||
|
# vim: ft=dosini
|
35
dotfiles/config/kanshi/config
Normal file
35
dotfiles/config/kanshi/config
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
profile external-dell {
|
||||||
|
output eDP-1 disable
|
||||||
|
# Dell P2416D, 23.8 inches, 123.41 PPI (see https://www.sven.de/dpi/)
|
||||||
|
# "make model serial" from `swaymsg -t get_outputs`
|
||||||
|
output "Dell Inc. DELL P2416D 6RC2C54O0NWS" mode 2560x1440 position 0,0 scale 1.75
|
||||||
|
}
|
||||||
|
|
||||||
|
profile external-dell-4k {
|
||||||
|
output eDP-1 disable
|
||||||
|
# DELL U3219Q 9RSG413, 31.5 inches, 139.87 PPI (see https://www.sven.de/dpi/)
|
||||||
|
# "make model serial" from `swaymsg -t get_outputs`
|
||||||
|
output "Dell Inc. DELL U3219Q 9RSG413" mode 3840x2160 position 0,0 scale 2
|
||||||
|
}
|
||||||
|
|
||||||
|
profile external-hp1 {
|
||||||
|
output eDP-1 disable
|
||||||
|
# HP E243, 23 inches, 95.78 PPI (see https://www.sven.de/dpi/)
|
||||||
|
# "make model serial" from `swaymsg -t get_outputs`
|
||||||
|
output "Unknown HP E243 CNK0470PZR" mode 1920x1080 position 0,0 scale 1.33
|
||||||
|
}
|
||||||
|
|
||||||
|
profile external-hp2 {
|
||||||
|
output eDP-1 disable
|
||||||
|
# HP E231, 23 inches, 95.78 PPI (see https://www.sven.de/dpi/)
|
||||||
|
# "make model serial" from `swaymsg -t get_outputs`
|
||||||
|
output "Hewlett Packard HP E231 6CM3472DH4" mode 1920x1080 position 0,0 scale 1.33
|
||||||
|
}
|
||||||
|
|
||||||
|
profile internal {
|
||||||
|
{%@@ if profile == "knafeh" @@%}
|
||||||
|
output eDP-1 enable mode 2560x1440 scale 1.75 position 0,0
|
||||||
|
{%@@ elif profile == "balozi" @@%}
|
||||||
|
output eDP-1 enable mode 1920x1080 scale 1.33 position 0,0
|
||||||
|
{%@@ endif @@%}
|
||||||
|
}
|
@ -18,7 +18,7 @@ set $term foot
|
|||||||
# Your preferred application launcher
|
# Your preferred application launcher
|
||||||
# Note: pass the final command to swaymsg so that the resulting window can be opened
|
# Note: pass the final command to swaymsg so that the resulting window can be opened
|
||||||
# on the original workspace that the command was run on.
|
# on the original workspace that the command was run on.
|
||||||
set $menu wofi --show drun -i | xargs swaymsg exec --
|
set $menu fuzzel | xargs swaymsg exec --
|
||||||
|
|
||||||
### Display
|
### Display
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ assign [app_id="Alacritty"] 2
|
|||||||
assign [app_id="foot"] 2
|
assign [app_id="foot"] 2
|
||||||
assign [app_id="geary"] 3
|
assign [app_id="geary"] 3
|
||||||
assign [app_id="thunderbird"] 3
|
assign [app_id="thunderbird"] 3
|
||||||
for_window [app_id="gnome-calculator"] floating enable
|
for_window [app_id="org.gnome.Calculator"] floating enable
|
||||||
for_window [app_id="firefox" title="About Firefox"] floating enable
|
for_window [app_id="firefox" title="About Firefox"] floating enable
|
||||||
for_window [app_id="firefox" title="^Picture-in-Picture$"] floating enable; sticky enable
|
for_window [app_id="firefox" title="^Picture-in-Picture$"] floating enable; sticky enable
|
||||||
# Send the sharing indicator in Chrome and Firefox to the scratchpad
|
# Send the sharing indicator in Chrome and Firefox to the scratchpad
|
||||||
@ -43,6 +43,12 @@ for_window [title="Office 365 - Manual authentication"] floating enable
|
|||||||
for_window [app_id="org.jellyfin.jellyfinmediaplayer"] inhibit_idle visible
|
for_window [app_id="org.jellyfin.jellyfinmediaplayer"] inhibit_idle visible
|
||||||
for_window [title="(?:Open|Save) (?:File|Folder|As)"] floating enable, resize set width 1030 height 710
|
for_window [title="(?:Open|Save) (?:File|Folder|As)"] floating enable, resize set width 1030 height 710
|
||||||
for_window [shell="xwayland"] title_format "%title [XWayland]"
|
for_window [shell="xwayland"] title_format "%title [XWayland]"
|
||||||
|
# 2022-06-27 Chromium windows launched with --app disable shortcuts
|
||||||
|
# See: https://www.reddit.com/r/swaywm/comments/vlvpws/chromeium_app_flag_spawns_windows_with_shortcut/
|
||||||
|
for_window [app_id="^chrome-.*__-.*$"] shortcuts_inhibitor disable
|
||||||
|
for_window [app_id="org.twosheds.iwgtk"] floating enable
|
||||||
|
# LibreOffice Calc import window
|
||||||
|
for_window [app_id="soffice"] floating enable
|
||||||
|
|
||||||
### Output configuration
|
### Output configuration
|
||||||
#
|
#
|
||||||
@ -64,7 +70,7 @@ set $WOBSOCK $XDG_RUNTIME_DIR/wob.sock
|
|||||||
#
|
#
|
||||||
# exec swayidle -w \
|
# exec swayidle -w \
|
||||||
# timeout 300 'swaylock -f -c 000000' \
|
# timeout 300 'swaylock -f -c 000000' \
|
||||||
# timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \
|
# timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
|
||||||
# before-sleep 'swaylock -f -c 000000'
|
# before-sleep 'swaylock -f -c 000000'
|
||||||
#
|
#
|
||||||
# This will lock your screen after 300 seconds of inactivity, then turn off
|
# This will lock your screen after 300 seconds of inactivity, then turn off
|
||||||
@ -124,13 +130,6 @@ input type:keyboard {
|
|||||||
# Exit sway (logs you out of your Wayland session)
|
# Exit sway (logs you out of your Wayland session)
|
||||||
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'
|
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'
|
||||||
|
|
||||||
bindsym XF86AudioRaiseVolume exec pamixer -ui 5 && pamixer --get-volume > $WOBSOCK
|
|
||||||
bindsym XF86AudioLowerVolume exec pamixer -ud 5 && pamixer --get-volume > $WOBSOCK
|
|
||||||
bindsym XF86AudioMute exec pamixer --toggle-mute && ( pamixer --get-mute && echo 0 > $WOBSOCK ) || pamixer --get-volume > $WOBSOCK
|
|
||||||
bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
|
|
||||||
bindsym XF86MonBrightnessUp exec light -S "$(light -G | awk '{ print int(($1 + .72) * 1.4) }')" && light -G | cut -d'.' -f1 > $WOBSOCK
|
|
||||||
bindsym XF86MonBrightnessDown exec light -S "$(light -G | awk '{ print int($1 / 1.4) }')" && light -G | cut -d'.' -f1 > $WOBSOCK
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Moving around:
|
# Moving around:
|
||||||
#
|
#
|
||||||
@ -253,26 +252,29 @@ mode "resize" {
|
|||||||
bindsym Escape mode "default"
|
bindsym Escape mode "default"
|
||||||
}
|
}
|
||||||
bindsym $mod+r mode "resize"
|
bindsym $mod+r mode "resize"
|
||||||
|
#
|
||||||
|
# Utilities:
|
||||||
|
#
|
||||||
|
# Special keys to adjust volume via PulseAudio
|
||||||
|
bindsym --locked XF86AudioMute exec pamixer --toggle-mute && ( pamixer --get-mute && echo 0 > $WOBSOCK ) || pamixer --get-volume > $WOBSOCK
|
||||||
|
bindsym --locked XF86AudioLowerVolume exec pamixer -ud 5 && pamixer --get-volume > $WOBSOCK
|
||||||
|
bindsym --locked XF86AudioRaiseVolume exec pamixer -ui 5 && pamixer --get-volume > $WOBSOCK
|
||||||
|
bindsym --locked XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
|
||||||
|
# Special keys to adjust brightness via brightnessctl
|
||||||
|
bindsym --locked XF86MonBrightnessUp exec light -S "$(light -G | awk '{ print int(($1 + .72) * 1.4) }')" && light -G | cut -d'.' -f1 > $WOBSOCK
|
||||||
|
bindsym --locked XF86MonBrightnessDown exec light -S "$(light -G | awk '{ print int($1 / 1.4) }')" && light -G | cut -d'.' -f1 > $WOBSOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Status Bar:
|
# Status Bar:
|
||||||
#
|
#
|
||||||
# Read `man 5 sway-bar` for more information about this section.
|
# Read `man 5 sway-bar` for more information about this section.
|
||||||
bar {
|
bar {
|
||||||
position bottom
|
swaybar_command waybar
|
||||||
|
|
||||||
# When the status_command prints a new line to stdout, swaybar updates.
|
|
||||||
# The default just shows the current date and time.
|
|
||||||
status_command while ~/.config/sway/status.py; do sleep 1; done
|
|
||||||
|
|
||||||
colors {
|
|
||||||
statusline #ffffff
|
|
||||||
background #323232
|
|
||||||
inactive_workspace #32323200 #32323200 #5c5c5c
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
include /etc/sway/config.d/*
|
include /etc/sway/config.d/*
|
||||||
|
|
||||||
# Start sway-session.target, to which kanshi.service and swayidle.service bind.
|
# Start sway-session.target, to which kanshi.service and swayidle.service bind.
|
||||||
exec_always "systemctl --user import-environment; systemctl --user start sway-session.target"
|
exec_always "systemctl --user start sway-session.target"
|
10
dotfiles/config/systemd/user/geoclue-agent.service
Normal file
10
dotfiles/config/systemd/user/geoclue-agent.service
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Geoclue agent
|
||||||
|
BindsTo=sway-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/lib/geoclue-2.0/demos/agent
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=sway-session.target
|
13
dotfiles/config/systemd/user/ssh-agent.service
Normal file
13
dotfiles/config/systemd/user/ssh-agent.service
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# From: https://wiki.archlinux.org/title/SSH_keys#SSH_agents
|
||||||
|
[Unit]
|
||||||
|
Description=SSH key agent
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
|
||||||
|
# DISPLAY required for ssh-askpass to work
|
||||||
|
Environment=DISPLAY=:0
|
||||||
|
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
@ -1,4 +1,5 @@
|
|||||||
# See: https://github.com/swaywm/sway/wiki/Systemd-integration
|
# See: https://github.com/swaywm/sway/wiki/Systemd-integration
|
||||||
|
# See: https://wiki.archlinux.org/title/Sway#Manage_Sway-specific_daemons_with_systemd
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=sway compositor session
|
Description=sway compositor session
|
||||||
Documentation=man:systemd.special(7)
|
Documentation=man:systemd.special(7)
|
@ -8,8 +8,8 @@ Type=simple
|
|||||||
ExecStart=/usr/bin/swayidle -w \
|
ExecStart=/usr/bin/swayidle -w \
|
||||||
timeout 300 'swaylock -f -c 000000 \
|
timeout 300 'swaylock -f -c 000000 \
|
||||||
-i /home/aorth/Downloads/3121px-Jerusalem-2013-Temple_Mount-Dome_of_the_Rock-Detail_01.jpg' \
|
-i /home/aorth/Downloads/3121px-Jerusalem-2013-Temple_Mount-Dome_of_the_Rock-Detail_01.jpg' \
|
||||||
timeout 600 'swaymsg "output * dpms off"' \
|
timeout 600 'swaymsg "output * power off"' \
|
||||||
resume 'swaymsg "output * dpms on"' \
|
resume 'swaymsg "output * power on"' \
|
||||||
before-sleep 'swaylock -f -c 000000 \
|
before-sleep 'swaylock -f -c 000000 \
|
||||||
-i /home/aorth/Downloads/3121px-Jerusalem-2013-Temple_Mount-Dome_of_the_Rock-Detail_01.jpg'
|
-i /home/aorth/Downloads/3121px-Jerusalem-2013-Temple_Mount-Dome_of_the_Rock-Detail_01.jpg'
|
||||||
|
|
@ -102,11 +102,20 @@ set-option -g status-right '#[fg=colour47]#H #[fg=red]#(cut -d " " -f 1-3 /proc/
|
|||||||
# scrollback buffer
|
# scrollback buffer
|
||||||
set-option -g history-limit 4096
|
set-option -g history-limit 4096
|
||||||
|
|
||||||
# 2020-07-10: According to the tmux FAQ, inside tmux TERM must be "screen",
|
# 2022-11-26: According to the tmux FAQ, inside tmux TERM must be "screen",
|
||||||
# "tmux" or similar (such as "tmux-256color"). Systems with older terminfo
|
# "tmux" or similar (such as "tmux-256color"). As of CentOS Stream 8, now
|
||||||
# like CentOS 7 don't support tmux-256color so let's keep screen-256color
|
# all my systems support this (check with `infocmp tmux-256color`).
|
||||||
# for now.
|
#
|
||||||
set-option -g default-terminal "screen-256color"
|
# See: https://github.com/tmux/tmux/wiki/FAQ#how-do-i-use-a-256-colour-terminal
|
||||||
|
set-option -g default-terminal "tmux-256color"
|
||||||
|
|
||||||
|
# 2022-11-26: Tell Tmux that the outside terminal supports true color. I
|
||||||
|
# need to use the tmux-specific extension "Tc" for now until all my hosts
|
||||||
|
# are on tmux 3.2+.
|
||||||
|
#
|
||||||
|
# See: https://github.com/tmux/tmux/wiki/FAQ#how-do-i-use-rgb-colour
|
||||||
|
# See: https://jdhao.github.io/2018/10/19/tmux_nvim_true_color/
|
||||||
|
set -as terminal-overrides ",*-256color*:Tc"
|
||||||
|
|
||||||
#### COLOUR (Solarized dark)
|
#### COLOUR (Solarized dark)
|
||||||
|
|
70
dotfiles/config/waybar/config
Normal file
70
dotfiles/config/waybar/config
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"position": "bottom", // Waybar position (top|bottom|left|right)
|
||||||
|
"height": 25, // Waybar height (to be removed for auto height)
|
||||||
|
"spacing": 2, // Gaps between modules (4px)
|
||||||
|
// Choose the order of the modules
|
||||||
|
"modules-left": ["sway/workspaces", "sway/mode", "sway/scratchpad"],
|
||||||
|
"modules-center": ["sway/window"],
|
||||||
|
"modules-right": ["idle_inhibitor", "wireplumber", "network", "sway/language", "battery", "clock", "tray"],
|
||||||
|
// Modules configuration
|
||||||
|
"sway/workspaces": {
|
||||||
|
"disable-scroll": true,
|
||||||
|
},
|
||||||
|
"sway/mode": {
|
||||||
|
"format": "<span style=\"italic\">{}</span>"
|
||||||
|
},
|
||||||
|
"sway/scratchpad": {
|
||||||
|
"format": "{icon} {count}",
|
||||||
|
"show-empty": false,
|
||||||
|
"format-icons": ["", ""],
|
||||||
|
"tooltip": true,
|
||||||
|
"tooltip-format": "{app}: {title}"
|
||||||
|
},
|
||||||
|
"sway/window": {
|
||||||
|
"format": "{title}",
|
||||||
|
"max-length": 50,
|
||||||
|
},
|
||||||
|
"sway/language": {
|
||||||
|
"format": "{short} {variant}",
|
||||||
|
},
|
||||||
|
"idle_inhibitor": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"activated": "",
|
||||||
|
"deactivated": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
"spacing": 10
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
|
||||||
|
"format": "{:%Y-%m-%d %H:%M %p}"
|
||||||
|
},
|
||||||
|
"battery": {
|
||||||
|
"states": {
|
||||||
|
"good": 95,
|
||||||
|
"warning": 30,
|
||||||
|
"critical": 15
|
||||||
|
},
|
||||||
|
"format": "{capacity}% {icon}",
|
||||||
|
"format-charging": "{capacity}% ",
|
||||||
|
"format-plugged": "{capacity}% ",
|
||||||
|
"format-alt": "{time} {icon}",
|
||||||
|
"format-icons": ["", "", "", "", ""]
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"format-wifi": "{essid} ({signalStrength}%) ",
|
||||||
|
"format-ethernet": "{ipaddr}/{cidr} ",
|
||||||
|
"tooltip-format": "{ifname} via {gwaddr} ",
|
||||||
|
"format-linked": "{ifname} (No IP) ",
|
||||||
|
"format-disconnected": "Disconnected ⚠",
|
||||||
|
"format-alt": "{ifname}: {ipaddr}/{cidr}"
|
||||||
|
},
|
||||||
|
"wireplumber": {
|
||||||
|
"format": "{volume}% {icon}",
|
||||||
|
"format-muted": "",
|
||||||
|
"on-click": "helvum",
|
||||||
|
"format-icons": ["", "", ""]
|
||||||
|
},
|
||||||
|
}
|
127
dotfiles/config/waybar/style.css
Normal file
127
dotfiles/config/waybar/style.css
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
/* List of selenized-dark colors vs solarized-dark */
|
||||||
|
|
||||||
|
/* {
|
||||||
|
--base03: #103c48 (002b36);
|
||||||
|
--base02: #184956 (073642);
|
||||||
|
--base01: #84c747 (586e75);
|
||||||
|
--base00: #ebc13d (657b83);
|
||||||
|
--base0: #adbcbc (839496);
|
||||||
|
--base1: #53d6c7 (93a1a1);
|
||||||
|
--base2: #72898f (eee8d5);
|
||||||
|
--base3: #cad8d9 (fdf6e3);
|
||||||
|
--yellow: #dbb32d (b58900);
|
||||||
|
--orange: #ff665c (cb4b16);
|
||||||
|
--red: #fa5750 (dc322f);
|
||||||
|
--magenta: #f275be (d33682);
|
||||||
|
--violet: #ff84cd (6c71c4);
|
||||||
|
--blue: #4695f7 (268bd2);
|
||||||
|
--cyan: #41c7b9 (2aa198);
|
||||||
|
--green: #75b938 (859900);
|
||||||
|
} */
|
||||||
|
|
||||||
|
* {
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
font-family: Source Sans Pro Semibold, "Font Awesome 6 Free", sans-serif;
|
||||||
|
font-size: 13px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background-color: #103c48;
|
||||||
|
color: #f275be;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: .5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar.hidden {
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
padding: 0 3px;
|
||||||
|
background-color: transparent;
|
||||||
|
color: #adbcbc;
|
||||||
|
border-bottom: 2px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.focused {
|
||||||
|
background-color: #184956;
|
||||||
|
border-bottom: 2px solid #fa5750;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
background-color: #f275be;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock, #battery, #network, #wireplumber, #tray, #mode, #language, #idle_inhibitor, #window {
|
||||||
|
padding: 0 10px;
|
||||||
|
margin: 0 2px;
|
||||||
|
color: #adbcbc;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
background-color: #184956;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery {
|
||||||
|
background-color: #184956;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.charging {
|
||||||
|
color: #103c48;
|
||||||
|
background-color: #75b938;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language {
|
||||||
|
background-color: #184956;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink {
|
||||||
|
to {
|
||||||
|
background-color: #f275be;
|
||||||
|
color: #53d6c7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.critical:not(.charging) {
|
||||||
|
background-color: #fa5750;
|
||||||
|
color: #53d6c7;
|
||||||
|
animation-name: blink;
|
||||||
|
animation-duration: 0.5s;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-direction: alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
label:focus {
|
||||||
|
background-color: #184956;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network {
|
||||||
|
background-color: #184956;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network.disconnected {
|
||||||
|
background-color: #103c48;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wireplumber {
|
||||||
|
background-color: #184956;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wireplumber.muted {
|
||||||
|
background-color: #103c48;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
background-color: #103c48;
|
||||||
|
}
|
||||||
|
|
||||||
|
#idle_inhibitor {
|
||||||
|
background-color: #103c48;
|
||||||
|
}
|
||||||
|
|
||||||
|
#idle_inhibitor.activated {
|
||||||
|
background-color: #184956;
|
||||||
|
}
|
60
dotfiles/config/wofi/style.css
Normal file
60
dotfiles/config/wofi/style.css
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/**
|
||||||
|
* Selenized dark variant Wofi Color theme
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
window {
|
||||||
|
margin: 1px;
|
||||||
|
border: 1px solid #adbcbc;
|
||||||
|
background-color: #103c48;
|
||||||
|
}
|
||||||
|
|
||||||
|
#input {
|
||||||
|
margin: 1px;
|
||||||
|
border: 2px dashed #84c747;
|
||||||
|
border-top-color: #103c48;
|
||||||
|
border-left-color: #103c48;
|
||||||
|
border-right-color: #103c48;
|
||||||
|
border-bottom-color: #84c747;
|
||||||
|
background-color: #103c48;
|
||||||
|
color: #adbcbc;
|
||||||
|
font: 14px DejaVu Sans Mono;
|
||||||
|
}
|
||||||
|
|
||||||
|
#inner-box {
|
||||||
|
margin: 1px;
|
||||||
|
border: 2px none #103c48;
|
||||||
|
background-color: #103c48;
|
||||||
|
}
|
||||||
|
|
||||||
|
#outer-box {
|
||||||
|
margin: 1px;
|
||||||
|
border: 2px none #103c48;
|
||||||
|
background-color: #103c48;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scroll {
|
||||||
|
margin: 1px;
|
||||||
|
border: 2px solid #103c48;
|
||||||
|
background-color: #103c48;
|
||||||
|
color: #adbcbc;
|
||||||
|
}
|
||||||
|
|
||||||
|
#text {
|
||||||
|
margin: 1px;
|
||||||
|
border: 1px none #103c48;
|
||||||
|
font: 14px DejaVu Sans Mono;
|
||||||
|
}
|
||||||
|
|
||||||
|
#selected {
|
||||||
|
margin: 0px;
|
||||||
|
border: 2px none #325b66;
|
||||||
|
background-color: #325b66;
|
||||||
|
color: #adbcbc;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry {
|
||||||
|
margin: 1px;
|
||||||
|
border: 1px none #103c48;
|
||||||
|
background-color: #103c48;
|
||||||
|
}
|
4
dotfiles/config/xdg-desktop-portal-wlr/config
Normal file
4
dotfiles/config/xdg-desktop-portal-wlr/config
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# 2021-05-24: See https://github.com/emersion/xdg-desktop-portal-wlr/issues/124
|
||||||
|
[screencast]
|
||||||
|
chooser_cmd = fuzzel --dmenu --lines=3 --no-icons --prompt='Select the monitor to share:'
|
||||||
|
chooser_type = dmenu
|
3
dotfiles/local/bin/add-shadow.sh
Executable file
3
dotfiles/local/bin/add-shadow.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
magick convert "$1" -trim \( +clone -background grey25 -shadow 80x40+5+30 \) +swap -background transparent -layers merge +repage "$1-shadow.png"
|
216
dotfiles/local/bin/convert-libaom.sh
Executable file
216
dotfiles/local/bin/convert-libaom.sh
Executable file
@ -0,0 +1,216 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# v2022-06-13
|
||||||
|
#
|
||||||
|
# I run it like this (using zsh syntax):
|
||||||
|
#
|
||||||
|
# $ for video (~/Pictures/2021/**/*.mp4(ND.)); do ~/Downloads/av1-tests/convert-libaom.sh "$video"; done
|
||||||
|
#
|
||||||
|
# Reference:
|
||||||
|
# - https://ffmpeg.org/ffmpeg-codecs.html#libaom_002dav1
|
||||||
|
# - https://trac.ffmpeg.org/wiki/Encode/AV1
|
||||||
|
#
|
||||||
|
# Changes:
|
||||||
|
# 2024-01-21: minor improvement to handling of output file name
|
||||||
|
# 2022-06-13: use _max_crf in mkvpropedit if we don't find an acceptable vmaf
|
||||||
|
# 2022-04-05: update VMAF log parsing
|
||||||
|
# 2021-10-21: I tested 2-pass and found it doesn't do anything for constant
|
||||||
|
# quality mode. cpu-used 2 still takes ~5x longer than cpu-used 4
|
||||||
|
# at all tiling levels. 4x4 tiles much faster than 2x1 and 2x2 on
|
||||||
|
# all cpu-used levels, with quality less than 0.5 VMAF difference.
|
||||||
|
# Using 4x4 creates a grid of 16 tiles which just seems wrong...
|
||||||
|
# especially if you don't have many threads (I was using 12), so
|
||||||
|
# I will default to 2x2 as a compromise.
|
||||||
|
# 2021-10-20: use tiles instead of columns and rows
|
||||||
|
# 2021-10-16: use tile-columns 2 and tile-rows 2 (oops, this is 4x4 tiles!)
|
||||||
|
# 2021-08-31: strip spaces and commas from VMAF log file name as well
|
||||||
|
# 2021-05-14: benchmarked two pass and file sizes are larger by .5-1MB
|
||||||
|
# 2021-04-29: make sure input file exists
|
||||||
|
# 2021-03-07: benchmarked 10-bit and it's only .5 or less improvment to VMAF
|
||||||
|
# 2021-02-22: allow overriding threads
|
||||||
|
# 2021-02-15: fix handling of apostrophes in ffmpeg's log_path
|
||||||
|
# 2021-01-27: round VMAF before comparing, simplifies code a bit
|
||||||
|
# 2021-01-25: stop trying lower CRFs if VMAF is not likely to improve
|
||||||
|
# 2021-01-19: embed encoding parameters in webm metadata with mkvpropedit
|
||||||
|
# 2021-01-18: use 1-pass encoding (2-pass is only for trying to hit a target
|
||||||
|
# bitrate!)
|
||||||
|
# 2021-01-18: allow overriding variables
|
||||||
|
# 2021-01-17: detect if video already processed
|
||||||
|
# 2021-01-08: use cpu-used 4
|
||||||
|
# 2021-01-07: use tile-columns 2 and tile-rows 2 with cpu-used 4
|
||||||
|
# 2021-01-07: use tile-columns 2 and tile-rows 2 with cpu-used 3
|
||||||
|
# 2021-01-07: use -g 300 (30fps x 10)
|
||||||
|
|
||||||
|
# exit on first error
|
||||||
|
set -o errexit
|
||||||
|
|
||||||
|
if [[ -z "$1" ]]; then
|
||||||
|
echo "No input file specified."
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
elif [[ ! -r "$1" ]]; then
|
||||||
|
echo "Input file missing or unreadable: $1"
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
INPUT_FILE_BASENAME=$(basename -- "$1")
|
||||||
|
INPUT_FILE_EXTENSION=${INPUT_FILE_BASENAME##*.}
|
||||||
|
INPUT_FILE_DIRNAME=$(dirname -- "$1")
|
||||||
|
|
||||||
|
# Check if an output file name was specified (like if we are calling from the
|
||||||
|
# benchmarking script, in which case we want to exit as soon as possible). If
|
||||||
|
# not then we can continue with a simple filename based on the input file's.
|
||||||
|
if [[ -z $_output_file ]]; then
|
||||||
|
# Strip file extension from end of string and replace with webm
|
||||||
|
_output_file="${INPUT_FILE_BASENAME%$INPUT_FILE_EXTENSION}webm";
|
||||||
|
_benchmark_mode="false"
|
||||||
|
else
|
||||||
|
_benchmark_mode="true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# aq-mode not recommended in AV1 yet
|
||||||
|
_aq_mode=${_aq_mode:-0}
|
||||||
|
# 2021-01-08 (libaom 2.0.1): realistic range between 3 and 5, lower takes *much*
|
||||||
|
# longer with very little boost to VMAF. In my experience, cpu-used 2 is *three*
|
||||||
|
# times slower than cpu-used 4 at the same CRF for only a 0.5% boost in VMAF. 6
|
||||||
|
# is the same as 5 in all my tests *shrug*.
|
||||||
|
_cpu_used=${_cpu_used:-4}
|
||||||
|
# 2021-10-20 -tile-columns and -tile-rows are for compatibility with libvpx. The
|
||||||
|
# new option for libaom is -tiles. Convert any columns/rows to tiles using 2^n.
|
||||||
|
if [[ ! -z $_tile_columns || ! -z $_tile_rows ]]; then
|
||||||
|
_tile_columns=${_tile_columns:-1}
|
||||||
|
_tile_rows=${_tile_rows:-1}
|
||||||
|
|
||||||
|
# Compute 2^n tile columns and tile rows (the power operator is ** in bash)
|
||||||
|
_tiles="$((2 ** $_tile_columns))x$((2 ** $_tile_rows))"
|
||||||
|
else
|
||||||
|
_tiles=${_tiles:-2x2}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2021-02-22 use nproc number of threads unless threads is already set.
|
||||||
|
_nproc=$(nproc)
|
||||||
|
_threads=${_threads:-$_nproc}
|
||||||
|
|
||||||
|
# Range of CRFs to try, where higher is faster, but lower quality. Based on my
|
||||||
|
# testing 52 to 40 should cover most crappy phone videos.
|
||||||
|
_crf_max=${_crf_max:-52}
|
||||||
|
_crf_min=${_crf_min:-40}
|
||||||
|
|
||||||
|
_libaom_version=$(pacman -Qi aom | grep Version | awk '{print $3}')
|
||||||
|
|
||||||
|
# For grainy mobile phone videos 90 is fine
|
||||||
|
_target_vmaf=${_target_vmaf:-90}
|
||||||
|
# Don't bother trying lower CRF values if the CRF score is more than five points
|
||||||
|
# above the target. In my experience each successively lower CRF step gives you
|
||||||
|
# ~1 VMAF point. In these cases it isn't likely we'll ever reach the target, so
|
||||||
|
# we might as well just settle on the current CRF straight away.
|
||||||
|
_target_vmaf_threshold=${_target_vmaf_threshold:-5}
|
||||||
|
|
||||||
|
_acceptable_output_found="no"
|
||||||
|
|
||||||
|
# Change to the input file's directory
|
||||||
|
pushd "$INPUT_FILE_DIRNAME" >/dev/null
|
||||||
|
|
||||||
|
# We want the highest VMAF score possible with the highest CRF possible. Start
|
||||||
|
# with high CRF first to see if we can get an acceptable VMAF score as soon as
|
||||||
|
# possible. Step through values by 2.
|
||||||
|
for _crf in $(seq $_crf_max -2 $_crf_min); do
|
||||||
|
_processed=$(find . -maxdepth 1 -type f -iname "$_output_file" | wc -l)
|
||||||
|
if [[ $_processed -gt 0 ]]; then
|
||||||
|
echo "${INPUT_FILE_BASENAME}: already processed"
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $_benchmark_mode == "false" ]]; then
|
||||||
|
echo "Processing ${INPUT_FILE_BASENAME} with libaom $_libaom_version CRF ${_crf}..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
chrt -b 0 nice ffmpeg -hide_banner -y -i "$INPUT_FILE_BASENAME" -c:v libaom-av1 -b:v 0 -crf $_crf \
|
||||||
|
-aq-mode $_aq_mode -c:a libopus -b:a 16k \
|
||||||
|
-sc_threshold 0 -cpu-used $_cpu_used \
|
||||||
|
-tiles $_tiles -row-mt 1 \
|
||||||
|
-auto-alt-ref 1 -lag-in-frames 25 \
|
||||||
|
-g 300 -threads $_threads \
|
||||||
|
-f webm "$_output_file" 2>/dev/null
|
||||||
|
|
||||||
|
# Return quickly if we are in benchmark mode so the benchmark script can get
|
||||||
|
# an accurate time and compute its own VMAF score.
|
||||||
|
if [[ $_benchmark_mode == "true" ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
_vmaf_log="${_output_file/.*/}.log"
|
||||||
|
|
||||||
|
# strip apostrophes, spaces, and commas (if any) from log file name because
|
||||||
|
# ffmpeg's log_path doesn't seem to be able to handle them. The // performs
|
||||||
|
# a global replace.
|
||||||
|
_vmaf_log="${_vmaf_log//\'}"
|
||||||
|
_vmaf_log="${_vmaf_log//\,}"
|
||||||
|
_vmaf_log="${_vmaf_log// }"
|
||||||
|
|
||||||
|
# Get VMAF score with harmonic mean to emphasize small outliers
|
||||||
|
# See: https://netflixtechblog.com/vmaf-the-journey-continues-44b51ee9ed12
|
||||||
|
chrt -b 0 nice ffmpeg -hide_banner -y -i "$_output_file" -i "$INPUT_FILE_BASENAME" \
|
||||||
|
-filter_complex "libvmaf=pool=harmonic_mean:log_path=${_vmaf_log}:log_fmt=json" \
|
||||||
|
-f null - 2>/dev/null
|
||||||
|
|
||||||
|
_vmaf_score=$(jq '.["pooled_metrics"]["vmaf"]["harmonic_mean"]' "$_vmaf_log")
|
||||||
|
# bash can't do floating point so we use bc
|
||||||
|
# See: https://stackoverflow.com/questions/8654051/how-to-compare-two-floating-point-numbers-in-bash
|
||||||
|
_vmaf_score_round=$(printf %.$2f $(echo "scale=0;(((10^0)*$_vmaf_score)+0.5)/(10^0)" | bc))
|
||||||
|
|
||||||
|
rm "$_vmaf_log"
|
||||||
|
|
||||||
|
# Check if rounded VMAF score is >= target VMAF
|
||||||
|
if [[ $_vmaf_score_round -ge $_target_vmaf ]]; then
|
||||||
|
printf "$INPUT_FILE_BASENAME: acceptable VMAF (%.3f) at AV1 CRF ${_crf}.\n" $_vmaf_score
|
||||||
|
|
||||||
|
# Set the title with information about the encoding in the MKV title
|
||||||
|
mkvpropedit --edit info --set "title=${INPUT_FILE_BASENAME/.*/}-libaom_${_libaom_version}-crf${_crf}-cpu${_cpu_used}-${_tiles}-tiles-vmaf_${_vmaf_score}" "$_output_file" >/dev/null
|
||||||
|
|
||||||
|
_acceptable_output_found="yes"
|
||||||
|
|
||||||
|
# Break from the for loop because we have an acceptable output
|
||||||
|
break
|
||||||
|
# Check if the VMAF score is anywhere near our target, otherwise just keep
|
||||||
|
# current output.
|
||||||
|
elif (($_target_vmaf - $_vmaf_score_round >= $_target_vmaf_threshold)); then
|
||||||
|
printf "$INPUT_FILE_BASENAME: unacceptable VMAF (%.3f) at AV1 CRF ${_crf}, unlikely to reach target soon.\n" $_vmaf_score
|
||||||
|
|
||||||
|
_acceptable_output_found="yes"
|
||||||
|
|
||||||
|
# Break from the for loop and keep the current output, even though it's
|
||||||
|
# unacceptable.
|
||||||
|
break
|
||||||
|
else
|
||||||
|
printf "$INPUT_FILE_BASENAME: unacceptable VMAF (%.3f) at AV1 CRF ${_crf}, continuing.\n" $_vmaf_score
|
||||||
|
|
||||||
|
# Clean up the unacceptable output
|
||||||
|
rm "$_output_file"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# If we finished going over all the CRFs and still didn't get an acceptable VMAF
|
||||||
|
# score then the video is probably just really low quality so let's just convert
|
||||||
|
# using our max CRF and be done with it.
|
||||||
|
if [[ $_acceptable_output_found == "no" ]]; then
|
||||||
|
echo "${INPUT_FILE_BASENAME}: no acceptable output found, settling on AV1 CRF ${_crf_max}."
|
||||||
|
|
||||||
|
chrt -b 0 nice ffmpeg -hide_banner -y -i "$INPUT_FILE_BASENAME" -c:v libaom-av1 -b:v 0 -crf $_crf_max \
|
||||||
|
-aq-mode $_aq_mode -c:a libopus -b:a 16k \
|
||||||
|
-sc_threshold 0 -cpu-used $_cpu_used \
|
||||||
|
-tiles $_tiles -row-mt 1 \
|
||||||
|
-auto-alt-ref 1 -lag-in-frames 25 \
|
||||||
|
-g 300 -threads $_threads \
|
||||||
|
-f webm "$_output_file" 2>/dev/null
|
||||||
|
|
||||||
|
# Set the title with information about the encoding in the MKV title
|
||||||
|
mkvpropedit --edit info --set "title=${INPUT_FILE_BASENAME/.*/}-libaom_${_libaom_version}-crf${_max_crf}-cpu${_cpu_used}-${_tiles}-tiles" "$_output_file" >/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Change back to our starting directory
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
exit 0
|
133
dotfiles/local/bin/pre-process-media.sh
Executable file
133
dotfiles/local/bin/pre-process-media.sh
Executable file
@ -0,0 +1,133 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# pre-process-media.sh v2024-04-28
|
||||||
|
#
|
||||||
|
# Prepare a directory of images and videos for long-term archival by normalizing
|
||||||
|
# their names, optimizing JPEGs with jpeg-archive, and stripping embedded MP4s
|
||||||
|
# from Android Motion Photos.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
|
||||||
|
# Changes:
|
||||||
|
#
|
||||||
|
# v2024-04-28: support Pixel portrait images
|
||||||
|
# v2022-08-01: fix minor syntax issue
|
||||||
|
# v2022-01-15: support Pixel panorama images
|
||||||
|
# v2021-12-26: add 'ftypiso6' for Nokia Android 9 MVIMG files, anchor regexes to
|
||||||
|
# beginning of line to prevent renaming files prematurely.
|
||||||
|
|
||||||
|
# Exit on first error
|
||||||
|
set -o errexit
|
||||||
|
|
||||||
|
if [[ -z "$1" ]]; then
|
||||||
|
echo "No target directory specified."
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Preprocessing images and videos in $1"
|
||||||
|
|
||||||
|
# Change to the input file's directory
|
||||||
|
pushd "$1" >/dev/null
|
||||||
|
|
||||||
|
echo "Changing permissions to 640..."
|
||||||
|
find . -type f -exec chmod 640 {} \;
|
||||||
|
|
||||||
|
# Rename IMG_20210217_204834.jpg to 2021-02-17_204834.jpg
|
||||||
|
echo "Renaming images to ISO 8601 and removing IMG_..."
|
||||||
|
perl-rename 's/^IMG_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.jpg/$1-$2-$3_$4.jpg/' *.jpg
|
||||||
|
perl-rename 's/^IMG_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.JPG/$1-$2-$3_$4.jpg/' *.JPG
|
||||||
|
perl-rename 's/^IMG_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.jpeg/$1-$2-$3_$4.jpg/' *.jpeg
|
||||||
|
perl-rename 's/^IMG_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.JPEG/$1-$2-$3_$4.jpg/' *.JPEG
|
||||||
|
# Rename 20220501_174346.jpg (Samsung A52)
|
||||||
|
perl-rename 's/^([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.jpg/$1-$2-$3_$4.jpg/' *.jpg
|
||||||
|
# Rename IMG_2180.HEIC to 2180.HEIC (iPhone)
|
||||||
|
perl-rename 's/^IMG_([0-9]{4}).HEIC/$1.heic/' *.HEIC
|
||||||
|
# Rename PXL_20210717_043834784.jpg to 2021-07-17_043834784.jpg (Pixel)
|
||||||
|
perl-rename 's/^PXL_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.jpg/$1-$2-$3_$4.jpg/' *.jpg
|
||||||
|
|
||||||
|
# Remove embedded MP4s from Pixel motion images. Depending on the Android vers-
|
||||||
|
# ion the MP4 header could be ftypmp42, ftypmp4, ftypisom, etc. We have to check
|
||||||
|
# each one in succession, but note that grep will return a non-zero exit code
|
||||||
|
# if it doesn't find the pattern, so we need to temporarily disable errexit. To
|
||||||
|
# make matters worse, it seems some images are called MP and appear to contain
|
||||||
|
# multiple images in the Android Photos app, but don't contain an MP4!
|
||||||
|
#
|
||||||
|
# See: https://stackoverflow.com/questions/53104989/how-to-extract-the-photo-video-component-of-a-mvimg
|
||||||
|
# See: https://medium.com/android-news/working-with-motion-photos-da0aa49b50c
|
||||||
|
# See: https://linuxreviews.org/Google_Pixel_%22Motion_Photo%22
|
||||||
|
set +o errexit
|
||||||
|
for file in PXL_*.MP.jpg MVIMG_*.jpg; do
|
||||||
|
# Don't crash when there are no files matching the glob
|
||||||
|
[ -f "$file" ] || continue
|
||||||
|
|
||||||
|
# Check MP4 header, newer versions first
|
||||||
|
unset ofs
|
||||||
|
for header in 'ftypisom' 'ftypmp4' 'ftypmp42' 'ftypiso6'; do
|
||||||
|
ofs=$(grep -F --byte-offset --only-matching --text "$header" "$file")
|
||||||
|
|
||||||
|
if [[ $ofs ]]; then
|
||||||
|
ofs=${ofs%:*}
|
||||||
|
truncate -s $((ofs-4)) "$file"
|
||||||
|
|
||||||
|
# Go to next image
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# Re-set exit on first error
|
||||||
|
set -o errexit
|
||||||
|
|
||||||
|
# Rename PXL_20210717_043834784.MP.jpg to 2021-07-17_043834784.jpg (Pixel Motion Images)
|
||||||
|
perl-rename 's/^PXL_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.MP\.jpg/$1-$2-$3_$4.jpg/' *.jpg
|
||||||
|
|
||||||
|
# Rename MVIMG_20190618_124507.jpg to 2019-06-18_124507.jpg (Android Motion Images)
|
||||||
|
perl-rename 's/^MVIMG_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.jpg/$1-$2-$3_$4.jpg/' *.jpg
|
||||||
|
|
||||||
|
# Rename PXL_20210910_193159741.NIGHT.jpg to 2021-09-10_193159741.jpg (Pixel Night mode)
|
||||||
|
perl-rename 's/^PXL_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.NIGHT\.jpg/$1-$2-$3_$4.jpg/' *.jpg
|
||||||
|
|
||||||
|
# Rename PXL_20211118_162823829.PORTRAIT.jpg to 2021-11-18_162823829.jpg (Pixel Portrait mode)
|
||||||
|
perl-rename 's/^PXL_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.PORTRAIT\.jpg/$1-$2-$3_$4.jpg/' *.jpg
|
||||||
|
|
||||||
|
# Rename PXL_20230413_231026946.PORTRAIT.ORIGINAL.jpg to 2023-04-13_231026946.jpg (Pixel portrait original?)
|
||||||
|
perl-rename 's/^PXL_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.PORTRAIT\.ORIGINAL\.jpg/$1-$2-$3_$4.jpg/' *.jpg
|
||||||
|
|
||||||
|
# Rename PXL_20210925_150154460.PANO.jpg to 2021-09-25_150154460.jpg (Pixel Panorama mode)
|
||||||
|
perl-rename 's/^PXL_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.PANO\.jpg/$1-$2-$3_$4.jpg/' *.jpg
|
||||||
|
|
||||||
|
for file in *.heic; do
|
||||||
|
[ -f "$file" ] || continue
|
||||||
|
|
||||||
|
# We are going to rename the HEIC files according to their embedded dates,
|
||||||
|
# but exiftool syntax is hard so I will just check if these files were al-
|
||||||
|
# ready renamed and skip them. These files come from iPhones.
|
||||||
|
if [[ ! $file =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{4}\.HEIC$ ]]; then
|
||||||
|
# Rename file based on DateTimeOriginal EXIF tag and the original file
|
||||||
|
# name (I removed the "IMG_" part with perl-rename first).
|
||||||
|
exiftool '-filename<${DateTimeOriginal}_${FileName}' -d %Y-%m-%d "$file"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Rename VID_20210205_112539.mp4 to 2021-02-05_112539.mp4
|
||||||
|
echo "Renaming videos to ISO 8601 and removing VID_..."
|
||||||
|
perl-rename 's/VID_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.mp4/$1-$2-$3_$4.mp4/' *.mp4
|
||||||
|
perl-rename 's/VID_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.MP4/$1-$2-$3_$4.mp4/' *.MP4
|
||||||
|
|
||||||
|
# Rename 20220502_124146.mp4 (Samsung A52)
|
||||||
|
perl-rename 's/^([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.mp4/$1-$2-$3_$4.mp4/' *.mp4
|
||||||
|
|
||||||
|
# Rename PXL_20210714_145336054.mp4 to 2021-07-14_145336054.mp4
|
||||||
|
perl-rename 's/PXL_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.mp4/$1-$2-$3_$4\.mp4/' *.mp4
|
||||||
|
|
||||||
|
# Rename PXL_20240101_142720131.TS.MP4 to 2024-01-01_142720131.mp4 (Pixel 7a TopShot feature)
|
||||||
|
perl-rename 's/PXL_([0-9]{4})([0-9]{2})([0-9]{2})_([0-9]+)\.TS\.mp4/$1-$2-$3_$4\.mp4/' *.mp4
|
||||||
|
|
||||||
|
# Optimize JPEGs with jpeg-archive
|
||||||
|
find . -name '*.jpg' | chrt -b 0 parallel --no-notice "jpeg-recompress -q high {} {}"
|
||||||
|
|
||||||
|
# Change back to our starting directory
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
|
exit 0
|
4
dotfiles/local/share/dark-mode.d/01-gtk-theme.sh
Executable file
4
dotfiles/local/share/dark-mode.d/01-gtk-theme.sh
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
|
||||||
|
gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
|
4
dotfiles/local/share/light-mode.d/01-gtk-theme.sh
Executable file
4
dotfiles/local/share/light-mode.d/01-gtk-theme.sh
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
gsettings set org.gnome.desktop.interface gtk-theme "Adwaita"
|
||||||
|
gsettings set org.gnome.desktop.interface color-scheme "prefer-light"
|
1
dotfiles/ssh/config
Normal file
1
dotfiles/ssh/config
Normal file
@ -0,0 +1 @@
|
|||||||
|
AddKeysToAgent yes
|
@ -11,10 +11,17 @@ filetype on " enable file type detection
|
|||||||
filetype plugin on " enable file type plugins
|
filetype plugin on " enable file type plugins
|
||||||
filetype indent on " enable file type indents
|
filetype indent on " enable file type indents
|
||||||
|
|
||||||
set background=dark
|
" You might have to force true color when using regular vim inside tmux as the
|
||||||
" restrict vim to 16 ANSI colors in the palette instead of approximating 256
|
" colorscheme can appear to be grayscale with "termguicolors" option enabled.
|
||||||
set t_Co=16
|
" See: https://gist.github.com/andersevenrud/015e61af2fd264371032763d4ed965b6
|
||||||
|
if !has('gui_running') && &term =~ '^\%(screen\|tmux\)'
|
||||||
|
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum" " set foreground color
|
||||||
|
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum" " set background color
|
||||||
|
endif
|
||||||
|
|
||||||
colorscheme selenized
|
colorscheme selenized
|
||||||
|
set termguicolors
|
||||||
|
set background=dark
|
||||||
|
|
||||||
" for per-directory vimrc files
|
" for per-directory vimrc files
|
||||||
" see: https://jezenthomas.com/how-i-write-invoices-in-vim/
|
" see: https://jezenthomas.com/how-i-write-invoices-in-vim/
|
32
dotfiles/wezterm.lua
Normal file
32
dotfiles/wezterm.lua
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
-- Pull in the wezterm API
|
||||||
|
local wezterm = require 'wezterm'
|
||||||
|
|
||||||
|
-- This table will hold the configuration.
|
||||||
|
local config = {}
|
||||||
|
|
||||||
|
-- In newer versions of wezterm, use the config_builder which will
|
||||||
|
-- help provide clearer error messages
|
||||||
|
if wezterm.config_builder then
|
||||||
|
config = wezterm.config_builder()
|
||||||
|
end
|
||||||
|
|
||||||
|
config.font = wezterm.font 'Cascadia Mono'
|
||||||
|
config.font_size = 13.5
|
||||||
|
|
||||||
|
-- This is where you actually apply your config choices
|
||||||
|
config.color_scheme = 'Selenized Dark (Gogh)'
|
||||||
|
|
||||||
|
-- Disable bold colors for Solarized / Selenized
|
||||||
|
config.bold_brightens_ansi_colors = false
|
||||||
|
config.hide_tab_bar_if_only_one_tab = true
|
||||||
|
|
||||||
|
-- Disable default padding
|
||||||
|
config.window_padding = {
|
||||||
|
left = 0,
|
||||||
|
right = 0,
|
||||||
|
top = 0,
|
||||||
|
bottom = 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- and finally, return the configuration to wezterm
|
||||||
|
return config
|
@ -27,23 +27,40 @@ compinit
|
|||||||
if [[ "$OSTYPE" =~ ^linux.*$ ]]; then
|
if [[ "$OSTYPE" =~ ^linux.*$ ]]; then
|
||||||
PATH=~/.local/bin:$PATH
|
PATH=~/.local/bin:$PATH
|
||||||
|
|
||||||
# System Node.js with local "global" package prefix, for DSpace build environment:
|
{%@@ if profile == "knafeh" or profile == "balozi" @@%}
|
||||||
# $ npm config set prefix ~/.node_modules
|
# Export these variables in our TTY so that Sway can read them when it
|
||||||
# $ npm install -g bower grunt grunt-cli
|
# starts. It's not pretty, but it's all we can do since support for
|
||||||
PATH=$PATH:~/.node_modules/bin
|
# ~/.pam_environment was removed from pambase in Arch Linux recently.
|
||||||
|
|
||||||
if [[ -n $WAYLAND_DISPLAY ]]; then
|
|
||||||
export MOZ_ENABLE_WAYLAND=1
|
export MOZ_ENABLE_WAYLAND=1
|
||||||
# 2021-06-22: fix "Firefox is already running" message
|
# 2021-06-22: fix "Firefox is already running" message
|
||||||
# See: https://mastransky.wordpress.com/2020/03/16/wayland-x11-how-to-run-firefox-in-mixed-environment/
|
# See: https://mastransky.wordpress.com/2020/03/16/wayland-x11-how-to-run-firefox-in-mixed-environment/
|
||||||
export MOZ_DBUS_REMOTE=1
|
export MOZ_DBUS_REMOTE=1
|
||||||
export KITTY_ENABLE_WAYLAND=1
|
|
||||||
export QT_QPA_PLATFORM=wayland-egl
|
export QT_QPA_PLATFORM=wayland-egl
|
||||||
export CLUTTER_BACKEND=wayland
|
export CLUTTER_BACKEND=wayland
|
||||||
# 2020-02-10: https://github.com/swaywm/sway/wiki#issues-with-java-applications
|
# 2020-02-10: https://github.com/swaywm/sway/wiki#issues-with-java-applications
|
||||||
export _JAVA_AWT_WM_NONREPARENTING=1
|
export _JAVA_AWT_WM_NONREPARENTING=1
|
||||||
export SDL_VIDEODRIVER=wayland
|
export SDL_VIDEODRIVER=wayland
|
||||||
|
# Signal to xdg-desktop-portal that we're on Sway
|
||||||
|
export XDG_CURRENT_DESKTOP=sway
|
||||||
|
|
||||||
|
# 2023-02-05: tell pip/poetry not to probe for keyrings. I'm not publishing
|
||||||
|
# packages to pypi.org and the popup during pip/poetry install is annoying.
|
||||||
|
# See: https://github.com/python-poetry/poetry/issues/1917
|
||||||
|
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
|
||||||
|
|
||||||
|
# For rsync breaking change in arg parsing since 2022
|
||||||
|
# See: https://github.com/bit-team/backintime/issues/1247
|
||||||
|
export RSYNC_OLD_ARGS=1
|
||||||
|
{%@@ endif @@%}
|
||||||
|
|
||||||
|
{%@@ if profile == "knafeh" or profile == "balozi" @@%}
|
||||||
|
export WLR_RENDERER=vulkan
|
||||||
|
{%@@ endif @@%}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Enable zsh completions for mise version manager
|
||||||
|
if [[ -f /usr/bin/mise ]]; then
|
||||||
|
eval "$(/usr/bin/mise activate zsh)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
alias ls='ls -F --color=auto'
|
alias ls='ls -F --color=auto'
|
||||||
@ -53,7 +70,6 @@ alias less='less -R' # preserves colors in GNU coreutils' `less`
|
|||||||
# see: https://github.com/jan-warchol/selenized/tree/master/other-apps/dircolors
|
# see: https://github.com/jan-warchol/selenized/tree/master/other-apps/dircolors
|
||||||
export LS_COLORS="$LS_COLORS:ow=1;7;34:st=30;44:su=30;41"
|
export LS_COLORS="$LS_COLORS:ow=1;7;34:st=30;44:su=30;41"
|
||||||
|
|
||||||
|
|
||||||
# Environment
|
# Environment
|
||||||
export PS1='[%n@%m: %~]$ '
|
export PS1='[%n@%m: %~]$ '
|
||||||
export EDITOR=vim
|
export EDITOR=vim
|
||||||
@ -82,18 +98,29 @@ jpegoptimize() {
|
|||||||
gm mogrify -filter Triangle -define filter:support=2 -unsharp 2x0.5+0.7+0 -dither -quality $QUALITY -define jpeg:fancy-upsampling=off -interlace Line -strip -output-directory $2 $1
|
gm mogrify -filter Triangle -define filter:support=2 -unsharp 2x0.5+0.7+0 -dither -quality $QUALITY -define jpeg:fancy-upsampling=off -interlace Line -strip -output-directory $2 $1
|
||||||
}
|
}
|
||||||
|
|
||||||
# generate random password 15 characters long
|
# Generate a random hex password 20 characters long. The input from /dev/urandom
|
||||||
# See: https://unix.stackexchange.com/questions/230673/how-to-generate-a-random-string
|
# does not need to be any particular length due to SHA-2 256's design (for exam-
|
||||||
|
# ple, the "avalanche" effect and the input padding), so I just read 1 byte with
|
||||||
|
# dd. Some sites (see below) recommend using a minimum of 20 characters for hex
|
||||||
|
# passwords.
|
||||||
|
#
|
||||||
|
# See: https://www.ssh.com/academy/ssh/passphrase-generator
|
||||||
genpass() {
|
genpass() {
|
||||||
</dev/urandom tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' | head -c 15 ; echo
|
dd if=/dev/urandom bs=1 count=1 2>/dev/null | \
|
||||||
|
sha256sum -b | \
|
||||||
|
sed 's/ .*//' | \
|
||||||
|
head -c 20; echo
|
||||||
}
|
}
|
||||||
|
|
||||||
# set GPG TTY
|
# set GPG TTY for pinentry-curses
|
||||||
export GPG_TTY=$(tty)
|
export GPG_TTY=$(tty)
|
||||||
|
|
||||||
# Refresh gpg-agent tty in case user switches into an X Session
|
# Refresh gpg-agent tty in case user switches into an X Session
|
||||||
gpg-connect-agent updatestartuptty /bye >/dev/null
|
gpg-connect-agent updatestartuptty /bye >/dev/null
|
||||||
|
|
||||||
|
# Export location to SSH agent socket, see ssh-agent.service
|
||||||
|
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"
|
||||||
|
|
||||||
# Speed up JVM start for short-lived Java programs
|
# Speed up JVM start for short-lived Java programs
|
||||||
# See: https://zeroturnaround.com/rebellabs/your-maven-build-is-slow-speed-it-up/
|
# See: https://zeroturnaround.com/rebellabs/your-maven-build-is-slow-speed-it-up/
|
||||||
export MAVEN_OPTS="-XX:+TieredCompilation -XX:TieredStopAtLevel=1"
|
export MAVEN_OPTS="-XX:+TieredCompilation -XX:TieredStopAtLevel=1"
|
@ -1,41 +0,0 @@
|
|||||||
# -*- conf -*-
|
|
||||||
|
|
||||||
# 2021-01-20: avoid errors on remote systems when using less etc when the foot
|
|
||||||
# terminfo is not available.
|
|
||||||
term=xterm-256color
|
|
||||||
|
|
||||||
# Use fc-list to check fonts and styles
|
|
||||||
font=Cascadia Mono:style=Roman:size=12
|
|
||||||
font-bold=Cascadia Mono:style=SemiBold:size=12
|
|
||||||
font-italic=Cascadia Mono:style=Italic:size=12
|
|
||||||
# I don't know where any bold italic is used, but this should work if I ever
|
|
||||||
# find any.
|
|
||||||
font-bold-italic=Cascadia Mono:style=Bold Italic:size=12
|
|
||||||
|
|
||||||
# Selenized dark
|
|
||||||
[cursor]
|
|
||||||
color = 103c48 53d6c7
|
|
||||||
|
|
||||||
[colors]
|
|
||||||
background= 103c48
|
|
||||||
foreground= adbcbc
|
|
||||||
|
|
||||||
regular0= 184956
|
|
||||||
regular1= fa5750
|
|
||||||
regular2= 75b938
|
|
||||||
regular3= dbb32d
|
|
||||||
regular4= 4695f7
|
|
||||||
regular5= f275be
|
|
||||||
regular6= 41c7b9
|
|
||||||
regular7= 72898f
|
|
||||||
|
|
||||||
bright0= 2d5b69
|
|
||||||
bright1= ff665c
|
|
||||||
bright2= 84c747
|
|
||||||
bright3= ebc13d
|
|
||||||
bright4= 58a3ff
|
|
||||||
bright5= ff84cd
|
|
||||||
bright6= 53d6c7
|
|
||||||
bright7= cad8d9
|
|
||||||
|
|
||||||
dim0= 72898f
|
|
@ -1,10 +0,0 @@
|
|||||||
profile external-dell {
|
|
||||||
output eDP-1 disable
|
|
||||||
# Dell P2416D, 23.8 inches, 123.41 PPI (see https://www.sven.de/dpi/)
|
|
||||||
# "make model serial" from `swaymsg -t get_outputs`
|
|
||||||
output "Dell Inc. DELL P2416D 6RC2C54O0NWS" mode 2560x1440 position 0,0 scale 1.75
|
|
||||||
}
|
|
||||||
|
|
||||||
profile internal {
|
|
||||||
output eDP-1 enable mode 2560x1440 scale 1.75 position 0,0
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
#
|
|
||||||
# Requires the following packages on Arch Linux:
|
|
||||||
# - ttf-twemoji (and make sure there are no other emoji fonts like noto-fonts-emoji
|
|
||||||
# - iwd (iwctl)
|
|
||||||
# - pulsemixer
|
|
||||||
# - python-psutil
|
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from subprocess import check_output
|
|
||||||
from sys import stdout
|
|
||||||
|
|
||||||
from psutil import sensors_battery
|
|
||||||
|
|
||||||
|
|
||||||
def write(data):
|
|
||||||
stdout.write("%s\n" % data)
|
|
||||||
stdout.flush()
|
|
||||||
|
|
||||||
|
|
||||||
def refresh():
|
|
||||||
try:
|
|
||||||
ssid = (
|
|
||||||
check_output(
|
|
||||||
"iwctl station wlan0 show | grep -o 'Connected network.*$' | sed 's/^Connected network\s\+//'",
|
|
||||||
shell=True,
|
|
||||||
)
|
|
||||||
.strip()
|
|
||||||
.decode("utf-8")
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
ssid = "None"
|
|
||||||
|
|
||||||
wifi_status = f"{ssid} 📶"
|
|
||||||
|
|
||||||
battery_percent = int(sensors_battery().percent)
|
|
||||||
battery_icon = "🔋"
|
|
||||||
battery_status = f"{battery_percent} {battery_icon}"
|
|
||||||
power_status = "🔌" if sensors_battery().power_plugged else ""
|
|
||||||
|
|
||||||
try:
|
|
||||||
# pulsemixer returns "10 10" so we need to split the output to get "10"
|
|
||||||
volume_level = (
|
|
||||||
check_output("pulsemixer --get-volume", shell=True).strip().decode("utf-8")
|
|
||||||
)
|
|
||||||
volume_level = int(volume_level.split(" ")[0])
|
|
||||||
|
|
||||||
if volume_level >= 70:
|
|
||||||
volume_icon = "🔊"
|
|
||||||
elif volume_level >= 30 and volume_level < 70:
|
|
||||||
volume_icon = "🔉"
|
|
||||||
elif volume_level < 30 and volume_level >= 1:
|
|
||||||
volume_icon = "🔈"
|
|
||||||
else:
|
|
||||||
volume_icon = "🔇"
|
|
||||||
except Exception:
|
|
||||||
volume_level = ""
|
|
||||||
volume_icon = ""
|
|
||||||
|
|
||||||
volume_status = f"{volume_level} {volume_icon}"
|
|
||||||
|
|
||||||
date = datetime.now().strftime("%Y-%m-%d %l:%M:%S %p")
|
|
||||||
|
|
||||||
write(f"{wifi_status} {volume_status} {battery_status} {power_status} {date}")
|
|
||||||
|
|
||||||
|
|
||||||
refresh()
|
|
@ -1,33 +0,0 @@
|
|||||||
window {
|
|
||||||
border: 2px solid #2aa198;
|
|
||||||
border-radius: 12px;
|
|
||||||
background-color: rgba(4, 30, 37, 0.88);
|
|
||||||
}
|
|
||||||
|
|
||||||
#input {
|
|
||||||
color: #859900;
|
|
||||||
border: 2px solid #2aa198;
|
|
||||||
border-radius: 12px;
|
|
||||||
background-color: rgba(4, 30, 37, 0.88);
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#outer-box {
|
|
||||||
margin: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#scroll {
|
|
||||||
margin: 5px 0px;
|
|
||||||
font-size: 16px;
|
|
||||||
color: #859900;
|
|
||||||
}
|
|
||||||
|
|
||||||
#scroll label {
|
|
||||||
margin: 1px 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#entry:selected {
|
|
||||||
color: #000000;
|
|
||||||
background-color: #d33682;
|
|
||||||
}
|
|
Reference in New Issue
Block a user