Updated dotfiles

This commit is contained in:
rpriven 2025-12-28 12:26:00 -07:00
parent 473e31cfb6
commit 0c457db7cc
Signed by: djedi
GPG key ID: D04DED574622EF45
31 changed files with 4072 additions and 298 deletions

13
.gitignore vendored
View file

@ -72,3 +72,16 @@ prismis/
# Git config (contains personal email/name)
git/
.env
# OPSEC - machine-specific configs that reveal infrastructure/workflow
systemd-user/
kde/
applications/
autostart/
vicinae/
whispertux/
# SSH keys (public or private)
*.pub
id_*

View file

@ -1,6 +1,9 @@
decorations = "None"
import = ["/home/folke/projects/tokyonight.nvim/extras/alacritty/tokyonight_storm.yml"]
[general]
live_config_reload = true
# import = [] # Add theme files here if needed
[window]
decorations = "None"
[colors]
draw_bold_text_with_bright_colors = true

View file

@ -1,17 +0,0 @@
# ---- TMUX-RECON bash.bash ----
# source custom aliases if exists
[ -f ~/.aliases.sh ] && source ~/.aliases.sh
# add .scripts to path
export PATH="$HOME/.scripts:$PATH"
# zoxide (if installed)
if command -v zoxide &> /dev/null; then
eval "$(zoxide init bash)"
fi
# fzf (if installed)
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
# Custom prompt options or PS1 here if desired

View file

@ -0,0 +1,52 @@
// source: https://gist.github.com/qwerasd205/c3da6c610c8ffe17d6d2d3cc7068f17f
// credits: https://github.com/qwerasd205
// Golden spiral samples, [x, y, weight] weight is inverse of distance.
const vec3[24] samples = {
vec3(0.1693761725038636, 0.9855514761735895, 1),
vec3(-1.333070830962943, 0.4721463328627773, 0.7071067811865475),
vec3(-0.8464394909806497, -1.51113870578065, 0.5773502691896258),
vec3(1.554155680728463, -1.2588090085709776, 0.5),
vec3(1.681364377589461, 1.4741145918052656, 0.4472135954999579),
vec3(-1.2795157692199817, 2.088741103228784, 0.4082482904638631),
vec3(-2.4575847530631187, -0.9799373355024756, 0.3779644730092272),
vec3(0.5874641440200847, -2.7667464429345077, 0.35355339059327373),
vec3(2.997715703369726, 0.11704939884745152, 0.3333333333333333),
vec3(0.41360842451688395, 3.1351121305574803, 0.31622776601683794),
vec3(-3.167149933769243, 0.9844599011770256, 0.30151134457776363),
vec3(-1.5736713846521535, -3.0860263079123245, 0.2886751345948129),
vec3(2.888202648340422, -2.1583061557896213, 0.2773500981126146),
vec3(2.7150778983300325, 2.5745586041105715, 0.2672612419124244),
vec3(-2.1504069972377464, 3.2211410627650165, 0.2581988897471611),
vec3(-3.6548858794907493, -1.6253643308191343, 0.25),
vec3(1.0130775986052671, -3.9967078676335834, 0.24253562503633297),
vec3(4.229723673607257, 0.33081361055181563, 0.23570226039551587),
vec3(0.40107790291173834, 4.340407413572593, 0.22941573387056174),
vec3(-4.319124570236028, 1.159811599693438, 0.22360679774997896),
vec3(-1.9209044802827355, -4.160543952132907, 0.2182178902359924),
vec3(3.8639122286635708, -2.6589814382925123, 0.21320071635561041),
vec3(3.3486228404946234, 3.4331800232609, 0.20851441405707477),
vec3(-2.8769733643574344, 3.9652268864187157, 0.20412414523193154)
};
float lum(vec4 c) {
return 0.299 * c.r + 0.587 * c.g + 0.114 * c.b;
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = fragCoord.xy / iResolution.xy;
vec4 color = texture(iChannel0, uv);
vec2 step = vec2(1.414) / iResolution.xy;
for (int i = 0; i < 24; i++) {
vec3 s = samples[i];
vec4 c = texture(iChannel0, uv + s.xy * step);
float l = lum(c);
if (l > 0.2 && lum(color) < 0.75) {
color += l * s.z * c * 0.12; // reduced from 0.2 to balance glow intensity
}
}
fragColor = clamp(color, 0.0, 1.12); // smooth highlighting
}

View file

@ -1,50 +1,69 @@
# Fonts
font-family = "Fira Code"
font-family-bold = "Fira Code"
font-family-italic = "Maple Mono"
font-family-bold-italic = "Maple Mono"
font-family = "Symbols Nerd Font Mono"
font-size = 10
adjust-underline-position = 4
# This is the configuration file for Ghostty.
#
# This template file has been automatically created at the following
# path since Ghostty couldn't find any existing config files on your system:
#
# /home/e/.config/ghostty/config
#
# The template does not set any default options, since Ghostty ships
# with sensible defaults for all options. Users should only need to set
# options that they want to change from the default.
#
# Run `ghostty +show-config --default --docs` to view a list of
# all available config options and their default values.
#
# Additionally, each config option is also explained in detail
# on Ghostty's website, at https://ghostty.org/docs/config.
# Mouse
mouse-hide-while-typing = true
# mouse-scroll-multiplier = 1
# Config syntax crash course
# ==========================
# # The config file consists of simple key-value pairs,
# # separated by equals signs.
# font-family = Iosevka
# window-padding-x = 2
#
# # Spacing around the equals sign does not matter.
# # All of these are identical:
# key=value
# key= value
# key =value
# key = value
#
# # Any line beginning with a # is a comment. It's not possible to put
# # a comment after a config option, since it would be interpreted as a
# # part of the value. For example, this will have a value of "#123abc":
# background = #123abc
#
# # Empty values are used to reset config keys to default.
# key =
#
# # Some config options have unique syntaxes for their value,
# # which is explained in the docs for that config option.
# # Just for example:
# resize-overlay-duration = 4s 200ms
# Theme
theme = /home/folke/projects/tokyonight.nvim/extras/ghostty/tokyonight_night
cursor-invert-fg-bg = true
background-opacity = 0.9
window-theme = ghostty
background-opacity = .95
background-blur = 15
# keybindings
keybind = clear
keybind = ctrl+shift+h=goto_split:left
keybind = ctrl+shift+j=goto_split:bottom
keybind = ctrl+shift+k=goto_split:top
keybind = ctrl+shift+l=goto_split:right
keybind = super+shift+t=new_tab
keybind = super+shift+h=previous_tab
keybind = super+shift+l=next_tab
keybind = super+shift+comma=move_tab:-1
keybind = super+shift+period=move_tab:1
keybind = super+shift+c=copy_to_clipboard
keybind = super+shift+v=paste_from_clipboard
keybind = super+shift+enter=new_split:auto
keybind = super+shift+i=inspector:toggle
keybind = super+shift+m=toggle_split_zoom
keybind = super+shift+r=reload_config
keybind = super+shift+s=write_screen_file:open
keybind = super+shift+w=close_surface
keybind = global:ctrl+grave_accent=toggle_quick_terminal
# Window
gtk-single-instance = true
gtk-tabs-location = bottom
gtk-wide-tabs = false
window-padding-y = 2,0
window-padding-balance = true
window-decoration = false
custom-shader = ~/.config/ghostty/bloom.glsl
#custom-shader = ~/.config/ghostty/crt.glsl
#custom-shader = ~/.config/ghostty/starfield.glsl
# Other
copy-on-select = clipboard
shell-integration-features = cursor,sudo,no-title
#custom-shader = ~/.config/ghostty/ghostty-shaders/bloom.glsl
#custom-shader = ~/.config/ghostty/ghostty-shaders/galaxy.glsl
#custom-shader = ~/.config/ghostty/ghostty-shaders/glitchy.glsl
#custom-shader = ~/.config/ghostty/ghostty-shaders/glow-rgbsplit-twitchy.glsl
#custom-shader = ~/.config/ghostty/ghostty-shaders/in-game-crt.glsl
#custom-shader = ~/.config/ghostty/ghostty-shaders/matrix-hallway.glsl
#custom-shader = ~/.config/ghostty/ghostty-shaders/negative.glsl
#custom-shader = ~/.config/ghostty/ghostty-shaders/sparks-from-fire.glsl
#custom-shader = ~/.config/ghostty/ghostty-shaders/starfield-colors.glsl
#custom-shader = ~/.config/ghostty/ghostty-shaders/starfield.glsl
keybind = shift+enter=text:\x1b\r
# Use zsh as default shell
command = /usr/bin/zsh

View file

@ -0,0 +1,50 @@
# Fonts
font-family = "Fira Code"
font-family-bold = "Fira Code"
font-family-italic = "Maple Mono"
font-family-bold-italic = "Maple Mono"
font-family = "Symbols Nerd Font Mono"
font-size = 10
adjust-underline-position = 4
# Mouse
mouse-hide-while-typing = true
# mouse-scroll-multiplier = 1
# Theme
# theme = /home/folke/projects/tokyonight.nvim/extras/ghostty/tokyonight_night
cursor-invert-fg-bg = true
background-opacity = 0.9
window-theme = ghostty
# keybindings
keybind = clear
keybind = ctrl+shift+h=goto_split:left
keybind = ctrl+shift+j=goto_split:bottom
keybind = ctrl+shift+k=goto_split:top
keybind = ctrl+shift+l=goto_split:right
keybind = super+shift+t=new_tab
keybind = super+shift+h=previous_tab
keybind = super+shift+l=next_tab
keybind = super+shift+comma=move_tab:-1
keybind = super+shift+period=move_tab:1
keybind = super+shift+c=copy_to_clipboard
keybind = super+shift+v=paste_from_clipboard
keybind = super+shift+enter=new_split:auto
keybind = super+shift+i=inspector:toggle
keybind = super+shift+m=toggle_split_zoom
keybind = super+shift+r=reload_config
keybind = super+shift+s=write_screen_file:open
keybind = super+shift+w=close_surface
# Window
gtk-single-instance = true
gtk-tabs-location = bottom
gtk-wide-tabs = false
window-padding-y = 2,0
window-padding-balance = true
window-decoration = true
# Other
copy-on-select = clipboard
shell-integration-features = cursor,sudo,no-title

