Compare commits

..
10 Commits
Author SHA1 Message Date
TnSb 4131ac8e93 add termux.properties 2026-09-11 16:26:54 -04:00
TnSb d2e159b0fc fix python tmpl script 2026-09-11 15:56:16 -04:00
TnSb a5b6e84cbc add smart-close KWin script to minimize Cisco Secure Client
vpnui's GTK window quits the whole process on close, removing its tray
icon. This KWin script registers a shortcut that minimizes the window
when Cisco Secure Client is focused and closes any other window normally,
so binding it to the window-close shortcut keeps vpnui in the tray.
2026-09-01 13:11:02 -04:00
TnSb 83ff8360ef add canonical agent instructions with per-tool symlinks
Store agent instructions at ~/.config/agents/AGENTS.md and symlink
~/.copilot/copilot-instructions.md and ~/.config/opencode/AGENTS.md to it.
Instructs agents to omit attribution trailers and to get the commit message
approved before committing.
2026-08-28 16:26:45 -04:00
TnSb 951cdb1d36 merge mimeapps defaults via modify_ script instead of full replace
mimeapps.list is rewritten by the desktop environment, so managing it as a
whole file made chezmoi update clobber each machine's own associations. Replace
the full-file template with a modify_ script that merges only the enforced
entries (per-host browser for text/html + http/https, and the nvim text-type
defaults) into whatever the machine already has, preserving everything else.
2026-08-28 16:12:30 -04:00
TnSb 2b2c702010 fixup! templatize mimeapps default browser per host 2026-08-28 16:05:50 -04:00
TnSb 4bff51bdcd remove unused dotool override and keyboard-layout helper 2026-08-28 16:03:26 -04:00
TnSb 7cfadfb6db templatize mimeapps default browser per host
Use default-browser.desktop for text/html on UGC* work machines and
firefox.desktop everywhere else.
2026-08-28 15:55:59 -04:00
TnSb a95a85d111 add btop and mimeapps configs 2026-08-28 15:47:08 -04:00
TnSb 4b373c500b disable maximize at startup to fix flickering artifacts when moving/resizing 2026-08-26 12:48:31 -04:00
12 changed files with 578 additions and 40 deletions
+4
View File
@@ -16,3 +16,7 @@ README.md
{{ if or (eq .chezmoi.hostname "daybreak") (eq .chezmoi.hostname "epoch") (eq .chezmoi.hostname "circadian") (eq .chezmoi.hostname "twilight") (env "ANDROID_ROOT") }} {{ if or (eq .chezmoi.hostname "daybreak") (eq .chezmoi.hostname "epoch") (eq .chezmoi.hostname "circadian") (eq .chezmoi.hostname "twilight") (env "ANDROID_ROOT") }}
.config/python .config/python
{{ end }} {{ end }}
{{ if not (env "ANDROID_ROOT") }}
.termux/termux.properties
{{ end }}
+6
View File
@@ -0,0 +1,6 @@
# Agent instructions
## Commits
- Do not add a `Co-authored-by` trailer (or any other agent attribution) to commit messages.
- Before committing, show the proposed commit message and wait for approval. Apply any edits I request, then commit.
+272
View File
@@ -0,0 +1,272 @@
#? Config file for btop v.1.4.6
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "Default"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = true
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = true
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = false
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = false
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = true
#* Use terminal synchronized output sequences to reduce flickering on supported terminals.
terminal_sync = true
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
graph_symbol_gpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "cpu mem net proc"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "cpu lazy"
#* Reverse sorting order, True or False.
proc_reversed = false
#* Show processes as a tree.
proc_tree = true
#* Use the cpu graph colors in the process list.
proc_colors = true
#* Use a darkening gradient in the process list.
proc_gradient = true
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = false
#* Show process memory as bytes instead of percent.
proc_mem_bytes = true
#* Show cpu graph for each process.
proc_cpu_graphs = true
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = false
#* Show proc box on left side of screen instead of right.
proc_left = false
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = false
#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = false
#* Should cpu and memory usage display be preserved for dead processes when paused.
keep_dead_proc_usage = false
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "Auto"
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "Auto"
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
show_gpu_info = "Auto"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = true
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = false
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = false
#* Shows the system uptime in the CPU box.
show_uptime = true
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
show_cpu_watts = true
#* Show cpu temperature.
check_temp = true
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = true
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = false
#* Show CPU frequency.
show_cpu_freq = true
#* How to calculate CPU frequency, available values: "first", "range", "lowest", "highest" and "average".
freq_mode = "first"
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = true
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
disks_filter = ""
#* Show graphs instead of meters for memory values.
mem_graphs = true
#* Show mem box below net box instead of above.
mem_below_net = false
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = true
#* If swap memory should be shown in memory box.
show_swap = true
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = true
#* If mem box should be split to also show disks info.
show_disks = false
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = true
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = true
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = false
#* Set to true to show available disk space for privileged users.
disk_free_priv = false
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = true
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = true
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = false
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = true
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = true
#* Starts with the Network Interface specified here.
net_iface = ""
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
base_10_bitrate = "Auto"
#* Show battery stats in top right if battery is present.
show_battery = true
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Show power stats of battery next to charge indicator.
show_battery_watts = true
#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"
#* Automatically save current settings to config file on exit.
save_config_on_exit = true
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = true
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
rsmi_measure_pcie_speeds = true
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = true
#* Set which GPU vendors to show. Available values are "nvidia amd intel"
shown_gpus = "nvidia amd intel"
#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""
#* Custom gpu1 model name, empty string to disable.
custom_gpu_name1 = ""
#* Custom gpu2 model name, empty string to disable.
custom_gpu_name2 = ""
#* Custom gpu3 model name, empty string to disable.
custom_gpu_name3 = ""
#* Custom gpu4 model name, empty string to disable.
custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""
+1 -1
View File
@@ -27,7 +27,7 @@ font=FiraCode:size=10
initial-color-theme=light initial-color-theme=light
# initial-window-size-pixels=700x500 # Or, # initial-window-size-pixels=700x500 # Or,
# initial-window-size-chars=<COLSxROWS> # initial-window-size-chars=<COLSxROWS>
initial-window-mode=maximized # initial-window-mode=maximized
# pad=0x0 center-when-maximized-and-fullscreen # pad=0x0 center-when-maximized-and-fullscreen
resize-by-cells=no resize-by-cells=no
# resize-keep-grid=yes # resize-keep-grid=yes
+69
View File
@@ -0,0 +1,69 @@
#!/usr/bin/env python3
{{ $browser := "firefox.desktop" }}{{ if hasPrefix "UGC" .chezmoi.hostname }}{{ $browser = "default-browser.desktop" }}{{ end }}
# chezmoi modify_ script: merge a curated set of default associations into the
# machine's existing mimeapps.list (read from stdin) instead of replacing the
# whole file, so each machine keeps its own entries.
import sys
BROWSER = "{{ $browser }}"
SECTION = "[Default Applications]"
# Associations enforced on every machine, in [Default Applications].
ENFORCED = {
"application/json": "nvim.desktop",
"application/x-docbook+xml": "nvim.desktop",
"application/x-yaml": "nvim.desktop",
"text/markdown": "nvim.desktop",
"text/x-cmake": "nvim.desktop",
"text/html": BROWSER,
"x-scheme-handler/http": BROWSER,
"x-scheme-handler/https": BROWSER,
}
def main():
lines = sys.stdin.read().splitlines()
# Split into sections, preserving header lines and body order. The first
# (headerless) section holds any preamble before the first [Header].
sections = [[None, []]]
for line in lines:
stripped = line.strip()
if stripped.startswith("[") and stripped.endswith("]"):
sections.append([stripped, []])
else:
sections[-1][1].append(line)
target = next((s for s in sections if s[0] == SECTION), None)
if target is None:
target = [SECTION, []]
sections.append(target)
remaining = dict(ENFORCED)
body = []
for line in target[1]:
key = line.split("=", 1)[0].strip() if "=" in line else None
if key in remaining:
body.append("{}={};".format(key, remaining.pop(key)))
else:
body.append(line)
# Append any still-missing enforced keys before trailing blank lines.
trailing = []
while body and body[-1].strip() == "":
trailing.insert(0, body.pop())
for key, val in ENFORCED.items():
if key in remaining:
body.append("{}={};".format(key, val))
body.extend(trailing)
target[1] = body
out = []
for header, section_body in sections:
if header is not None:
out.append(header)
out.extend(section_body)
sys.stdout.write("\n".join(out) + "\n")
main()
@@ -0,0 +1 @@
{{ .chezmoi.homeDir }}/.config/agents/AGENTS.md
@@ -0,0 +1 @@
{{ .chezmoi.homeDir }}/.config/agents/AGENTS.md
-8
View File
@@ -1,8 +0,0 @@
#!/bin/sh
current_layer=$(get_plasma_keyboard_layout)
#current_layer=$(timeout 0.1s keyd listen | grep -m 1 '^/' | sed 's/^\///')
#if [ "$current_layer" = "qwerty" ]; then
# current_layer="basic"
#fi
DOTOOL_XKB_LAYOUT=us DOTOOL_XKB_VARIANT=$current_layer /usr/bin/dotool "$@"
@@ -1,31 +0,0 @@
#!/usr/bin/env python3
import dbus
def get_keyboard_info():
bus = dbus.SessionBus()
keyboard = bus.get_object('org.kde.keyboard', '/Layouts')
keyboard_interface = dbus.Interface(keyboard, dbus_interface='org.kde.KeyboardLayouts')
layouts_list = keyboard_interface.getLayoutsList()
current_layout_index = keyboard_interface.getLayout()
return layouts_list, current_layout_index
def set_keyboard_layout_env(layouts_list, current_layout_index):
current_layout = layouts_list[current_layout_index]
_, _, name = current_layout
if "Dvorak" in name:
keyboard_layout = "dvorak"
elif "US" in name:
keyboard_layout = "basic"
else:
keyboard_layout = "unknown"
return keyboard_layout
if __name__ == "__main__":
layouts_list, current_layout_index = get_keyboard_info()
keyboard_layout = set_keyboard_layout_env(layouts_list, current_layout_index)
print(keyboard_layout)
@@ -0,0 +1,18 @@
// Smart Close: minimize Cisco Secure Client, close everything else.
registerShortcut(
"SmartCloseWindow",
"Smart Close Window (minimize Cisco Secure Client)",
"Ctrl+Alt+Shift+F4", // placeholder default; rebind to your real close shortcut
function () {
var w = workspace.activeWindow;
if (!w) {
return;
}
var cls = String(w.resourceClass).toLowerCase();
if (cls.indexOf("secureclient") !== -1) {
w.minimized = true;
} else {
w.closeWindow();
}
}
);
@@ -0,0 +1,13 @@
{
"KPlugin": {
"Id": "smartclose",
"Name": "Smart Close Window",
"Description": "Minimize Cisco Secure Client instead of closing it; close all other windows normally",
"Version": "1.0",
"Authors": [{ "Name": "dotfiles" }],
"EnabledByDefault": true
},
"KPackageStructure": "KWin/Script",
"X-Plasma-API": "javascript",
"X-Plasma-MainScript": "code/main.js"
}
+193
View File
@@ -0,0 +1,193 @@
### This is a `.properties` [https://en.wikipedia.org/wiki/.properties] file
### for termux app properties and is loaded with the `java.util.Properties.load()`
### [https://developer.android.com/reference/java/util/Properties#load(java.io.Reader)]
### call by the termux app and must be formatted as per its spec.
### To make changes to a property value, uncomment the property line by removing
### any hash `#` characters at the start of the line.
### After making required changes, save the file and run `termux-reload-settings`
### in the terminal for changes to take effect. Some properties require app
### process to be restarted to be updated which can be done by force stopping
### the app from Android app settings.
### All information here can also be found on the
### wiki: https://wiki.termux.com/wiki/Terminal_Settings
###############
# General
###############
### Allow external applications to execute arbitrary commands within Termux.
### This potentially could be a security issue, so option is disabled by
### default. Uncomment to enable.
# allow-external-apps = true
### Default working directory that will be used when launching the app.
# default-working-directory = /data/data/com.termux/files/home
### Uncomment to disable toasts shown on terminal session change.
# disable-terminal-session-change-toast = true
### Uncomment to not show soft keyboard on application start.
# hide-soft-keyboard-on-startup = true
### Uncomment to let keyboard toggle button to enable or disable software
### keyboard instead of showing/hiding it.
# soft-keyboard-toggle-behaviour = enable/disable
### Adjust terminal scrollback buffer. Max is 50000. May have negative
### impact on performance.
# terminal-transcript-rows = 2000
### Uncomment to use volume keys for adjusting volume and not for the
### extra keys functionality.
# volume-keys = volume
###############
# Fullscreen mode
###############
### Uncomment to let Termux start in full screen mode.
# fullscreen = true
### Uncomment to attempt workaround layout issues when running in
### full screen mode.
# use-fullscreen-workaround = true
###############
# Cursor
###############
### Cursor blink rate. Values 0, 100 - 2000.
# terminal-cursor-blink-rate = 0
### Cursor style: block, bar, underline.
# terminal-cursor-style = block
###############
# Extra keys
###############
# Custom layout (mine)
extra-keys = [['TAB','DRAWER','/',':','UP','-','PGUP'],['ESC','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]
### Settings for choosing which set of symbols to use for illustrating keys.
### Choose between default, arrows-only, arrows-all, all and none
# extra-keys-style = default
### Force capitalize all text in extra keys row button labels.
# extra-keys-text-all-caps = true
### Default extra-key configuration
# extra-keys = [[ESC, TAB, CTRL, ALT, {key: '-', popup: '|'}, DOWN, UP]]
### Two rows with more keys
# extra-keys = [['ESC','/','-','HOME','UP','END','PGUP'], \
# ['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]
### Configuration with additional popup keys (swipe up from an extra key)
# extra-keys = [[ \
# {key: ESC, popup: {macro: "CTRL f d", display: "tmux exit"}}, \
# {key: CTRL, popup: {macro: "CTRL f BKSP", display: "tmux ←"}}, \
# {key: ALT, popup: {macro: "CTRL f TAB", display: "tmux →"}}, \
# {key: TAB, popup: {macro: "ALT a", display: A-a}}, \
# {key: LEFT, popup: HOME}, \
# {key: DOWN, popup: PGDN}, \
# {key: UP, popup: PGUP}, \
# {key: RIGHT, popup: END}, \
# {macro: "ALT j", display: A-j, popup: {macro: "ALT g", display: A-g}}, \
# {key: KEYBOARD, popup: {macro: "CTRL d", display: exit}} \
# ]]
### Another configuration with advanced popup key usage designed for more
### specific use-cases. In this case, it is designed for working with Vim-like
### editors for faster navigation
#extra-keys = [ \
# [ \
# { key: ESC, popup: { macro: ":q\n", display: "QuickExit" } }, \
# { key: '/', popup: '\\\\' }, \
# { key: '-', popup: '_' }, \
# { key: HOME, popup: { macro: "CTRL HOME", display: "Top" } }, \
# { key: UP, popup: { macro: "CTRL UP", display: "UP" } }, \
# { key: END, popup: { macro: "CTRL END", display: "End" } }, \
# { key: ":", popup: ";" }, \
# { key: "(", popup: "{" } \
# ], \
# [ \
# { key: TAB, popup: { macro: ":wq\n", display: "Write And Exit" } }, \
# { key: CTRL, popup: { macro: ":w\n", display: "Write" } }, \
# ALT, \
# { key: LEFT, popup: { macro: "CTRL LEFT", display: "Left" } }, \
# { key: DOWN, popup: { macro: "CTRL DOWN", display: "Bottom" } }, \
# { key: RIGHT, popup: { macro: "CTRL RIGHT", display: "Right" } }, \
# { key: "#", popup: "$" }, \
# { key: ")", popup: "}" } \
# ] \
#]
###############
# Colors/themes
###############
### Force black colors for drawer and dialogs
# use-black-ui = true
###############
# HW keyboard shortcuts
###############
### Disable hardware keyboard shortcuts.
# disable-hardware-keyboard-shortcuts = true
### Open a new terminal with ctrl + t (volume down + t)
# shortcut.create-session = ctrl + t
### Go one session down with (for example) ctrl + 2
# shortcut.next-session = ctrl + 2
### Go one session up with (for example) ctrl + 1
# shortcut.previous-session = ctrl + 1
### Rename a session with (for example) ctrl + n
# shortcut.rename-session = ctrl + n
###############
# Bell key
###############
### Vibrate device (default).
# bell-character = vibrate
### Beep with a sound.
# bell-character = beep
### Ignore bell character.
# bell-character = ignore
###############
# Back key
###############
### Send the Escape key.
# back-key=escape
### Hide keyboard or leave app (default).
# back-key=back
###############
# Keyboard issue workarounds
###############
### Letters might not appear until enter is pressed on Samsung devices
# enforce-char-based-input = true
### ctrl+space (for marking text in emacs) does not work on some devices
# ctrl-space-workaround = true
###############
# Terminal Margin adjustments
###############
### Horizontal (left/right) Margin
# terminal-margin-horizontal=3
### Vertical (top/bottom) Margin
# terminal-margin-vertical=0