Compare commits

..
9 Commits
Author SHA1 Message Date
Coja 93b4f695ce [Sync] LLM clients → Qwen3.6-35B-A3B-Thinking default, Ornith preset, fl GPU monitor abbrs
Re-export of private HEAD 73b4a65: default-model flip + 8k thinking budget
in the aichat/opencode/pi client configs, the Ornith-1.5-35B-A3B preset and
its gate bench in fl/.config/llamacpp, and the fl fish abbrs `vram` /
`vramx` with the new gpumon.sh (sysfs VRAM/GTT monitor).
2026-10-16 14:11:09 +02:00
Coja 2fa113cd15 [Sync] LLM clients → Qwen3.6-35B-A3B-Thinking default, Ornith preset, fl GPU monitor abbrs 2026-09-21 18:20:21 +02:00
Coja 9fc7854751 [LLM] models update 2026-09-21 17:45:07 +02:00
Coja e65d8e597a [Cleanup] llm files 2026-09-17 21:45:59 +02:00
Coja 4f5054ed0d [Sync] opencode 2.x 2026-09-17 21:25:54 +02:00
Coja d8f6b30e2c [Sync] llm stuff 2026-09-17 20:58:21 +02:00
coja ed7e34552d [Update] bulk update 2026-09-17 20:45:06 +02:00
coja 3ec2503f38 [Chore] cleanup 2026-08-13 03:36:03 +02:00
coja 1e39e0cb4b [Sync] replace the flat layout with the unified stow tree
Supersedes the old flat .config/ layout (last published 2026-06-28) with the
private repo's structure: one shared base plus per-host overlays.

- packages: common/ gui/ lw/ fl/ wm/ plus install.sh and bin/ tooling
  (dotsync, reconcile-hyde.sh)
- new README covering the layout, deploy order and the HyDE dependency
- current HyDE waybar rig (layouts/, cava), pi agent extensions, claude/
  config, tmux, presenterm, aichat roles
- fish: kp (keepassxc-cli + fzf picker, db path from $KP_DB) and
  bind_M_n_history (alt+1..9 recalls the nth history entry)
- drops cruft that should never have been tracked: the duplicate top-level
  .pi/ copy, btop.log, zellij config.kdl.bak, fish_variables
- .pi/agent/auth.json is gitignored; auth.json.example ships instead

Host-specific work sessions and the personal backlog stay in the private
tree. Endpoint locators in the llamacpp/whisper guides are placeholders
($SERVER, <own-domain>) — the guides themselves stay, since they are the
useful part.
2026-08-13 02:53:06 +02:00
386 changed files with 16786 additions and 12341 deletions

No files matched your search