View file

@ -0,0 +1,310 @@
// source: https://gist.github.com/qwerasd205/c3da6c610c8ffe17d6d2d3cc7068f17f
// credits: https://github.com/qwerasd205
//==============================================================
//
// [CRTS] PUBLIC DOMAIN CRT-STYLED SCALAR by Timothy Lottes
//
// [+] Adapted with alterations for use in Ghostty by Qwerasd.
// For more information on changes, see comment below license.
//
//==============================================================
//
// LICENSE = UNLICENSE (aka PUBLIC DOMAIN)
//
//--------------------------------------------------------------
// This is free and unencumbered software released into the
// public domain.
//--------------------------------------------------------------
// Anyone is free to copy, modify, publish, use, compile, sell,
// or distribute this software, either in source code form or as
// a compiled binary, for any purpose, commercial or
// non-commercial, and by any means.
//--------------------------------------------------------------
// In jurisdictions that recognize copyright laws, the author or
// authors of this software dedicate any and all copyright
// interest in the software to the public domain. We make this
// dedication for the benefit of the public at large and to the
// detriment of our heirs and successors. We intend this
// dedication to be an overt act of relinquishment in perpetuity
// of all present and future rights to this software under
// copyright law.
//--------------------------------------------------------------
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
// KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//--------------------------------------------------------------
// For more information, please refer to
// <http://unlicense.org/>
//==============================================================
// This shader is a modified version of the excellent
// FixingPixelArtFast by Timothy Lottes on Shadertoy.
//
// The original shader can be found at:
// https://www.shadertoy.com/view/MtSfRK
//
// Modifications have been made to reduce the verbosity,
// and many of the comments have been removed / reworded.
// Additionally, the license has been moved to the top of
// the file, and can be read above. I (Qwerasd) choose to
// release the modified version under the same license.
// The appearance of this shader can be altered
// by adjusting the parameters defined below.
// "Scanlines" per real screen pixel.
// e.g. SCALE 0.5 means each scanline is 2 pixels.
// Recommended values:
// o High DPI displays: 0.33333333
// - Low DPI displays: 0.66666666
#define SCALE 0.33333333
// "Tube" warp
#define CRTS_WARP 1
// Darkness of vignette in corners after warping
// 0.0 = completely black
// 1.0 = no vignetting
#define MIN_VIN 0.5
// Try different masks
// #define CRTS_MASK_GRILLE 1
// #define CRTS_MASK_GRILLE_LITE 1
// #define CRTS_MASK_NONE 1
#define CRTS_MASK_SHADOW 1
// Scanline thinness
// 0.50 = fused scanlines
// 0.70 = recommended default
// 1.00 = thinner scanlines (too thin)
#define INPUT_THIN 0.75
// Horizonal scan blur
// -3.0 = pixely
// -2.5 = default
// -2.0 = smooth
// -1.0 = too blurry
#define INPUT_BLUR -2.75
// Shadow mask effect, ranges from,
// 0.25 = large amount of mask (not recommended, too dark)
// 0.50 = recommended default
// 1.00 = no shadow mask
#define INPUT_MASK 0.65
float FromSrgb1(float c) {
return (c <= 0.04045) ? c * (1.0 / 12.92) :
pow(c * (1.0 / 1.055) + (0.055 / 1.055), 2.4);
}
vec3 FromSrgb(vec3 c) {
return vec3(
FromSrgb1(c.r), FromSrgb1(c.g), FromSrgb1(c.b));
}
vec3 CrtsFetch(vec2 uv) {
return FromSrgb(texture(iChannel0, uv.xy).rgb);
}
#define CrtsRcpF1(x) (1.0/(x))
#define CrtsSatF1(x) clamp((x),0.0,1.0)
float CrtsMax3F1(float a, float b, float c) {
return max(a, max(b, c));
}
vec2 CrtsTone(
float thin,
float mask) {
#ifdef CRTS_MASK_NONE
mask = 1.0;
#endif
#ifdef CRTS_MASK_GRILLE_LITE
// Normal R mask is {1.0,mask,mask}
// LITE R mask is {mask,1.0,1.0}
mask = 0.5 + mask * 0.5;
#endif
vec2 ret;
float midOut = 0.18 / ((1.5 - thin) * (0.5 * mask + 0.5));
float pMidIn = 0.18;
ret.x = ((-pMidIn) + midOut) / ((1.0 - pMidIn) * midOut);
ret.y = ((-pMidIn) * midOut + pMidIn) / (midOut * (-pMidIn) + midOut);
return ret;
}
vec3 CrtsMask(vec2 pos, float dark) {
#ifdef CRTS_MASK_GRILLE
vec3 m = vec3(dark, dark, dark);
float x = fract(pos.x * (1.0 / 3.0));
if (x < (1.0 / 3.0)) m.r = 1.0;
else if (x < (2.0 / 3.0)) m.g = 1.0;
else m.b = 1.0;
return m;
#endif
#ifdef CRTS_MASK_GRILLE_LITE
vec3 m = vec3(1.0, 1.0, 1.0);
float x = fract(pos.x * (1.0 / 3.0));
if (x < (1.0 / 3.0)) m.r = dark;
else if (x < (2.0 / 3.0)) m.g = dark;
else m.b = dark;
return m;
#endif
#ifdef CRTS_MASK_NONE
return vec3(1.0, 1.0, 1.0);
#endif
#ifdef CRTS_MASK_SHADOW
pos.x += pos.y * 3.0;
vec3 m = vec3(dark, dark, dark);
float x = fract(pos.x * (1.0 / 6.0));
if (x < (1.0 / 3.0)) m.r = 1.0;
else if (x < (2.0 / 3.0)) m.g = 1.0;
else m.b = 1.0;
return m;
#endif
}
vec3 CrtsFilter(
vec2 ipos,
vec2 inputSizeDivOutputSize,
vec2 halfInputSize,
vec2 rcpInputSize,
vec2 rcpOutputSize,
vec2 twoDivOutputSize,
float inputHeight,
vec2 warp,
float thin,
float blur,
float mask,
vec2 tone
) {
// Optional apply warp
vec2 pos;
#ifdef CRTS_WARP
// Convert to {-1 to 1} range
pos = ipos * twoDivOutputSize - vec2(1.0, 1.0);
// Distort pushes image outside {-1 to 1} range
pos *= vec2(
1.0 + (pos.y * pos.y) * warp.x,
1.0 + (pos.x * pos.x) * warp.y);
// TODO: Vignette needs optimization
float vin = 1.0 - (
(1.0 - CrtsSatF1(pos.x * pos.x)) * (1.0 - CrtsSatF1(pos.y * pos.y)));
vin = CrtsSatF1((-vin) * inputHeight + inputHeight);
// Leave in {0 to inputSize}
pos = pos * halfInputSize + halfInputSize;
#else
pos = ipos * inputSizeDivOutputSize;
#endif
// Snap to center of first scanline
float y0 = floor(pos.y - 0.5) + 0.5;
// Snap to center of one of four pixels
float x0 = floor(pos.x - 1.5) + 0.5;
// Inital UV position
vec2 p = vec2(x0 * rcpInputSize.x, y0 * rcpInputSize.y);
// Fetch 4 nearest texels from 2 nearest scanlines
vec3 colA0 = CrtsFetch(p);
p.x += rcpInputSize.x;
vec3 colA1 = CrtsFetch(p);
p.x += rcpInputSize.x;
vec3 colA2 = CrtsFetch(p);
p.x += rcpInputSize.x;
vec3 colA3 = CrtsFetch(p);
p.y += rcpInputSize.y;
vec3 colB3 = CrtsFetch(p);
p.x -= rcpInputSize.x;
vec3 colB2 = CrtsFetch(p);
p.x -= rcpInputSize.x;
vec3 colB1 = CrtsFetch(p);
p.x -= rcpInputSize.x;
vec3 colB0 = CrtsFetch(p);
// Vertical filter
// Scanline intensity is using sine wave
// Easy filter window and integral used later in exposure
float off = pos.y - y0;
float pi2 = 6.28318530717958;
float hlf = 0.5;
float scanA = cos(min(0.5, off * thin) * pi2) * hlf + hlf;
float scanB = cos(min(0.5, (-off) * thin + thin) * pi2) * hlf + hlf;
// Horizontal kernel is simple gaussian filter
float off0 = pos.x - x0;
float off1 = off0 - 1.0;
float off2 = off0 - 2.0;
float off3 = off0 - 3.0;
float pix0 = exp2(blur * off0 * off0);
float pix1 = exp2(blur * off1 * off1);
float pix2 = exp2(blur * off2 * off2);
float pix3 = exp2(blur * off3 * off3);
float pixT = CrtsRcpF1(pix0 + pix1 + pix2 + pix3);
#ifdef CRTS_WARP
// Get rid of wrong pixels on edge
pixT *= max(MIN_VIN, vin);
#endif
scanA *= pixT;
scanB *= pixT;
// Apply horizontal and vertical filters
vec3 color =
(colA0 * pix0 + colA1 * pix1 + colA2 * pix2 + colA3 * pix3) * scanA +
(colB0 * pix0 + colB1 * pix1 + colB2 * pix2 + colB3 * pix3) * scanB;
// Apply phosphor mask
color *= CrtsMask(ipos, mask);
// Tonal control, start by protecting from /0
float peak = max(1.0 / (256.0 * 65536.0),
CrtsMax3F1(color.r, color.g, color.b));
// Compute the ratios of {R,G,B}
vec3 ratio = color * CrtsRcpF1(peak);
// Apply tonal curve to peak value
peak = peak * CrtsRcpF1(peak * tone.x + tone.y);
// Reconstruct color
return ratio * peak;
}
float ToSrgb1(float c) {
return (c < 0.0031308 ? c * 12.92 : 1.055 * pow(c, 0.41666) - 0.055);
}
vec3 ToSrgb(vec3 c) {
return vec3(
ToSrgb1(c.r), ToSrgb1(c.g), ToSrgb1(c.b));
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
float aspect = iResolution.x / iResolution.y;
fragColor.rgb = CrtsFilter(
fragCoord.xy,
vec2(1.0),
iResolution.xy * SCALE * 0.5,
1.0 / (iResolution.xy * SCALE),
1.0 / iResolution.xy,
2.0 / iResolution.xy,
iResolution.y,
vec2(1.0 / (50.0 * aspect), 1.0 / 50.0),
INPUT_THIN,
INPUT_BLUR,
INPUT_MASK,
CrtsTone(INPUT_THIN, INPUT_MASK)
);
// Linear to SRGB for output.
fragColor.rgb = ToSrgb(fragColor.rgb);
}

