Compare commits

..

75 Commits

Author SHA1 Message Date
539102d713 dotfiles/zshrc: use vulkan on Sway
Seems to work fine on all Intel now.
2025-02-10 09:14:43 +03:00
82f581d0a5 dotfiles/zshrc: enable Vulkan renderer on balozi 2025-01-02 10:32:24 +03:00
276bb1c239 dotfiles/local/bin/convert-libaom.sh: import latest 2024-12-31 10:37:57 +03:00
f386c25a22 dotfiles: minor updates for Sway v1.10 2024-10-31 09:39:00 +03:00
81c5870943 Use geoclue in darkman
Otherwise it doesn't realize that we have changed location.

See: https://darkman.whynothugo.nl/
2024-07-13 21:24:56 +03:00
ad43053789 Add dark-mode and light-mode scripts for darkman 2024-07-04 22:22:04 +03:00
418c44e47d dotfiles/local/bin/pre-process-media.sh: update
Add support for Pixel TopShot videos.
2024-06-17 21:56:45 +03:00
17e5212f76 dotfiles/config/waybar: hardcode Font Awesome 2024-05-06 17:06:36 +03:00
d21cb6a169 dotfiles/local/bin: update pre-process-media.sh 2024-04-28 13:11:48 +03:00
4c2b8eb267 dotfiles/zshrc: remove NODE_OPTIONS
I set this via .mise.toml in each project now.
2024-03-23 16:37:01 +03:00
4356256836 dotfiles/zshrc: disable vulkan WLR_RENDERER
This is still buggy. Lots of flickering.
2024-03-23 16:36:35 +03:00
d4415cf264 dotfiles/config/sway: use foot instead of wezterm
foot feels more minimal.
2024-03-23 16:35:12 +03:00
525d0a6fab dotfiles/zshrc: remove node_modules/bin
Don't need this anymore since we've moved on to DSpace 7 everywhere.
2024-03-18 11:10:43 +03:00
68d65ab43f dotfiles/wezterm.lua: use Selenized Dark theme
As of recent Wezterm release.
2024-01-30 08:50:50 +03:00
a520a68d04 dotfiles/zshrc: remove RTX_HIDE_UPDATE_WARNING
I don't think rtx has used this for some time, and now that rtx was
renamed to mise it definitely won't read it.
2024-01-04 10:07:55 +03:00
c84aa26825 dotfiles/zshrc: rtx→mise 2024-01-04 09:13:32 +03:00
6e18cca897 config.yaml: add convert-libaom.sh
Script to convert files to AV1. I don't know if this works actually
because we use dotdrop to manage ~/.local/bin as well.
2024-01-01 22:02:20 +03:00
8f53c7fa5c dotfiles/zshrc: use vulkan renderer in Sway 2023-12-27 08:39:57 +03:00
2ebf5090e0 Revert "dotfiles/zshrc: use vulkan in Sway"
This reverts commit 634e44346c.

This actually removed the setting entirely instead of enabling it.
2023-12-27 08:38:54 +03:00
d88642c3d3 Revert "dotfiles/zshrc: remove MOZ_ENABLE_WAYLAND"
This reverts commit d96d8d6550.

