mirror of
https://github.com/bgrolleman/dotfiles.git
synced 2026-08-09 12:41:43 +02:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f6643fd8e | ||
|
|
772c26f0b1 | ||
|
|
35349a426d |
@@ -0,0 +1,64 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## What This Repo Is
|
||||||
|
|
||||||
|
Personal dotfiles for a Linux desktop, currently running **Niri** (Wayland compositor) with **Noctalia** as the desktop shell. There are legacy X11 configs (i3, polybar, picom) that are no longer the primary setup.
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
Configs are deployed by symlinking into `~/.config/` and `~/.profile`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash ~/.dotfiles/setup.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
The script is idempotent — it skips links that already exist. After adding a new top-level config directory, add a `configlink <dirname>` line to `setup.sh`.
|
||||||
|
|
||||||
|
## Installing Desktop Applications
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ansible.desktop
|
||||||
|
./install-desktop-toolsontech.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
This installs ansible if missing, then runs the playbook. Tasks are split by category in `ansible.desktop/tasks/`.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
### Niri (Wayland compositor)
|
||||||
|
`niri/config.kdl` is just includes — the real config lives in `niri/cfg/`:
|
||||||
|
- `input.kdl` — keyboard/mouse/touchpad settings
|
||||||
|
- `keybinds.kdl` — all keybindings
|
||||||
|
- `layout.kdl` — gaps, border, window sizing
|
||||||
|
- `display.kdl` — monitor layout and scaling
|
||||||
|
- `autostart.kdl` — apps launched on compositor start
|
||||||
|
- `rules.kdl` — window-specific rules
|
||||||
|
- `animation.kdl`, `misc.kdl` — tweaks
|
||||||
|
|
||||||
|
Edit the relevant split file, not `config.kdl` itself.
|
||||||
|
|
||||||
|
### Noctalia (desktop shell / bar)
|
||||||
|
All settings live in `noctalia/settings.json` (JSON, edited by the Noctalia GUI or directly). Colorschemes are in `noctalia/colorschemes/` and plugins in `noctalia/plugins/`.
|
||||||
|
|
||||||
|
### Neovim
|
||||||
|
Uses **LazyVIM** framework. Entry point is `nvim/init.lua` which bootstraps lazy.nvim via `nvim/lua/config/lazy.lua`.
|
||||||
|
|
||||||
|
- `nvim/lua/config/` — core config (options, keymaps, autocmds)
|
||||||
|
- `nvim/lua/plugins/` — plugin overrides/additions on top of LazyVIM defaults
|
||||||
|
- `nvim/lua/colorschemes/` — colorscheme configs
|
||||||
|
|
||||||
|
LazyVIM handles most plugin management; only deviations from LazyVIM defaults need entries in `lua/plugins/`.
|
||||||
|
|
||||||
|
### tmux
|
||||||
|
`tmux/tmux.conf` + catppuccin theme as a git submodule at `tmux/plugins/catppuccin/tmux`. After cloning, initialize the submodule:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git submodule update --init
|
||||||
|
```
|
||||||
|
|
||||||
|
### Shell / profile
|
||||||
|
`profile` is symlinked to `~/.profile`. It sets up SSH keys via `keychain` and defines the `notes` alias (attaches/creates a tmux session with nvim opening `~/Notes/Personal`).
|
||||||
|
|
||||||
|
`zoxide.bash` provides shell integration for zoxide (directory jumping) — sourced separately, not via `profile`.
|
||||||
+1
-1
@@ -12,7 +12,7 @@ input {
|
|||||||
}
|
}
|
||||||
|
|
||||||
touchpad {
|
touchpad {
|
||||||
//tap // Enable tap-to-click
|
tap // Enable tap-to-click
|
||||||
dwt
|
dwt
|
||||||
scroll-method "two-finger"
|
scroll-method "two-finger"
|
||||||
tap-button-map "left-right-middle"
|
tap-button-map "left-right-middle"
|
||||||
|
|||||||
@@ -13,8 +13,12 @@ binds {
|
|||||||
|
|
||||||
// ─── Applications ───
|
// ─── Applications ───
|
||||||
Alt+Return hotkey-overlay-title="Open Terminal: Alacritty" { spawn "alacritty"; }
|
Alt+Return hotkey-overlay-title="Open Terminal: Alacritty" { spawn "alacritty"; }
|
||||||
|
Mod+G hotkey-overlay-title="Focus: Gmail" { spawn-sh "$HOME/.config/niri/focus-or-launch.sh chrome-fmgjjmmmlfnkbppncabfkddbjimcfncm-Default /opt/helium-browser-bin/helium-wrapper --profile-directory=Default --app-id=fmgjjmmmlfnkbppncabfkddbjimcfncm"; }
|
||||||
|
Mod+W hotkey-overlay-title="Focus: WhatsApp" { spawn-sh "$HOME/.config/niri/focus-or-launch.sh chrome-hnpfjngllnobngcgfapefoaidbinmjnm-Default /opt/helium-browser-bin/helium-wrapper --profile-directory=Default --app-id=hnpfjngllnobngcgfapefoaidbinmjnm"; }
|
||||||
|
Mod+D hotkey-overlay-title="Focus: Todoist" { spawn-sh "$HOME/.config/niri/focus-or-launch.sh chrome-dlgohinmglaoopaiplliaecdpmnepmga-Default /opt/helium-browser-bin/helium-wrapper --profile-directory=Default --app-id=dlgohinmglaoopaiplliaecdpmnepmga"; }
|
||||||
//Mod+CTRL+Return hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; }
|
//Mod+CTRL+Return hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; }
|
||||||
Alt+Space hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; }
|
Alt+Space hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; }
|
||||||
|
Alt+Shift+Space hotkey-overlay-title="Open Window Search: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher windows"; }
|
||||||
Mod+B hotkey-overlay-title="Open Browser: helium" { spawn "helium-browser"; }
|
Mod+B hotkey-overlay-title="Open Browser: helium" { spawn "helium-browser"; }
|
||||||
Mod+L hotkey-overlay-title="Lock Screen: noctalia lock" { spawn-sh "qs -c noctalia-shell ipc call lockScreen lock"; }
|
Mod+L hotkey-overlay-title="Lock Screen: noctalia lock" { spawn-sh "qs -c noctalia-shell ipc call lockScreen lock"; }
|
||||||
Mod+Shift+Q hotkey-overlay-title="Session Menu: noctalia sessionMenu" { spawn-sh "qs -c noctalia-shell ipc call sessionMenu toggle"; }
|
Mod+Shift+Q hotkey-overlay-title="Session Menu: noctalia sessionMenu" { spawn-sh "qs -c noctalia-shell ipc call sessionMenu toggle"; }
|
||||||
@@ -132,7 +136,6 @@ binds {
|
|||||||
// ─── Modes ───
|
// ─── Modes ───
|
||||||
Mod+T { toggle-window-floating; }
|
Mod+T { toggle-window-floating; }
|
||||||
Mod+F { fullscreen-window; }
|
Mod+F { fullscreen-window; }
|
||||||
Mod+W { toggle-column-tabbed-display; }
|
|
||||||
|
|
||||||
// ─── Screenshots ───
|
// ─── Screenshots ───
|
||||||
CTRL+Shift+1 { screenshot; }
|
CTRL+Shift+1 { screenshot; }
|
||||||
|
|||||||
+3
-1
@@ -5,7 +5,9 @@
|
|||||||
background-color "transparent" // <- needed for noctalia-shell to set wallpaper
|
background-color "transparent" // <- needed for noctalia-shell to set wallpaper
|
||||||
|
|
||||||
//default-column-width { proportion 0.95; }
|
//default-column-width { proportion 0.95; }
|
||||||
default-column-width { proportion 0.40; }
|
//default-column-width { proportion 0.40; }
|
||||||
|
//default-column-width {}
|
||||||
|
default-column-width { fixed 1200; }
|
||||||
|
|
||||||
preset-column-widths {
|
preset-column-widths {
|
||||||
proportion 0.33333
|
proportion 0.33333
|
||||||
|
|||||||
Executable
+25
@@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Focus an existing window by app-id, or launch it if not found.
|
||||||
|
# If the target window is already focused, return to the previous window.
|
||||||
|
# Usage: focus-or-launch.sh <app-id> <launch-command...>
|
||||||
|
APP_ID="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
WINDOWS=$(niri msg -j windows)
|
||||||
|
FOCUSED_ID=$(echo "$WINDOWS" | jq -r '.[] | select(.is_focused == true) | .id')
|
||||||
|
TARGET_ID=$(echo "$WINDOWS" | jq -r --arg app "$APP_ID" '.[] | select(.app_id == $app) | .id' | head -1)
|
||||||
|
|
||||||
|
PREV_FILE="/tmp/niri-focus-prev-${APP_ID}"
|
||||||
|
|
||||||
|
if [ "$FOCUSED_ID" = "$TARGET_ID" ]; then
|
||||||
|
if [ -f "$PREV_FILE" ]; then
|
||||||
|
niri msg action focus-window --id "$(cat "$PREV_FILE")" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$FOCUSED_ID" > "$PREV_FILE"
|
||||||
|
if [ -n "$TARGET_ID" ]; then
|
||||||
|
niri msg action focus-window --id "$TARGET_ID"
|
||||||
|
else
|
||||||
|
exec "$@"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
@@ -347,17 +347,17 @@
|
|||||||
"indicatorThickness": 3,
|
"indicatorThickness": 3,
|
||||||
"launcherIcon": "",
|
"launcherIcon": "",
|
||||||
"launcherIconColor": "none",
|
"launcherIconColor": "none",
|
||||||
"launcherPosition": "end",
|
"launcherPosition": "start",
|
||||||
"launcherUseDistroLogo": false,
|
"launcherUseDistroLogo": true,
|
||||||
"monitors": [
|
"monitors": [
|
||||||
],
|
],
|
||||||
"onlySameOutput": true,
|
"onlySameOutput": true,
|
||||||
"pinnedApps": [
|
"pinnedApps": [
|
||||||
],
|
],
|
||||||
"pinnedStatic": false,
|
"pinnedStatic": true,
|
||||||
"position": "bottom",
|
"position": "left",
|
||||||
"showDockIndicator": true,
|
"showDockIndicator": true,
|
||||||
"showLauncherIcon": false,
|
"showLauncherIcon": true,
|
||||||
"sitOnFrame": false,
|
"sitOnFrame": false,
|
||||||
"size": 1
|
"size": 1
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user