@ -0,0 +1 @@
Subproject commit a17573fb254e618f92a75afe80faa31fd5e09d6f

View file

@ -0,0 +1,135 @@
// transparent background
const bool transparent = false;
// terminal contents luminance threshold to be considered background (0.0 to 1.0)
const float threshold = 0.15;
// divisions of grid
const float repeats = 30.;
// number of layers
const float layers = 21.;
// star colors
const vec3 white = vec3(1.0); // Set star color to pure white
float luminance(vec3 color) {
return dot(color, vec3(0.2126, 0.7152, 0.0722));
}
float N21(vec2 p) {
p = fract(p * vec2(233.34, 851.73));
p += dot(p, p + 23.45);
return fract(p.x * p.y);
}
vec2 N22(vec2 p) {
float n = N21(p);
return vec2(n, N21(p + n));
}
mat2 scale(vec2 _scale) {
return mat2(_scale.x, 0.0,
0.0, _scale.y);
}
// 2D Noise based on Morgan McGuire
float noise(in vec2 st) {
vec2 i = floor(st);
vec2 f = fract(st);
// Four corners in 2D of a tile
float a = N21(i);
float b = N21(i + vec2(1.0, 0.0));
float c = N21(i + vec2(0.0, 1.0));
float d = N21(i + vec2(1.0, 1.0));
// Smooth Interpolation
vec2 u = f * f * (3.0 - 2.0 * f); // Cubic Hermite Curve
// Mix 4 corners percentages
return mix(a, b, u.x) +
(c - a) * u.y * (1.0 - u.x) +
(d - b) * u.x * u.y;
}
float perlin2(vec2 uv, int octaves, float pscale) {
float col = 1.;
float initScale = 4.;
for (int l; l < octaves; l++) {
float val = noise(uv * initScale);
if (col <= 0.01) {
col = 0.;
break;
}
val -= 0.01;
val *= 0.5;
col *= val;
initScale *= pscale;
}
return col;
}
vec3 stars(vec2 uv, float offset) {
float timeScale = -(iTime + offset) / layers;
float trans = fract(timeScale);
float newRnd = floor(timeScale);
vec3 col = vec3(0.);
// Translate uv then scale for center
uv -= vec2(0.5);
uv = scale(vec2(trans)) * uv;
uv += vec2(0.5);
// Create square aspect ratio
uv.x *= iResolution.x / iResolution.y;
// Create boxes
uv *= repeats;
// Get position
vec2 ipos = floor(uv);
// Return uv as 0 to 1
uv = fract(uv);
// Calculate random xy and size
vec2 rndXY = N22(newRnd + ipos * (offset + 1.)) * 0.9 + 0.05;
float rndSize = N21(ipos) * 100. + 200.;
vec2 j = (rndXY - uv) * rndSize;
float sparkle = 1. / dot(j, j);
// Set stars to be pure white
col += white * sparkle;
col *= smoothstep(1., 0.8, trans);
return col; // Return pure white stars only
}
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
// Normalized pixel coordinates (from 0 to 1)
vec2 uv = fragCoord / iResolution.xy;
vec3 col = vec3(0.);
for (float i = 0.; i < layers; i++) {
col += stars(uv, i);
}
// Sample the terminal screen texture including alpha channel
vec4 terminalColor = texture(iChannel0, uv);
if (transparent) {
col += terminalColor.rgb;
}
// Make a mask that is 1.0 where the terminal content is not black
float mask = 1 - step(threshold, luminance(terminalColor.rgb));
vec3 blendedColor = mix(terminalColor.rgb, col, mask);
// Apply terminal's alpha to control overall opacity
fragColor = vec4(blendedColor, terminalColor.a);
}

View file

@ -32,10 +32,6 @@ language-servers = ["vscode-html-language-server"]
name = "css"
language-servers = ["vscode-css-language-server"]
[[language]]
name = "dockerfile"
language-servers = ["docker-langserver"]
[[language]]
name = "go"
language-servers = ["gopls"]
@ -59,7 +55,7 @@ file-types = ["tex", "sty", "cls", "dtx"]
roots = ["main.tex", ".latexmkrc", "body-osr.md"]
comment-token = "%"
indent = { tab-width = 2, unit = " " }
language-server = { command = "texlab" }
language-servers = ["texlab"]
[language.auto-pairs]
'(' = ')'

View file

