updates
This commit is contained in:
32
README.md
Normal file
32
README.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# keymap drawer adv360 base keymap
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
layout:
|
||||||
|
qmk_keyboard: adv360
|
||||||
|
layout_name: LAYOUT
|
||||||
|
layers:
|
||||||
|
BASE: # Top rows
|
||||||
|
- ["=", "1", "2", "3", "4", "5", Fn, Fn, "6", "7", "8", "9", "0", "-"]
|
||||||
|
- [Tab, Q, W, E, R, T, Fn, Fn, Y, U, I, O, P, "\\"] # Third row left side
|
||||||
|
- [Esc, A, S, D, F, G, Fn] # Top row thumb keys
|
||||||
|
- [Ctrl, Alt, Super, Ctrl] # Third row right side
|
||||||
|
- [Fn, H, J, K, L, ";", "'"] # Fourth row left side
|
||||||
|
- [Shift, Z, X, C, V, B] # Second small key thumb row
|
||||||
|
- [Home, Page Up] # Fourth row right side
|
||||||
|
- [N, M, ",", ".", "/", Shift] # Last row left side
|
||||||
|
- [Fn, null, null, null, null] # Remaining Big thumb keys and small ones intertwined
|
||||||
|
- [Backspace, Delete, End, Page Down, Enter, {h: SYM, t: Space}] # Last row right side
|
||||||
|
- [Left, Up, Down, Right, Fn]
|
||||||
|
SYM: # Top rows
|
||||||
|
- [null, null, null, null, null, null, null, null, null, null, null, null, null, null]
|
||||||
|
- [null, "!", null, "*", "-", "<", ">", null, "[", "]", "", null, "\\", null] # Third row left side
|
||||||
|
- [null, "$", null, '~', "+", "=", "&"] # Top row thumb keys
|
||||||
|
- [Ctrl, Alt, Super, Ctrl] # Third row right side
|
||||||
|
- [null, "{", "}", "\"", null, ":", null] # Fourth row left side
|
||||||
|
- [null, "#", null, "^", "|", "_"] # Second small key thumb row
|
||||||
|
- [Home, Page Up] # Fourth row right side
|
||||||
|
- ["(", ")", "'", null, "?", null] # Last row left side
|
||||||
|
- [null, null, null, null, null] # Remaining Big thumb keys and small ones intertwined
|
||||||
|
- [Backspace, Delete, End, Page Down, Enter, Space] # Last row right side
|
||||||
|
- [null, null, null, null, null]
|
||||||
|
```
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
model = "gpt-5.5"
|
model = "gpt-5.6-sol"
|
||||||
|
model_reasoning_effort = "medium"
|
||||||
|
|
||||||
approval_request = "untrusted"
|
approval_request = "on-request"
|
||||||
sandbox_mode = "read-only"
|
sandbox_mode = "read-only"
|
||||||
model_reasoning_effort = "high"
|
|
||||||
model_verbosity = "low"
|
model_verbosity = "low"
|
||||||
web_search = "cached"
|
web_search = "cached"
|
||||||
allow_login_shell = false
|
allow_login_shell = false
|
||||||
@@ -41,10 +41,26 @@ trust_level = "trusted"
|
|||||||
[projects."/home/pablu/projects/logprep-data-server"]
|
[projects."/home/pablu/projects/logprep-data-server"]
|
||||||
trust_level = "trusted"
|
trust_level = "trusted"
|
||||||
|
|
||||||
|
[projects."/home/pablu/.codex"]
|
||||||
|
trust_level = "trusted"
|
||||||
|
|
||||||
|
[projects."/home/pablu"]
|
||||||
|
trust_level = "trusted"
|
||||||
|
|
||||||
|
[projects."/home/pablu/projects/domain-router"]
|
||||||
|
trust_level = "trusted"
|
||||||
|
|
||||||
|
[projects."/home/pablu/projects/pybug"]
|
||||||
|
trust_level = "trusted"
|
||||||
|
|
||||||
|
[projects."/home/pablu/projects/suchoi-v2"]
|
||||||
|
trust_level = "trusted"
|
||||||
|
|
||||||
[tui]
|
[tui]
|
||||||
theme = "catppuccin-mocha"
|
theme = "catppuccin-mocha"
|
||||||
status_line = ["model-with-reasoning", "current-dir", "git-branch", "run-state", "permissions", "five-hour-limit"]
|
status_line = ["model-with-reasoning", "current-dir", "git-branch", "run-state", "permissions", "context-used"]
|
||||||
status_line_use_colors = true
|
status_line_use_colors = true
|
||||||
|
|
||||||
[tui.model_availability_nux]
|
[tui.model_availability_nux]
|
||||||
"gpt-5.5" = 4
|
"gpt-5.5" = 4
|
||||||
|
"gpt-5.6-sol" = 4
|
||||||
|
|||||||
@@ -1,62 +0,0 @@
|
|||||||
# source /usr/share/cachyos-fish-config/cachyos-config.fish
|
|
||||||
|
|
||||||
function fish_greeting
|
|
||||||
{{- if eq .chezmoi.hostname "ubuntu" }}
|
|
||||||
if test -z "$TMUX"
|
|
||||||
tmux new -As default
|
|
||||||
end
|
|
||||||
{{- else }}
|
|
||||||
fastfetch
|
|
||||||
{{- end }}
|
|
||||||
end
|
|
||||||
|
|
||||||
# Add ~/.local/bin to PATH
|
|
||||||
if test -d ~/.local/bin
|
|
||||||
if not contains -- ~/.local/bin $PATH
|
|
||||||
set -p PATH ~/.local/bin
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Add depot_tools to PATH
|
|
||||||
if test -d ~/Applications/depot_tools
|
|
||||||
if not contains -- ~/Applications/depot_tools $PATH
|
|
||||||
set -p PATH ~/Applications/depot_tools
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Fish command history
|
|
||||||
function history
|
|
||||||
builtin history --show-time='%F %T '
|
|
||||||
end
|
|
||||||
|
|
||||||
# Copy DIR1 DIR2
|
|
||||||
function copy
|
|
||||||
set count (count $argv | tr -d \n)
|
|
||||||
if test "$count" = 2; and test -d "$argv[1]"
|
|
||||||
set from (echo $argv[1] | trim-right /)
|
|
||||||
set to (echo $argv[2])
|
|
||||||
command cp -r $from $to
|
|
||||||
else
|
|
||||||
command cp $argv
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
set -U fish_complete_path $fish_complete_path /nix/var/nix/profiles/default/share/fish/vendor_completions.d
|
|
||||||
set -Ux EDITOR nvim
|
|
||||||
set -U fish_history_max 1000
|
|
||||||
|
|
||||||
{{ if eq .chezmoi.hostname "ubuntu" -}}
|
|
||||||
fish_add_path /opt/nvim-linux-x86_64/bin ~/.cargo/bin/
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
alias vim='nvim'
|
|
||||||
alias cd='z'
|
|
||||||
alias ls='eza --icons=always --color=always'
|
|
||||||
alias untar='tar -zxvf '
|
|
||||||
alias grep='grep --color=auto'
|
|
||||||
alias cleanup='sudo pacman -Rns (pacman -Qtdq)'
|
|
||||||
|
|
||||||
chezmoi completion fish | source
|
|
||||||
direnv hook fish | source
|
|
||||||
zoxide init fish | source
|
|
||||||
starship init fish | source
|
|
||||||
@@ -15,6 +15,8 @@ background-blur=true
|
|||||||
|
|
||||||
shell-integration-features = ssh-terminfo,ssh-env
|
shell-integration-features = ssh-terminfo,ssh-env
|
||||||
|
|
||||||
|
link-url = true
|
||||||
|
|
||||||
keybind = cmd+t=unbind
|
keybind = cmd+t=unbind
|
||||||
keybind = cmd+n=unbind
|
keybind = cmd+n=unbind
|
||||||
keybind = cmd+w=unbind
|
keybind = cmd+w=unbind
|
||||||
@@ -31,6 +33,7 @@ keybind = ctrl+v=paste_from_clipboard
|
|||||||
|
|
||||||
clipboard-paste-protection = false
|
clipboard-paste-protection = false
|
||||||
clipboard-paste-bracketed-safe = true
|
clipboard-paste-bracketed-safe = true
|
||||||
|
clipboard-trim-trailing-spaces = true
|
||||||
|
|
||||||
window-padding-x = 0
|
window-padding-x = 0
|
||||||
window-padding-y = 0
|
window-padding-y = 0
|
||||||
@@ -44,3 +47,7 @@ shell-integration = zsh
|
|||||||
macos-option-as-alt = left
|
macos-option-as-alt = left
|
||||||
macos-titlebar-style = transparent
|
macos-titlebar-style = transparent
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
custom-shader-animation = true
|
||||||
|
|
||||||
|
custom-shader = ./shaders/crisp_cursor_tail.glsl
|
||||||
|
|||||||
227
dot_config/ghostty/shaders/crisp_cursor_tail.glsl
Normal file
227
dot_config/ghostty/shaders/crisp_cursor_tail.glsl
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
// crisp_cursor_tail_v3.glsl
|
||||||
|
//
|
||||||
|
// A deliberately crisp Ghostty cursor trail:
|
||||||
|
// - no blur
|
||||||
|
// - no bloom or additive blending
|
||||||
|
// - the real cursor is never enlarged
|
||||||
|
// - several same-size cursor silhouettes fade behind it
|
||||||
|
//
|
||||||
|
// Requires Ghostty 1.3.0 or newer.
|
||||||
|
|
||||||
|
const float DURATION = 0.200;
|
||||||
|
|
||||||
|
// Strong enough to be clearly visible without additive glow.
|
||||||
|
const float MAX_OPACITY = 0.80;
|
||||||
|
|
||||||
|
const int TRAIL_COPIES = 13;
|
||||||
|
|
||||||
|
// Maximum trail length in approximate cursor-cell lengths.
|
||||||
|
const float MAX_TRAIL_CELLS = 3.5;
|
||||||
|
|
||||||
|
// Ignore tiny sub-cell position changes.
|
||||||
|
const float MIN_MOVE_CELLS = 0.20;
|
||||||
|
|
||||||
|
// Ghostty cannot tell the shader whether a move came from typing or navigation.
|
||||||
|
// Suppressing one-cell horizontal advances is the dependable approximation.
|
||||||
|
const bool SUPPRESS_SINGLE_CELL_HORIZONTAL = true;
|
||||||
|
const float CELL_TOLERANCE = 0.20;
|
||||||
|
|
||||||
|
// Suppress the large last-column -> first-column jump produced by line wrap.
|
||||||
|
const float WRAP_MIN_HORIZONTAL_CELLS = 4.0;
|
||||||
|
|
||||||
|
// Do not animate stale previous/current cursor state immediately after focus is
|
||||||
|
// restored. This also covers delayed frames from an unfocused surface.
|
||||||
|
const float REFOCUS_GUARD_TIME = 0.060;
|
||||||
|
|
||||||
|
// Higher values make the far end fade more strongly.
|
||||||
|
const float SPATIAL_FADE_POWER = 0.65;
|
||||||
|
|
||||||
|
// false: animate horizontal, vertical, and diagonal movement.
|
||||||
|
// true: only animate left/right movement.
|
||||||
|
const bool HORIZONTAL_ONLY = false;
|
||||||
|
|
||||||
|
vec3 srgbToLinear(vec3 c) {
|
||||||
|
return mix(
|
||||||
|
c / 12.92,
|
||||||
|
pow((c + 0.055) / 1.055, vec3(2.4)),
|
||||||
|
step(vec3(0.04045), c)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert pixel coordinates to the normalized coordinate system used by the
|
||||||
|
// known-working Ghostty cursor shaders. Positions use isPosition=1.0;
|
||||||
|
// dimensions use isPosition=0.0.
|
||||||
|
vec2 toNormalized(vec2 value, float isPosition) {
|
||||||
|
return (value * 2.0 - iResolution.xy * isPosition) / iResolution.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
float rectangleSdf(vec2 point, vec2 center, vec2 halfSize) {
|
||||||
|
vec2 d = abs(point - center) - halfSize;
|
||||||
|
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
float rectangleMask(vec2 point, vec2 center, vec2 halfSize) {
|
||||||
|
// Hard edge: intentionally no antialiasing or blur.
|
||||||
|
return step(rectangleSdf(point, center, halfSize), 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
float easeOutCubic(float x) {
|
||||||
|
float y = 1.0 - x;
|
||||||
|
return 1.0 - y * y * y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
||||||
|
#if !defined(WEB)
|
||||||
|
fragColor = texture(iChannel0, fragCoord.xy / iResolution.xy);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Ghostty deliberately renders unfocused surfaces less frequently. Drawing
|
||||||
|
// from their stale cursor uniforms causes detached or hollow-looking trails.
|
||||||
|
if (iFocus <= 0 || (iTime - iTimeFocus) < REFOCUS_GUARD_TIME) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (iResolution.x <= 0.0 || iResolution.y <= 0.0 ||
|
||||||
|
any(lessThanEqual(iCurrentCursor.zw, vec2(0.0))) ||
|
||||||
|
any(lessThanEqual(iPreviousCursor.zw, vec2(0.0)))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 point = toNormalized(fragCoord, 1.0);
|
||||||
|
|
||||||
|
vec4 currentCursor = vec4(
|
||||||
|
toNormalized(iCurrentCursor.xy, 1.0),
|
||||||
|
toNormalized(iCurrentCursor.zw, 0.0)
|
||||||
|
);
|
||||||
|
|
||||||
|
vec4 previousCursor = vec4(
|
||||||
|
toNormalized(iPreviousCursor.xy, 1.0),
|
||||||
|
toNormalized(iPreviousCursor.zw, 0.0)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Ghostty cursor.xy is the left/top corner.
|
||||||
|
vec2 offsetFactor = vec2(-0.5, 0.5);
|
||||||
|
vec2 currentCenter =
|
||||||
|
currentCursor.xy - currentCursor.zw * offsetFactor;
|
||||||
|
vec2 previousCenter =
|
||||||
|
previousCursor.xy - previousCursor.zw * offsetFactor;
|
||||||
|
|
||||||
|
vec2 movement = previousCenter - currentCenter;
|
||||||
|
float movementLength = length(movement);
|
||||||
|
|
||||||
|
if (movementLength <= 0.000001) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (HORIZONTAL_ONLY && abs(movement.y) > 0.00001) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 direction = movement / movementLength;
|
||||||
|
|
||||||
|
// Approximate one cell along the direction of travel.
|
||||||
|
float cellLength =
|
||||||
|
abs(direction.x) * currentCursor.z +
|
||||||
|
abs(direction.y) * currentCursor.w;
|
||||||
|
cellLength = max(cellLength, 0.000001);
|
||||||
|
|
||||||
|
if ((movementLength / cellLength) < MIN_MOVE_CELLS) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float horizontalCells = abs(movement.x) / currentCursor.z;
|
||||||
|
float verticalCells = abs(movement.y) / currentCursor.w;
|
||||||
|
|
||||||
|
bool singleCellHorizontal =
|
||||||
|
verticalCells < CELL_TOLERANCE &&
|
||||||
|
abs(horizontalCells - 1.0) <= CELL_TOLERANCE;
|
||||||
|
if (SUPPRESS_SINGLE_CELL_HORIZONTAL && singleCellHorizontal) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool likelyLineWrap =
|
||||||
|
abs(verticalCells - 1.0) <= CELL_TOLERANCE &&
|
||||||
|
horizontalCells >= WRAP_MIN_HORIZONTAL_CELLS;
|
||||||
|
if (likelyLineWrap) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float elapsed = iTime - iTimeCursorChange;
|
||||||
|
if (elapsed < 0.0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
float progress = clamp(elapsed / DURATION, 0.0, 1.0);
|
||||||
|
|
||||||
|
if (progress >= 1.0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Linear persistence keeps the trail clearly visible for most of its
|
||||||
|
// lifetime. The previous cubic curve became almost invisible too quickly.
|
||||||
|
float remaining = 1.0 - progress;
|
||||||
|
|
||||||
|
// Keep opacity strong through the first half, then fade smoothly.
|
||||||
|
float timeOpacity = pow(remaining, 0.85);
|
||||||
|
|
||||||
|
float cappedLength =
|
||||||
|
min(movementLength, MAX_TRAIL_CELLS * cellLength);
|
||||||
|
|
||||||
|
vec2 cappedPreviousCenter =
|
||||||
|
currentCenter + direction * cappedLength;
|
||||||
|
|
||||||
|
float trailAlpha = 0.0;
|
||||||
|
|
||||||
|
for (int index = 1; index <= TRAIL_COPIES; ++index) {
|
||||||
|
float distanceRank =
|
||||||
|
float(index) / float(TRAIL_COPIES);
|
||||||
|
|
||||||
|
// At t=0, copies span current -> previous. As time advances they all
|
||||||
|
// collapse toward current, leaving the real cursor unchanged.
|
||||||
|
vec2 copyCenter = mix(
|
||||||
|
currentCenter,
|
||||||
|
cappedPreviousCenter,
|
||||||
|
distanceRank * remaining
|
||||||
|
);
|
||||||
|
|
||||||
|
float copyMask = rectangleMask(
|
||||||
|
point,
|
||||||
|
copyCenter,
|
||||||
|
currentCursor.zw * 0.5
|
||||||
|
);
|
||||||
|
|
||||||
|
// Nearest copies are strongest; distant copies are progressively faint.
|
||||||
|
float spatialFade = pow(
|
||||||
|
1.0 - distanceRank * 0.82,
|
||||||
|
SPATIAL_FADE_POWER
|
||||||
|
);
|
||||||
|
|
||||||
|
float copyAlpha =
|
||||||
|
MAX_OPACITY * spatialFade * timeOpacity;
|
||||||
|
|
||||||
|
// max(), not addition: overlapping copies never become a bright glow.
|
||||||
|
trailAlpha = max(
|
||||||
|
trailAlpha,
|
||||||
|
copyMask * copyAlpha
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cut out the actual cursor rectangle so its apparent size and contrast are
|
||||||
|
// controlled entirely by Ghostty, not by this shader.
|
||||||
|
float currentCursorMask = rectangleMask(
|
||||||
|
point,
|
||||||
|
currentCenter,
|
||||||
|
currentCursor.zw * 0.5
|
||||||
|
);
|
||||||
|
trailAlpha *= 1.0 - currentCursorMask;
|
||||||
|
|
||||||
|
vec4 trailColor = vec4(
|
||||||
|
srgbToLinear(iCurrentCursorColor.rgb),
|
||||||
|
iCurrentCursorColor.a
|
||||||
|
);
|
||||||
|
|
||||||
|
fragColor = mix(
|
||||||
|
fragColor,
|
||||||
|
trailColor,
|
||||||
|
trailAlpha * trailColor.a
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -6,4 +6,5 @@ hl.on("hyprland.start", function()
|
|||||||
hl.exec_cmd("dunst")
|
hl.exec_cmd("dunst")
|
||||||
hl.exec_cmd("killall -q waybar; sleep .5 && env LC_TIME=de_DE.UTF-8 waybar")
|
hl.exec_cmd("killall -q waybar; sleep .5 && env LC_TIME=de_DE.UTF-8 waybar")
|
||||||
hl.exec_cmd("hypridle")
|
hl.exec_cmd("hypridle")
|
||||||
|
hl.exec_cmd("kanata --cfg ~/.config/kanata/adv360.kbd --no-wait")
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ hl.curve("almostLinear", { type = "bezier", points = { { 0.5, 0.5 }, { 0.75, 1 }
|
|||||||
hl.curve("quick", { type = "bezier", points = { { 0.15, 0 }, { 0.1, 1 } } })
|
hl.curve("quick", { type = "bezier", points = { { 0.15, 0 }, { 0.1, 1 } } })
|
||||||
|
|
||||||
-- Default springs
|
-- Default springs
|
||||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 71.2633, dampening = 15.8273644 })
|
hl.curve("easy", { type = "spring", mass = 1, stiffness = 500, dampening = 41 })
|
||||||
|
|
||||||
hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" })
|
hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" })
|
||||||
hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" })
|
hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" })
|
||||||
@@ -137,3 +137,9 @@ hl.device({
|
|||||||
kb_layout = "us",
|
kb_layout = "us",
|
||||||
kb_variant = "",
|
kb_variant = "",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
hl.device({
|
||||||
|
name = "kanata-adv360",
|
||||||
|
kb_layout = "us",
|
||||||
|
kb_variant = "",
|
||||||
|
})
|
||||||
|
|||||||
@@ -5,6 +5,14 @@ return {
|
|||||||
build = ":TSUpdate",
|
build = ":TSUpdate",
|
||||||
config = function()
|
config = function()
|
||||||
local treesitter = require("nvim-treesitter")
|
local treesitter = require("nvim-treesitter")
|
||||||
treesitter.install({ "python", "go", "zig", "markdown", "json", "yaml", "javascript", "typescript", "bash", "python", "lua" })
|
treesitter.install({ "python", "go", "zig", "markdown", "json", "yaml", "javascript", "typescript", "bash", "python",
|
||||||
|
"lua" })
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
group = vim.api.nvim_create_augroup("treesitter-start", { clear = true }),
|
||||||
|
callback = function()
|
||||||
|
pcall(vim.treesitter.start)
|
||||||
|
end
|
||||||
|
})
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user