69 Commits

Author SHA1 Message Date
7cfffc329b README 2025-12-11 12:01:01 -05:00
b654a7fdd0 Update Cursor 2025-12-09 10:02:15 -05:00
af7c255edd Transfer VSCode to Cursor 2025-12-07 16:35:35 -05:00
aeee782f58 Bearded dark theme 2025-12-07 16:21:53 -05:00
7c55fe9d22 VSCode init 2025-12-07 16:10:00 -05:00
13ab26afd9 Remove fix silent mouse 2025-11-04 09:18:15 -05:00
c970150de4 Update 2025-04-07 10:49:29 -04:00
7042aeb0f0 i3 secondary bar for GTX 1070 2025-03-30 18:57:57 -04:00
f6a0c39228 Update 2025-03-29 19:52:15 -04:00
9c97e0e0ca Fix CPU temp 2025-03-28 17:56:19 -04:00
59a8d1f5ab Fix showing mute 2025-03-28 17:46:40 -04:00
e42cde1f54 Display volume num 2025-03-28 17:45:14 -04:00
2dc7427936 Doesn't show volume but scrolling works 2025-03-28 17:42:21 -04:00
ccd6122336 Fix gensub issue in fish 2025-03-28 10:53:21 -04:00
f1ad855f23 Hevin screensaver on one monitor 2025-03-25 17:54:29 -04:00
82baa8a23d Ubuntu start script, HERO ticker, Chrome default browser 2025-02-22 20:36:23 -05:00
05231501e7 Python currency converter 2025-02-03 17:44:47 -05:00
d04af8e39f Setup task, AWS aliases 2025-01-30 10:57:57 -05:00
941bee835a Ubuntu pkgs 2025-01-25 03:34:47 -05:00
720e104f55 Dexscreener MC 2025-01-18 12:39:25 -05:00
aef13d7f26 AVAX first 3 digits 2025-01-18 11:14:21 -05:00
85fb63208d Git signing key, volume i3block spacing 2025-01-18 11:07:00 -05:00
6f8c0b08d7 Tickers color scheme 2025-01-18 10:55:50 -05:00
5c098bd26d Basic i3 setup 2025-01-17 21:54:48 -05:00
d405f264db Pre-Ubuntu install 2025-01-17 11:43:32 -05:00
f9c5f9afe0 i3 Metamask shortcut 2025-01-14 14:48:37 -05:00
072980eaf1 Slow down scroll 2024-11-02 07:51:24 -04:00
adf0cb89b9 Fix Vim commenting 2024-10-30 10:42:09 -04:00
d56c047782 Vim commenting 2024-09-11 07:14:22 -04:00
71b0aa5ada Vim surround (brackets) 2024-09-03 14:05:12 -04:00
11681ecc9f Merge with single-screen branch 2024-08-27 10:45:29 -04:00
71017721bc Rm school aliases 2024-07-27 19:50:57 -04:00
a4946bf75d Vim set colorscheme, notepad 4th workspace icon 2024-07-10 22:20:47 -04:00
273d23abc0 Dexscreener script, arch-2 packages 2024-06-12 10:41:17 -04:00
c41e14a302 Terraform aliases 2024-05-29 13:54:32 -04:00
b165a802c9 kubectl/docker aliases 2024-05-23 18:18:46 -04:00
1c47a7311a sxiv black BG 2024-04-23 11:39:54 -04:00
5843fc30b6 Fix color scheme terminal 2024-04-18 11:59:29 -04:00
d9a49a4bb4 Fix fullscreen notis from Firefox (i3) 2024-03-20 15:08:00 -04:00
b40f818e3c Dunst font 2024-03-20 08:02:17 -04:00
e97aaadbe1 New pkgs 2024-02-28 13:46:03 -05:00
f098cbc708 Update 2024-02-28 09:34:53 -05:00
40fbbeeb8d Aliases 2024-02-27 11:44:40 -05:00
cda5ebcfc1 Update NZXT pkgs 2024-02-16 10:17:44 -05:00
de57298d0f Update 2024-01-31 12:15:36 -05:00
bd1366faf6 mpv rotate 2023-10-15 18:28:55 -04:00
35912c16b6 Kitty image preview 2023-10-06 11:06:14 -04:00
5aaf163d4d Fix i3 bar after updating Arch 2023-10-05 16:58:06 -04:00
1024cb18b3 Update Arch pkgs 2023-10-05 14:55:26 -04:00
fe632730ef SDV 2023-10-01 16:31:27 -04:00
436a7cbb87 PV aliases, fix Kraken script for BTC 2023-07-11 04:58:33 -04:00
1afe9d05a4 Kraken ticker i3block 2023-03-30 08:33:47 -04:00
e2a9e753ff Fix battery i3block 2022-12-15 13:25:38 -05:00
be2e73fda6 458 aliases 2022-11-02 12:27:06 -04:00
7b8685477b Merge remote-tracking branch 'refs/remotes/origin/master' 2022-11-01 16:13:24 -04:00
43e367d834 Update chezmoi data on laptop 2022-11-01 15:46:13 -04:00
e851514a31 Rarity sniper/300/301 aliases
scp videos from phone.
2022-05-12 11:25:16 -04:00
584ecabff4 fzf-cd 2021-08-07 16:19:53 -04:00
5b936dce8e IBM Cloud cluster 2021-07-22 16:06:55 -04:00
6f0dd1cdff Visually reset Markdown checkboxes, kube config
minikube completion.
2021-06-19 16:38:43 -04:00
00c4a42bf0 chezmoi hostname update, compton -> picom 2021-05-14 13:42:22 -04:00
505f63a32d Shorten ticker values in i3block 2021-04-26 12:43:16 -04:00
5c6f1e9a1c Ticker i3block, reminder fish script
kubectl completion.
2021-04-17 00:05:07 -04:00
23d1b1ffbd Update 2020-10-27 16:48:40 -04:00
b622ec0964 Vim Golang/Firefox profile bindings 2020-09-21 13:59:54 -04:00
ef68d2e9c7 Default XDG MIME apps 2020-08-08 00:09:37 -04:00
b5f5e62afa Red Hat config, Kogito completions 2020-08-05 23:32:40 -04:00
9e559088a2 dmenu Twitch emote script, copy full path function 2020-07-01 01:14:09 -04:00
f488c79b46 Initial Red Hat config 2020-06-18 13:48:16 -04:00
144 changed files with 12624 additions and 1042 deletions

View File

@@ -13,6 +13,6 @@ txt/
.xinitrc
.Xresources
{{ end }}
{{ if not (eq .chezmoi.fullHostname "x1-carbon") }}
{{ if not (eq .chezmoi.hostname "x1-carbon") }}
.Xmodmap-laptop
{{ end }}

369
README.md
View File