Thunderbird still needs this!
2023-12-26 10:01:17 +03:00
190e1cd550 Use wezterm instead of foot
It's fast and Wayland native, but doesn't have the weird character
box width glitch.
2023-12-24 22:10:20 +03:00
634e44346c dotfiles/zshrc: use vulkan in Sway
This is much more stable than the last time I tried it.
2023-12-24 22:09:14 +03:00
d96d8d6550 dotfiles/zshrc: remove MOZ_ENABLE_WAYLAND
Wayland is enabled by default on all platforms as of Firefox 121.
2023-12-22 08:35:29 +03:00
5d285d1677 Add ~/.wezterm.lua
Contains basic config with Selenized colorscheme.
2023-12-10 21:47:50 +03:00
30ce3d5e1d dotfiles/zshrc: only use some opts on dev hosts
Only use the Node.js and rsync variables on dev hosts.
2023-09-26 09:58:24 +03:00
e33ac6ffcb dotfiles/zshrc: add RSYNC_OLD_ARGS
Some time last year rsync made a breaking change around argument
parsing.
2023-09-26 09:57:24 +03:00
0e7a2b7b1e dotfiles/zshrc: add NODE_OPTIONS
I need this so Angular applications like DSpace's frontend don't
crash during build due to JavaScript heap memory.
2023-09-26 09:56:35 +03:00
6847354160 dotfiles: use fuzzel instead of wofi
Wofi is unmaintained since late 2022.
2023-08-22 15:05:02 +03:00
c38e7d8280 dotfiles/local/bin/add-shadow.sh: use magick prefix
This is the newer ImageMagick syntax.
2023-08-22 14:52:24 +03:00
26cad4107e Import fuzzel configuration 2023-08-22 14:44:55 +03:00
5c684c084f dotfiles/zshrc: don't show rtx version warnings 2023-04-30 07:25:10 +03:00
113496cc2b dotfiles/zshrc: switch from asdf to rtx 2023-03-20 14:14:48 +03:00
50fab353e2 Update waybar style
Fix incorrect selenized dark color, reduce padding around workspace
module, improve colors for battery charging, improve bottom border
on active workspace.
2023-03-02 21:12:02 +03:00
b468cf8c94 Update waybar style
Use selenized dark color palette instead of solarized dark.
2023-03-02 15:56:37 +03:00
c7a14964b0 Switch to waybar
Remove custom sway status.py script and use waybar instead.
2023-02-24 20:07:50 +03:00
3f5393758e dotfiles/zshrc: pip/poetry keyring fix
I finally figured out why this annoying keyring unlock happens when
I do a pip/poetry install. Good riddance!

See: https://github.com/python-poetry/poetry/issues/1917
2023-02-05 21:23:12 +03:00
f4465c4056 dotfiles/zshrc: don't use Vulkan in Sway
It is really buggy on older Intel, and even on newer Intel apps like
Thunderbird are unusable.
2023-01-03 10:47:31 +03:00
96fb353c2c dotfiles/zshrc: use Vulkan renderer in Sway
Sway 1.8 greatly improved their Vulkan renderer so I'm going to try
to use it now.
2022-12-26 15:09:24 +02:00
01bb3f6d3a dotfiles: update tmux.conf
Now that all my hosts are running new enough userlands to support
the tmux-256color terminfo entry I can use it everywhere. Notably
this enables italics to work inside tmux.

Also update comment about the tmux-specific terminfo extensions
for true color. I need to keep using "Tc" until all my hosts have
tmux 3.2+.

See: https://jdhao.github.io/2018/10/19/tmux_nvim_true_color/
See: https://github.com/tmux/tmux/wiki/FAQ#i-dont-see-italics-or-italics-and-reverse-are-the-wrong-way-round
2022-11-26 15:01:38 +03:00
b3a7212ff7 dotfiles: add comment to foot.ini
This is how to check if a term entry exists on the local system.
2022-11-11 09:02:48 +03:00
7f024d3cff dotfiles/zshrc: set XDG_CURRENT_DESKTOP=sway
This was set in ~/.pam_environment up until a few days ago, but I
forgot to add it when I moved the exports to .zshrc. We need this
for xdg-desktop-portal to know we're on Sway for screensharing.
2022-11-10 19:14:35 +03:00
811e10f04d dotfiles/vimrc: fix truecolor support
I never really knew why the colors looked different inside and out
of tmux. Now they look correct everywhere!

See: https://gist.github.com/andersevenrud/015e61af2fd264371032763d4ed965b6
2022-11-07 22:18:26 +03:00
188e055677 dotfiles/config/tmux/tmux.conf: true color
Enable true color support in tmux. I didn't even know this was not
working in my current setup. Very interesting read below.

See: https://jdhao.github.io/2018/10/19/tmux_nvim_true_color/
2022-11-07 21:55:39 +03:00
79cf112ad4 dotfiles/zshrc: export Sway variables
We need to export these from zsh in our TTY so Sway can read them
when it starts. Sigh.
2022-11-06 21:33:39 +03:00
ee09822398 dotfiles/config/sway/config: remove systemctl import-environment
This was apparently deprecated and no longer works as intended. You
must name all variables you want to import now.
2022-11-06 21:30:20 +03:00
75ebcd48e3 Remove ~/.pam_environment
It has been deprecated for a long time and Arch Linux finally rem-
oved support for it from pambase.