@ -1,111 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
# Script Name: radio
# Description: Internet radio station wrapper with curated stations
# Source: Inspired by https://evanhahn.com/scripts-i-wrote-that-i-use-all-the-time/
# Usage: radio <station-name>
# radio list
# Check for mpv
if ! command -v mpv &>/dev/null; then
echo "Error: mpv not found. Install with: sudo apt install mpv" >&2
exit 1
fi
# Curated radio stations
declare -A stations=(
# Rock & Metal
["metal"]="http://listen.181fm.com/181-greatoldies_128k.mp3|Heavy Metal & Hard Rock"
["rock"]="http://listen.181fm.com/181-rock_128k.mp3|Classic Rock"
# Cyberpunk / Synthwave / Darkwave
["cyberpunk"]="https://stream.nightride.fm/nightride.mp3|Nightride FM - Synthwave/Retrowave/Outrun"
["darksynth"]="https://stream.nightride.fm/darksynth.mp3|Darksynth/Cyberpunk/Synthmetal"
["chillsynth"]="https://stream.nightride.fm/chillsynth.mp3|Chillsynth/Chillwave/Instrumental"
["datawave"]="https://stream.nightride.fm/datawave.mp3|Glitchy Synthwave/IDM"
["spacesynth"]="https://stream.nightride.fm/spacesynth.mp3|Spacesynth/Space Disco"
["horrorsynth"]="https://stream.nightride.fm/horrorsynth.mp3|Horrorsynth/Witch House"
["industrial"]="https://stream.nightride.fm/ebsm.mp3|Industrial/EBM/Midtempo"
# Electronic / Techno
["techno"]="http://stream.laut.fm/technobase|Techno Base - Coding Beats"
["dnb"]="https://stream.nightride.fm/rektfm.mp3|Drum & Bass/Dubstep/Techno/Trance"
["lofi"]="https://stream.nightride.fm/chillsynth.mp3|Lo-Fi Chill Beats"
# Meditation / Ambient / Relaxation
["meditation"]="https://streaming.radionomy.com/-zenoflm-|Zen FM - Meditation & Relaxation"
["ambient"]="https://somafm.com/dronezone130.pls|SomaFM Drone Zone - Ambient"
["sleep"]="https://somafm.com/deepspaceone130.pls|SomaFM Deep Space One"
["nature"]="https://streaming.radionomy.com/NatureSoundsRelaxation|Nature Sounds"
# Classical
["classical"]="https://stream.live.vc.bbcmedia.co.uk/bbc_radio_three|BBC Radio 3 - Classical"
["piano"]="http://stream.laut.fm/piano-classics|Piano Classics"
)
# List available stations
if [[ $# -eq 0 ]] || [[ "$1" == "list" ]]; then
echo "📻 Available Radio Stations:"
echo ""
echo "🤘 ROCK & METAL:"
echo " radio metal - Heavy Metal & Hard Rock"
echo " radio rock - Classic Rock"
echo ""
echo "🌃 CYBERPUNK / SYNTHWAVE:"
echo " radio cyberpunk - Nightride FM (Synthwave/Retrowave)"
echo " radio darksynth - Darksynth/Cyberpunk/Synthmetal"
echo " radio chillsynth - Chillsynth/Chillwave"
echo " radio datawave - Glitchy Synthwave/IDM"
echo " radio spacesynth - Spacesynth/Space Disco"
echo " radio horrorsynth- Horrorsynth/Witch House"
echo " radio industrial - Industrial/EBM"
echo ""
echo "🎧 ELECTRONIC / TECHNO:"
echo " radio techno - Techno Base (Coding Beats)"
echo " radio dnb - Drum & Bass/Dubstep/Trance"
echo " radio lofi - Lo-Fi Chill Beats"
echo ""
echo "🧘 MEDITATION / AMBIENT:"
echo " radio meditation - Zen FM"
echo " radio ambient - SomaFM Drone Zone"
echo " radio sleep - Deep Space Ambient"
echo " radio nature - Nature Sounds"
echo ""
echo "🎹 CLASSICAL:"
echo " radio classical - BBC Radio 3"
echo " radio piano - Piano Classics"
echo ""
exit 0
fi
station="$1"
# Check if station exists
if [[ -z "${stations[$station]:-}" ]]; then
echo "Error: Station '$station' not found" >&2
echo "Run 'radio list' to see available stations" >&2
exit 1
fi
# Parse station URL and description
IFS='|' read -r url description <<< "${stations[$station]}"
echo "📻 Tuning in to: $description"
echo "🔊 Playing... (Ctrl+C to stop)"
echo ""
# Play with mpv (only fallback to VLC if mpv is not installed or stream fails to start)
if ! command -v mpv &>/dev/null; then
echo "mpv not found. Trying VLC..." >&2
if command -v vlc &>/dev/null; then
vlc "$url" 2>/dev/null
exit $?
else
echo "Error: Neither mpv nor VLC is installed" >&2
exit 1
fi
fi
# mpv will return non-zero for user interruption (Ctrl+C), which is normal
mpv --no-video --volume=50 "$url"

1554
tmux/.tmux.conf Normal file

File diff suppressed because it is too large Load diff

View file

@ -297,7 +297,10 @@ tmux_conf_theme_status_left_fg="$tmux_conf_theme_colour_4,$tmux_conf_theme_colou
tmux_conf_theme_status_left_bg="$tmux_conf_theme_colour_1,$tmux_conf_theme_colour_1,$tmux_conf_theme_colour_0"
# right
tmux_conf_theme_status_right=" #[fg=#00afff,bg=#080808]#{prefix_highlight} #[fg=#00afff,bg=#080808]#{mouse} #[fg=#e4e4e4,bg=#080808]Online: #[fg=#5fff00,bg=#080808]#{online_status} #[fg=#f7931a,bg=#080808] #{kripto} #[fg=#5fff00,bg=#080808]%R #[fg=#e4e4e4,bg=#080808] %a %d %b #[fg=#e4e4e4,bg=#d70000,bold] #{?#{==:#{username},root},!, #{username}} #[fg=#e4e4e4,bg=#d70000,bold]#{?username_ssh, @ #{username_ssh},} #[fg=#080808,bg=#e4e4e4,bold] #{hostname} "
tmux_conf_theme_status_right=" #[fg=#00afff,bg=#080808]#{prefix_highlight} #[fg=#00afff,bg=#080808]#{mouse} #[fg=#e4e4e4,bg=#080808]Online: #[fg=#5fff00,bg=#080808]#{online_status} #[fg=#e4e4e4,bg=#080808]#(~/.tmux/scripts/tmux-vpn-status/vpn-status.sh) VPN #[fg=#f7931a,bg=#080808] #{kripto} #[fg=#5fff00,bg=#080808]%R #[fg=#e4e4e4,bg=#080808] %a %d %b #[fg=#e4e4e4,bg=#d70000,bold] #{?#{==:#{username},root},!, #{username}} #[fg=#e4e4e4,bg=#d70000,bold]#{?username_ssh, @ #{username_ssh},} #[fg=#080808,bg=#e4e4e4,bold] #{hostname} "
# backup - working
# tmux_conf_theme_status_right=" #[fg=#00afff,bg=#080808]#{prefix_highlight} #[fg=#00afff,bg=#080808]#{mouse} #[fg=#e4e4e4,bg=#080808]Online: #[fg=#5fff00,bg=#080808]#{online_status} #[fg=#f7931a,bg=#080808] #{kripto} #[fg=#5fff00,bg=#080808]%R #[fg=#e4e4e4,bg=#080808] %a %d %b #[fg=#e4e4e4,bg=#d70000,bold] #{?#{==:#{username},root},!, #{username}} #[fg=#e4e4e4,bg=#d70000,bold]#{?username_ssh, @ #{username_ssh},} #[fg=#080808,bg=#e4e4e4,bold] #{hostname} "
#tmux_conf_theme_status_right_attr="bold,bold,bold,bold,bold,bold,bold,bold,bold"
# tmux_conf_theme_status_right="
@ -634,7 +637,7 @@ set -g @fzf-open-bind 'u'
# bind-key -T prefix u run-shell '~/.tmux/plugins/tmux-fzf-open/setup.tmux'
set -g @fzf-open-open-cmd "brave-browser"
set -g status-right "#(~/.tmux/scripts/tmux-vpn-status/vpn-status.sh) | %H:%M %d-%b-%y"
# ---- End My Customizations ----
##################################

View file

@ -0,0 +1,39 @@
#!/bin/bash
# VPN status for tmux statusline
# Check for VPN connection via multiple methods:
# 1. ProtonVPN GUI (uses NetworkManager with pvpn- prefix or WireGuard)
# 2. Old WireGuard config (protonvpn interface)
# 3. Any active VPN connection via NetworkManager
# Method 1: Check for ProtonVPN GUI WireGuard interface (pvpn-* or proton*)
if ip link 2>/dev/null | grep -qE "pvpn-|proton" | grep -qE "state UP"; then
echo "🛡️"
exit 0
fi
# Method 2: Check for any wireguard interface that's UP
if ip link 2>/dev/null | grep -E "wireguard|wg[0-9]+" | grep -qE "state UP"; then
echo "🛡️"
exit 0
fi
# Method 3: Check NetworkManager for active VPN connections
if nmcli -t -f TYPE,STATE connection show --active 2>/dev/null | grep -qE "vpn:activated|wireguard:activated"; then
echo "🛡️"
exit 0
fi
# Method 4: Check old protonvpn interface (legacy)
if ip link show protonvpn 2>/dev/null | grep -qE "<.*UP.*>"; then
echo "🛡️"
exit 0
fi
# Method 5: Check if default route goes through a VPN-like interface
if ip route show default 2>/dev/null | grep -qE "pvpn-|proton|wg[0-9]+|tun[0-9]+"; then
echo "🛡️"
exit 0
fi
# No VPN detected
echo "❌"

View file

@ -0,0 +1,8 @@
#!/bin/bash
# Alternative: Check via ip addr instead of wg show (no sudo needed)
if ip addr show protonvpn 2>/dev/null | grep -q "state UP"; then
echo "🛡️"
else
echo "❌"
fi

View file

@ -0,0 +1,9 @@
#!/bin/bash
# VPN status for tmux statusline
# Check WireGuard ProtonVPN connection via ip link (no sudo needed)
if ip link show protonvpn 2>/dev/null | grep -qE "<.*UP.*>"; then
echo "🛡️"
else
echo "❌"
fi

View file

@ -2,260 +2,253 @@
"com.github.igorvaryvoda.ulauncher-perplexity": {
"id": "com.github.igorvaryvoda.ulauncher-perplexity",
"url": "https://github.com/IgorVaryvoda/ulauncher-perplexity",
"updated_at": "2025-03-16T12:59:43.265383",
"updated_at": "2025-11-12T01:01:14.411833",
"last_commit": "7320f7b1499417ad31d920688e600b80d8454f6d",
"last_commit_time": "2024-12-10T15:31:41"
},
"com.github.iboyperson.ulauncher-system": {
"id": "com.github.iboyperson.ulauncher-system",
"url": "https://github.com/iboyperson/ulauncher-system",
"updated_at": "2025-03-16T13:02:08.080929",
"updated_at": "2025-11-12T01:01:16.918329",
"last_commit": "7dedd992709fa2297735cddf852404144d4da47c",
"last_commit_time": "2023-11-14T16:53:20"
},
"com.github.mikebarkmin.ulauncher-obsidian": {
"id": "com.github.mikebarkmin.ulauncher-obsidian",
"url": "https://github.com/mikebarkmin/ulauncher-obsidian",
"updated_at": "2025-03-16T13:02:43.173879",
"updated_at": "2025-11-12T01:01:18.864415",
"last_commit": "a419cdc5e73453e4b284bb4905448ca60e4a3864",
"last_commit_time": "2023-09-12T10:42:25"
},
"com.github.ulauncher.ulauncher-timer": {
"id": "com.github.ulauncher.ulauncher-timer",
"url": "https://github.com/ulauncher/ulauncher-timer",
"updated_at": "2025-03-16T13:02:56.333635",
"updated_at": "2025-11-12T01:01:20.875288",
"last_commit": "2d3fe82fe1e38670e6eb8887cd2a4b4d1c2baa79",
"last_commit_time": "2023-03-25T08:07:41"
},
"com.github.hillaryychan.ulauncher-fzf": {
"id": "com.github.hillaryychan.ulauncher-fzf",
"url": "https://github.com/hillaryychan/ulauncher-fzf",
"updated_at": "2025-03-16T13:03:21.728964",
"last_commit": "e8137dae6448041fc53ae418263501b068857073",
"last_commit_time": "2023-05-16T12:35:35"
"updated_at": "2025-11-12T01:01:22.765478",
"last_commit": "fad638127b2583d64ef3dac3cf3e94508e0b506a",
"last_commit_time": "2025-11-10T10:12:48"
},
"com.github.beajeanm.ulauncher-windows-switcher": {
"id": "com.github.beajeanm.ulauncher-windows-switcher",
"url": "https://github.com/beajeanm/ulauncher-windows-switcher",
"updated_at": "2025-03-16T13:03:57.628011",
"updated_at": "2025-11-12T01:21:35.888712",
"last_commit": "e746afcd1ae971294f983dadb6ad2c90a730ec39",
"last_commit_time": "2022-08-04T22:59:46"
},
"com.github.nastuzzisamy.ulauncher-youtube-search": {
"id": "com.github.nastuzzisamy.ulauncher-youtube-search",
"url": "https://github.com/NastuzziSamy/ulauncher-youtube-search",
"updated_at": "2025-03-16T13:04:51.043356",
"updated_at": "2025-11-12T01:21:37.836629",
"last_commit": "fe855811358b2f15ec6ed69ca18e20639874fa28",
"last_commit_time": "2021-03-27T11:29:18"
},
"com.github.luispabon.ulauncher-virtualbox": {
"id": "com.github.luispabon.ulauncher-virtualbox",
"url": "https://github.com/luispabon/ulauncher-virtualbox",
"updated_at": "2025-03-16T13:06:10.014115",
"updated_at": "2025-11-12T01:21:41.117924",
"last_commit": "d8f495df3c7f41ee8493b207d17f06fc0372c84e",
"last_commit_time": "2020-09-23T01:29:15"
},
"com.github.ralcaidev.ulauncher-extension-list": {
"id": "com.github.ralcaidev.ulauncher-extension-list",
"url": "https://github.com/ralcaidev/ulauncher-extension-list",
"updated_at": "2025-03-16T13:07:24.585415",
"updated_at": "2025-11-12T01:21:43.143563",
"last_commit": "27d65fae4abc036e37a09792c8244287017dbc73",
"last_commit_time": "2022-11-10T16:06:26"
},
"com.github.brpaz.ulauncher-faker": {
"id": "com.github.brpaz.ulauncher-faker",
"url": "https://github.com/brpaz/ulauncher-faker",
"updated_at": "2025-03-16T13:08:41.037197",
"last_commit": "58832c94acc671a9f603ea7fbf5d4405110bb902",
"last_commit_time": "2021-12-12T15:46:10"
},
"com.github.ultiblog.ulauncher-password-generator": {
"id": "com.github.ultiblog.ulauncher-password-generator",
"url": "https://github.com/Ultiblog/ULauncher-Password-Generator",
"updated_at": "2025-03-16T13:56:55.395064",
"updated_at": "2025-11-12T01:21:47.471889",
"last_commit": "de08e6b3ce1c58e4f2b23321702ba40fa2110f73",
"last_commit_time": "2022-11-11T12:05:05"
},
"com.github.zachatrocity.ulauncher-ollama": {
"id": "com.github.zachatrocity.ulauncher-ollama",
"url": "https://github.com/zachatrocity/ulauncher-ollama",
"updated_at": "2025-05-02T01:42:52.911306",
"updated_at": "2025-11-12T01:21:50.721477",
"last_commit": "1cb33ac391dc5650c8d1970c30249c159687853f",
"last_commit_time": "2024-06-07T05:20:43"
},
"com.github.pymustafa.ulauncher-shortn": {
"id": "com.github.pymustafa.ulauncher-shortn",
"url": "https://github.com/PyMustafa/ulauncher-shortn",
"updated_at": "2025-05-02T01:43:35.640643",
"updated_at": "2025-11-12T01:21:53.738885",
"last_commit": "29caf53983cad40a4f28a6d0b743f6ec7fbc4d6b",
"last_commit_time": "2024-08-20T13:13:07"
},
"com.github.singhrobinkumar.ulauncher-brave-profiles": {
"id": "com.github.singhrobinkumar.ulauncher-brave-profiles",
"url": "https://github.com/SinghRobinKumar/ulauncher-brave-profiles",
"updated_at": "2025-05-02T01:47:33.174079",
"updated_at": "2025-11-12T01:21:56.178581",
"last_commit": "6156a248e086eadc58e5e7445b56b38498120a5a",
"last_commit_time": "2023-08-23T05:33:06"
},
"com.github.devkleber.ulauncher-open-link": {
"id": "com.github.devkleber.ulauncher-open-link",
"url": "https://github.com/DevKleber/ulauncher-open-link",
"updated_at": "2025-05-03T22:04:15.599598",
"updated_at": "2025-11-12T01:21:58.809049",
"last_commit": "de9b7e6144d974c06a7f218596a2db80b667fd5b",
"last_commit_time": "2023-12-29T17:33:50"
},
"com.github.ahaasler.ulauncher-tmux": {
"id": "com.github.ahaasler.ulauncher-tmux",
"url": "https://github.com/ahaasler/ulauncher-tmux",
"updated_at": "2025-05-03T22:08:36.345314",
"updated_at": "2025-11-12T01:22:00.645012",
"last_commit": "dd631a2e5a1d8bf2ab21095b43afe068443f02b9",
"last_commit_time": "2021-06-05T16:42:59"
},
"com.github.seqizz.ulauncher-tmux-attach": {
"id": "com.github.seqizz.ulauncher-tmux-attach",
"url": "https://github.com/seqizz/ulauncher-tmux-attach",
"updated_at": "2025-05-03T22:27:52.092854",
"updated_at": "2025-11-12T01:22:02.604396",
"last_commit": "b6a84559e128ceaa8255d4c08feead8604efecfe",
"last_commit_time": "2021-04-14T05:49:52"
},
"com.github.brpaz.ulauncher-raindrop": {
"id": "com.github.brpaz.ulauncher-raindrop",
"url": "https://github.com/brpaz/ulauncher-raindrop",
"updated_at": "2025-05-03T22:36:56.580319",
"updated_at": "2025-11-12T01:22:04.918216",
"last_commit": "b5bdbc9915930a1da320728696576462737cb812",
"last_commit_time": "2022-10-15T09:38:30"
},
"com.github.kalligator.ulauncher-gemini-direct": {
"id": "com.github.kalligator.ulauncher-gemini-direct",
"url": "https://github.com/kalligator/ulauncher-gemini-direct",
"updated_at": "2025-05-04T00:13:05.568104",
"last_commit": "b0d8986644e2f28bdf4f9fa492675118fecf322f",
"last_commit_time": "2025-04-28T18:20:32"
"updated_at": "2025-11-12T01:22:07.504573",
"last_commit": "dd44c7032e60764f9da393427339d922170b2e1b",
"last_commit_time": "2025-09-20T12:18:05"
},
"com.github.seofernando25.ulauncher-gpt": {
"id": "com.github.seofernando25.ulauncher-gpt",
"url": "https://github.com/SeoFernando25/ulauncher-gpt",
"updated_at": "2025-05-04T00:20:50.025070",
"last_commit": "2d51ff40fcbd501e64034f3c7be1cd35abc47d6b",
"last_commit_time": "2023-04-14T22:57:18"
"updated_at": "2025-11-12T01:22:09.658181",
"last_commit": "3b0f87aa58ad0d2bcb46011bc6fa0e75e912be37",
"last_commit_time": "2025-09-16T01:43:11"
},
"com.github.tuanpham-dev.ulauncher-better-calculator": {
"id": "com.github.tuanpham-dev.ulauncher-better-calculator",
"url": "https://github.com/tuanpham-dev/ulauncher-better-calculator",
"updated_at": "2025-10-17T00:21:49.364925",
"updated_at": "2025-11-12T01:22:11.537539",
"last_commit": "48f0592a2a8ac9ec2589a06b562141e1a2d9b25f",
"last_commit_time": "2023-04-24T13:55:30"
},
"com.github.troublor.ulauncher-numconverter": {
"id": "com.github.troublor.ulauncher-numconverter",
"url": "https://github.com/Troublor/ulauncher-numconverter",
"updated_at": "2025-05-04T00:25:02.819859",
"updated_at": "2025-11-12T01:22:13.535666",
"last_commit": "98d5e01d82671eedc98c000053980ae7ceb4ea28",
"last_commit_time": "2021-09-29T13:19:39"
},
"com.github.tchar.ulauncher-albert-calculate-anything": {
"id": "com.github.tchar.ulauncher-albert-calculate-anything",
"url": "https://github.com/tchar/ulauncher-albert-calculate-anything",
"updated_at": "2025-05-04T01:31:51.665044",
"updated_at": "2025-11-12T01:22:16.271370",
"last_commit": "037965a44e6f6f496e7ad71ec1651b9edfcde32d",
"last_commit_time": "2024-05-29T21:57:26"
},
"com.github.frdrk.ulauncher-dead-simple-convert": {
"id": "com.github.frdrk.ulauncher-dead-simple-convert",
"url": "https://github.com/frdrk/ulauncher-dead-simple-convert",
"updated_at": "2025-05-04T01:10:44.910294",
"updated_at": "2025-11-12T01:22:18.489577",
"last_commit": "c0821e83b6c1d5a4984ef72c82e54eb21d0149ac",
"last_commit_time": "2023-10-03T11:40:03"
},
"com.github.sergius02.ulauncher-colorconverter": {
"id": "com.github.sergius02.ulauncher-colorconverter",
"url": "https://github.com/sergius02/ulauncher-colorconverter",
"updated_at": "2025-05-04T01:15:30.973722",
"updated_at": "2025-11-12T01:22:20.830905",
"last_commit": "2d5e2bc17e89f1f1dc561f73e68ea574e0be844a",
"last_commit_time": "2020-12-06T20:59:43"
},
"com.github.kleber-swf.ulauncher-toggle-dnd": {
"id": "com.github.kleber-swf.ulauncher-toggle-dnd",
"url": "https://github.com/kleber-swf/ulauncher-toggle-dnd",
"updated_at": "2025-05-04T01:16:29.564322",
"updated_at": "2025-11-12T01:22:23.128706",
"last_commit": "e2a14ba6eb7eb6771045e103a6f351585cdb8652",
"last_commit_time": "2022-02-10T13:22:17"
},
"com.github.nastuzzisamy.ulauncher-translate": {
"id": "com.github.nastuzzisamy.ulauncher-translate",
"url": "https://github.com/NastuzziSamy/ulauncher-translate",
"updated_at": "2025-05-04T01:18:38.337064",
"updated_at": "2025-11-12T01:22:25.086208",
"last_commit": "f16b6eed05923e604bacafefdc40b7b7290e21da",
"last_commit_time": "2021-03-27T11:43:48"
},
"com.github.behrensger.thesaurus_cc_ulauncher": {
"id": "com.github.behrensger.thesaurus_cc_ulauncher",
"url": "https://github.com/behrensger/thesaurus_cc_ulauncher",
"updated_at": "2025-05-04T01:19:43.069288",
"updated_at": "2025-11-12T01:22:27.244248",
"last_commit": "375575ce2790fbe40cdfae8fa7b471d06ead683a",
"last_commit_time": "2020-12-22T20:33:18"
},
"com.github.randomcharacter.ulauncher-meet": {
"id": "com.github.randomcharacter.ulauncher-meet",
"url": "https://github.com/randomCharacter/ulauncher-meet",
"updated_at": "2025-05-04T01:29:35.336482",
"updated_at": "2025-11-12T01:24:39.272128",
"last_commit": "f2fe055b6e21e15ea4c65918a6f499d61d4cf4b0",
"last_commit_time": "2021-02-26T22:04:21"
},
"com.github.fajtak.ulauncher-weather": {
"id": "com.github.fajtak.ulauncher-weather",
"url": "https://github.com/fajtak/ulauncher-weather",
"updated_at": "2025-05-04T01:30:14.933475",
"updated_at": "2025-11-12T01:24:41.707690",
"last_commit": "996da704e505776753f6340755d20f03075c2be8",
"last_commit_time": "2022-04-05T18:23:30"
},
"com.github.dhelmr.ulauncher-tldr": {
"id": "com.github.dhelmr.ulauncher-tldr",
"url": "https://github.com/dhelmr/ulauncher-tldr",
"updated_at": "2025-05-04T01:32:34.092229",
"updated_at": "2025-11-12T01:24:44.347536",
"last_commit": "2e5904451bf89dfa155280dfb6fa3d45ed4cab4c",
"last_commit_time": "2023-07-29T11:06:30"
},
"com.github.carlosmape.ulauncher-calendar": {
"id": "com.github.carlosmape.ulauncher-calendar",
"url": "https://github.com/Carlosmape/ulauncher-calendar",
"updated_at": "2025-05-04T01:35:56.785814",
"updated_at": "2025-11-12T01:24:46.996590",
"last_commit": "36e6d2f9b238a7723525522bd373a22626cf3be5",
"last_commit_time": "2022-10-31T15:47:41"
},
"com.github.lighttigerxiv.ulauncher-terminal-runner-extension": {
"id": "com.github.lighttigerxiv.ulauncher-terminal-runner-extension",
"url": "https://github.com/lighttigerXIV/ulauncher-terminal-runner-extension/",
"updated_at": "2025-05-04T01:36:37.619709",
"updated_at": "2025-11-12T01:24:50.236053",
"last_commit": "d6bc2157e5c0ef2f812e3051ddde334c7b485c2e",
"last_commit_time": "2023-05-02T22:50:12"
},
"com.github.ulauncher.ulauncher-hash": {
"id": "com.github.ulauncher.ulauncher-hash",
"url": "https://github.com/Ulauncher/ulauncher-hash",
"updated_at": "2025-05-04T01:40:49.697043",
"updated_at": "2025-11-12T01:24:52.451555",
"last_commit": "237dbb3610ff04df993c3223b12df42cb7df221f",
"last_commit_time": "2022-09-04T14:29:55"
},
"com.github.rayvega96.ulauncher-amazon-search": {
"id": "com.github.rayvega96.ulauncher-amazon-search",
"url": "https://github.com/rayvega96/ulauncher-amazon-search",
"updated_at": "2025-05-04T01:41:33.787276",
"updated_at": "2025-11-12T01:24:54.702757",
"last_commit": "045551d899cf42bc99c85670bdf8e299e128275b",
"last_commit_time": "2022-12-03T17:14:47"
},
"com.github.pegoku.ulauncher-brave": {
"id": "com.github.pegoku.ulauncher-brave",
"url": "https://github.com/Pegoku/ulauncher-brave",
"updated_at": "2025-05-04T01:42:25.744568",
"updated_at": "2025-11-12T01:24:56.703470",
"last_commit": "3166aad57ff0252271c0bfe72a0a2d37f37e3b0d",
"last_commit_time": "2022-11-05T15:40:52"
},
"com.github.pegoku.ulauncher-searx": {
"id": "com.github.pegoku.ulauncher-searx",
"url": "https://github.com/Pegoku/ulauncher-searx",
"updated_at": "2025-05-04T01:42:41.604940",
"last_commit": "9047d246736a7a4cdf6c843cb26c987ccce36aae",
"last_commit_time": "2023-03-18T15:53:26"
"com.github.brpaz.ulauncher-faker": {
"id": "com.github.brpaz.ulauncher-faker",
"url": "https://github.com/brpaz/ulauncher-faker",
"updated_at": "2025-11-29T21:50:46.935500",
"last_commit": "58832c94acc671a9f603ea7fbf5d4405110bb902",
"last_commit_time": "2021-12-12T15:46:10"
}
}

View file

@ -3,7 +3,7 @@
"clear-previous-query": true,
"disable-desktop-filters": false,
"grab-mouse-pointer": false,
"hotkey-show-app": "<Primary>space",
"hotkey-show-app": "",
"render-on-screen": "mouse-pointer-monitor",
"show-indicator-icon": true,
"show-recent-apps": "0",

View file

@ -14,7 +14,7 @@
"name": "Perplexity",
"keyword": "p",
"cmd": "https://www.perplexity.ai/search?q=%s",
"icon": "https://www.perplexity.ai/favicon.ico",
"icon": "~/Pictures/Logos/Perplexity-Brand-Assets/Boundless-Book/Pure White.svg",
"is_default_search": true,
"run_without_argument": false,
"added": 1742151030.0001
@ -44,7 +44,7 @@
"name": "Ghostty Terminal",
"keyword": "g",
"cmd": "ghostty",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/utilities-terminal.png",
"icon": "/usr/share/icons/hicolor/128x128/apps/com.mitchellh.ghostty.png",
"is_default_search": false,
"run_without_argument": true,
"added": 1729026000.0001
@ -54,7 +54,7 @@
"name": "Zen Browser",
"keyword": "z",
"cmd": "zen-browser",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/web-browser.png",
"icon": "~/.tarball-installations/zen/browser/chrome/icons/default/default128.png",
"is_default_search": false,
"run_without_argument": true,
"added": 1729026000.0002
@ -64,7 +64,7 @@
"name": "n8n Workflows",
"keyword": "n8n",
"cmd": "xdg-open https://n8n.djeditech.com",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/web-browser.png",
"icon": "~/Pictures/Logos/n8n.svg",
"is_default_search": false,
"run_without_argument": true,
"added": 1729026000.0004
@ -74,7 +74,7 @@
"name": "LazyDocker",
"keyword": "d",
"cmd": "ghostty -e lazydocker",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/utilities-terminal.png",
"icon": "~/Pictures/Logos/docker.svg",
"is_default_search": false,
"run_without_argument": true,
"added": 1729026000.0005
@ -84,7 +84,7 @@
"name": "ProtonVPN Connect",
"keyword": "vpn",
"cmd": "ghostty -e 'protonvpn-cli c US-CO#246'",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/utilities-terminal.png",
"icon": "~/Pictures/Logos/protonvpn-logo.png",
"is_default_search": false,
"run_without_argument": true,
"added": 1729026000.0003
@ -114,7 +114,7 @@
"name": "GitHub Search",
"keyword": "gh",
"cmd": "https://github.com/search?q=%s&type=repositories",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/web-browser.png",
"icon": "~/Pictures/Logos/github-extracted/github-mark/github-mark.png",
"is_default_search": true,
"run_without_argument": false,
"added": 1760740000.0001
@ -124,7 +124,7 @@
"name": "LazyGit",
"keyword": "lg",
"cmd": "ghostty -e bash -c 'echo n | lazygit 2>/dev/null || lazygit'",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/utilities-terminal.png",
"icon": "~/Pictures/Logos/github-extracted/github-mark/github-mark.png",
"is_default_search": false,
"run_without_argument": true,
"added": 1760740000.0002
@ -134,7 +134,7 @@
"name": "Navi Cheatsheets",
"keyword": "navi",
"cmd": "ghostty -e navi",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/utilities-terminal.png",
"icon": "~/Pictures/Logos/navi-icon.svg",
"is_default_search": false,
"run_without_argument": true,
"added": 1760741000.0001
@ -144,7 +144,7 @@
"name": "Yazi File Manager",
"keyword": "yazi",
"cmd": "ghostty -e yazi",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/system-file-manager.png",
"icon": "~/Pictures/Logos/yazi-logo.png",
"is_default_search": false,
"run_without_argument": true,
"added": 1760741000.0002
@ -154,7 +154,7 @@
"name": "Yazi File Manager (short)",
"keyword": "yz",
"cmd": "ghostty -e yazi",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/system-file-manager.png",
"icon": "~/Pictures/Logos/yazi-logo.png",
"is_default_search": false,
"run_without_argument": true,
"added": 1760741000.0003
@ -234,7 +234,7 @@
"name": "Hugo Server",
"keyword": "hugo",
"cmd": "ghostty -e bash -c 'cd /home/e/github/hugo2/hugoplate && echo \"Starting Hugo server at http://localhost:1313\" && echo \"Press Ctrl+C to stop\" && hugo server --bind 0.0.0.0 --baseURL http://localhost:1313 -D; exec bash'",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/web-browser.png",
"icon": "~/Pictures/Logos/hugo-logo-wide.svg",
"is_default_search": false,
"run_without_argument": true,
"added": 1760743000.0005
@ -244,7 +244,7 @@
"name": "Download YouTube Video",
"keyword": "dl",
"cmd": "ghostty -e bash -c 'cd ~/Videos/Downloaded && yt-dlp \"%s\" && echo && echo \"Download complete! Saved to ~/Videos/Downloaded\" && echo \"Press any key to exit...\" && read -r _key; exec bash'",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/folder-download.png",
"icon": "~/Pictures/Logos/youtube-color-svgrepo-com.svg",
"is_default_search": true,
"run_without_argument": false,
"added": 1760743000.0006
@ -254,7 +254,7 @@
"name": "Obsidian Fuzzy Search",
"keyword": "o",
"cmd": "ghostty -e zsh -c 'result=$(rg -l \"%s\" ~/Documents/Obsidian-Fabric ~/Documents/Kamrui_Obsidian --type md 2>/dev/null | fzf --header=\"Select note to open\" --preview=\"bat --color=always --style=numbers {}\"); [ -n \"$result\" ] && xdg-open \"$result\"'",
"icon": "/usr/share/icons/hicolor/scalable/apps/obsidian-icon.png",
"icon": "/usr/share/icons/hicolor/scalable/apps/obsidian-icon.svg",
"is_default_search": true,
"run_without_argument": false,
"added": 1760744000.0002
@ -284,7 +284,7 @@
"name": "WiFi Network Manager",
"keyword": "wifi",
"cmd": "ghostty -e nmtui",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/network-wireless.png",
"icon": "~/Pictures/Logos/wifi-1018-svgrepo-com.svg",
"is_default_search": false,
"run_without_argument": true,
"added": 1760744000.0005
@ -294,7 +294,7 @@
"name": "Bluetooth Manager",
"keyword": "bt",
"cmd": "ghostty -e bluetoothctl",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/bluetooth.png",
"icon": "~/Pictures/Logos/Bluetooth.svg",
"is_default_search": false,
"run_without_argument": true,
"added": 1760744000.0006
@ -311,10 +311,10 @@
},
"d2433c00-43fd-424c-8e82-6f3d132708f2": {
"id": "d2433c00-43fd-424c-8e82-6f3d132708f2",
"name": "weather-test",
"name": "Weather Report",
"keyword": "w",
"cmd": "ghostty -e '/home/e/.bun/bin/bun /home/e/.claude/commands/weather-report.md && read \"Press Enter to exit...\"'",
"icon": null,
"cmd": "ghostty -e '/home/e/.claude/commands/weather-report.md && read \"Press Enter to exit...\"'",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/weather-clear.png",
"is_default_search": false,
"run_without_argument": true,
"added": 1760845029.8644536
@ -323,20 +323,50 @@
"id": "17ff09ab-cd33-4900-9626-e18f81647d8f",
"name": "Progress Bar",
"keyword": "pb",
"cmd": "ghostty -e '/home/e/.bun/bin/bun /home/e/.claude/commands/progress.md && read \"Press Enter to exit...\"'",
"icon": null,
"cmd": "ghostty -e '/home/e/.claude/commands/progress.md && read \"Press Enter to exit...\"'",
"icon": "~/Pictures/Logos/progress-two-svgrepo-com.svg",
"is_default_search": false,
"run_without_argument": true,
"added": 1761198481.905308
},
"57fbe6b9-7da4-4e31-8d94-7128d4a071e4": {
"id": "57fbe6b9-7da4-4e31-8d94-7128d4a071e4",
"name": "SimpleX",
"keyword": "simplex",
"cmd": "ghostty -e 'nohup simplex &'",
"icon": null,
"genpass-quicklink": {
"id": "genpass-quicklink",
"name": "Generate Password",
"keyword": "genpass",
"cmd": "bash -c 'openssl rand -base64 32 | tr -d \"\\n\" | xclip -selection clipboard && notify-send \"Password Generated\" \"32-character password copied to clipboard\"'",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/dialog-password.png",
"is_default_search": false,
"run_without_argument": true,
"added": 1762414155.4334407
"added": 1762587447.0752816
},
"tabman-browse-quicklink": {
"id": "tabman-browse-quicklink",
"name": "Browse Saved Tabs (Fuzzy)",
"keyword": "tabs",
"cmd": "ghostty -e tabman browse",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/web-browser.png",
"is_default_search": false,
"run_without_argument": true,
"added": 1762587977.874752
},
"tabman-recent-quicklink": {
"id": "tabman-recent-quicklink",
"name": "Recent Tabs (24h)",
"keyword": "tabnow",
"cmd": "ghostty -e 'tabman recent 24 && read \"Press Enter to exit...\"'",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/web-browser.png",
"is_default_search": false,
"run_without_argument": true,
"added": 1762587977.8747525
},
"tabman-dashboard-quicklink": {
"id": "tabman-dashboard-quicklink",
"name": "Tab Analytics Dashboard",
"keyword": "tabdash",
"cmd": "ghostty -e 'tabman dashboard && read \"Press Enter to exit...\"'",
"icon": "/usr/share/icons/Adwaita/48x48/legacy/web-browser.png",
"is_default_search": false,
"run_without_argument": true,
"added": 1762587977.8747542
}
}

View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 Kalid Yasin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2015 Kristi Russell
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,36 @@
<div align="center">
<img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
</div>
<h3 align="center">
Tokyonight Night Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
</h3>
## 👀 Preview
<img src="preview.png" width="600" />
## 🎨 Installation
```sh
ya pack -a kalidyasin/yazi-flavors:tokyonight-night
```
## ⚙️ Usage
Set the content of your `theme.toml` to enable it as your _dark_ flavor:
```toml
[flavor]
dark = "tokyonight-night"
```
Make sure your `theme.toml` doesn't contain anything other than `[flavor]`, unless you want to override certain styles of this flavor.
See the [Yazi flavor documentation](https://yazi-rs.github.io/docs/flavors/overview) for more details.
## 📜 License
The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.

View file

@ -0,0 +1,212 @@
# vim:fileencoding=utf-8:foldmethod=marker
# : Manager {{{
[manager]
cwd = { fg = "#a9b1d6", italic = true }
# Hovered
hovered = { bg = "#292e42" }
preview_hovered = { bg = "#292e42" }
# Find
find_keyword = { fg = "#16161e", bg = "#ff9e64", bold = true }
find_position = { fg = "#0db9d7", bg = "#192b38", bold = true }
# Marker
marker_copied = { fg = "#73daca", bg = "#73daca" }
marker_cut = { fg = "#f7768e", bg = "#f7768e" }
marker_marked = { fg = "#bb9af7", bg = "#bb9af7" }
marker_selected = { fg = "#7aa2f7", bg = "#7aa2f7" }
# Tab
tab_active = { fg = "#c0caf5", bg = "#292e42" }
tab_inactive = { fg = "#3b4261", bg = "#1a1b26" }
tab_width = 1
# Count
count_copied = { fg = "#c0caf5", bg = "#41a6b5" }
count_cut = { fg = "#c0caf5", bg = "#db4b4b" }
count_selected = { fg = "#c0caf5", bg = "#3d59a1" }
# Border
border_symbol = "│"
border_style = { fg = "#27a1b9" }
# : }}}
# : Mode {{{
[mode]
normal_main = { fg = "#15161e", bg = "#7aa2f7", bold = true }
normal_alt = { fg = "#7aa2f7", bg = "#3b4261" }
select_main = { fg = "#15161e", bg = "#bb9af7", bold = true }
select_alt = { fg = "#bb9af7", bg = "#3b4261" }
unset_main = { fg = "#15161e", bg = "#9d7cd8", bold = true }
unset_alt = { fg = "#9d7cd8", bg = "#3b4261" }
# : }}}
# : Status bar {{{
[status]
separator_open = ""
separator_close = ""
# Progress
progress_label = { fg = "#a9b1d6", bold = true }
progress_normal = { fg = "#1a1b26" }
progress_error = { fg = "#f7768e" }
# Permissions
perm_type = { fg = "#7aa2f7" }
perm_read = { fg = "#e0af68" }
perm_write = { fg = "#f7768e" }
perm_exec = { fg = "#9ece6a" }
perm_sep = { fg = "#414868" }
# : }}}
# : Pick {{{
[pick]
border = { fg = "#27a1b9" }
active = { fg = "#c0caf5", bg = "#283457" }
inactive = { fg = "#c0caf5" }
# : }}}
# : Input {{{
[input]
border = { fg = "#0db9d7" }
title = { fg = "#0db9d7" }
value = { fg = "#9d7cd8" }
selected = { bg = "#283457" }
# : }}}
# : Completion {{{
[completion]
border = { fg = "#0db9d7" }
active = { fg = "#c0caf5", bg = "#283457" }
inactive = { fg = "#c0caf5" }
icon_file = ""
icon_folder = ""
icon_command = ""
# : }}}
# : Tasks {{{
[tasks]
border = { fg = "#27a1b9" }
title = { fg = "#27a1b9" }
hovered = { fg = "#c0caf5", bg = "#283457" }
# : }}}
# : Which {{{
[which]
cols = 3
mask = { bg = "#16161e" }
cand = { fg = "#7dcfff" }
rest = { fg = "#7aa2f7" }
desc = { fg = "#bb9af7" }
separator = " ➜ "
separator_style = { fg = "#565f89" }
# : }}}
# : Confirm {{{
[confirm]
border = { fg = "#0db9d7" }
title = { fg = "#27a1b9" }
content = {}
list = {}
btn_yes = { bg = "#283457" }
btn_no = {}
btn_labels = [ " [Y]es ", " (N)o " ]
# : }}}
# : Spot {{{
[spot]
border = { fg = "#27a1b9" }
title = { fg = "#27a1b9" }
# : }}}
# : Notify {{{
[notify]
title_info = { fg = "#0db9d7" }
title_warn = { fg = "#e0af68" }
title_error = { fg = "#db4b4b" }
icon_error = ""
icon_warn = ""
icon_info = ""
# : }}}
# : Help {{{
[help]
on = { fg = "#9ece6a" }
run = { fg = "#bb9af7" }
hovered = { bg = "#292e42" }
footer = { fg = "#c0caf5", bg = "#1a1b26" }
# : }}}
# : File-specific styles {{{
[filetype]
rules = [
# Images
{ mime = "image/*", fg = "#e0af68" },
# Media
{ mime = "{audio,video}/*", fg = "#bb9af7" },
# Archives
{ mime = "application/*zip", fg = "#f7768e" },
{ mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}", fg = "#f7768e" },
# Documents
{ mime = "application/{pdf,doc,rtf,vnd.*}", fg = "#7dcfff" },
# Empty files
# { mime = "inode/x-empty", fg = "#f7768e" },
# Special files
{ name = "*", is = "orphan", bg = "#f7768e" },
{ name = "*", is = "exec" , fg = "#9ece6a" },
# Fallback
{ name = "*/", fg = "#7aa2f7" }
]
# : }}}

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 KiB

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,7 @@
[plugin]
deps = []
[[flavor.deps]]
use = "kalidyasin/yazi-flavors:tokyonight-night"
rev = "92a09a6"
hash = "845c5ee33e147b1a57f48728e42600ee"

View file

@ -44,6 +44,10 @@ alias S='sudo env PATH="$PATH"'
alias U='pipx upgrade-all' # Update all pipx packages
alias P='pipx list' # List pipx packages
# --- GUI Applications (background + disown) ---
alias nemo='nemo . > /dev/null 2>&1 & disown'
alias hugo-serve='hugo server --bind 0.0.0.0 --baseURL http://localhost:1313 -D > /dev/null 2>&1 & disown'
# --- OpenCode ---
ide() {
@ -239,9 +243,11 @@ fi
alias t='task'
alias tl='task list'
alias twa='task add'
tm() {
task modify
}
# tm() {
# task modify
# }
# Commented out: conflicts with TabMan alias at line 731
# Use 'task modify' directly or create 'tmod' alias if needed
alias tb='task burndown.daily'
# ----------------------------
@ -433,6 +439,7 @@ alias evening='redshift -O 3500 -P && echo "🌅 Evening mode activated (3500K)"
# WhisperTux quick launch aliases
alias wt='systemctl --user start whispertux'
alias wtr='systemctl --user restart whispertux'
alias wt-stop='systemctl --user stop whispertux'
alias wt-status='systemctl --user status whispertux'
alias wt-log='journalctl --user -u whispertux -f'
@ -679,3 +686,59 @@ msfl() {
fi
msfconsole -r "$HOME/scripts/multi_handler.rc"
}
# ================================================================
# System Backup Workflow
# ================================================================
# Full system backup to encrypted volume before major OS changes
#
# Usage:
# 1. Mount encrypted volume:
# sudo veracrypt -t <vault-path> /mnt/veracrypt1
# 2. Run backup:
# run-backup
# 3. Unmount when complete:
# sudo veracrypt -t -d /mnt/veracrypt1
#
# Notes:
# - Uses encrypted storage (VeraCrypt) for data at rest
# - Backup script is in ~/.claude/context/personal/scripts/
# - Logs to /var/log/system-backup.log
# - For low /tmp space, set TMPDIR before mounting:
# mkdir -p /path/to/temp && sudo env TMPDIR=/path/to/temp veracrypt -t ...
# ================================================================
alias run-backup='sudo ~/.claude/context/personal/scripts/full-system-backup.sh /mnt/backup-vault'
# ================================================================
# ProtonVPN Automation - Quick Reference & Documentation
#
# Created: 2025-11-08
#
# Quick reference for VPN server curation and automation system.
# See full docs: ~/.claude/skills/app-troubleshooting/SKILL.md (lines 2130-2369)
#
# Common commands:
# proton-connect-colorado - Connect to random top-quality server
# test-vpn-quality - Test current connection quality
# proton-rank-servers 20 - View top 20 servers by quality
# proton-discover-servers 1 50 - Discover new servers
# ================================================================
alias vpn-help='bat ~/.local/share/doc/protonvpn-automation-quickref.md 2>/dev/null || cat ~/.local/share/doc/protonvpn-automation-quickref.md'
# TabMan - Browser tab manager
alias tabman="bun ~/github/tabman/index.ts"
alias tm="bun ~/github/tabman/index.ts"
# Port reference quick access
alias lp='cat ~/.claude/context/infrastructure/ports-reference.md | less'
# Reddit video downloader for Redlib
alias reddit-dl="bun /home/e/opt/redlib/reddit-dl.ts"
alias inotify-check='echo "Instances: $(find /proc/*/fd -lname "anon_inode:inotify" 2>/dev/null | wc -l) / $(cat /proc/sys/fs/inotify/max_user_instances)"'
# SimpleX Bot - E2EE automation
alias simplex='~/opt/simplex-bot/simplex'

View file

@ -5,8 +5,13 @@ export PAGER="${PAGER:-most}"
# PAI3 Personal AI Infrastructure
export PAI_HOME="/home/e"
export PAI_DIR="$HOME/.claude" # Added for PAI v0.6.0 compatibility
export PATH=$PATH:"$HOME/.claude"
export PATH=$PATH:"$HOME/.claude/commands"
# IMPORTANT: claude/scripts must come FIRST to override system binaries
# This allows our Firejail wrappers to be found before /usr/bin
export PATH="$HOME/.claude/scripts:$PATH"
export PATH="$HOME/.claude:$PATH"
export PATH="$HOME/.claude/commands:$PATH"
export PATH="$HOME/.claude/context/personal/scripts:$PATH"
# export MANPAGER="sh -c 'sed -u -e \"s/\\x1B\[[0-9;]*m//g; s/.\\x08//g\" | bat -p -lman'"\nman 2 select
export BROWSER="${BROWSER:-brave}"
export LANG=en_US.UTF-8 # avoid locale issues
@ -15,6 +20,7 @@ export GOROOT="/usr/local/go"
export GOPATH="$HOME/go"
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$HOME/.bun/bin
export PATH="/usr/local/sbin:/usr/sbin:/sbin:$PATH"
# export STOW_DIR="$HOME/.config"
# --- fzf ---
@ -42,6 +48,7 @@ export FZF_CTRL_R_OPTS="
# Path
export PATH="$HOME/bin:$PATH"
export PATH="$PATH:$HOME/go/bin"
export PATH="$PATH:$HOME/.scripts:$HOME/scripts"
export PATH="$PATH:$HOME/.cargo/bin"
@ -62,3 +69,16 @@ if command -v bat &> /dev/null; then
export MANPAGER="sh -c 'sed -u -e \"s/\\x1B\[[0-9;]*m//g; s/.\\x08//g\" | bat -p -lman'"
fi
# Removed redundant PATH addition (already on line 50)
export PATH="/opt/zig:$PATH"
export YDOTOOL_SOCKET=/run/user/1000/.ydotool_socket
# SSH agent socket (user systemd service, not system socket)
export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"
# XWayland support for legacy X11 apps on Wayland
# Only set XAUTHORITY if needed - let the system handle DISPLAY
# if [[ -z "$XAUTHORITY" && -n "$WAYLAND_DISPLAY" ]]; then
# _xauth=$(find /run/user/$UID -maxdepth 1 -name "xauth_*" 2>/dev/null | head -1)
# [[ -n "$_xauth" ]] && export XAUTHORITY="$_xauth"
# unset _xauth
# fi

View file

@ -220,3 +220,8 @@ export PATH=$(echo "$PATH" | tr ':' '\n' | awk '!seen[$0]++' | paste -sd:)
# Make PATH available to GUI applications (Ulauncher, etc.)
# This ensures apps launched outside terminal sessions can find bun, custom bins, etc.
systemctl --user import-environment PATH
[ -f ~/.env ] && source ~/.env
# Port reference quick access
alias ports='cat ~/.claude/context/infrastructure/ports-reference.md | less'

View file

@ -1,28 +0,0 @@
# ---- TMUX-RECON zsh.zsh ----
# source custom aliases if exists
[ -f ~/.aliases.sh ] && source ~/.aliases.sh
# add .scripts to path
export PATH="$HOME/.scripts:$PATH"
# zoxide (if installed)
if command -v zoxide &> /dev/null; then
eval "$(zoxide init zsh)"
fi
# fzf (if installed)
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
# starship (optional fancy prompt)
[ -f ~/.config/starship.toml ] && eval "$(starship init zsh)"
# cargo
source $HOME/.cargo/env
alias -g -- -h='-h 2>&1 | bat --language=help --style=plain'
alias -g -- --help='--help 2>&1 | bat --language=help --style=plain'
# Custom prompt options or PS1 here if desired
# You can add any shared settings, completions, etc.