mirror of
https://github.com/bgrolleman/dotfiles.git
synced 2026-08-09 12:41:43 +02:00
Compare commits
7
Commits
4f6643fd8e
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be54b6b0ec | ||
|
|
f52815cc65 | ||
|
|
0835211ae9 | ||
|
|
865a1923f5 | ||
|
|
279ca4a247 | ||
|
|
726ad9df73 | ||
|
|
09b08492ba |
@@ -0,0 +1,68 @@
|
|||||||
|
{
|
||||||
|
"permissions": {
|
||||||
|
"defaultMode": "auto"
|
||||||
|
},
|
||||||
|
"hooks": {
|
||||||
|
"Stop": [
|
||||||
|
{
|
||||||
|
"hooks": [
|
||||||
|
{
|
||||||
|
"type": "command",
|
||||||
|
"command": "notify-send 'Claude' 'Task complete' --icon=dialog-information 2>/dev/null || true"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Notification": [
|
||||||
|
{
|
||||||
|
"hooks": [
|
||||||
|
{
|
||||||
|
"type": "command",
|
||||||
|
"command": "msg=$(jq -r '.message // \"Needs your input\"' 2>/dev/null || echo 'Needs your input'); notify-send 'Claude needs input' \"$msg\" --icon=dialog-question 2>/dev/null || true"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"statusLine": {
|
||||||
|
"type": "command",
|
||||||
|
"command": "bash \"/home/bgrolleman/.claude/statusline-command.sh\""
|
||||||
|
},
|
||||||
|
"enabledPlugins": {
|
||||||
|
"frontend-design@claude-plugins-official": true,
|
||||||
|
"lua-lsp@claude-plugins-official": true,
|
||||||
|
"ponytail@ponytail": true
|
||||||
|
},
|
||||||
|
"extraKnownMarketplaces": {
|
||||||
|
"ponytail": {
|
||||||
|
"source": {
|
||||||
|
"source": "github",
|
||||||
|
"repo": "DietrichGebert/ponytail"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"caveman": {
|
||||||
|
"source": {
|
||||||
|
"source": "github",
|
||||||
|
"repo": "juliusbrussee/caveman"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"effortLevel": "high",
|
||||||
|
"advisorModel": "opus",
|
||||||
|
"voice": {
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "hold"
|
||||||
|
},
|
||||||
|
"theme": "dark",
|
||||||
|
"agentPushNotifEnabled": true,
|
||||||
|
"skipAutoPermissionPrompt": true,
|
||||||
|
"voiceEnabled": true,
|
||||||
|
"mcpServers": {
|
||||||
|
"comfyui-image-gen": {
|
||||||
|
"command": "/home/bgrolleman/Project/ComfyUI/.venv/bin/python",
|
||||||
|
"args": [
|
||||||
|
"/home/bgrolleman/Project/ComfyUI/mcp_server.py"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Claude Code status line
|
||||||
|
# Shows: model display name, a progress bar for context-window tokens
|
||||||
|
# remaining in this session, current git branch, active subagent (if any),
|
||||||
|
# and enabled plugins (read from ~/.claude/settings.json).
|
||||||
|
|
||||||
|
input=$(cat)
|
||||||
|
|
||||||
|
model=$(echo "$input" | jq -r '.model.display_name // "unknown"')
|
||||||
|
cwd=$(echo "$input" | jq -r '.workspace.current_dir // empty')
|
||||||
|
remaining=$(echo "$input" | jq -r '.context_window.remaining_percentage // empty')
|
||||||
|
agent_name=$(echo "$input" | jq -r '.agent.name // empty')
|
||||||
|
|
||||||
|
# --- Colors (kept modest; Claude Code renders the status line dimmed) ---
|
||||||
|
c_model='\033[36m' # cyan
|
||||||
|
c_bar='\033[32m' # green
|
||||||
|
c_branch='\033[33m' # yellow
|
||||||
|
c_agent='\033[35m' # magenta
|
||||||
|
c_plugin='\033[34m' # blue
|
||||||
|
c_reset='\033[0m'
|
||||||
|
|
||||||
|
# --- Git branch (skip optional locks; silent if not a repo) ---
|
||||||
|
branch=""
|
||||||
|
if [ -n "$cwd" ]; then
|
||||||
|
branch=$(git --no-optional-locks -C "$cwd" branch --show-current 2>/dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Enabled plugins, read from settings.json (not present on stdin) ---
|
||||||
|
settings_file="$HOME/.claude/settings.json"
|
||||||
|
plugins=""
|
||||||
|
if [ -f "$settings_file" ]; then
|
||||||
|
plugins=$(jq -r '.enabledPlugins // {} | to_entries[] | select(.value == true) | .key | split("@")[0]' "$settings_file" 2>/dev/null | paste -sd, -)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Context-window remaining-tokens progress bar ---
|
||||||
|
bar=""
|
||||||
|
if [ -n "$remaining" ]; then
|
||||||
|
pct=${remaining%.*}
|
||||||
|
[ -z "$pct" ] && pct=0
|
||||||
|
[ "$pct" -lt 0 ] 2>/dev/null && pct=0
|
||||||
|
[ "$pct" -gt 100 ] 2>/dev/null && pct=100
|
||||||
|
total_blocks=10
|
||||||
|
filled=$(( pct * total_blocks / 100 ))
|
||||||
|
[ "$filled" -gt "$total_blocks" ] && filled=$total_blocks
|
||||||
|
[ "$filled" -lt 0 ] && filled=0
|
||||||
|
empty=$(( total_blocks - filled ))
|
||||||
|
bar="["
|
||||||
|
i=0
|
||||||
|
while [ "$i" -lt "$filled" ]; do bar="${bar}█"; i=$((i + 1)); done
|
||||||
|
i=0
|
||||||
|
while [ "$i" -lt "$empty" ]; do bar="${bar}░"; i=$((i + 1)); done
|
||||||
|
bar="${bar}] ${pct}% left"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Assemble the status line ---
|
||||||
|
printf "${c_model}%s${c_reset}" "$model"
|
||||||
|
|
||||||
|
if [ -n "$bar" ]; then
|
||||||
|
printf " ${c_bar}%s${c_reset}" "$bar"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$branch" ]; then
|
||||||
|
printf " ${c_branch}git:%s${c_reset}" "$branch"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$agent_name" ]; then
|
||||||
|
printf " ${c_agent}agent:%s${c_reset}" "$agent_name"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$plugins" ]; then
|
||||||
|
printf " ${c_plugin}plugins:%s${c_reset}" "$plugins"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '\n'
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Start keychain and source SSH agent variables for all private keys in ~/.ssh
|
||||||
|
if status is-interactive
|
||||||
|
if type -q keychain
|
||||||
|
set -l _ssh_keys
|
||||||
|
for _pub in ~/.ssh/*.pub
|
||||||
|
set -l _key (string replace -r '\.pub$' '' $_pub)
|
||||||
|
if test -f $_key
|
||||||
|
set -a _ssh_keys $_key
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if test (count $_ssh_keys) -gt 0
|
||||||
|
keychain --eval --quiet $_ssh_keys | source
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# Machine-specific config (secrets, local overrides) — not tracked in dotfiles
|
||||||
|
if test -f ~/.config/fish/local.fish
|
||||||
|
source ~/.config/fish/local.fish
|
||||||
|
end
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
profile ultrawide-hdmi {
|
||||||
|
output "DP-1" mode 5120x1440 position 0,0 scale 1
|
||||||
|
output "HDMI-A-1" mode 1920x1080 position 1600,1440 scale 1
|
||||||
|
}
|
||||||
|
|
||||||
|
profile ultrawide {
|
||||||
|
output "DP-1" mode 5120x1440 position 0,0 scale 1
|
||||||
|
}
|
||||||
@@ -2,3 +2,4 @@
|
|||||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Miscellaneous#spawn-sh-at-startup
|
// https://github.com/YaLTeR/niri/wiki/Configuration:-Miscellaneous#spawn-sh-at-startup
|
||||||
|
|
||||||
spawn-sh-at-startup "qs -c noctalia-shell"
|
spawn-sh-at-startup "qs -c noctalia-shell"
|
||||||
|
spawn-at-startup "kanshi"
|
||||||
|
|||||||
+13
-13
@@ -9,7 +9,7 @@ binds {
|
|||||||
//Mod+Shift+ESCAPE { show-hotkey-overlay; }
|
//Mod+Shift+ESCAPE { show-hotkey-overlay; }
|
||||||
|
|
||||||
Mod+h { show-hotkey-overlay; }
|
Mod+h { show-hotkey-overlay; }
|
||||||
Mod+Shift+S { spawn-sh "flameshot gui"; }
|
Mod+Shift+S { spawn-sh "grim -g \"$(slurp)\" - | satty --filename - -o ~/Pictures/Screenshots/satty-%Y%m%d-%H%M%S.png --copy-command wl-copy --actions-on-enter save-to-clipboard --save-after-copy"; }
|
||||||
|
|
||||||
// ─── Applications ───
|
// ─── Applications ───
|
||||||
Alt+Return hotkey-overlay-title="Open Terminal: Alacritty" { spawn "alacritty"; }
|
Alt+Return hotkey-overlay-title="Open Terminal: Alacritty" { spawn "alacritty"; }
|
||||||
@@ -102,22 +102,22 @@ binds {
|
|||||||
// Mod+CTRL+Shift+WheelScrollDown { move-column-right; }
|
// Mod+CTRL+Shift+WheelScrollDown { move-column-right; }
|
||||||
// Mod+CTRL+Shift+WheelScrollUp { move-column-left; }
|
// Mod+CTRL+Shift+WheelScrollUp { move-column-left; }
|
||||||
|
|
||||||
Alt+1 { focus-workspace 1; }
|
Alt+1 { focus-workspace "1"; }
|
||||||
Alt+2 { focus-workspace 2; }
|
Alt+2 { focus-workspace "2"; }
|
||||||
Alt+3 { focus-workspace 3; }
|
Alt+3 { focus-workspace "3"; }
|
||||||
Alt+4 { focus-workspace 4; }
|
Alt+4 { focus-workspace "4"; }
|
||||||
Alt+5 { focus-workspace 5; }
|
Alt+5 { focus-workspace "5"; }
|
||||||
Alt+6 { focus-workspace 6; }
|
Alt+6 { focus-workspace "6"; }
|
||||||
Alt+7 { focus-workspace 7; }
|
Alt+7 { focus-workspace 7; }
|
||||||
Alt+8 { focus-workspace 8; }
|
Alt+8 { focus-workspace 8; }
|
||||||
Alt+9 { focus-workspace 9; }
|
Alt+9 { focus-workspace 9; }
|
||||||
|
|
||||||
Alt+Shift+1 { move-column-to-workspace 1; }
|
Alt+Shift+1 { move-column-to-workspace "1"; }
|
||||||
Alt+Shift+2 { move-column-to-workspace 2; }
|
Alt+Shift+2 { move-column-to-workspace "2"; }
|
||||||
Alt+Shift+3 { move-column-to-workspace 3; }
|
Alt+Shift+3 { move-column-to-workspace "3"; }
|
||||||
Alt+Shift+4 { move-column-to-workspace 4; }
|
Alt+Shift+4 { move-column-to-workspace "4"; }
|
||||||
Alt+Shift+5 { move-column-to-workspace 5; }
|
Alt+Shift+5 { move-column-to-workspace "5"; }
|
||||||
Alt+Shift+6 { move-column-to-workspace 6; }
|
Alt+Shift+6 { move-column-to-workspace "6"; }
|
||||||
Alt+Shift+7 { move-column-to-workspace 7; }
|
Alt+Shift+7 { move-column-to-workspace 7; }
|
||||||
Alt+Shift+8 { move-column-to-workspace 8; }
|
Alt+Shift+8 { move-column-to-workspace 8; }
|
||||||
Alt+Shift+9 { move-column-to-workspace 9; }
|
Alt+Shift+9 { move-column-to-workspace 9; }
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
workspace "1" {
|
||||||
|
open-on-output "DP-1"
|
||||||
|
}
|
||||||
|
workspace "2" {
|
||||||
|
open-on-output "DP-1"
|
||||||
|
}
|
||||||
|
workspace "3" {
|
||||||
|
open-on-output "DP-1"
|
||||||
|
}
|
||||||
|
workspace "4" {
|
||||||
|
open-on-output "DP-1"
|
||||||
|
}
|
||||||
|
workspace "5" {
|
||||||
|
open-on-output "DP-1"
|
||||||
|
}
|
||||||
|
workspace "6" {
|
||||||
|
open-on-output "HDMI-A-1"
|
||||||
|
}
|
||||||
@@ -6,3 +6,4 @@ include "./cfg/display.kdl"
|
|||||||
include "./cfg/layout.kdl"
|
include "./cfg/layout.kdl"
|
||||||
include "./cfg/rules.kdl"
|
include "./cfg/rules.kdl"
|
||||||
include "./cfg/misc.kdl"
|
include "./cfg/misc.kdl"
|
||||||
|
include "./cfg/workspaces.kdl"
|
||||||
|
|||||||
+17
-4
@@ -60,6 +60,7 @@
|
|||||||
"middleClickCommand": "",
|
"middleClickCommand": "",
|
||||||
"middleClickFollowMouse": false,
|
"middleClickFollowMouse": false,
|
||||||
"monitors": [
|
"monitors": [
|
||||||
|
"DP-1"
|
||||||
],
|
],
|
||||||
"mouseWheelAction": "none",
|
"mouseWheelAction": "none",
|
||||||
"mouseWheelWrap": true,
|
"mouseWheelWrap": true,
|
||||||
@@ -149,7 +150,7 @@
|
|||||||
"hideUnoccupied": false,
|
"hideUnoccupied": false,
|
||||||
"iconScale": 0.8,
|
"iconScale": 0.8,
|
||||||
"id": "Workspace",
|
"id": "Workspace",
|
||||||
"labelMode": "index",
|
"labelMode": "name",
|
||||||
"occupiedColor": "secondary",
|
"occupiedColor": "secondary",
|
||||||
"pillSize": 0.6,
|
"pillSize": 0.6,
|
||||||
"showApplications": false,
|
"showApplications": false,
|
||||||
@@ -182,6 +183,18 @@
|
|||||||
"pinned": [
|
"pinned": [
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"displayMode": "onhover",
|
||||||
|
"iconColor": "none",
|
||||||
|
"id": "Network",
|
||||||
|
"textColor": "none"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"displayMode": "onhover",
|
||||||
|
"iconColor": "none",
|
||||||
|
"id": "Bluetooth",
|
||||||
|
"textColor": "none"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"hideWhenZero": false,
|
"hideWhenZero": false,
|
||||||
"hideWhenZeroUnread": false,
|
"hideWhenZeroUnread": false,
|
||||||
@@ -341,7 +354,7 @@
|
|||||||
"groupClickAction": "cycle",
|
"groupClickAction": "cycle",
|
||||||
"groupContextMenuMode": "extended",
|
"groupContextMenuMode": "extended",
|
||||||
"groupIndicatorStyle": "dots",
|
"groupIndicatorStyle": "dots",
|
||||||
"inactiveIndicators": false,
|
"inactiveIndicators": true,
|
||||||
"indicatorColor": "primary",
|
"indicatorColor": "primary",
|
||||||
"indicatorOpacity": 0.6,
|
"indicatorOpacity": 0.6,
|
||||||
"indicatorThickness": 3,
|
"indicatorThickness": 3,
|
||||||
@@ -475,8 +488,8 @@
|
|||||||
"bluetoothRssiPollIntervalMs": 60000,
|
"bluetoothRssiPollIntervalMs": 60000,
|
||||||
"bluetoothRssiPollingEnabled": false,
|
"bluetoothRssiPollingEnabled": false,
|
||||||
"disableDiscoverability": false,
|
"disableDiscoverability": false,
|
||||||
"networkPanelView": "wifi",
|
"networkPanelView": "ethernet",
|
||||||
"wifiDetailsViewMode": "grid"
|
"wifiDetailsViewMode": "list"
|
||||||
},
|
},
|
||||||
"nightLight": {
|
"nightLight": {
|
||||||
"autoSchedule": true,
|
"autoSchedule": true,
|
||||||
|
|||||||
@@ -14,6 +14,20 @@ link() {
|
|||||||
ln -s "$2" "$1"
|
ln -s "$2" "$1"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
# Like link(), but backs up existing regular files instead of skipping them
|
||||||
|
smartlink() {
|
||||||
|
local target="$1" source="$2"
|
||||||
|
echo "Linking $target to $source"
|
||||||
|
if [ -L "$target" ]; then
|
||||||
|
: # already a symlink, nothing to do
|
||||||
|
elif [ -e "$target" ]; then
|
||||||
|
mv "$target" "${target}.bak"
|
||||||
|
echo " Backed up existing file to ${target}.bak"
|
||||||
|
ln -s "$source" "$target"
|
||||||
|
else
|
||||||
|
ln -s "$source" "$target"
|
||||||
|
fi
|
||||||
|
}
|
||||||
configlink() {
|
configlink() {
|
||||||
link ~/.config/$1 ~/.dotfiles/$1
|
link ~/.config/$1 ~/.dotfiles/$1
|
||||||
}
|
}
|
||||||
@@ -29,3 +43,20 @@ configlink polybar
|
|||||||
configlink picom.conf
|
configlink picom.conf
|
||||||
configlink niri
|
configlink niri
|
||||||
configlink noctalia
|
configlink noctalia
|
||||||
|
configlink kanshi
|
||||||
|
|
||||||
|
checkdir ~/.claude
|
||||||
|
link ~/.claude/settings.json ~/.dotfiles/claude/settings.json
|
||||||
|
|
||||||
|
# Fish shell config
|
||||||
|
checkdir ~/.config/fish
|
||||||
|
checkdir ~/.config/fish/conf.d
|
||||||
|
smartlink ~/.config/fish/config.fish ~/.dotfiles/fish/config.fish
|
||||||
|
link ~/.config/fish/conf.d/ssh-keychain.fish ~/.dotfiles/fish/conf.d/ssh-keychain.fish
|
||||||
|
|
||||||
|
# Migrate BW_SESSION and other machine-specific fish vars to local.fish
|
||||||
|
if [ -f ~/.config/fish/config.fish.bak ] && [ ! -f ~/.config/fish/local.fish ]; then
|
||||||
|
echo " Migrating machine-specific config from config.fish.bak to local.fish"
|
||||||
|
grep -v '^#' ~/.config/fish/config.fish.bak | grep -v '^\s*$' > ~/.config/fish/local.fish
|
||||||
|
echo " Review ~/.config/fish/local.fish and remove anything now handled by dotfiles"
|
||||||
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user