See: https://bugs.archlinux.org/task/68945
2022-11-06 21:23:34 +03:00
8b23f5748e dotfiles/config/wofi/style.css: update
Latest selenized-dark from Selenized repo.

See: https://github.com/jan-warchol/selenized/blob/master/other-apps/wofi/selenized-dark.css
2022-11-01 10:18:25 +03:00
144e015223 dotfiles/zshrc: check if asdf.sh exists
This exists on Arch, but not if I'm running the dotfiles on some
random server.
2022-08-31 19:16:45 +03:00
dd44606a6f dotfiles/zshrc: use asdf on all profiles 2022-08-31 19:14:47 +03:00
a1eb0994fd dotfiles/zshrc: new genpass alias 2022-08-31 16:59:58 +03:00
936385d111 dotfiles/config/sway/config: float LibreOffice import 2022-08-18 20:40:50 -07:00
808e06eaf8 dotfiles/zshrc: add comment about ssh-agent socket 2022-08-14 13:51:06 -07:00
6d568a8c94 dotfiles/config/sway/config: float iwgtk 2022-08-13 14:41:23 -07:00
59d99715ab README.md: update instructions
I'm using the AUR package for dotdrop now.
2022-08-12 20:59:32 -07:00
f1b55c6be9 Add ssh-agent service and ssh config
Add a systemd user service to start the ssh-agent and add an ssh
config to automatically add ssh identities to the agent when they
are used (otherwise we have to add them manually). I will see how
this works out.

See: https://wiki.archlinux.org/title/SSH_keys#SSH_agents
2022-08-12 16:23:06 -07:00
afa622369b dotfiles/zshrc: update
Remove unused Kitty and ASDF variables, and export SSH_AUTH_SOCK.
2022-08-12 16:21:55 -07:00
50bb7df89e dotfiles/zshrc: add comment about GPG_TTY
This is only needed for pinentry-curses.
2022-08-12 08:47:33 -07:00
4d6353ed2a Add scripts from ~/.local/bin
Some utility scripts.
2022-08-01 15:14:12 +03:00
3ddb4f58f4 dotfiles: update Kanshi config
Add new Dell 4K monitor.
2022-07-30 21:06:04 +03:00
a644fc60e2 dotfiles/config/sway/config: fix shortcuts
Recently Chromium has started disabling shortcuts for windows that
were launched with `--app`.

See: https://www.reddit.com/r/swaywm/comments/vlvpws/chromeium_app_flag_spawns_windows_with_shortcut/
2022-06-27 22:23:43 +03:00
918f0958b1 Remove dotfiles/vim/.netrwhist 2022-05-16 11:05:29 +03:00
feb6efa204 Move tmux config 2022-05-14 21:30:42 +03:00
e5a8d48de9 dotfiles/zshrc: add asdf version manager 2022-05-05 10:50:54 +03:00
2524b0d6cd config.yaml: fix syntax error 2022-04-25 16:49:18 +03:00
447d81051f config.yaml: add generic profile for dotdrop
dotdrop wants to use a profile for each system it is deployed. We
want to use some common settings on all hosts without having to c-
reate a profile for each.
2022-04-25 16:47:10 +03:00
bb3f0556ee dotfiles/config/sway/config: calculator floating
As of GNOME 42 this application ID changed.
2022-04-22 15:05:33 +03:00
151e3b1f91 dotfiles: add vim modeline to foot.ini 2022-04-15 10:32:26 +03:00
7dc73b94c3 dotfiles: include selenized-dark colors in foot
No need to define them directly!
2022-04-15 10:31:52 +03:00
3a0beefd2e Add geoclue-agent.service
Required for geolocation using the system geoclue service.
2022-03-01 11:01:33 +03:00
8f4161b832 dotfiles/config/kanshi: update monitor 2022-02-11 11:41:29 +03:00
c7fd75d787 Import xdg-desktop-portal-wlr config
This is important for the screensharing prompt. By default it seems
to just use slurp, which is slightly confusing.