@@ -1,33 +1,348 @@
<!--- Intro {{{ -->
# Kevin's Linux Setup
# KM's Linux Desktop Config (chezmoi dotfiles)
![desktop-screenshot](https://i.imgur.com/Fpsr8Fc.png)
*Screenshot from my dual-monitor setup.*
This is my **chezmoi-managed toolkit** for keeping a
consistent i3/terminal-focused Linux desktop across
machines: i3 + i3blocks + i3bar, fish/Zsh/Bash shells,
kitty/ST terminals, tmux, Neovim/Vim, Ranger, mpv, Zathura,
dunst, picom, taskwarrior/taskopen, calcurse, Neomutt/msmtp,
mgba, and a grab bag of helper scripts for wallpapers,
audio, finance tickers, backups, etc. Other coding projects
such as `hands-free-tools`, `psa` Arsenal, or `kogito` live
in their own repos — this repo is solely about the desktop
environment, shell tooling, and workflows that drive it.
This repository contains the dotfiles to increase my workflow efficiency. They
are also for my Linux
[rice](https://www.reddit.com/r/unixporn/comments/3iy3wd/stupid_question_what_is_ricing/cukxwog/).
<!--- }}} Intro -->
## Table of Contents
- [What This Repo Is](#what-this-repo-is)
- [Installation & Sync](#installation--sync)
- [Shells & Aliases](#shells--aliases)
- [Terminal & Editor Stack](#terminal--editor-stack)
- [Window Manager & Display](#window-manager--display)
- [Productivity Apps &
Services](#productivity-apps--services)
- [Scripts, Packages & Assets](#scripts-packages--assets)
- [Host Overrides & Secrets](#host-overrides--secrets)
- [Customization Tips](#customization-tips)
<!--- Main Programs {{{ -->
## Main Programs
* **OS**: [Arch Linux](https://www.archlinux.org/) ([packages](txt/nzxt-pkgs.txt))
```
> systemd-analyze
Startup finished in 2.341s (kernel) + 1.085s (userspace) = 3.426s
graphical.target reached after 1.085s in userspace
```
* **Terminal**: [rxvt-unicode-pixbuf](https://www.wikiwand.com/en/Rxvt)
* **Shell**: [Fish](https://fishshell.com/)
* **Window Manager**: [i3-gaps](https://github.com/Airblader/i3)
* **Editor**: [Neovim](https://github.com/neovim/neovim) ([plugins](dotfiles/.vimrc#L51))
* **File Manager**: [ranger](https://ranger.github.io/)
<!--- }}} Basic Info -->
## What This Repo Is
- A **chezmoi repo** with `dot_*` files targeting `$HOME`
(e.g. `dot_vimrc.tmpl` &rarr; `~/.vimrc`, `dot_tmux.conf`,
`dot_gitconfig.tmpl`, etc.) and `dot_config/**` mirroring
`~/.config`. Every `.tmpl` file runs through `chezmoi`
templating so `{{ .chezmoi.hostname }}` / `.linux_os` /
`.chezmoi.username` can tailor behavior.
- A place for **desktop-focused tooling**: i3/i3blocks, fish
+ shared aliases, kitty/ST terminals, tmux, Neovim/Vim,
mpv, Ranger, mpv, Zathura, dunst/picom/prefers,
taskwarrior/taskopen, and shell helpers such as
`executable_passmenu`, `dmenu-history`, `change-sink`,
`bg-chooser`, etc.
- A repository for configuration logic only — the bulk of
application/Project code lives in other repos. You can
treat this as the “rice” layer for Arch/Ubuntu machines,
not as a general diary of every coding sidequest.
<!--- Setup {{{ -->
## Installation & Sync
1. Install `chezmoi`, clone this repo, and run `chezmoi init
--apply <repo>` (or `chezmoi cd .` / `chezmoi apply`). The
repo assumes you have a basic Linux desktop already (i3,
fish, etc.).
2. Run `chezmoi apply` whenever you change templates. When
files touch the ones under `aliases/` (see below) run
`~/scripts/sync-shortcuts` (or let `fish` invoke it on
login) to regenerate `~/aliases/.key_aliases`,
`~/.config/fish/key_abbr.fish`, and
`~/.config/ranger/key_mappings.conf`.
3. After changing tmux config, reload (`tmux source
~/.tmux.conf`) and run the TPM installer
(`~/.tmux/plugins/tpm/bin/install_plugins`).
4. When you edit `dot_config/mgba/*.ini`, run
`dot_config/mgba/update-mgba-config.fish` (or your shell) to
keep the `~/.config/mgba/*.ini` copies and repo templates in
sync.
5. Use `chezmoi data set <key> <value>` (or edit
`~/.config/chezmoi/chezmoi.toml`) to tweak host data such as
`gui`, `ext_kb`, or `linux_os` — the template in
`dot_config/chezmoi/chezmoi-template.toml.tmpl` seeds those
values for conditional logic in templates.
## Setup
I use [chezmoi](https://github.com/twpayne/chezmoi) to manage varying
configs for different machines with a single branch.
## Shells & Aliases
- `dot_bashrc` and `dot_zshrc` both source
`~/aliases/.key_aliases` and share settings like `xset r
rate`, `xmodmap` tweaks, `wal` sequences,
`BASH_IT`/`oh-my-zsh` hooks, and `pywal` colors so all
interactive shells match.
- `aliases/key_aliases.tmpl`, `aliases/key_dirs.tmpl`, and
`aliases/key_files.tmpl` are the canonical
alias/directory/file lists. `~/scripts/sync-shortcuts`
consumes those to build shell-friendly alias files and
ranger mappings; editing a key file there and rerunning
that script keeps the shells/ranger in sync.
- Fish is the primary interactive shell
(`dot_config/fish/config.fish.tmpl`). It sets `spacefish`
prompt order, `PNPM`/`GraalVM`/`Java` paths,
`PASSWORD_STORE_CLIP_TIME`, `task` abbrs, and
automatically runs `~/scripts/sync-shortcuts` plus
`source`-ing every file in `dot_config/fish/functions`.
That directory contains dozens of helpers: git helpers
(`git/g*`), taskwarrior actions (`task/*.fish`), `watson`,
`timetrace`, `tmux-attach`, `pass`/`clipboard` helpers,
miniscripts for AWS/rsync, countdowns, `currency`
converters, and more.
- `dot_config/fish/completions` adds completions for `buku`,
`kogito`, `kubectl`, `minikube`, `pass`, `timetrace`, and
`watson` so these workflows stay tab-complete.
- Fish also watches for logins without a `$DISPLAY` to
auto-run `startx`, binds `GPG_TTY`, sources
`~/.cache/wal/colors.sh`, and respects host-specific
values such as `JENKINS_TOKEN` (for NZXT) or `ext_kb`.
<!--- }}} Setup -->
## Terminal & Editor Stack
- `dot_config/kitty/kitty.conf` and
`dot_config/st/config.def.h.tmpl` share `wal` colors
(`~/.cache/wal/colors-kitty.conf` / `colors-wal-st.h`) and
Nerd Font setups; kitty enables clipboard control and
opacity, st pulls fonts/opacity from the current theme.
- Terminal multiplexer: `dot_tmux.conf` rebinds prefix to
`C-Space`, enables mouse, uses a Powerline-style status
bar, and installs TPM plugins (`tmux-plugins/tpm`,
`tmux-sensible`, `vim-tmux-navigator`). Mouse/Vi copy mode
maps push selection to `xclip` via `copy-pipe-and-cancel`.
- `dot_vimrc.tmpl` is the canonical Vim/Neovim config. It
enables `autoindent`, autocommands for
markdown/Go/Jenkinsfiles, loads `vim-plug`, and wires up
plugins (`YouCompleteMe`, `UltiSnips`, `vimtex`,
`vim-fugitive`, `vim-auto-save`, `vim-instant-markdown`,
`vim-tmux-navigator`, `vim-go`, `vim-react`, `vim-latex`,
`vim-mark`, `vim-surround`, `rainbow`, `AutoPairs`,
`vim-indexed-search`, etc.). Leader mappings cover
yanking, folding, Git, formatting, NERDTree, and quick
plugin commands. `dot_config/nvim/init.vim` just sources
`~/.vimrc` plus Python host settings.
- `dot_config/mpv/mpv.conf` & `input.conf` configure
subtitles, mouse wheel volume, speed keys, seek commands,
zoom, and mark shortcuts for mpv so it works cleanly with
keyboard/VR-style controls.
## Window Manager & Display
- `dot_xinitrc.tmpl` loads `~/.Xresources`, applies
host-specific `xmodmap` (`dot_Xmodmap*`), sets `redshift`,
`xset r rate` (pumped from fish), starts
`notification-daemon`, `picom`, `imwheel`, `numlockx`, and
pains `wal -i $(scripts/shuffler ...)` backgrounds.
- `dot_Xresources.tmpl` keeps host DPI/font choices (high
DPI for `x1-carbon`, default for desktops), clickable
URLs, transparency, and `sxiv` colors; i3blocks and kitty
re-read it via `xrdb` + `wal`.
- There are multiple `dot_Xmodmap*` variants (`.`,
`-laptop`, `-laptop-old`, `-old`, `-ubuntu`, `-vm`) so
`xmodmap` can swap Caps/Esc/backspace depending on host;
`dot_xinitrc.tmpl` toggles between them via the `ext_kb`
variable and the helper
`scripts/executable_xmodmap-custom.tmpl`.
- `dot_config/i3/config.tmpl` wires up: Mod1/Mod4 split,
`kitty`/`urxvt` terminals, i3 startup apps (notification
daemon, picom, imwheel, `wal`, `xbacklight`), screenshot
bindings, workspace assignments (1/2/3 etc),
Slack/Signal/Chromium/Steam assignments, workspace
navigation, `passmenu`, `dmenu-history`, `ticker/fx`
shortcuts, `redshift` hotkeys, `wal` shuffle hotkeys,
`change-sink`, and `mod`-based layout resizing. It also
defines stacked/tabbed/floating rules, gap toggles, and
bar outputs for both main and secondary monitors. The
status command is `i3blocks -vvv -c
~/.config/i3blocks/i3blocks.conf` (primary) and
`i3blocks-secondary.conf` (secondary) with i3blocks piping
through `~/scripts/shuffler`/`pywal` colors.
- `dot_config/i3blocks/i3blocks.conf.tmpl` defines blocks
for `kraken` (ETH), Spotify controls, volume, and
conditional blocks for laptop (`battery`, `wifi`,
`backlight`), plus placeholders for
`dexscreener`/`ticker`/`memory`/`temperature`. Secondary/
display configs reuse the same script directory but focus
on `calendar`, `volume`, and additional
`temperature`/`name`/`cpu/memory` blocks. Every block
relies on scripts under `dot_config/i3blocks/scripts/`
(e.g. `executable_calendar`, `executable_volume`,
`executable_wifi`, `executable_kraken`,
`executable_dexscreener*`, `executable_spotify`,
`executable_name`, `executable_temperature`,
`executable_ticker`, etc.) which source
`~/.cache/wal/colors.sh` to stay on-theme.
- Display/notification stack also includes
`dot_config/picom/picom.conf` (shadows/fade/opacity rules)
and `dot_config/dunst/dunstrc` (compact, mouse-following
notifications, keyboard shortcuts, urgency colors) so
popups match the rest of the polished rice.
- `dot_config/neofetch/config.conf` keeps the `neofetch`
info streamlined to kernel, terminal,font, shell,
packages, WM, CPU/GPU, memory, disks, and resolution, with
ASCII color blocks and shorthanded kernel/distro strings.
## Productivity Apps & Services
- `dot_taskrc` configures `taskwarrior` (data location
`~/.task`, `taskd` server credentials, urgency
coefficients per project/tag, and default context
`sniper`). `dot_taskopenrc` tells `taskopen` to use
`nvim`, the `task` binary, and custom note / annotation
handling (`notes.regex = "Notes"`).
- `dot_qalcrc` forces `qalculate-gtk` to use decimal commas
for output. `dot_inputrc` turns readline `vi` mode on, and
`dot_imwheelrc` remaps vertical scroll for `imwheel`.
- Ranger customization lives under `dot_config/ranger/`:
`rc.conf.tmpl` tweaks view mode, preview pipeline (custom
`scope.sh`), bookmarks, colors, and dozens of keybindings
(vim-like navigation, copy/paste/paste symlink macros,
`fzf` integrations, lightning bookmarks, backgrounds via
`wal`, `dragon` drop, etc.). `ranger/commands.py` supplies
`fzf_select`, `fzf_locate`, `compress`, `extracthere`, and
other helper commands. Plugins include devicons, preview
scripts, and shared `key_mappings.conf` (referenced at the
bottom of `rc.conf`).
- Email is handled by `dot_config/neomutt/neomuttrc`
pointing at `~/mail/firemail`, calling `msmtp`, syncing
(`mbsync`), and a custom `<F5>` macro.
`dot_config/msmtp/config` defines a `firemail` account —
**replace the password with a secret manager or keep this
file private** (it currently contains a placeholder
password).
- `private_dot_calcurse/` stores Calcurse CalDAV
configs/credentials and `private_dot_gnupg/` holds GPG
configs/keys; treat those as `chezmoi` private files (they
live in `private_dot_*` in the repo and are decrypted on
each machine). Similarly, `dot_ssh/authorized_keys-all`
and `known_hosts-all` aggregate SSH entries for quick
deployment.
- `dot_config/zathura/zathurarc` forces dark mode, custom
colors, and clipboard syncing.
`dot_config/mgba/*-tmpl.ini` keeps emulator settings; run
`dot_config/mgba/update-mgba-config.fish` after editing
your local `~/.config/mgba/*.ini` so the template files
stay current.
- `dot_minikube/config/config.json` fixes the driver to
Docker (`"driver": "docker"`).
## Scripts, Packages & Assets
- The `scripts/` directory hosts dozens of `executable_*`
helpers that i3, fish, and launcher aliases depend on.
Highlights:
- `executable_sync-shortcuts` reads `aliases/key_*` and
rewrites `~/aliases/.key_aliases`,
`~/.config/fish/key_abbr.fish`, and rangers
`key_mappings.conf`, keeping shells/ranger consistent.
- Wallpaper helpers: `executable_shuffler` rolls a
directory of backgrounds, `executable_bg-chooser` picks
"bright"/"dim" sets through `dmenu`, and
`executable_dual-monitor-slideshow` uses
`feh`/ImageMagick to fill a single monitor while
temporarily disabling others.
- Audio/focus helpers: `executable_change-sink` reroutes
Pulseaudio sinks, `executable_ubuntu-start` is an
alternative startup script that replays
imwheel/picom/wal, and `executable_tex-clean` deletes
LaTeX build artefacts based on
`txt/tex-build-files.txt`.
- Productivity utilities: `executable_passmenu` wraps
`pass` with `dmenu`, `executable_dmenu-history` keeps
colorized dmenu launch history, `executable_vim-man`
pops man pages inside Neovim, `executable_currency` hits
`frankfurter.app`, `executable_glhf-metadata` queries an
NFT API, and
`executable_ticker`/`executable_dexscreener*`/`executable_kraken`
feed price data to the i3blocks bar.
- Misc scripts include `executable_backup-pc` (rsync/tar
backups using exclude lists under `txt/`),
`executable_install-arch-pkgs.sh` (installs from
`txt/pacman-pkgs/*.txt`), `executable_spotify-clean`
(VACUUM Spotify DB), and
`executable_spotify-now`/`dot_config/i3blocks/scripts/executable_spotify`
for play/pause+display via MPRIS.
- `scripts/colors/` contains playful ASCII color art used
for celebrations or just curiosity.
- `txt/` contains curated data:
- `txt/nzxt-pkgs.txt`, `txt/nzxt-aur.txt`,
`txt/nzxt-all.txt`, `txt/nzxt-new.txt`,
`txt/x1-carbon-pkgs.txt`, `txt/x1-carbon-aur.txt`,
`txt/arch-2-pkgs.txt`, `txt/arch-2-aur.txt`, and similar
lists for Ubuntu/Termux packages.
- `txt/exclude-dirs-backup*.txt` provide directory
exclusions for backups.
- `txt/tex-build-files.txt` enumerates LaTeX build
extensions for `executable_tex-clean`.
- `txt/todo.md` and `txt/terminal-art.txt` capture
personal notes.
- `txt/usbs.md` tracks mounted USBs.
## Host Overrides & Secrets
- `dot_config/chezmoi/chezmoi-template.toml.tmpl` flags
`gui`, `ext_kb`, and `linux_os` so templates can read
host-specific values (e.g., `ext_kb` decides whether
desktop laptops load `.Xmodmap` or `.Xmodmap-laptop`). Use
`chezmoi data set` (or edit
`~/.config/chezmoi/chezmoi.toml`) to change these values
per host.
- `dot_Xresources.tmpl` and `dot_Xmodmap*` swap DPI, fonts,
and key remaps depending on the machine (`x1-carbon` vs
`nzxt` vs `vm`). `i3` bindings invoke `xmodmap ~/.Xmodmap`
or the laptop variant depending on those template
variables.
- `private_dot_gnupg/` and `private_dot_calcurse/` are
`chezmoi` private directories — they contain real
keys/certs and are not committed in plaintext. Keep them
encrypted and use `chezmoi add --private` when tracking
new secrets.
- `dot_config/msmtp/config` currently stores a password. In
production, replace it with a `pass`-managed credential or
environment variable, and never push secrets to a public
repo.
- `dot_taskrc` embeds `taskd` credentials (host
`taskd.khkm.gq`), so treat `~/.taskrc` as private if you
edit it, and sync it via `chezmoi` private mode if needed.
- `dot_ssh/authorized_keys-all` and `known_hosts-all`
collect the SSH state that gets populated on every machine
you `chezmoi apply` to.
## Customization Tips
- **Adding aliases/dirs/files**: edit the `aliases/key_*`
templates, then run `~/scripts/sync-shortcuts` (or log in
through fish and let the config run it) to regenerate
shell aliases, fish abbrs, and ranger maps.
- **Changing colors/backgrounds**: the i3 config,
`dot_xinitrc`, and
`scripts/executable_bg-chooser`/`shuffler` call `wal -i`
on directories under `~/Pictures/Backgrounds`. Keep the
structure and `feh` call in
`scripts/executable_dual-monitor-slideshow` in sync when
you add new folders.
- **Updating mgba**: edit your local
`~/.config/mgba/config.ini`/`qt.ini`, then run
`dot_config/mgba/update-mgba-config.fish` to copy them
back into the repo templates before committing.
- **Updating i3blocks**: the configs reference scripts under
`dot_config/i3blocks/scripts/`. Editing or adding a script
should maintain the `command` naming convention and the
`color`/`pywal` sourcing shown in those scripts.
- **Neovim tweaks**: extend `dot_vimrc.tmpl` with new `Plug`
entries; after editing, run `nvim +PlugInstall +qall` and
keep the plugin list synchronized with `init.vim` sourcing
the same file.
- **Tmux tweaks**: change `dot_tmux.conf`, then reload
(`tmux source-file`) and reinstall packages via
`~/.tmux/plugins/tpm/bin/install_plugins` if you add TPM
plugins.
- **Taskwarrior contexts**: `dot_taskrc` defines contexts
(`sniper`, `pey`, `mny`, etc.) and urgency coefficients.
Edit them if you rename project tags, then run `task
sync`.
- **Backup scripts**: `scripts/executable_backup-pc` uses
`txt/exclude-dirs-backup*.txt`, so update those lists
whenever you add new directories to exclude from
`rsync`/`tar` backups.
- **Package installation**:
`scripts/executable_install-arch-pkgs.sh` reads
`txt/pacman-pkgs/*.txt`. Keep that tree up to date before
running the script.
Feel free to browse the scripts, `dot_config/*`, and `txt/*`
files when you need to understand how a feature works — they
are the single source of truth for this desktops
automation.

File diff suppressed because it is too large Load Diff

View File

@@ -1,30 +1,44 @@
# vim: fdm=marker ft=sh.go-template syntax=sh
# vim: fdm=marker ft=sh.go-template syntax=sh
# sys [[[ #
bg ~/Pictures/Backgrounds
cf ~/linux-config/dot_config
cfd ~/.config
cff ~/.config/fish
cfg ~/.config
cfgf ~/.config/fish
ch ~/Documents/chat
dc ~/Documents/chat/discord
da /mnt/ipad/DCIM/106APPLE
dl ~/Downloads
# dw ~/dwm
D ~/Documents
k ~/
# k ~/
lc ~/linux-config
lf /mnt/linux-files
Lfp /mnt/linux-files/Pictures
Lfv /mnt/linux-files/Videos
me /run/media/kevin
lf2 /mnt/linux-files-2
lfp /mnt/linux-files/Pictures
lfp2 /mnt/linux-files-2/Pictures
lfv /mnt/linux-files/Videos
lfv2 /mnt/linux-files-2/Videos
lfv2s /mnt/linux-files-2/Videos/shows
lfy /mnt/linux-files/Videos/yt
a2 /mnt/linux-files-2/arch-2/full/home/kevin
lf3 /mnt/linux-files-3
medi /media/kevin
o /
pd ~/.password-store
pfp /mnt/linux-files-2/arch-2/full/home/kevin/Pictures/profile-pics
pfpp ~/Pictures/profile-pics/profiles-by-moto
P ~/Pictures
ssus ~/Pictures/screenshots/desktop/unsorted
std ~/st
# tm /tmp
tm ~/tmp
V ~/Videos
{{ if and (eq .chezmoi.username "root") (eq .linux_os "debian") }}
ng /etc/nginx/sites-available
sv /etc/systemd/system
# sv /etc/systemd/system
{{ end }}
# ]]] sys #
@@ -32,57 +46,81 @@ sv /etc/systemd/system
# cdn [[[ #
ad ~/.task
bm ~/Documents/bookmarks
ccd ~/.calcurse
cms ~/Documents/codm/site
cn ~/coding
# dn ~/Downloads
drk ~/coding/dark-sky
ffx ~/linux-config/dot_config/fish/functions
hbd ~/.habitctl
ib ~/linux-config/dot_config/i3blocks/scripts
ib ~/linux-config/dot_config/i3blocks
mbd ~/coding/minikube
pig ~/coding/pigallery
mbk ~/coding/minikube-kompose
ms ~/coding/mf-site
msr ~/coding/mf-site/static/pdf
pr ~/coding/pull-requests
ra ~/linux-config/dot_config/ranger
rd ~/Documents/red-discord-bot
rda ~/Documents/red-discord-bot/repos/gobcog-kevin/adventure
rdt ~/coding/discord-bots
rdp ~/coding/discord-bots/pinky/cogs/CogManager/cogs/adventure
sr ~/linux-config/scripts
snp ~/.vim/plugged/vim-snippets/UltiSnips
vsnps ~/.vim/plugged/vim-snippets/UltiSnips
sw ~/.local/share/nvim/swap/
tfd ~/coding/terraform
ttd ~/.timetrace
ttdr ~/.timetrace/records
tx ~/linux-config/txt
wd ~/.config/watson
{{ if eq .chezmoi.fullHostname "nzxt" }}
b1 ~/coding/mf-site/themes/base16
2d ~/coding/godot-demos/2d-plat
ada ~/coding/ada-mario
ft ~/coding/face-tracker
# ft ~/coding/face-tracker
#hv ~/Documents/hevin
#hv /mnt/linux-files-2/Pictures/hevin
hv ~/Pictures/hevin
hvs ~/Documents/hevin/shopping
j ~/Documents/journal
lh ~/Documents/listening-history
jt ~/Documents/journal/todo/25
# lh ~/Documents/listening-history
mmd ~/coding/move-mouse-with-head
mh ~/coding/mf-site/layouts
ms ~/coding/mf-site
ml ~/coding/mf-site/content/letter
msl ~/coding/mf-site/content/letter
# mp ~/coding/mf-site/static/pdf
pk ~/Documents/journal/packing-lists
pn ~/coding/red-discord-bot
# rs ~/coding/rarity-surf/backend/rarity_check/project
rsf ~/coding/rarity-surf/frontend
rsc ~/coding/rarity-surf/backend/rarity_check/project/management/commands
# rsm ~/coding/rarity-surf/backend/rarity_check/project/migrations
sl ~/Documents/sleep
sv ~/coding/spotify-lib-vis/src
svg ~/coding/spotify-lib-vis/src/graphs/static/graphs/scripts
swd ~/coding/swex
tb ~/coding/trapbot/src/trapbot
# tb ~/coding/trapbot/src/trapbot
tb ~/coding/twitter-bot
ur ~/coding/uranium-godot
wo ~/Documents/workout-logs
wo ~/Documents/workout-logs/25/4
# gaming [[[ #
te ~/Pictures/twitch-emotes
mt ~/.minetest
mta ~/.minetest/clientmods/custom_aliases
mtc ~/.minetest/games/mineclone2/mods
mtm ~/.minetest/minetest
# mt ~/.minetest
# mta ~/.minetest/clientmods/custom_aliases
# mtc ~/.minetest/games/mineclone2/mods
# mtm ~/.minetest/minetest
# pk ~/Downloads/gba/mgba/pokemon/emerald/1
# ]]] gaming #
{{ end }}
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
{{ if eq .chezmoi.hostname "x1-carbon" }}
adb ~/coding/ada-mario/build
adm ~/coding/ada-mario/media
adp ~/coding/ada-mario-presentation
@@ -90,31 +128,200 @@ ads ~/coding/ada-mario/scripts
adP ~/Pictures/ada-mario
{{ end }}
# ]]] cdn #
# gaming [[[ #
cm ~/Documents/codm
lfo /mnt/linux-files/Videos/obs
lfo2 /mnt/linux-files-2/Videos/obs
pxv /mnt/linux-files/Videos/pixel
tk ~/Documents/totk
tkp ~/Pictures/totk
# codm [[[ #
# cm ~/Documents/codm
cs ~/Documents/codm/site
csi ~/Documents/codm/site/static/images
Css ~/Pictures/screenshots/mobile/codm
fn ~/Documents/fortnite
# ]]] codm #
# fortnite [[[ #
#fn ~/Documents/fortnite
fnc /mnt/linux-files/Videos/yt/fortnite/clips/4
fnm ~/Documents/fortnite/pics/maps
fni /mnt/ipad/DCIM/100APPLE
#fnm ~/Documents/fortnite/pics/maps
fnn ~/Documents/fortnite/notes
fns ~/Documents/fortnite/stats/api
fnp ~/Documents/fortnite/pics
fns ~/Videos/fortnite/stats
# fnsp ~/Documents/fortnite/stats/pics
fnv /mnt/linux-files/Videos/personal-fortnite-games/review
tcd /mnt/linux-files/Videos/yt/fortnite/clips/twitch-clip-downloader
fnv2 /mnt/linux-files-2/Videos/ipad/fortnite/name
#fn ~/Videos/fortnite
fn /mnt/linux-files-3/fortnite
tcd Videos/yt/fortnite/clips/twitch-clip-downloader
# ]]] fortnite #
pgv /mnt/linux-files/Videos/pokemon-go
tr ~/.local/share/Terraria
dc ~/Documents/chat/discord
twt ~/Documents/twitter
sdv ~/Documents/stardew-valley-aha
dap /mnt/linux-files-2/Pictures/ipad
dau /mnt/linux-files-2/Videos/ipad/unsorted
sdvm ~/.local/share/Steam/steamapps/common/Stardew\ Valley/Mods/
sdvss ~/.local/share/StardewValley/Screenshots/
sdvsv ~/.config/StardewValley/Saves/Hevintales_355084144/
sdvsvg ~/Documents/stardew-valley-sdv-saves/hevintales
snp ~/Documents/marvel-snap
snpv /mnt/linux-files-2/Videos/ipad/marvel-snap
dal /mnt/linux-files-3/ipad/106APPLE
# ]]] gaming #
# pey [[[ #
atx ~/Documents/ataraxy-venture
em ~/Documents/emails
li ~/Documents/linkedin
lim ~/Documents/linkedin/msgs
rh ~/Documents/red-hat
rhc ~/Documents/red-hat/chat
rhe ~/Documents/red-hat/emails
rhl ~/Documents/red-hat/learned
sa ~/coding/rhcsa-notes
wcl ~/.weechat/logs
ep ~/Documents/expenses
# kogito [[[ #
kg ~/coding/kogito
kap ~/coding/kogito/kogito-apps
kdo ~/coding/kogito/kie-docs
kdoa ~/coding/kogito/kie-docs/doc-content/kogito-docs/src/main/asciidoc
kex ~/coding/kogito/kogito-examples
keh ~/coding/kogito/kogito-examples/process-scripts-quarkus/target
kep ~/coding/kogito/kogito-examples/process-postgresql-persistence-quarkus
kfl ~/coding/kogito/kogito-apps
kh ~/coding/kogito/kogito-helm-charts
kho ~/coding/kogito/kogito-helm-chart-old
ki ~/coding/kogito/kogito-images
kj ~/coding/kogito/jenkins-test
kjb ~/coding/kogito/jenkins-test-bot
kjf ~/coding/kogito/jenkins-test/full
kl ~/coding/kogito/shared-libraries
# operator [[[ #
ko ~/go/src/github.com/kiegroup/kogito-operator
kor ~/go/src/github.com/kiegroup/rhpam-kogito-operator
# koc ~/go/src/github.com/kiegroup/kogito-operator/cmd/kogito/command
koc ~/coding/kogito/kogito-operator
kod ~/go/src/github.com/kiegroup/kogito-operator/cmd/kogito/command/deploy
koe ~/go/src/github.com/kiegroup/kogito-operator/examples
kore ~/go/src/github.com/kiegroup/rhpam-kogito-operator/example
kof ~/go/src/github.com/kiegroup/kogito-operator/cmd/kogito/command/flag
# kor ~/go/src/github.com/kiegroup/kogito-operator/pkg/controller/kogitoruntime
kou ~/go/src/github.com/kiegroup/kogito-operator/cmd/kogito/command/util
ko2 ~/coding/kogito/kogito-operator-2
# ]]] operator #
kob ~/coding/kogito-operator-onboarding
kot ~/coding/kogito/optaplanner
kp ~/coding/kogito/kogito-pipelines
kp2 ~/coding/kogito/kogito-pipelines-2
kpr ~/coding/pull-requests/red-hat
kprh ~/coding/pull-requests/red-hat/helm
kr ~/coding/kogito/kogito-runtimes
krj ~/coding/kogito/kogito-runtimes/jenkins-spock-tests
ky ~/coding/kogito/kogito-kmok-yamls
gos ~/go/src
# ]]] kogito #
vb ~/coding/VileBot/vilebot
vbs ~/coding/VileBot/vilebot/src/main/java/com/oldterns/vilebot
# dv ~/coding/devops-sre-knowledge
nxo ~/coding/kogito/nexus-operator
# ]]] pey #
# nft [[[ #
cvt ~/Pictures/profile-pics/conviction
# mb ~/coding/mint-bot
pdg ~/Pictures/profile-pics/pudgy-penguins/test
pfps ~/Pictures/profile-pics/sappy-seals
pfpk ~/Pictures/profile-pics/gm-cafe/keek
pfpr ~/Pictures/profile-pics/reddit-avatars
nft ~/Documents/nft
# ]]] nft #
# sch [[[ #
sc ~/school
lt ~/school/latex-notes
ph ~/school/phl
phe ~/school/phl/w8-10-mind-machines/essay
ltc ~/coding/leetcode
jf ~/school/job-fair
jh ~/school/job-hunt
jhi ~/school/job-hunt/interview-questions
jhig ~/school/job-hunt/interview-questions/grafana
el ~/coding/eliza
an ~/coding/ai-nft-proj/
anb ~/coding/ai-nft-proj/backend
anf ~/coding/ai-nft-proj/frontend
tt ~/coding/try-eliza-twitter-client
me ~/coding/me-sniper/backend
mef ~/coding/me-sniper/frontend
mefn ~/coding/me-sniper/frontend-next-js
med ~/coding/me-sniper/discord-bot
me2 ~/coding/me-sniper/backend-copy
kb ~/coding/kanban-calendar
ac ~/coding/astral-challenge-txt
rbc ~/coding/rbc-aml/src
cibc ~/school/job-hunt/interview-questions/cibc
psa ~/coding/psa-arb
hn ~/coding/hands-free-tools
# ]]] sch #
# personal [[[ #
lw ~/Documents/lawrence
hih /mnt/linux-files-2/Videos/hot-in-herre
bb /mnt/linux-files-2/Pictures/bball
dh ~/Pictures/drake-hoodie
ets /mnt/linux-files-2/Videos/eras-taylor-swift-movie
mj /mnt/linux-files-2/Pictures/midjourney/results
mt /mnt/linux-files-2/Pictures/mutant-tees
sm /mnt/linux-files-2/Videos/sam-smith/named
wg /mnt/linux-files-2/Pictures/weed-grow-23
sdc /run/media/kevin/6339-3234
obs /mnt/linux-files-3/obs
br ~/Documents/fortnite/brainrot
# ]]] personal #

View File

@@ -3,14 +3,16 @@
# sys [[[ #
3 ~/linux-config/dot_config/i3/config.tmpl
3b ~/linux-config/dot_config/i3blocks/i3blocks.conf.tmpl
a ~/linux-config/aliases/key_aliases.tmpl
ak ~/linux-config/dot_ssh/authorized_keys-all
d ~/linux-config/aliases/key_dirs.tmpl
dw ~/dwm/config.def.h
f ~/linux-config/aliases/key_files.tmpl
fh ~/.local/share/fish/fish_history
hc ~/Documents/hevin/cleaning.md
n ~/linux-config/dot_vimrc.tmpl
p ~/linux-config/txt/pacman-pkgs/pacman-pkgs.txt
pkg ~/linux-config/txt/pacman-pkgs/pacman-pkgs.txt
r ~/linux-config/dot_config/ranger/rc.conf.tmpl
sr ~/linux-config/configs/ranger/shortcuts.conf
ss ~/.shortcuts
@@ -31,6 +33,7 @@ ng /etc/nginx/nginx.conf
# cdn [[[ #
ap ~/.task/pending.data
aw ~/Documents/journal/todo/24/aws.md
at ~/.task/to-add.md
bid ~/Documents/journal/todo/blog.md
cc ~/linux-config/private_dot_calcurse/conf
@@ -43,15 +46,17 @@ hh ~/.habitctl/habits
hlg ~/coding/spotify-lib-vis/src/api/management/commands/update-history.log
id ~/Documents/journal/todo/ideas.md
ig ./.gitignore
jn ~/Documents/journal/todo/2.md
jt ~/Documents/journal/todo/todo.md
jt ~/Documents/journal/todo/25/8.md
k ~/linux-config/dot_config/kitty/kitty.conf
lh ~/Documents/listening-history/polarbier.csv
mc ~/coding/mf-site/assets/sass/main.scss
mi ~/coding/mf-site/ideas.md
msr ~/coding/mf-site/content/resume/_index.md
ne ~/linux-config/configs/neofetch/config.conf
re README.md
rda ~/Documents/red-discord-bot/repos/gobcog-kevin/adventure/adventure.py
rdc ~/Documents/red-discord-bot/commands-freq.md
sl ~/Documents/sleep/sleep.md
td todo.md
tg ~/.config/watson/tags_cache
tt txt/todo.md
@@ -60,38 +65,70 @@ tp /tmp/
tw ~/linux-config/dot_taskrc
w ~/.config/watson/state.tmp
wh ~/Documents/journal/todo/work-habit.md
wt ~/.config/watson/state.tmp
# ]]] cdn #
# sch [[[ #
# 309 [[[ #
0c ~/school/309-proj/sass/main.scss
0h ~/school/309-proj/public/js/helpers.js
0i ~/school/309-proj/public/index.html
0m ~/school/309-proj/public/js/main.js
0f ~/school/309-proj/public/js/food.js
0s ~/school/309-proj/server.js
0t ~/school/309-proj/public/js/stores.js
# ]]] 309 #
# 384
8a ~/school/384/a1/searchAgents.py
8s ~/school/384/a1/search.py
4d ~/school/494/design/acanet-voting-design.md
4dme ~/school/494/design/meetings/panos.md
4dmd ~/school/494/design/provotu/modify.md
pvc ~/coding/dao-voting/provotum-v2/contracts/contracts/FiniteField/Ballot.sos
# ]]] sch #
# gaming [[[ #
bn ~/Documents/discord-burners/burners.md
cmr ~/Documents/codm/discord-recruitment.md
cra ~/Documents/red-discord-bot/repos/gobcog-kevin/adventure/data/default/attribs.json
crm ~/Documents/red-discord-bot/repos/gobcog-kevin/adventure/data/default/monsters.json
fn ~/Documents/fortnite/notes/fortnite-notes.md
#fn ~/Documents/fortnite/notes/fortnite-notes.md
fn ~/Documents/fortnite/notes/vods.md
fb ~/Documents/fortnite/notes/building-drills.md
fw ~/Documents/fortnite/notes/warmup.md
fp ~/Documents/fortnite/notes/post.md
fv ~/Documents/fortnite/notes/vods.md
mta ~/.minetest/clientmods/custom_aliases/init.lua
cmr ~/Documents/codm/discord-recruitment.md
nb ~/Documents/chat/discord/pistol.md
pk ~/Downloads/pokecord/pokecord2.md
sdv ~/Documents/stardew-valley-sdv/notes.md
snp ~/Documents/marvel-snap/strats.md
tc /mnt/linux-files/Videos/yt/fortnite/clips/twitch-clip-downloader/clips.txt
tdb ~/Documents/journal/todo/b.md
jop ~/Documents/journal/personal/jop.md
# ]]] gaming #
# pey [[[ #
dv ~/coding/devops-sre-knowledge/devops-sre-learned.md
j Jenkinsfile.
jd Jenkinsfile.deploy
klg ~/coding/kogito/shared-libraries/vars/githubscm.groovy
klm ~/coding/kogito/shared-libraries/vars/maven.groovy
kob ~/coding/kogito-operator-onboarding/README.md
kpr ~/coding/kogito/kogito-pipelines/Jenkinsfile.pr-bdd-tests
krt /home/kevin/coding/kogito/kogito-runtimes/jenkins-spock-tests/src/test/vars/JenkinsfilePromote.groovy
rd ~/Documents/red-hat/dates.md
rm ~/Documents/red-hat/meeting.md
rt ~/Documents/red-hat/todo.md
lip ~/Documents/linkedin/linkedin-profile.md
jhi ~/school/job-hunt/info.md
jhb ~/school/job-hunt/b.md
# ]]] pey #
ej ~/Documents/emojis/emojis.md
nf ~/Documents/twitter/nft-25.md
sg ~/Documents/chat/signal/jay-groups.md
wd ~/Documents/journal/personal/weed.md
wo ~/Documents/workout-logs/7/running.md
str ~/Documents/workout-logs/stretching.md
be ~/Documents/workout-logs/25/4/back-exercises.md
ms ~/Documents/journal/personal/meds-sched.md
mg ~/Documents/journal/personal/meds-gpt.md

View File

@@ -1,7 +1,25 @@
! clear Lock
keycode 9 = Caps_Lock
! keycode 66 = Escape
! keycode 22 = BackSpace
! pointer = 1 2 3 6 7 4 5 10 11 12 8 9
! side thumb button as middle click
! pointer = 1 10 3 6 7 4 5 2 11 12 8 9
! Clear the Caps Lock modifier logic first
clear Lock
keycode 22 = Caps_Lock
keycode 66 = BackSpace
keycode 78 = End
! Map the physical Caps Lock key (66) to Escape
keycode 66 = Escape
pointer = 1 10 3 6 7 4 5 2 11 12 8 9
! Optional: Map physical Escape (9) to Caps Lock if you really want to swap.
! If you comment out the line below, you will have two Escape keys (Safer).
! keycode 9 = Caps_Lock
! Important: If you did swap (uncommented line above), you must add the Lock modifier back
! add Lock = Caps_Lock
! Keep your mouse settings
pointer = 1 2 3 6 7 4 5 10 11 12 8 9

View File

@@ -1,9 +1,7 @@
clear Lock
keycode 115 = BackSpace
keycode 110 = Delete
keycode 22 = Home
keycode 119 = End
keycode 115 = Escape
keycode 9 = End
keycode 22 = BackSpace
pointer = 1 2 3 4 5 6 7 8 9 10 11 12

9
dot_Xmodmap-laptop-old Normal file
View File

@@ -0,0 +1,9 @@
clear Lock
keycode 115 = BackSpace
keycode 110 = Delete
keycode 22 = Home
keycode 119 = End
pointer = 1 2 3 4 5 6 7 8 9 10 11 12

7
dot_Xmodmap-old Normal file
View File

@@ -0,0 +1,7 @@
clear Lock
keycode 22 = Caps_Lock
keycode 66 = BackSpace
keycode 78 = End
pointer = 1 10 3 6 7 4 5 2 11 12 8 9

8
dot_Xmodmap-ubuntu Normal file
View File

@@ -0,0 +1,8 @@
clear Lock
keycode 66 = Caps_Lock
keycode 9 = Escape
pointer = 1 2 3 6 7 4 5 10 11 12 8 9
! side thumb button as middle click
! pointer = 1 10 3 6 7 4 5 2 11 12 8 9

11
dot_Xmodmap-vm Normal file
View File

@@ -0,0 +1,11 @@
clear Lock
! keycode 9 = Caps_Lock
! keycode 66 = Escape
keycode 9 = Escape
keycode 66 = Caps_Lock
keycode 22 = BackSpace
pointer = 1 2 3 6 7 4 5 10 11 12 8 9
! side thumb button as middle click
! pointer = 1 10 3 6 7 4 5 2 11 12 8 9

View File

@@ -1,9 +1,12 @@
/* dpi [[[ */
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
{{ if eq .chezmoi.hostname "x1-carbon" }}
! Xft.dpi: 230
Xft.dpi: 235
! Xft.dpi: 240
Xft.dpi: 230
{{ else }}
! Xft.dpi: 90
! Xft.dpi: 100
Xft.dpi: 135
! Xft.dpi: 170
{{ end }}
@@ -18,21 +21,25 @@ Xft.rgba: rgb
/* font [[[ */
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
! URxvt.font: xft:DejaVuSansMono Nerd Font Mono:size=11
URxvt.font: xft:DejaVuSansMono Nerd Font Mono:size=11.5
! URxvt.font: xft:DejaVuSansMono Nerd Font Mono:size=12
{{ if eq .chezmoi.hostname "x1-carbon" }}
URxvt.font: xft:DejaVuSansMono Nerd Font Mono:size=11
! URxvt.font: xft:DejaVuSansMono Nerd Font Mono:size=10
! URxvt*cursorBlink: 0
URxvt*cursorBlink: False
{{ else }}
! URxvt.font: xft:DejaVuSansMono Nerd Font Mono:size=15
! URxvt.font: xft:DejaVuSansMono Nerd Font Mono:size=14
! URxvt.font: xft:DejaVuSansMono Nerd Font Mono:size=13.5
URxvt.font: xft:DejaVuSansMono Nerd Font Mono:size=12
! URxvt.font: xft:DejaVuSansMono Nerd Font Mono:size=12
! URxvt.font: xft:DejaVuSansMono Nerd Font Mono:size=11
URxvt.font: xft:Hack Nerd Font Mono:size=11
{{ end }}
! URxvt.font: xft:Hack:size=18
/* resize [[[ */
URxvt.resize-font.step: 4
! URxvt.resize-font.step: 4
URxvt.resize-font.step: 2
URxvt.keysym.C-S-Down: resize-font:smaller
URxvt.keysym.C-S-Up: resize-font:bigger
URxvt.keysym.C-S-equal: resize-font:reset
@@ -67,9 +74,14 @@ URxvt.scrollBar: false
/* Clickable URLs [[[ */
URxvt.perl-ext-common: default,matcher,resize-font
URxvt.url-launcher: /usr/bin/xdg-open
URxvt.url-launcher: /usr/bin/firefox
! URxvt.url-launcher: firefox
URxvt.matcher.button: 1
/* ]]] Clickable URLs */
Sxiv.background: #000000
Sxiv.foreground: #00C0FF
Sxiv.font: Hack-9
! vim: fdm=marker ft=xdefaults.go-template

View File

@@ -204,4 +204,4 @@ fi
# Both PC/Laptop }}}
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
source ~/aliases/.key_aliases
source /home/kevin/aliases/.key_aliases

View File

@@ -0,0 +1,39 @@
[
// Map the physical 'CapsLock' key to act as the 'Escape' key
{
"key": "capslock",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u001b" // ASCII code for Escape
},
// Optional: you can restrict this to the terminal or use no 'when' condition
// "when": "terminalFocus"
},
{
"key": "capslock",
"command": "workbench.action.closeMessages",
"when": "notificationVisible"
},
{
"key": "capslock",
"command": "closeCommandCenter",
"when": "commandCenterVisible"
},
// The most important one: to exit common modes/menus/widgets
{
"key": "capslock",
"command": "workbench.action.closeAllGroups",
"when": "editorFocus"
},
{
"key": "capslock",
"command": "workbench.action.closeActiveEditor",
"when": "editorFocus"
},
{
"key": "capslock",
"command": "workbench.action.closePanel",
"when": "panelFocus"
}
// ... you may need to map it to several common "escape" actions
]

View File

@@ -0,0 +1,97 @@
{
// --- General Editor Settings ---
"keyboard.dispatch": "keyCode",
"editor.fontFamily": "'Hack', 'Droid Sans Mono', monospace",
"editor.lineNumbers": "relative",
"editor.tabSize": 4,
"editor.insertSpaces": true,
"editor.wordWrap": "wordWrapColumn",
"editor.wordWrapColumn": 60,
"editor.cursorSurroundingLines": 5,
"editor.mouseWheelZoom": true,
"files.insertFinalNewline": false,
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 1000,
// --- Terminal ---
"terminal.integrated.fontFamily": "'Hack', monospace",
// --- Theme & Colors (Universal Red Mode) ---
// This forces the red theme on top of ANY dark theme you select
"workbench.colorTheme": "Bearded Theme Monokai Black",
"workbench.colorCustomizations": {
// Global Red Overrides
"activityBar.background": "#1f2428",
"activityBar.activeBorder": "#f85149",
"activityBar.foreground": "#f85149",
"activityBar.inactiveForeground": "#6e7681",
"statusBar.background": "#da3633",
"statusBar.foreground": "#ffffff",
"titleBar.activeBackground": "#1f2428",
"tab.activeBorderTop": "#f85149",
"list.activeSelectionForeground": "#f85149",
"textLink.foreground": "#f85149",
"progressBar.background": "#f85149"
},
// --- Vim Settings ---
"vim.leader": " ",
"vim.useSystemClipboard": true,
"vim.hlsearch": true,
"vim.smartcase": true,
"vim.timeout": 350,
"vim.undofile": true,
"vim.handleKeys": {
"<C-a>": false,
"<C-f>": false,
"<C-p>": false
},
// --- Key Bindings ---
"vim.insertModeKeyBindings": [
{
"before": ["<Esc>"],
"after": ["<Esc>"],
"commands": ["workbench.action.files.save"]
}
],
"vim.insertModeKeyBindingsNonRecursive": [
{
"before": ["<Esc>"],
"after": ["<Esc>"],
"commands": ["workbench.action.files.save"]
}
],
"vim.normalModeKeyBindingsNonRecursive": [
{ "before": ["Y"], "after": ["y", "$"], "silent": true },
{ "before": ["Q"], "after": ["@", "@"], "silent": true },
{ "before": [","], "after": ["z", "a"], "silent": true },
{ "before": ["'"], "after": ["`"], "silent": true },
{ "before": ["<leader>", "d"], "after": ["d", "$"] },
{ "before": ["<leader>", "d", "l"], "after": ["0", "d", "$"] },
{ "before": ["<leader>", "k"], "after": ["<C-o>"] },
{ "before": ["<leader>", "j"], "after": ["<C-i>"] },
{ "before": ["<leader>", "s", "p"], "commands": [":split"] },
{ "before": ["<leader>", "v", "s"], "commands": [":vsplit"] },
{ "before": ["<leader>", "v", "v"], "commands": ["workbench.action.openSettingsJson"] },
{ "before": ["<leader>", "y", "o"], "commands": ["workbench.action.toggleZenMode"] }
],
// --- Language Specific Settings ---
"[css]": { "editor.tabSize": 2 },
"[scss]": { "editor.tabSize": 2 },
"[html]": { "editor.tabSize": 2 },
"[javascript]": { "editor.tabSize": 2 },
"[javascriptreact]": { "editor.tabSize": 2 },
"[json]": { "editor.tabSize": 2 },
"[typescript]": { "editor.tabSize": 2 },
"[typescriptreact]": { "editor.tabSize": 2 },
"[yaml]": { "editor.tabSize": 2 },
"[go]": { "editor.insertSpaces": false, "editor.tabSize": 4 },
"[markdown]": { "editor.wordWrap": "wordWrapColumn", "editor.wordWrapColumn": 55 },
"[groovy]": { "editor.wordWrap": "off" },
"[jenkinsfile]": { "editor.wordWrap": "off" }
}

View File

@@ -0,0 +1,39 @@
[
// Map the physical 'CapsLock' key to act as the 'Escape' key
{
"key": "capslock",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u001b" // ASCII code for Escape
},
// Optional: you can restrict this to the terminal or use no 'when' condition
// "when": "terminalFocus"
},
{
"key": "capslock",
"command": "workbench.action.closeMessages",
"when": "notificationVisible"
},
{
"key": "capslock",
"command": "closeCommandCenter",
"when": "commandCenterVisible"
},
// The most important one: to exit common modes/menus/widgets
{
"key": "capslock",
"command": "workbench.action.closeAllGroups",
"when": "editorFocus"
},
{
"key": "capslock",
"command": "workbench.action.closeActiveEditor",
"when": "editorFocus"
},
{
"key": "capslock",
"command": "workbench.action.closePanel",
"when": "panelFocus"
}
// ... you may need to map it to several common "escape" actions
]

View File

@@ -0,0 +1,232 @@
// Cursor model tiers I like:
// - Low: gpt-5.1-codex-mini-low
// - High: gpt-5.1-codex-mini-high
{
"keyboard.dispatch": "keyCode",
"editor.fontFamily": "'Hack', 'Droid Sans Mono', monospace",
"editor.lineNumbers": "relative",
"editor.tabSize": 4,
"editor.insertSpaces": true,
"editor.wordWrap": "wordWrapColumn",
"editor.wordWrapColumn": 60,
"editor.cursorSurroundingLines": 5,
"editor.mouseWheelZoom": true,
"files.insertFinalNewline": false,
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 1000,
"terminal.integrated.fontFamily": "'Hack', monospace",
"workbench.colorTheme": "Bearded Theme Monokai Black",
"workbench.colorCustomizations": {
"activityBar.background": "#1f2428",
"activityBar.activeBorder": "#f85149",
"activityBar.foreground": "#f85149",
"activityBar.inactiveForeground": "#6e7681",
"statusBar.background": "#da3633",
"statusBar.foreground": "#ffffff",
"titleBar.activeBackground": "#1f2428",
"tab.activeBorderTop": "#f85149",
"list.activeSelectionForeground": "#f85149",
"textLink.foreground": "#f85149",
"progressBar.background": "#f85149"
},
"vim.leader": " ",
"vim.useSystemClipboard": true,
"vim.hlsearch": true,
"vim.smartcase": true,
"vim.timeout": 350,
"vim.undofile": true,
"vim.handleKeys": {
"<C-a>": false,
"<C-f>": false,
"<C-p>": false
},
"vim.insertModeKeyBindings": [
{
"before": [
"<Esc>"
],
"after": [
"<Esc>"
],
"commands": [
"workbench.action.files.save"
]
}
],
"vim.insertModeKeyBindingsNonRecursive": [
{
"before": [
"<Esc>"
],
"after": [
"<Esc>"
],
"commands": [
"workbench.action.files.save"
]
}
],
"vim.normalModeKeyBindingsNonRecursive": [
{
"before": [
"Y"
],
"after": [
"y",
"$"
],
"silent": true
},
{
"before": [
"Q"
],
"after": [
"@",
"@"
],
"silent": true
},
{
"before": [
","
],
"after": [
"z",
"a"
],
"silent": true
},
{
"before": [
"'"
],
"after": [
"`"
],
"silent": true
},
{
"before": [
"<leader>",
"d"
],
"after": [
"d",
"$"
]
},
{
"before": [
"<leader>",
"d",
"l"
],
"after": [
"0",
"d",
"$"
]
},
{
"before": [
"<leader>",
"k"
],
"after": [
"<C-o>"
]
},
{
"before": [
"<leader>",
"j"
],
"after": [
"<C-i>"
]
},
{
"before": [
"<leader>",
"s",
"p"
],
"commands": [
":split"
]
},
{
"before": [
"<leader>",
"v",
"s"
],
"commands": [
":vsplit"
]
},
{
"before": [
"<leader>",
"v",
"v"
],
"commands": [
"workbench.action.openSettingsJson"
]
},
{
"before": [
"<leader>",
"y",
"o"
],
"commands": [
"workbench.action.toggleZenMode"
]
}
],
"[css]": {
"editor.tabSize": 2
},
"[scss]": {
"editor.tabSize": 2
},
"[html]": {
"editor.tabSize": 2
},
"[javascript]": {
"editor.tabSize": 2
},
"[javascriptreact]": {
"editor.tabSize": 2
},
"[json]": {
"editor.tabSize": 2
},
"[typescript]": {
"editor.tabSize": 2
},
"[typescriptreact]": {
"editor.tabSize": 2
},
"[yaml]": {
"editor.tabSize": 2
},
"[go]": {
"editor.insertSpaces": false,
"editor.tabSize": 4
},
"[markdown]": {
"editor.wordWrap": "wordWrapColumn",
"editor.wordWrapColumn": 55
},
"[groovy]": {
"editor.wordWrap": "off"
},
"[jenkinsfile]": {
"editor.wordWrap": "off"
}
}

327
dot_config/dunst/dunstrc Normal file
View File

@@ -0,0 +1,327 @@
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = mouse
# The geometry of the window:
# [{width}]x{height}[+/-{x}+/-{y}]
# The geometry of the message window.
# The height is measured in number of notifications everything else
# in pixels. If the width is omitted but the height is given
# ("-geometry x2"), the message window expands over the whole screen
# (dmenu-like). If width is 0, the window expands to the longest
# message displayed. A positive x is measured from the left, a
# negative from the right side of the screen. Y is measured from
# the top and down respectively.
# The width can be negative. In this case the actual width is the
# screen width minus the width defined in within the geometry option.
geometry = "300x5-30+20"
# Show how many messages are currently hidden (because of geometry).
indicate_hidden = yes
# Shrink window if it's smaller than the width. Will be ignored if
# width is 0.
shrink = no
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.).
transparency = 0
# The height of the entire notification. If the height is smaller
# than the font height and padding combined, it will be raised
# to the font height and padding.
notification_height = 0
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
separator_height = 2
# Padding between text and separator.
padding = 8
# Horizontal padding.
horizontal_padding = 8
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 3
# Defines color of the frame around the notification window.
frame_color = "#aaaaaa"
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort messages by urgency.
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# Transient notifications ignore this setting.
idle_threshold = 120
### Text ###
# font = Monospace 8
font = Hack Nerd Font Mono 8
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# %n progress value if set without any extra characters
# %% Literal %
# Markup is allowed
format = "<b>%s</b>\n%b"
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Split notifications into multiple lines if they don't fit into
# geometry.
word_wrap = yes
# When word_wrap is set to no, specify where to ellipsize long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Merge multiple notifications with the same content
stack_duplicates = true
# Hide the count of merged notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
### Icons ###
# Align icons left/right/off
icon_position = off
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 32
# Paths to default icons.
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path.
dmenu = /usr/bin/dmenu -p dunst:
# Browser for opening urls in context menu.
browser = /usr/bin/firefox -new-tab
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst
title = Dunst
# Define the class of the windows spawned by dunst
class = Dunst
# Print a notification on startup.
# This is mainly for error detection, since dbus (re-)starts dunst
# automatically after a crash.
startup_notification = false
### Legacy
# Use the Xinerama extension instead of RandR for multi-monitor support.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
[shortcuts]
# Shortcuts are specified as [modifier+][modifier+]...key
# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
# "mod3" and "mod4" (windows-key).
# Xev might be helpful to find names for keys.
# Close notification.
close = ctrl+space
# Close all notifications.
close_all = ctrl+shift+space
# Redisplay last message(s).
# On the US keyboard layout "grave" is normally above TAB and left
# of "1". Make sure this key actually exists on your keyboard layout,
# e.g. check output of 'xmodmap -pke'
history = ctrl+grave
# Context menu.
context = ctrl+shift+period
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "#222222"
foreground = "#888888"
timeout = 10
# Icon for notifications with low urgency, uncomment to enable
#icon = /path/to/icon
[urgency_normal]
background = "#285577"
foreground = "#ffffff"
timeout = 10
# Icon for notifications with normal urgency, uncomment to enable
#icon = /path/to/icon
[urgency_critical]
background = "#900000"
foreground = "#ffffff"
frame_color = "#ff0000"
timeout = 0
# Icon for notifications with critical urgency, uncomment to enable
#icon = /path/to/icon
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
# Messages can be matched by "appname", "summary", "body", "icon", "category",
# "msg_urgency" and you can override the "timeout", "urgency", "foreground",
# "background", "new_icon" and "format".
# Shell-like globbing will get expanded.
#
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: if you don't want a notification to be displayed, set the format
# to "".
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# format = ""
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
# vim: ft=cfg

View File

@@ -0,0 +1,137 @@
# fish completion for kogito -*- shell-script -*-
function __kogito_debug
set file "$BASH_COMP_DEBUG_FILE"
if test -n "$file"
echo "$argv" >> $file
end
end
function __kogito_perform_completion
__kogito_debug "Starting __kogito_perform_completion with: $argv"
set args (string split -- " " "$argv")
set lastArg "$args[-1]"
__kogito_debug "args: $args"
__kogito_debug "last arg: $lastArg"
set emptyArg ""
if test -z "$lastArg"
__kogito_debug "Setting emptyArg"
set emptyArg \"\"
end
__kogito_debug "emptyArg: $emptyArg"
set requestComp "$args[1] __complete $args[2..-1] $emptyArg"
__kogito_debug "Calling $requestComp"
set results (eval $requestComp 2> /dev/null)
set comps $results[1..-2]
set directiveLine $results[-1]
# For Fish, when completing a flag with an = (e.g., <program> -n=<TAB>)
# completions must be prefixed with the flag
set flagPrefix (string match -r -- '-.*=' "$lastArg")
__kogito_debug "Comps: $comps"
__kogito_debug "DirectiveLine: $directiveLine"
__kogito_debug "flagPrefix: $flagPrefix"
for comp in $comps
printf "%s%s\n" "$flagPrefix" "$comp"
end
printf "%s\n" "$directiveLine"
end
# This function does three things:
# 1- Obtain the completions and store them in the global __kogito_comp_results
# 2- Set the __kogito_comp_do_file_comp flag if file completion should be performed
# and unset it otherwise
# 3- Return true if the completion results are not empty
function __kogito_prepare_completions
# Start fresh
set --erase __kogito_comp_do_file_comp
set --erase __kogito_comp_results
# Check if the command-line is already provided. This is useful for testing.
if not set --query __kogito_comp_commandLine
set __kogito_comp_commandLine (commandline)
end
__kogito_debug "commandLine is: $__kogito_comp_commandLine"
set results (__kogito_perform_completion "$__kogito_comp_commandLine")
set --erase __kogito_comp_commandLine
__kogito_debug "Completion results: $results"
if test -z "$results"
__kogito_debug "No completion, probably due to a failure"
# Might as well do file completion, in case it helps
set --global __kogito_comp_do_file_comp 1
return 0
end
set directive (string sub --start 2 $results[-1])
set --global __kogito_comp_results $results[1..-2]
__kogito_debug "Completions are: $__kogito_comp_results"
__kogito_debug "Directive is: $directive"
if test -z "$directive"
set directive 0
end
set compErr (math (math --scale 0 $directive / 1) % 2)
if test $compErr -eq 1
__kogito_debug "Received error directive: aborting."
# Might as well do file completion, in case it helps
set --global __kogito_comp_do_file_comp 1
return 0
end
set nospace (math (math --scale 0 $directive / 2) % 2)
set nofiles (math (math --scale 0 $directive / 4) % 2)
__kogito_debug "nospace: $nospace, nofiles: $nofiles"
# Important not to quote the variable for count to work
set numComps (count $__kogito_comp_results)
__kogito_debug "numComps: $numComps"
if test $numComps -eq 1; and test $nospace -ne 0
# To support the "nospace" directive we trick the shell
# by outputting an extra, longer completion.
__kogito_debug "Adding second completion to perform nospace directive"
set --append __kogito_comp_results $__kogito_comp_results[1].
end
if test $numComps -eq 0; and test $nofiles -eq 0
__kogito_debug "Requesting file completion"
set --global __kogito_comp_do_file_comp 1
end
# If we don't want file completion, we must return true even if there
# are no completions found. This is because fish will perform the last
# completion command, even if its condition is false, if no other
# completion command was triggered
return (not set --query __kogito_comp_do_file_comp)
end
# Remove any pre-existing completions for the program since we will be handling all of them
# TODO this cleanup is not sufficient. Fish completions are only loaded once the user triggers
# them, so the below deletion will not work as it is run too early. What else can we do?
complete -c kogito -e
# The order in which the below two lines are defined is very important so that __kogito_prepare_completions
# is called first. It is __kogito_prepare_completions that sets up the __kogito_comp_do_file_comp variable.
#
# This completion will be run second as complete commands are added FILO.
# It triggers file completion choices when __kogito_comp_do_file_comp is set.
complete -c kogito -n 'set --query __kogito_comp_do_file_comp'
# This completion will be run first as complete commands are added FILO.
# The call to __kogito_prepare_completions will setup both __kogito_comp_results abd __kogito_comp_do_file_comp.
# It provides the program's completion choices.
complete -c kogito -n '__kogito_prepare_completions' -f -a '$__kogito_comp_results'

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,178 @@
# Copyright 2016 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# fish completion for minikube -*- shell-script -*-
function __minikube_debug
set file "$BASH_COMP_DEBUG_FILE"
if test -n "$file"
echo "$argv" >> $file
end
end
function __minikube_perform_completion
__minikube_debug "Starting __minikube_perform_completion with: $argv"
set args (string split -- " " "$argv")
set lastArg "$args[-1]"
__minikube_debug "args: $args"
__minikube_debug "last arg: $lastArg"
set emptyArg ""
if test -z "$lastArg"
__minikube_debug "Setting emptyArg"
set emptyArg \"\"
end
__minikube_debug "emptyArg: $emptyArg"
if not type -q "$args[1]"
# This can happen when "complete --do-complete minikube" is called when running this script.
__minikube_debug "Cannot find $args[1]. No completions."
return
end
set requestComp "$args[1] __complete $args[2..-1] $emptyArg"
__minikube_debug "Calling $requestComp"
set results (eval $requestComp 2> /dev/null)
set comps $results[1..-2]
set directiveLine $results[-1]
# For Fish, when completing a flag with an = (e.g., <program> -n=<TAB>)
# completions must be prefixed with the flag
set flagPrefix (string match -r -- '-.*=' "$lastArg")
__minikube_debug "Comps: $comps"
__minikube_debug "DirectiveLine: $directiveLine"
__minikube_debug "flagPrefix: $flagPrefix"
for comp in $comps
printf "%s%s\n" "$flagPrefix" "$comp"
end
printf "%s\n" "$directiveLine"
end
# This function does three things:
# 1- Obtain the completions and store them in the global __minikube_comp_results
# 2- Set the __minikube_comp_do_file_comp flag if file completion should be performed
# and unset it otherwise
# 3- Return true if the completion results are not empty
function __minikube_prepare_completions
# Start fresh
set --erase __minikube_comp_do_file_comp
set --erase __minikube_comp_results
# Check if the command-line is already provided. This is useful for testing.
if not set --query __minikube_comp_commandLine
# Use the -c flag to allow for completion in the middle of the line
set __minikube_comp_commandLine (commandline -c)
end
__minikube_debug "commandLine is: $__minikube_comp_commandLine"
set results (__minikube_perform_completion "$__minikube_comp_commandLine")
set --erase __minikube_comp_commandLine
__minikube_debug "Completion results: $results"
if test -z "$results"
__minikube_debug "No completion, probably due to a failure"
# Might as well do file completion, in case it helps
set --global __minikube_comp_do_file_comp 1
return 1
end
set directive (string sub --start 2 $results[-1])
set --global __minikube_comp_results $results[1..-2]
__minikube_debug "Completions are: $__minikube_comp_results"
__minikube_debug "Directive is: $directive"
set shellCompDirectiveError 1
set shellCompDirectiveNoSpace 2
set shellCompDirectiveNoFileComp 4
set shellCompDirectiveFilterFileExt 8
set shellCompDirectiveFilterDirs 16
if test -z "$directive"
set directive 0
end
set compErr (math (math --scale 0 $directive / $shellCompDirectiveError) % 2)
if test $compErr -eq 1
__minikube_debug "Received error directive: aborting."
# Might as well do file completion, in case it helps
set --global __minikube_comp_do_file_comp 1
return 1
end
set filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) % 2)
set dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) % 2)
if test $filefilter -eq 1; or test $dirfilter -eq 1
__minikube_debug "File extension filtering or directory filtering not supported"
# Do full file completion instead
set --global __minikube_comp_do_file_comp 1
return 1
end
set nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) % 2)
set nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) % 2)
__minikube_debug "nospace: $nospace, nofiles: $nofiles"
# Important not to quote the variable for count to work
set numComps (count $__minikube_comp_results)
__minikube_debug "numComps: $numComps"
if test $numComps -eq 1; and test $nospace -ne 0
# To support the "nospace" directive we trick the shell
# by outputting an extra, longer completion.
__minikube_debug "Adding second completion to perform nospace directive"
set --append __minikube_comp_results $__minikube_comp_results[1].
end
if test $numComps -eq 0; and test $nofiles -eq 0
__minikube_debug "Requesting file completion"
set --global __minikube_comp_do_file_comp 1
end
# If we don't want file completion, we must return true even if there
# are no completions found. This is because fish will perform the last
# completion command, even if its condition is false, if no other
# completion command was triggered
return (not set --query __minikube_comp_do_file_comp)
end
# Since Fish completions are only loaded once the user triggers them, we trigger them ourselves
# so we can properly delete any completions provided by another script.
# The space after the the program name is essential to trigger completion for the program
# and not completion of the program name itself.
complete --do-complete "minikube " > /dev/null 2>&1
# Using '> /dev/null 2>&1' since '&>' is not supported in older versions of fish.
# Remove any pre-existing completions for the program since we will be handling all of them.
complete -c minikube -e
# The order in which the below two lines are defined is very important so that __minikube_prepare_completions
# is called first. It is __minikube_prepare_completions that sets up the __minikube_comp_do_file_comp variable.
#
# This completion will be run second as complete commands are added FILO.
# It triggers file completion choices when __minikube_comp_do_file_comp is set.
complete -c minikube -n 'set --query __minikube_comp_do_file_comp'
# This completion will be run first as complete commands are added FILO.
# The call to __minikube_prepare_completions will setup both __minikube_comp_results and __minikube_comp_do_file_comp.
# It provides the program's completion choices.
complete -c minikube -n '__minikube_prepare_completions' -f -a '$__minikube_comp_results'

View File

@@ -0,0 +1,115 @@
# Copyright (C) 2012-2014 Dmitry Medvinsky <me@dmedvinsky.name>. All Rights Reserved.
# This file is licensed under the GPLv2+. Please see COPYING for more information.
set -l PROG 'pass'
function __fish_pass_get_prefix
if set -q PASSWORD_STORE_DIR
realpath -- "$PASSWORD_STORE_DIR"
else
echo "$HOME/.password-store"
end
end
function __fish_pass_needs_command
[ (count (commandline -opc)) -eq 1 ]
end
function __fish_pass_uses_command
set -l cmd (commandline -opc)
if [ (count $cmd) -gt 1 ]
if [ $argv[1] = $cmd[2] ]
return 0
end
end
return 1
end
function __fish_pass_print_gpg_keys
gpg2 --list-keys | grep uid | sed 's/.*<\(.*\)>/\1/'
end
function __fish_pass_print
set -l ext $argv[1]
set -l strip $argv[2]
set -l prefix (__fish_pass_get_prefix)
set -l matches $prefix/**$ext
printf '%s\n' $matches | sed "s#$prefix/\(.*\)$strip#\1#"
end
function __fish_pass_print_entry_dirs
__fish_pass_print "/"
end
function __fish_pass_print_entries
__fish_pass_print ".gpg" ".gpg"
end
function __fish_pass_print_entries_and_dirs
__fish_pass_print_entry_dirs
__fish_pass_print_entries
end
function __fish_pass_git_complete
set -l prefix (__fish_pass_get_prefix)
set -l git_cmd (commandline -opc) (commandline -ct)
set -e git_cmd[1 2] # Drop "pass git".
complete -C"git -C $prefix $git_cmd"
end
complete -c $PROG -f -n '__fish_pass_needs_command' -a help -d 'Command: show usage help'
complete -c $PROG -f -n '__fish_pass_needs_command' -a version -d 'Command: show program version'
complete -c $PROG -f -n '__fish_pass_needs_command' -a init -d 'Command: initialize new password storage'
complete -c $PROG -f -n '__fish_pass_uses_command init' -s p -l path -d 'Assign gpg-id for specified sub folder of password store'
complete -c $PROG -f -n '__fish_pass_needs_command' -a ls -d 'Command: list passwords'
complete -c $PROG -f -n '__fish_pass_uses_command ls' -a "(__fish_pass_print_entry_dirs)"
complete -c $PROG -f -n '__fish_pass_needs_command' -a insert -d 'Command: insert new password'
complete -c $PROG -f -n '__fish_pass_uses_command insert' -s e -l echo -d 'Echo the password on console'
complete -c $PROG -f -n '__fish_pass_uses_command insert' -s m -l multiline -d 'Provide multiline password entry'
complete -c $PROG -f -n '__fish_pass_uses_command insert' -s f -l force -d 'Do not prompt before overwritting'
complete -c $PROG -f -n '__fish_pass_uses_command insert' -a "(__fish_pass_print_entry_dirs)"
complete -c $PROG -f -n '__fish_pass_needs_command' -a generate -d 'Command: generate new password'
complete -c $PROG -f -n '__fish_pass_uses_command generate' -s n -l no-symbols -d 'Do not use special symbols'
complete -c $PROG -f -n '__fish_pass_uses_command generate' -s c -l clip -d 'Put the password in clipboard'
complete -c $PROG -f -n '__fish_pass_uses_command generate' -s f -l force -d 'Do not prompt before overwritting'
complete -c $PROG -f -n '__fish_pass_uses_command generate' -s i -l in-place -d 'Replace only the first line with the generated password'
complete -c $PROG -f -n '__fish_pass_uses_command generate' -a "(__fish_pass_print_entry_dirs)"
complete -c $PROG -f -n '__fish_pass_needs_command' -a mv -d 'Command: rename existing password'
complete -c $PROG -f -n '__fish_pass_uses_command mv' -s f -l force -d 'Force rename'
complete -c $PROG -f -n '__fish_pass_uses_command mv' -a "(__fish_pass_print_entries_and_dirs)"
complete -c $PROG -f -n '__fish_pass_needs_command' -a cp -d 'Command: copy existing password'
complete -c $PROG -f -n '__fish_pass_uses_command cp' -s f -l force -d 'Force copy'
complete -c $PROG -f -n '__fish_pass_uses_command cp' -a "(__fish_pass_print_entries_and_dirs)"
complete -c $PROG -f -n '__fish_pass_needs_command' -a rm -d 'Command: remove existing password'
complete -c $PROG -f -n '__fish_pass_uses_command rm' -s r -l recursive -d 'Remove password groups recursively'
complete -c $PROG -f -n '__fish_pass_uses_command rm' -s f -l force -d 'Force removal'
complete -c $PROG -f -n '__fish_pass_uses_command rm' -a "(__fish_pass_print_entries_and_dirs)"
complete -c $PROG -f -n '__fish_pass_needs_command' -a edit -d 'Command: edit password using text editor'
complete -c $PROG -f -n '__fish_pass_uses_command edit' -a "(__fish_pass_print_entries)"
complete -c $PROG -f -n '__fish_pass_needs_command' -a show -d 'Command: show existing password'
complete -c $PROG -f -n '__fish_pass_uses_command show' -s c -l clip -d 'Put password in clipboard'
complete -c $PROG -f -n '__fish_pass_uses_command show' -a "(__fish_pass_print_entries)"
# When no command is given, `show` is defaulted.
complete -c $PROG -f -n '__fish_pass_needs_command' -s c -l clip -d 'Put password in clipboard'
complete -c $PROG -f -n '__fish_pass_needs_command' -a "(__fish_pass_print_entries)"
complete -c $PROG -f -n '__fish_pass_uses_command -c' -a "(__fish_pass_print_entries)"
complete -c $PROG -f -n '__fish_pass_uses_command --clip' -a "(__fish_pass_print_entries)"
complete -c $PROG -f -n '__fish_pass_needs_command' -a git -d 'Command: execute a git command'
complete -c $PROG -f -n '__fish_pass_uses_command git' -a '(__fish_pass_git_complete)'
complete -c $PROG -f -n '__fish_pass_needs_command' -a find -d 'Command: find a password file or directory matching pattern'
complete -c $PROG -f -n '__fish_pass_needs_command' -a grep -d 'Command: search inside of decrypted password files for matching pattern'
complete -c $PROG -f -n '__fish_pass_uses_command grep' -a '(begin
set -l cmd (commandline -opc) (commandline -ct)
set -e cmd[1 2] # Drop "pass grep".
complete -C"grep $cmd"
end)'

View File

@@ -0,0 +1,235 @@
# fish completion for timetrace -*- shell-script -*-
function __timetrace_debug
set -l file "$BASH_COMP_DEBUG_FILE"
if test -n "$file"
echo "$argv" >> $file
end
end
function __timetrace_perform_completion
__timetrace_debug "Starting __timetrace_perform_completion"
# Extract all args except the last one
set -l args (commandline -opc)
# Extract the last arg and escape it in case it is a space
set -l lastArg (string escape -- (commandline -ct))
__timetrace_debug "args: $args"
__timetrace_debug "last arg: $lastArg"
# Disable ActiveHelp which is not supported for fish shell
set -l requestComp "TIMETRACE_ACTIVE_HELP=0 $args[1] __complete $args[2..-1] $lastArg"
__timetrace_debug "Calling $requestComp"
set -l results (eval $requestComp 2> /dev/null)
# Some programs may output extra empty lines after the directive.
# Let's ignore them or else it will break completion.
# Ref: https://github.com/spf13/cobra/issues/1279
for line in $results[-1..1]
if test (string trim -- $line) = ""
# Found an empty line, remove it
set results $results[1..-2]
else
# Found non-empty line, we have our proper output
break
end
end
set -l comps $results[1..-2]
set -l directiveLine $results[-1]
# For Fish, when completing a flag with an = (e.g., <program> -n=<TAB>)
# completions must be prefixed with the flag
set -l flagPrefix (string match -r -- '-.*=' "$lastArg")
__timetrace_debug "Comps: $comps"
__timetrace_debug "DirectiveLine: $directiveLine"
__timetrace_debug "flagPrefix: $flagPrefix"
for comp in $comps
printf "%s%s\n" "$flagPrefix" "$comp"
end
printf "%s\n" "$directiveLine"
end
# this function limits calls to __timetrace_perform_completion, by caching the result behind $__timetrace_perform_completion_once_result
function __timetrace_perform_completion_once
__timetrace_debug "Starting __timetrace_perform_completion_once"
if test -n "$__timetrace_perform_completion_once_result"
__timetrace_debug "Seems like a valid result already exists, skipping __timetrace_perform_completion"
return 0
end
set --global __timetrace_perform_completion_once_result (__timetrace_perform_completion)
if test -z "$__timetrace_perform_completion_once_result"
__timetrace_debug "No completions, probably due to a failure"
return 1
end
__timetrace_debug "Performed completions and set __timetrace_perform_completion_once_result"
return 0
end
# this function is used to clear the $__timetrace_perform_completion_once_result variable after completions are run
function __timetrace_clear_perform_completion_once_result
__timetrace_debug ""
__timetrace_debug "========= clearing previously set __timetrace_perform_completion_once_result variable =========="
set --erase __timetrace_perform_completion_once_result
__timetrace_debug "Succesfully erased the variable __timetrace_perform_completion_once_result"
end
function __timetrace_requires_order_preservation
__timetrace_debug ""
__timetrace_debug "========= checking if order preservation is required =========="
__timetrace_perform_completion_once
if test -z "$__timetrace_perform_completion_once_result"
__timetrace_debug "Error determining if order preservation is required"
return 1
end
set -l directive (string sub --start 2 $__timetrace_perform_completion_once_result[-1])
__timetrace_debug "Directive is: $directive"
set -l shellCompDirectiveKeepOrder 32
set -l keeporder (math (math --scale 0 $directive / $shellCompDirectiveKeepOrder) % 2)
__timetrace_debug "Keeporder is: $keeporder"
if test $keeporder -ne 0
__timetrace_debug "This does require order preservation"
return 0
end
__timetrace_debug "This doesn't require order preservation"
return 1
end
# This function does two things:
# - Obtain the completions and store them in the global __timetrace_comp_results
# - Return false if file completion should be performed
function __timetrace_prepare_completions
__timetrace_debug ""
__timetrace_debug "========= starting completion logic =========="
# Start fresh
set --erase __timetrace_comp_results
__timetrace_perform_completion_once
__timetrace_debug "Completion results: $__timetrace_perform_completion_once_result"
if test -z "$__timetrace_perform_completion_once_result"
__timetrace_debug "No completion, probably due to a failure"
# Might as well do file completion, in case it helps
return 1
end
set -l directive (string sub --start 2 $__timetrace_perform_completion_once_result[-1])
set --global __timetrace_comp_results $__timetrace_perform_completion_once_result[1..-2]
__timetrace_debug "Completions are: $__timetrace_comp_results"
__timetrace_debug "Directive is: $directive"
set -l shellCompDirectiveError 1
set -l shellCompDirectiveNoSpace 2
set -l shellCompDirectiveNoFileComp 4
set -l shellCompDirectiveFilterFileExt 8
set -l shellCompDirectiveFilterDirs 16
if test -z "$directive"
set directive 0
end
set -l compErr (math (math --scale 0 $directive / $shellCompDirectiveError) % 2)
if test $compErr -eq 1
__timetrace_debug "Received error directive: aborting."
# Might as well do file completion, in case it helps
return 1
end
set -l filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) % 2)
set -l dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) % 2)
if test $filefilter -eq 1; or test $dirfilter -eq 1
__timetrace_debug "File extension filtering or directory filtering not supported"
# Do full file completion instead
return 1
end
set -l nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) % 2)
set -l nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) % 2)
__timetrace_debug "nospace: $nospace, nofiles: $nofiles"
# If we want to prevent a space, or if file completion is NOT disabled,
# we need to count the number of valid completions.
# To do so, we will filter on prefix as the completions we have received
# may not already be filtered so as to allow fish to match on different
# criteria than the prefix.
if test $nospace -ne 0; or test $nofiles -eq 0
set -l prefix (commandline -t | string escape --style=regex)
__timetrace_debug "prefix: $prefix"
set -l completions (string match -r -- "^$prefix.*" $__timetrace_comp_results)
set --global __timetrace_comp_results $completions
__timetrace_debug "Filtered completions are: $__timetrace_comp_results"
# Important not to quote the variable for count to work
set -l numComps (count $__timetrace_comp_results)
__timetrace_debug "numComps: $numComps"
if test $numComps -eq 1; and test $nospace -ne 0
# We must first split on \t to get rid of the descriptions to be
# able to check what the actual completion will be.
# We don't need descriptions anyway since there is only a single
# real completion which the shell will expand immediately.
set -l split (string split --max 1 \t $__timetrace_comp_results[1])
# Fish won't add a space if the completion ends with any
# of the following characters: @=/:.,
set -l lastChar (string sub -s -1 -- $split)
if not string match -r -q "[@=/:.,]" -- "$lastChar"
# In other cases, to support the "nospace" directive we trick the shell
# by outputting an extra, longer completion.
__timetrace_debug "Adding second completion to perform nospace directive"
set --global __timetrace_comp_results $split[1] $split[1].
__timetrace_debug "Completions are now: $__timetrace_comp_results"
end
end
if test $numComps -eq 0; and test $nofiles -eq 0
# To be consistent with bash and zsh, we only trigger file
# completion when there are no other completions
__timetrace_debug "Requesting file completion"
return 1
end
end
return 0
end
# Since Fish completions are only loaded once the user triggers them, we trigger them ourselves
# so we can properly delete any completions provided by another script.
# Only do this if the program can be found, or else fish may print some errors; besides,
# the existing completions will only be loaded if the program can be found.
if type -q "timetrace"
# The space after the program name is essential to trigger completion for the program
# and not completion of the program name itself.
# Also, we use '> /dev/null 2>&1' since '&>' is not supported in older versions of fish.
complete --do-complete "timetrace " > /dev/null 2>&1
end
# Remove any pre-existing completions for the program since we will be handling all of them.
complete -c timetrace -e
# this will get called after the two calls below and clear the $__timetrace_perform_completion_once_result global
complete -c timetrace -n '__timetrace_clear_perform_completion_once_result'
# The call to __timetrace_prepare_completions will setup __timetrace_comp_results
# which provides the program's completion choices.
# If this doesn't require order preservation, we don't use the -k flag
complete -c timetrace -n 'not __timetrace_requires_order_preservation && __timetrace_prepare_completions' -f -a '$__timetrace_comp_results'
# otherwise we use the -k flag
complete -k -c timetrace -n '__timetrace_requires_order_preservation && __timetrace_prepare_completions' -f -a '$__timetrace_comp_results'

View File

@@ -1,12 +1,51 @@
# vim: fdm=marker ft=fish.go-template
# aliases [[[ #
# personal [[[ #
# dirs [[[ #
abbr cvt "cd ~/Pictures/profile-pics/conviction"
abbr ets "cd /mnt/linux-files-2/Videos/eras-taylor-swift-movie"
abbr hv "cd /mnt/linux-files-2/Pictures/hevin"
abbr hvn "cd ~/coding/hevin-nft"
abbr lon "libreoffice ~/Documents/expenses/net-worth.ods &"
abbr lfs2 "cd /mnt/linux-files-2/Videos/shows"
abbr mj "cd /mnt/linux-files-2/Pictures/midjourney"
abbr pdg "cd ~/Pictures/profile-pics/pudgy-penguins/test"
abbr snp "cd /mnt/linux-files-2/Videos/ipad/marvel-snap"
abbr tr "cd ~/.local/share/Terraria"
abbr da "cd /mnt/ipad/DCIM/102APPLE"
# ]]] dirs #
abbr ncy "nvim ~/Documents/journal/hobbies/courtyard-drop.md"
abbr njt "nvim ~/Documents/journal/todo/24/2.md"
abbr rsn "rsync -e 'ssh -p 399' -r . 165.22.239.234:/home/kevin/hevin/art -acvv"
# ]]] personal #
# school [[[ #
abbr js "cd ~/Documents/job-search"
abbr ssad "ssh -i ~/coding/aws.pem admin@ec2-18-223-241-198.us-east-2.compute.amazonaws.com"
abbr ssa "ssh kevin@ec2-18-223-241-198.us-east-2.compute.amazonaws.com"
# ]]] school #
# abbr nej "nvim ~/Documents/emojis.md"
# ]]] aliases #
# login to X [[[ #
{{ if eq .chezmoi.username "kevin" }}
if status is-login
if test -z "$DISPLAY" -a $XDG_VTNR = 1
exec startx -- -keeptty
end
if test -z "$DISPLAY" -a $XDG_VTNR = 1
exec startx -- -keeptty
end
end
set -x GPG_TTY (tty)
{{ end }}
@@ -17,25 +56,45 @@ set -x GPG_TTY (tty)
set -U fish_greeting
# spv[[[
{{ if eq .chezmoi.fullHostname "nzxt" }}
{{ if eq .chezmoi.hostname "nzxt" }}
set -U spv_dir "/home/kevin/coding/spotify-lib-vis"
set -U mfs_dir "/home/kevin/coding/mf-site"
source /home/kevin/coding/spotify-lib-vis/src/scripts/api-keys-fish.sh
abbr hum "cd $mfs_dir && hugo serve -D --disableFastRender"
{{ end }}#]]]
# system[[[
set -x PATH $PATH ~/.local/bin ~/scripts ~/scripts/colors ~/go/bin ~/.minetest/minetest/bin ~/.gem/ruby/2.6.0/bin
set -x CLASSPATH $CLASSPATH /home/kevin/java/*.jar
set -x LD_LIBRARY_PATH $LD_LIBRARY_PATH /usr/local/lib /usr/local/lib64
set -x PKG_CONFIG_PATH $PKG_CONFIG_PATH /usr/lib/pkgconfig
# system [[[
set -x HASTE_SERVER https://pste.gq
{{ if eq .chezmoi.fullHostname "nzxt" }}
set -x CALCURSE_CALDAV_PASSWORD (pass show technology/linux/baikal | head -n1)
status --is-interactive; and source (pyenv init -|psub)
{{ if eq .chezmoi.hostname "nzxt" }}
# set -x CALCURSE_CALDAV_PASSWORD (pass show technology/linux/baikal | head -n1)
{{ end }}
#]]]
set -x LD_LIBRARY_PATH $LD_LIBRARY_PATH /usr/local/lib /usr/local/lib64
set -x GOPATH ~/go
# set -x PATH $GRAALVM_BIN $PATH ~/.local/bin ~/scripts ~/scripts/colors ~/go/bin ~/.minetest/minetest/bin ~/.gem/ruby/2.6.0/bin
set -x PATH $PATH ~/.local/bin ~/scripts ~/scripts/colors $GOPATH/bin ~/.minetest/minetest/bin ~/.gem/ruby/*/bin ~/.yarn/bin ~/.linuxbrew/bin ~/.fnm/current/bin ~/.nimble/bin ~/miniconda3/bin
set -x PKG_CONFIG_PATH $PKG_CONFIG_PATH /usr/lib/pkgconfig
# Java [[[ #
set -x GRAALVM_HOME /usr/lib/jvm/graalvm-ce-java11-21.1.0
set -x GRAALVM_BIN $GRAALVM_HOME/bin
set -x JAVA_HOME $GRAALVM_HOME
# set -x JAVA_HOME /usr/lib/jvm/java-11-openjdk
# set -x JAVA_HOME /usr/lib/jvm/java-8-openjdk # for shared libs
set -x PATH $JAVA_HOME/bin $PATH
# ]]] Java #
# pnpm
set -gx PNPM_HOME "/home/kevin/.local/share/pnpm"
if not string match -q -- $PNPM_HOME $PATH
set -gx PATH "$PNPM_HOME" $PATH
end
# pnpm end
# system ]]]
# space prompt[[[
# set SPACEFISH_PROMPT_ORDER time user dir host git package node docker ruby golang php rust haskell julia aws conda pyenv kubecontext exec_time line_sep battery jobs exit_code vi_mode char
@@ -53,15 +112,47 @@ set SPACEFISH_VI_MODE_SUFFIX ''
set -x PASSWORD_STORE_CLIP_TIME 120
set -xU XSET_RATE 90
set -xU XSET_DELAY 200
{{ if and (eq .chezmoi.fullHostname "x1-carbon") (not (eq .chezmoi.username "root")) }}
{{ if and (eq .chezmoi.hostname "x1-carbon") (not (eq .chezmoi.username "root")) }}
xset r rate $XSET_DELAY $XSET_RATE
{{ end }}#]]]
# set -U BROWSER "chromium"
# [[[ universal var's #
set -xU BROWSER "firefox"
# set -U BROWSER "chromium"
set -xU FZF_DEFAULT_COMMAND "find ."
set -x LAPTOP_IP "192.168.0.19"
set -x PHONE_IP "192.168.0.241"
set -x PIXEL_IP "192.168.0.18"
set -x WORK_LAPTOP_IP "kmok@192.168.0.11"
{{ if eq .chezmoi.hostname "nzxt" }}
# set -x CALCURSE_CALDAV_PASSWORD (pass show technology/linux/baikal | head -n1)
set -x JENKINS_TOKEN 114a1b2e8693b57fa6f4bce88e2deee8cc
status --is-interactive; and source (pyenv init -|psub)
{{ end }}
set -xU MINIKUBE_IP "http://192.168.49.2"
set -xU LOCAL_KOGITO_SERVICE_PORT "32000"
# set -xU LOCAL_KOGITO_SERVICE_URL "$MINIKUBE_IP:$LOCAL_KOGITO_SERVICE_PORT"
set -x FLASK_DEBUG 1
set -x FULLNODE_API_INFO wss://api.chain.love
set -x IPAD_IMG 55
#source /home/kevin/coding/aws.fish
set -x LIBVIRT_DEFAULT_URI qemu:///system
set --erase DB_NAME
#set -x NODE_OPTIONS '--loader ts-node/esm'
#set NODE_OPTIONS '--loader ts-node/esm'
# ]]] universal var's #
# fish-specific [[[ #
@@ -76,12 +167,12 @@ builtin cd $last_dir && ls > /dev/null
bind \ce edit_command_buffer
bind \cr forward-word
chezmoi apply
# chezmoi apply
{{ if not (eq .linux_os "termux") }}
~/scripts/sync-shortcuts
{{ end }}
# source ~/.config/fish/key_abbr.fish > /dev/null
set -U fish_fxn_dir "{{ .chezmoi.homedir }}/linux-config/dot_config/fish/functions"
set -U fish_fxn_dir "{{ .chezmoi.homeDir }}/linux-config/dot_config/fish/functions"
# set -U fish_fxn_dir "~/.config/fish/functions"
abbr ff "cd $fish_fxn_dir"
for fxn in (find $fish_fxn_dir -name '*.fish')
@@ -106,51 +197,63 @@ abbr xf "fish_config"
abbr ! "sudo !!"
# task [[[ #
abbr aan "task-anno"
abbr ae "task-edit"
abbr aan "task-anno ''"
abbr aed "task-edit"
abbr adl "task-delete"
abbr adn "task-done"
abbr adu "task-due"
abbr adr "task-due-rm"
abbr an "task-next"
abbr anx "task-next"
abbr anr "task-next-rm"
abbr ant "task-notes"
abbr aon "taskopen-new"
abbr apr "task-mod-pri"
abbr aprl "task-mod-pri L"
abbr aprm "task-mod-pri M"
abbr aprn "task-mod-pri ''"
abbr aprh "task-mod-pri H"
abbr apj "task-mod-proj"
abbr asr "task-start"
abbr ar "task-start"
abbr at "task-mod-tag"
abbr atj "task-mod-tag jira"
abbr aw "task-wait"
abbr ax "task-context"
# ]]] task #
abbr ag "grep-aliases"
abbr b "buku-fzf"
abbr bf "buku-fzf fq"
abbr bk "buku-fzf"
abbr bkf "buku-fzf fq"
abbr bq "benq-brightness"
abbr bn "discord-burner"
abbr bun "backup nzxt"
abbr bupp "backup-phone-pics"
#abbr ca "cad-to-us"
abbr cccs "sync-alt-cal class"
abbr cl "clip"
#abbr cli "clip-ipad"
abbr cpc "copy cat"
abbr cpe "copy echo"
abbr cpp "copy echo (pwd)"
abbr cff "create-fish-function"
abbr ctr "systemctl-restart"
abbr def "define"
abbr drs "dump-rarity-check"
abbr fd1 "fd --changed-within 1d"
abbr ens "enable-site"
abbr ev "evince-silent"
abbr ff "fzf-cd"
abbr fnpr "fn-progress"
# abbr fbg "find-bg"
abbr fr "fzf-ranger"
# abbr fr "fzf-ranger"
abbr fv "fzf-vim"
abbr fvft "find-vim-filetype"
abbr gif "video-to-gif"
# git [[[ #
abbr gcamp "git-amend-push"
abbr gclg "git-clone-gitea"
abbr gdf "git-diff-files"
abbr gpsd "git-push-diff-name"
abbr gpsi "git-push-initial"
abbr gpsmt "git-push-multiple"
abbr gpng "git-push-new-gitea"
@@ -163,17 +266,29 @@ abbr gsmb "git-submodule-branch"
# ]]] git #
abbr i "sxiv-silent"
# abbr m "man-vim"
abbr mn "man-vim"
abbr lo "libreoffice-silent"
abbr ma "man-vim task"
abbr mat "math"
abbr mi "mpv-ipad"
abbr mm "mpv-ipad-mov"
abbr mn "man-vim"
abbr mdf "mkdir-cd"
abbr mps "mpv-sub"
abbr mtm "maven-test-method"
abbr pgr "grep-pdf"
abbr pgrf "grep-pdf-file"
abbr pst "pastebin"
abbr q "bc-qalc '"
abbr qh "qalc-history"
abbr qu "qalc-update"
abbr re "reminder ''"
abbr rf "refresh-config"
abbr rs "redshift-set"
abbr rl "readlink-cp"
abbr rds "redshift-set"
abbr rmi "rm-ipad"
abbr rsi "rsync-ipad-vid"
abbr rsm "rsync-ipad-vid-mov"
abbr scf "scp-vid fn"
abbr sma "smol-add"
abbr smd "smol-delete"
abbr sml "smol-slist"
@@ -181,27 +296,63 @@ abbr smr "smol-replace"
abbr shrm "shred-rm"
abbr shs "scan-history"
abbr svp "server-pages"
abbr ta "tmux-attach"
abbr taa "tmux-attach atx"
abbr taf "tmux-attach fn"
abbr tam "tmux-attach misc"
abbr tan "tmux-attach nft"
abbr tan2 "tmux-attach nft-2"
abbr tao "tmux-attach obs"
abbr ttl "timetrace-list"
abbr thes "thesaurus"
abbr usc "us-to-cad"
abbr ubs "ubuntu-start"
abbr umip "unmount-ipad"
# abbr usc "us-to-cad"
#abbr us "us-to-cad"
abbr ut "unix-timestamp"
abbr uzr "unzip-rm"
abbr vsnp "vim-snippet"
abbr waf "watson-add-fortnite"
abbr wga "wget-all"
abbr wag "watson-add-game"
abbr waf "watson-add-game fortnite"
abbr wap "watson-add-game pokemon-go"
abbr wgn "wget-name"
abbr xya "export-pkgs"
# school [[[ #
# 369
abbr grc "grep-c"
abbr grh "grep-headers"
abbr rgh "rg-headers"
abbr jcr "java-compile-run"
abbr jct "java-compile-test"
abbr aw "aws ec2"
abbr awav "aws-attach-volume"
abbr awlv "aws ec2 describe-volumes --query \"sort_by(Volumes, &CreateTime)[*].{ID:VolumeId,Name:Tags[?Key=='Name']|[0].Value,Created:CreateTime}\" --output table"
abbr awdtv "aws ec2 detach-volume --volume-id"
abbr awdlv "aws ec2 delete-volume --volume-id"
abbr awli "aws ec2 describe-instances --query \"sort_by(Reservations[].Instances[], &LaunchTime)[*].[InstanceId, Tags[?Key=='Name'].Value | [0], LaunchTime, InstanceType, State.Name]\" --output table"
abbr awsai "aws ec2 start-instances --instance-ids"
abbr awsti "aws ec2 stop-instances --instance-ids"
# ]]] school #
# ]]] fxn abbr's #
# task sync > /dev/null 2>&1
source /home/kevin/.config/fish/key_abbr.fish > /dev/null
cat /home/kevin/.cache/wal/sequences
# ~/scripts/xmodmap-custom
#ssh-add ~/.ssh/ai16z-test.pem > /dev/null
# keychain --agents ssh id_rsa
#set -Ux SSH_AUTH_SOCK (keychain --eval --agents ssh id_rsa | grep setenv | sed -E 's/setenv (\S+) (\S+);/\2/')
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
#if test -f /home/kevin/miniconda3/bin/conda
#eval /home/kevin/miniconda3/bin/conda "shell.fish" "hook" $argv | source
#else
#if test -f "/home/kevin/miniconda3/etc/fish/conf.d/conda.fish"
#. "/home/kevin/miniconda3/etc/fish/conf.d/conda.fish"
#else
#set -x PATH "/home/kevin/miniconda3/bin" $PATH
#end
#end
# <<< conda initialize <<<

View File

@@ -0,0 +1,3 @@
function aws-attach-volume
aws ec2 attach-volume --volume-id $argv[1] --instance-id $argv[2] --device /dev/sda1
end

View File

@@ -0,0 +1,8 @@
#function bc-qalc
#echo "scale=4; $argv[1]" | bc
#end
function bc-qalc
set -l expression "scale=4; $argv[1]"
set -l result (echo "$expression" | bc -l)
python3 -c "print(f'{float($result):,}')"
end

View File

@@ -1,16 +0,0 @@
function buku-fzf
# buku -p -f 5 | awk -F '\t' 'BEGIN { OFS=FS }; { $2=substr($2, 1, 90); print }' | column -t -s (printf '\t') | fzf --multi | awk '{ print $1 }'
# if test (count $argv) -ge 1 -a "$argv[1]" = "fq"
# set ids (buku -t fq -f4 | awk -F '\t' 'BEGIN { OFS=FS }; { sub(/https?:\/\/(www\.)?/, "", $2); $2=substr($2, 1, 45); $3=substr($3, 1, 50); print }' | column -t -s (printf '\t') | fzf --multi --tiebreak end | awk '{ print $1 }')
if test (count $argv) -eq 1
# TODO: column width? #
set ids (buku -t + "$argv" -f4 | awk -F '\t' 'BEGIN { OFS=FS }; { sub(/https?:\/\/(www\.)?/, "", $2); $2=substr($2, 1, 45); $3=substr($3, 1, 50); print }' | column -t -s (printf '\t') | fzf --multi --tiebreak end | awk '{ print $1 }')
# echo buku -t + "$argv" -f4
else
set ids (buku -p -f4 | awk -F '\t' 'BEGIN { OFS=FS }; { sub(/https?:\/\/(www\.)?/, "", $2); $2=substr($2, 1, 45); $3=substr($3, 1, 50); print }' | column -t -s (printf '\t') | fzf --multi --tiebreak end | awk '{ print $1 }')
end
for id in $ids
buku -o $id
end
end

View File

@@ -0,0 +1,3 @@
function cad-to-us
qalc "$argv[1]CAD to \$"
end

View File

@@ -0,0 +1,3 @@
function conda_activate
source ~/miniconda3/bin/activate $argv
end

View File

@@ -0,0 +1,15 @@
function discord-burner
# echo nordvpn connect ca1$argv[1] && curl ifconfig.me
# nordvpn connect ca1$argv[1] && \
# nordvpn connect ca10$argv[1]
# nordvpn connect
# curl ifconfig.me
if test (count $argv) -gt 1
firefox -P discord-$argv[2] $argv[1] &
else
firefox -P discord-$argv[1] &
end
# for i in (seq $argv[1] $argv[2])
# firefox -P discord-$i $argv[3] &
# end
end

View File

@@ -0,0 +1,3 @@
function dump-rarity-check
pg_dump -U rarity_check rarity_check > $argv[1].sql
end

View File

@@ -0,0 +1,39 @@
function fn-progress
# --- Season Dates (Fortnite Chapter 7 Season 1) ---
set SEASON_START "2025-11-29 00:00:00"
set SEASON_END "2026-03-04 00:00:00"
# --- Calculate Unix Timestamps ---
set START_SECONDS (date -d "$SEASON_START" +%s)
set END_SECONDS (date -d "$SEASON_END" +%s)
set CURRENT_SECONDS (date +%s)
set CURRENT_DATE_TIME (date)
# --- Check if the season is over or hasn't started ---
if test "$CURRENT_SECONDS" -lt "$START_SECONDS"
echo "🎯 Fortnite C7S1 hasn't started yet! (Starts on $SEASON_START)"
return
end
if test "$CURRENT_SECONDS" -ge "$END_SECONDS"
echo "🎉 Fortnite C7S1 has ended! (Ended on $SEASON_END)"
return
end
# --- Calculate Progress ---
set TOTAL_DURATION (math "$END_SECONDS - $START_SECONDS")
set TIME_PASSED (math "$CURRENT_SECONDS - $START_SECONDS")
# --- Calculate the ceiling percentage (The Critical Change) ---
# Setting scale=0 forces bc to output only the integer part (truncation),
# and adding 0.9999 before truncation implements the ceiling logic.
set PROGRESS_PERCENT (echo "scale=0; (($TIME_PASSED * 100) / $TOTAL_DURATION) + 0.9999" | bc)
# --- Output Result ---
echo "📅 Current Date/Time: $CURRENT_DATE_TIME"
echo "🚀 Season Start: $SEASON_START"
echo "🛑 Season End: $SEASON_END"
echo "---"
echo "✅ Fortnite C7S1 is **$PROGRESS_PERCENT%** complete!"
echo "---"
end

View File

@@ -0,0 +1,4 @@
function fzf-cd
set dir (fd -td | fzf)
cd $dir
end

View File

@@ -0,0 +1,3 @@
function git-push-diff-name
git push -f origin HEAD:$argv[1]
end

View File

@@ -1,4 +1,4 @@
function git-push-new-gitea
git remote add origin ssh://git@kevin-mok.com:399/Kevin-Mok/$argv[1].git
and git push --set-upstream origin master
and git push --set-upstream origin main
end

View File

@@ -0,0 +1,7 @@
function clip-ipad
if test (count $argv) -eq 3
ffmpeg -ss $argv[1] -i IMG_$IPAD_IMG$argv[2].MP4 -codec copy $argv[3]
else
ffmpeg -ss $argv[1] -to $argv[2] -i IMG_$IPAD_IMG$argv[3].MP4 -codec copy $argv[4]
end
end

View File

@@ -0,0 +1,3 @@
function mpv-ipad-mov
mpv IMG_$IPAD_IMG$argv[1].MOV
end

View File

@@ -0,0 +1,3 @@
function mpv-ipad
mpv IMG_$IPAD_IMG$argv[1].MP4
end

View File

@@ -0,0 +1,3 @@
function rm-ipad
rm IMG_$IPAD_IMG$argv[1].MP4
end

View File

@@ -0,0 +1,3 @@
function rsync-ipad-vid-mov
rsync --ignore-existing -Ptr IMG_$IPAD_IMG$argv[1].MOV ~/Videos/fortnite/
end

View File

@@ -0,0 +1,5 @@
function rsync-ipad-vid
#rsync --ignore-existing -Ptr IMG_$IPAD_IMG$argv[1].MP4 /mnt/linux-files-2/Videos/ipad/fortnite/name
rsync --ignore-existing -Ptr IMG_$IPAD_IMG$argv[1].MP4 /mnt/linux-files-3/fortnite
#rsync --ignore-existing -Ptr IMG_$IPAD_IMG$argv[1].MP4 ~/Videos/fortnite/
end

View File

@@ -0,0 +1,4 @@
function unmount-ipad
fuser -km /mnt/ipad
fusermount -u /mnt/ipad
end

View File

@@ -0,0 +1,3 @@
function libreoffice-silent
libreoffice $argv[1] &
end

View File

@@ -2,7 +2,7 @@ function man-vim
if count $argv > /dev/null
set prog $argv[1]
else
set prog (apropos . | awk '{ print $1 }' | fzf -e)
set prog (apropos . | gawk '{ print $1 }' | fzf -e)
end
nvim -c ":Man $prog" -c "only"

View File

@@ -0,0 +1,4 @@
function maven-test-method
mvn "-Dtest=$argv[1]#*$argv[2]*" clean test
# mvn "-Dtest=$argv[1]#*$argv[2]*" test
end

View File

@@ -0,0 +1,3 @@
function mpv-sub
mpv $argv[1] --sub-file=$argv[2]
end

View File

@@ -0,0 +1,3 @@
function mute-video
ffmpeg -i $argv[1] -c copy -an $argv[2]
end

View File

@@ -0,0 +1,3 @@
function qalc-update
qalc -e "$argv[1]USD to CAD"
end

View File

@@ -0,0 +1,3 @@
function qalc-update
qalc -e "$argv[1]USD to CAD"
end

View File

@@ -0,0 +1,3 @@
function readlink-cp
readlink -f $argv[1] | xclip -selection clipboard
end

View File

@@ -0,0 +1,13 @@
function refresh-config
chezmoi apply
and echo 'Applied chezmoi.'
# and tmux source-file ~/.tmux.conf
# and echo 'Sourced tmux config.'
sync-shortcuts
echo 'Synced shortcuts.'
source ~/.config/fish/key_abbr.fish > /dev/null
and echo 'Sourced shortcuts.'
and echo 'Reloading fish.'
and exec fish
end

View File

@@ -0,0 +1,3 @@
function reminder
termdown $argv[2] && notify-send $argv[1]
end

View File

@@ -2,6 +2,7 @@ function scan-history
sudo systemctl start postgresql.service
# and systemctl status postgresql.service
and source $spv_dir/src/scripts/api-keys.sh
# and $spv_dir/src/scripts/update-history-2.sh
and $spv_dir/src/scripts/update-history.sh
and cat $spv_dir/src/api/management/commands/update-history.log | tail -n 1
end

View File

@@ -0,0 +1,7 @@
function scp-vid
set dest_dir "/mnt/linux-files/Videos/personal-fortnite-games/review"
if test $argv[1] = 'pogo'
set dest_dir "/mnt/linux-files/Videos/pokemon-go"
end
scp -P 8022 192.168.0.18:/data/data/com.termux/files/home/storage/dcim/\'Screen\ recordings\'/$argv[2] $dest_dir
end

View File

@@ -1,4 +1,4 @@
function task-anno
task $argv[1] annotate $argv[2]
task $argv[2] annotate $argv[1]
and task
end

View File

@@ -1,5 +1,4 @@
function task-delete
task $argv[1] delete
and task sync
and task
end

View File

@@ -1,5 +1,4 @@
function task-done
task $argv[1] done
and task sync
and task
end

View File

@@ -0,0 +1,3 @@
function taskopen-new
echo "md" | taskopen -A $argv[1] && taskopen -A $argv[1]
end

View File

@@ -0,0 +1,12 @@
📅 Current Date/Time: Sat Dec 6 12:55:57 EST 2025
🚀 Season Start: 2025-11-29 00:00:00
🛑 Season End: 2026-03-04 00:00:00
---
✅ Fortnite C7S1 is **7.93%** complete!
---
]4;0;#0B0E12\]4;1;#671D22\]4;2;#722327\]4;3;#19453B\]4;4;#1B594F\]4;5;#51554A\]4;6;#99322C\]4;7;#82bcb1\]4;8;#5b837b\]4;9;#671D22\]4;10;#722327\]4;11;#19453B\]4;12;#1B594F\]4;13;#51554A\]4;14;#99322C\]4;15;#82bcb1\]10;#82bcb1\]11;#0B0E12\]12;#82bcb1\]13;#82bcb1\]17;#82bcb1\]19;#0B0E12\]4;232;#0B0E12\]4;256;#82bcb1\]708;#0B0E12\📅 Current Date/Time: Sat Dec 6 12:55:57 EST 2025
🚀 Season Start: 2025-11-29 00:00:00
🛑 Season End: 2026-03-04 00:00:00
---
✅ Fortnite C7S1 is **7.93%** complete!
---

View File

@@ -0,0 +1,5 @@
function timetrace-list
timetrace list records today | head -n 6
timetrace list records today | awk 'NR>6 && /^\+/{exit} NR>6' | sort -t '|' -k3,3
timetrace list records today | tail -n 3
end

View File

@@ -1,3 +1,4 @@
function us-to-cad
# qalc -e "$argv[1]\$ to CAD"
qalc "$argv[1]\$ to CAD"
end

View File

@@ -0,0 +1,4 @@
function video-to-gif
# ffmpeg -i $argv[1] -filter_complex "[0:v]setpts=0.5*PTS,fps=24,split [a][b];[a] palettegen [p];[b][p] paletteuse" $argv[2]
ffmpeg -i $argv[1] -filter_complex "[0:v]fps=24,split [a][b];[a] palettegen [p];[b][p] paletteuse" $argv[2]
end

View File

@@ -0,0 +1,10 @@
function vpn-red-hat
if test $argv[1] = 'up'
sudo systemctl start NetworkManager.service
and sleep 3
and nmcli con up id "1 - Red Hat Global VPN" --ask
else if test $argv[1] = 'down'
nmcli con down id "1 - Red Hat Global VPN"
and sudo systemctl stop NetworkManager.service
end
end

View File

@@ -1,7 +1,11 @@
function watson-add-fortnite
set year_month "2020-08"
set start_time "$year_month-$argv[1] $argv[2]"
set end_time "$year_month-$argv[3] $argv[4]"
if test (count $argv) -eq 4
watson add -f "2020-04-$argv[1] $argv[2]" -t "2020-04-$argv[3] $argv[4]" fun +fortnite
watson add -f $start_time -t $end_time fun +fortnite
else
watson add -f "2020-04-$argv[1] $argv[2]" -t "2020-04-$argv[3] $argv[4]" fun +fortnite +$argv[5]
watson add -f $start_time -t $end_time fun +fortnite +$argv[5]
end
end

View File

@@ -0,0 +1,11 @@
function watson-add-game
set year_month (date -u +"%Y-%m")
set start_time "$year_month-$argv[2] $argv[3]"
set end_time "$year_month-$argv[4] $argv[5]"
if test (count $argv) -eq 5
watson add -f $start_time -t $end_time fun +$argv[1]
else
watson add -f $start_time -t $end_time fun +$argv[1] +$argv[6]
end
end

View File

@@ -0,0 +1,5 @@
function wget-all
for url in $argv
wget $url
end
end

View File

@@ -0,0 +1,3 @@
function wget-name
wget $argv[1] -O $argv[2]
end

View File

@@ -1,34 +1,49 @@
# startup [[[ #
# set $term urxvt
# set $term_alt st
set $term kitty
set $term_alt urxvt
#set $term gnome-terminal
# set $term st
# set $term_alt urxvt
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
exec dunst
{{ if eq .chezmoi.hostname "x1-carbon" }}
set $term urxvt
# set $term_alt kitty
set $term_alt st
# set $term_alt urxvt
#exec dunst
exec /usr/lib/notification-daemon-1.0/notification-daemon
exec compton
exec imwheel
exec numlockx on
exec xbacklight -set 10
# exec wal -i "$(/home/kevin/scripts/shuffler \"/home/kevin/Pictures/Backgrounds/dim/non-editing\")"
exec wal -i $(/home/kevin/scripts/shuffler "$HOME/Pictures/Backgrounds/dim/non-editing")
exec wal -i $(/home/kevin/scripts/shuffler "$HOME/Pictures/Backgrounds/dim/editing")
{{ end }}
# exec xrdb ~/.Xresources && grep wallpaper ~/.cache/wal/colors.sh | cut -d\' -f2 | xargs wal -i > /dev/null
exec --no-startup-id i3-msg 'workspace $ws2; exec $term -e fish -c "tmux-attach fortnite"'
# exec --no-startup-id i3-msg 'workspace $ws1; exec $term'
# exec --no-startup-id i3-msg 'workspace $ws2; exec $term -e fish -c "tmux-attach fortnite"'
exec --no-startup-id i3-msg 'workspace $ws3; exec $browser'
exec --no-startup-id i3-msg 'workspace $ws6; exec vesktop'
exec --no-startup-id i3-msg 'workspace $ws6; exec signal-desktop'
# exec --no-startup-id i3-msg 'workspace $ws5; exec $term -e twitchy'
# exec --no-startup-id i3-msg 'workspace $ws6; exec discord'
# exec --no-startup-id i3-msg 'workspace $ws5; exec firefox -P nft'
#exec --no-startup-id i3-msg workspace $ws6; exec discord
#exec --no-startup-id i3-msg 'workspace $ws6; exec signal-desktop'
# exec --no-startup-id i3-msg workspace $ws1; exec $term -e fish -c 'tmux-attach school'
# ]]] startup #
# applications [[[ #
set $mod Mod1
set $browser "firefox"
#set $browser "firefox"
set $browser "google-chrome"
#set $browser_secondary "chromium"
#set $browser_secondary "google-chrome-stable"
# set $browser "chromium"
set $browser_secondary "firefox"
set $scripts_path "/home/kevin/scripts"
# Path to the hands-free voice tooling repo (contains voice.sh).
set $hands_free_tools "$HOME/coding/hands-free-tools"
set $sch_dir "$HOME/Documents/School"
# app shortcuts [[[ #
@@ -48,34 +63,45 @@ bindsym Mod4+Return exec /home/kevin/scripts/dmenu-history -nb "$fg" -nf "$bg" -
# installed.
# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
# bindsym Mod4+b layout tabbed; exec zathura
bindsym Mod4+c exec $browser
# bindsym Mod4+c exec $browser
# bindsym Mod4+$mod+c exec chatterino
#bindsym Mod4+c exec chatterino
bindsym Mod4+c exec pass -c finances/metamask
bindsym Mod4+$mod+c exec $browser
# bindsym Mod4+e exec notify-send "HPS Word Count" "$(pdftotext /home/kevin/school/latex-notes/hps/essay.pdf - | wc -w)"
# bindsym Mod4+e exec emacs
bindsym Mod4+e exec ~/scripts/twem
# bindsym Mod4+e exec ~/scripts/twem
# bindsym Mod4+f exec firefox
bindsym Mod4+f exec firefox --private-window
# bindsym Mod4+f exec firefox --private-window
# bindsym Mod4+f exec firefox --private-window google.ca
# bindsym Mod4+$mod+f exec printf 'Kevin@fosstodon.org' | xclip -selection clipboard
bindsym Mod4+h exec sleep .2 && xdotool type '.hint'
bindsym Mod4+$mod+h exec $type_delay_cmd && xdotool type 'kevin.mok@live.ca'
# bindsym Mod4+h exec sleep .2 && xdotool type '.hint'
# bindsym Mod4+$mod+h exec $type_delay_cmd && xdotool type 'kevin.mok@live.ca'
bindsym Mod4+h exec $type_delay_cmd && xdotool type 'kevin.mok@live.ca'
# bindsym Mod4+$mod+h exec sleep .2 && xdotool type '.hint'
bindsym Mod4+$mod+i exec sleep .2 && xdotool type '.info latest'
bindsym Mod4+l exec ~/scripts/dmenu-twitch
# bindsym Mod4+m exec $term -e ~/scripts/vim-man
bindsym Mod4+m exec $type_delay_cmd && xdotool type 'me@kevin-mok.com'
# bindsym Mod4+$mod+m exec pass -c uoft/markus
bindsym Mod4+n exec $term -e nvim
# bindsym Mod4+$mod+o exec xset dpms force off
bindsym Mod4+o exec xclip -selection clipboard ~/.password-store/social/gmail && $type_delay_cmd && xdotool key 'Control_L+v'
# bindsym Mod4+o exec $type_delay_cmd && xdotool key 'Control_L+v'
bindsym Mod4+$mod+o exec xset dpms force off
bindsym $mod+Mod4+o workspace $ws11; exec obs
# bindsym Mod4+p workspace $ws4; exec pgadmin3
# bindsym Mod4+p exec pycharm
bindsym Mod4+p exec sleep .2 && xdotool type '.catch '
bindsym Mod4+$mod+p exec passmenu
#bindsym Mod4+p exec passmenu
bindsym Mod4+p exec /home/kevin/scripts/passmenu
# # bindsym Mod4+p exec sleep .2 && xdotool type '.catch '
# bindsym Mod4+$mod+p exec notify-send "ping" "$(ping -c 3 -W 1 8.8.8.8)"
# bindsym Mod4+q exec qdirstat
bindsym Mod4+q exec printf 'emad1 ' | xclip -selection clipboard && $type_delay_cmd && xdotool key 'Control_L+v'
bindsym Mod4+r exec $term -e ranger
bindsym Mod4+$mod+r exec notify-send "watson restart" "$(watson restart)"
bindsym Mod4+r exec $type_delay_cmd && xdotool type 'kmok@redhat.com'
bindsym Mod4+$mod+r exec pass show -c career/redhat && $type_delay_cmd && xdotool key 'Control_L+v'
# bindsym Mod4+$mod+r exec $term -e ranger
# bindsym Mod4+$mod+r exec notify-send "watson restart" "$(watson restart)"
bindsym Mod4+$mod+s exec $type_delay_cmd && xdotool type 'https://smol.gq/'
bindsym Mod4+t exec xclip -selection clipboard ~/.password-store/social/trapbot && $type_delay_cmd && xdotool key 'Control_L+v'
bindsym Mod4+$mod+t exec xclip -selection clipboard ~/.password-store/social/trapbot && $type_delay_cmd && xdotool key 'Control_L+v'
bindsym Mod4+u exec $type_delay_cmd && xdotool type 'kevin.mok@mail.utoronto.ca'
# bindsym Mod4+$mod+u exec pass -c uoft/acorn
# bindsym Mod4+w exec notify-send "watson status" "$(watson status)"
@@ -84,16 +110,28 @@ bindsym Control+Mod4+w exec $term -e nvim /home/kevin/.config/watson/state.tmp
# bindsym Mod4+x exec $swex
bindsym Control+$mod+x exec $type_delay_cmd && xdotool type 'http://codm.ataraxy.tk/'
bindsym Mod4+z exec cliqz
bindsym Pause exec ~/scripts/twem
# screenshot [[[ #
set $screenshot_folder "/home/kevin/Pictures/screenshots/desktop/unsorted"
set $scripts_path "/home/kevin/scripts"
{{ if .ext_kb }}
bindsym Mod4+x exec ~/scripts/xmodmap-custom
bindsym Print --release exec "scrot -s ~/tmp/screenshot-$(date +%F_%T).png -e 'xclip -selection c -t image/png < $f'"
bindsym Control+Print --release exec "scrot -u ~/tmp/screenshot-$(date +%F_%T).png -e 'xclip -selection c -t image/png < $f'"
# bindsym Mod4+x exec ~/scripts/xmodmap-custom
bindsym Mod4+x exec notify-send "xmodmap" "$(~/scripts/xmodmap-custom)"
# bindsym Mod4+e exec notify-send "HPS Word Count" "$(pdftotext /home/kevin/school/latex-notes/hps/essay.pdf - | wc -w)"
#bindsym Print --release exec "scrot -s $screenshot_folder/screenshot-$(date +%F_%T).png -e 'xclip -selection c -t image/png < $f'"
#bindsym Print --release exec --no-startup-id scrot -s "/home/kevin/Pictures/screenshots/desktop/unsorted/screenshot-$(date +%F_%T).png" -e 'xclip -selection c -t image/png < $f'
bindsym Print --release exec "maim -su | tee ~/Pictures/screenshots/desktop/unsorted/screenshot-$(date +%F_%T).png | xclip -selection clipboard -t image/png"
bindsym Control+Print --release exec "scrot -u ~/Pictures/screenshots/desktop/unsorted/screenshot-$(date +%F_%T).png -e 'xclip -selection c -t image/png < $f'"
{{ else }}
bindsym Mod4+x exec xmodmap ~/.Xmodmap-laptop && xset r rate $XSET_DELAY $XSET_RATE
bindsym Control+$mod+p --release exec "scrot -s /tmp/screenshot-$(date +%F_%T).png -e 'xclip -selection c -t image/png < $f'"
bindsym Control+Shift+p --release exec "scrot -u /tmp/screenshot-$(date +%F_%T).png -e 'xclip -selection c -t image/png < $f'"
bindsym Control+p --release exec "scrot -s ~/tmp/screenshot-$(date +%F_%T).png -e 'xclip -selection c -t image/png < $f'"
bindsym Control+$mod+p --release exec "scrot -u ~/tmp/screenshot-$(date +%F_%T).png -e 'xclip -selection c -t image/png < $f'"
{{ end }}
# ]]] screenshot #
# ]]] app shortcuts #
# redshift [[[ #
@@ -109,7 +147,7 @@ bindsym $mod+Mod4+grave exec redshift -x
# backlight [[[ #
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
{{ if eq .chezmoi.hostname "x1-carbon" }}
bindsym Shift+F1 exec xbacklight -set 10
bindsym Shift+F2 exec xbacklight -set 20
bindsym Shift+F3 exec xbacklight -set 30
@@ -119,7 +157,7 @@ bindsym Shift+F6 exec xbacklight -set 60
bindsym Shift+F7 exec xbacklight -set 70
bindsym Shift+F8 exec xbacklight -set 80
bindsym Shift+F9 exec xbacklight -set 90
bindsym Shift+F0 exec xbacklight -set 100
bindsym Shift+F10 exec xbacklight -set 100
bindsym Control+$mod+plus exec xbacklight -inc 2
bindsym Control+$mod+minus exec xbacklight -dec 2
@@ -130,8 +168,11 @@ bindsym Control+$mod+q exec sudo systemctl stop netctl-auto@wlp3s0.service
# ]]] backlight #
for_window [class="chatterino"] floating enable
for_window [class="Peek"] floating enable
for_window [title="Qalculate!"] floating enable
for_window [window_role="alert"] floating enable
no_focus [window_role="alert"]
# ]]] applications #
@@ -177,8 +218,8 @@ for_window [class="^.*"] border pixel 3
# gaps bottom 0
gaps inner 0
gaps outer 0
{{ if eq .chezmoi.fullHostname "nzxt" }}
border_radius $border_radius
{{ if eq .chezmoi.hostname "nzxt" }}
# border_radius $border_radius
{{ end }}
# other gaps [[[ #
@@ -235,7 +276,7 @@ bindsym $mod+minus move workspace to output left
bindsym $mod+plus move workspace to output right
# move focused window
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
{{ if eq .chezmoi.hostname "x1-carbon" }}
bindsym Control+Shift+h move left 50px
bindsym Control+Shift+j move down 50px
bindsym Control+Shift+k move up 50px
@@ -278,7 +319,7 @@ bindsym Control+$mod+a floating enable; resize set 400px 150px; move absolute po
set $make_st_script "/home/kevin/st/make-st.sh"
# test
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
{{ if eq .chezmoi.hostname "x1-carbon" }}
bindsym Control+Shift+q exec wal -i $($scripts_path/shuffler "$HOME/Pictures/Backgrounds/bright/editing") && $make_st_script
bindsym Control+Shift+w exec wal -i $($scripts_path/shuffler "$HOME/Pictures/Backgrounds/dim/non-editing") && $make_st_script
bindsym Control+$mod+z exec feh --bg-fill ~/Pictures/Backgrounds/dim/black.jpg
@@ -293,56 +334,87 @@ bindsym Control+$mod+y exec wal -i $($scripts_path/shuffler "$HOME/Pictures/Back
# ws names [[[ #
set $ws1 "1 "
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
set $ws1 "1  "
{{ if eq .chezmoi.hostname "x1-carbon" }}
set $secondary "HDMI2"
set $main "eDP1"
{{ else if eq .chezmoi.fullHostname "nzxt" }}
{{ else if eq .chezmoi.hostname "nzxt" }}
set $secondary "DVI-I-1"
set $main "HDMI-0"
{{ end }}
workspace $ws1 output $main
bindsym $mod+F1 workspace $ws1; exec $term
set $secondary "DVI-D-0"
set $main "HDMI-0"
set $ws2 "2 "
# workspace $ws1 output $main
workspace $ws1 output $secondary
bindsym $mod+F1 workspace $ws1; exec $term
bindsym Mod4+$mod+F1 workspace $ws1; exec chatterino
bindsym Control+Shift+F1 workspace $ws1; exec $term -e fish -c 'tmux-attach school'
# bindsym Control+Shift+F1 workspace $ws1; exec $term -e fish -c 'tmux-attach nft'
set $ws2 "2  "
set $work_laptop_ip "192.168.0.11"
workspace $ws2 output $secondary
bindsym $mod+F2 workspace $ws2; exec $term
# bindsym Control+Shift+F2 workspace $ws2; exec $term -e fish -c 'tmux-attach codm'
bindsym Control+Shift+F2 workspace $ws2; exec $term -e fish -c 'tmux-attach fortnite'
bindsym Control+$mod+Shift+F2 workspace $ws2; exec $term -e fish -c 'tmux-attach crimson'
# bindsym Control+Shift+F2 workspace $ws2; exec $term -e fish -c 'tmux-attach crimson'
# bindsym Control+$mod+Shift+F2 workspace $ws2; exec $term -e fish -c 'tmux-attach codm'
# bindsym Control+Shift+F2 workspace $ws2; exec $term -e mosh kmok@$work_laptop_ip -- tmux a -t nzxt
# bindsym Control+Shift+F2 workspace $ws2; exec $term -e fish -c 'tmux-attach fortnite'
# bindsym Control+Shift+F2 workspace $ws2; exec $term -e fish -c 'tmux-attach nft-2'
bindsym Control+Shift+F2 workspace $ws2; exec $term -e fish -c 'tmux-attach school-2'
bindsym $mod+Shift+F2 workspace $ws2; exec $term -e mosh kmok@$work_laptop_ip -- tmux a -t nzxt-2
set $ws3 "3 "
# set $ws3 "3 "
# ws3 [[[ #
#set $ws3 "3  "
set $ws3 "3  "
# workspace $ws3 output $main
bindsym $mod+F3 workspace $ws3; exec $browser
# bindsym $mod+F3 workspace $ws3; exec $browser
# bindsym $mod+F3 exec $browser; move container to workspace $ws3; workspace $ws3
bindsym $mod+F3 exec $browser
bindsym Control+Shift+F3 workspace $ws3; exec firefox -P work
# bindsym Mod4+$mod+F3 workspace $ws3; exec $browser_secondary
bindsym Mod4+$mod+F3 workspace $ws3; exec firefox -P default
# bindsym Mod4+$mod+F3 workspace $ws3; exec firefox -P work
# bindsym Mod4+b workspace $ws3; layout stacked; exec $term -e fish -c "buku-fzf"
# bindsym Mod4+$mod+b workspace $ws3; layout stacked; exec $term -e fish -c "buku-fzf fq"
# bindsym Mod4+b layout stacked; exec $term -e fish -c "buku-fzf"
# bindsym Mod4+$mod+b layout stacked; exec $term -e fish -c "buku-fzf fq"
bindsym Mod4+b layout tabbed; exec $term -e fish -c "buku-fzf"
bindsym Mod4+$mod+b layout tabbed; exec $term -e fish -c "buku-fzf fq"
bindsym Mod4+g workspace $ws3; layout tabbed; exec gimp
# bindsym Mod4+g workspace $ws3; layout tabbed; exec gimp
set $ws4 "4 "
# ]]] ws3 #
set $ws4 "4 󱓧 "
workspace $ws4 output $secondary
bindsym $mod+F4 workspace $ws4; exec $term
# bindsym $mod+F4 workspace $ws4; exec $term
# bindsym Control+Shift+F4 workspace $ws4; exec $term -e fish -c 'tmux-attach misc'
bindsym $mod+F4 workspace $ws4; exec $term -e fish -c 'tmux-attach misc'
# bindsym Mod4+$mod+F4 workspace $ws4; exec urxvt -e ranger $screenshot_folder
bindsym Mod4+$mod+F4 workspace $ws4; exec kitty ranger $screenshot_folder
bindsym Mod4+e workspace $ws4; exec libreoffice ~/Documents/expenses/investments.ods
bindsym Mod4+g workspace $ws4; layout tabbed; exec gimp
set $ws5 "5 "
# ws5 [[[ #
set $ws5 "5  "
# workspace $ws5 output $secondary
assign [class="Steam"] $ws5
bindsym $mod+F5 workspace $ws5; exec $browser
bindsym $mod+Mod4+F5 workspace $ws5; exec firefox --private-window
# bindsym $mod+Mod4+F5 workspace $ws5; exec firefox -P work
bindsym $mod+Mod4+F5 workspace $ws5; exec firefox -P nft
# bindsym $mod+Mod4+F5 workspace $ws5; exec firefox --private-window
bindsym Control+Shift+F5 workspace $ws5; exec firefox -P work
bindsym Mod4+f workspace $ws5; exec firefox --private-window google.ca
bindsym $mod+Shift+F5 workspace $ws5; exec $browser_secondary
# bindsym Mod4+g workspace $ws5; layout stacking; exec $term -e steam
# bindsym Mod4+g workspace $ws5; layout tabbed; exec gimp
# bindsym Mod4+g workspace $ws5; exec mgba-qt
bindsym Mod4+i workspace $ws5; exec idea
# bindsym Mod4+i workspace $ws5; exec idea
# bindsym Mod4+m workspace $ws5; layout tabbed; exec $term -e ~/.minetest/minetest/bin/minetest
bindsym Mod4+$mod+t workspace $ws5; exec thunderbird
# bindsym Mod4+$mod+t workspace $ws5; exec thunderbird
# bindsym Mod4+$mod+w workspace $ws5; exec $term -e twitchy
bindsym Mod4+w workspace $ws5; exec $term -e twitchy
# bindsym Mod4+w workspace $ws5; exec $term -e twitchy
bindsym Mod4+5 workspace $ws5; exec godot
bindsym Mod4+F5 workspace $ws5; exec cd ~/coding/ada-mario && godot -e
# for_window [class="Move_mouse_with_head"] floating enable; move absolute position 0 0
@@ -352,40 +424,50 @@ for_window [class="ada-mario"] floating enable
# for_window [class="ada-mario"] move absolute position 930 480
for_window [class="ada-mario"] move absolute position 640 0
set $ws6 "6 "
# ]]] ws5 #
# ws6 [[[ #
set $ws6 "6  "
workspace $ws6 output $secondary
assign [class="Slack"] $ws6
# bindsym Mod4+$mod+d workspace $ws6; exec discord
# bindsym Mod4+d workspace $ws6; exec riot-desktop
bindsym Mod4+d workspace $ws6; exec firefox -new-window https://riot.im/app
bindsym Mod4+$mod+d workspace $ws6; exec discord
# bindsym Mod4+d workspace $ws6; exec discord
# bindsym Mod4+$mod+d workspace $ws6; exec riot-desktop
# bindsym Mod4+d workspace $ws6; exec firefox --new-window https://discordapp.com/channels/430798446723727367/443950744996020228
# bindsym Mod4+i workspace $ws6; exec firefox -new-window https://riot.im/app
bindsym Mod4+d workspace $ws6; exec vesktop
bindsym Mod4+$mod+d workspace $ws6; exec element-desktop
bindsym Mod4+i workspace $ws6; exec signal-desktop
# bindsym Mod4+d workspace $ws6; exec firefox -new-window https://riot.im/app
bindsym Mod4+k workspace $ws6; exec slack
# bindsym Mod4+i workspace $ws6; exec $term -e fish -c 'mosh kmok@$work_laptop_ip -- tmux a -t weechat'
# bindsym Mod4+i workspace $ws6; exec $term -e fish -c 'mosh kmok@$work_laptop_ip -- tmux a -t weechat'
# bindsym Mod4+i workspace $ws6; exec $term -e fish -c 'tmux-attach weechat'
set $ws7 "7 "
# ]]] ws6 #
set $ws7 "7  "
workspace $ws7 output $secondary
# bindsym $mod+F7 workspace $ws7; exec $term
bindsym $mod+F7 workspace $ws7; exec $term -e mosh --ssh='ssh -p 399' kevin@165.22.239.234 tmux a
# bindsym $mod+F7 workspace $ws7; exec $term -e mosh kmok@$work_laptop_ip -- tmux a -t nzxt
bindsym $mod+F7 workspace $ws7; exec $term
bindsym Mod4+$mod+F7 workspace $ws7; exec $term -e mosh --ssh='ssh -p 399' kevin@165.22.239.234 tmux a
bindsym $mod+Shift+F7 workspace $ws7; exec chromium https://txstreet.com/v/eth
bindsym Mod4+a workspace $ws7; exec android-file-transfer
# bindsym Mod4+v workspace $ws7; exec VBoxManage startvm "369-a1"
set $ws8 "8 "
set $ws8 "8  "
# assign [class="jetbrains-"] $ws8
workspace $ws8 output $secondary
# bindsym $mod+F8 workspace $ws8; exec $term
# bindsym $mod+F8 workspace $ws8; exec $term -e tmux a -t journal
bindsym $mod+F8 workspace $ws8; exec $term -e fish -c 'tmux-attach journal'
bindsym Mod4+$mod+F8 workspace $ws8; exec libreoffice ~/Documents/sit-stand/sit-stand.ods
bindsym $mod+Shift+F8 workspace $ws8; exec libreoffice ~/Documents/red-hat/workday.ods
set $ws9 "9 "
set $ws9 "9  "
workspace $ws9 output $secondary
# bindsym $mod+F9 workspace $ws9; exec $term
# bindsym $mod+F9 workspace $ws9; exec $term -e tmux a -t config
bindsym $mod+F9 workspace $ws9; exec $term -e fish -c 'tmux-attach config'
set $ws10 "10 "
set $ws10 "10  "
# set $ws10 "10 🎵"
assign [class="spotify"] $ws10
workspace $ws10 output $secondary
@@ -394,13 +476,19 @@ set $hp 2
bindsym Mod4+v workspace $ws10; exec $term -e alsamixer -c 1
# bindsym Mod4+$mod+c workspace $ws10; exec $term -e cava
# bindsym Mod4+h workspace $ws10; exec $term -e alsamixer -c $hp
# bindsym Mod4+s workspace $ws10; exec ~/scripts/spotify-clean
bindsym Mod4+s workspace $ws10; exec spotify
set $ws11 "11 "
set $ws11 "11  "
# set $ws11 "11 📊"
# assign [class="Summoners War Exporter"] $ws11
workspace $ws11 output $secondary
bindsym $mod+F11 workspace $ws11; exec $term -e htop -s PERCENT_CPU
# bindsym $mod+F11 workspace $ws11; exec $term -e htop -s PERCENT_CPU
#bindsym $mod+F11 workspace $ws11; exec $term -e htop -s PERCENT_MEM
bindsym $mod+F11 workspace $ws11; exec $term -e btop
# bindsym Mod4+$mod+F11 workspace $ws11; exec $term -e fish -c 'tmux-attach backup'
bindsym Control+Shift+F11 workspace $ws11; exec $term -e fish -c 'tmux-attach backup'
#bindsym Mod4+t workspace $ws11; exec nordvpn connect && transmission-gtk
# bindsym $mod+F11 workspace $ws11; exec $term -e gotop -m
# bindsym Mod4+a workspace $ws11; exec antimicro
@@ -476,8 +564,9 @@ bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcu
# bar vars [[[ #
# set $sb_font Hack NF Bold
set $sb_font Hack Nerd Font Mono Bold
# set $sb_font EmojiOne
set $sb_font DejaVuSansMono Nerd Font Mono Bold
# set $sb_font DejaVuSansMono Nerd Font Mono Bold
set $black #000000
set $white #ffffff
for_window [class="Yad"] floating enable
@@ -502,11 +591,13 @@ set $bar_trans 00
set $main_ws_trans aa
bar {
i3bar_command i3bar -t
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
{{ if eq .chezmoi.hostname "x1-carbon" }}
font pango:$sb_font 17
{{ else }}
# font pango:$sb_font 17
font pango:$sb_font 16
#font pango:$sb_font 16:pixelsize=5
#font pango:$sb_font 16
font pango:$sb_font 30
{{ end }}
colors {
# 0 (transparent) -> 255 (opaque) in hex
@@ -522,6 +613,7 @@ bar {
# status_command i3blocks -c ~/.config/i3blocks/i3blocks.conf
status_command 2>/tmp/i3blocks.err i3blocks -vvv -c ~/.config/i3blocks/i3blocks.conf | tee /tmp/i3blocks.out
output $main
# output $secondary
wheel_up_cmd nop
wheel_down_cmd nop
}
@@ -531,11 +623,14 @@ bar {
# secondary bar [[[ #
bar {
# output $main
output $secondary
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
{{ if eq .chezmoi.hostname "x1-carbon" }}
font pango:$sb_font 18
{{ else }}
font pango:$sb_font 20
# font pango:$sb_font 21
font pango:$sb_font 30
#font pango:$sb_font 18
{{ end }}
# output $main
i3bar_command i3bar -t
@@ -592,6 +687,17 @@ bindsym XF86AudioNext exec "dbus-send --print-reply --dest=org.mpris.MediaPlayer
# ]]] fn key #
# voice dictation [[[ #
# One-tap toggle for voice dictation using Scroll Lock.
bindsym Scroll_Lock exec "$hands_free_tools/voice.sh toggle"
# (Optional panic kill, only if you still want it)
# bindsym Control+Scroll_Lock exec "$hands_free_tools/voice.sh quit"
# (Optional Vim-safe stop, only if stop-vim exists and you actually use it)
# bindsym $mod+Shift+v exec "$hands_free_tools/voice.sh stop-vim"
# ]]] media keys #
# vim: fdm=marker ft=i3.go-template

View File

@@ -35,8 +35,9 @@ markup=pango
[time]
label=
# command=date '+%H:%M.%a-%m-%d'
command=date '+%H:%M.%a-%m-%d'
interval=30
interval=1
color=#acc0cd
[spotify]

View File

@@ -11,18 +11,48 @@ markup=pango
color=#cbe4ff
# ]]] Global properties #
# [ticker]
# label=$
# TICKER=GME
# interval=30
# # interval=10
# sys.monitoring [[[ #
#[temperature]
#label=
#interval=5
#[cpu_usage]
#label=
#interval=5
#[memory]
#label=
## color=#3da061
#interval=2
# ]]] sys.monitoring #
# volume/spotify [[[ #
[spotify]
# command=python ~/linux-config/configs/i3blocks-scripts/spotify.py
# label=
label=
# label=🎧
# green
# color=#198c19
# aqua
# color=#2d7272
interval=5
#[spotify]
##command=python ~/linux-config/configs/i3blocks-scripts/spotify.py
#command=/home/kevin/.config/i3blocks/scripts/spotify
## label=
#label=
## # label=🎧
## # green
## # color=#198c19
## # aqua
## # color=#2d7272
#interval=5
# [spotify]
# label=
# LONG_NAME=
# SHORT_NAME=
# interval=5
[volume]
interval=once
@@ -34,26 +64,24 @@ interval=60
# time [[[ #
[calendar]
interval=30
label=
{{ if eq .chezmoi.fullHostname "nzxt" }}
DATEFMT=+%H:%M.%a-%m-%d
{{ else }}
DATEFMT=+%H:%M
{{ end }}
interval=1
#label=
# DATEFMT=+%H:%M.%a-%m-%d
# DATEFMT=+%H:%M
#DATEFMT=+%H:%M
# SHORTFMT=+%H:%M:%S
SHORTFMT=+%H:%M.%a-%m-%d
HEIGHT=180
WIDTH=220
#SHORTFMT=+%H:%M.%a-%m-%d
#HEIGHT=180
#WIDTH=220
# ]]] time #
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
{{ if eq .chezmoi.hostname "x1-carbon" }}
[temperature]
label=
interval=5
[name]
label=
interval=30
# [name]
# label=
# interval=30
{{ end }}

View File

@@ -13,28 +13,143 @@ color=#cbe4ff
# ]]] global #
# ticker [[[ #
# [ticker]
# label=SOL
# TICKER=SOL-USD
# interval=30
# [kraken]
# label=BLUR
# TICKER=BLURUSD
# interval=30
# [kraken]
# label=ARB
# TICKER=ARBUSD
# interval=30
#[dexscreener]
#label=HERO
##CHAIN=solana
##PAIR=B4Vwozy1FGtp8SELXSXydWSzavPUGnJ77DURV2k4MhUV
#command=/home/kevin/.config/i3blocks/scripts/dexscreener abstract 0x3771b51b5a705338fa19702f249afcaa94b0cd8c
#interval=5
#[kraken]
#label=BTC
##TICKER=BTCUSDC
##command=/home/kevin/.config/i3blocks/scripts/kraken BTCUSDC
#command=/home/kevin/.config/i3blocks/scripts/kraken BTCUSDC
#interval=30
[kraken]
label=ETH
#TICKER=ETHUSDC
command=/home/kevin/.config/i3blocks/scripts/kraken ETHUSDC
interval=30
## [ticker]
## label=btc
## ticker=btc-usd
## interval=30
#[kraken]
#label=SOL
##TICKER=SOLUSD
#command=/home/kevin/.config/i3blocks/scripts/kraken SOLUSD
#interval=30
# [kraken]
# label=SEI
# TICKER=SEIUSD
# interval=30
#[dexscreener]
#label=PIXL
##CHAIN=ethereum
##PAIR=0x31c0ba10e4e12be6cdceb612e5e829d977532bfc
#command=/home/kevin/.config/i3blocks/scripts/dexscreener ethereum 0x31c0ba10e4e12be6cdceb612e5e829d977532bfc
#interval=30
#[dexscreener]
#label=PENGU
##CHAIN=solana
##PAIR=B4Vwozy1FGtp8SELXSXydWSzavPUGnJ77DURV2k4MhUV
#command=/home/kevin/.config/i3blocks/scripts/dexscreener solana B4Vwozy1FGtp8SELXSXydWSzavPUGnJ77DURV2k4MhUV
#interval=5
#[dexscreener-fdv]
#label=TRUMP
#command=/home/kevin/.config/i3blocks/scripts/dexscreener-fdv solana a8nphpcjqtqhdquk35uj9hy2ysgxfkczgunwvkd3k7vc
#interval=30
#[dexscreener]
#label=ANIME
#command=/home/kevin/.config/i3blocks/scripts/dexscreener arbitrum 0xbbf3209130df7d19356d72eb8a193e2d9ec5c234
#interval=30
#[dexscreener]
#label=TRUMP
#command=/home/kevin/.config/i3blocks/scripts/dexscreener solana a8nphpcjqtqhdquk35uj9hy2ysgxfkczgunwvkd3k7vc
#interval=30
#[kraken]
#label=AVAX
##TICKER=AVAXUSD
#command=/home/kevin/.config/i3blocks/scripts/kraken AVAXUSD
#interval=30
#[dexscreener]
#label=LOCK
#CHAIN=solana
#PAIR=AtWMAA6T9t8cq8XCccCFPGDNNQYXhScuNuY6WVRi7FKe
#interval=30
# [ticker]
# label=SPY
# TICKER=SPY
# interval=30
# [ticker]
# label=DAQ
# TICKER=^IXIC
# interval=30
# ]]] ticker #
# volume/spotify [[[ #
{{ if eq .chezmoi.fullHostname "nzxt" }}
[volume]
interval=once
signal=1
interval=60
[spotify]
label=
LONG_NAME=
SHORT_NAME=
interval=5
{{ end }}
# [spotify]
# label=
# LONG_NAME=
# SHORT_NAME=
# interval=5
# [spotify]
# # command=python ~/linux-config/configs/i3blocks-scripts/spotify.py
# # label=
# label=
# # label=🎧
# # green
# # color=#198c19
# # aqua
# # color=#2d7272
# interval=5
# ]]] volume/spotify #
# laptop [[[ #
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
{{ if eq .chezmoi.hostname "x1-carbon" }}
[battery]
label=⚡
label=⚡
interval=30
[wifi]
@@ -47,61 +162,48 @@ label=
interval=5
{{ end }}
# ]]] laptop #
# time [[[ #
[calendar]
interval=30
label=
{{ if eq .chezmoi.fullHostname "nzxt" }}
DATEFMT=+%H:%M
{{ else }}
DATEFMT=+%H:%M.%a-%m-%d
{{ end }}
# SHORTFMT=+%H:%M:%S
HEIGHT=180
WIDTH=220
# ]]] time #
# sys.monitoring [[[ #
{{ if eq .chezmoi.fullHostname "nzxt" }}
# [wifi]
# label=
# instance=wlp4s0
# interval=10
[temperature]
label=
interval=5
# ]]] laptop #
# unbold this?
# [load_average]
# label=
# time [[[ #
[calendar]
interval=1
#label=
# DATEFMT=+%H:%M
# DATEFMT=+%H:%M.%a-%m-%d
# SHORTFMT=+%H:%M:%S
#HEIGHT=180
#WIDTH=220
# ]]] time #
# sys.monitoring [[[ #
# [temperature]
# label=
# interval=5
# color=#990000
{{ end }}
[cpu_usage]
label=
interval=5
# [cpu_usage]
# label=
# interval=5
{{ if eq .chezmoi.fullHostname "nzxt" }}
[memory]
label=
# color=#3da061
interval=5
# [memory]
# label=
# # color=#3da061
# interval=5
# ]]] sys.monitoring #
# name [[[ #
[name]
label=
interval=30
{{ end }}
# [name]
# label=
# interval=30
# ]]] name #

View File

@@ -24,12 +24,16 @@ my $short_text;
my $bat_number = $ENV{BLOCK_INSTANCE} || 0;
# read the first line of the "acpi" command output
open (ACPI, "acpi -b | grep 'Battery $bat_number' |") or die;
open (ACPI, "acpi -b 2>/dev/null| grep 'Battery $bat_number' |") or die;
$acpi = <ACPI>;
close(ACPI);
# fail on unexpected output
if ($acpi !~ /: (\w+), (\d+)%/) {
if (not defined($acpi)) {
# don't print anything to stderr if there is no battery
exit(0);
}
elsif ($acpi !~ /: ([\w\s]+), (\d+)%/) {
die "$acpi\n";
}

View File

@@ -2,8 +2,11 @@
WIDTH=${WIDTH:-200}
HEIGHT=${HEIGHT:-200}
DATEFMT=${DATEFMT:-"+%a %d.%m.%Y %H:%M:%S"}
SHORTFMT=${SHORTFMT:-"+%H:%M:%S"}
#DATEFMT=${DATEFMT:-"+%a %d.%m.%Y %H:%M:%S"}
#DATEFMT=${DATEFMT:-"+ %a %-m/%d %H:%M"}
#SHORTFMT=${SHORTFMT:-"+%H:%M:%S"}
DATEFMT=${DATEFMT:-"+%H:%M"}
SHORTFMT=${SHORTFMT:-"+%H:%M"}
OPTIND=1
while getopts ":f:W:H:" opt; do

View File

@@ -0,0 +1,6 @@
#!/bin/bash
. "/home/kevin/.cache/wal/colors.sh"
#ticker=$(~/scripts/dexscreener $CHAIN $PAIR)
ticker=$(~/scripts/dexscreener $1 $2)
printf "%s\n\n%s\n" "$ticker" "$color7"

View File

@@ -0,0 +1,6 @@
#!/bin/bash
. "/home/kevin/.cache/wal/colors.sh"
#ticker=$(~/scripts/dexscreener $CHAIN $PAIR)
ticker=$(~/scripts/dexscreener-fdv $1 $2)
printf "%s\n\n%s\n" "$ticker" "$color7"

View File

@@ -0,0 +1,6 @@
#!/bin/bash
. "/home/kevin/.cache/wal/colors.sh"
#ticker=$(~/scripts/dexscreener $CHAIN $PAIR)
ticker=$(~/scripts/dexscreener-mc $1 $2)
printf "%s\n\n%s\n" "$ticker" "$color7"

View File

@@ -0,0 +1,4 @@
#!/bin/bash
. "/home/kevin/.cache/wal/colors.sh"
printf "Kevin\n\n%s\n" "$color7"

View File

@@ -0,0 +1,6 @@
#!/bin/bash
. "/home/kevin/.cache/wal/colors.sh"
#ticker=$(~/scripts/kraken $TICKER)
ticker=$(~/scripts/kraken $1)
printf "%s\n\n%s\n" "$ticker" "$color7"

View File

@@ -9,6 +9,8 @@ case "$BLOCK_BUTTON" in
esac
. "/home/kevin/.cache/wal/colors.sh"
long_title=$(spotify-now -i "$LONG_NAME" -p '' -e '' | sed 's/&/&amp;/g')
short_title=$(spotify-now -i "$SHORT_NAME" -p '' -e '' | sed 's/&/&amp;/g')
#long_title=$(spotify-now -i "$LONG_NAME" -p '' -e '' | sed 's/&/&amp;/g')
#short_title=$(spotify-now -i "$SHORT_NAME" -p '' -e '' | sed 's/&/&amp;/g')
long_title=$(spotify-now)
short_title=$(spotify-now)
printf "$long_title\n$short_title\n%s\n" "$color7"

View File

@@ -2,6 +2,6 @@
. "/home/kevin/.cache/wal/colors.sh"
temps="$(sensors | rg 'temp1:.*' | awk '{ print $2 }' | rg -o '\d{2}' | \
sort -r | sed 's/$/°C/' | tr '\n' ' ' | xargs)"
printf "%s\n\n%s\n" "$temps" "$color7"
# Read from k10temp's Tctl sensor for AMD CPU temperature
temp="$(sensors | rg 'Tctl:' | awk '{ print $2 }' | rg -o '\d{2}' | sed 's/$/°C/')"
printf "%s\n\n%s\n" "$temp" "$color7"

View File

@@ -0,0 +1,5 @@
#!/bin/bash
. "/home/kevin/.cache/wal/colors.sh"
ticker=$(~/scripts/ticker $TICKER)
printf "%s\n\n%s\n" "$ticker" "$color7"

View File

@@ -1,6 +1,22 @@
#!/bin/bash
. "/home/kevin/.cache/wal/colors.sh"
printf "$(date '+%H:%M.%a-%m-%d')\n\n%s\n" "$color7"
#. "/home/kevin/.cache/wal/colors.sh"
#printf "$(date '+%H:%M.%a-%m-%d')\n\n%s\n" "$color7"
# echo "<span foreground=\"%s\">$(date '+%H:%M.%a-%m-%d')%s</span>" "$color2"
# printf "%s" "$color2"
# Load colors from pywal cache
. "/home/kevin/.cache/wal/colors.sh"
# Define the date format matching the output in your screenshot (e.g., Sat 12/06 12:46)
#DATE_FORMAT='+%a %m/%d %H:%M'
DATE_FORMAT='%H:%M'
# Use Pango markup to wrap the entire string, applying the color,
# and explicitly defining the icon () and the date output.
# The icon is U+F017.
printf "<span foreground=\"%s\"> %s</span>\n" "$color7" "$(date "$DATE_FORMAT")"
# The next two lines are optional for i3blocks but usually required for color output:
printf "\n" # Short text (optional)
printf "%s\n" "$color7" # Color (optional, but good practice)

View File

@@ -32,12 +32,14 @@ SCONTROL=${SCONTROL:-""}
# }}} default vars #
AUDIO_DELTA=${AUDIO_DELTA:-5}
AUDIO_DELTA=${AUDIO_DELTA:-3}
# AUDIO_DELTA=${AUDIO_DELTA:-2}
# AUDIO_DELTA=${AUDIO_DELTA:-1}
# LONG_FORMAT=${LONG_FORMAT:-'${SYMB} ${VOL}% [${INDEX}:${NAME}]'}
LONG_FORMAT=${SHORT_FORMAT:-'${SINK_SYMB} ${VOL}%'}
LONG_FORMAT=${SHORT_FORMAT:-'${SINK_SYMB} ${VOL}%'}
# SHORT_FORMAT=${SHORT_FORMAT:-'${SYMB} ${VOL}%[${INDEX}]'}
SHORT_FORMAT=${SHORT_FORMAT:-'${SINK_SYMB} ${VOL}%'}
SHORT_FORMAT=${SHORT_FORMAT:-'${SINK_SYMB} ${VOL}%'}
# flags {{{ #
@@ -90,14 +92,13 @@ done
# functions {{{ #
if [[ -z "$MIXER" ]] ; then
# Use the default ALSA mixer
MIXER="default"
if amixer -D pulse info >/dev/null 2>&1 ; then
MIXER="pulse"
fi
fi
if [[ -z "$SCONTROL" ]] ; then
SCONTROL=$(amixer -D "$MIXER" scontrols | sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" | head -n1)
# Use the 'Master' control
SCONTROL="Master"
fi
CAPABILITY=$(amixer -D $MIXER get $SCONTROL | sed -n "s/ Capabilities:.*cvolume.*/Capture/p")
@@ -140,20 +141,18 @@ esac
# print_format {{{ #
function print_format {
# echo $NAME
case $NAME in
*"USB"*)
SINK_SYMB=""
;;
*"hdmi"*)
SINK_SYMB=""
;;
*"pci"*)
SINK_SYMB=""
;;
esac
# echo "$1" | envsubst '${SYMB}${VOL}${INDEX}${NAME}'
echo "$1" | envsubst '${SINK_SYMB}${VOL}${INDEX}${NAME}'
case $NAME in
*"Fiio"*)
SINK_SYMB=""
;;
*"hdmi"*)
SINK_SYMB=""
;;
*"pci"*)
SINK_SYMB=" "
;;
esac
eval "echo \"$1\""
}
# }}} print_format #
@@ -161,38 +160,25 @@ function print_format {
# print_block {{{ #
function print_block {
for name in INDEX NAME VOL MUTED; do
read $name
done < <(pacmd list-sinks | grep "index:\|name:\|volume: front\|muted:" | grep -A3 '*')
INDEX=$(echo "$INDEX" | grep -o '[0-9]\+')
VOL=$(echo "$VOL" | grep -o "[0-9]*%" | head -1 )
# Use amixer to get volume and mute status
VOL_INFO=$(amixer -D $MIXER get $SCONTROL | grep -m1 -oE '[0-9]+%|\[on\]|\[off\]')
VOL=$(echo "$VOL_INFO" | grep -oE '[0-9]+%' | head -1)
VOL="${VOL%?}"
MUTED=$(echo "$VOL_INFO" | grep -oE '\[on\]|\[off\]')
NAME=$(echo "$NAME")
# NAME=$(echo "$NAME" | sed \
# 's/.*<.*\.\(.*\)>.*/\1/; t;'\
# 's/.*<\(.*\)>.*/\1/; t;'\
# 's/.*/unknown/')
# NAME=$(echo "$NAME" | sed \
# 's/.*<.*\.\(.*\)\..*>.*/\1/; t;')
# Default name for ALSA
NAME=$(amixer -D $MIXER scontrols | sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" | head -n1)
if [[ $USE_ALSA_NAME == 1 ]] ; then
ALSA_NAME=$(pacmd list-sinks |\
awk '/^\s*\*/{f=1}/^\s*index:/{f=0}f' |\
grep "alsa.name\|alsa.mixer_name" |\
head -n1 |\
sed 's/.*= "\(.*\)".*/\1/')
ALSA_NAME=$(amixer -D $MIXER scontrols | sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" | head -n1)
NAME=${ALSA_NAME:-$NAME}
elif [[ $USE_DESCRIPTION == 1 ]] ; then
DESCRIPTION=$(pacmd list-sinks |\
awk '/^\s*\*/{f=1}/^\s*index:/{f=0}f' |\
grep "device.description" |\
head -n1 |\
sed 's/.*= "\(.*\)".*/\1/')
DESCRIPTION=$(amixer -D $MIXER scontrols | sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" | head -n1)
NAME=${DESCRIPTION:-$NAME}
fi
if [[ $MUTED =~ "no" ]] ; then
# Fix mute status check
if [[ $MUTED == "[on]" ]] ; then
SYMB=$AUDIO_HIGH_SYMBOL
[[ $VOL -le $AUDIO_MED_THRESH ]] && SYMB=$AUDIO_MED_SYMBOL
[[ $VOL -le $AUDIO_LOW_THRESH ]] && SYMB=$AUDIO_LOW_SYMBOL
@@ -219,3 +205,141 @@ if [[ $SUBSCRIBE == 1 ]] ; then
print_block
done < <(pactl subscribe | stdbuf -oL grep change)
fi
# Hardware Configuration
#CARD=2
#SINK="alsa_output.pci-0000_30_00.6.analog-stereo"
#FRONT="Front Playback Switch"
#REAR="Surround Playback Switch"
#FRONT_VOL="Front Playback Volume"
#REAR_VOL="Surround Playback Volume"
## Debugging output
#LOG_FILE=~/.audio-toggle.log
#echo "=== $(date) ===" >> $LOG_FILE
## Get current active output (PulseAudio fallback)
#get_active_output() {
## Get full sink info for debugging
#SINK_INFO=$(pacmd list-sinks)
#echo "Full sink info:" >> $LOG_FILE
#echo "$SINK_INFO" >> $LOG_FILE
## Try alternative port detection method
#PORT=$(echo "$SINK_INFO" | awk -v sink="$SINK" '
#$1 == "name:" && $2 == "<"sink">" {active=1}
#active && /active port:/ {
## Extract port name between angle brackets
#match($0, /<[^>]+>/)
#port = substr($0, RSTART+1, RLENGTH-2)
#print port
#exit
#}
#')
#echo "Raw port detection: $PORT" >> $LOG_FILE
#if [[ "$PORT" == "analog-output-headphones" ]]; then
#echo "front"
#elif [[ "$PORT" == "analog-output-lineout" ]]; then
#echo "rear"
#else
#echo "unknown"
#fi
#}
## Switch outputs with hardware-level control
#switch_output() {
#echo "Starting switch to $1" >> $LOG_FILE
## First disable both outputs
#echo "Disabling both outputs" >> $LOG_FILE
## ALSA controls
#amixer -c $CARD set "$FRONT" mute >/dev/null
#amixer -c $CARD set "$FRONT_VOL" 0% >/dev/null
#amixer -c $CARD set "$REAR" mute >/dev/null
#amixer -c $CARD set "$REAR_VOL" 0% >/dev/null
## PulseAudio controls
#pactl set-sink-mute "$SINK" 1 >/dev/null
#sleep 0.2
#if [[ "$1" == "front" ]]; then
#echo "Enabling front output" >> $LOG_FILE
## Check if headphones port exists
#if echo "$SINK_INFO" | grep -q "analog-output-headphones"; then
#echo "Attempting to set port to analog-output-headphones" >> $LOG_FILE
#if ! pacmd set-sink-port "$SINK" "analog-output-headphones" 2>>$LOG_FILE; then
#echo "Port switch failed, trying alternative method" >> $LOG_FILE
#pactl set-sink-port "$SINK" "analog-output-headphones" 2>>$LOG_FILE || true
#fi
#else
#echo "Headphones port not available, using hardware controls only" >> $LOG_FILE
#fi
## Additional hardware control
#amixer -c $CARD set 'Headphone' unmute >/dev/null
#amixer -c $CARD set 'Speaker' mute >/dev/null
#pactl set-sink-mute "$SINK" 0 >/dev/null
## ALSA controls
#amixer -c $CARD set "$FRONT" unmute >/dev/null
#amixer -c $CARD set "$FRONT_VOL" 100% >/dev/null
#OUTPUT=" FRONT"
#else
#echo "Enabling rear output" >> $LOG_FILE
## PulseAudio controls
#echo "Attempting to set port to analog-output-lineout" >> $LOG_FILE
#if ! pacmd set-sink-port "$SINK" "analog-output-lineout" 2>>$LOG_FILE; then
#echo "Port switch failed, trying alternative method" >> $LOG_FILE
#pactl set-sink-port "$SINK" "analog-output-lineout" 2>>$LOG_FILE || true
#fi
## Additional hardware control
#amixer -c $CARD set 'Speaker' unmute >/dev/null
#amixer -c $CARD set 'Headphone' mute >/dev/null
#pactl set-sink-mute "$SINK" 0 >/dev/null
## ALSA controls
#amixer -c $CARD set "$REAR" unmute >/dev/null
#amixer -c $CARD set "$REAR_VOL" 100% >/dev/null
#OUTPUT=" REAR"
#fi
## Reset audio pipeline
#echo "Resetting audio pipeline" >> $LOG_FILE
#{ pactl suspend-sink "$SINK" 1 && sleep 0.2 && pactl suspend-sink "$SINK" 0; } >/dev/null 2>&1
## Verify switch
#echo "Verifying switch..." >> $LOG_FILE
#CURRENT=$(get_active_output)
#echo "Current output: $CURRENT" >> $LOG_FILE
#if [[ "$CURRENT" != "$1" ]]; then
#echo "Switch verification failed!" >> $LOG_FILE
## Force hardware-level switch
#echo "Forcing hardware-level switch..." >> $LOG_FILE
#if [[ "$1" == "front" ]]; then
#amixer -c $CARD set 'Headphone' unmute >/dev/null
#amixer -c $CARD set 'Speaker' mute >/dev/null
#else
#amixer -c $CARD set 'Speaker' unmute >/dev/null
#amixer -c $CARD set 'Headphone' mute >/dev/null
#fi
#fi
#echo "Switch complete" >> $LOG_FILE
#echo "$OUTPUT" # Output to i3blocks
#}
## Main execution
#case "${BLOCK_BUTTON:-}" in
#1)
#CURRENT=$(get_active_output)
#if [[ "$CURRENT" == "front" ]]; then
#switch_output "rear"
#else
#switch_output "front"
#fi
#;;
#*)
#CURRENT=$(get_active_output)
#[[ "$CURRENT" == "front" ]] && echo " FRONT" || echo " REAR"
#;;
#esac
#exit 0

View File

@@ -18,7 +18,6 @@
INTERFACE="${BLOCK_INSTANCE:-wlan0}"
# echo $INTERFACE
# INTERFACE="${INSTANCE}"
#------------------------------------------------------------------------
@@ -29,10 +28,10 @@ INTERFACE="${BLOCK_INSTANCE:-wlan0}"
#------------------------------------------------------------------------
QUALITY=$(grep $INTERFACE /proc/net/wireless | awk '{ print int($3 * 100 / 70) }')
QUALITY=$(sudo grep $INTERFACE /proc/net/wireless | awk '{ print int($3 * 100 / 70) }')
# echo $QUALITY
W_inter=$(ip link | grep "[1-9]: wlp" | cut -d " " -f2 | tr -d ':')
W_name=$(nmcli d | grep "$W_inter" | awk '{print $4}')
# W_name=$(nmcli d | grep "$W_inter" | awk '{print $4}')
#------------------------------------------------------------------------

View File

@@ -1,7 +1,29 @@
confirm_os_window_close 0
include ~/.cache/wal/colors-kitty.conf
background_opacity .8
# background_opacity .7
# background_opacity .8
# background_opacity .85
background_opacity .9
# background_opacity .95
# background_opacity .97
clipboard_control write-clipboard write-primary
enable_audio_bell no
# font
cursor_blink_interval 0
# font_size 12.5
font_size 12
map ctrl+alt+up change_font_size all +1.0
map ctrl+alt+down change_font_size all -1.0
font_family Hack Nerd Font Mono
bold_font Hack Nerd Font Mono Bold
# Map PUA ranges to the Symbols Nerd Font (or your main Nerd Font)
# The Firefox icon (U+E2E9) is often in the Pomicons or Devicons range
symbol_map U+E000-U+EFFF Hack Nerd Font Mono
symbol_map U+F000-U+FFFF Hack Nerd Font Mono
symbol_map U+23FB-U+23FE,U+2B58,U+2EFE-U+3000 Hack Nerd Font Mono
# You can also use the symbols-only font if you have it installed:
# symbol_map U+E000-U+F8FF Symbols Nerd Font Mono

View File

@@ -0,0 +1,36 @@
[Default Applications]
text/html=firefox_firefox.desktop
x-scheme-handler/http=firefox_firefox.desktop
x-scheme-handler/https=firefox_firefox.desktop
x-scheme-handler/about=firefox_firefox.desktop
x-scheme-handler/unknown=firefox_firefox.desktop
x-scheme-handler/ftp=firefox.desktop
x-scheme-handler/chrome=firefox.desktop
application/x-extension-htm=firefox.desktop
application/x-extension-html=firefox.desktop
application/x-extension-shtml=firefox.desktop
application/xhtml+xml=firefox.desktop
application/x-extension-xhtml=firefox.desktop
application/x-extension-xht=firefox.desktop
x-scheme-handler/mailto=userapp-Thunderbird-DQE3YZ.desktop
message/rfc822=userapp-Thunderbird-DQE3YZ.desktop
image/jpeg=sxiv.desktop
image/png=sxiv.desktop
x-scheme-handler/discord-409416265891971072=discord-409416265891971072.desktop
x-scheme-handler/eclipse+command=_usr_lib_dbeaver_.desktop
video/mp4=mpv.desktop
[Added Associations]
x-scheme-handler/http=firefox.desktop;
x-scheme-handler/https=firefox.desktop;
text/html=firefox.desktop;
application/pdf=org.gnome.Evince.desktop;org.pwmt.zathura-pdf-mupdf.desktop;
text/plain=nvim.desktop;
x-scheme-handler/mailto=userapp-Thunderbird-DQE3YZ.desktop;
message/rfc822=userapp-Thunderbird-DQE3YZ.desktop;
text/x-python=nvim.desktop;gvim.desktop;
application/json=firefox.desktop;
image/jpeg=gimp.desktop;imv.desktop;
text/markdown=nvim.desktop;
image/png=imv.desktop;
video/mp4=mpv.desktop;

37
dot_config/mimeapps.list Normal file
View File

@@ -0,0 +1,37 @@
[Default Applications]
text/html=google-chrome.desktop
x-scheme-handler/http=google-chrome.desktop
x-scheme-handler/https=google-chrome.desktop
x-scheme-handler/about=google-chrome.desktop
x-scheme-handler/unknown=google-chrome.desktop
x-scheme-handler/ftp=firefox.desktop
x-scheme-handler/chrome=firefox.desktop
application/x-extension-htm=firefox.desktop
application/x-extension-html=firefox.desktop
application/x-extension-shtml=firefox.desktop
application/xhtml+xml=firefox.desktop
application/x-extension-xhtml=firefox.desktop
application/x-extension-xht=firefox.desktop
x-scheme-handler/mailto=userapp-Thunderbird-DQE3YZ.desktop
message/rfc822=userapp-Thunderbird-DQE3YZ.desktop
image/jpeg=sxiv.desktop
image/png=sxiv.desktop
x-scheme-handler/discord-409416265891971072=discord-409416265891971072.desktop
x-scheme-handler/eclipse+command=_usr_lib_dbeaver_.desktop
video/mp4=mpv.desktop
x-scheme-handler/discord=vesktop.desktop
[Added Associations]
x-scheme-handler/http=firefox.desktop;
x-scheme-handler/https=firefox.desktop;
text/html=firefox.desktop;
application/pdf=org.gnome.Evince.desktop;org.pwmt.zathura-pdf-mupdf.desktop;
text/plain=nvim.desktop;
x-scheme-handler/mailto=userapp-Thunderbird-DQE3YZ.desktop;
message/rfc822=userapp-Thunderbird-DQE3YZ.desktop;
text/x-python=nvim.desktop;gvim.desktop;
application/json=firefox.desktop;
image/jpeg=gimp.desktop;imv.desktop;
text/markdown=nvim.desktop;
image/png=imv.desktop;
video/mp4=mpv.desktop;

View File

@@ -7,23 +7,33 @@ v cycle mute
r set speed 1.0
g set speed 1.6
h set speed 2.4
a add speed -.2
s add speed .2
w add speed -.2
e add speed .2
# seek
Shift+RIGHT seek 1
Shift+LEFT seek -1
RIGHT seek 3
LEFT seek -3
UP seek 10
DOWN seek -10
Shift+UP seek 60
Shift+DOWN seek -60
Ctrl+RIGHT no-osd seek 0.2 exact
Ctrl+LEFT no-osd seek -0.2 exact
Shift+RIGHT no-osd seek 1 exact
Shift+LEFT no-osd seek -1 exact
RIGHT seek 5 exact
LEFT seek -5 exact
UP seek 10 exact
DOWN seek -10 exact
Shift+UP seek 60 exact
Shift+DOWN seek -60 exact
# zoom
Ctrl+- add video-zoom -0.25
Ctrl+= add video-zoom 0.25
# mark
m revert-seek mark # mark position for revert-seek
Shift+m revert-seek
# subtitle delay
z add sub-delay +0.25
Z add sub-delay -0.25
# z add sub-delay +0.25
# Z add sub-delay -0.25
u add sub-delay -0.25
i add sub-delay +0.25
ctrl+r cycle_values video-rotate "90" "180" "270" "0"

View File

@@ -1,3 +1,5 @@
sub-auto=fuzzy
# volume=25
# volume=75
ytdl-format=best
ytdl-raw-options=sub-format=en,write-srt=

16
dot_config/msmtp/config Normal file
View File

@@ -0,0 +1,16 @@
defaults
logfile ~/.config/msmtp/msmtp.log
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
account firemail
host mail.cock.li
port 465
auth on
user vole@firemail.cc
password iavli3JYQT0bmuJlvL82ShQ
tls_starttls off
from vole@firemail.cc
account default : firemail

View File

@@ -336,8 +336,8 @@ public_ip_host="http://ident.me"
# disk_show=('/'):
# 'Disk (/): 74G / 118G (66%)'
#
# disk_show=('/' '/home' '/mnt/linux-files' )
disk_show=('/dev/sda1' '/dev/sda3' '/dev/sdc2' )
disk_show=('/' '/home' '/mnt/linux-files-2' )
#disk_show=('/dev/sda1' '/dev/sdaf' '/dev/sdd1' )
# Disk subtitle.
# What to append to the Disk subtitle.

View File

@@ -0,0 +1,18 @@
set from = "vole@firemail.cc"
set realname = "Vole"
set mbox_type = Maildir
set folder = "~/mail/firemail"
set spoolfile = "+INBOX"
set record = "+Sent"
set postponed = "+Drafts"
set trash = "+Trash"
set sendmail = "/usr/bin/msmtp"
set sendmail_wait = 0
set editor = "nano"
set charset = "utf-8"
auto_view text/html
alternative_order text/plain text/html
macro index <F5> "<shell-escape>mbsync firemail<enter><enter>" "Sync mail"

425
dot_config/picom/picom.conf Normal file
View File

@@ -0,0 +1,425 @@
# shadows {{{ #
# Enabled client-side shadows on windows. Note desktop windows
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
# unless explicitly requested using the wintypes option.
#
# shadow = false
shadow = true;
# The blur radius for shadows, in pixels. (defaults to 12)
# shadow-radius = 12
shadow-radius = 7;
# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
# shadow-opacity = .75
# The left offset for shadows, in pixels. (defaults to -15)
# shadow-offset-x = -15
shadow-offset-x = -7;
# The top offset for shadows, in pixels. (defaults to -15)
# shadow-offset-y = -15
shadow-offset-y = -7;
# Avoid drawing shadows on dock/panel windows. This option is deprecated,
# you should use the *wintypes* option in your config file instead.
#
# no-dock-shadow = false
# Don't draw shadows on drag-and-drop windows. This option is deprecated,
# you should use the *wintypes* option in your config file instead.
#
# no-dnd-shadow = false
# Red color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-red = 0
# Green color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-green = 0
# Blue color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-blue = 0
# Do not paint shadows on shaped windows. Note shaped windows
# here means windows setting its shape through X Shape extension.
# Those using ARGB background is beyond our control.
# Deprecated, use
# shadow-exclude = 'bounding_shaped'
# or
# shadow-exclude = 'bounding_shaped && !rounded_corners'
# instead.
#
# shadow-ignore-shaped = ''
# Specify a list of conditions of windows that should have no shadow.
#
# examples:
# shadow-exclude = "n:e:Notification";
#
# shadow-exclude = []
shadow-exclude = [
"name = 'Notification'",
"class_g = 'Conky'",
"class_g ?= 'Notify-osd'",
"class_g = 'Cairo-clock'",
"_GTK_FRAME_EXTENTS@:c"
];
# Specify a X geometry that describes the region in which shadow should not
# be painted in, such as a dock window region. Use
# shadow-exclude-reg = "x10+0+0"
# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
#
# shadow-exclude-reg = ""
# Crop shadow of a window fully on a particular Xinerama screen to the screen.
# xinerama-shadow-crop = false
# }}} shadows #
# fading {{{ #
# Fade windows in/out when opening/closing and when opacity changes,
# unless no-fading-openclose is used.
fading = false
# fading = true
# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
# fade-in-step = 0.028
fade-in-step = 0.03;
# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
# fade-out-step = 0.03
fade-out-step = 0.03;
# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
# fade-delta = 10
# Specify a list of conditions of windows that should not be faded.
# fade-exclude = []
# Do not fade on window open/close.
# no-fading-openclose = true
# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
# no-fading-destroyed-argb = false
# }}} fading #
# transparency/opacity {{{ #
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
inactive-opacity = 1
# inactive-opacity = 0.9;
# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
# frame-opacity = 1.0
frame-opacity = 0.7;
# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
# menu-opacity = 1.0
# Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows.
# inactive-opacity-override = true
inactive-opacity-override = false;
# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
# active-opacity = 1.0
# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
# inactive-dim = 0.0
# Specify a list of conditions of windows that should always be considered focused.
# focus-exclude = []
focus-exclude = [ "class_g = 'Cairo-clock'" ];
# Use fixed inactive dim value, instead of adjusting according to window opacity.
# inactive-dim-fixed = 1.0
# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
# like `50:name *= "Firefox"`. picom-trans is recommended over this.
# Note we don't make any guarantee about possible conflicts with other
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
# example:
# opacity-rule = [ "80:class_g = 'URxvt'" ];
#
#
opacity-rule = ["90:class_g = 'kitty'"]
# opacity-rule = []
# }}} transparency/opacity #
# bg blurring {{{ #
# Parameters for background blurring, see the *BLUR* section for more information.
# blur-method =
# blur-size = 12
#
# blur-deviation = false
# Blur background of semi-transparent / ARGB windows.
# Bad in performance, with driver-dependent behavior.
# The name of the switch may change without prior notifications.
#
# blur-background = false
# Blur background of windows when the window frame is not opaque.
# Implies:
# blur-background
# Bad in performance, with driver-dependent behavior. The name may change.
#
# blur-background-frame = false
# Use fixed blur strength rather than adjusting according to window opacity.
# blur-background-fixed = false
# Specify the blur convolution kernel, with the following format:
# example:
# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
#
# blur-kern = ''
blur-kern = "3x3box";
# Exclude conditions for background blur.
# blur-background-exclude = []
blur-background-exclude = [
"window_type = 'dock'",
"window_type = 'desktop'",
"_GTK_FRAME_EXTENTS@:c"
];
# }}} bg blurring #
# general {{{ #
# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
# daemon = false
# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
# `xrender` is the default one.
#
# backend = 'glx'
backend = "xrender";
# Enable/disable VSync.
# vsync = false
vsync = true
# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
# dbus = false
# Try to detect WM windows (a non-override-redirect window with no
# child that has 'WM_STATE') and mark them as active.
#
# mark-wmwin-focused = false
mark-wmwin-focused = true;
# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
# mark-ovredir-focused = false
mark-ovredir-focused = true;
# Try to detect windows with rounded corners and don't consider them
# shaped windows. The accuracy is not very high, unfortunately.
#
# detect-rounded-corners = false
detect-rounded-corners = true;
# Detect '_NET_WM_OPACITY' on client windows, useful for window managers
# not passing '_NET_WM_OPACITY' of client windows to frame windows.
#
# detect-client-opacity = false
detect-client-opacity = true;
# Specify refresh rate of the screen. If not specified or 0, picom will
# try detecting this with X RandR extension.
#
# refresh-rate = 60
refresh-rate = 0
# Limit picom to repaint at most once every 1 / 'refresh_rate' second to
# boost performance. This should not be used with
# vsync drm/opengl/opengl-oml
# as they essentially does sw-opti's job already,
# unless you wish to specify a lower refresh rate than the actual value.
#
# sw-opti =
# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
# provided that the WM supports it.
#
# use-ewmh-active-win = false
# Unredirect all windows if a full-screen opaque window is detected,
# to maximize performance for full-screen windows. Known to cause flickering
# when redirecting/unredirecting windows.
#
# unredir-if-possible = false
# Delay before unredirecting the window, in milliseconds. Defaults to 0.
# unredir-if-possible-delay = 0
# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
# unredir-if-possible-exclude = []
# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
# in the same group focused at the same time.
#
# detect-transient = false
detect-transient = true
# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
# group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if
# detect-transient is enabled, too.
#
# detect-client-leader = false
detect-client-leader = true
# Resize damaged region by a specific number of pixels.
# A positive value enlarges it while a negative one shrinks it.
# If the value is positive, those additional pixels will not be actually painted
# to screen, only used in blur calculation, and such. (Due to technical limitations,
# with use-damage, those pixels will still be incorrectly painted to screen.)
# Primarily used to fix the line corruption issues of blur,
# in which case you should use the blur radius value here
# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
# with a 5x5 one you use `--resize-damage 2`, and so on).
# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
#
# resize-damage = 1
# Specify a list of conditions of windows that should be painted with inverted color.
# Resource-hogging, and is not well tested.
#
# invert-color-include = []
# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
# Might cause incorrect opacity when rendering transparent content (but never
# practically happened) and may not work with blur-background.
# My tests show a 15% performance boost. Recommended.
#
# glx-no-stencil = false
# GLX backend: Avoid rebinding pixmap on window damage.
# Probably could improve performance on rapid window content changes,
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
# Recommended if it works.
#
# glx-no-rebind-pixmap = false
# Disable the use of damage information.
# This cause the whole screen to be redrawn everytime, instead of the part of the screen
# has actually changed. Potentially degrades the performance, but might fix some artifacts.
# The opposing option is use-damage
#
# no-use-damage = false
use-damage = true
# Use X Sync fence to sync clients' draw calls, to make sure all draw
# calls are finished before picom starts drawing. Needed on nvidia-drivers
# with GLX backend for some users.
#
# xrender-sync-fence = false
# GLX backend: Use specified GLSL fragment shader for rendering window contents.
# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
# in the source tree for examples.
#
# glx-fshader-win = ''
# Force all windows to be painted with blending. Useful if you
# have a glx-fshader-win that could turn opaque pixels transparent.
#
# force-win-blend = false
# Do not use EWMH to detect fullscreen windows.
# Reverts to checking if a window is fullscreen based only on its size and coordinates.
#
# no-ewmh-fullscreen = false
# Dimming bright windows so their brightness doesn't exceed this set value.
# Brightness of a window is estimated by averaging all pixels in the window,
# so this could comes with a performance hit.
# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
#
# max-brightness = 1.0
# Make transparent windows clip other windows like non-transparent windows do,
# instead of blending on top of them.
#
# transparent-clipping = false
# Set the log level. Possible values are:
# "trace", "debug", "info", "warn", "error"
# in increasing level of importance. Case doesn't matter.
# If using the "TRACE" log level, it's better to log into a file
# using *--log-file*, since it can generate a huge stream of logs.
#
# log-level = "debug"
log-level = "warn";
# Set the log file.
# If *--log-file* is never specified, logs will be written to stderr.
# Otherwise, logs will to written to the given file, though some of the early
# logs might still be written to the stderr.
# When setting this option from the config file, it is recommended to use an absolute path.
#
# log-file = '/path/to/your/log/file'
# Show all X errors (for debugging)
# show-all-xerrors = false
# Write process ID to a file.
# write-pid-path = '/path/to/your/log/file'
# }}} general #
# window settings {{{ #
# Window type settings
#
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
# "tooltip", "notification", "combo", and "dnd".
#
# Following per window-type options are available: ::
#
# fade, shadow:::
# Controls window-type-specific shadow and fade settings.
#
# opacity:::
# Controls default opacity of the window type.
#
# focus:::
# Controls whether the window of this type is to be always considered focused.
# (By default, all window types except "normal" and "dialog" has this on.)
#
# full-shadow:::
# Controls whether shadow is drawn under the parts of the window that you
# normally won't be able to see. Useful when the window has parts of it
# transparent, and you want shadows in those areas.
#
# redir-ignore:::
# Controls whether this type of windows should cause screen to become
# redirected again after been unredirected. If you have unredir-if-possible
# set, and doesn't want certain window to cause unnecessary screen redirection,
# you can set this to `true`.
#
wintypes:
{
tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
dock = { shadow = false; }
dnd = { shadow = false; }
# popup_menu = { opacity = 1; }
popup_menu = { opacity = .95; }
# dropdown_menu = { opacity = 1; }
dropdown_menu = { opacity = .9; }
};
# }}} window settings #

View File

@@ -96,8 +96,11 @@ handle_extension() {
jq --color-output '.' "${FILE_PATH}" && exit 5
python -m json.tool -- "${FILE_PATH}" && exit 5
# txt)
# cat "${FILE_PATH}" && exit 5
js)
bat "${FILE_PATH}" && exit 5
txt)
bat "${FILE_PATH}" && exit 5
esac
}
@@ -231,3 +234,9 @@ handle_mime "${MIMETYPE}"
handle_fallback
exit 1
#if [ "$KITTY_WINDOW_ID" ]; then
#kitty +kitten icat --transfer-mode file --stdin yes
#exit 1
#fi
preview_images_method="ueberzug"

View File

@@ -1 +0,0 @@

View File

@@ -166,8 +166,9 @@ set autoupdate_cumulative_size false
set show_cursor false
# One of: size, natural, basename, atime, ctime, mtime, type, random
set sort natural
# set sort natural
# set sort extension
set sort mtime
# Additional sorting options
set sort_reverse false
@@ -272,7 +273,7 @@ map <C-c> abort
map <esc> change_mode normal
map ~ set viewmode!
map i display_file
# map id display_file
map ? help
map W display_log
# map w taskview_open
@@ -331,6 +332,7 @@ map <PAGEDOWN> move down=1 pages=True
map <PAGEUP> move up=1 pages=True
map <CR> move right=1
map <DELETE> console delete
map i console touch%space
map <INSERT> console touch%space
# VIM-like
@@ -665,8 +667,9 @@ set preview_images true
# * urxvt-full:
# The same as urxvt but utilizing not only the preview pane but the
# whole terminal window.
set preview_images_method w3m
# set preview_images_method ueberzug
# set preview_images_method w3m
#set preview_images_method ueberzug
set preview_images_method kitty
# set preview_images_method urxvt
# set preview_images_method urxvt-full
@@ -700,12 +703,19 @@ map zr shell unzip %f && rm %f
map e. open_with evince f
map v. shell $EDITOR %f
source {{ .chezmoi.homedir }}/.config/ranger/key_mappings.conf
source {{ .chezmoi.homeDir }}/.config/ranger/key_mappings.conf
map dg shell dragon-drag-and-drop -a -x %p
#map dg shell dragon-drop -a -x %p
map dg shell dragon -x %p
# map <C-d> shell dragon-drag-and-drop -a -x %p
# a plugin that adds file glyphs / icon support to Ranger:
# https://github.com/alexanderjeurissen/ranger_devicons
default_linemode devicons
set clipboard_program xclip
set clipboard_cmd xclip -selection clipboard
map tsx set editor nvim
set editor nvim
# ]]] custom #

View File

@@ -110,6 +110,7 @@ ext pl = perl -- "$1"
ext rb = ruby -- "$1"
ext js = node -- "$1"
ext sh = sh -- "$1"
ext tsx = nvim "$@"
ext php = php -- "$1"
#--------------------------------------------

View File

@@ -1,11 +0,0 @@
audio.crossfade_v2=true
audio.sync_bitrate_enumeration=4
ui.track_notifications_enabled=false
ui.show_friend_feed=false
audio.play_bitrate_enumeration=4
app.player.volume=40000
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
app.browser.zoom-level=300
{{ else }}
app.browser.zoom-level=75
{{ end }}

View File

@@ -7,7 +7,7 @@
*
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
*/
{{ if eq .chezmoi.fullHostname "x1-carbon" }}
{{ if eq .chezmoi.hostname "x1-carbon" }}
static char *font = "DejaVuSansMono Nerd Font Mono:pixelsize=33:antialias=true:autohint=true";
{{ else }}
static char *font = "DejaVuSansMono Nerd Font Mono:pixelsize=20:antialias=true:autohint=true";

Some files were not shown because too many files have changed in this diff Show More