Compare commits

..
Author SHA1 Message Date
bgrollemanandClaude Sonnet 4.6 986c4aaac4 Replace flameshot with grim/satty/slurp for Wayland screenshot tooling
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 11:24:36 +02:00
bgrolleman 9a6031f44c Add auto lock/sleep to niri 2026-06-03 07:39:55 +02:00
bgrolleman 73aa712074 Cleanup nvim with Claude 2026-06-03 07:39:39 +02:00
51 changed files with 225 additions and 2282 deletions

No files matched your search

-20
View File
@@ -1,20 +0,0 @@
# Changelog
## 2026-10-10 (cleanup)
- Niri: floating windows open bottom-left by default; Picture-in-picture floats at a fixed offset.
- Noctalia v4 `settings.json`: move workspaces and system monitor to the right, add taskbar, enable idle.
- tmux: add per-window agent status indicator, 2s status refresh and a Prefix+Tab window switcher popup.
- Claude settings: pin model to sonnet, add herdr SessionStart hook, humanizer and ui-ux-pro-max plugins.
- CLAUDE.md: document claude/fish/kanshi linking, `workspaces.kdl` and the tmux helper script living outside the repo.
## 2026-10-10
- Fix niri login: Mod+T bind had three actions, niri rejected the config and fell back to defaults (no bar, no kanshi).
- Autostart now launches `noctalia` (v5, native) instead of `qs -c noctalia-shell` (v4, Quickshell/QML).
- Reason for the switch: Qt 6.12 broke noctalia-shell 4.x colours (`resolveColorKey is not a function`) and noctalia-qs was built on 6.11.
- Port all niri keybinds from `qs ... ipc call` to `noctalia msg` (launcher, lock, session, volume, media, brightness).
- Add `noctalia/config.toml`: theme, wallpaper, weather, idle, dock and bar layout ported from the old `settings.json`.
- Bar on the 5120px ultrawide (DP-1) is limited to ~70% width via a per-monitor `margin_ends` override.
- Restore previous wallpaper (`stellar-blade-2024-ultrawide.jpg`) on all outputs.
- Document the noctalia v4 to v5 migration (files, keybinds, bar, rollback) in `docs/noctalia-v5.md` and CLAUDE.md.
-72
View File
@@ -1,72 +0,0 @@
# 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/`, `~/.profile` and `~/.claude/settings.json` (fish is linked per file):
```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
### Hyprland (Wayland compositor, current)
Single Lua config: `hypr/hyprland.lua` (Hyprland 0.56+, API stubs in `/usr/share/hypr/stubs/hl.meta.lua`). Apply with `hyprctl reload`, check `hyprctl configerrors`.
Workspaces 1–5 are pinned to DP-1, 6 to HDMI-A-1. Startup apps are placed per workspace by window class rules.
### Niri (Wayland compositor, previous)
`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
- `workspaces.kdl` — named workspaces
- `animation.kdl`, `misc.kdl` — tweaks
Edit the relevant split file, not `config.kdl` itself.
### Noctalia (desktop shell / bar)
Runs **Noctalia v5** (`noctalia`, native). Config is `noctalia/config.toml` (TOML, hot-reloaded); validate with `noctalia config validate`.
`noctalia/settings.json` is the legacy v4 config (kept for rollback, still tweaked occasionally). See `docs/noctalia-v5.md` for details and `CHANGELOG.md` for history.
### 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`. The agent-status indicators call `~/.local/bin/tmux-window-agent-status`, which is **not** in this repo. After cloning, initialize the submodule:
```bash
git submodule update --init
```
### Shell / profile
`fish/` holds the fish config (`config.fish`, `conf.d/ssh-keychain.fish`); machine-specific vars go in untracked `~/.config/fish/local.fish`.
`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`.
+3 -1
View File
@@ -36,9 +36,11 @@
become: true become: true
apt: apt:
name: name:
- flameshot
- peek - peek
- obs-studio - obs-studio
- grim
- satty
- slurp
- name: Brave Browser - name: Brave Browser
become: true become: true
+11 -81
View File
@@ -1,31 +1,6 @@
{ {
"permissions": { "theme": "dark",
"defaultMode": "auto"
},
"model": "sonnet",
"hooks": { "hooks": {
"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"
}
]
}
],
"SessionStart": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "bash '/home/bgrolleman/.claude/hooks/herdr-agent-state.sh' session",
"timeout": 10
}
]
}
],
"Stop": [ "Stop": [
{ {
"hooks": [ "hooks": [
@@ -35,61 +10,16 @@
} }
] ]
} }
],
"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,
"humanizer@humanizer": true,
"lua-lsp@claude-plugins-official": true,
"ponytail@ponytail": true,
"ui-ux-pro-max@ui-ux-pro-max-skill": true
},
"extraKnownMarketplaces": {
"caveman": {
"source": {
"source": "github",
"repo": "juliusbrussee/caveman"
}
},
"humanizer": {
"source": {
"source": "github",
"repo": "blader/humanizer"
}
},
"ponytail": {
"source": {
"source": "github",
"repo": "DietrichGebert/ponytail"
}
},
"ui-ux-pro-max-skill": {
"source": {
"source": "github",
"repo": "nextlevelbuilder/ui-ux-pro-max-skill"
}
}
},
"effortLevel": "high",
"advisorModel": "opus",
"voice": {
"enabled": true,
"mode": "hold"
},
"theme": "dark",
"agentPushNotifEnabled": true,
"skipAutoPermissionPrompt": true,
"voiceEnabled": true,
"mcpServers": {
"comfyui-image-gen": {
"args": [
"/home/bgrolleman/Project/ComfyUI/mcp_server.py"
],
"command": "/home/bgrolleman/Project/ComfyUI/.venv/bin/python"
}
} }
} }
-74
View File
@@ -1,74 +0,0 @@
#!/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'
-36
View File
@@ -1,36 +0,0 @@
# Noctalia v5
Noctalia v5 (`noctalia` package) is a native Wayland shell with no Qt dependency. It replaces v4
(`noctalia-shell` + `noctalia-qs`, Quickshell/QML), which broke on Qt 6.12.
## Files
- `noctalia/config.toml` - hand-edited config, hot-reloaded. Linked to `~/.config/noctalia/config.toml`.
- `~/.local/state/noctalia/settings.toml` - GUI-managed overrides and runtime state (not in this repo).
- `noctalia/settings.json` - old v4 config, kept for reference or fallback.
Validate after editing: `noctalia config validate`. Open the settings GUI: `noctalia msg settings-open`.
## Startup and keybinds
- Started from `niri/cfg/autostart.kdl` with `spawn-at-startup "noctalia"`.
- Keybinds in `niri/cfg/keybinds.kdl` call `noctalia msg <command>`; list them with `noctalia msg --help`.
- Panel ids for `panel-toggle`: clipboard, control-center, launcher, polkit, session, tray-drawer, wallpaper.
- Wallpaper is set with `noctalia msg wallpaper-set [output] <path>` and persists.
## Bar
- Layout is the `start`, `center` and `end` lists in `[bar.main]`.
- `[bar.main.monitor.ultrawide]` matches DP-1 and sets `margin_ends = 768`, which gives about 70% width on 5120px.
Formula: `(monitor_width - wanted_width) / 2`.
## Not ported from v4
- System monitor widget (widget id unknown in v5), per-widget options such as hover-only labels.
- v4 plugins (`polkit-agent`): v5 has a built-in `polkit` panel instead.
- The v4 bar only ran on DP-1; v5 runs on every output.
## Rolling back
Set autostart to `qs -c noctalia-shell` again and restore the `qs ... ipc call` binds from git history.
This needs a `noctalia-shell` that works with the installed Qt version.
-15
View File
@@ -1,15 +0,0 @@
# 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
-7
View File
@@ -1,7 +0,0 @@
fish_add_path ~/.local/bin
# Machine-specific config (secrets, local overrides) — not tracked in dotfiles
if test -f ~/.config/fish/local.fish
source ~/.config/fish/local.fish
end
alias davinci-resolve-studio 'env QT_QPA_PLATFORM=xcb /usr/bin/davinci-resolve-studio'
+24
View File
@@ -0,0 +1,24 @@
// TokyoNight Night theme for gitui
(
selected_tab: Reset,
command_fg: Rgb(192, 202, 245),
selection_bg: Rgb(41, 46, 66),
selection_fg: Rgb(192, 202, 245),
cmdbar_bg: Rgb(26, 27, 38),
cmdbar_extra_lines_bg: Rgb(26, 27, 38),
disabled_fg: Rgb(86, 95, 137),
diff_line_add: Rgb(158, 206, 106),
diff_line_delete: Rgb(247, 118, 142),
diff_file_added: Rgb(115, 218, 202),
diff_file_removed: Rgb(247, 118, 142),
diff_file_moved: Rgb(187, 154, 247),
diff_file_modified: Rgb(224, 175, 104),
commit_hash: Rgb(187, 154, 247),
commit_time: Rgb(125, 207, 255),
commit_author: Rgb(158, 206, 106),
danger_fg: Rgb(247, 118, 142),
push_gauge_bg: Rgb(65, 72, 104),
push_gauge_fg: Rgb(192, 202, 245),
tag_fg: Rgb(187, 154, 247),
branch_fg: Rgb(224, 175, 104),
)
-436
View File
@@ -1,436 +0,0 @@
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- AUTOGENERATED HYPRLAND CONFIG. --
-- EDIT THIS CONFIG ACCORDING TO THE WIKI INSTRUCTIONS. --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- This is an example Hyprland Lua config file.
-- Refer to the wiki for more information.
-- https://wiki.hypr.land/Configuring/Start/
-- Please note not all available settings / options are set here.
-- For a full list, see the wiki
-- You can (and should!!) split this configuration into multiple files
-- Create your files separately and then require them like this:
-- require("myColors")
------------------
---- MONITORS ----
------------------
-- See https://wiki.hypr.land/Configuring/Basics/Monitors/
-- Same layout as kanshi/config: ultrawide on top, HDMI below it
hl.monitor({ output = "DP-1", mode = "5120x1440@59.98", position = "0x0", scale = 1 })
hl.monitor({ output = "HDMI-A-1", mode = "1920x1080@60", position = "1600x1440", scale = 1 })
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = "auto" })
-- Workspaces 1-5 on the ultrawide, 6+ on HDMI (otherwise ws1 lands on HDMI)
for i = 1, 5 do
hl.workspace_rule({ workspace = tostring(i), monitor = "DP-1", default = i == 1, persistent = true, layout = "master" })
end
hl.workspace_rule({ workspace = "6", monitor = "HDMI-A-1", default = true })
---------------------
---- MY PROGRAMS ----
---------------------
-- Set programs that you use
local terminal = "alacritty"
local fileManager = "nautilus"
local menu = "noctalia msg panel-toggle launcher"
-------------------
---- AUTOSTART ----
-------------------
-- See https://wiki.hypr.land/Configuring/Basics/Autostart/
-- Autostart necessary processes (like notifications daemons, status bars, etc.)
-- Or execute your favorite apps at launch like this:
--
-- hl.on("hyprland.start", function ()
-- hl.exec_cmd(terminal)
-- hl.exec_cmd("nm-applet")
-- hl.exec_cmd("waybar & hyprpaper & firefox")
-- end)
local webapp = "/usr/bin/helium-browser --profile-directory=Default --app-id="
hl.on("hyprland.start", function ()
-- ponytail: "splash" is a compositor notification, shown until noctalia's wallpaper is up
hl.notification.create({ text = "Loading desktop…", timeout = 8000, font_size = 28 })
hl.exec_cmd("noctalia")
hl.exec_cmd("/usr/lib/hyprpolkitagent/hyprpolkitagent")
-- Workspace 1: work (placed by the window rules below)
hl.exec_cmd(webapp .. "dlgohinmglaoopaiplliaecdpmnepmga") -- Todoist
hl.exec_cmd(webapp .. "fmgjjmmmlfnkbppncabfkddbjimcfncm") -- Gmail
hl.exec_cmd(webapp .. "kjbdgfilnfhdoflbpgamdcdgpehopbep") -- Google Calendar
hl.exec_cmd("helium-browser --new-window", { workspace = "1 silent" })
-- Workspace 2: chat
hl.exec_cmd(webapp .. "hnpfjngllnobngcgfapefoaidbinmjnm") -- WhatsApp
hl.exec_cmd(webapp .. "nigookeodlehlnjcpdfifmophdcbjoma") -- Telegram
hl.exec_cmd("discord")
hl.dispatch(hl.dsp.focus({ workspace = 1 }))
end)
-- Web apps share one helium process, so place them by class instead of exec rules
for class, ws in pairs({
["chrome-dlgohinmglaoopaiplliaecdpmnepmga-Default"] = 1, -- Todoist
["chrome-fmgjjmmmlfnkbppncabfkddbjimcfncm-Default"] = 1, -- Gmail
["chrome-kjbdgfilnfhdoflbpgamdcdgpehopbep-Default"] = 1, -- Google Calendar
["chrome-hnpfjngllnobngcgfapefoaidbinmjnm-Default"] = 2, -- WhatsApp
["chrome-nigookeodlehlnjcpdfifmophdcbjoma-Default"] = 2, -- Telegram
discord = 2,
}) do
hl.window_rule({ name = "ws-" .. class, match = { class = "^" .. class .. "$" }, workspace = ws .. " silent" })
end
-------------------------------
---- ENVIRONMENT VARIABLES ----
-------------------------------
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Environment-variables/
hl.env("XCURSOR_SIZE", "24")
hl.env("HYPRCURSOR_SIZE", "24")
-----------------------
----- PERMISSIONS -----
-----------------------
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Permissions/
-- Please note permission changes here require a Hyprland restart and are not applied on-the-fly
-- for security reasons
-- hl.config({
-- ecosystem = {
-- enforce_permissions = true,
-- },
-- })
-- hl.permission("/usr/(bin|local/bin)/grim", "screencopy", "allow")
-- hl.permission("/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland", "screencopy", "allow")
-- hl.permission("/usr/(bin|local/bin)/hyprpm", "plugin", "allow")
-----------------------
---- LOOK AND FEEL ----
-----------------------
-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/
hl.config({
general = {
gaps_in = 5,
gaps_out = 20,
border_size = 2,
col = {
active_border = { colors = {"rgba(33ccffee)", "rgba(00ff99ee)"}, angle = 45 },
inactive_border = "rgba(595959aa)",
},
-- Set to true to enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false,
-- Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on
allow_tearing = false,
layout = "dwindle",
},
decoration = {
rounding = 10,
rounding_power = 2,
-- Change transparency of focused and unfocused windows
active_opacity = 1.0,
inactive_opacity = 1.0,
shadow = {
enabled = true,
range = 4,
render_power = 3,
color = 0xee1a1a1a,
},
blur = {
enabled = true,
size = 3,
passes = 1,
vibrancy = 0.1696,
},
},
animations = {
enabled = true,
},
})
-- Default curves and animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/
hl.curve("easeOutQuint", { type = "bezier", points = { {0.23, 1}, {0.32, 1} } })
hl.curve("easeInOutCubic", { type = "bezier", points = { {0.65, 0.05}, {0.36, 1} } })
hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } })
hl.curve("almostLinear", { type = "bezier", points = { {0.5, 0.5}, {0.75, 1} } })
hl.curve("quick", { type = "bezier", points = { {0.15, 0}, {0.1, 1} } })
-- Default springs
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" })
hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" })
hl.animation({ leaf = "windows", enabled = true, speed = 4.79, spring = "easy" })
hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, spring = "easy", style = "popin 87%" })
hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.49, bezier = "linear", style = "popin 87%" })
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
hl.animation({ leaf = "fadeOut", enabled = true, speed = 1.46, bezier = "almostLinear" })
hl.animation({ leaf = "fade", enabled = true, speed = 3.03, bezier = "quick" })
hl.animation({ leaf = "layers", enabled = true, speed = 3.81, bezier = "easeOutQuint" })
hl.animation({ leaf = "layersIn", enabled = true, speed = 4, bezier = "easeOutQuint", style = "fade" })
hl.animation({ leaf = "layersOut", enabled = true, speed = 1.5, bezier = "linear", style = "fade" })
hl.animation({ leaf = "fadeLayersIn", enabled = true, speed = 1.79, bezier = "almostLinear" })
hl.animation({ leaf = "fadeLayersOut", enabled = true, speed = 1.39, bezier = "almostLinear" })
hl.animation({ leaf = "workspaces", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
hl.animation({ leaf = "workspacesIn", enabled = true, speed = 1.21, bezier = "almostLinear", style = "fade" })
hl.animation({ leaf = "workspacesOut", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
hl.animation({ leaf = "zoomFactor", enabled = true, speed = 7, bezier = "quick" })
-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
-- "Smart gaps" / "No gaps when only"
-- uncomment all if you wish to use that.
-- hl.workspace_rule({ workspace = "w[tv1]", gaps_out = 0, gaps_in = 0 })
-- hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 })
-- hl.window_rule({
-- name = "no-gaps-wtv1",
-- match = { float = false, workspace = "w[tv1]" },
-- border_size = 0,
-- rounding = 0,
-- })
-- hl.window_rule({
-- name = "no-gaps-f1",
-- match = { float = false, workspace = "f[1]" },
-- border_size = 0,
-- rounding = 0,
-- })
-- See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more
hl.config({
dwindle = {
preserve_split = true, -- You probably want this
},
})
-- See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more
hl.config({
-- Ultrawide workspaces: main window centered at 50%, others stack in 25% columns left/right
master = {
orientation = "center",
mfact = 0.5,
new_status = "slave", -- new windows go to the sides, main stays put
slave_count_for_center_master = 2,
},
})
-- See https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/ for more
hl.config({
scrolling = {
fullscreen_on_one_column = true,
},
})
-- A lone tiled window is centered at ~60% width on the ultrawide (3072/1440).
-- On 16:9 screens this ratio is wider than the screen, so it stays full size.
hl.config({
layout = {
single_window_aspect_ratio = { 32, 15 },
},
})
----------------
---- MISC ----
----------------
hl.config({
misc = {
force_default_wallpaper = -1, -- Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = false, -- If true disables the random hyprland logo / anime girl background. :(
},
})
---------------
---- INPUT ----
---------------
hl.config({
input = {
kb_layout = "us",
kb_variant = "",
kb_model = "",
kb_options = "",
kb_rules = "",
follow_mouse = 1,
sensitivity = 0, -- -1.0 - 1.0, 0 means no modification.
touchpad = {
natural_scroll = false,
},
},
})
hl.gesture({
fingers = 3,
direction = "horizontal",
action = "workspace"
})
-- Example per-device config
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Devices/ for more
hl.device({
name = "epic-mouse-v1",
sensitivity = -0.5,
})
---------------------
---- KEYBINDINGS ----
---------------------
local mainMod = "SUPER" -- Sets "Windows" key as main modifier
-- Example binds, see https://wiki.hypr.land/Configuring/Basics/Binds/ for more
hl.bind(mainMod .. " + Q", hl.dsp.window.close())
local closeWindowBind = hl.bind(mainMod .. " + C", hl.dsp.window.close())
-- closeWindowBind:set_enabled(false)
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager))
hl.bind(mainMod .. " + V", hl.dsp.window.float({ action = "toggle" }))
hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(menu))
hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only (HDMI)
hl.bind(mainMod .. " + Return", hl.dsp.layout("swapwithmaster")) -- master only: make focused window the main one
-- Ported from niri
hl.bind("ALT + Return", hl.dsp.exec_cmd(terminal))
hl.bind("ALT + Space", hl.dsp.exec_cmd("noctalia msg panel-toggle launcher"))
hl.bind("ALT + SHIFT + Space", hl.dsp.exec_cmd("noctalia msg window-switcher"))
hl.bind(mainMod .. " + L", hl.dsp.exec_cmd("noctalia msg session lock"))
hl.bind(mainMod .. " + SHIFT + Q", hl.dsp.exec_cmd("noctalia msg panel-toggle session"))
-- Move focus with ALT + hjkl
hl.bind("ALT + H", hl.dsp.focus({ direction = "left" }))
hl.bind("ALT + L", hl.dsp.focus({ direction = "right" }))
hl.bind("ALT + K", hl.dsp.focus({ direction = "up" }))
hl.bind("ALT + J", hl.dsp.focus({ direction = "down" }))
-- Move window with ALT + SHIFT + hjkl
hl.bind("ALT + SHIFT + H", hl.dsp.window.move({ direction = "left" }))
hl.bind("ALT + SHIFT + L", hl.dsp.window.move({ direction = "right" }))
hl.bind("ALT + SHIFT + K", hl.dsp.window.move({ direction = "up" }))
hl.bind("ALT + SHIFT + J", hl.dsp.window.move({ direction = "down" }))
-- Resize with ALT + CTRL + hjkl (hold to repeat)
hl.bind("ALT + CTRL + H", hl.dsp.window.resize({ x = -175, y = 0, relative = true }), { repeating = true })
hl.bind("ALT + CTRL + L", hl.dsp.window.resize({ x = 175, y = 0, relative = true }), { repeating = true })
hl.bind("ALT + CTRL + K", hl.dsp.window.resize({ x = 0, y = -175, relative = true }), { repeating = true })
hl.bind("ALT + CTRL + J", hl.dsp.window.resize({ x = 0, y = 175, relative = true }), { repeating = true })
hl.bind("ALT + F", hl.dsp.window.fullscreen())
-- Tabbed stacks: ALT+G groups windows, ALT+Tab cycles through the group
hl.bind("ALT + G", hl.dsp.group.toggle())
hl.bind("ALT + Tab", hl.dsp.group.next())
-- Switch workspaces with ALT + [1-9]
-- Move active window to a workspace with ALT + SHIFT + [1-9]
for i = 1, 9 do
hl.bind("ALT + " .. i, hl.dsp.focus({ workspace = i}))
hl.bind("ALT + SHIFT + " .. i, hl.dsp.window.move({ workspace = i }))
end
-- Example special workspace (scratchpad)
hl.bind(mainMod .. " + S", hl.dsp.workspace.toggle_special("magic"))
hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" }))
-- Scroll through existing workspaces with mainMod + scroll
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
-- Move/resize windows with mainMod + LMB/RMB and dragging
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
-- Laptop multimedia keys for volume and LCD brightness
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("noctalia msg volume-up"), { locked = true, repeating = true })
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("noctalia msg volume-down"), { locked = true, repeating = true })
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("noctalia msg volume-mute"), { locked = true })
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("noctalia msg mic-mute"), { locked = true })
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("noctalia msg brightness-up"), { locked = true, repeating = true })
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("noctalia msg brightness-down"), { locked = true, repeating = true })
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("noctalia msg media next"), { locked = true })
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("noctalia msg media toggle"), { locked = true })
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("noctalia msg media toggle"), { locked = true })
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("noctalia msg media previous"), { locked = true })
--------------------------------
---- WINDOWS AND WORKSPACES ----
--------------------------------
-- See https://wiki.hypr.land/Configuring/Basics/Window-Rules/
-- and https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
-- Example window rules that are useful
local suppressMaximizeRule = hl.window_rule({
-- Ignore maximize requests from all apps. You'll probably like this.
name = "suppress-maximize-events",
match = { class = ".*" },
suppress_event = "maximize",
})
-- suppressMaximizeRule:set_enabled(false)
hl.window_rule({
-- Fix some dragging issues with XWayland
name = "fix-xwayland-drags",
match = {
class = "^$",
title = "^$",
xwayland = true,
float = true,
fullscreen = false,
pin = false,
},
no_focus = true,
})
-- Layer rules also return a handle.
-- local overlayLayerRule = hl.layer_rule({
-- name = "no-anim-overlay",
-- match = { namespace = "^my-overlay$" },
-- no_anim = true,
-- })
-- overlayLayerRule:set_enabled(false)
-- Hyprland-run windowrule
hl.window_rule({
name = "move-hyprland-run",
match = { class = "hyprland-run" },
move = "20 monitor_h-120",
float = true,
})
-8
View File
@@ -1,8 +0,0 @@
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
}
+7 -2
View File
@@ -1,5 +1,10 @@
// ────────────── Startup Applications ────────────── // ────────────── Startup Applications ──────────────
// 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-at-startup "noctalia" spawn-sh-at-startup "qs -c noctalia-shell"
spawn-at-startup "kanshi"
// Lock screen after 5 min, turn off monitors after 15 min
spawn-at-startup "swayidle" "-w"
"timeout" "300" "qs -c noctalia-shell ipc call lockScreen lock"
"timeout" "900" "niri msg action power-off-monitors"
"resume" "niri msg action power-on-monitors"
+1 -1
View File
@@ -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"
+28 -31
View File
@@ -9,36 +9,32 @@ 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 "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"; } Mod+Shift+S { spawn-sh "flameshot gui"; }
// ─── 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+CTRL+Return hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; }
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"; } Alt+Space hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; }
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 "noctalia msg panel-toggle launcher"; }
Alt+Space hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "noctalia msg panel-toggle launcher"; }
Alt+Shift+Space hotkey-overlay-title="Open Window Search: noctalia launcher" { spawn-sh "noctalia msg window-switcher"; }
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 "noctalia msg session 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 "noctalia msg panel-toggle session"; } Mod+Shift+Q hotkey-overlay-title="Session Menu: noctalia sessionMenu" { spawn-sh "qs -c noctalia-shell ipc call sessionMenu toggle"; }
// Please choose your own file manager. // Please choose your own file manager.
Mod+E hotkey-overlay-title="File Manager: Nautilus" { spawn "nautilus"; } Mod+E hotkey-overlay-title="File Manager: Nautilus" { spawn "nautilus"; }
// ─── Media Controls ─── // ─── Media Controls ───
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "noctalia msg volume-up"; } XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume increase"; }
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "noctalia msg volume-down"; } XF86AudioLowerVolume allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume decrease"; }
XF86AudioMute allow-when-locked=true { spawn-sh "noctalia msg volume-mute"; } XF86AudioMute allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume muteOutput"; }
XF86AudioMicMute allow-when-locked=true { spawn-sh "noctalia msg mic-mute"; } XF86AudioMicMute allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume muteInput"; }
XF86AudioNext allow-when-locked=true { spawn-sh "noctalia msg media next"; } XF86AudioNext allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media next"; }
XF86AudioPrev allow-when-locked=true { spawn-sh "noctalia msg media previous"; } XF86AudioPrev allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media previous"; }
XF86AudioPlay allow-when-locked=true { spawn-sh "noctalia msg media toggle"; } XF86AudioPlay allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media playPause"; }
XF86AudioPause allow-when-locked=true { spawn-sh "noctalia msg media toggle"; } XF86AudioPause allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media playPause"; }
// ─── Brightness Controls ─── // ─── Brightness Controls ───
XF86MonBrightnessUp allow-when-locked=true { spawn-sh "noctalia msg brightness-up"; } XF86MonBrightnessUp allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call brightness increase"; }
XF86MonBrightnessDown allow-when-locked=true { spawn-sh "noctalia msg brightness-down"; } XF86MonBrightnessDown allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call brightness decrease"; }
// ─── Window Movement and Focus ─── // ─── Window Movement and Focus ───
Alt+H { focus-column-left; } Alt+H { focus-column-left; }
@@ -102,22 +98,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; }
@@ -136,6 +132,7 @@ 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; }
+1 -3
View File
@@ -5,9 +5,7 @@
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
-7
View File
@@ -1,7 +1,6 @@
window-rule { window-rule {
geometry-corner-radius 5 // Set every window radius to 20 geometry-corner-radius 5 // Set every window radius to 20
clip-to-geometry true clip-to-geometry true
default-floating-position x=10 y=10 relative-to="bottom-left"
} }
// if you use steam you will probably like these // if you use steam you will probably like these
@@ -17,12 +16,6 @@
open-focused false open-focused false
} }
window-rule {
match title="^Picture-in-picture$"
open-floating true
default-floating-position x=50 y=50 relative-to="bottom-left"
}
layer-rule { layer-rule {
match namespace="^noctalia-wallpaper*" match namespace="^noctalia-wallpaper*"
place-within-backdrop true place-within-backdrop true
+2 -18
View File
@@ -1,18 +1,2 @@
workspace "1" { workspace "browser"
open-on-output "DP-1" workspace "chat"
}
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"
}
-25
View File
@@ -1,25 +0,0 @@
#!/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
-56
View File
@@ -1,56 +0,0 @@
# Ported from the old settings.json (noctalia-shell 4.x). Unlisted keys use defaults.
[theme]
mode = "dark"
source = "builtin"
builtin = "Catppuccin"
[wallpaper]
enabled = true
fill_mode = "crop"
transition = ["fade", "disc", "stripes", "wipe", "honeycomb"]
transition_duration = 1500
directory = "/home/bgrolleman/Documents/Resources/Backgrounds"
[weather]
enabled = true
unit = "celsius"
[location]
address = "Amersfoort, The Netherlands"
[idle.behavior.lock]
timeout = 660
action = "lock"
enabled = true
[idle.behavior.screen-off]
timeout = 600
action = "screen_off"
enabled = true
[dock]
enabled = true
position = "left"
auto_hide = true
[bar.main]
position = "top"
background_opacity = 0.93
capsule = true
margin_ends = 4
margin_edge = 4
widget_spacing = 6
start = ["launcher", "taskbar"]
center = ["clock", "media"]
end = ["workspaces", "tray", "network", "bluetooth", "notifications", "battery", "volume", "brightness", "control-center"]
[widget.clock]
format = "{:%H:%M %a, %b %d}"
tooltip_format = "{:%H:%M %a, %b %d}"
# 70% of the 5120px ultrawide: (5120 - 3584) / 2
[bar.main.monitor.ultrawide]
match = "DP-1"
margin_ends = 768
+59 -74
View File
@@ -60,7 +60,6 @@
"middleClickCommand": "", "middleClickCommand": "",
"middleClickFollowMouse": false, "middleClickFollowMouse": false,
"monitors": [ "monitors": [
"DP-1"
], ],
"mouseWheelAction": "none", "mouseWheelAction": "none",
"mouseWheelWrap": true, "mouseWheelWrap": true,
@@ -87,22 +86,6 @@
"id": "Clock", "id": "Clock",
"tooltipFormat": "HH:mm ddd, MMM dd", "tooltipFormat": "HH:mm ddd, MMM dd",
"useCustomFont": false "useCustomFont": false
},
{
"compactMode": false,
"hideMode": "hidden",
"hideWhenIdle": true,
"id": "MediaMini",
"maxWidth": 500,
"panelShowAlbumArt": true,
"scrollingMode": "hover",
"showAlbumArt": true,
"showArtistFirst": true,
"showProgressRing": true,
"showVisualizer": false,
"textColor": "none",
"useFixedWidth": false,
"visualizerType": "linear"
} }
], ],
"left": [ "left": [
@@ -116,42 +99,6 @@
"id": "Launcher", "id": "Launcher",
"useDistroLogo": false "useDistroLogo": false
}, },
{
"colorizeIcons": false,
"hideMode": "hidden",
"iconScale": 0.8,
"id": "Taskbar",
"maxTaskbarWidth": 40,
"onlyActiveWorkspaces": true,
"onlySameOutput": true,
"showPinnedApps": false,
"showTitle": true,
"smartWidth": true,
"titleWidth": 120
}
],
"right": [
{
"characterCount": 2,
"colorizeIcons": false,
"emptyColor": "secondary",
"enableScrollWheel": true,
"focusedColor": "primary",
"followFocusedScreen": false,
"fontWeight": "bold",
"groupedBorderOpacity": 1,
"hideUnoccupied": true,
"iconScale": 0.8,
"id": "Workspace",
"labelMode": "name",
"occupiedColor": "secondary",
"pillSize": 0.6,
"showApplications": true,
"showApplicationsHover": false,
"showBadge": true,
"showLabelsOnlyWhenOccupied": true,
"unfocusedIconsOpacity": 1
},
{ {
"compactMode": true, "compactMode": true,
"diskPath": "/", "diskPath": "/",
@@ -174,6 +121,56 @@
"useMonospaceFont": true, "useMonospaceFont": true,
"usePadding": false "usePadding": false
}, },
{
"compactMode": false,
"hideMode": "hidden",
"hideWhenIdle": false,
"id": "MediaMini",
"maxWidth": 145,
"panelShowAlbumArt": true,
"scrollingMode": "hover",
"showAlbumArt": true,
"showArtistFirst": true,
"showProgressRing": true,
"showVisualizer": false,
"textColor": "none",
"useFixedWidth": false,
"visualizerType": "linear"
},
{
"characterCount": 2,
"colorizeIcons": false,
"emptyColor": "secondary",
"enableScrollWheel": true,
"focusedColor": "primary",
"followFocusedScreen": false,
"fontWeight": "bold",
"groupedBorderOpacity": 1,
"hideUnoccupied": false,
"iconScale": 0.8,
"id": "Workspace",
"labelMode": "index",
"occupiedColor": "secondary",
"pillSize": 0.6,
"showApplications": false,
"showApplicationsHover": false,
"showBadge": true,
"showLabelsOnlyWhenOccupied": true,
"unfocusedIconsOpacity": 1
},
{
"colorizeIcons": false,
"hideMode": "visible",
"id": "ActiveWindow",
"maxWidth": 350,
"scrollingMode": "hover",
"showIcon": true,
"showText": true,
"textColor": "none",
"useFixedWidth": true
}
],
"right": [
{ {
"blacklist": [ "blacklist": [
], ],
@@ -185,18 +182,6 @@
"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,
@@ -356,23 +341,23 @@
"groupClickAction": "cycle", "groupClickAction": "cycle",
"groupContextMenuMode": "extended", "groupContextMenuMode": "extended",
"groupIndicatorStyle": "dots", "groupIndicatorStyle": "dots",
"inactiveIndicators": true, "inactiveIndicators": false,
"indicatorColor": "primary", "indicatorColor": "primary",
"indicatorOpacity": 0.6, "indicatorOpacity": 0.6,
"indicatorThickness": 3, "indicatorThickness": 3,
"launcherIcon": "", "launcherIcon": "",
"launcherIconColor": "none", "launcherIconColor": "none",
"launcherPosition": "start", "launcherPosition": "end",
"launcherUseDistroLogo": true, "launcherUseDistroLogo": false,
"monitors": [ "monitors": [
], ],
"onlySameOutput": true, "onlySameOutput": true,
"pinnedApps": [ "pinnedApps": [
], ],
"pinnedStatic": true, "pinnedStatic": false,
"position": "left", "position": "bottom",
"showDockIndicator": true, "showDockIndicator": true,
"showLauncherIcon": true, "showLauncherIcon": false,
"sitOnFrame": false, "sitOnFrame": false,
"size": 1 "size": 1
}, },
@@ -455,7 +440,7 @@
}, },
"idle": { "idle": {
"customCommands": "[]", "customCommands": "[]",
"enabled": true, "enabled": false,
"fadeDuration": 5, "fadeDuration": 5,
"lockCommand": "", "lockCommand": "",
"lockTimeout": 660, "lockTimeout": 660,
@@ -465,7 +450,7 @@
"screenOffCommand": "", "screenOffCommand": "",
"screenOffTimeout": 600, "screenOffTimeout": 600,
"suspendCommand": "", "suspendCommand": "",
"suspendTimeout": 0 "suspendTimeout": 1800
}, },
"location": { "location": {
"analogClockInCalendar": false, "analogClockInCalendar": false,
@@ -491,7 +476,7 @@
"bluetoothRssiPollingEnabled": false, "bluetoothRssiPollingEnabled": false,
"disableDiscoverability": false, "disableDiscoverability": false,
"networkPanelView": "wifi", "networkPanelView": "wifi",
"wifiDetailsViewMode": "list" "wifiDetailsViewMode": "grid"
}, },
"nightLight": { "nightLight": {
"autoSchedule": true, "autoSchedule": true,
-24
View File
@@ -1,24 +0,0 @@
local rocks_config = {
rocks_path = vim.env.HOME .. "/.local/share/nvim/rocks",
}
vim.g.rocks_nvim = rocks_config
local luarocks_path = {
vim.fs.joinpath(rocks_config.rocks_path, "share", "lua", "5.1", "?.lua"),
vim.fs.joinpath(rocks_config.rocks_path, "share", "lua", "5.1", "?", "init.lua"),
}
package.path = package.path .. ";" .. table.concat(luarocks_path, ";")
local luarocks_cpath = {
vim.fs.joinpath(rocks_config.rocks_path, "lib", "lua", "5.1", "?.so"),
vim.fs.joinpath(rocks_config.rocks_path, "lib64", "lua", "5.1", "?.so"),
-- Remove the dylib and dll paths if you do not need macos or windows support
vim.fs.joinpath(rocks_config.rocks_path, "lib", "lua", "5.1", "?.dylib"),
vim.fs.joinpath(rocks_config.rocks_path, "lib64", "lua", "5.1", "?.dylib"),
vim.fs.joinpath(rocks_config.rocks_path, "lib", "lua", "5.1", "?.dll"),
vim.fs.joinpath(rocks_config.rocks_path, "lib64", "lua", "5.1", "?.dll"),
}
package.cpath = package.cpath .. ";" .. table.concat(luarocks_cpath, ";")
vim.opt.runtimepath:append(vim.fs.joinpath(rocks_config.rocks_path, "lib", "luarocks", "rocks-5.1", "rocks.nvim", "*"))
-355
View File
@@ -1,355 +0,0 @@
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => General
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set mouse=a
" Sets how many lines of history VIM has to remember
set history=500
" Enable filetype plugins
filetype plugin on
filetype indent on
" Set to auto read when a file is changed from the outside
set autoread
au FocusGained,BufEnter * checktime
" With a map leader it's possible to do extra key combinations
" like <leader>w saves the current file
let mapleader = ","
" Fast saving
nmap <leader>s :w!<cr>
" :W sudo saves the file
" (useful for handling the permission-denied error)
command! W execute 'w !sudo tee % > /dev/null' <bar> edit!
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => VIM user interface
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Set 7 lines to the cursor - when moving vertically using j/k
set so=7
" Avoid garbled characters in Chinese language windows OS
let $LANG='en'
set langmenu=en
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
" Turn on the Wild menu
set wildmenu
" Ignore compiled files
set wildignore=*.o,*~,*.pyc
if has("win16") || has("win32")
set wildignore+=.git\*,.hg\*,.svn\*
else
set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
endif
"Always show current position
set ruler
" Height of the command bar
set cmdheight=1
" A buffer becomes hidden when it is abandoned
set hid
" Configure backspace so it acts as it should act
set backspace=eol,start,indent
set whichwrap+=<,>,h,l
" Ignore case when searching
set ignorecase
" When searching try to be smart about cases
set smartcase
" Highlight search results
set hlsearch
" Makes search act like search in modern browsers
set incsearch
" Don't redraw while executing macros (good performance config)
set lazyredraw
" For regular expressions turn magic on
set magic
" Show matching brackets when text indicator is over them
set showmatch
" How many tenths of a second to blink when matching brackets
set mat=2
" No annoying sound on errors
set noerrorbells
set novisualbell
set t_vb=
set tm=500
" Properly disable sound on errors on MacVim
if has("gui_macvim")
autocmd GUIEnter * set vb t_vb=
endif
" Add a bit extra margin to the left
set foldcolumn=1
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Colors and Fonts
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Enable syntax highlighting
syntax enable
" Enable 256 colors palette in Gnome Terminal
if $COLORTERM == 'gnome-terminal'
set t_Co=256
endif
try
colorscheme darkelf
catch
endtry
set background=dark
" Set extra options when running in GUI mode
if has("gui_running")
set guioptions-=T
set guioptions-=e
set t_Co=256
set guitablabel=%M\ %t
endif
" Set utf8 as standard encoding and en_US as the standard language
set encoding=utf8
" Use Unix as the standard file type
set ffs=unix,dos,mac
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Files, backups and undo
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Turn backup off, since most stuff is in SVN, git etc. anyway...
set nobackup
set nowb
set noswapfile
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Text, tab and indent related
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Use spaces instead of tabs
set expandtab
" Be smart when using tabs ;)
set smarttab
" 1 tab == 4 spaces
set shiftwidth=4
set tabstop=4
" Linebreak on 500 characters
set lbr
set tw=500
set ai "Auto indent
set si "Smart indent
set wrap "Wrap lines
""""""""""""""""""""""""""""""
" => Visual mode related
""""""""""""""""""""""""""""""
" Visual mode pressing * or # searches for the current selection
" Super useful! From an idea by Michael Naumann
vnoremap <silent> * :<C-u>call VisualSelection('', '')<CR>/<C-R>=@/<CR><CR>
vnoremap <silent> # :<C-u>call VisualSelection('', '')<CR>?<C-R>=@/<CR><CR>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Moving around, tabs, windows and buffers
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search)
"map <space> /
"map <C-space> ?
" Disable highlight when <leader><cr> is pressed
map <silent> <leader><cr> :noh<cr>
" Smart way to move between windows
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
" Close the current buffer
map <leader>bd :Bclose<cr>:tabclose<cr>gT
" Close all the buffers
map <leader>ba :bufdo bd<cr>
map <leader>bl :bnext<cr>
map <leader>bh :bprevious<cr>
" Useful mappings for managing tabs
map <leader>tn :tabnew<cr>
map <leader>to :tabonly<cr>
map <leader>tc :tabclose<cr>
map <leader>tm :tabmove
map <leader>t<leader> :tabnext
" Let 'tl' toggle between this and the last accessed tab
let g:lasttab = 1
nmap <Leader>tl :exe "tabn ".g:lasttab<CR>
au TabLeave * let g:lasttab = tabpagenr()
" Opens a new tab with the current buffer's path
" Super useful when editing files in the same directory
map <leader>te :tabedit <C-r>=expand("%:p:h")<cr>/
" Switch CWD to the directory of the open buffer
map <leader>cd :cd %:p:h<cr>:pwd<cr>
" Specify the behavior when switching between buffers
try
set switchbuf=useopen,usetab,newtab
set stal=2
catch
endtry
" Return to last edit position when opening files (You want this!)
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
""""""""""""""""""""""""""""""
" => Status line
""""""""""""""""""""""""""""""
" Always show the status line
set laststatus=2
" Format the status line
set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Editing mappings
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Remap VIM 0 to first non-blank character
map 0 ^
" Move a line of text using ALT+[jk] or Command+[jk] on mac
nmap <M-j> mz:m+<cr>`z
nmap <M-k> mz:m-2<cr>`z
vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z
vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z
if has("mac") || has("macunix")
nmap <D-j> <M-j>
nmap <D-k> <M-k>
vmap <D-j> <M-j>
vmap <D-k> <M-k>
endif
" Delete trailing white space on save, useful for some filetypes ;)
fun! CleanExtraSpaces()
let save_cursor = getpos(".")
let old_query = getreg('/')
silent! %s/\s\+$//e
call setpos('.', save_cursor)
call setreg('/', old_query)
endfun
if has("autocmd")
autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces()
endif
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Spell checking
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Pressing ,ss will toggle and untoggle spell checking
map <leader>ss :setlocal spell!<cr>
" Shortcuts using <leader>
map <leader>sn ]s
map <leader>sp [s
map <leader>sa zg
map <leader>s? z=
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Misc
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Remove the Windows ^M - when the encodings gets messed up
noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm
" Quickly open a buffer for scribble
map <leader>q :e ~/buffer<cr>
" Quickly open a markdown buffer for scribble
map <leader>x :e ~/buffer.md<cr>
" Toggle paste mode on and off
map <leader>pp :setlocal paste!<cr>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Helper functions
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Returns true if paste mode is enabled
function! HasPaste()
if &paste
return 'PASTE MODE '
endif
return ''
endfunction
" Don't close window, when deleting a buffer
command! Bclose call <SID>BufcloseCloseIt()
function! <SID>BufcloseCloseIt()
let l:currentBufNum = bufnr("%")
let l:alternateBufNum = bufnr("#")
if buflisted(l:alternateBufNum)
buffer #
else
bnext
endif
if bufnr("%") == l:currentBufNum
new
endif
if buflisted(l:currentBufNum)
execute("bdelete! ".l:currentBufNum)
endif
endfunction
function! CmdLine(str)
call feedkeys(":" . a:str)
endfunction
function! VisualSelection(direction, extra_filter) range
let l:saved_reg = @"
execute "normal! vgvy"
let l:pattern = escape(@", "\\/.*'$^~[]")
let l:pattern = substitute(l:pattern, "\n$", "", "")
if a:direction == 'gv'
call CmdLine("Ack '" . l:pattern . "' " )
elseif a:direction == 'replace'
call CmdLine("%s" . '/'. l:pattern . '/')
endif
let @/ = l:pattern
let @" = l:saved_reg
endfunction
-357
View File
@@ -1,357 +0,0 @@
lua require('config.lazy')
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => General
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set mouse=a
" Sets how many lines of history VIM has to remember
set history=500
" Enable filetype plugins
filetype plugin on
filetype indent on
" Set to auto read when a file is changed from the outside
set autoread
au FocusGained,BufEnter * checktime
" With a map leader it's possible to do extra key combinations
" like <leader>w saves the current file
let mapleader = ","
" Fast saving
nmap <leader>s :w!<cr>
" :W sudo saves the file
" (useful for handling the permission-denied error)
command! W execute 'w !sudo tee % > /dev/null' <bar> edit!
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => VIM user interface
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Set 7 lines to the cursor - when moving vertically using j/k
set so=7
" Avoid garbled characters in Chinese language windows OS
let $LANG='en'
set langmenu=en
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
" Turn on the Wild menu
set wildmenu
" Ignore compiled files
set wildignore=*.o,*~,*.pyc
if has("win16") || has("win32")
set wildignore+=.git\*,.hg\*,.svn\*
else
set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
endif
"Always show current position
set ruler
" Height of the command bar
set cmdheight=1
" A buffer becomes hidden when it is abandoned
set hid
" Configure backspace so it acts as it should act
set backspace=eol,start,indent
set whichwrap+=<,>,h,l
" Ignore case when searching
set ignorecase
" When searching try to be smart about cases
set smartcase
" Highlight search results
set hlsearch
" Makes search act like search in modern browsers
set incsearch
" Don't redraw while executing macros (good performance config)
set lazyredraw
" For regular expressions turn magic on
set magic
" Show matching brackets when text indicator is over them
set showmatch
" How many tenths of a second to blink when matching brackets
set mat=2
" No annoying sound on errors
set noerrorbells
set novisualbell
set t_vb=
set tm=500
" Properly disable sound on errors on MacVim
if has("gui_macvim")
autocmd GUIEnter * set vb t_vb=
endif
" Add a bit extra margin to the left
set foldcolumn=1
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Colors and Fonts
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Enable syntax highlighting
syntax enable
" Enable 256 colors palette in Gnome Terminal
if $COLORTERM == 'gnome-terminal'
set t_Co=256
endif
try
colorscheme darkelf
catch
endtry
set background=dark
" Set extra options when running in GUI mode
if has("gui_running")
set guioptions-=T
set guioptions-=e
set t_Co=256
set guitablabel=%M\ %t
endif
" Set utf8 as standard encoding and en_US as the standard language
set encoding=utf8
" Use Unix as the standard file type
set ffs=unix,dos,mac
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Files, backups and undo
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Turn backup off, since most stuff is in SVN, git etc. anyway...
set nobackup
set nowb
set noswapfile
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Text, tab and indent related
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Use spaces instead of tabs
set expandtab
" Be smart when using tabs ;)
set smarttab
" 1 tab == 4 spaces
set shiftwidth=4
set tabstop=4
" Linebreak on 500 characters
set lbr
set tw=500
set ai "Auto indent
set si "Smart indent
set wrap "Wrap lines
""""""""""""""""""""""""""""""
" => Visual mode related
""""""""""""""""""""""""""""""
" Visual mode pressing * or # searches for the current selection
" Super useful! From an idea by Michael Naumann
vnoremap <silent> * :<C-u>call VisualSelection('', '')<CR>/<C-R>=@/<CR><CR>
vnoremap <silent> # :<C-u>call VisualSelection('', '')<CR>?<C-R>=@/<CR><CR>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Moving around, tabs, windows and buffers
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search)
map <space> /
map <C-space> ?
" Disable highlight when <leader><cr> is pressed
map <silent> <leader><cr> :noh<cr>
" Smart way to move between windows
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
" Close the current buffer
map <leader>bd :Bclose<cr>:tabclose<cr>gT
" Close all the buffers
map <leader>ba :bufdo bd<cr>
map <leader>bl :bnext<cr>
map <leader>bh :bprevious<cr>
" Useful mappings for managing tabs
map <leader>tn :tabnew<cr>
map <leader>to :tabonly<cr>
map <leader>tc :tabclose<cr>
map <leader>tm :tabmove
map <leader>t<leader> :tabnext
" Let 'tl' toggle between this and the last accessed tab
let g:lasttab = 1
nmap <Leader>tl :exe "tabn ".g:lasttab<CR>
au TabLeave * let g:lasttab = tabpagenr()
" Opens a new tab with the current buffer's path
" Super useful when editing files in the same directory
map <leader>te :tabedit <C-r>=expand("%:p:h")<cr>/
" Switch CWD to the directory of the open buffer
map <leader>cd :cd %:p:h<cr>:pwd<cr>
" Specify the behavior when switching between buffers
try
set switchbuf=useopen,usetab,newtab
set stal=2
catch
endtry
" Return to last edit position when opening files (You want this!)
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
""""""""""""""""""""""""""""""
" => Status line
""""""""""""""""""""""""""""""
" Always show the status line
set laststatus=2
" Format the status line
set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Editing mappings
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Remap VIM 0 to first non-blank character
map 0 ^
" Move a line of text using ALT+[jk] or Command+[jk] on mac
nmap <M-j> mz:m+<cr>`z
nmap <M-k> mz:m-2<cr>`z
vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z
vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z
if has("mac") || has("macunix")
nmap <D-j> <M-j>
nmap <D-k> <M-k>
vmap <D-j> <M-j>
vmap <D-k> <M-k>
endif
" Delete trailing white space on save, useful for some filetypes ;)
fun! CleanExtraSpaces()
let save_cursor = getpos(".")
let old_query = getreg('/')
silent! %s/\s\+$//e
call setpos('.', save_cursor)
call setreg('/', old_query)
endfun
if has("autocmd")
autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces()
endif
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Spell checking
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Pressing ,ss will toggle and untoggle spell checking
map <leader>ss :setlocal spell!<cr>
" Shortcuts using <leader>
map <leader>sn ]s
map <leader>sp [s
map <leader>sa zg
map <leader>s? z=
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Misc
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Remove the Windows ^M - when the encodings gets messed up
noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm
" Quickly open a buffer for scribble
map <leader>q :e ~/buffer<cr>
" Quickly open a markdown buffer for scribble
map <leader>x :e ~/buffer.md<cr>
" Toggle paste mode on and off
map <leader>pp :setlocal paste!<cr>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Helper functions
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Returns true if paste mode is enabled
function! HasPaste()
if &paste
return 'PASTE MODE '
endif
return ''
endfunction
" Don't close window, when deleting a buffer
command! Bclose call <SID>BufcloseCloseIt()
function! <SID>BufcloseCloseIt()
let l:currentBufNum = bufnr("%")
let l:alternateBufNum = bufnr("#")
if buflisted(l:alternateBufNum)
buffer #
else
bnext
endif
if bufnr("%") == l:currentBufNum
new
endif
if buflisted(l:currentBufNum)
execute("bdelete! ".l:currentBufNum)
endif
endfunction
function! CmdLine(str)
call feedkeys(":" . a:str)
endfunction
function! VisualSelection(direction, extra_filter) range
let l:saved_reg = @"
execute "normal! vgvy"
let l:pattern = escape(@", "\\/.*'$^~[]")
let l:pattern = substitute(l:pattern, "\n$", "", "")
if a:direction == 'gv'
call CmdLine("Ack '" . l:pattern . "' " )
elseif a:direction == 'replace'
call CmdLine("%s" . '/'. l:pattern . '/')
endif
let @/ = l:pattern
let @" = l:saved_reg
endfunction
-21
View File
@@ -1,21 +0,0 @@
# This is your rocks.nvim plugins declaration file.
# Here is a small yet pretty detailed example on how to use it:
#
# [plugins]
# nvim-treesitter = "semver_version" # e.g. "1.0.0"
# List of non-Neovim rocks.
# This includes things like `toml` or other lua packages.
[rocks]
# List of Neovim plugins to install alongside their versions.
# If the plugin name contains a dot then you must add quotes to the key name!
[plugins]
"rocks.nvim" = "2.43.1" # rocks.nvim can also manage itself :D
"rocks-config.nvim" = "3.1.0"
neorg = "9.3.0"
"rocks-git.nvim" = "2.5.3"
[plugins.nvim-treesitter]
git = "nvim-treesitter/nvim-treesitter"
rev = "v0.9.3"
+4 -18
View File
@@ -1,20 +1,5 @@
print("advent of neovim")
require("config.lazy") require("config.lazy")
--
-- local o = vim.opt
-- o.compatible = false
-- o.number = true
-- o.cmdheight = 2
-- o.expandtab = true
-- o.smarttab = true
-- o.shiftwidth = 4
-- o.tabstop = 4
-- o.ai = true
-- o.si = true
--
-- nvim_create_user_command("InsertTodayHeader", ':pu=strftime("# %a %d %b %Y")', {})
--
vim.opt.compatible = false vim.opt.compatible = false
vim.opt.foldmethod = "expr" vim.opt.foldmethod = "expr"
vim.opt.foldexpr = "v:lua.MyCustomFoldExpr()" vim.opt.foldexpr = "v:lua.MyCustomFoldExpr()"
@@ -23,7 +8,8 @@ vim.diagnostic.config({ virtual_text = true })
function _G.MyCustomFoldExpr() function _G.MyCustomFoldExpr()
local line = vim.fn.getline(vim.v.lnum) local line = vim.fn.getline(vim.v.lnum)
if line:match("::$") then if line:match("::$") then
return "=" -- keep the same fold level as the previous line return "="
end end
return vim.treesitter.foldexpr() local ok, result = pcall(vim.treesitter.foldexpr)
return ok and result or "0"
end end
+1 -8
View File
@@ -10,21 +10,14 @@
"lazyvim.plugins.extras.editor.mini-diff", "lazyvim.plugins.extras.editor.mini-diff",
"lazyvim.plugins.extras.editor.mini-files", "lazyvim.plugins.extras.editor.mini-files",
"lazyvim.plugins.extras.editor.mini-move", "lazyvim.plugins.extras.editor.mini-move",
"lazyvim.plugins.extras.editor.neo-tree",
"lazyvim.plugins.extras.editor.outline", "lazyvim.plugins.extras.editor.outline",
"lazyvim.plugins.extras.editor.snacks_explorer",
"lazyvim.plugins.extras.editor.telescope", "lazyvim.plugins.extras.editor.telescope",
"lazyvim.plugins.extras.lang.ansible", "lazyvim.plugins.extras.lang.ansible",
"lazyvim.plugins.extras.lang.clojure",
"lazyvim.plugins.extras.lang.docker", "lazyvim.plugins.extras.lang.docker",
"lazyvim.plugins.extras.lang.git", "lazyvim.plugins.extras.lang.git",
"lazyvim.plugins.extras.lang.helm", "lazyvim.plugins.extras.lang.helm",
"lazyvim.plugins.extras.lang.json", "lazyvim.plugins.extras.lang.json",
"lazyvim.plugins.extras.lang.markdown", "lazyvim.plugins.extras.lang.markdown",
"lazyvim.plugins.extras.lang.php",
"lazyvim.plugins.extras.lang.python",
"lazyvim.plugins.extras.lang.sql",
"lazyvim.plugins.extras.lang.toml",
"lazyvim.plugins.extras.lang.yaml", "lazyvim.plugins.extras.lang.yaml",
"lazyvim.plugins.extras.util.dot", "lazyvim.plugins.extras.util.dot",
"lazyvim.plugins.extras.util.gitui", "lazyvim.plugins.extras.util.gitui",
@@ -35,4 +28,4 @@
"NEWS.md": "11866" "NEWS.md": "11866"
}, },
"version": 8 "version": 8
} }
+20 -6
View File
@@ -1,7 +1,21 @@
-- Autocmds are automatically loaded on the VeryLazy event -- Autocmds are automatically loaded on the VeryLazy event
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua -- By this point noice.nvim has already replaced vim.notify
--
-- Add any additional autocmds here -- Log warnings and errors to file for debugging
-- with `vim.api.nvim_create_autocmd` local log_path = vim.fn.stdpath("log") .. "/nvim_errors.log"
-- local _notify = vim.notify
-- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults) vim.notify = function(msg, level, opts)
if level and level >= vim.log.levels.WARN then
local f = io.open(log_path, "a")
if f then
f:write(string.format(
"[%s] %s: %s\n",
os.date("%Y-%m-%d %H:%M:%S"),
level == vim.log.levels.ERROR and "ERROR" or "WARN",
tostring(msg)
))
f:close()
end
end
return _notify(msg, level, opts)
end
+1 -11
View File
@@ -1,12 +1,2 @@
-- Keymaps are automatically loaded on the VeryLazy event -- Keymaps are automatically loaded on the VeryLazy event
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua -- Use legendary.nvim to add named commands to the command palette
-- Add any additional keymaps here
--
-- vim.api.nvim_set_keymap("i", "jj", "<Esc>", { noremap = false })
local wk = require("which-key")
wk.add({
{ "<leader>N", group = "Notes" },
{ "<leader>Nt", ":Journal<CR>", desc = "Today" },
})
+2 -2
View File
@@ -18,8 +18,8 @@ vim.opt.rtp:prepend(lazypath)
-- Make sure to setup `mapleader` and `maplocalleader` before -- Make sure to setup `mapleader` and `maplocalleader` before
-- loading lazy.nvim so that mappings are correct. -- loading lazy.nvim so that mappings are correct.
-- This is also a good place to setup other settings (vim.opt) -- This is also a good place to setup other settings (vim.opt)
vim.g.mapleader = "," vim.g.mapleader = " "
vim.g.maplocalleader = "," vim.g.maplocalleader = "\\"
-- Setup lazy.nvim -- Setup lazy.nvim
require("lazy").setup({ require("lazy").setup({
-53
View File
@@ -1,53 +0,0 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
spec = {
-- add LazyVim and import its plugins
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
-- import/override with your plugins
{ import = "plugins" },
},
defaults = {
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
lazy = false,
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
-- have outdated releases, which may break your Neovim install.
version = false, -- always use the latest git commit
-- version = "*", -- try installing the latest stable version for plugins that support semver
},
install = { colorscheme = { "tokyonight", "habamax" } },
checker = {
enabled = true, -- check for plugin updates periodically
notify = false, -- notify on update
}, -- automatically check for plugin updates
performance = {
rtp = {
-- disable some rtp plugins
disabled_plugins = {
"gzip",
-- "matchit",
-- "matchparen",
-- "netrwPlugin",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
})
+4 -1
View File
@@ -1,3 +1,6 @@
-- Options are automatically loaded before lazy.nvim startup -- Options are automatically loaded before lazy.nvim startup
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua -- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
-- Add any additional options here vim.opt.relativenumber = true
vim.opt.scrolloff = 8
vim.opt.wrap = false
vim.opt.undofile = true
-17
View File
@@ -1,17 +0,0 @@
return {
"jackMort/ChatGPT.nvim",
event = "VeryLazy",
config = function()
require("chatgpt").setup({
openai_params = {
model = "gpt-4.1"
}
})
end,
dependencies = {
"MunifTanjim/nui.nvim",
"nvim-lua/plenary.nvim",
"folke/trouble.nvim", -- optional
"nvim-telescope/telescope.nvim"
}
}
-3
View File
@@ -1,3 +0,0 @@
return {
{ "zbirenbaum/copilot.lua", opts = { suggestion = { enabled = false } } },
}
-197
View File
@@ -1,197 +0,0 @@
-- since this is just an example spec, don't actually load anything here and return an empty spec
-- stylua: ignore
if true then return {} end
-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim
--
-- In your plugin files, you can:
-- * add extra plugins
-- * disable/enabled LazyVim plugins
-- * override the configuration of LazyVim plugins
return {
-- add gruvbox
{ "ellisonleao/gruvbox.nvim" },
-- Configure LazyVim to load gruvbox
{
"LazyVim/LazyVim",
opts = {
colorscheme = "gruvbox",
},
},
-- change trouble config
{
"folke/trouble.nvim",
-- opts will be merged with the parent spec
opts = { use_diagnostic_signs = true },
},
-- disable trouble
{ "folke/trouble.nvim", enabled = false },
-- override nvim-cmp and add cmp-emoji
{
"hrsh7th/nvim-cmp",
dependencies = { "hrsh7th/cmp-emoji" },
---@param opts cmp.ConfigSchema
opts = function(_, opts)
table.insert(opts.sources, { name = "emoji" })
end,
},
-- change some telescope options and a keymap to browse plugin files
{
"nvim-telescope/telescope.nvim",
keys = {
-- add a keymap to browse plugin files
-- stylua: ignore
{
"<leader>fp",
function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
desc = "Find Plugin File",
},
},
-- change some options
opts = {
defaults = {
layout_strategy = "horizontal",
layout_config = { prompt_position = "top" },
sorting_strategy = "ascending",
winblend = 0,
},
},
},
-- add pyright to lspconfig
{
"neovim/nvim-lspconfig",
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- pyright will be automatically installed with mason and loaded with lspconfig
pyright = {},
},
},
},
-- add tsserver and setup with typescript.nvim instead of lspconfig
{
"neovim/nvim-lspconfig",
dependencies = {
"jose-elias-alvarez/typescript.nvim",
init = function()
require("lazyvim.util").lsp.on_attach(function(_, buffer)
-- stylua: ignore
vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
end)
end,
},
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- tsserver will be automatically installed with mason and loaded with lspconfig
tsserver = {},
},
-- you can do any additional lsp server setup here
-- return true if you don't want this server to be setup with lspconfig
---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
setup = {
-- example to setup with typescript.nvim
tsserver = function(_, opts)
require("typescript").setup({ server = opts })
return true
end,
-- Specify * to use this function as a fallback for any server
-- ["*"] = function(server, opts) end,
},
},
},
-- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
-- treesitter, mason and typescript.nvim. So instead of the above, you can use:
{ import = "lazyvim.plugins.extras.lang.typescript" },
-- add more treesitter parsers
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"bash",
"html",
"javascript",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"query",
"regex",
"tsx",
"typescript",
"vim",
"yaml",
},
},
},
-- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
-- would overwrite `ensure_installed` with the new value.
-- If you'd rather extend the default config, use the code below instead:
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
-- add tsx and treesitter
vim.list_extend(opts.ensure_installed, {
"tsx",
"typescript",
})
end,
},
-- the opts function can also be used to change the default opts:
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function(_, opts)
table.insert(opts.sections.lualine_x, {
function()
return "😄"
end,
})
end,
},
-- or you can return new options to override all the defaults
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function()
return {
--[[add your custom lualine config here]]
}
end,
},
-- use mini.starter instead of alpha
{ import = "lazyvim.plugins.extras.ui.mini-starter" },
-- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc
{ import = "lazyvim.plugins.extras.lang.json" },
-- add any tools you want to have installed below
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"stylua",
"shellcheck",
"shfmt",
"flake8",
},
},
},
}
@@ -1,3 +0,0 @@
return {
"jghauser/follow-md-links.nvim",
}
-4
View File
@@ -1,4 +0,0 @@
return {
'nvim-lualine/lualine.nvim',
dependencies = { 'nvim-tree/nvim-web-devicons' }
}
-16
View File
@@ -1,16 +0,0 @@
return {
"nvim-neo-tree/neo-tree.nvim",
branch = "v3.x",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons", -- not strictly required, but recommended
"MunifTanjim/nui.nvim",
-- {"3rd/image.nvim", opts = {}}, -- Optional image support in preview window: See `# Preview Mode` for more information
},
lazy = false, -- neo-tree will lazily load itself
---@module "neo-tree"
---@type neotree.Config?
opts = {
-- fill any relevant options here
},
}
-66
View File
@@ -1,66 +0,0 @@
return {
"nvim-neorg/neorg",
lazy = false, -- Disable lazy loading as some `lazy.nvim` distributions set `lazy = true` by default
version = "*", -- Pin Neorg to the latest stable release
config = function()
require("neorg").setup({
load = {
["core.defaults"] = {}, -- Loads default behaviour
["core.concealer"] = {}, -- Adds pretty icons to your documents
["core.ui.calendar"] = {},
["core.completion"] = { config = { engine = { module_name = "external.lsp-completion" }, name = "[Norg]" } },
["core.esupports.metagen"] = { config = { type = "auto", update_date = true } },
["core.qol.toc"] = {},
["core.qol.todo_items"] = {},
["core.looking-glass"] = {},
["core.presenter"] = { config = { zen_mode = "zen-mode" } },
["core.export"] = {},
["core.export.markdown"] = { config = { extensions = "all" } },
["core.summary"] = {},
["core.tangle"] = { config = { report_on_empty = false } },
["core.dirman"] = { -- Manages Neorg workspaces
config = {
workspaces = {
notes = "~/Notes.neorg",
},
default_workspace = "notes",
},
},
["external.interim-ls"] = {
config = {
-- default config shown
completion_provider = {
-- Enable or disable the completion provider
enable = true,
-- Show file contents as documentation when you complete a file name
documentation = true,
-- Try to complete categories provided by Neorg Query. Requires `benlubas/neorg-query`
categories = false,
-- suggest heading completions from the given file for `{@x|}` where `|` is your cursor
-- and `x` is an alphanumeric character. `{@name}` expands to `[name]{:$/people:# name}`
people = {
enable = false,
-- path to the file you're like to use with the `{@x` syntax, relative to the
-- workspace root, without the `.norg` at the end.
-- ie. `folder/people` results in searching `$/folder/people.norg` for headings.
-- Note that this will change with your workspace, so it fails silently if the file
-- doesn't exist
path = "people",
},
},
},
},
["core.keybinds"] = {
config = {
default_keybinds = true,
neorg_leader = "<Leader>n", -- Change this to whatever you want
},
},
},
})
end,
}
-7
View File
@@ -1,7 +0,0 @@
return {
"akinsho/toggleterm.nvim",
tag = "*",
keys = {
{ "<leader>td", "<cmd>ToggleTerm size=40 dir=~ direction=horizontal<cr>", "Open Horizontal terminal in home directory"}
}
}
-3
View File
@@ -1,3 +0,0 @@
return {
"nvim-treesitter/nvim-treesitter"
}
-8
View File
@@ -1,8 +0,0 @@
return {
"folke/twilight.nvim",
opts = {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
},
}
-18
View File
@@ -1,18 +0,0 @@
return {
"folke/which-key.nvim",
event = "VeryLazy",
opts = {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
},
keys = {
{
{ "<leader>N", group = "Neorg" },
{ "<leader>Nt", ":Neorg journal today<CR>", desc = "Today" },
},
},
}
--{ "<leader>c", group = "ChatGPT" },
--{ "<leader>cc", ":ChatGPT<CR>", desc = "ChatGPT" },
--{ "<leader>ce", ":ChatGPTEditWithInstructions<CR>", desc = "ChatGPT Edit Selection with Instructions" },
-7
View File
@@ -1,7 +0,0 @@
return {
"rmagatti/auto-session",
lazy = false,
opts = {
suppressed_dirs = { "~/", "~/Projects", "~/Downloads", "/" },
},
}
+16
View File
@@ -0,0 +1,16 @@
return {
"greggh/claude-code.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
config = function()
require("claude-code").setup({
window = {
position = "vertical",
split_ratio = 0.4,
},
})
end,
keys = {
{ "<leader>cc", "<cmd>ClaudeCode<CR>", desc = "Claude Code: Toggle" },
{ "<leader>cf", "<cmd>ClaudeCodeFocus<CR>", desc = "Claude Code: Focus" },
},
}
-3
View File
@@ -1,3 +0,0 @@
return {
"benlubas/neorg-interim-ls",
}
-28
View File
@@ -1,28 +0,0 @@
return {
"jakobkhansen/journal.nvim",
config = function()
require("journal").setup({
filetype = "md", -- Filetype to use for new journal entries
root = "~/Notes/Personal/journals", -- Root directory for journal entries
date_format = "%Y-%m-%d", -- Date format for `:Journal <date-modifier>`
autocomplete_date_modifier = "end", -- "always"|"never"|"end". Enable date modifier autocompletion
-- Configuration for journal entries
journal = {
-- Default configuration for `:Journal <date-modifier>`
format = "%Y_%m_%d",
template = "# %A %B %d %Y\n",
frequency = { day = 1 },
-- Nested configurations for `:Journal <type> <type> ... <date-modifier>`
entries = {
day = {
format = "%Y_%m_%d", -- Format of the journal entry in the filesystem.
template = "# %A %B %d %Y\n", -- Optional. Template used when creating a new journal entry
frequency = { day = 1 }, -- Optional. The frequency of the journal entry. Used for `:Journal next`, `:Journal -2` etc
},
},
},
})
end,
}
+17
View File
@@ -0,0 +1,17 @@
return {
"mrjones2014/legendary.nvim",
priority = 10000,
lazy = false,
dependencies = { "nvim-telescope/telescope.nvim" },
opts = {
telescope = { auto_register_which_key = false },
keymaps = {
{ "<leader>cc", description = "Claude Code: Toggle terminal" },
{ "<leader>cf", description = "Claude Code: Focus terminal" },
},
},
keys = {
{ "<leader><leader>", "<cmd>Legendary<CR>", desc = "Command Palette" },
{ "<C-p>", "<cmd>Legendary<CR>", desc = "Command Palette", mode = { "n", "i" } },
},
}
-38
View File
@@ -1,38 +0,0 @@
-- Configuration Documentation https://github.com/jakewvincent/mkdnflow.nvim?tab=readme-ov-file#%EF%B8%8F-configuration
return {
"jakewvincent/mkdnflow.nvim",
config = function()
require("mkdnflow").setup({
-- Config goes here; leave blank for defaults
perspective = {
priority = "first",
root_tell = false,
},
new_file_template = {
use_template = true,
placeholders = {
before = {
title = "link_title",
date = "os_date",
},
after = {},
},
template = "# {{ title }}",
},
links = {
style = "markdown",
name_is_source = false,
conceal = false,
context = 0,
implicit_extension = nil,
transform_implicit = false,
transform_explicit = function(text)
text = text:gsub(" ", "-")
text = text:lower()
return text
end,
create_on_follow_failure = true,
},
})
end,
}
+15
View File
@@ -0,0 +1,15 @@
return {
"stevearc/oil.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" },
lazy = false,
opts = {
default_file_explorer = true,
columns = { "icon" },
view_options = {
show_hidden = true,
},
},
keys = {
{ "-", "<cmd>Oil<CR>", desc = "Open parent directory" },
},
}
-29
View File
@@ -14,20 +14,6 @@ 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
} }
@@ -43,21 +29,6 @@ configlink polybar
configlink picom.conf configlink picom.conf
configlink niri configlink niri
configlink noctalia configlink noctalia
configlink kanshi
configlink hypr
checkdir ~/.claude checkdir ~/.claude
link ~/.claude/settings.json ~/.dotfiles/claude/settings.json 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
+9 -12
View File
@@ -14,22 +14,19 @@ set -g @catppuccin_window_status_style "slanted"
# Load catppuccin # Load catppuccin
run ~/.config/tmux/plugins/catppuccin/tmux/catppuccin.tmux run ~/.config/tmux/plugins/catppuccin/tmux/catppuccin.tmux
# Status line on top (tmux only supports top/bottom, no vertical sidebar) # Make the status line pretty and add some modules
set-option -g status-position top set-option -g status-position top
set -g status-right-length 100 set -g status-right-length 100
set -g status-left-length 100 set -g status-left-length 100
set -g status-left "#[fg=#{@thm_teal},bg=#{@thm_crust}]#[fg=#{@thm_crust},bg=#{@thm_teal}] #(hostname -s) " set -g status-left "#[fg=#{@thm_teal},bg=#{@thm_crust}]#[fg=#{@thm_crust},bg=#{@thm_teal}] #(hostname -s) "
#set -g status-left "#[fg=$thm_green,bg=$thm_bg,nobold,nounderscore,noitalics]#[fg=$thm_bg,bg=$thm_green,nobold,nounderscore,noitalics] #[fg=$thm_fg,bg=$thm_bg]#(hostname -s) "
set -g status-right "#{E:@catppuccin_status_application}" set -g status-right "#{E:@catppuccin_status_application}"
#set -agF status-right "#{E:@catppuccin_status_cpu}"
set -ag status-right "#{E:@catppuccin_status_session}" set -ag status-right "#{E:@catppuccin_status_session}"
#set -ag status-right "#{E:@catppuccin_status_uptime}"
#set -agF status-right "#{E:@catppuccin_status_battery}"
# Per-window agent indicator: 🤖 = busy, ⏸ = waiting for input #run ~/.config/tmux/plugins/tmux-plugins/tmux-cpu/cpu.tmux
set -g @catppuccin_window_text " #W#(~/.local/bin/tmux-window-agent-status '#{session_name}' '#I')" #run ~/.config/tmux/plugins/tmux-plugins/tmux-battery/battery.tmux
set -g @catppuccin_window_current_text " #W#(~/.local/bin/tmux-window-agent-status '#{session_name}' '#I')"
# Refresh status regularly so agent indicators stay current
set -g status-interval 2
# Vertical window switcher ("sidebar"): prefix+Tab opens a popup listing all
# windows top-to-bottom with agent status; Enter jumps to the selected window
bind-key Tab choose-tree -Zw -F "#{?window_format,#W#(~/.local/bin/tmux-window-agent-status '#{session_name}' '#{window_index}'),}"