See: https://github.com/emersion/xdg-desktop-portal-wlr/issues/124
2022-02-11 11:39:10 +03:00
d70d22ea05 Remove alacritty config
I don't use it.
2022-02-07 09:45:43 +03:00
7b90092dfe dotfiles: fix tab in kanshi config 2022-02-07 07:27:29 +03:00
07f87a3064 kanshi/config: add other HP monitor
Hopefully this one is temporary because the colors suck.
2022-02-03 16:19:38 +03:00
d1338a46b3 Add HP monitor to kanshi config 2022-01-31 20:19:57 +03:00
28 changed files with 893 additions and 940 deletions

View File

@ -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

View File

@ -1,5 +1,16 @@
# Alan's dotfiles # Alan's dotfiles
Alan's dotfiles are managed with [dotdrop](https://github.com/deadc0de6/dotdrop). To set up on a new machine, do this: 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
$ git clone --recursive https://git.mjanja.ch/alanorth/dotfiles.git
$ dotdrop install
```
## Setup on Other Linux
Bootstrap the repository's copy of dotdrop, prepare Python deps, and then install the dotfiles:
```console ```console
$ git clone --recursive https://git.mjanja.ch/alanorth/dotfiles.git $ git clone --recursive https://git.mjanja.ch/alanorth/dotfiles.git

View File

@ -10,8 +10,8 @@ dotfiles:
src: vimrc src: vimrc
dst: ~/.vimrc dst: ~/.vimrc
f_tmux.conf: f_tmux.conf:
src: tmux.conf src: config/tmux/tmux.conf
dst: ~/.tmux.conf dst: ~/.config/tmux/tmux.conf
f_foot.ini: f_foot.ini:
src: config/foot/foot.ini src: config/foot/foot.ini
dst: ~/.config/foot/foot.ini dst: ~/.config/foot/foot.ini
@ -48,13 +48,55 @@ dotfiles:
f_psqlrc: f_psqlrc:
src: psqlrc src: psqlrc
dst: ~/.psqlrc dst: ~/.psqlrc
f_pam_environment:
src: pam_environment
dst: ~/.pam_environment
f_bashrc: f_bashrc:
src: bashrc src: bashrc
dst: ~/.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: profiles:
everywhere:
dotfiles:
- d_vim
- f_vimrc
- f_tmux.conf
- f_zshrc
balozi: balozi:
dotfiles: dotfiles:
- d_vim - d_vim
@ -72,7 +114,16 @@ profiles:
- f_wob.socket - f_wob.socket
- f_sway-session.target - f_sway-session.target
- f_psqlrc - f_psqlrc
- f_pam_environment - 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: knafeh:
dotfiles: dotfiles:
- d_vim - d_vim
@ -90,4 +141,14 @@ profiles:
- f_wob.socket - f_wob.socket
- f_sway-session.target - f_sway-session.target
- f_psqlrc - f_psqlrc
- f_pam_environment - 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

View File

@ -0,0 +1 @@
usegeoclue: true

View File

@ -1,7 +1,7 @@
# -*- conf -*- # -*- conf -*-
# 2021-01-20: avoid errors on remote systems when using less etc when the foot # 2021-01-20: avoid errors on remote systems when using less etc when the foot
# terminfo is not available. # terminfo is not available. Check with `infocmp tmux-256color`.
term=xterm-256color term=xterm-256color
# Use fc-list to check fonts and styles # Use fc-list to check fonts and styles
@ -23,29 +23,6 @@ font-bold-italic=Cascadia Mono:style=Bold Italic:size=13.5
{%@@ endif @@%} {%@@ endif @@%}
# Selenized dark # Selenized dark
[cursor] include=/usr/share/foot/themes/selenized-dark
color = 103c48 53d6c7
[colors] # vim: ft=dosini
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

View 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

View File

@ -1,10 +1,31 @@
profile external-dell { profile external-dell {
output eDP-1 disable output eDP-1 disable
# Dell P2416D, 23.8 inches, 123.41 PPI (see https://www.sven.de/dpi/) # Dell P2416D, 23.8 inches, 123.41 PPI (see https://www.sven.de/dpi/)
# "make model serial" from `swaymsg -t get_outputs` # "make model serial" from `swaymsg -t get_outputs`
output "Dell Inc. DELL P2416D 6RC2C54O0NWS" mode 2560x1440 position 0,0 scale 1.75 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 { profile internal {
{%@@ if profile == "knafeh" @@%} {%@@ if profile == "knafeh" @@%}
output eDP-1 enable mode 2560x1440 scale 1.75 position 0,0 output eDP-1 enable mode 2560x1440 scale 1.75 position 0,0

View File

@ -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"

View File

@ -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()

View 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

View 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

View File

@ -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'

View File

@ -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)

View 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": ["", "", ""]
},
}

View 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;
}

View File

@ -1,33 +1,60 @@
/**
* Selenized dark variant Wofi Color theme
**/
window { window {
border: 2px solid #2aa198; margin: 1px;
border-radius: 12px; border: 1px solid #adbcbc;
background-color: rgba(4, 30, 37, 0.88); background-color: #103c48;
} }
#input { #input {
color: #859900; margin: 1px;
border: 2px solid #2aa198; border: 2px dashed #84c747;
border-radius: 12px; border-top-color: #103c48;
background-color: rgba(4, 30, 37, 0.88); border-left-color: #103c48;
font-size: 18px; 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 { #outer-box {
margin: 10px; margin: 1px;
border: 2px none #103c48;
background-color: #103c48;
} }
#scroll { #scroll {
margin: 5px 0px; margin: 1px;
font-size: 16px; border: 2px solid #103c48;
color: #859900; background-color: #103c48;
color: #adbcbc;
} }
#scroll label { #text {
margin: 1px 1px; margin: 1px;
border: 1px none #103c48;
font: 14px DejaVu Sans Mono;
} }
#entry:selected { #selected {
color: #000000; margin: 0px;
background-color: #d33682; border: 2px none #325b66;
background-color: #325b66;
color: #adbcbc;
}
#entry {
margin: 1px;
border: 1px none #103c48;
background-color: #103c48;
} }

View 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

View 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"

View 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

View 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

View 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"

View 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"

View File

@ -1,3 +0,0 @@
MOZ_ENABLE_WAYLAND=1
QT_QPA_PLATFORM=wayland-egl
XDG_CURRENT_DESKTOP=sway

1
dotfiles/ssh/config Normal file
View File

@ -0,0 +1 @@
AddKeysToAgent yes

View File

@ -1,3 +0,0 @@
let g:netrw_dirhistmax =10
let g:netrw_dirhistcnt =1
let g:netrw_dirhist_1='/home/aorth/.config/foot'

View File

@ -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
View 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

View File

@ -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.
export MOZ_ENABLE_WAYLAND=1
# 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/
export MOZ_DBUS_REMOTE=1
export QT_QPA_PLATFORM=wayland-egl
export CLUTTER_BACKEND=wayland
# 2020-02-10: https://github.com/swaywm/sway/wiki#issues-with-java-applications
export _JAVA_AWT_WM_NONREPARENTING=1
export SDL_VIDEODRIVER=wayland
# Signal to xdg-desktop-portal that we're on Sway
export XDG_CURRENT_DESKTOP=sway
if [[ -n $WAYLAND_DISPLAY ]]; then # 2023-02-05: tell pip/poetry not to probe for keyrings. I'm not publishing
export MOZ_ENABLE_WAYLAND=1 # packages to pypi.org and the popup during pip/poetry install is annoying.
# 2021-06-22: fix "Firefox is already running" message # See: https://github.com/python-poetry/poetry/issues/1917
# See: https://mastransky.wordpress.com/2020/03/16/wayland-x11-how-to-run-firefox-in-mixed-environment/ export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
export MOZ_DBUS_REMOTE=1
export KITTY_ENABLE_WAYLAND=1 # For rsync breaking change in arg parsing since 2022
export QT_QPA_PLATFORM=wayland-egl # See: https://github.com/bit-team/backintime/issues/1247
export CLUTTER_BACKEND=wayland export RSYNC_OLD_ARGS=1
# 2020-02-10: https://github.com/swaywm/sway/wiki#issues-with-java-applications {%@@ endif @@%}
export _JAVA_AWT_WM_NONREPARENTING=1
export SDL_VIDEODRIVER=wayland {%@@ if profile == "knafeh" or profile == "balozi" @@%}
fi export WLR_RENDERER=vulkan
{%@@ endif @@%}
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"