-41
View File
@@ -1,41 +0,0 @@
#
# ~/.bashrc
#
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
alias grep='grep --color=auto'
alias fzf="fzf --preview color='always {}'"
alias pacs="sudo pacman -Syu"
alias nmaps="sudo nmap -sn 192.168.0.0/24"
alias mem="df -H --output=source,size,used,avail | grep 480G | sort -u"
alias kittyimg="kitten icat"
alias vpn="sudo wg-quick up wg0"
alias vpnoff="sudo wg-quick down wg0"
alias xremaps="sudo xremap ~/.config/xremap/config.yml"
alias llama="~/projects/llama.cpp/build/bin/llama-server -m /home/anon/projects/llama.cpp/models/Llama-3.2-3B-Instruct-F16.gguf"
alias dots="cd ~/.dotfiles/.config/ && nvim"
alias aliases="bat ~/.config/fish/config.fish"
# List Directory
alias ls="lsd"
alias l="ls -l"
alias la="ls -a"
alias lla="ls -la"
alias lt="ls --tree"
# Git
alias gs='git status'
alias gca='git add -p . && git commit'
alias gd="git diff --word-diff"
alias gl='git log --graph --show-signature'
alias gla="git log --all --decorate --oneline --graph"
alias gm='git merge'
alias gis='git status'
PS1='[\u@\h \W]\$'
set -o vi
eval "$(zoxide init --cmd cd bash)"
-3
View File
@@ -1,3 +0,0 @@
greet.txt
fish_variables
secrets.fish
-27
View File
@@ -1,27 +0,0 @@
# see https://github.com/sigoden/aichat/blob/main/config.example.yaml
keybindings: vi
editor: nvim
model: duskadiy:Qwen3-Coder-30B-Instruct-IQ4_XS
clients:
- type: openai-compatible
name: local
api_base: http://192.168.0.204:11343/v1
models:
- name: Qwen3.5-27B-UD-Q3_K_XL
- name: Qwen3.5-9B-Q8_0
- name: Qwen3-Coder-30B-Instruct-IQ4_XS
- name: GLM-4.7-Flash-UD-Q3_K_XL
- name: DeepSeek-Coder-V2-Lite-Instruct-Q8_0
- name: gemma-4-E4B-it-UD-Q8_K_XL
- name: gemma-4-26B-A4B-it-UD-IQ4_XS
- type: openai-compatible
name: duskadiy
api_base: https://llm.duskadiy.com/api/v1
models:
- name: Qwen3.5-27B-UD-Q3_K_XL
- name: Qwen3.5-9B-Q8_0
- name: Qwen3-Coder-30B-Instruct-IQ4_XS
- name: GLM-4.7-Flash-UD-Q3_K_XL
- name: DeepSeek-Coder-V2-Lite-Instruct-Q8_0
- name: gemma-4-E4B-it-UD-Q8_K_XL
- name: gemma-4-26B-A4B-it-UD-IQ4_XS
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
-40
View File
@@ -1,40 +0,0 @@
2024/11/19 (20:36:51) | ===> btop++ v.1.4.0
2024/11/19 (20:36:51) | WARNING: Intel GPU: Failed to initialize PMU
2024/11/19 (20:37:28) | INFO: Logger set to INFO
2024/11/26 (00:47:27) | ===> btop++ v.1.4.0
2024/11/26 (00:47:27) | WARNING: Intel GPU: Failed to initialize PMU
2024/11/26 (00:47:32) | ===> btop++ v.1.4.0
2024/11/26 (00:47:32) | WARNING: Intel GPU: Failed to initialize PMU
2024/12/16 (20:32:28) | ===> btop++ v.1.4.0
2024/12/16 (20:32:28) | WARNING: Intel GPU: Failed to initialize PMU
2025/01/06 (01:34:00) | ===> btop++ v.1.4.0
2025/01/06 (01:34:00) | WARNING: Intel GPU: Failed to initialize PMU
2025/02/23 (01:19:32) | ===> btop++ v.1.4.0
2025/02/23 (01:19:32) | WARNING: Intel GPU: Failed to initialize PMU
2025/03/12 (19:08:38) | ===> btop++ v.1.4.0
2025/03/12 (19:08:38) | WARNING: Intel GPU: Failed to initialize PMU
2025/03/13 (00:34:24) | ===> btop++ v.1.4.0
2025/03/13 (00:34:24) | WARNING: Intel GPU: Failed to initialize PMU
2025/03/19 (17:51:06) | ===> btop++ v.1.4.0
2025/03/19 (17:51:06) | WARNING: Intel GPU: Failed to initialize PMU
2025/03/22 (05:43:25) | ===> btop++ v.1.4.0
2025/03/22 (05:43:25) | WARNING: Intel GPU: Failed to initialize PMU
2025/03/22 (05:43:39) | ===> btop++ v.1.4.0
2025/03/22 (05:43:39) | WARNING: Intel GPU: Failed to initialize PMU
2025/03/24 (02:13:29) | ===> btop++ v.1.4.0
2025/03/24 (02:13:29) | WARNING: Intel GPU: Failed to initialize PMU
2025/03/25 (22:21:48) | ===> btop++ v.1.4.0
2025/03/25 (22:21:48) | WARNING: Intel GPU: Failed to initialize PMU
-13
View File
@@ -1,13 +0,0 @@
[color]
gradient = 1
gradient_count = 8
gradient_color_1 = '#332952'
gradient_color_2 = '#463A6B'
gradient_color_3 = '#7D4B5F'
gradient_color_4 = '#8F576D'
gradient_color_5 = '#A36578'
gradient_color_6 = '#C27A90'
gradient_color_7 = '#E69A9D'
gradient_color_8 = '#F0AAAD'
@@ -1,11 +0,0 @@
[color]
gradient = 1
gradient_color_1 = '#81c8be'
gradient_color_2 = '#99d1db'
gradient_color_3 = '#85c1dc'
gradient_color_4 = '#8caaee'
gradient_color_5 = '#ca9ee6'
gradient_color_6 = '#f4b8e4'
gradient_color_7 = '#ea999c'
gradient_color_8 = '#e78284'
-13
View File
@@ -1,13 +0,0 @@
[color]
background = '#303446'
gradient = 1
gradient_color_1 = '#81c8be'
gradient_color_2 = '#99d1db'
gradient_color_3 = '#85c1dc'
gradient_color_4 = '#8caaee'
gradient_color_5 = '#ca9ee6'
gradient_color_6 = '#f4b8e4'
gradient_color_7 = '#ea999c'
gradient_color_8 = '#e78284'
@@ -1,11 +0,0 @@
[color]
gradient = 1
gradient_color_1 = '#179299'
gradient_color_2 = '#04a5e5'
gradient_color_3 = '#209fb5'
gradient_color_4 = '#1e66f5'
gradient_color_5 = '#8839ef'
gradient_color_6 = '#ea76cb'
gradient_color_7 = '#e64553'
gradient_color_8 = '#d20f39'
-13
View File
@@ -1,13 +0,0 @@
[color]
background = '#eff1f5'
gradient = 1
gradient_color_1 = '#179299'
gradient_color_2 = '#04a5e5'
gradient_color_3 = '#209fb5'
gradient_color_4 = '#1e66f5'
gradient_color_5 = '#8839ef'
gradient_color_6 = '#ea76cb'
gradient_color_7 = '#e64553'
gradient_color_8 = '#d20f39'
@@ -1,11 +0,0 @@
[color]
gradient = 1
gradient_color_1 = '#8bd5ca'
gradient_color_2 = '#91d7e3'
gradient_color_3 = '#7dc4e4'
gradient_color_4 = '#8aadf4'
gradient_color_5 = '#c6a0f6'
gradient_color_6 = '#f5bde6'
gradient_color_7 = '#ee99a0'
gradient_color_8 = '#ed8796'
-13
View File
@@ -1,13 +0,0 @@
[color]
background = '#24273a'
gradient = 1
gradient_color_1 = '#8bd5ca'
gradient_color_2 = '#91d7e3'
gradient_color_3 = '#7dc4e4'
gradient_color_4 = '#8aadf4'
gradient_color_5 = '#c6a0f6'
gradient_color_6 = '#f5bde6'
gradient_color_7 = '#ee99a0'
gradient_color_8 = '#ed8796'
@@ -1,11 +0,0 @@
[color]
gradient = 1
gradient_color_1 = '#94e2d5'
gradient_color_2 = '#89dceb'
gradient_color_3 = '#74c7ec'
gradient_color_4 = '#89b4fa'
gradient_color_5 = '#cba6f7'
gradient_color_6 = '#f5c2e7'
gradient_color_7 = '#eba0ac'
gradient_color_8 = '#f38ba8'
-13
View File
@@ -1,13 +0,0 @@
[color]
background = '#1e1e2e'
gradient = 1
gradient_color_1 = '#94e2d5'
gradient_color_2 = '#89dceb'
gradient_color_3 = '#74c7ec'
gradient_color_4 = '#89b4fa'
gradient_color_5 = '#cba6f7'
gradient_color_6 = '#f5c2e7'
gradient_color_7 = '#eba0ac'
gradient_color_8 = '#f38ba8'
-1
View File
@@ -1 +0,0 @@
fnm env --use-on-cd --shell fish | source
-93
View File
@@ -1,93 +0,0 @@
set -gx QT_FONT_DPI 96
set -gx EDITOR nvim
set -gx PAGER less
set -gx PATH "/run/user/1000/fnm_multishells/14287_1763490645306/bin" $PATH;
set -gx FNM_MULTISHELL_PATH "/run/user/1000/fnm_multishells/14287_1763490645306";
set -gx FNM_VERSION_FILE_STRATEGY "local";
set -gx FNM_DIR "/home/anon/.local/share/fnm";
set -gx FNM_LOGLEVEL "info";
set -gx FNM_NODE_DIST_MIRROR "https://nodejs.org/dist";
set -gx FNM_COREPACK_ENABLED "false";
set -gx FNM_RESOLVE_ENGINES "true";
set -gx FNM_ARCH "x64";
set -Ux MANPAGER "nvim +Man!"
# set -gx DUSKADIY_API_KEY "*****"
set -x NEWT_COLORS 'root=black,black;window=black,black;border=white,black;listbox=white,black;label=blue,black;checkbox=red,black;title=green,black;button=white,red;actsellistbox=white,red;actlistbox=white,gray;compactbutton=white,gray;actcheckbox=white,blue;entry=lightgray,black;textbox=blue,black' nmtui
# set -gx BAT_THEME "Catppuccin Mocha"
alias dmz="cat ~/.config/fish/dmz.txt"
alias matrix="~/projects/random-clones/matrix/matrix"
alias nmatrix="neo-matrix -DS 3"
# LLMs
alias llamasrv="~/projects/pkgs/llama.cpp/build/bin/llama-server"
abbr llamastart "llamasrv --host 0.0.0.0 --port 11343 --models-max 3 --models-preset ~/Documents/models/config.ini"
# Shorts
alias fzf="fzf --multi --preview 'bat --style=numbers --color=always {}' | xargs -n 1 nvim"
alias grep="grep --color=auto"
# Git
alias gs="git status --short"
alias gca="git add -p . && git commit"
alias gd="git diff --word-diff"
alias gl="git log --graph --show-signature"
alias gla="git log --all --decorate --oneline --graph"
alias gls="serie"
alias gm="git merge"
alias gm="git merge"
# List Directory
alias ls="lsd"
alias l="ls -l"
alias la="ls -a"
alias lla="ls -la"
alias lt="ls --tree"
alias cdots="cd ~/.dotfiles/.config/"
alias cpnotes="cd ~/sync/PersonalNotes/"
abbr dots "cdots && nvim"
abbr pnotes "cpnotes && nvim"
abbr todo "cpnotes && nvim ToDoNext.md"
abbr cat "bat -p"
abbr copy "wl-copy"
abbr img "kitten icat"
abbr fm "yazi" ## file manager
abbr lg "lazygit"
abbr mkdir "mkdir -p"
abbr faillock "sudo faillock --reset"
abbr ipadd "sudo ip route add 192.168.0.234 dev wg0"
abbr xremaps "sudo xremap --watch ~/.config/xremap/config.yml"
abbr pacs "sudo pacman -Syu --noconfirm"
abbr yays "yay --noconfirm --sudoloop"
abbr nmaps "sudo nmap -sn 192.168.0.0/24"
abbr scrcpyc 'scrcpy -wSK -m 1920 --window-borderless --always-on-top --power-off-on-close'
abbr scrcpys 'scrcpy -wS --power-off-on-close'
abbr aliases "bat ~/.config/fish/config.fish"
abbr tts "tt -notheme -bold -showwpm -json"
# Handy change dir shortcuts
abbr .. "cd .."
abbr ... "cd ../.."
abbr .3 "cd ../../.."
abbr .4 "cd ../../../.."
abbr .5 "cd ../../../../.."
zoxide init --cmd cd fish | source
export PATH="$HOME/.cargo/bin:$PATH"
thefuck --alias | source
# Created by `pipx` on 2025-05-31 20:14:06
set PATH $PATH /home/anon/.local/bin
# pnpm
set -gx PNPM_HOME "/home/anon/.local/share/pnpm"
if not string match -q -- $PNPM_HOME $PATH
set -gx PATH "$PNPM_HOME" $PATH
end
# pnpm end
fnm env --use-on-cd --shell fish | source
-7
View File
@@ -1,7 +0,0 @@
# This file contains fish universal variable definitions.
# VERSION: 3.0
SETUVAR --export EDITOR:nvim
SETUVAR --export MANPAGER:nvim\x20\x2bMan\x21
SETUVAR --export MANROFFOPT:\x2dP\x20\x2dc
SETUVAR TMP:/tmp/tmp\x2eYYqSsNsses
SETUVAR __fish_initialized:4300
-3
View File
@@ -1,3 +0,0 @@
function ask --description 'answer from cht.sh'
curl -s https://cht.sh/$(string join '+' $argv[1..])
end
-3
View File
@@ -1,3 +0,0 @@
function askllama --description 'answer from llama'
~/projects/pkgs/llama.cpp/build/bin/llama-simple -m ~/Documents/models/Qwen3-4B-Instruct-2507.Q4_K_M.gguf $(string join '+' $argv[1..])
end
-3
View File
@@ -1,3 +0,0 @@
function clis --description 'fzf select cli'
eval (string split "\n" (cat $HOME/.config/misc/clis.txt) | bashs "fzf --multi")
end
@@ -1,7 +0,0 @@
function fish_greeting
#curl "wttr.in/Belgrade?format=%l:+%c+%t+|+%h+|+%w+|+(%%M+%m)\n"
cat ~/.config/fish/greet.txt ## populated by cronjob
date +"📅 %d. %b 🕗 %H:%M - %A"
end
-21
View File
@@ -1,21 +0,0 @@
function opencodes --description 'bubblewraped opencode'
bwrap --unshare-all \
--new-session \
--clearenv \
--die-with-parent \
--share-net \
--dev /dev \
--proc /proc \
--ro-bind /usr /usr \
--ro-bind /lib /lib \
--ro-bind /lib64 /lib64 \
--ro-bind /bin /bin \
--ro-bind /etc /etc \
--ro-bind ~/.config/opencode ~/.config/opencode \
--tmpfs /tmp/node-compile-cache \
--bind ~/.local/state/opencode ~/.local/state/opencode \
--bind ~/.local/share/opencode ~/.local/share/opencode \
--bind "$(pwd)" "$(pwd)" \
opencode
end
# strace -f -e trace=%file opencode
-3
View File
@@ -1,3 +0,0 @@
function sshf --description 'fzf select for ssh hosts'
ssh $(grep Host -w ~/.ssh/config | awk '{print $2}' | bashs "fzf --multi")
end
-3
View File
@@ -1,3 +0,0 @@
function tuis --description 'fzf select tui'
eval (string split "\n" (cat $HOME/.config/misc/tuis.txt) | bashs "fzf --multi")
end
-23
View File
@@ -1,23 +0,0 @@
# This file is generated by wallbash:animations.dcol
# // ▄▀█ █▄░█ █ █▀▄▀█ ▄▀█ ▀█▀ █ █▀█ █▄░█
# // █▀█ █░▀█ █ █░▀░█ █▀█ ░█░ █ █▄█ █░▀█
# See https://wiki.hyprland.org/Configuring/Animations/
# credits: https://github.com/prasanthrangan/hyprdots
animations {
enabled = yes
bezier = wind, 0.05, 0.9, 0.1, 1.05
bezier = winIn, 0.1, 1.1, 0.1, 1.1
bezier = winOut, 0.3, -0.3, 0, 1
bezier = liner, 1, 1, 1, 1
animation = windows, 1, 6, wind, slide
animation = windowsIn, 1, 6, winIn, slide
animation = windowsOut, 1, 5, winOut, slide
animation = windowsMove, 1, 5, wind, slide
animation = border, 1, 1, liner
animation = borderangle, 1, 30, liner, once
animation = fade, 1, 10, default
animation = workspaces, 1, 5, wind
}
-27
View File
@@ -1,27 +0,0 @@
#!/bin/bash
# Get the current battery percentage
battery_percentage=$(cat /sys/class/power_supply/BAT0/capacity)
# Get the battery status (Charging or Discharging)
battery_status=$(cat /sys/class/power_supply/BAT0/status)
# Define the battery icons for each 10% segment
battery_icons=("󰂃" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰁹")
# Define the charging icon
charging_icon="󰂄"
# Calculate the index for the icon array
icon_index=$((battery_percentage / 10))
# Get the corresponding icon
battery_icon=${battery_icons[icon_index]}
# Check if the battery is charging
if [ "$battery_status" = "Charging" ]; then
battery_icon="$charging_icon"
fi
# Output the battery percentage and icon
echo "$battery_percentage% $battery_icon"
-42
View File
@@ -1,42 +0,0 @@
#!   ░▒▒▒░░░▓▓          ___________
#! ░░▒▒▒░░░░░▓▓        //___________/
#! ░░▒▒▒░░░░░▓▓     _   _ _    _ _____
#! ░░▒▒░░░░░▓▓▓▓▓▓ | | | | |  | |  __/
#! ░▒▒░░░░▓▓   ▓▓ | |_| | |_/ /| |___
#!  ░▒▒░░▓▓   ▓▓   \__  |____/ |____/
#!    ░▒▓▓   ▓▓  //____/
# $LOCKSCREEN = hyprlock # preferred LOCKSCREEN e.g swaylock
$LOCKSCREEN = lockscreen.sh # Calls $LOCKSCREEN set from hyprland
general {
lock_cmd = pidof hyprlock || hyprlock
on_unlock_cmd = bash -c 'notify-send "Welcome back!"'
before_sleep_cmd = loginctl lock-session
after_sleep_cmd = bash -c 'brightnessctl -r; brightnessctl -d tpacpi::kbd_backlight set 1; hyprctl dispatch dpms on'
}
listener {
timeout = 180
on-timeout = bash -c 'brightnessctl -s set 50'
on-resume = bash -c 'brightnessctl -r'
}
listener {
timeout = 250 # 5min
on-timeout = loginctl lock-session # lock screen when timeout has passed
}
listener {
timeout = 350 # 3.6 minutes
on-timeout = bash -c 'brightnessctl -r; brightnessctl -s set 10; brightnessctl -d tpacpi::kbd_backlight set 0; hyprctl dispatch dpms off'
on-resume = bash -c 'brightnessctl -r; brightnessctl -d tpacpi::kbd_backlight set 1; hyprctl dispatch dpms on'
}
listener {
timeout = 550 # 5.5min
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired.
}
-116
View File
@@ -1,116 +0,0 @@
#! █░█ █▄█ █▀█ █▀█ █░░ █▀█ █▀▀ █▄▀
#! █▀█ ░█░ █▀▀ █▀▄ █▄▄ █▄█ █▄▄ █░█
#*  Hyprlock Configuration File 
$fontColor = rgba(255,255,255,0.5)
$fontFamily = SourceCodeVF ExtraBold
$timeFontFamily = Cantarell ExtraBold
general {
no_fade_in = true
grade = 1
ignore_empty_input = true
text_trim = true
fade_in_time = 0.8
disable_loading_bar = 0
}
background {
monitor =
path = ~/sync/Drive/pics/foss-world-crop.png
blur_passes = 2
blur_size = 4
contrast = 0.7
brightness = 0.3
vibrancy = 0.15
vibrancy_darkness = 0.5
}
image {
monitor =
path = ~/sync/Drive/pics/matrixom-crop.png
position = 0, 80
reload_time = -1
reload_cmd =
}
input-field {
monitor =
size = 20%, 5%
position = 0, -60
outline_thickness = 3
dots_size = 0.08
dots_spacing = 0.2
dots_center = true
outer_color = rgba(0,0,0,0.1)
inner_color = $fontColor
fade_on_empty = true
}
label {
monitor =
text = cmd[update:5000] echo "<span alpha='40%'>$(uptime -p)</span>"
color = $fontColor
font_family = $fontFamily
font_size = 15
position = 0, 350
}
label {
monitor =
text = cmd[update:300000] echo "<span alpha='50%'>$(cat ~/.config/fish/greet.txt)</span>"
color = $fontColor
font_family = $fontFamily
font_size = 14
position = 0, 310
}
label {
monitor =
text = cmd[update:1000] echo "<span alpha='50%'>$(date +"%H:%M")</span>"
color = $fontColor
font_family = $timeFontFamily
font_size = 120
position = 0, -180
animation = pulse 2s infinite
opacity = 0.5
shadow_passes = 1
shadow_size = 1
shadow_color = rgba(0, 0, 0, 0.5)
}
label {
monitor =
text = cmd[update:1000] echo "<span alpha='50%'>$(LC_TIME=en_US.UF-8 date +'%A, %B %d')</span>"
color = $fontColor
font_family = $fontFamily
font_size = 25
position = 0, -300
}
label {
monitor =
text = cmd[update:1000] echo -e "<span alpha='50%'>$(~/.config/hypr/battery.sh)</span>"
color = $fontColor
font_family = $fontFamily
font_size = 14
position = -50, 30
halign = right
valign = bottom
}
label {
monitor =
color = $fontColor
text = cmd[] echo "<span alpha='50%'>⏻ </span>"
font-size=24
onclick = systemctl poweroff
position = 50, 30
halign = left
valign = bottom
}
-132
View File
@@ -1,132 +0,0 @@
# ░▒▒▒░░░░░▓▓ ___________
# ░░▒▒▒░░░░░▓▓ //___________/
# ░░▒▒▒░░░░░▓▓ _ _ _ _ _____
# ░░▒▒░░░░░▓▓▓▓▓▓ | | | | | | | __/
# ░▒▒░░░░▓▓ ▓▓ | |_| | |_/ /| |___
# ░▒▒░░▓▓ ▓▓ \__ |____/ |____/
# ░▒▓▓ ▓▓ //____/
$fontFamily = JetBrainsMono Nerd Font # We already have this font installed
# Resolving custom fonts
# Provide the font name and the download link separated by a pipe |
# Run font.sh resolve $LAYOUT_PATH to install the font
$resolve.font=Anurati|https://font.download/dl/font/anurati.zip
$resolve.font=Inter|https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip
background {
monitor =
color = $wallbash_pry1_rgba
path = $BACKGROUND_PATH
blur_size = 4
blur_passes = 3 # 0 disables blurring
noise = 0.0117
contrast = 1.3000 # Vibrant!!!
brightness = 0.8000
vibrancy = 0.2100
vibrancy_darkness = 0.0
}
# DAY
label {
monitor =
text = cmd[update:1000] echo "$(date +"%A" | sed 's/./& /g' | tr '[:lower:]' '[:upper:]')" # Add a thin space between each character
color = $wallbash_1xa9_rgba
font_size = 110 # Wednesday is too long
font_family = Anurati
position = 0, 100
halign = center
valign = center
}
# DATE
label {
monitor =
text = cmd[update:1000] echo "$(date +"%B %d")"
color = $wallbash_2xa9_rgba
font_size = 35
font_family = $font_family Thin
position = 0, -20
halign = center
valign = center
}
# TIME
label {
monitor =
text = cmd[update:1000] echo "$(date +"%-I:%M %p")"
#text = $TIME
color = $wallbash_txt1_rgba
font_size = 20 #!
font_family = $font_family
position = 0, 150
halign = center
valign = bottom
}
# INPUT FIELD
input-field {
monitor =
size = 200, 50 #!
outline_thickness = 3
dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
dots_rounding = -1 # -1 default circle, -2 follow input-field rounding
outer_color = $wallbash_pry4_rgba
inner_color = $wallbash_pry2_rgba
font_color = $wallbash_3xa9_rgba
fade_on_empty = true
fade_timeout = 1000 # Milliseconds before fade_on_empty is triggered.
placeholder_text = <i>Input Password...</i> # Text rendered in the input box when it's empty.
hide_input = false
rounding = -1 # -1 means complete rounding (circle/oval)
check_color = $wallbash_pry4_rgba
fail_color = rgba(FF0000FF) # if authentication failed, changes outer_color and fail message color
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> # can be set to empty
fail_transition = 300 # transition time in ms between normal outer_color and fail_color
capslock_color = -1
numlock_color = -1
bothlock_color = -1 # when both locks are active. -1 means don't change outer color (same for above)
invert_numlock = false # change color if numlock is off
swap_font_color = true # see below
position = 0, 80
halign = center
valign = bottom
}
#User tag
label {
monitor =
text =  $USER
color = $wallbash_4xa9_rgba
font_size = 20
font_family = Inter Display Medium
position = 0, 30
halign = center
valign = bottom
}
# Battery Status if present
label {
monitor =
text = cmd[update:5000] $BATTERY_ICON
color = $wallbash_4xa9_rgba
font_size = 20
font_family = JetBrainsMono Nerd Font
position = -1%, 1%
halign = right
valign = bottom
}
# Current Keyboard Layout
label {
monitor =
text = cmd[update:1000] $KEYBOARD_LAYOUT
color = $wallbash_4xa9_rgba
font_size = 20
font_family = Inter Display Medium
position = -2%, 1%
halign = right
valign = bottom
}
-158
View File
@@ -1,158 +0,0 @@
# Hyprclouds from Arfan on Clouds
# By: Arfan on Clouds https://github.com/arfan-on-clouds/hyprclouds
# Modified by: The HyDE Project
$resolve.font=SF Pro Display|https://font.download/dl/font/sf-pro-display.zip
$resolve.font=AlfaSlabOne|https://font.download/dl/font/alfa-slab-one.zip
# BACKGROUND
background {
monitor =
color = $wallbash_pry1_rgba
path = $BACKGROUND_PATH
blur_size = 4
blur_passes = 3 # 0 disables blurring
noise = 0.0117
contrast = 1.3000 # Vibrant!!!
brightness = 0.8000
vibrancy = 0.2100
vibrancy_darkness = 0.0
}
# INPUT FIELD
input-field {
monitor =
size = 190, 50
outline_thickness = 2
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
fade_on_empty = true
font_family = SF Pro Display Bold
placeholder_text = <i><span foreground="##ffffff99"></span></i>
hide_input = false
position = 0, -170
halign = center
valign = center
outer_color = $wallbash_pry4_rgba
inner_color = $wallbash_pry2_rgba
font_color = $wallbash_3xa9_rgba
check_color = $wallbash_pry4_rgba
}
# Hour-Time
label {
monitor =
text = cmd[update:1000] echo -e "$(date +"%I")"
color = $wallbash_1xa8_rgba
shadow_passes = 3
shadow_size = 2
font_size = 100
font_family = AlfaSlabOne
position = 0, 100
halign = center
valign = center
}
# Minute-Time
label {
monitor =
text = cmd[update:1000] echo -e "$(date +"%M")"
color = $wallbash_3xa9_rgba
font_size = 100
font_family = AlfaSlabOne
shadow_passes = 3
shadow_size = 2
position = 0, -20
halign = center
valign = center
}
# Day-Date-Month
label {
monitor =
text = cmd[update:1000] echo -e "$(date +"%d %b %A")"
color = $wallbash_3xa9_rgba
shadow_passes = 3
shadow_size = 1
font_size = 12
font_family = JetBrains Mono Nerd Font Mono ExtraBold
position = 1%, -1%
halign = left
valign = top
}
# CURRENT SONG
label {
monitor =
text = cmd[update:1000] $MPRIS_TEXT # Outputs the song title when mpris is available, otherwise, it will output the splash command.
color = $wallbash_3xa9_rgba
shadow_passes = 3
shadow_size = 1
font_size = 14
font_family = JetBrains Mono Nerd, SF Pro Display Bold
position = 0, 20
halign = center
valign = bottom
}
image {
monitor =
path = $MPRIS_IMAGE
size = 80 # lesser side if not 1:1 ratio
rounding = -1 # negative values mean circle
border_size = 0
shadow_passes = 3
shadow_size = 3
border_color = rgb(221, 221, 221)
rotate = 0 # degrees, counter-clockwise
reload_time = 0 # seconds between reloading, 0 to reload with SIGUSR2
# reload_cmd = # command to get new path. if empty, old path will be used. don't run "follow" commands like tail -F
position = 0, 10%
halign = center
valign = bottom
}
# Battery Status if present
label {
monitor =
text = cmd[update:5000] $BATTERY_ICON
color = $wallbash_4xa9_rgba
font_size = 20
font_family = JetBrainsMono Nerd Font
position = -1%, 1%
halign = right
valign = bottom
}
# Current Keyboard Layout
label {
monitor =
text = cmd[update:1000] $KEYBOARD_LAYOUT
color = $wallbash_4xa9_rgba
font_size = 20
font_family = JetBrains Mono Nerd, SF Pro Display Bold
position = -2%, 1%
halign = right
valign = bottom
}
# Weather
#! Put the weather command last to lessen the load time of other modules
label {
monitor =
text = cmd[update:18000000] $WEATHER_CMD
color = $wallbash_3xa9_rgba
font_size = 16
shadow_passes = 3
shadow_size = 1
font_family = JetBrains Mono Nerd, SF Pro Display Bold
position = -1%, -1%
halign = right
valign = top
}
-112
View File
@@ -1,112 +0,0 @@
# ░▒▒▒░░░░░▓▓ ___________
# ░░▒▒▒░░░░░▓▓ //___________/
# ░░▒▒▒░░░░░▓▓ _ _ _ _ _____
# ░░▒▒░░░░░▓▓▓▓▓▓ | | | | | | | __/
# ░▒▒░░░░▓▓ ▓▓ | |_| | |_/ /| |___
# ░▒▒░░▓▓ ▓▓ \__ |____/ |____/
# ░▒▓▓ ▓▓ //____/
$fontFamily = IBM Plex Sans
$resolve.font=IBM Plex Sans|https://github.com/IBM/plex/releases/download/%40ibm%2Fplex-sans%401.1.0/ibm-plex-sans.zip
# GENERAL
background {
monitor =
path = $BACKGROUND_PATH
blur_size = 5
blur_passes = 0
noise = 0.0117
contrast = 1.3000 # Vibrant!
brightness = 0.8000
vibrancy = 0.2100
vibrancy_darkness = 0.0
}
# Current time
label {
monitor =
text = cmd[update:1000] echo "<b><big> $(date +"%H") </big></b>"
color = $wallbash_2xa7_rgba
font_size = 180
font_family = $fontFamily Medium 10
position = 0, 80
halign = center
valign = center
}
label {
monitor =
text = cmd[update:1000] echo "<b><big> $(date +"%M") </big></b>"
color = $wallbash_2xa9_rgba
font_size = 180
font_family = $fontFamily Medium 10
position = 0, -120
halign = center
valign = center
}
label {
monitor =
text = cmd[update:1000] echo "<b><big> $(date +"%d %b") </big></b>"
color = $wallbash_2xa8_rgba
font_size = 20
font_family = $fontFamily Medium 10
position = 0, -230
halign = center
valign = center
}
label {
monitor =
text = cmd[update:1000] echo "<b><big> $(date +"%A") </big></b>"
color = $wallbash_2xa8_rgba
font_size = 20
font_family = $fontFamily Medium 10
position = 0, -250
halign = center
valign = center
}
#INPUT FIELD
input-field {
monitor =
# size = 15%, 5% # hyprlock-git
size = 200, 50
outline_thickness = 3
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 1.00 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
outer_color = $wallbash_pry2_rgba
inner_color = $wallbash_pry3_rgba
font_color = $color7
fade_on_empty = true
placeholder_text = <i>Password...</i> # Text rendered in the input box when it's empty.
hide_input = false
position = 0, 60
halign = center
valign = bottom
}
# Battery Status if present
label {
monitor =
text = cmd[update:5000] $BATTERY_ICON
color = $wallbash_4xa9_rgba
font_size = 20
font_family = JetBrainsMono Nerd Font
position = -1%, 1%
halign = right
valign = bottom
}
# Current Keyboard Layout
label {
monitor =
text = cmd[update:1000] $KEYBOARD_LAYOUT
color = $wallbash_4xa9_rgba
font_size = 20
font_family = $fontFamily
position = -2%, 1%
halign = right
valign = bottom
}
-161
View File
@@ -1,161 +0,0 @@
# Hyprlock style-4
# By: Vivek Rajan https://github.com/MrVivekRajan/Hyprlock-Styles/tree/main/Style-4
# Modified by: The HyDE Project
$resolve.font=SF Pro Display|https://font.download/dl/font/sf-pro-display.zip
# BACKGROUND
background {
monitor =
path = $BACKGROUND_PATH
blur_passes = 0
contrast = 0.8916
brightness = 0.8916
vibrancy = 0.8916
vibrancy_darkness = 0.0
}
# GENERAL
general {
no_fade_in = false
grace = 0
disable_loading_bar = false
}
# Profile-Photo
image {
monitor =
path = $PROFILE_IMAGE
border_size = 2
border_color = $wallbash_pry4_rgba
size = 100
rounding = -1
rotate = 0
reload_time = -1
reload_cmd =
position = 25, 200
halign = center
valign = center
}
# NAME
label {
monitor =
text = cmd[update:60000] $GREET_TEXT
color = $wallbash_txt1_rgba
outline_thickness = 0
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
font_size = 20
font_family = SF Pro Display Bold
position = 25, 110
halign = center
valign = center
}
# Time
label {
monitor =
text = cmd[update:1000] echo "<span>$(date +"%I:%M")</span>"
color = $wallbash_txt1_rgba
font_size = 60
font_family = SF Pro Display Bold
position = 30, -8
halign = center
valign = center
}
# Day-Month-Date
label {
monitor =
text = cmd[update:1000] echo -e "$(date +"%A, %B %d")"
color = $wallbash_txt1_rgba
font_size = 19
font_family = SF Pro Display Bold
position = 35, -60
halign = center
valign = center
}
# USER-BOX
shape {
monitor =
size = 320, 55
color = rgba(255, 255, 255, 0.1)
rounding = -1
border_size = 0
border_color = $wallbash_txt3_rgba
rotate = 0
xray = false # if true, make a "hole" in the background (rectangle of specified size, no rotation)
position = 34, -190
halign = center
valign = center
}
# USER
label {
monitor =
text =  $USER
color = $wallbash_1xa9_rgba
outline_thickness = 0
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
font_size = 16
font_family = SF Pro Display Bold
position = 38, -190
halign = center
valign = center
}
# INPUT FIELD
input-field {
monitor =
size = 320, 55
outline_thickness = 0
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
outer_color = rgba(255, 255, 255, 0)
inner_color = rgba(255, 255, 255, 0.1)
font_color = $wallbash_2xa6_rgba
fade_on_empty = false
font_family = SF Pro Display Bold
placeholder_text = <i><span foreground="##ffffff99">🔒 Enter Pass</span></i>
hide_input = false
position = 34, -268
halign = center
valign = center
check_color = $wallbash_txt4_rgba
fail_color = rgb(204, 34, 34) # if authentication failed, changes outer_color and fail message color
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> # can be set to empty
fail_transition = 300 # transition time in ms between normal outer_color and fail_color
}
# Battery Status if present
label {
monitor =
text = cmd[update:5000] $BATTERY_ICON
color = $wallbash_4xa9_rgba
font_size = 20
font_family = JetBrainsMono Nerd Font
position = -1%, 1%
halign = right
valign = bottom
}
# Current Keyboard Layout
label {
monitor =
text = cmd[update:1000] $KEYBOARD_LAYOUT
color = $wallbash_4xa9_rgba
font_size = 20
font_family = SF Pro Display Bold
position = -2%, 1%
halign = right
valign = bottom
}
-138
View File
@@ -1,138 +0,0 @@
# HyDE default layout
# Wallbash generated layout
# Local Variables
$fontFamily = JetBrainsMono Nerd Font
$fn_greet=echo "Good $(date +%H | awk '{if ($1 < 12) print "Morning"; else if ($1 < 18) print "Afternoon"; else print "Evening"}'), ${USER}"
# GENERAL
general {
no_fade_in = false
grace = 0
disable_loading_bar = true
}
# BACKGROUND
background {
monitor =
path = $BACKGROUND_PATH
blur_passes = 2
}
# TIME
label {
monitor =
text = $TIME
color = $wallbash_txt1_rgba
font_size = 90
font_family = $fontFamily
position = -30, 0
halign = right
valign = top
}
# DATE
label {
monitor =
text = cmd[update:43200000] date +"%A, %d %B %Y"
color = $wallbash_txt2_rgba
font_size = 25
font_family = $fontFamily
position = -30, -150
halign = right
valign = top
}
# USER AVATAR
image {
monitor =
path = $MPRIS_IMAGE
size = 150 # lesser side if not 1:1 ratio
reload_time = 0 # seconds between reloading, 0 to reload with SIGUSR2
reload_cmd = # command to get new path. if empty, old path will be used. don't run "follow" commands like tail -F
position = 0, 0
halign = center
valign = center
}
# INPUT FIELD
input-field {
monitor =
size = 200, 50 #!
outline_thickness = 3
dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
dots_rounding = -1 # -1 default circle, -2 follow input-field rounding
outer_color = $wallbash_pry4_rgba
inner_color = $wallbash_pry2_rgba
font_color = $wallbash_3xa9_rgba
fade_on_empty = true
fade_timeout = 1000 # Milliseconds before fade_on_empty is triggered.
placeholder_text = <i>Input Password...</i> # Text rendered in the input box when it's empty.
hide_input = false
rounding = -1 # -1 means complete rounding (circle/oval)
check_color = $wallbash_pry4_rgba
fail_color = rgba(FF0000FF) # if authentication failed, changes outer_color and fail message color
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> # can be set to empty
fail_transition = 300 # transition time in ms between normal outer_color and fail_color
capslock_color = -1
numlock_color = -1
bothlock_color = -1 # when both locks are active. -1 means don't change outer color (same for above)
invert_numlock = false # change color if numlock is off
swap_font_color = true # see below
position = 0, 80
halign = center
valign = bottom
}
# USER Greeting
label {
monitor =
text = cmd[update:60000] $fn_greet
color = $text
font_size = 20
font_family = $fontFamily Bold
position = 0, -190
halign = center
valign = center
}
# Mpris and SPLASH
label {
monitor =
text = cmd[update:1000] $SPLASH_CMD # Outputs the song title when mpris is available, otherwise, it will output the splash command.
color = $wallbash_txt2_rgba
font_family = $fontFamily
font_size = 15
position = 0, 0
halign = center
valign = bottom
}
# Battery Status if present
label {
monitor =
text = cmd[update:5000] $BATTERY_ICON
color = $wallbash_4xa9_rgba
font_size = 20
font_family = JetBrainsMono Nerd Font
position = -1%, 1%
halign = right
valign = bottom
}
# Current Keyboard Layout
label {
monitor =
text = cmd[update:1000] $KEYBOARD_LAYOUT
color = $wallbash_4xa9_rgba
font_size = 20
font_family = $fontFamily
position = -2%, 1%
halign = right
valign = bottom
}
View File
Whitespace-only changes.
-28
View File
@@ -1,28 +0,0 @@
# █▀▀ █░█ █▀█ █▀ █▀█ █▀█
# █▄▄ █▄█ █▀▄ ▄█ █▄█ █▀▄
exec = hyprctl setcursor Bibata-Modern-Ice 20
exec = gsettings set org.gnome.desktop.interface cursor-theme 'Bibata-Modern-Ice'
exec = gsettings set org.gnome.desktop.interface cursor-size 20
# █▀▀ █▀█ █▄░█ ▀█▀
# █▀░ █▄█ █░▀█ ░█░
exec = gsettings set org.gnome.desktop.interface font-name 'Cantarell 10'
exec = gsettings set org.gnome.desktop.interface document-font-name 'Cantarell 10'
exec = gsettings set org.gnome.desktop.interface monospace-font-name 'CaskaydiaCove Nerd Font Mono 9'
exec = gsettings set org.gnome.desktop.interface font-antialiasing 'rgba'
exec = gsettings set org.gnome.desktop.interface font-hinting 'full'
# █▀ █▀█ █▀▀ █▀▀ █ ▄▀█ █░░
# ▄█ █▀▀ ██▄ █▄▄ █ █▀█ █▄▄
decoration {
dim_special = 0.3
blur {
special = true
}
}
-35
View File
@@ -1,35 +0,0 @@
exec = gsettings set org.gnome.desktop.interface icon-theme 'Tela-circle-dracula'
exec = gsettings set org.gnome.desktop.interface gtk-theme 'Catppuccin-Mocha'
exec = gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
general {
gaps_in = 2 #3
gaps_out = 4 #8
border_size = 1 #2
col.active_border = rgba(ca9ee6ff) rgba(f2d5cfff) 45deg
col.inactive_border = rgba(b4befecc) rgba(6c7086cc) 45deg
layout = dwindle
resize_on_border = true
}
group {
col.border_active = rgba(ca9ee6ff) rgba(f2d5cfff) 45deg
col.border_inactive = rgba(b4befecc) rgba(6c7086cc) 45deg
col.border_locked_active = rgba(ca9ee6ff) rgba(f2d5cfff) 45deg
col.border_locked_inactive = rgba(b4befecc) rgba(6c7086cc) 45deg
}
decoration {
rounding = 4 #10
# drop_shadow = true #false
blur {
enabled = yes
size = 6
passes = 3
new_optimizations = on
ignore_opacity = on
xray = false
}
}
# layerrule = blur,waybar
-50
View File
@@ -1,50 +0,0 @@
# Auto-generated by HyDE // Read-only
# // ----------------------------
# HyDE Theme: Catppuccin Mocha
# Configuration File: "/home/coja/.config/hyde/themes/Catppuccin Mocha/hypr.theme"
# Wallbash Mode : theme
# // ----------------------------
$HYDE_THEME=Catppuccin Mocha
$GTK_THEME=Catppuccin-Mocha
$COLOR-SCHEME=prefer-dark
$ICON_THEME=Tela-circle-dracula
$CURSOR_THEME=Bibata-Modern-Ice
$CURSOR_SIZE=24
$FONT=Cantarell
$FONT_SIZE=10
$DOCUMENT_FONT=Cantarell
$DOCUMENT_FONT_SIZE=10
$MONOSPACE_FONT=CaskaydiaCove Nerd Font Mono
$MONOSPACE_FONT_SIZE=9
$CODE_THEME=Wallbash
$SDDM_THEME=
# // ----------------------------
# README:
# Values above are derived and sanitized from the theme.conf file,
# This is to ensure themes won't have any 'exec' or 'source'
# commands that could potentially harm the system
# or undesired behavior.
#
# Dear Theme Owner:
# You can still add your own custom 'exec' or 'source' commands
# by adding it as variable, examples (you can name the variable anything):
# Note that you should indicate it in your README.md
#
#
# -- ⌨️ theme.conf --
# $RUN_CMD="some_command"
# $SOURCE_FILE="/some/files"
#
#
# -- ⌨️ userprefs.conf --
# exec = ${RUN_CMD}"
# source = ${SOURCE_FILE}
# exec = hyde-shell walbash code $CODE_THEME # Setting the code theme
# // ----------------------------
-72
View File
@@ -1,72 +0,0 @@
# █░█░█ █ █▄░█ █▀▄ █▀█ █░█░█   █▀█ █░█ █░░ █▀▀ █▀
# ▀▄▀▄▀ █ █░▀█ █▄▀ █▄█ ▀▄▀▄▀   █▀▄ █▄█ █▄▄ ██▄ ▄█
# See https://wiki.hyprland.org/Configuring/Window-Rules/
# hyprctl clients to get names
windowrule = opacity 0.80 0.80, match:class ^(code-url-handler)$
windowrule = opacity 0.80 0.80, match:class ^(code-insiders-url-handler)$
windowrule = opacity 0.80 0.80, match:class ^(org.kde.dolphin)$
windowrule = opacity 0.80 0.80, float on, match:class ^(org.kde.ark)$
windowrule = opacity 0.80 0.80, float on, match:class ^(nwg-look)$
windowrule = opacity 0.80 0.80, float on, match:class ^(qt5ct)$
windowrule = opacity 0.80 0.80, float on, match:class ^(qt6ct)$
windowrule = opacity 0.80 0.80, float on, match:class ^(kvantummanager)$
windowrule = opacity 0.80 0.70, float on, match:class ^(org.pulseaudio.pavucontrol)$
windowrule = opacity 0.80 0.70, match:class ^(lagrange)$
windowrule = opacity 0.60 0.60, match:class ^(com.github.wwmm.easyeffects)$
windowrule = opacity 0.80 0.70, float on, match:class ^(blueman-manager)$
windowrule = opacity 0.80 0.70, float on, match:class ^(nm-applet)$
windowrule = opacity 0.80 0.70, float on, match:class ^(nm-connection-editor)$
windowrule = opacity 0.80 0.70, float on, match:class ^(org.kde.polkit-kde-authentication-agent-1)$
windowrule = opacity 0.80 0.70, match:class ^(polkit-gnome-authentication-agent-1)$
windowrule = opacity 0.80 0.70, match:class ^(org.freedesktop.impl.portal.desktop.gtk)$
windowrule = opacity 0.80 0.70, match:class ^(org.freedesktop.impl.portal.desktop.hyprland)$
windowrule = opacity 0.70 0.70, match:class ^([Ss]team)$
windowrule = opacity 0.90 0.90, float on, match:class ^(com.github.rafostar.Clapper)$ # Clapper-Gtk
windowrule = opacity 0.80 0.80, match:class ^(com.github.tchx84.Flatseal)$ # Flatseal-Gtk
windowrule = opacity 0.80 0.80, match:class ^(hu.kramo.Cartridges)$ # Cartridges-Gtk
windowrule = opacity 0.80 0.80, match:class ^(com.obsproject.Studio)$ # Obs-Qt
windowrule = opacity 0.80 0.80, match:class ^(gnome-boxes)$ # Boxes-Gtk
windowrule = opacity 0.80 0.80, match:class ^(discord)$ # Discord-Electron
windowrule = opacity 0.80 0.80, match:class ^(WebCord)$ # WebCord-Electron
windowrule = opacity 0.80 0.80, match:class ^(ArmCord)$ # ArmCord-Electron
windowrule = opacity 0.80 0.80, float on, match:class ^(app.drey.Warp)$ # Warp-Gtk
windowrule = opacity 0.80 0.80, float on, match:class ^(net.davidotek.pupgui2)$ # ProtonUp-Qt
windowrule = opacity 0.80 0.80, float on, match:class ^(yad)$ # Protontricks-Gtk
windowrule = opacity 0.80 0.80, float on, match:class ^(Signal)$ # Signal-Gtk
windowrule = opacity 0.80 0.80, float on, match:class ^(io.github.alainm23.planify)$ # planify-Gtk
windowrule = opacity 0.80 0.80, float on, match:class ^(io.gitlab.theevilskeleton.Upscaler)$ # Upscaler-Gtk
windowrule = opacity 0.80 0.80, match:class ^(com.github.unrud.VideoDownloader)$ # VideoDownloader-Gtk
windowrule = opacity 0.80 0.80, float on, match:class ^(io.gitlab.adhami3310.Impression)$ # Impression-Gtk
windowrule = opacity 0.80 0.80, float on, match:class ^(io.missioncenter.MissionCenter)$ # MissionCenter-Gtk
windowrule = opacity 0.80 0.80, match:class ^(io.github.flattool.Warehouse)$ # Warehouse-Gtk
windowrule = float on, match:class ^(org.kde.dolphin)$, match:title ^(Progress Dialog — Dolphin)$
windowrule = float on, match:class ^(org.kde.dolphin)$, match:title ^(Copying — Dolphin)$
windowrule = float on, match:title ^(About Mozilla Firefox)$
windowrule = float on, match:class ^(firefox)$, match:title ^(Picture-in-Picture)$
windowrule = float on, match:class ^(firefox)$, match:title ^(Library)$
windowrule = float on, match:class ^(kitty)$, match:title ^(top)$
windowrule = float on, match:class ^(kitty)$, match:title ^(btop)$
windowrule = float on, match:class ^(kitty)$, match:title ^(htop)$
windowrule = float on, match:class ^(vlc)$
windowrule = float on, match:class ^(eog)$ # Imageviewer-Gtk
windowrule = float on, match:class ^(com.github.unrud.VideoDownloader)$ # VideoDownloader-Gkk
# █░░ ▄▀█ █▄█ █▀▀ █▀█   █▀█ █░█ █░░ █▀▀ █▀
# █▄▄ █▀█ ░█░ ██▄ █▀▄   █▀▄ █▄█ █▄▄ ██▄ ▄█
# layerrule = blur,rofi
# layerrule = ignorezero,rofi
# layerrule = blur,notifications
# layerrule = ignorezero,notifications
# layerrule = blur,swaync-notification-window
# layerrule = ignorezero,swaync-notification-window
# layerrule = blur,swaync-control-center
# layerrule = ignorezero,swaync-control-center
# layerrule = blur,logout_dialog
View File
Whitespace-only changes.
-17
View File
@@ -1,17 +0,0 @@
# run with `kitty --session ~/.config/kitty/c2.conf`
layout tall
# create a new tab
new_tab c2
cd ~/projects/wingman/c2/
launch --var window=first nvim
new_tab git
cd ~/projects/wingman/c2/
launch --var window=second lazygit
# focus neovim
# focus first
-17
View File
@@ -1,17 +0,0 @@
# run with `kitty --session ~/.config/kitty/music.conf`
layout tall
# os_window_size 220c 64c
# create a new tab
new_tab music
# set the working directory for windows in the current tab
cd
launch --var window=first cava
# create additional terminals
launch --location=hsplit pyradio
resize_window taller 10
focus pyradio
launch --location=vsplit pipes-rs
resize_window wider 20
-20
View File
@@ -1,20 +0,0 @@
# run with `kitty --session ~/.config/kitty/runners.conf`
layout stack
# create a new tab
new_tab runners
cd ~/projects/wingman/c2/
launch --var window=first pnpm dev
launch --location=hsplit react-devtools
resize_window narrower 20
launch --location=hsplit lazydocker
resize_window wider 120
# new_tab simulator
# cd ~/wmclient
# launch --var window=first wmsimulator.sh
-59
View File
@@ -1,59 +0,0 @@
# The basic colors
foreground #ffffff
background #262335
selection_foreground #262335
selection_background #f97e72
# Cursor colors
cursor #f97e72
cursor_text_color #262335
# URL underline color when hovering with mouse
url_color #f97e72
# OS Window titlebar colors
wayland_titlebar_color system
macos_titlebar_color system
# Colors for marks (marked text in the terminal)
mark1_foreground #262335
mark1_background #614D85
mark2_foreground #262335
mark2_background #614D85
mark3_foreground #262335
mark3_background #614D85
# The 16 terminal colors
# black
color0 #232530
color8 #232530
# red
color1 #fe4450
color9 #fe4450
# green
color2 #72f1b8
color10 #72f1b8
# yellow
color3 #ff7edb
color11 #ff7edb
# blue
color4 #03edf9
color12 #03edf9
# magenta
color5 #fede5d
color13 #f3e70f
# cyan
color6 #03edf9
color14 #03edf9
# white
color7 #ffffff
color15 #ffffff
-29
View File
@@ -1,29 +0,0 @@
cal
calc
speedtest
aichat -e
askllama
ask
tldr
man
info
rsync -avkP
lsd
zioxide
httpie
bat
xxd
mpv
nix
distrobox
scrcpy
adb
watch
unzip
open
nmcli
iwctl
lsusb
thefuck
fastfetch
-42
View File
@@ -1,42 +0,0 @@
browsh
wiki-tui
wikiman
yazi
tdf
dysk
dust
ncdu
systemctl-tui
btop
bandwhich
mtr
gping
bmon
profanity
nmtui
bluetui
drawterm
hunk
lazygit
lazydocker
lazyjorunal
pastel
hexyl
pyradio
kew
tt
gittype
matrix
cava
tetrigo
tui-mines
nyaa
stig
tmux
zellij
nvim
vim
tuios
llmfit
battop
subtui
-21
View File
@@ -1,21 +0,0 @@
# Volume
9 add volume -5
0 add volume 5
UP add volume 2
DOWN add volume -2
k add volume 2
j add volume -2
# Seek backward / forward
LEFT seek -5
RIGHT seek 5
l seek 5
h seek -5
# Bigger jumps
Shift+LEFT seek -30
Shift+RIGHT seek 30
-32
View File
@@ -1,32 +0,0 @@
{
"LuaSnip": { "branch": "master", "commit": "a62e1083a3cfe8b6b206e7d3d33a51091df25357" },
"NvChad": { "branch": "v2.5", "commit": "d042cc975247c2aa55fcb228e5d146dc1dc6c648" },
"base46": { "branch": "v2.5", "commit": "fde7a2cd54599e148d376f82980407c2d24b0fa2" },
"cmp-async-path": { "branch": "main", "commit": "f8af3f726e07f2e9d37672eaa9102581aefce149" },
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
"cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" },
"cmp-nvim-lua": { "branch": "main", "commit": "e3a22cb071eb9d6508a156306b102c45cd2d573d" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"codecompanion.nvim": { "branch": "main", "commit": "680c445eb357c72129d175ea5d481aa9e92ae6a5" },
"conform.nvim": { "branch": "master", "commit": "086a40dc7ed8242c03be9f47fbcee68699cc2395" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
"gitsigns.nvim": { "branch": "main", "commit": "6d808f99bd63303646794406e270bd553ad7792e" },
"indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"mason.nvim": { "branch": "main", "commit": "12ddd182d9efbdc848b540f16484a583d52da0fb" },
"menu": { "branch": "main", "commit": "7a0a4a2896b715c066cfbe320bdc048091874cc6" },
"minty": { "branch": "main", "commit": "aafc9e8e0afe6bf57580858a2849578d8d8db9e0" },
"nvim-autopairs": { "branch": "master", "commit": "59bce2eef357189c3305e25bc6dd2d138c1683f5" },
"nvim-cmp": { "branch": "main", "commit": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca" },
"nvim-lspconfig": { "branch": "master", "commit": "e146efacbafed3789ac568abcc5a981c5decaa58" },
"nvim-tree.lua": { "branch": "master", "commit": "d277467fc0d1d0e2bca88165a1de6b526f9f6fe8" },
"nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" },
"nvim-web-devicons": { "branch": "master", "commit": "c72328a5494b4502947a022fe69c0c47e53b6aa6" },
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
"render-markdown.nvim": { "branch": "main", "commit": "d67113f11384c0dad96fced2f7b91f1fc811e97f" },
"snacks.nvim": { "branch": "main", "commit": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e" },
"telescope.nvim": { "branch": "master", "commit": "028d9a0695a0cc4cfa893889f8c408ed7ccc8adc" },
"ui": { "branch": "v3.0", "commit": "cb75908a86720172594b30de147272c1b3a7f452" },
"volt": { "branch": "main", "commit": "620de1321f275ec9d80028c68d1b88b409c0c8b1" },
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
}
@@ -1,34 +0,0 @@
local model = "Qwen3-Coder-30B-Instruct-IQ4_XS"
return {
adapters = {
http = {
llama_cpp = function()
return require("codecompanion.adapters").extend("openai_compatible", {
env = {
url = "http://localhost:11343",
chat_url = "/v1/chat/completions",
models_endpoint = "/v1/models",
api_key = "dummy",
},
schema = {
model = {
default = model,
},
},
})
end,
},
},
interactions = {
chat = {
adapter = "llama_cpp",
},
inline = {
adapter = "llama_cpp",
},
cmd = {
adapter = "llama_cpp",
},
},
}
-28
View File
@@ -1,28 +0,0 @@
require("nvchad.configs.lspconfig").defaults()
local servers = { "html", "cssls", "ts_ls", "eslint", "yamlls" }
vim.lsp.enable(servers)
-- local lspconfig = require "lspconfig"
-- local nvlsp = require "nvchad.configs.lspconfig"
--
-- -- lsps with default config
-- for _, lsp in ipairs(servers) do
-- lspconfig[lsp].setup {
-- on_attach = nvlsp.on_attach,
-- on_init = nvlsp.on_init,
-- capabilities = nvlsp.capabilities,
-- }
-- end
--
-- -- configuring single server, example: typescript
-- lspconfig.ts_ls.setup {
-- filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue', 'markdown' },
-- }
--
-- -- configuring single server, example: typescript
-- -- lspconfig.ts_ls.setup {
-- -- on_attach = nvlsp.on_attach,
-- -- on_init = nvlsp.on_init,
-- -- capabilities = nvlsp.capabilities,
-- -- }
-89
View File
@@ -1,89 +0,0 @@
return {
{
"stevearc/conform.nvim",
event = "BufWritePre",
opts = require "configs.conform",
},
{
"neovim/nvim-lspconfig",
config = function()
require "configs.lspconfig"
end,
},
{
"olimorris/codecompanion.nvim",
version = "^19.0.0",
lazy = false,
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-treesitter/nvim-treesitter",
},
opts = function()
return require "configs.codecompanion"
end,
},
{
"MeanderingProgrammer/render-markdown.nvim",
ft = { "markdown", "gitcommit", "codecompanion" },
opts = function()
return require "configs.render-markdown"
end,
},
{
"folke/snacks.nvim",
priority = 1000,
lazy = false,
---@type snacks.Config
opts = {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
bigfile = { enabled = false },
dashboard = { enabled = false },
explorer = { enabled = true },
indent = { enabled = true },
input = { enabled = true },
picker = { enabled = false },
notifier = { enabled = true },
quickfile = { enabled = true },
scope = { enabled = true },
scroll = { enabled = true },
statuscolumn = { enabled = true },
words = { enabled = true },
},
},
-- {
-- "jacob411/Ollama-Copilot",
-- opts = {
-- model_name = "llama3:3b",
-- stream_suggestion = false,
-- python_command = "python3",
-- filetypes = { "python", "lua", "vim", "markdown", "javascript", "typescript" },
-- ollama_model_opts = {
-- num_predict = 40,
-- temperature = 0.1,
-- },
-- keymaps = {
-- suggestion = "<leader>os",
-- reject = "<leader>or",
-- insert_accept = "<Tab>",
-- },
-- },
-- },
-- These are some examples, uncomment them if you want to see them work!
--
-- {
-- "nvim-treesitter/nvim-treesitter",
-- opts = {
-- ensure_installed = {
-- "vim", "lua", "vimdoc",
-- "html", "css"
-- },
-- },
-- },
--
}
-278
View File
@@ -1,278 +0,0 @@
{
"$schema": "https://opencode.ai/config.json",
"model": "duskadiy/gemma-4-26B-A4B-it-UD-IQ4_XS",
"small_model": "duskadiy/gemma-4-E4B-it-UD-Q8_K_XL",
"instructions": ["CLAUDE.md", "AGENTS.md"],
"share": "disabled",
"autoupdate": "notify",
"disabled_providers": [
"gemini",
"anthropic",
"groq",
"openrouter",
"opencode"
],
"permission": {
"edit": "deny",
"webfetch": "ask",
"websearch": "ask",
"external_directory": "ask",
"read": {
"*": "allow",
"**/.env*": "deny",
"**/*.env": "deny",
"**/*.pem": "deny",
"**/*.key": "deny",
"**/*.p12": "deny",
"**/*.pfx": "deny",
"**/*.keystore": "deny",
"**/id_rsa*": "deny",
"**/.ssh/**": "deny",
"**/.aws/**": "deny",
"**/.npmrc": "deny",
"**/.netrc": "deny"
},
"bash": {
"*": "ask",
"ls *": "allow",
"cat *": "allow",
"grep *": "allow",
"rg *": "allow",
"find *": "allow",
"fd *": "allow",
"which *": "allow",
"file *": "allow",
"stat *": "allow",
"wc *": "allow",
"tree *": "allow",
"diff *": "allow",
"sort *": "allow",
"uniq *": "allow",
"echo *": "allow",
"pwd": "allow",
"date": "allow",
"whoami": "allow",
"jq *": "allow",
"tsc *": "allow",
"mkdir *": "allow",
"touch *": "allow",
"git *": "ask",
"git status": "allow",
"git status *": "allow",
"git diff": "allow",
"git diff *": "allow",
"git log": "allow",
"git log *": "allow",
"git show *": "allow",
"git branch": "allow",
"git remote -v": "allow",
"npm *": "ask",
"pnpm *": "ask",
"npx *": "ask",
"npm list": "allow",
"npm help": "allow",
"npm version": "allow",
"pnpm list": "allow",
"pnpm help": "allow",
"npx --version": "allow",
"curl *": "ask",
"wget *": "ask",
"rm *": "deny",
"rmdir *": "deny",
"dd *": "deny",
"mkfs*": "deny",
"shred *": "deny",
"chmod -R *": "deny",
"sudo *": "deny",
"doas *": "deny",
"npm install*": "deny",
"npm i": "deny",
"npm i *": "deny",
"npm ci*": "deny",
"pnpm install*": "deny",
"pnpm i": "deny",
"pnpm i *": "deny",
"pnpm add*": "deny",
"yarn add*": "deny",
"yarn install*": "deny",
"pip install*": "deny",
"pip3 install*": "deny",
"pipx install*": "deny",
"cargo install*": "deny",
"go install*": "deny",
"gem install*": "deny",
"brew install*": "deny",
"pacman *": "deny",
"yay *": "deny",
"apt *": "deny",
"apt-get *": "deny",
"dnf *": "deny",
"cat .env*": "deny",
"cat *.env": "deny",
"cat *.pem": "deny",
"cat *.key": "deny",
"cat *id_rsa*": "deny",
"cat *secret*": "deny",
"cat *credential*": "deny",
"cat ~/.ssh/*": "deny",
"cat ~/.aws/*": "deny",
"grep .env*": "deny",
"grep * .env*": "deny"
}
},
"provider": {
"duskadiy": {
"npm": "@ai-sdk/openai-compatible",
"name": "DuskaDIY",
"options": {
"baseURL": "https://llm.duskadiy.com/api/v1"
},
"models": {
"gemma-4-26B-A4B-it-UD-IQ4_XS": {
"name": "Gemma 4 26B (remote)",
"limit": {
"context": 81920,
"output": 8192
}
},
"DeepSeek-Coder-V2-Lite-Instruct-Q8_0": {
"name": "DeepSeek Coder V2 (remote)",
"limit": {
"context": 81920,
"output": 8192
}
},
"Qwen3-Coder-30B-Instruct-IQ4_XS": {
"name": "Qwen3 Coder A3B (remote)",
"limit": {
"context": 81920,
"output": 8192
}
}
}
},
"llama.cpp": {
"npm": "@ai-sdk/openai-compatible",
"name": "llamacpp",
"options": {
"baseURL": "http://192.168.0.204:11343/v1"
},
"models": {
"DeepSeek-Coder-V2-Lite-Instruct-Q8_0": {
"name": "DeepSeek Coder V2",
"limit": {
"context": 81920,
"output": 8192
}
},
"gemma-4-E4B-it-UD-Q8_K_XL": {
"name": "Gemma 4 E4B",
"limit": {
"context": 81920,
"output": 8192
}
},
"gemma-4-26B-A4B-it-UD-IQ4_XS": {
"name": "Gemma 4 26B",
"limit": {
"context": 81920,
"output": 8192
}
},
"Qwen3-Coder-30B-Instruct-IQ4_XS": {
"name": "Qwen3 Coder A3B",
"limit": {
"context": 81920,
"output": 8192
}
},
"Qwen3.6-27B-UD-IQ3_XXS.gguf": {
"name": "Qwen3.6 27B",
"limit": {
"context": 81920,
"output": 8192
}
}
}
}
},
"agent": {
"plan": {
"mode": "primary",
"model": "llama.cpp/gemma-4-26B-A4B-it-UD-IQ4_XS",
"permission": {
"edit": "deny"
}
},
"build": {
"mode": "primary",
"model": "llama.cpp/gemma-4-26B-A4B-it-UD-IQ4_XS",
"permission": {
"edit": {
"*": "allow",
"**/.env*": "deny",
"**/*.env": "deny",
"**/*.pem": "deny",
"**/*.key": "deny",
"**/id_rsa*": "deny",
"**/.ssh/**": "deny",
"**/.aws/**": "deny",
"**/.git/**": "deny",
"**/.npmrc": "deny",
"**/.netrc": "deny"
}
}
},
"code-reviewer": {
"description": "Reviews code for best practices and potential issues",
"prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
"mode": "subagent",
"model": "llama.cpp/DeepSeek-Coder-V2-Lite-Instruct-Q8_0",
"permission": {
"edit": "deny"
}
},
"test-runner": {
"description": "Runs and interprets test suites",
"prompt": "You are a test runner. Focus on identifying failing tests and providing clear reproduction steps.",
"mode": "subagent",
"model": "llama.cpp/DeepSeek-Coder-V2-Lite-Instruct-Q8_0",
"permission": {
"edit": "deny"
}
},
"doc-writer": {
"description": "Maintains project documentation and docstrings",
"prompt": "You are a technical writer. Focus on clarity, accuracy, and keeping documentation in sync with code changes.",
"mode": "subagent",
"model": "llama.cpp/gemma-4-26B-A4B-it-UD-IQ4_XS",
"permission": {
"edit": {
"*": "deny",
"**/*.md": "allow",
"**/*.mdx": "allow",
"**/*.markdown": "allow",
"**/*.txt": "allow",
"**/*.rst": "allow"
}
}
},
"security-auditor": {
"description": "Scans for security vulnerabilities and hardcoded secrets",
"prompt": "You are a security auditor. Focus on OWASP principles, secret detection, and dependency vulnerabilities.",
"mode": "subagent",
"model": "llama.cpp/DeepSeek-Coder-V2-Lite-Instruct-Q8_0",
"permission": {
"edit": "deny"
}
}
}
}
-24
View File
@@ -1,24 +0,0 @@
0|28|bottom|( cpu memory custom/cpuinfo custom/gpuinfo ) ( idle_inhibitor clock )|( hyprland/workspaces hyprland/window )|( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
0|28|top|( cpu memory custom/cpuinfo custom/gpuinfo ) ( idle_inhibitor clock )|( hyprland/workspaces hyprland/window )|( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
0|28|bottom|( cpu memory custom/cpuinfo custom/gpuinfo ) ( idle_inhibitor clock ) ( hyprland/workspaces )|( hyprland/window )|( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
0|28|top|( cpu memory custom/cpuinfo ) ( idle_inhibitor clock ) ( hyprland/workspaces )|( hyprland/window )|( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
0||bottom|( hyprland/workspaces hyprland/window )|( idle_inhibitor clock )|( cpu memory custom/cpuinfo custom/gpuinfo ) ( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
0||top|( hyprland/workspaces hyprland/window )|( idle_inhibitor clock )|( cpu memory custom/cpuinfo custom/gpuinfo ) ( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
0|31|bottom|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( wlr/taskbar custom/spotify ) |( idle_inhibitor clock )|( tray battery ) ( backlight network pulseaudio pulseaudio#microphone custom/notifications custom/keybindhint )
0|31|left|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( wlr/taskbar custom/spotify ) |( idle_inhibitor clock )|( tray battery ) ( backlight network pulseaudio pulseaudio#microphone custom/keybindhint )
0|31|top|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( wlr/taskbar custom/spotify ) |( idle_inhibitor clock )|( tray battery ) ( backlight network pulseaudio pulseaudio#microphone custom/keybindhint )
0|31|right|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( wlr/taskbar custom/spotify ) |( idle_inhibitor clock )|( tray battery ) ( backlight network pulseaudio pulseaudio#microphone custom/keybindhint )
0|32|bottom||( custom/power ) ( tray battery ) ( wlr/taskbar idle_inhibitor clock ) ( custom/cliphist ) ( custom/wbar ) ( custom/wallchange ) ( custom/theme )|
0|32|left||( custom/power ) ( tray battery ) ( wlr/taskbar idle_inhibitor clock ) ( custom/cliphist ) ( custom/wbar ) ( custom/wallchange ) ( custom/theme )|
1|32|top||( custom/power ) ( tray battery ) ( wlr/taskbar idle_inhibitor clock ) ( custom/cliphist ) ( custom/wbar ) ( custom/wallchange ) ( custom/theme )|
0|32|right||( custom/power ) ( tray battery ) ( wlr/taskbar idle_inhibitor clock ) ( custom/cliphist ) ( custom/wbar ) ( custom/wallchange ) ( custom/theme )|
0|31|bottom|( cpu memory custom/cpuinfo custom/gpuinfo ) ( idle_inhibitor clock ) ( hyprland/workspaces )|( wlr/taskbar )|( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
0|31|top|( cpu memory custom/cpuinfo custom/gpuinfo ) ( idle_inhibitor clock ) ( hyprland/workspaces )|( wlr/taskbar )|( backlight network pulseaudio pulseaudio#microphone custom/updates custom/keybindhint ) ( tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
0|29|bottom|( wlr/taskbar mpris )|( idle_inhibitor clock )|( backlight network pulseaudio pulseaudio#microphone custom/updates ) ( tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
0|29|left|( wlr/taskbar mpris )|( idle_inhibitor clock )|( backlight network pulseaudio pulseaudio#microphone custom/updates ) ( tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
0|29|top|( wlr/taskbar mpris )|( idle_inhibitor clock )|( backlight network pulseaudio pulseaudio#microphone custom/updates ) ( tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
0|29|right|( wlr/taskbar mpris )|( idle_inhibitor clock )|( backlight network pulseaudio pulseaudio#microphone custom/updates ) ( tray battery ) ( custom/wallchange custom/theme custom/wbar custom/cliphist custom/power )
0|28|bottom|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( idle_inhibitor clock custom/spotify )|( wlr/taskbar )|( tray ) ( backlight network pulseaudio pulseaudio#microphone )
0|28|left|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( idle_inhibitor clock custom/spotify )|( wlr/taskbar )|( tray ) ( backlight network pulseaudio pulseaudio#microphone )
0|28|top|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( idle_inhibitor clock custom/spotify )|( wlr/taskbar )|( tray ) ( backlight network pulseaudio pulseaudio#microphone )
0|28|right|( custom/power custom/cliphist custom/wbar custom/theme custom/wallchange ) ( idle_inhibitor clock custom/spotify )|( wlr/taskbar )|( tray ) ( backlight network pulseaudio pulseaudio#microphone )
-10
View File
@@ -1,10 +0,0 @@
"backlight": {
"device": "intel_backlight",
"rotate": ${r_deg},
"format": "{icon} {percent}%",
"format-icons": ["", "", "", "", "", "", "", "", ""],
"on-scroll-up": "brightnessctl set 1%+",
"on-scroll-down": "brightnessctl set 1%-",
"min-length": 6
},
-14
View File
@@ -1,14 +0,0 @@
"battery": {
"states": {
"good": 95,
"warning": 30,
"critical": 20
},
"format": "{icon} {capacity}%",
"rotate": ${r_deg},
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-alt": "{time} {icon}",
"format-icons": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"]
},
-15
View File
@@ -1,15 +0,0 @@
"bluetooth": {
"format": "",
"rotate": ${r_deg},
"format-disabled": "",
"format-connected": " {num_connections}",
"format-connected-battery": "{icon} {num_connections}",
// "format-connected-battery": "{icon} {device_alias}-{device_battery_percentage}%",
"format-icons": ["󰥇", "󰤾", "󰤿", "󰥀", "󰥁", "󰥂", "󰥃", "󰥄", "󰥅", "󰥆", "󰥈"],
// "format-device-preference": [ "device1", "device2" ], // preference list deciding the displayed device If this config option is not defined or none of the devices in the list are connected, it will fall back to showing the last connected device.
"tooltip-format": "{controller_alias}\n{num_connections} connected",
"tooltip-format-connected": "{controller_alias}\n{num_connections} connected\n\n{device_enumerate}",
"tooltip-format-enumerate-connected": "{device_alias}",
"tooltip-format-enumerate-connected-battery": "{device_alias}\t{icon} {device_battery_percentage}%"
},
-11
View File
@@ -1,11 +0,0 @@
"custom/cliphist": {
"format": "{}",
"rotate": ${r_deg},
"exec": "echo ; echo 󰅇 clipboard history",
"on-click": "sleep 0.1 && cliphist.sh c",
"on-click-right": "sleep 0.1 && cliphist.sh d",
"on-click-middle": "sleep 0.1 && cliphist.sh w",
"interval" : 86400, // once every day
"tooltip": true
},
-25
View File
@@ -1,25 +0,0 @@
"clock": {
"format": "{:%H:%M}",
"rotate": ${r_deg},
"format-alt": "{:%R 󰃭 %d·%m·%y}",
"tooltip-format": "<span>{calendar}</span>",
"calendar": {
"mode": "month",
"mode-mon-col": 3,
"on-scroll": 1,
"on-click-right": "mode",
"format": {
"months": "<span color='#ffead3'><b>{}</b></span>",
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
"today": "<span color='#ff6699'><b>{}</b></span>"
}
},
"actions": {
"on-click-right": "mode",
"on-click-forward": "tz_up",
"on-click-backward": "tz_down",
"on-scroll-up": "shift_up",
"on-scroll-down": "shift_down"
}
},
-8
View File
@@ -1,8 +0,0 @@
"cpu": {
"interval": 10,
"format": "󰍛 {usage}%",
"rotate": ${r_deg},
"format-alt": "{icon0}{icon1}{icon2}{icon3}",
"format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"]
},
-10
View File
@@ -1,10 +0,0 @@
"custom/cpuinfo": {
"exec": " cpuinfo.sh",
"return-type": "json",
"format": "{}",
"rotate": ${r_deg},
"interval": 5, // once every 5 seconds
"tooltip": true,
"max-length": 1000
},
-47
View File
@@ -1,47 +0,0 @@
// modules for padding //
"custom/l_end": {
"format": " ",
"interval" : "once",
"tooltip": false
},
"custom/r_end": {
"format": " ",
"interval" : "once",
"tooltip": false
},
"custom/sl_end": {
"format": " ",
"interval" : "once",
"tooltip": false
},
"custom/sr_end": {
"format": " ",
"interval" : "once",
"tooltip": false
},
"custom/rl_end": {
"format": " ",
"interval" : "once",
"tooltip": false
},
"custom/rr_end": {
"format": " ",
"interval" : "once",
"tooltip": false
},
"custom/padd": {
"format": " ",
"interval" : "once",
"tooltip": false
}
}
-41
View File
@@ -1,41 +0,0 @@
"custom/gpuinfo": {
"exec": " gpuinfo.sh",
"return-type": "json",
"format": "{}",
"rotate": ${r_deg},
"interval": 5, // once every 5 seconds
"tooltip": true,
"max-length": 1000,
"on-click": "gpuinfo.sh --toggle",
},
"custom/gpuinfo#nvidia": {
"exec": " gpuinfo.sh --use nvidia ",
"return-type": "json",
"format": "{}",
"rotate": ${r_deg},
"interval": 5, // once every 5 seconds
"tooltip": true,
"max-length": 1000,
},
"custom/gpuinfo#amd": {
"exec": " gpuinfo.sh --use amd ",
"return-type": "json",
"format": "{}",
"rotate": ${r_deg},
"interval": 5, // once every 5 seconds
"tooltip": true,
"max-length": 1000,
},
"custom/gpuinfo#intel": {
"exec": " gpuinfo.sh --use intel ",
"return-type": "json",
"format": "{}",
"rotate": ${r_deg},
"interval": 5, // once every 5 seconds
"tooltip": true,
"max-length": 1000,
},
-13
View File
@@ -1,13 +0,0 @@
// --// waybar config generated by wbarconfgen.sh //-- //
{
// sourced from header module //
"layer": "top",
"position": "${w_position}",
"mod": "dock",
"${hv_pos}": ${w_height},
"exclusive": true,
"passthrough": false,
"gtk-layer-shell": true,
"reload_style_on_change": true,
@@ -1,9 +0,0 @@
"idle_inhibitor": {
"format": "{icon}",
"rotate": ${r_deg},
"format-icons": {
"activated": "󰥔",
"deactivated": ""
}
},
-6
View File
@@ -1,6 +0,0 @@
"custom/keybindhint": {
"format": " ",
"rotate": ${r_deg},
"on-click": "keybinds_hint.sh"
},
-6
View File
@@ -1,6 +0,0 @@
"hyprland/language": {
"format": "{short} {variant}",
"rotate": ${r_deg},
"on-click": "keyboardswitch.sh",
},
-18
View File
@@ -1,18 +0,0 @@
"memory": {
"states": {
"c": 90, // critical
"h": 60, // high
"m": 30, // medium
},
"interval": 30,
"format": "󰾆 {used}GB",
"rotate": ${r_deg},
"format-m": "󰾅 {used}GB",
"format-h": "󰓅 {used}GB",
"format-c": " {used}GB",
"format-alt": "󰾆 {percentage}%",
"max-length": 10,
"tooltip": true,
"tooltip-format": "󰾆 {percentage}%\n {used:0.1f}GB/{total:0.1f}GB"
},
-16
View File
@@ -1,16 +0,0 @@
"mpris": {
"format": "{player_icon} {dynamic}",
"rotate": ${r_deg},
"format-paused": "{status_icon} <i>{dynamic}</i>",
"player-icons": {
"default": "▶",
"mpv": "🎵"
},
"status-icons": {
"paused": ""
},
// "ignored-players": ["firefox"]
"max-length": 1000,
"interval": 1
},
-13
View File
@@ -1,13 +0,0 @@
"network": {
"tooltip": true,
"format-wifi": " ",
"rotate": ${r_deg},
"format-ethernet": "󰈀 ",
"tooltip-format": "Network: <big><b>{essid}</b></big>\nSignal strength: <b>{signaldBm}dBm ({signalStrength}%)</b>\nFrequency: <b>{frequency}MHz</b>\nInterface: <b>{ifname}</b>\nIP: <b>{ipaddr}/{cidr}</b>\nGateway: <b>{gwaddr}</b>\nNetmask: <b>{netmask}</b>",
"format-linked": "󰈀 {ifname} (No IP)",
"format-disconnected": "󰖪 ",
"tooltip-format-disconnected": "Disconnected",
"format-alt": "<span foreground='#99ffdd'> {bandwidthDownBytes}</span> <span foreground='#ffcc66'> {bandwidthUpBytes}</span>",
"interval": 2
}
@@ -1,29 +0,0 @@
"custom/notifications": {
"format": "{icon} {}",
"rotate": ${r_deg},
"format-icons": {
"email-notification": "<span foreground='white'><sup></sup></span>",
"chat-notification": "󱋊<span foreground='white'><sup></sup></span>",
"warning-notification": "󱨪<span foreground='yellow'><sup></sup></span>",
"error-notification": "󱨪<span foreground='red'><sup></sup></span>",
"network-notification": "󱂇<span foreground='white'><sup></sup></span>",
"battery-notification": "󰁺<span foreground='white'><sup></sup></span>",
"update-notification": "󰚰<span foreground='white'><sup></sup></span>",
"music-notification": "󰝚<span foreground='white'><sup></sup></span>",
"volume-notification": "󰕿<span foreground='white'><sup></sup></span>",
"notification": "<span foreground='white'><sup></sup></span>",
"dnd": "",
"none": ""
},
"return-type": "json",
"exec-if": "which dunstctl",
"exec": "notifications.py",
"on-scroll-down": "sleep 0.1 && dunstctl history-pop",
"on-click": "dunstctl set-paused toggle",
"on-click-middle": "dunstctl history-clear",
"on-click-right": "dunstctl close-all",
"interval": 1,
"tooltip": true,
"escape": true
},
-10
View File
@@ -1,10 +0,0 @@
"custom/power": {
"format": "{}",
"rotate": ${r_deg},
"exec": "echo ; echo  logout",
"on-click": "logoutlaunch.sh 2",
"on-click-right": "logoutlaunch.sh 1",
"interval" : 86400, // once every day
"tooltip": true
},
-35
View File
@@ -1,35 +0,0 @@
"pulseaudio": {
"format": "{icon} {volume}",
"rotate": ${r_deg},
"format-muted": "婢",
"on-click": "pavucontrol -t 3",
"on-click-right": "volumecontrol.sh -s ''",
"on-click-middle": "volumecontrol.sh -o m",
"on-scroll-up": "volumecontrol.sh -o i",
"on-scroll-down": "volumecontrol.sh -o d",
"tooltip-format": "{icon} {desc} // {volume}%",
"scroll-step": 5,
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": ["", "", ""]
}
},
"pulseaudio#microphone": {
"format": "{format_source}",
"rotate": ${r_deg},
"format-source": "",
"format-source-muted": "",
"on-click": "pavucontrol -t 4",
"on-click-middle": "volumecontrol.sh -i m",
"on-scroll-up": "volumecontrol.sh -i i",
"on-scroll-down": "volumecontrol.sh -i d",
"tooltip-format": "{format_source} {source_desc} // {source_volume}%",
"scroll-step": 5
},
-15
View File
@@ -1,15 +0,0 @@
"custom/spotify": {
"exec": "mediaplayer.py --player spotify",
"format": " {}",
"rotate": ${r_deg},
"return-type": "json",
"on-click": "playerctl play-pause --player spotify",
"on-click-right": "playerctl next --player spotify",
"on-click-middle": "playerctl previous --player spotify",
"on-scroll-up": "volumecontrol.sh -p spotify i",
"on-scroll-down": "volumecontrol.sh -p spotify d",
"max-length": 25,
"escape": true,
"tooltip": true
},
-151
View File
@@ -1,151 +0,0 @@
* {
border: none;
border-radius: 0px;
font-family: "JetBrainsMono Nerd Font";
font-weight: bold;
font-size: ${s_fontpx}px;
min-height: 10px;
}
@import "theme.css";
window#waybar {
background: @bar-bg;
}
tooltip {
background: @main-bg;
color: @main-fg;
border-radius: ${t_radius}px;
border-width: 0px;
}
#workspaces button {
box-shadow: none;
text-shadow: none;
padding: 0px;
border-radius: ${w_radius}px;
margin-${x1}: ${w_margin}px;
margin-${x2}: ${w_margin}px;
margin-${x3}: 0px;
padding-${x3}: ${w_paddin}px;
padding-${x4}: ${w_paddin}px;
margin-${x4}: 0px;
color: @main-fg;
animation: ws_normal 20s ease-in-out 1;
}
#workspaces button.active {
background: @wb-act-bg;
color: @wb-act-fg;
margin-${x3}: ${w_margin}px;
padding-${x3}: ${w_padact}px;
padding-${x4}: ${w_padact}px;
margin-${x4}: ${w_margin}px;
animation: ws_active 20s ease-in-out 1;
transition: all 0.4s cubic-bezier(.55,-0.68,.48,1.682);
}
#workspaces button:hover {
background: @wb-hvr-bg;
color: @wb-hvr-fg;
animation: ws_hover 20s ease-in-out 1;
transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682);
}
#taskbar button {
box-shadow: none;
text-shadow: none;
padding: 0px;
border-radius: ${w_radius}px;
margin-${x1}: ${w_margin}px;
margin-${x2}: ${w_margin}px;
margin-${x3}: 0px;
padding-${x3}: ${w_paddin}px;
padding-${x4}: ${w_paddin}px;
margin-${x4}: 0px;
color: @wb-color;
animation: tb_normal 20s ease-in-out 1;
}
#taskbar button.active {
background: @wb-act-bg;
color: @wb-act-color;
margin-${x3}: ${w_margin}px;
padding-${x3}: ${w_padact}px;
padding-${x4}: ${w_padact}px;
margin-${x4}: ${w_margin}px;
animation: tb_active 20s ease-in-out 1;
transition: all 0.4s cubic-bezier(.55,-0.68,.48,1.682);
}
#taskbar button:hover {
background: @wb-hvr-bg;
color: @wb-hvr-color;
animation: tb_hover 20s ease-in-out 1;
transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682);
}
#tray menu * {
min-height: 16px
}
#tray menu separator {
min-height: 10px
}
${modules_ls}
#custom-l_end,
#custom-r_end,
#custom-sl_end,
#custom-sr_end,
#custom-rl_end,
#custom-rr_end {
color: @main-fg;
background: @main-bg;
opacity: 1;
margin: ${x1g_margin}px ${x2g_margin}px ${x3g_margin}px ${x4g_margin}px;
padding-${x3}: ${g_paddin}px;
padding-${x4}: ${g_paddin}px;
}
#workspaces,
#taskbar {
padding: 0px;
}
#custom-r_end {
border-radius: ${x1rb_radius}px ${x2rb_radius}px ${x3rb_radius}px ${x4rb_radius}px;
margin-${x4}: ${e_margin}px;
padding-${x4}: ${e_paddin}px;
}
#custom-l_end {
border-radius: ${x1lb_radius}px ${x2lb_radius}px ${x3lb_radius}px ${x4lb_radius}px;
margin-${x3}: ${e_margin}px;
padding-${x3}: ${e_paddin}px;
}
#custom-sr_end {
border-radius: 0px;
margin-${x4}: ${e_margin}px;
padding-${x4}: ${e_paddin}px;
}
#custom-sl_end {
border-radius: 0px;
margin-${x3}: ${e_margin}px;
padding-${x3}: ${e_paddin}px;
}
#custom-rr_end {
border-radius: ${x1rc_radius}px ${x2rc_radius}px ${x3rc_radius}px ${x4rc_radius}px;
margin-${x4}: ${e_margin}px;
padding-${x4}: ${e_paddin}px;
}
#custom-rl_end {
border-radius: ${x1lc_radius}px ${x2lc_radius}px ${x3lc_radius}px ${x4lc_radius}px;
margin-${x3}: ${e_margin}px;
padding-${x3}: ${e_paddin}px;
}
-17
View File
@@ -1,17 +0,0 @@
"wlr/taskbar": {
"format": "{icon}",
"rotate": ${r_deg},
"icon-size": ${i_task},
"icon-theme": "${i_theme}",
"spacing": 0,
"tooltip-format": "{title}",
"on-click": "activate",
"on-click-middle": "close",
"ignore-list": [
"Alacritty"
],
"app_ids-mapping": {
"firefoxdeveloperedition": "firefox-developer-edition"
}
},
-11
View File
@@ -1,11 +0,0 @@
"custom/theme": {
"format": "{}",
"rotate": ${r_deg},
"exec": "echo ; echo 󰟡 switch theme",
"on-click": "themeswitch.sh -n",
"on-click-right": "themeswitch.sh -p",
"on-click-middle": "sleep 0.1 && themeselect.sh",
"interval" : 86400, // once every day
"tooltip": true
},
-6
View File
@@ -1,6 +0,0 @@
"tray": {
"icon-size": ${i_size},
"rotate": ${r_deg},
"spacing": 5
},
-10
View File
@@ -1,10 +0,0 @@
"custom/updates": {
"exec": "systemupdate.sh",
"return-type": "json",
"format": "{}",
"rotate": ${r_deg},
"on-click": "hyprctl dispatch exec 'systemupdate.sh up'",
"interval": 86400, // once every day
"tooltip": true,
"signal": 20
},
-11
View File
@@ -1,11 +0,0 @@
"custom/wallchange": {
"format": "{}",
"rotate": ${r_deg},
"exec": "echo ; echo 󰆊 switch wallpaper",
"on-click": "swwwallpaper.sh -n",
"on-click-right": "swwwallpaper.sh -p",
"on-click-middle": "sleep 0.1 && swwwallselect.sh",
"interval" : 86400, // once every day
"tooltip": true
},
-17
View File
@@ -1,17 +0,0 @@
"hyprland/window": {
"format": "  {}",
"rotate": ${r_deg},
"separate-outputs": true,
"rewrite": {
"${USER}@${set_sysname}:(.*)": "$1 ",
"(.*) — Mozilla Firefox": "$1 󰈹",
"(.*)Mozilla Firefox": "Firefox 󰈹",
"(.*) - Visual Studio Code": "$1 󰨞",
"(.*)Visual Studio Code": "Code 󰨞",
"(.*) — Dolphin": "$1 󰉋",
"(.*)Spotify": "Spotify 󰓇",
"(.*)Steam": "Steam 󰓓"
},
"max-length": 1000
},
-13
View File
@@ -1,13 +0,0 @@
"hyprland/workspaces": {
"disable-scroll": true,
"rotate": ${r_deg},
"all-outputs": true,
"active-only": false,
"on-click": "activate",
"disable-scroll": false,
"on-scroll-up": "hyprctl dispatch workspace -1",
"on-scroll-down": "hyprctl dispatch workspace +1",
"persistent-workspaces": {
}
},
-10
View File
@@ -1,10 +0,0 @@
@define-color bar-bg rgba(0, 0, 0, 0);
@define-color main-bg rgba(0,0,0,0.4);
@define-color main-fg #cdd6f4;
@define-color wb-act-bg #a6adc8;
@define-color wb-act-fg #313244;
@define-color wb-hvr-bg #f5c2e7;
@define-color wb-hvr-fg #313244;
-26
View File
@@ -1,26 +0,0 @@
modmap:
- name: CapsLock to LeftCtrl/Esc
remap:
CapsLock:
held: leftctrl
alone: esc
alone_timeout_millis: 150
# keymap:
# - name: Alt+hjkl to Arrows
# remap:
# # Alt-H: Alt+left #back
# Alt-h: left
# Alt-l: right
# Alt-j: down
# Alt-k: up
# Alt-u: pageup
# Alt-d: pagedown
# keymap:
# - name: Freetube remap
# application:
# only: FreeTube
# remap:
# Alt-h: Left
# Alt-l: Right
# Alt-j: Down
# Alt-k: Up
-452
View File
@@ -1,452 +0,0 @@
keybinds clear-defaults=true {
locked {
bind "Ctrl g" { SwitchToMode "normal"; }
}
pane {
bind "left" { MoveFocus "left"; }
bind "down" { MoveFocus "down"; }
bind "up" { MoveFocus "up"; }
bind "right" { MoveFocus "right"; }
bind "c" { SwitchToMode "renamepane"; PaneNameInput 0; }
bind "d" { NewPane "down"; SwitchToMode "normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
bind "h" { MoveFocus "left"; }
bind "i" { TogglePanePinned; SwitchToMode "normal"; }
bind "j" { MoveFocus "down"; }
bind "k" { MoveFocus "up"; }
bind "l" { MoveFocus "right"; }
bind "n" { NewPane; SwitchToMode "normal"; }
bind "p" { SwitchFocus; }
bind "Ctrl p" { SwitchToMode "normal"; }
bind "r" { NewPane "right"; SwitchToMode "normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
}
tab {
bind "left" { GoToPreviousTab; }
bind "down" { GoToNextTab; }
bind "up" { GoToPreviousTab; }
bind "right" { GoToNextTab; }
bind "1" { GoToTab 1; SwitchToMode "normal"; }
bind "2" { GoToTab 2; SwitchToMode "normal"; }
bind "3" { GoToTab 3; SwitchToMode "normal"; }
bind "4" { GoToTab 4; SwitchToMode "normal"; }
bind "5" { GoToTab 5; SwitchToMode "normal"; }
bind "6" { GoToTab 6; SwitchToMode "normal"; }
bind "7" { GoToTab 7; SwitchToMode "normal"; }
bind "8" { GoToTab 8; SwitchToMode "normal"; }
bind "9" { GoToTab 9; SwitchToMode "normal"; }
bind "[" { BreakPaneLeft; SwitchToMode "normal"; }
bind "]" { BreakPaneRight; SwitchToMode "normal"; }
bind "b" { BreakPane; SwitchToMode "normal"; }
bind "h" { GoToPreviousTab; }
bind "j" { GoToNextTab; }
bind "k" { GoToPreviousTab; }
bind "l" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "normal"; }
bind "r" { SwitchToMode "renametab"; TabNameInput 0; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
bind "Ctrl t" { SwitchToMode "normal"; }
bind "x" { CloseTab; SwitchToMode "normal"; }
bind "tab" { ToggleTab; }
}
resize {
bind "left" { Resize "Increase left"; }
bind "down" { Resize "Increase down"; }
bind "up" { Resize "Increase up"; }
bind "right" { Resize "Increase right"; }
bind "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
bind "=" { Resize "Increase"; }
bind "H" { Resize "Decrease left"; }
bind "J" { Resize "Decrease down"; }
bind "K" { Resize "Decrease up"; }
bind "L" { Resize "Decrease right"; }
bind "h" { Resize "Increase left"; }
bind "j" { Resize "Increase down"; }
bind "k" { Resize "Increase up"; }
bind "l" { Resize "Increase right"; }
bind "Ctrl n" { SwitchToMode "normal"; }
}
move {
bind "left" { MovePane "left"; }
bind "down" { MovePane "down"; }
bind "up" { MovePane "up"; }
bind "right" { MovePane "right"; }
bind "h" { MovePane "left"; }
bind "Ctrl h" { SwitchToMode "normal"; }
bind "j" { MovePane "down"; }
bind "k" { MovePane "up"; }
bind "l" { MovePane "right"; }
bind "n" { MovePane; }
bind "p" { MovePaneBackwards; }
bind "tab" { MovePane; }
}
scroll {
bind "e" { EditScrollback; SwitchToMode "normal"; }
bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
}
search {
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "n" { Search "down"; }
bind "o" { SearchToggleOption "WholeWord"; }
bind "p" { Search "up"; }
bind "w" { SearchToggleOption "Wrap"; }
}
session {
bind "a" {
LaunchOrFocusPlugin "zellij:about" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
bind "c" {
LaunchOrFocusPlugin "configuration" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
bind "Ctrl o" { SwitchToMode "normal"; }
bind "p" {
LaunchOrFocusPlugin "plugin-manager" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
bind "w" {
LaunchOrFocusPlugin "session-manager" {
floating true
move_to_focused_tab true
}
SwitchToMode "normal"
}
}
shared_except "locked" {
bind "Alt left" { MoveFocusOrTab "left"; }
bind "Alt down" { MoveFocus "down"; }
bind "Alt up" { MoveFocus "up"; }
bind "Alt right" { MoveFocusOrTab "right"; }
bind "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "Alt =" { Resize "Increase"; }
bind "Alt [" { PreviousSwapLayout; }
bind "Alt ]" { NextSwapLayout; }
bind "Alt f" { ToggleFloatingPanes; }
bind "Ctrl g" { SwitchToMode "locked"; }
bind "Alt h" { MoveFocusOrTab "left"; }
bind "Alt i" { MoveTab "left"; }
bind "Alt j" { MoveFocus "down"; }
bind "Alt k" { MoveFocus "up"; }
bind "Alt l" { MoveFocusOrTab "right"; }
bind "Alt n" { NewPane; }
bind "Alt o" { MoveTab "right"; }
bind "Ctrl q" { Quit; }
}
shared_except "locked" "move" {
bind "Ctrl h" { SwitchToMode "move"; }
}
shared_except "locked" "session" {
bind "Ctrl o" { SwitchToMode "session"; }
}
shared_except "locked" "scroll" "search" "tmux" {
bind "Ctrl b" { SwitchToMode "tmux"; }
}
shared_except "locked" "scroll" "search" {
bind "Ctrl s" { SwitchToMode "scroll"; }
}
shared_except "locked" "tab" {
bind "Ctrl t" { SwitchToMode "tab"; }
}
shared_except "locked" "pane" {
bind "Ctrl p" { SwitchToMode "pane"; }
}
shared_except "locked" "resize" {
bind "Ctrl n" { SwitchToMode "resize"; }
}
shared_except "normal" "locked" "entersearch" {
bind "enter" { SwitchToMode "normal"; }
}
shared_except "normal" "locked" "entersearch" "renametab" "renamepane" {
bind "esc" { SwitchToMode "normal"; }
}
shared_among "pane" "tmux" {
bind "x" { CloseFocus; SwitchToMode "normal"; }
}
shared_among "scroll" "search" {
bind "PageDown" { PageScrollDown; }
bind "PageUp" { PageScrollUp; }
bind "left" { PageScrollUp; }
bind "down" { ScrollDown; }
bind "up" { ScrollUp; }
bind "right" { PageScrollDown; }
bind "Ctrl b" { PageScrollUp; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "normal"; }
bind "d" { HalfPageScrollDown; }
bind "Ctrl f" { PageScrollDown; }
bind "h" { PageScrollUp; }
bind "j" { ScrollDown; }
bind "k" { ScrollUp; }
bind "l" { PageScrollDown; }
bind "Ctrl s" { SwitchToMode "normal"; }
bind "u" { HalfPageScrollUp; }
}
entersearch {
bind "Ctrl c" { SwitchToMode "scroll"; }
bind "esc" { SwitchToMode "scroll"; }
bind "enter" { SwitchToMode "search"; }
}
renametab {
bind "esc" { UndoRenameTab; SwitchToMode "tab"; }
}
shared_among "renametab" "renamepane" {
bind "Ctrl c" { SwitchToMode "normal"; }
}
renamepane {
bind "esc" { UndoRenamePane; SwitchToMode "pane"; }
}
shared_among "session" "tmux" {
bind "d" { Detach; }
}
tmux {
bind "left" { MoveFocus "left"; SwitchToMode "normal"; }
bind "down" { MoveFocus "down"; SwitchToMode "normal"; }
bind "up" { MoveFocus "up"; SwitchToMode "normal"; }
bind "right" { MoveFocus "right"; SwitchToMode "normal"; }
bind "space" { NextSwapLayout; }
bind "\"" { NewPane "down"; SwitchToMode "normal"; }
bind "%" { NewPane "right"; SwitchToMode "normal"; }
bind "," { SwitchToMode "renametab"; }
bind "[" { SwitchToMode "scroll"; }
bind "Ctrl b" { Write 2; SwitchToMode "normal"; }
bind "c" { NewTab; SwitchToMode "normal"; }
bind "h" { MoveFocus "left"; SwitchToMode "normal"; }
bind "j" { MoveFocus "down"; SwitchToMode "normal"; }
bind "k" { MoveFocus "up"; SwitchToMode "normal"; }
bind "l" { MoveFocus "right"; SwitchToMode "normal"; }
bind "n" { GoToNextTab; SwitchToMode "normal"; }
bind "o" { FocusNextPane; }
bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
}
}
// Plugin aliases - can be used to change the implementation of Zellij
// changing these requires a restart to take effect
plugins {
about location="zellij:about"
compact-bar location="zellij:compact-bar"
configuration location="zellij:configuration"
filepicker location="zellij:strider" {
cwd "/"
}
plugin-manager location="zellij:plugin-manager"
session-manager location="zellij:session-manager"
status-bar location="zellij:status-bar"
strider location="zellij:strider"
tab-bar location="zellij:tab-bar"
welcome-screen location="zellij:session-manager" {
welcome_screen true
}
}
// Plugins to load in the background when a new session starts
// eg. "file:/path/to/my-plugin.wasm"
// eg. "https://example.com/my-plugin.wasm"
load_plugins {
}
// Use a simplified UI without special fonts (arrow glyphs)
// Options:
// - true
// - false (Default)
//
// simplified_ui true
// Choose the theme that is specified in the themes section.
// Default: default
//
// theme "dracula"
// Choose the base input mode of zellij.
// Default: normal
//
// default_mode "locked"
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"
// Choose the path to override cwd that zellij will use for opening new panes
//
// default_cwd "/tmp"
// The name of the default layout to load on startup
// Default: "default"
//
// default_layout "compact"
// The folder in which Zellij will look for layouts
// (Requires restart)
//
// layout_dir "/tmp"
// The folder in which Zellij will look for themes
// (Requires restart)
//
// theme_dir "/tmp"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// Options:
// - true (default)
// - false
//
// mouse_mode false
// Toggle having pane frames around the panes
// Options:
// - true (default, enabled)
// - false
//
// pane_frames false
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// (Requires restart)
// Default: false
//
// mirror_session true
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// (Requires restart)
// Options:
// - detach (Default)
// - quit
//
// on_force_close "quit"
// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// (Requires restart)
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
//
// copy_command "pbcopy"
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
// copy_clipboard "primary"
// Enable automatic copying (and clearing) of selection when releasing mouse
// Default: true
//
// copy_on_select true
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
// scrollback_editor "/usr/bin/vim"
// A fixed name to always give the Zellij session.
// Consider also setting `attach_to_session true,`
// otherwise this will error if such a session exists.
// Default: <RANDOM>
//
// session_name "My singleton session"
// When `session_name` is provided, attaches to that session
// if it is already running or creates it otherwise.
// Default: false
//
// attach_to_session true
// Toggle between having Zellij lay out panes according to a predefined set of layouts whenever possible
// Options:
// - true (default)
// - false
//
// auto_layout false
// Whether sessions should be serialized to the cache folder (including their tabs/panes, cwds and running commands) so that they can later be resurrected
// Options:
// - true (default)
// - false
//
// session_serialization false
// Whether pane viewports are serialized along with the session, default is false
// Options:
// - true
// - false (default)
//
// serialize_pane_viewport false
// Scrollback lines to serialize along with the pane viewport when serializing sessions, 0
// defaults to the scrollback size. If this number is higher than the scrollback size, it will
// also default to the scrollback size. This does nothing if `serialize_pane_viewport` is not true.
//
// scrollback_lines_to_serialize 10000
// Enable or disable the rendering of styled and colored underlines (undercurl).
// May need to be disabled for certain unsupported terminals
// (Requires restart)
// Default: true
//
// styled_underlines false
// How often in seconds sessions are serialized
//
// serialization_interval 10000
// Enable or disable writing of session metadata to disk (if disabled, other sessions might not know
// metadata info on this session)
// (Requires restart)
// Default: false
//
// disable_session_metadata false
// Enable or disable support for the enhanced Kitty Keyboard Protocol (the host terminal must also support it)
// (Requires restart)
// Default: true (if the host terminal supports it)
//
// support_kitty_keyboard_protocol false
// Whether to stack panes when resizing beyond a certain size
// Default: true
//
// stacked_resize false
// Whether to show tips on startup
// Default: true
//
// show_startup_tips false
// Whether to show release notes on first version run
// Default: true
//
// show_release_notes false
+28
View File
@@ -0,0 +1,28 @@
# Shell formatting for this repo.
#
# Both `shfmt` and the Claude format hook (common/.config/claude/hooks/format.py, which only
# runs shfmt/fish_indent where an .editorconfig opts in) read this file, so the policy and the
# tool that enforces it live in one place. Neovim reads it natively too.
#
# The settings were picked to stay as close as possible to how these scripts were already
# written by hand: 2-space indent, `case` arms indented under `case`, and `&&`/`||` starting
# the wrapped line rather than trailing the one before it (binary_next_line, which reproduces
# the existing `\` continuations exactly). shfmt still rewrites
# a few things no option controls — one-line `case x) a; b ;;` arms and `{ a; b; }` guards
# are split across lines, and `> file` loses its space — which is the one-time cost of
# having a formatter own the layout instead of maintaining it by hand.
#
# `keep_padding` is deliberately NOT set: it is deprecated in shfmt, and it indents the
# statements it splits by the padding column, producing a cascading staircase.
#
# Scoped to shell on purpose — there is no [*] section, so the repo's other filetypes are
# untouched (a [*] block would retune all of them in any editorconfig-aware editor, and
# would also switch on the hook's fish_indent for every fish file).
root = true
[{*.sh,dotsync,dotpub}]
indent_style = space
indent_size = 2
switch_case_indent = true
binary_next_line = true
+38 -3
View File
@@ -1,3 +1,38 @@
!.gitignore # Secrets / local-only (matched at any depth)
.config/hyde/themes/ secrets.fish
.config/fish/greet.txt fish_variables
greet.txt
settings.local.json
# pi agent runtime + machine-local auth/state
**/.pi/agent/auth.json
**/.pi/agent/sessions/
**/.pi/agent/bin/
**/.pi/agent/git/
**/.pi/agent/npm/
**/.pi/agent/trust.json
# tmux plugins (tpm-managed, not vendored)
**/tmux/plugins/
# HyDE generated theme + wallpaper assets (per-machine, huge — bloated the old repo to 255MB)
**/hyde/themes/
**/wallpapers/
# Claude Code project dir (worktrees, local settings, history) — never part of the dotfiles
.claude/
# backups / logs / package noise / os
*.bak
*.bak.*
*.log
package-lock.json
__pycache__/
**/hypr/themes/
# HyDE writes these at theme-apply time (sourced by animations/theme.conf & hyprlock/theme.conf)
**/hypr/animations/HyDE.conf
**/hypr/hyprlock/HyDE.conf
# HyDE generates waybar's include list per machine, with ABSOLUTE $HOME paths — the committed copy
# carried fl's /home/anon into every gui host, where it resolved to nothing. Let each box write it.
**/waybar/includes/includes.json
+12
View File
@@ -0,0 +1,12 @@
# Search config for THIS repo only (ripgrep / fd / telescope read .ignore).
#
# Everything this repo holds lives in dotfiles and dotdirs — common/.config, gui/.config,
# common/.pi, common/.bashrc — which rg and fd skip by default, so an unqualified search
# here returned nothing at all. Un-hide them, then put back the two dirs that would swamp
# every result: negating .* alone drags in the whole of .git, and .claude/worktrees holds
# entire checkouts of this same repo (background sessions create them), so every hit would
# appear several times over. Scoped to this directory tree; searches elsewhere on the
# machine are unaffected.
!.*
.git/
.claude/
-21
View File
@@ -1,21 +0,0 @@
# Vi mode
set editing-mode vi
set keymap vi
set show-mode-in-prompt on
set vi-ins-mode-string "\1\e[32m\2[I] \1\e[0m\2"
set vi-cmd-mode-string "\1\e[31m\2[N] \1\e[0m\2"
# exclude .dotfles
set match-hidden-files off
set show-all-if-ambiguous on
set show-all-if-unmodified on
set colored-stats on
set colored-completion-prefix on
set mark-symlinked-directories on
set completion-ignore-case on
# Ignore duplicates in history where supported
set skip-completed-text on
-190
View File
@@ -1,190 +0,0 @@
{
"providers": {
"duskadiy": {
"baseUrl": "https://llm.duskadiy.com/api/v1",
"api": "openai-completions",
"apiKey": "no-key-required",
"compat": {
"supportsDeveloperRole": false,
"supportsReasoningEffort": false,
"maxTokensField": "max_tokens"
},
"models": [
{
"id": "DeepSeek-Coder-V2-Lite-Instruct-Q8_0",
"name": "DeepSeek Coder V2",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "gemma-4-E4B-it-UD-Q8_K_XL",
"name": "Gemma 4 E4B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "gemma-4-26B-A4B-it-UD-IQ4_XS",
"name": "Gemma 4 26B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3-Coder-30B-Instruct-IQ4_XS",
"name": "Qwen3 Coder A3B",
"reasoning": false,
"input": ["text"],
"contextWindow": 8192,
"maxTokens": 4096,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.6-27B-UD-IQ3_XXS",
"name": "Qwen3.6 27B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.5-27B-UD-Q3_K_XL",
"name": "Qwen3.5 27B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.5-9B-Q8_0",
"name": "Qwen3.5 9B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.6-27B-Uncensored-HauhauCS-Aggressive-IQ3_M",
"name": "Qwen3.6 27B Uncensored",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "GLM-4.7-Flash-UD-Q3_K_XL",
"name": "GLM-4.7 Flash",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
}
]
},
"localcpp": {
"baseUrl": "http://192.168.0.204:11343/v1",
"api": "openai-completions",
"apiKey": "no-key-required",
"compat": {
"supportsDeveloperRole": false,
"supportsReasoningEffort": false,
"maxTokensField": "max_tokens"
},
"models": [
{
"id": "DeepSeek-Coder-V2-Lite-Instruct-Q8_0",
"name": "DeepSeek Coder V2",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "gemma-4-E4B-it-UD-Q8_K_XL",
"name": "Gemma 4 E4B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "gemma-4-26B-A4B-it-UD-IQ4_XS",
"name": "Gemma 4 26B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3-Coder-30B-Instruct-IQ4_XS",
"name": "Qwen3 Coder A3B",
"reasoning": false,
"input": ["text"],
"contextWindow": 8192,
"maxTokens": 4096,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.6-27B-UD-IQ3_XXS",
"name": "Qwen3.6 27B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.5-27B-UD-Q3_K_XL",
"name": "Qwen3.5 27B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.5-9B-Q8_0",
"name": "Qwen3.5 9B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.6-27B-Uncensored-HauhauCS-Aggressive-IQ3_M",
"name": "Qwen3.6 27B Uncensored",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "GLM-4.7-Flash-UD-Q3_K_XL",
"name": "GLM-4.7 Flash",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
}
]
}
}
}
-36
View File
@@ -1,36 +0,0 @@
{
"defaultProvider": "duskadiy",
"defaultModel": "gemma-4-E4B-it-UD-Q8_K_XL",
"defaultThinkingLevel": "off",
"theme": "catppuccin-mocha",
"quietStartup": false,
"defaultProjectTrust": "ask",
"enableInstallTelemetry": false,
"enabledModels": [
"localcpp/*",
"duskadiy/*"
],
"compaction": {
"enabled": true,
"reserveTokens": 16384,
"keepRecentTokens": 20000
},
"retry": {
"enabled": true,
"maxRetries": 3,
"baseDelayMs": 2000,
"provider": {
"timeoutMs": 3600000
}
},
"httpIdleTimeoutMs": 600000,
"npmCommand": [
"fnm",
"exec",
"--using=22",
"--",
"npm"
],
"showHardwareCursor": true,
"lastChangelogVersion": "0.80.2"
}
-190
View File
@@ -1,190 +0,0 @@
{
"providers": {
"duskadiy": {
"baseUrl": "https://llm.duskadiy.com/api/v1",
"api": "openai-completions",
"apiKey": "$DUSKADIY_API_KEY",
"compat": {
"supportsDeveloperRole": false,
"supportsReasoningEffort": false,
"maxTokensField": "max_tokens"
},
"models": [
{
"id": "DeepSeek-Coder-V2-Lite-Instruct-Q8_0",
"name": "DeepSeek Coder V2",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "gemma-4-E4B-it-UD-Q8_K_XL",
"name": "Gemma 4 E4B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "gemma-4-26B-A4B-it-UD-IQ4_XS",
"name": "Gemma 4 26B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3-Coder-30B-Instruct-IQ4_XS",
"name": "Qwen3 Coder A3B",
"reasoning": false,
"input": ["text"],
"contextWindow": 8192,
"maxTokens": 4096,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.6-27B-UD-IQ3_XXS",
"name": "Qwen3.6 27B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.5-27B-UD-Q3_K_XL",
"name": "Qwen3.5 27B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.5-9B-Q8_0",
"name": "Qwen3.5 9B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.6-27B-Uncensored-HauhauCS-Aggressive-IQ3_M",
"name": "Qwen3.6 27B Uncensored",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "GLM-4.7-Flash-UD-Q3_K_XL",
"name": "GLM-4.7 Flash",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
}
]
},
"localcpp": {
"baseUrl": "http://192.168.0.204:11343/v1",
"api": "openai-completions",
"apiKey": "no-key-required",
"compat": {
"supportsDeveloperRole": false,
"supportsReasoningEffort": false,
"maxTokensField": "max_tokens"
},
"models": [
{
"id": "DeepSeek-Coder-V2-Lite-Instruct-Q8_0",
"name": "DeepSeek Coder V2",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "gemma-4-E4B-it-UD-Q8_K_XL",
"name": "Gemma 4 E4B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "gemma-4-26B-A4B-it-UD-IQ4_XS",
"name": "Gemma 4 26B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3-Coder-30B-Instruct-IQ4_XS",
"name": "Qwen3 Coder A3B",
"reasoning": false,
"input": ["text"],
"contextWindow": 8192,
"maxTokens": 4096,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.6-27B-UD-IQ3_XXS",
"name": "Qwen3.6 27B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.5-27B-UD-Q3_K_XL",
"name": "Qwen3.5 27B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.5-9B-Q8_0",
"name": "Qwen3.5 9B",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "Qwen3.6-27B-Uncensored-HauhauCS-Aggressive-IQ3_M",
"name": "Qwen3.6 27B Uncensored",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "GLM-4.7-Flash-UD-Q3_K_XL",
"name": "GLM-4.7 Flash",
"reasoning": false,
"input": ["text"],
"contextWindow": 81920,
"maxTokens": 16384,
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }
}
]
}
}
}
-30
View File
@@ -1,30 +0,0 @@
{
"defaultProvider": "duskadiy",
"defaultModel": "gemma-4-26B-A4B-it-UD-IQ4_XS",
"defaultThinkingLevel": "on",
"theme": "catppuccin-mocha",
"quietStartup": false,
"defaultProjectTrust": "ask",
"enableInstallTelemetry": false,
"enabledModels": [
"localcpp/*",
"duskadiy/*"
],
"compaction": {
"enabled": true,
"reserveTokens": 16384,
"keepRecentTokens": 20000
},
"retry": {
"enabled": true,
"maxRetries": 3,
"baseDelayMs": 2000,
"provider": {
"timeoutMs": 3600000
}
},
"httpIdleTimeoutMs": 600000,
"npmCommand": ["fnm", "exec", "--using=22", "--", "npm"],
"showHardwareCursor": true,
"lastChangelogVersion": "0.80.1"
}
-90
View File
@@ -1,90 +0,0 @@
{
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
"name": "catppuccin-mocha",
"vars": {
"rosewater": "#f5e0dc",
"flamingo": "#f2cdcd",
"pink": "#f5c2e7",
"mauve": "#cba6f7",
"red": "#f38ba8",
"maroon": "#eba0ac",
"peach": "#fab387",
"yellow": "#f9e2af",
"green": "#a6e3a1",
"teal": "#94e2d5",
"sky": "#89dceb",
"sapphire": "#74c7ec",
"blue": "#89b4fa",
"lavender": "#b4befe",
"fg": "#cdd6f4",
"subtext1": "#bac2de",
"subtext0": "#a6adc8",
"overlay2": "#9399b2",
"overlay1": "#7f849c",
"overlay0": "#6c7086",
"surface2": "#585b70",
"surface1": "#45475a",
"surface0": "#313244",
"base": "#1e1e2e",
"mantle": "#181825",
"crust": "#11111b"
},
"colors": {
"accent": "mauve",
"border": "surface1",
"borderAccent": "mauve",
"borderMuted": "surface0",
"success": "green",
"error": "red",
"warning": "yellow",
"muted": "subtext0",
"dim": "overlay0",
"text": "fg",
"thinkingText": "overlay1",
"selectedBg": "surface0",
"userMessageBg": "surface0",
"userMessageText": "fg",
"customMessageBg": "surface0",
"customMessageText": "fg",
"customMessageLabel": "mauve",
"toolPendingBg": "mantle",
"toolSuccessBg": "#1e2b22",
"toolErrorBg": "#2b1e22",
"toolTitle": "mauve",
"toolOutput": "fg",
"mdHeading": "mauve",
"mdLink": "blue",
"mdLinkUrl": "sapphire",
"mdCode": "green",
"mdCodeBlock": "fg",
"mdCodeBlockBorder": "surface1",
"mdQuote": "subtext0",
"mdQuoteBorder": "surface2",
"mdHr": "surface1",
"mdListBullet": "mauve",
"toolDiffAdded": "green",
"toolDiffRemoved": "red",
"toolDiffContext": "overlay0",
"syntaxComment": "overlay0",
"syntaxKeyword": "mauve",
"syntaxFunction": "blue",
"syntaxVariable": "fg",
"syntaxString": "green",
"syntaxNumber": "peach",
"syntaxType": "yellow",
"syntaxOperator": "sky",
"syntaxPunctuation": "overlay2",
"thinkingOff": "surface1",
"thinkingMinimal": "overlay0",
"thinkingLow": "blue",
"thinkingMedium": "teal",
"thinkingHigh": "peach",
"thinkingXhigh": "red",
"bashMode": "peach"
},
"export": {
"pageBg": "#11111b",
"cardBg": "#1e1e2e",
"infoBg": "#313244"
}
}
+2 -2
View File
@@ -209,7 +209,7 @@ If you develop a new program, and you want it to be of the greatest possible use
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
dots dots
Copyright (C) 2025 coja Copyright (C) 2026 coja
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
@@ -221,7 +221,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
dots Copyright (C) 2025 coja dots Copyright (C) 2026 coja
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+226 -4
View File
@@ -1,13 +1,235 @@
# dots
using `gnu stow` Unified dotfiles for all machines: one shared base + per-host overlays, deployed with
[GNU Stow](https://www.gnu.org/software/stow/).
Customized [Hyde](https://github.com/HyDE-Project/HyDE) ## Layout
`hyde`, `waybar` and `fish` are from hyprdots with customizations Every top-level directory is a Stow *package* (they all share one stow dir, which `--override`
requires). `bin/` holds repo tooling and is **not** a package (never stowed):
`nvim` is [nvchad](https://nvchad.com/) custom conf ```
common/ # shared everywhere (mirrors $HOME): fish, nvim, bat, btop, tmux, pi, claude, presenterm, ...
gui/ # GUI configs shared by graphical hosts: hypr, waybar, kitty, alacritty, mpv, zellij
wm/ # desktop: 4K monitors, NVIDIA, cloud LLM (duskadiy), work aliases
lw/ # laptop: no NVIDIA, roaming VPNs, network/LLM tools
fl/ # KDE Plasma box: a few Hyprland overrides + llamacpp, evremap
bin/ # tooling (not a stow package): install.sh companions
install.sh
```
A **headless** (terminal-only) machine has no overlay package — it runs `common` only. Mark any box
headless with `touch ~/.config/dots-headless` (a machine-local, hostname-independent marker); it then
skips `gui` too, so the same terminal-only setup replicates across any number of machines. In other
words `common` *is* the headless baseline; `gui` and the host packages layer graphical machines on top.
### How it deploys
Deploy order is `common → gui → <host>`; later layers win (the host package is stowed last with
`--override`, so a host file replaces the common/gui file at the same path). Stow runs with
`--no-folding`, so each *file* is symlinked individually (directories stay real) — this is what lets
a host override a single file in a shared dir without shadowing the rest.
**Editing a config edits the repo copy directly** (it's a symlink) — no deploy step. You only re-run
`install.sh` when files are **added or removed** (to create/prune symlinks). See **Syncing** below.
The repo must be cloned to **`~/.dots`** (the relative `../.dots` symlink convention).
### Which host package a machine deploys
**Hostname is not the authority** — the machine remembers its own choice, so several boxes can deploy
the same overlay without sharing a hostname. `install.sh` resolves the host as:
1. the explicit argument (`./install.sh wm`),
2. else the name in **`~/.config/dots-host`** — written by `install.sh` itself on every run that
resolved a real package, so a one-time `./install.sh <host>` is all the setup there is,
3. else `hostname -s`, purely as a convenience guess for boxes where the two happen to agree.
`~/.config/dots-host` is a machine-local, hand-editable one-word file — the sibling of the
`dots-headless` marker above. It is what makes **`bin/dotsync` correct**: dotsync re-links
automatically and has no argument to pass, so without a recorded host it could only guess. Switching
a machine to another overlay is just `./install.sh <other>` — the previously recorded host is
unstowed first, so the base layers don't collide with its leftover links.
Mismatched hostnames used to fail in a way worth recognizing: `./install.sh` on a box whose hostname
matches no package deploys `common`, aborts `gui` on every file the real overlay owns
(`existing target is stowed to a different package`) and skips the overlay entirely — a loud
`exit 1`, but a half-applied one, where newly added files silently get no symlink.
## Install (new machine)
```fish
sudo pacman -S stow
git clone <remote> ~/.dots
cd ~/.dots
./install.sh wm # name the host package once — it is remembered (see above)
```
`./install.sh -h` lists all options: `-n` dry-run, `-a` adopt (first run), `-D` unstow (revert),
`-h` help. GUI hosts also need **HyDE installed** first — see *HyDE dependency* below.
Once per machine afterwards: `bat cache --build` (registers the repo's custom bat themes —
without it every `bat` run warns `Unknown theme 'onedark'`), and `:Lazy restore` inside nvim
(`restore` obeys the shared `lazy-lock.json` pins; `sync`/`update` would rewrite them).
nvim's treesitter (`main` branch) builds parsers via the `tree-sitter` CLI — `pacman -S
tree-sitter-cli` first, or `:TSInstallAll` fails with `ENOENT ... 'tree-sitter'`.
### First run on a machine that still has real config files
Stow **aborts the whole package on the first conflict** (one real file blocks *everything* in
`common`), and refuses to clobber real files without `--adopt` — you'll see
`cannot stow … since neither a link nor a directory`. Adopt them, review, then keep the repo's
versions:
```fish
cd ~/.dots
git status # make sure the repo is clean first (see the restore caveat)
./install.sh -a <host> # --adopt: pull existing files into the repo, symlink them back
git diff --stat # what this machine had vs the repo (review the drift!)
git restore . # discard adopted content, keep the repo versions
```
`--adopt` overwrites the repo copies with the machine's files, so `git restore .` is what keeps the
repo versions. Cautions: adopted changes can land under `common/`/`gui/` even when host-specific, and
`git restore .` drops **all** uncommitted edits — so commit/stash anything you want first. To keep a
genuine machine change (e.g. custom pyradio `stations.csv`), hand-copy it into the right package
instead of restoring that path.
## Syncing (day-to-day)
Because configs are symlinks into the repo, **you almost never run `install.sh` to sync**:
- **Pull/propagate edits:** `cd ~/.dots && git pull` — changes are live in place instantly. No
re-stow, so **no symlink churn and no app reloads** (kitty etc. keep runtime state).
- **`bin/dotsync`** does this safely: `git pull`, then re-link via `install.sh` **only if** the pull
added/removed/renamed files (pure edits skip the re-stow). `dotsync -n` previews incoming changes.
- **`install.sh` is a (re)deploy tool, not a sync tool** — its `stow -R` deletes+recreates every
symlink, which is what makes apps reload. Only needed for the initial link or when files are
added/removed.
- **Never `stow` the repo root** (`stow .dots`, `stow */`) — it folds package dirs into `~` as stray
`~/common`, `~/gui`, … symlinks. `install.sh` only ever links package *contents*.
- **New host:** create a top-level `<name>/` package (at least a `host.fish`), commit, then
`./install.sh <name>` (naming it once records it — later runs and dotsync need no argument).
If it's terminal-only, skip the package and just `touch ~/.config/dots-headless` (it runs
`common` only).
## Tooling (`bin/`)
| Command | What it does |
|---|---|
| `./install.sh [host]` | Deploy `common → gui → <host>`. Host = arg, else `~/.config/dots-host`, else `hostname -s`; the resolved host is recorded there. Flags: `-n` dry-run, `-a` adopt (first run), `-D`/`--unstow` revert (remove this host's symlinks; repo + real files kept), `-h` help. Self-heals: headless hosts get any stray `gui` unstowed, a previously recorded host is released before re-deploying; fails loudly (exit 1) if a package couldn't stow. |
| `./bin/dotsync [-n\|host]` | Sync with least churn: `git pull`, re-stow only if files were added/removed (via `install.sh`, using the recorded host). |
| `./bin/reconcile-hyde.sh [-i\|--relink] [host]` | After a HyDE update overwrote `~/.config/hypr`, reconcile HyDE's new files against your dots versions (report / `-i` keep·take·merge each / `--relink` re-symlink). |
## How per-host differences are expressed
| Difference | Mechanism |
|---|---|
| Monitors | `<h>/.config/hypr/monitors.conf` (sourced by the shared `hyprland.conf`) |
| NVIDIA | `wm/.config/hypr/nvidia.conf`, pulled in by wm's `host.conf` (fl/lw have no NVIDIA) |
| Shell aliases | shared `config.fish` sources `~/.config/fish/host.fish` (per host) |
| Bash extras | shared `.bashrc` sources `~/.bashrc.host` (optional, per host) |
| fl's Hyprland | overrides ~9 hypr files (`hyprland.conf`, keybinds, windowrules, theme colors, monitors); inherits the rest from `gui` |
| Unique apps | in the owning host overlay (fl: llamacpp/evremap; lw: xremap) |
`aichat`, `pi`, and `opencode` share one config in `common` (LAN-first, with the cloud provider also
listed so any host can switch). `lw` carries a host overlay of all three that adds its local CPU
llama.cpp models — mirror edits between the common and `lw` copies. The opencode tree is documented
in `common/.config/opencode/README.md`.
## HyDE dependency (important for GUI hosts)
The Hyprland config is [HyDE](https://github.com/HyDE-Project/HyDE)-based. `gui/.config/hypr/*` is
your customization layer, but it **sources HyDE's framework**:
`source = ~/.local/share/hyde/hyprland.conf` — which defines `$mainMod` and other variables. So a GUI
host must have **HyDE installed**, or Hyprland fails to start (`source globbing error` +
`invalid mod $mainMod`).
That file used to be generated-and-untracked, but **HyDE 26.x deploys neither it nor `hyde.conf`**,
so since the 2026-08-14 audit both are **tracked pins** in `gui/.local/share/hyde/` — the one
deliberate exception to the generated-files-are-never-tracked rule below, interim until the Lua port.
After pulling that audit, a machine must run **`./bin/hyde-materialize.sh` before `./install.sh`**:
the newly-untracked files leave dangling stow symlinks otherwise, and hypr/hyprlock treat a missing
`source =` as a hard parse error.
- Install/update HyDE with its own installer (`~/HyDE/Scripts/install.sh`); it also pulls the
required apps (`xdg-desktop-portal-hyprland`, `xdg-desktop-portal-gtk`, `hyprpolkitagent`).
- HyDE's `-r`/restore overwrites `~/.config/hypr` — use **`bin/reconcile-hyde.sh`** afterward to fold
its new defaults back against your dots configs.
- **Wallpapers and generated themes are HyDE-owned, never in dots** (`**/hyde/themes/` and
`**/wallpapers/` are gitignored — they once bloated a source repo to 255 MB). A fresh machine gets
them from HyDE, not from this repo.
## Waybar (two worlds: HyDE-generated vs the standalone rig)
**HyDE owns `~/.config/waybar/config.jsonc` AND `style.css`** — its `waybar.py` *writes* both on
any `--set`/`--update`, **through the stow symlinks, i.e. into this repo's checkout**. So dots
track neither. HyDE-managed customization goes via:
- `gui/.config/waybar/layouts/*.jsonc` — dots-tracked layouts; switch with `hyde-shell waybar --set <name>`.
- `gui/.config/waybar/modules/*.jsonc` — module defs, globbed into the generated config.
**The custom cava rig is NOT HyDE-managed**: `layouts/custom.jsonc` + `layouts/custom.css` form a
self-contained two-bar config run by `wbar` (`gui/.local/bin/wbar`) as the supervised systemd
user unit `dots-waybar.service` (`Restart=always` — waybar 0.15.0 dies on every DP-2 link
drop/return, and as a bare process nothing relaunched it). The `exec-once` in `userprefs.conf`,
the Ctrl+Alt+W / Super+Shift+R binds and the `wbar` command all go through it; **never `killall
waybar`** — systemd brings it back in seconds and a raw relaunch beside it means two bars
(`wbar toggle|restart|reload|stop`). **Never route it through `hyde-shell waybar --set`** — waybar.py would clobber the repo's files as above. HyDE only reads
from `layouts/`, which is what makes them safe to track. On a rig host, HyDE's own bar must be
disabled once, or **two bars appear at every login** — and the launcher differs by HyDE vintage:
- current HyDE: systemd user unit `hyde-<XDG_SESSION_DESKTOP>-bar.service` (auto-restarting) —
`systemctl --user stop <unit>; systemctl --user mask <unit>`.
- older (pre-unit) HyDE, e.g. wm's: `exec-once = $start.BAR` in HyDE's generated `hyprland.conf`
— neutralized by `$start.BAR=` in `gui/.config/hypr/hyde.conf` (empty = unset; hyde.conf is
sourced before that exec-once). Current HyDE's `variables.conf` re-sets `$start.BAR`, so that
line stops working after an update — see HYDE-UPDATE.md step 4.
Note: the Arch `waybar` build has **no native `cava`** module — the rig uses the script module
`custom/cava` running `cava-waybar.sh` (self-contained, no HyDE dependency).
## Secrets
Never committed. Put `DUSKADIY_API_KEY` etc. in `~/.config/fish/conf.d/secrets.fish` (gitignored).
`pi`'s `auth.json` is **not** tracked — it only ever holds `$VAR` references, but pi's `/login`
rewrites it with the literal key, so one stray `/login` would commit a real token. A new host
bootstraps it with `cp common/.pi/agent/auth.json.example common/.pi/agent/auth.json`, then
`./install.sh`. Also gitignored: `fish_variables`,
`greet.txt`, pi agent runtime/state, `tmux/plugins/`, `.claude/` (Claude Code project dir/worktrees),
`*.bak`/`*.log`.
## Merge notes (history — the one-time unification)
The four former per-machine repos had drifted; the merge made some judgment calls:
- **`config.fish` / `.bashrc`** were hand-reconciled into a neutral shared base + per-host
`host.fish` / `.bashrc.host` (removed a committed `fnm_multishells` runtime PATH, stray
absolute home-dir paths, duplicate git aliases).
- **`pi` lives at `~/.pi`** (repo `.pi/`); **`tmux` at `~/.config/tmux/`** (delete a legacy
`~/.tmux.conf` if present after migrating).
- **Appearance drift was unified to one canonical** (mostly wm): bat, btop, cava, fastfetch, lazygit,
mpv, pyradio, waybar, zellij, most of nvim.
- **nvim** is shared entirely (no host overrides); plugin set / `lazy-lock.json` are shared — run
`:Lazy restore` per machine once (obeys the lockfile pins — `:Lazy update` on one machine +
commit is how versions move forward; other machines converge with `restore`).
- **`zellij`** is one shared config with **vim keybinds** (h/j/k/l) + the `guvbox-dark` theme.
- **`misc/{clis,tuis}.txt`** launcher inventories use wm's lists in `common`; a machine needing its
own can override in its overlay.
## Third-party content and licensing
The repo is GPL-3.0 (`LICENSE`). What that does and doesn't cover:
- **`hypr/`, `waybar/` and the other desktop configs are derived from
[HyDE](https://github.com/HyDE-Project/HyDE)** (and, further back, legacy Hyprdots). HyDE is
itself GPL-3.0, so the derivation and this repo's licence agree — no conflict, and the
Hyprdots-era ASCII banners in those files are left in place as attribution.
- **`common/.config/aichat/dark.tmTheme`** is *One Half Dark* by Son A. Pham, **MIT**. The
licence header at the top of that file is the attribution — don't strip it.
- **`common/.config/fastfetch/pngs/`** holds project and distro marks (Arch, the Open Source
Initiative and Open Source Hardware logos, …). Trademarks aren't relicensable, so GPL-3 does
not extend to them; they are bundled as nominative use, the way most dotfiles repos do.
- **`gui/.config/hypr/hyprlock/assets/`** — the lock screen background and logo. EXIF is
stripped, so the files carry no provenance; confirm these are yours to redistribute before
publishing, or swap them for something you know the origin of.
Executable
+98
View File
@@ -0,0 +1,98 @@
#!/usr/bin/env bash
# dotsync — sync dotfiles with the least churn.
#
# Deployed configs are symlinks into this repo, so `git pull` makes edits LIVE instantly
# with no re-stow — meaning no symlink churn and no app reloads (kitty etc. keep their
# runtime state). Re-stowing (install.sh) is only needed when files are ADDED / REMOVED,
# to create or prune symlinks. dotsync does the minimum: pull, and re-link ONLY if the
# pull added/removed/renamed files.
#
# dotsync pull, then relink only if the file set changed
# dotsync -n preview incoming changes (fetch only; no pull, no relink)
# dotsync <host> as above, forcing the host package (normally unnecessary: install.sh
# reuses the host recorded in ~/.config/dots-host)
set -uo pipefail
DOTS="$(cd "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")/.." && pwd)"
cd "$DOTS" || exit 1
if [ "${1:-}" = "-n" ] || [ "${1:-}" = "--dry-run" ]; then
git fetch -q 2>/dev/null || {
echo "fetch failed (offline?)"
exit 1
}
up="$(git rev-parse --abbrev-ref '@{u}' 2>/dev/null)" || {
echo "no upstream set"
exit 1
}
# rev-list, not diff: a plain diff also fires when the LOCAL side is ahead, mislabelling
# your own unpushed commits as incoming. Count commits that exist only on the upstream.
n="$(git rev-list --count "HEAD..$up")"
if [ "$n" -eq 0 ]; then echo "already up to date with $up."; else
echo "incoming from $up ($n commit(s)):"
git --no-pager diff --stat "HEAD...$up"
fi
exit 0
fi
before="$(git rev-parse HEAD)"
if ! git pull --ff-only; then
echo "pull not fast-forward (local commits or conflicts) — commit/stash, then retry." >&2
exit 1
fi
after="$(git rev-parse HEAD)"
if [ "$before" = "$after" ]; then
echo "already up to date — nothing to sync."
exit 0
fi
# Services that read config ONCE at startup don't pick up pulled edits — nudge loudly.
# (Symlinked edits are live for everything else; these are the exceptions that bit us.)
if git diff --name-only "$before" "$after" | grep -q '\.config/llamacpp/' \
&& systemctl cat llama.service &>/dev/null; then
echo ""
echo "⚠⚠ llamacpp presets changed — the router reads them only at startup. Apply with:"
echo " sudo systemctl restart llama.service"
echo ""
fi
# A unit file is read from /etc, not through the stow symlink — needs daemon-reload as well.
if git diff --name-only "$before" "$after" | grep -q '\.config/whisper/' \
&& systemctl cat whisper.service &>/dev/null; then
echo ""
echo "⚠⚠ whisper unit changed — apply with:"
echo " sudo systemctl daemon-reload && sudo systemctl restart whisper.service"
echo ""
fi
# Modified files (M) are live only through INTACT symlinks — a live file severed by an
# atomic rewrite (the recurring claude/settings.json class) swallows pulled edits silently,
# so verify that premise per modified file instead of assuming it. Added/Deleted/Renamed
# always need (un)linking. The diff is captured once, not piped into `grep -q`: its early
# exit can SIGPIPE git under pipefail and turn the whole condition falsely negative.
changes="$(git diff --name-status "$before" "$after")"
need_restow=""
if printf '%s\n' "$changes" | grep -qE '^(A|D|R)'; then
need_restow="files added/removed/renamed"
else
# map each modified repo path (package/.dotpath) to its live counterpart; a real file
# (not a symlink) sitting there means the pulled edit did NOT land
while IFS= read -r rel; do
live="$HOME/$rel"
if [ -e "$live" ] && [ ! -L "$live" ]; then
echo "note: ~/$rel is a real file, not a symlink into the repo — the pulled edit has NOT landed there."
need_restow="severed symlink(s)"
fi
done < <(printf '%s\n' "$changes" | awk -F'\t' '$1 ~ /^M/ && $2 ~ /^[^\/]+\/\./ { sub(/^[^\/]+\//, "", $2); print $2 }')
fi
if [ -n "$need_restow" ]; then
echo "$need_restow — re-linking via install.sh (this may reload some apps)…"
# Normally called with no argument, so install.sh resolves the host from ~/.config/dots-host —
# the one recorded by the last install.sh run here. That is exactly why the host must not be
# derived from `hostname -s`: this path is automatic and has nothing to pass. An explicit
# `dotsync <host>` is forwarded through for the rare override.
exec "$DOTS/install.sh" "$@"
else
echo "edits only — already live through the symlinks; no re-stow, no reload needed."
fi
+142
View File
@@ -0,0 +1,142 @@
#
# ~/.bashrc (shared; host-specific bits in ~/.bashrc.host)
#
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
# fzf's built-in walker ignores .ignore files; fd honours them. Mirrors config.fish.
export FZF_DEFAULT_COMMAND='fd --type f --strip-cwd-prefix'
alias grep='grep --color=auto'
alias fzf="fzf --preview 'bat --color=always {}'"
alias copy="wl-copy"
alias img="kitten icat"
alias fm="yazi"
alias lg="lazygit"
alias mkdir="mkdir -p"
alias pacs="sudo pacman -Syu --noconfirm"
alias yays="yay --noconfirm --sudoloop"
alias nmaps="sudo nmap -sn 192.168.0.0/24"
alias faillock="sudo faillock --reset"
alias xremaps="sudo xremap ~/.config/xremap/config.yml"
alias dots="cd ~/.dots/ && nvim"
alias aliases="bat ~/.config/fish/config.fish"
alias ipadd="sudo ip route add 192.168.0.234 dev wg0"
# List directory
alias l="ls -l"
alias la="ls -a"
alias lla="ls -la"
alias lt="ls --tree"
# Git
alias gs='git status'
alias gca='git add -p . && git commit'
alias gd="git diff --word-diff"
alias gl='git log --graph --show-signature'
alias gla="git log --all --decorate --oneline --graph"
alias gm='git merge'
alias exti=exit
alias cat="bat -p"
alias untar="tar -xf"
alias keybinds="cd ~/.dots/ && nvim gui/.config/hypr/keybindings.conf"
alias dmz="cat ~/.config/fish/dmz.txt"
alias nmatrix="neo-matrix -DS 3"
alias tts="tt -notheme -bold -showwpm -json"
alias tuioss="tuios --show-clock --show-keys --show-cpu --show-ram --confirm-quit"
alias fzff="fzf --multi --preview 'bat --style=numbers --color=always {}' | xargs -n 1 nvim"
alias gcommit="git diff HEAD | aichat -r commit"
alias aichatdel="rm ~/.config/aichat/sessions/*.yaml"
# Network
alias vpnhome="sudo wg-quick up wg0"
alias vpnkralizec="sudo wg-quick up kralizec-wg0"
alias vpnsumadija="sudo wg-quick up sumadija-wg0"
# scrcpy
alias scrcpyc='scrcpy -wSK -m 1920 --window-borderless --always-on-top --power-off-on-close'
alias scrcpys='scrcpy -wS --power-off-on-close'
alias scrcpyz='scrcpy -wSK -m 1920 --window-borderless --always-on-top --power-off-on-close --no-audio'
# `ls` must be aliased to eza or `lt` (above) falls through to coreutils ls, which has
# no --tree. bash re-expands the first word of an alias, so l/la/lla/lt all pick up eza.
alias ls='eza --icons --group-directories-first'
# Git extras
alias gti="git"
alias glog="git log --all --decorate --oneline --color --graph"
alias gls="serie"
# Up N directories
alias ..="cd .."
alias ...="cd ../.."
alias .3="cd ../../.."
alias .4="cd ../../../.."
alias .5="cd ../../../../.."
# Powerline prompt, synthwave palette (needs a Nerd Font for the glyphs)
PROMPT_DIRTRIM=3
__pl_sep=$'\ue0b0' # powerline triangle
__pl_branch=$'\ue0a0' # branch glyph
__pl_seg() { # $1=bg $2=fg $3=text (colors as "R;G;B")
[[ -n $__pl_bg ]] && PS1+="\[\e[38;2;${__pl_bg};48;2;${1}m\]${__pl_sep}\[\e[0m\]"
PS1+="\[\e[48;2;${1};38;2;${2}m\] ${3} \[\e[0m\]"
__pl_bg=$1
}
__pl_end() {
PS1+="\[\e[38;2;${__pl_bg}m\]${__pl_sep}\[\e[0m\] "
__pl_bg=''
}
__prompt() {
local s=$?
# muted synthwave: segment colors pre-blended ~40% onto the terminal bg
# (#262335) so they read as semi-transparent overlays
local fg='205;200;220'
local purple='67;56;93' green='65;107;99' yellow='114;100;67'
local red='124;39;52' pink='122;71;77'
PS1="\[\e]0;\w\a\]"
__pl_bg=''
[[ -n $SSH_TTY ]] && __pl_seg "$pink" "$fg" '\u@\h'
__pl_seg "$purple" "$fg" '\w'
local b
if b=$(git symbolic-ref --short HEAD 2>/dev/null || git describe --contains --all HEAD 2>/dev/null); then
if [[ -n $(git status --porcelain 2>/dev/null | head -n1) ]]; then
__pl_seg "$yellow" "$fg" "${__pl_branch} ${b} ✱"
else
__pl_seg "$green" "$fg" "${__pl_branch} ${b}"
fi
fi
((s != 0)) && __pl_seg "$red" "$fg" "✘ ${s}"
[[ $EUID == 0 ]] && __pl_seg "$red" "$fg" '#'
__pl_end
}
PROMPT_COMMAND=__prompt
set -o vi
# eval "$(zoxide init --cmd cd bash)"
# colorized --help
h() { "$@" --help 2>&1 | bat --plain --language=help; }
# Record lookup against the local dmz db (adjust the db path to this machine)
lk(){
local DB="$HOME/projects/dmz/soft/lk/db.rec"
passes=0 count=0; until [ "$count" -eq "1" ] || [ "$passes" -gt 2 ] ; do \
query="$(recsel "$DB" -p aim,tag | recsel -iq "$query" -CP aim,tag | sort -u | fzf --preview="recsel \"$DB\" -e \"aim~{}\"")" \
&& count="$(recsel "$DB" -q "$query" -c )" ;\
passes=$(( passes + 1 )) ;\
done \
&& recsel "$DB" -q "$query" | recfmt -f "$HOME/projects/dmz/soft/lk/lists.fmt" | less
}
# Keepassxc search
kp() {
local DB="${KP_DB:?Error: KP_DB environment variable is not set. Check .bash_profile.}"
read -sp "Enter db password: " pass; echo ""; printf '%s\n' "$pass" | keepassxc-cli ls -q -R "$DB" | fzf | (read -r entry; printf '%s\n' "$pass" | keepassxc-cli clip -q "$DB" "$entry" 0)
}
# Per-host extras
[ -f ~/.bashrc.host ] && . ~/.bashrc.host
+66
View File
@@ -0,0 +1,66 @@
# NOTE: the lw/ and wm/ host overlays carry full-file copies of this config — mirror changes there.
# see https://github.com/sigoden/aichat/blob/main/config.example.yaml
keybindings: vi
editor: nvim
model: local:Qwen3.6-35B-A3B-Thinking
# Sessions: persist REPL sessions and keep more history before summarizing.
# The default compress_threshold (4000) summarizes far too early for 24k+ windows.
save_session: true
compress_threshold: 16000
# REPL prompts show live context usage (needs max_input_tokens, set per model below)
left_prompt: '{color.green}{?session {session}{?role /}}{role}{color.cyan}{?rag @{rag}}{color.reset}> '
right_prompt: '{color.purple}{?session {consume_tokens}/{max_input_tokens} }{color.reset}'
# NOTE: temperature/top_p are intentionally unset — the LAN server applies tuned
# per-model sampling via --jinja (e.g. GLM 0.6/0.95); a global value would clobber it.
# max_input_tokens = real ctx-size (from the router) minus output headroom.
clients:
# LAN access (fast; only reachable on the home network)
- type: openai-compatible
name: local
api_base: http://192.168.0.204:11343/v1
models: &lan_models
# Speeds are benched decode t/s (clean-night sweeps) — see fl/.config/llamacpp/README.md roster.
- name: Qwen3-Coder-30B-Instruct-UD-Q3_K_XL
max_input_tokens: 30000 # ctx 32768 · ~30 t/s — main agent coder
- name: Qwen3-Coder-Next-UD-IQ3_XXS
max_input_tokens: 128000 # ctx 131072 · ~16 t/s — long sessions (128k)
- name: Qwen3.6-35B-A3B-MTP-UD-IQ3_XXS
max_input_tokens: 22000 # ctx 24576 · ~36 t/s — daily driver
supports_vision: true
- name: Qwen3.6-35B-A3B-Thinking
max_input_tokens: 22000 # ctx 24576 · ~39 t/s — hard problems
supports_vision: true
- name: Qwen3.5-9B-UD-Q6_K_XL
max_input_tokens: 30000 # ctx 32768 · ~32 t/s — quick tasks
supports_vision: true
- name: Qwen3.8-27B-UD-IQ3_XXS
max_input_tokens: 22000 # ctx 24576 · ~15 t/s — hybrid reasoner, quiet desktop only
supports_vision: true
- name: gemma-4-26B-A4B-it-UD-IQ4_XS
max_input_tokens: 22000 # ctx 24576 · ~34 t/s — quality generalist, best vision
supports_vision: true
- name: gemma-4-E4B-it-UD-Q8_K_XL
max_input_tokens: 62000 # ctx 65536 · ~57 t/s — fast generalist, long docs
supports_vision: true
- name: GLM-4.7-Flash-UD-Q4_K_XL
max_input_tokens: 22000 # ctx 24576 · ~21 t/s — quality coder
- name: GLM-4.7-Flash-UD-Q3_K_XL
max_input_tokens: 22000 # ctx 24576 · ~28 t/s — fast coder (3-bit)
- name: Ornith-1.5-35B-A3B-IQ3_XXS
max_input_tokens: 22000 # ctx 24576 · ~32 t/s — agentic coder, thinking
supports_vision: true
- name: gpt-oss-20b
max_input_tokens: 62000 # ctx 65536 · ~38 t/s — fast reasoning + tools
- name: gpt-oss-20b-low
max_input_tokens: 62000 # ctx 65536 · ~37 t/s — snappy answers
# Remote access via duskadiy.com (reachable from anywhere; requires an API key —
# $DUSKADIY_API_KEY, from the gitignored conf.d/secrets.fish). The LAN endpoint above is keyless.
# Same server, same model ids — reuse the list above via a YAML anchor.
- type: openai-compatible
name: duskadiy
api_base: https://llm.duskadiy.com/api/v1
models: *lan_models
Loaded 100 of 386 files, more files were not shown because too many files have changed in this diff. Show more