feat(dotfiles): import env layer as stow-style packages with deploy.sh
Import Dankware's environment layer into the repo as home-relative package trees (niri, gtk-3/4, ghostty, alacritty, fish, zsh, bash, profile, systemd-user, dconf). scripts/deploy.sh implements stow-equivalent semantics (check|adopt|sync modes): identical files adopt to symlinks, new files link, divergent files quarantine-and-replace under .quarantine/<host>/<ts>/ (gitignored). zz-<hostname> override packages deploy last with override semantics. Secrets never enter git: GITEA_TOKEN moved from .zshrc into untracked ~/.config/environment.d/secrets.env (0600); tracked .zshrc sources it guarded. core.hooksPath armed by deploy.sh so the pre-commit secret gate is live on every machine that deploys.
This commit is contained in:
@@ -53,3 +53,6 @@ puppeteer/
|
||||
.AGENTTRASH/
|
||||
*.save
|
||||
*.bak-*
|
||||
|
||||
# deploy quarantine — never tracked
|
||||
.quarantine/
|
||||
|
||||
@@ -23,6 +23,8 @@ Dankware is the primary host — this repository lives at `~/.omp/` and drives t
|
||||
│ ├── managed-skills/ # Managed skills (SKILL.md bundles)
|
||||
│ ├── models.db # Model cache
|
||||
│ └── sessions/ # Persistent session state
|
||||
├── dotfiles/ # stow-style env-layer packages (home-relative trees)
|
||||
│ └── deploy via scripts/deploy.sh (check|adopt|sync; quarantine-and-replace)
|
||||
├── omp-docs/ # Knowledge base (source of truth)
|
||||
│ ├── index.md # KB index — start here
|
||||
│ ├── system/ # Fleet hardware, OS, network
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
[general]
|
||||
working_directory = "None"
|
||||
live_config_reload = true
|
||||
|
||||
[env]
|
||||
TERM = "xterm-256color"
|
||||
WINIT_X11_SCALE_FACTOR = "1.0"
|
||||
|
||||
[window]
|
||||
dimensions = { columns = 100, lines = 30 }
|
||||
dynamic_padding = true
|
||||
decorations = "Full"
|
||||
opacity = 0.8
|
||||
title = "Alacritty@CachyOS"
|
||||
class = { instance = "Alacritty", general = "Alacritty" }
|
||||
decorations_theme_variant = "Dark"
|
||||
|
||||
[scrolling]
|
||||
history = 10000
|
||||
multiplier = 3
|
||||
|
||||
[font]
|
||||
normal = { family = "monospace", style = "Regular" }
|
||||
bold = { family = "monospace", style = "Bold" }
|
||||
italic = { family = "monospace", style = "Italic" }
|
||||
bold_italic = { family = "monospace", style = "Bold Italic" }
|
||||
size = 12.0
|
||||
|
||||
[colors]
|
||||
draw_bold_text_with_bright_colors = true
|
||||
|
||||
[colors.primary]
|
||||
background = "0x2E3440"
|
||||
foreground = "0xD8DEE9"
|
||||
|
||||
[colors.normal]
|
||||
black = "0x3B4252"
|
||||
red = "0xBF616A"
|
||||
green = "0xA3BE8C"
|
||||
yellow = "0xEBCB8B"
|
||||
blue = "0x81A1C1"
|
||||
magenta = "0xB48EAD"
|
||||
cyan = "0x88C0D0"
|
||||
white = "0xE5E9F0"
|
||||
|
||||
[colors.bright]
|
||||
black = "0x4C566A"
|
||||
red = "0xBF616A"
|
||||
green = "0xA3BE8C"
|
||||
yellow = "0xEBCB8B"
|
||||
blue = "0x81A1C1"
|
||||
magenta = "0xB48EAD"
|
||||
cyan = "0x8FBCBB"
|
||||
white = "0xECEFF4"
|
||||
|
||||
[selection]
|
||||
semantic_escape_chars = ",│`|:\"' ()[]{}<>\t"
|
||||
save_to_clipboard = true
|
||||
|
||||
[cursor]
|
||||
style = { shape = "Underline", blinking = "Off" }
|
||||
unfocused_hollow = true
|
||||
thickness = 0.15
|
||||
|
||||
[mouse]
|
||||
hide_when_typing = true
|
||||
bindings = [
|
||||
{ mouse = "Middle", mods = "None", action = "PasteSelection" },
|
||||
]
|
||||
|
||||
[keyboard]
|
||||
bindings = [
|
||||
{ key = "Paste", mods = "None", action = "Paste" },
|
||||
{ key = "Copy", mods = "None", action = "Copy" },
|
||||
{ key = "L", mods = "Control", action = "ClearLogNotice" },
|
||||
{ key = "L", mods = "Control", mode = "~Vi", chars = "\f" },
|
||||
{ key = "PageUp", mods = "Shift", mode = "~Alt", action = "ScrollPageUp" },
|
||||
{ key = "PageDown", mods = "Shift", mode = "~Alt", action = "ScrollPageDown" },
|
||||
{ key = "Home", mods = "Shift", mode = "~Alt", action = "ScrollToTop" },
|
||||
{ key = "End", mods = "Shift", mode = "~Alt", action = "ScrollToBottom" },
|
||||
{ key = "V", mods = "Control|Shift", action = "Paste" },
|
||||
{ key = "C", mods = "Control|Shift", action = "Copy" },
|
||||
{ key = "F", mods = "Control|Shift", action = "SearchForward" },
|
||||
{ key = "B", mods = "Control|Shift", action = "SearchBackward" },
|
||||
{ key = "C", mods = "Control|Shift", mode = "Vi", action = "ClearSelection" },
|
||||
{ key = "Key0", mods = "Control", action = "ResetFontSize" },
|
||||
]
|
||||
@@ -0,0 +1,14 @@
|
||||
#
|
||||
# ~/.bashrc
|
||||
#
|
||||
|
||||
# If not running interactively, don't do anything
|
||||
[[ $- != *i* ]] && return
|
||||
|
||||
alias ls='ls --color=auto'
|
||||
alias grep='grep --color=auto'
|
||||
PS1='[\u@\h \W]\$ '
|
||||
|
||||
# peon-ping quick controls
|
||||
alias peon="bash /home/dank/.claude/hooks/peon-ping/peon.sh"
|
||||
[ -f /home/dank/.claude/hooks/peon-ping/completions.bash ] && source /home/dank/.claude/hooks/peon-ping/completions.bash
|
||||
@@ -0,0 +1,39 @@
|
||||
[org/gnome/calculator]
|
||||
base=10
|
||||
button-mode='basic'
|
||||
source-units=['degree']
|
||||
target-units=['radian']
|
||||
unit-category='angle'
|
||||
window-maximized=false
|
||||
window-size=(360, -1)
|
||||
|
||||
[org/gnome/desktop/background]
|
||||
picture-options='zoom'
|
||||
picture-uri='file:///home/dank/.config/background'
|
||||
picture-uri-dark='file:///home/dank/.config/background'
|
||||
|
||||
[org/gnome/desktop/interface]
|
||||
color-scheme='prefer-dark'
|
||||
cursor-size=36
|
||||
cursor-theme='capitaine-cursors'
|
||||
gtk-theme='adw-gtk3-dark'
|
||||
|
||||
[org/gnome/nautilus/list-view]
|
||||
default-column-order=['name', 'size', 'type', 'owner', 'group', 'permissions', 'date_modified', 'date_accessed', 'date_created', 'recency', 'detailed_type']
|
||||
default-visible-columns=['name', 'size', 'type', 'date_modified']
|
||||
|
||||
[org/gnome/nautilus/preferences]
|
||||
default-folder-viewer='list-view'
|
||||
migrated-gtk-settings=true
|
||||
|
||||
[org/gnome/nautilus/window-state]
|
||||
initial-size=(890, 550)
|
||||
initial-size-file-chooser=(890, 550)
|
||||
maximized=false
|
||||
|
||||
[org/gnome/portal/filechooser/firefox]
|
||||
last-folder-path='/home/dank/Downloads'
|
||||
|
||||
[org/gtk/gtk4/settings/file-chooser]
|
||||
show-hidden=false
|
||||
sort-directories-first=false
|
||||
@@ -0,0 +1,216 @@
|
||||
# peon-ping tab completion for fish shell
|
||||
|
||||
# Helper: true when no subcommand has been given yet
|
||||
function __peon_no_subcommand
|
||||
set -l cmd (commandline -opc)
|
||||
test (count $cmd) -eq 1
|
||||
end
|
||||
|
||||
# Helper: true when the given subcommand is active
|
||||
function __peon_using_subcommand
|
||||
set -l cmd (commandline -opc)
|
||||
test (count $cmd) -ge 2; and test $cmd[2] = $argv[1]
|
||||
end
|
||||
|
||||
# Helper: true when packs subcommand is active and second arg matches
|
||||
function __peon_packs_subcommand
|
||||
set -l cmd (commandline -opc)
|
||||
test (count $cmd) -ge 3; and test $cmd[2] = packs; and test $cmd[3] = $argv[1]
|
||||
end
|
||||
|
||||
# Disable file completions
|
||||
complete -c peon -f
|
||||
|
||||
# Top-level commands (only when no subcommand given)
|
||||
complete -c peon -n __peon_no_subcommand -a pause -d "Mute sounds"
|
||||
complete -c peon -n __peon_no_subcommand -a resume -d "Unmute sounds"
|
||||
complete -c peon -n __peon_no_subcommand -a mute -d "Alias for 'pause' — mute sounds"
|
||||
complete -c peon -n __peon_no_subcommand -a unmute -d "Alias for 'resume' — unmute sounds"
|
||||
complete -c peon -n __peon_no_subcommand -a toggle -d "Toggle mute on/off"
|
||||
complete -c peon -n __peon_no_subcommand -a status -d "Show current status"
|
||||
complete -c peon -n "__peon_using_subcommand status" -l verbose -d "Show full details"
|
||||
complete -c peon -n __peon_no_subcommand -a volume -d "Get or set volume level"
|
||||
complete -c peon -n __peon_no_subcommand -a rotation -d "Get or set pack rotation mode"
|
||||
complete -c peon -n __peon_no_subcommand -a packs -d "Manage sound packs"
|
||||
complete -c peon -n __peon_no_subcommand -a sounds -d "Enable/disable individual sounds in a pack"
|
||||
complete -c peon -n __peon_no_subcommand -a notifications -d "Control desktop notifications"
|
||||
complete -c peon -n __peon_no_subcommand -a mobile -d "Configure mobile push notifications"
|
||||
complete -c peon -n __peon_no_subcommand -a debug -d "Toggle debug logging"
|
||||
complete -c peon -n __peon_no_subcommand -a logs -d "View or manage log files"
|
||||
complete -c peon -n __peon_no_subcommand -a relay -d "Start audio relay for devcontainers"
|
||||
complete -c peon -n __peon_no_subcommand -a trainer -d "Exercise trainer mode"
|
||||
complete -c peon -n __peon_no_subcommand -a update -d "Update peon-ping and refresh sound packs"
|
||||
complete -c peon -n __peon_no_subcommand -a help -d "Show help message"
|
||||
|
||||
# packs subcommands
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a list -d "List installed sound packs"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a use -d "Switch to a specific pack"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a next -d "Cycle to the next pack"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a install -d "Download and install new packs"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a install-local -d "Install a pack from a local directory" -F
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a remove -d "Remove specific packs"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a rotation -d "Manage pack rotation list"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a bind -d "Bind a pack to the current directory"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a unbind -d "Remove pack binding for current directory"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a bindings -d "List all directory-to-pack bindings"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a ide-bind -d "Bind a pack to an IDE id"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a ide-unbind -d "Remove an IDE binding"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a ide-bindings -d "List all IDE-to-pack bindings"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a exclude -d "Manage path exclusions for path_rules"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a community -d "List all packs from registry"
|
||||
complete -c peon -n "__peon_using_subcommand packs" -a search -d "Search registry packs by name"
|
||||
|
||||
# packs rotation subcommands
|
||||
complete -c peon -n "__peon_packs_subcommand rotation" -a list -d "Show current rotation list and mode"
|
||||
complete -c peon -n "__peon_packs_subcommand rotation" -a add -d "Add pack(s) to rotation"
|
||||
complete -c peon -n "__peon_packs_subcommand rotation" -a remove -d "Remove pack(s) from rotation"
|
||||
complete -c peon -n "__peon_packs_subcommand rotation" -a clear -d "Clear all packs from rotation"
|
||||
|
||||
# packs rotation add --install flag
|
||||
function __peon_rotation_add
|
||||
set -l cmd (commandline -opc)
|
||||
test (count $cmd) -ge 4; and test $cmd[2] = packs; and test $cmd[3] = rotation; and test $cmd[4] = add
|
||||
end
|
||||
complete -c peon -n __peon_rotation_add -a "--install" -d "Install from registry if needed"
|
||||
|
||||
# packs install options
|
||||
complete -c peon -n "__peon_packs_subcommand install" -a "--all" -d "Install all packs from registry"
|
||||
complete -c peon -n "__peon_packs_subcommand install" -a "--lang" -d "Filter packs by language (e.g. --lang=en,fr)"
|
||||
|
||||
# packs list options
|
||||
complete -c peon -n "__peon_packs_subcommand list" -a "--registry" -d "List all available packs from registry"
|
||||
complete -c peon -n "__peon_packs_subcommand list" -a "--lang" -d "Filter by language (e.g. --lang=en)"
|
||||
|
||||
# Pack name completions for 'packs use' and 'packs remove'
|
||||
complete -c peon -n "__peon_packs_subcommand use" -a "(
|
||||
set -l packs_dir (set -q CLAUDE_PEON_DIR; and echo \$CLAUDE_PEON_DIR; or echo \$HOME/.claude/hooks/peon-ping)/packs
|
||||
if not test -d \$packs_dir; and test -d \$HOME/.openpeon/packs
|
||||
set packs_dir \$HOME/.openpeon/packs
|
||||
end
|
||||
if test -d \$packs_dir
|
||||
for manifest in \$packs_dir/*/manifest.json \$packs_dir/*/openpeon.json
|
||||
basename (dirname \$manifest)
|
||||
end
|
||||
end
|
||||
)"
|
||||
complete -c peon -n "__peon_packs_subcommand bind" -a "(
|
||||
set -l packs_dir (set -q CLAUDE_PEON_DIR; and echo \$CLAUDE_PEON_DIR; or echo \$HOME/.claude/hooks/peon-ping)/packs
|
||||
if not test -d \$packs_dir; and test -d \$HOME/.openpeon/packs
|
||||
set packs_dir \$HOME/.openpeon/packs
|
||||
end
|
||||
if test -d \$packs_dir
|
||||
for manifest in \$packs_dir/*/manifest.json \$packs_dir/*/openpeon.json
|
||||
basename (dirname \$manifest)
|
||||
end
|
||||
end
|
||||
)"
|
||||
complete -c peon -n "__peon_packs_subcommand ide-bind" -a "claude codex cursor opencode kilo kiro gemini copilot windsurf kimi antigravity amp deepagents openclaw rovodev"
|
||||
complete -c peon -n "__peon_packs_subcommand ide-unbind" -a "claude codex cursor opencode kilo kiro gemini copilot windsurf kimi antigravity amp deepagents openclaw rovodev"
|
||||
complete -c peon -n "__peon_packs_subcommand ide-bind; and test (count (commandline -opc)) -eq 4" -a "(
|
||||
set -l packs_dir (set -q CLAUDE_PEON_DIR; and echo \$CLAUDE_PEON_DIR; or echo \$HOME/.claude/hooks/peon-ping)/packs
|
||||
if not test -d \$packs_dir; and test -d \$HOME/.openpeon/packs
|
||||
set packs_dir \$HOME/.openpeon/packs
|
||||
end
|
||||
if test -d \$packs_dir
|
||||
for manifest in \$packs_dir/*/manifest.json \$packs_dir/*/openpeon.json
|
||||
basename (dirname \$manifest)
|
||||
end
|
||||
end
|
||||
)"
|
||||
complete -c peon -n "__peon_packs_subcommand ide-bind; and test (count (commandline -opc)) -eq 5" -a "--install" -d "Install from registry if needed"
|
||||
complete -c peon -n "__peon_packs_subcommand exclude" -a "add remove list"
|
||||
complete -c peon -n "__peon_packs_subcommand remove" -a "(
|
||||
set -l packs_dir (set -q CLAUDE_PEON_DIR; and echo \$CLAUDE_PEON_DIR; or echo \$HOME/.claude/hooks/peon-ping)/packs
|
||||
if not test -d \$packs_dir; and test -d \$HOME/.openpeon/packs
|
||||
set packs_dir \$HOME/.openpeon/packs
|
||||
end
|
||||
if test -d \$packs_dir
|
||||
for manifest in \$packs_dir/*/manifest.json \$packs_dir/*/openpeon.json
|
||||
basename (dirname \$manifest)
|
||||
end
|
||||
end
|
||||
)"
|
||||
|
||||
# debug subcommands
|
||||
complete -c peon -n "__peon_using_subcommand debug" -a on -d "Enable debug logging"
|
||||
complete -c peon -n "__peon_using_subcommand debug" -a off -d "Disable debug logging"
|
||||
complete -c peon -n "__peon_using_subcommand debug" -a status -d "Show debug logging status"
|
||||
|
||||
# logs subcommands
|
||||
complete -c peon -n "__peon_using_subcommand logs" -a "--last" -d "Show last N lines from latest log"
|
||||
complete -c peon -n "__peon_using_subcommand logs" -a "--session" -d "Show entries for a session"
|
||||
complete -c peon -n "__peon_using_subcommand logs" -a "--prune" -d "Delete old log files"
|
||||
complete -c peon -n "__peon_using_subcommand logs" -a "--clear" -d "Delete all log files"
|
||||
|
||||
# mobile subcommands
|
||||
complete -c peon -n "__peon_using_subcommand mobile" -a ntfy -d "Set up ntfy.sh notifications"
|
||||
complete -c peon -n "__peon_using_subcommand mobile" -a pushover -d "Set up Pushover notifications"
|
||||
complete -c peon -n "__peon_using_subcommand mobile" -a telegram -d "Set up Telegram notifications"
|
||||
complete -c peon -n "__peon_using_subcommand mobile" -a on -d "Enable mobile notifications"
|
||||
complete -c peon -n "__peon_using_subcommand mobile" -a off -d "Disable mobile notifications"
|
||||
complete -c peon -n "__peon_using_subcommand mobile" -a status -d "Show mobile config"
|
||||
complete -c peon -n "__peon_using_subcommand mobile" -a test -d "Send test notification"
|
||||
|
||||
# rotation subcommands
|
||||
complete -c peon -n "__peon_using_subcommand rotation" -a random -d "Pick a random pack each session (default)"
|
||||
complete -c peon -n "__peon_using_subcommand rotation" -a round-robin -d "Cycle through packs in order"
|
||||
complete -c peon -n "__peon_using_subcommand rotation" -a shuffle -d "Pick a random pack for every sound event"
|
||||
complete -c peon -n "__peon_using_subcommand rotation" -a session_override -d "Assign pack per session via /peon-ping-use"
|
||||
|
||||
# Helper: true when notifications subcommand is active and second arg matches
|
||||
function __peon_notif_subcommand
|
||||
set -l cmd (commandline -opc)
|
||||
test (count $cmd) -ge 3; and test $cmd[2] = notifications; and test $cmd[3] = $argv[1]
|
||||
end
|
||||
|
||||
# notifications subcommands
|
||||
complete -c peon -n "__peon_using_subcommand notifications" -a on -d "Enable desktop notifications"
|
||||
complete -c peon -n "__peon_using_subcommand notifications" -a off -d "Disable desktop notifications"
|
||||
complete -c peon -n "__peon_using_subcommand notifications" -a overlay -d "Use large overlay banners"
|
||||
complete -c peon -n "__peon_using_subcommand notifications" -a standard -d "Use standard system notifications"
|
||||
complete -c peon -n "__peon_using_subcommand notifications" -a position -d "Get or set overlay position"
|
||||
complete -c peon -n "__peon_using_subcommand notifications" -a dismiss -d "Get or set auto-dismiss time"
|
||||
complete -c peon -n "__peon_using_subcommand notifications" -a label -d "Get, set, or reset notification label"
|
||||
complete -c peon -n "__peon_using_subcommand notifications" -a test -d "Send test notification"
|
||||
|
||||
# notifications position values
|
||||
complete -c peon -n "__peon_notif_subcommand position" -a "top-center" -d "Top center (default)"
|
||||
complete -c peon -n "__peon_notif_subcommand position" -a "top-right" -d "Top right corner"
|
||||
complete -c peon -n "__peon_notif_subcommand position" -a "top-left" -d "Top left corner"
|
||||
complete -c peon -n "__peon_notif_subcommand position" -a "bottom-right" -d "Bottom right corner"
|
||||
complete -c peon -n "__peon_notif_subcommand position" -a "bottom-left" -d "Bottom left corner"
|
||||
complete -c peon -n "__peon_notif_subcommand position" -a "bottom-center" -d "Bottom center"
|
||||
|
||||
# notifications label values
|
||||
complete -c peon -n "__peon_notif_subcommand label" -a reset -d "Clear label override"
|
||||
|
||||
# logs --session --all (conditional: only after --session)
|
||||
complete -c peon -n "__peon_using_subcommand logs; and __fish_seen_argument -l session" -a "--all" -d "Search across all log files"
|
||||
|
||||
# trainer subcommands
|
||||
complete -c peon -n "__peon_using_subcommand trainer" -a on -d "Enable trainer mode"
|
||||
complete -c peon -n "__peon_using_subcommand trainer" -a off -d "Disable trainer mode"
|
||||
complete -c peon -n "__peon_using_subcommand trainer" -a status -d "Show today's progress"
|
||||
complete -c peon -n "__peon_using_subcommand trainer" -a log -d "Log completed reps"
|
||||
complete -c peon -n "__peon_using_subcommand trainer" -a goal -d "Set exercise goals"
|
||||
complete -c peon -n "__peon_using_subcommand trainer" -a help -d "Show trainer help"
|
||||
|
||||
# Helper: true when trainer goal subcommand is active
|
||||
function __peon_trainer_goal
|
||||
set -l cmd (commandline -opc)
|
||||
test (count $cmd) -ge 3; and test $cmd[2] = trainer; and test $cmd[3] = goal
|
||||
end
|
||||
|
||||
# sounds subcommands
|
||||
complete -c peon -n "__peon_using_subcommand sounds" -a list -d "List sounds in a pack"
|
||||
complete -c peon -n "__peon_using_subcommand sounds" -a disable -d "Disable an individual sound"
|
||||
complete -c peon -n "__peon_using_subcommand sounds" -a enable -d "Re-enable an individual sound"
|
||||
|
||||
# trainer goal weekday completions (short names)
|
||||
complete -c peon -n __peon_trainer_goal -a mon -d "Monday"
|
||||
complete -c peon -n __peon_trainer_goal -a tue -d "Tuesday"
|
||||
complete -c peon -n __peon_trainer_goal -a wed -d "Wednesday"
|
||||
complete -c peon -n __peon_trainer_goal -a thu -d "Thursday"
|
||||
complete -c peon -n __peon_trainer_goal -a fri -d "Friday"
|
||||
complete -c peon -n __peon_trainer_goal -a sat -d "Saturday"
|
||||
complete -c peon -n __peon_trainer_goal -a sun -d "Sunday"
|
||||
@@ -0,0 +1,10 @@
|
||||
source /usr/share/cachyos-fish-config/cachyos-config.fish
|
||||
|
||||
# overwrite greeting
|
||||
# potentially disabling fastfetch
|
||||
#function fish_greeting
|
||||
# # smth smth
|
||||
#end
|
||||
|
||||
# peon-ping quick controls
|
||||
function peon; bash /home/dank/.claude/hooks/peon-ping/peon.sh $argv; end
|
||||
@@ -0,0 +1 @@
|
||||
theme = Retro Legends
|
||||
@@ -0,0 +1,75 @@
|
||||
# Ghostty Configuration
|
||||
# Clean, simplified config for Terminess Nerd Font Mono with Catppuccin Mocha
|
||||
|
||||
# ── Theme ──────────────────────────────────────────────────────────────────────
|
||||
theme = "Retro Legends"
|
||||
|
||||
# ── Font ───────────────────────────────────────────────────────────────────────
|
||||
font-family = "Terminess Nerd Font Mono"
|
||||
font-size = 14
|
||||
font-feature = "calt=1"
|
||||
font-feature = "ss01=1"
|
||||
font-feature = "ss02=1"
|
||||
font-feature = "ss03=1"
|
||||
font-feature = "ss04=1"
|
||||
font-feature = "ss05=1"
|
||||
font-feature = "ss06=1"
|
||||
font-feature = "ss07=1"
|
||||
font-feature = "ss08=1"
|
||||
font-feature = "ss09=1"
|
||||
font-feature = "ss10=1"
|
||||
font-feature = "zero=1"
|
||||
font-feature = "onum=1"
|
||||
font-feature = "liga=1"
|
||||
|
||||
# ── Appearance ─────────────────────────────────────────────────────────────────
|
||||
window-padding-x = 12
|
||||
window-padding-y = 12
|
||||
window-padding-balance = true
|
||||
window-padding-color = extend
|
||||
background-opacity = 0.92
|
||||
background-blur = 25
|
||||
unfocused-split-opacity = 0.7
|
||||
window-theme = ghostty
|
||||
window-titlebar-background = "#181825"
|
||||
window-titlebar-foreground = "#cdd6f4"
|
||||
|
||||
# ── Scrollback & Scrolling ─────────────────────────────────────────────────────
|
||||
scrollback-limit = 50000000
|
||||
scroll-to-bottom = keystroke,no-output
|
||||
mouse-scroll-multiplier = precision:2,discrete:6
|
||||
|
||||
# ── Selection & Mouse ──────────────────────────────────────────────────────────
|
||||
mouse-hide-while-typing = true
|
||||
|
||||
# ── Bell ───────────────────────────────────────────────────────────────────────
|
||||
bell-features = attention,title
|
||||
|
||||
# ── Palette ────────────────────────────────────────────────────────────────────
|
||||
palette-generate = true
|
||||
|
||||
# ── Icon Adjustment ────────────────────────────────────────────────────────────
|
||||
adjust-icon-height = -3
|
||||
|
||||
# ── Shell Integration ──────────────────────────────────────────────────────────
|
||||
shell-integration = detect
|
||||
shell-integration-features = cursor,sudo,title,ssh-env,ssh-terminfo,path
|
||||
|
||||
# ── Link Previews ──────────────────────────────────────────────────────────────
|
||||
link-url = true
|
||||
link-previews = osc8
|
||||
|
||||
# ── Notifications ──────────────────────────────────────────────────────────────
|
||||
notify-on-command-finish = unfocused
|
||||
notify-on-command-finish-action = bell,notify
|
||||
notify-on-command-finish-after = 3s
|
||||
|
||||
# ── Resize Overlay ─────────────────────────────────────────────────────────────
|
||||
resize-overlay = after-first
|
||||
resize-overlay-position = center
|
||||
resize-overlay-duration = 500ms
|
||||
|
||||
# ── Keybinds ───────────────────────────────────────────────────────────────────
|
||||
# Quick terminal toggle — uses the quick-terminal action
|
||||
# Note: quick-terminal action toggles the quick terminal popup
|
||||
# keybind = super+grave=quick-terminal
|
||||
@@ -0,0 +1 @@
|
||||
@import url("noctalia.css");
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* GTK Colors (GTK3)
|
||||
* Generated by Noctalia's Template Processor
|
||||
* stylelint-disable at-rule-no-unknown
|
||||
*/
|
||||
|
||||
@define-color accent_color #bfc2ff;
|
||||
@define-color accent_bg_color #bfc2ff;
|
||||
@define-color accent_fg_color #23276f;
|
||||
|
||||
@define-color destructive_bg_color #ffb4ab;
|
||||
@define-color destructive_fg_color #690005;
|
||||
|
||||
@define-color error_bg_color #ffb4ab;
|
||||
@define-color error_fg_color #690005;
|
||||
|
||||
@define-color window_bg_color #131318;
|
||||
@define-color window_fg_color #e4e1e8;
|
||||
|
||||
@define-color view_bg_color #131318;
|
||||
@define-color view_fg_color #e4e1e8;
|
||||
|
||||
@define-color headerbar_bg_color #131318;
|
||||
@define-color headerbar_fg_color #e4e1e8;
|
||||
@define-color headerbar_backdrop_color @window_bg_color;
|
||||
|
||||
@define-color popover_bg_color #1f1f24;
|
||||
@define-color popover_fg_color #e4e1e8;
|
||||
|
||||
@define-color card_bg_color #1f1f24;
|
||||
@define-color card_fg_color #e4e1e8;
|
||||
|
||||
@define-color dialog_bg_color #131318;
|
||||
@define-color dialog_fg_color #e4e1e8;
|
||||
|
||||
@define-color overview_bg_color #1f1f24;
|
||||
@define-color overview_fg_color #e4e1e8;
|
||||
|
||||
@define-color sidebar_bg_color #1f1f24;
|
||||
@define-color sidebar_fg_color #e4e1e8;
|
||||
@define-color sidebar_backdrop_color @window_bg_color;
|
||||
@define-color sidebar_border_color @window_bg_color;
|
||||
|
||||
@define-color secondary_sidebar_bg_color #131318;
|
||||
@define-color secondary_sidebar_fg_color #e4e1e8;
|
||||
|
||||
/* Backdrop/unfocused states */
|
||||
@define-color theme_unfocused_fg_color @window_fg_color;
|
||||
@define-color theme_unfocused_text_color @view_fg_color;
|
||||
@define-color theme_unfocused_bg_color @window_bg_color;
|
||||
@define-color theme_unfocused_base_color @window_bg_color;
|
||||
@define-color theme_unfocused_selected_bg_color @accent_bg_color;
|
||||
@define-color theme_unfocused_selected_fg_color @accent_fg_color;
|
||||
@@ -0,0 +1,6 @@
|
||||
[Settings]
|
||||
gtk-application-prefer-dark-theme=true
|
||||
gtk-cursor-theme-name=capitaine-cursors
|
||||
gtk-font-name=Noto Sans 10
|
||||
gtk-theme-name=adw-gtk3
|
||||
gtk-cursor-theme-size=36
|
||||
@@ -0,0 +1 @@
|
||||
@import url("noctalia.css");
|
||||
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* GTK Colors (GTK4)
|
||||
* Generated by Noctalia's Template Processor
|
||||
* stylelint-disable at-rule-no-unknown
|
||||
*/
|
||||
|
||||
@define-color accent_color #bfc2ff;
|
||||
@define-color accent_bg_color #bfc2ff;
|
||||
@define-color accent_fg_color #23276f;
|
||||
|
||||
@define-color destructive_bg_color #ffb4ab;
|
||||
@define-color destructive_fg_color #690005;
|
||||
|
||||
@define-color error_bg_color #ffb4ab;
|
||||
@define-color error_fg_color #690005;
|
||||
|
||||
@define-color window_bg_color #131318;
|
||||
@define-color window_fg_color #e4e1e8;
|
||||
|
||||
@define-color view_bg_color #131318;
|
||||
@define-color view_fg_color #e4e1e8;
|
||||
|
||||
@define-color headerbar_bg_color #131318;
|
||||
@define-color headerbar_fg_color #e4e1e8;
|
||||
@define-color headerbar_backdrop_color @window_bg_color;
|
||||
|
||||
@define-color popover_bg_color #1f1f24;
|
||||
@define-color popover_fg_color #e4e1e8;
|
||||
|
||||
@define-color card_bg_color #1f1f24;
|
||||
@define-color card_fg_color #e4e1e8;
|
||||
|
||||
@define-color dialog_bg_color #131318;
|
||||
@define-color dialog_fg_color #e4e1e8;
|
||||
|
||||
@define-color overview_bg_color #1f1f24;
|
||||
@define-color overview_fg_color #e4e1e8;
|
||||
|
||||
@define-color sidebar_bg_color #1f1f24;
|
||||
@define-color sidebar_fg_color #e4e1e8;
|
||||
@define-color sidebar_backdrop_color @window_bg_color;
|
||||
@define-color sidebar_border_color @window_bg_color;
|
||||
|
||||
@define-color secondary_sidebar_bg_color #131318;
|
||||
@define-color secondary_sidebar_fg_color #e4e1e8;
|
||||
|
||||
/* Backdrop/unfocused states */
|
||||
@define-color theme_unfocused_fg_color @window_fg_color;
|
||||
@define-color theme_unfocused_text_color @view_fg_color;
|
||||
@define-color theme_unfocused_bg_color @window_bg_color;
|
||||
@define-color theme_unfocused_base_color @window_bg_color;
|
||||
@define-color theme_unfocused_selected_bg_color @accent_bg_color;
|
||||
@define-color theme_unfocused_selected_fg_color @accent_fg_color;
|
||||
|
||||
:root {
|
||||
--accent-color: #bfc2ff;
|
||||
--accent-bg-color: #bfc2ff;
|
||||
--accent-fg-color: #23276f;
|
||||
|
||||
--destructive-bg-color: #ffb4ab;
|
||||
--destructive-fg-color: #690005;
|
||||
|
||||
--error-bg-color: #ffb4ab;
|
||||
--error-fg-color: #690005;
|
||||
--error-color: #ffb4ab;
|
||||
|
||||
--window-bg-color: #131318;
|
||||
--window-fg-color: #e4e1e8;
|
||||
|
||||
--view-bg-color: #131318;
|
||||
--view-fg-color: #e4e1e8;
|
||||
|
||||
--headerbar-bg-color: #131318;
|
||||
--headerbar-fg-color: #e4e1e8;
|
||||
--headerbar-backdrop-color: @window_bg_color;
|
||||
|
||||
--popover-bg-color: #1f1f24;
|
||||
--popover-fg-color: #e4e1e8;
|
||||
|
||||
--card-bg-color: #1f1f24;
|
||||
--card-fg-color: #e4e1e8;
|
||||
|
||||
--dialog-bg-color: #131318;
|
||||
--dialog-fg-color: #e4e1e8;
|
||||
|
||||
--overview-bg-color: #1f1f24;
|
||||
--overview-fg-color: #e4e1e8;
|
||||
|
||||
--sidebar-bg-color: #1f1f24;
|
||||
--sidebar-fg-color: #e4e1e8;
|
||||
--sidebar-backdrop-color: @window_bg_color;
|
||||
--sidebar-border-color: @window_bg_color;
|
||||
|
||||
--warning-bg-color: #6d2f65;
|
||||
--warning-fg-color: #ffd7f3;
|
||||
--warning-color: #fcadeb;
|
||||
|
||||
--success-color: #c3c4e7;
|
||||
--success-bg-color: #434462;
|
||||
--success-fg-color: #e0e0ff;
|
||||
|
||||
--shade-color: rgba(0, 0, 0, 0.36);
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
animations {
|
||||
workspace-switch {
|
||||
spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001
|
||||
}
|
||||
window-open {
|
||||
duration-ms 200
|
||||
curve "ease-out-quad"
|
||||
}
|
||||
window-close {
|
||||
duration-ms 200
|
||||
curve "ease-out-cubic"
|
||||
}
|
||||
horizontal-view-movement {
|
||||
spring damping-ratio=1.0 stiffness=900 epsilon=0.0001
|
||||
}
|
||||
window-movement {
|
||||
spring damping-ratio=1.0 stiffness=800 epsilon=0.0001
|
||||
}
|
||||
window-resize {
|
||||
spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001
|
||||
}
|
||||
config-notification-open-close {
|
||||
spring damping-ratio=0.6 stiffness=1200 epsilon=0.001
|
||||
}
|
||||
screenshot-ui-open {
|
||||
duration-ms 300
|
||||
curve "ease-out-quad"
|
||||
}
|
||||
overview-open-close {
|
||||
spring damping-ratio=1.0 stiffness=900 epsilon=0.0001
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// ────────────── Startup Applications ──────────────
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Miscellaneous#spawn-sh-at-startup
|
||||
|
||||
spawn-sh-at-startup "qs -c noctalia-shell"
|
||||
@@ -0,0 +1,21 @@
|
||||
// ────────────── Output Configuration ──────────────
|
||||
output "Samsung Electric Company Odyssey G75F HNTY601056" {
|
||||
mode "3840x2160@60"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=0 y=0
|
||||
}
|
||||
|
||||
output "DP-1" {
|
||||
transform "90"
|
||||
position x=0 y=0
|
||||
}
|
||||
|
||||
output "DP-3" {
|
||||
transform "270"
|
||||
position x=1200 y=0
|
||||
}
|
||||
|
||||
output "eDP-1" {
|
||||
// no position — auto-placed to the right of DP-* outputs
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
// ────────────── Input Configuration ──────────────
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Input
|
||||
|
||||
input {
|
||||
keyboard {
|
||||
xkb {
|
||||
//If you want to overwrite your keyboard layout,
|
||||
// uncomment the line below and change the layout accordingly.
|
||||
//layout "us" // Use the American keyboard layout
|
||||
}
|
||||
numlock // Enable numlock on startup
|
||||
}
|
||||
|
||||
touchpad {
|
||||
tap // Enable tap-to-click
|
||||
natural-scroll // Enable natural (macOS-style) scrolling
|
||||
}
|
||||
|
||||
mouse {
|
||||
// If you want to disable Mouse Acceleration,
|
||||
// uncomment the lines below.
|
||||
//accel-profile "flat"
|
||||
//accel-speed 0.0
|
||||
}
|
||||
|
||||
focus-follows-mouse // Automatically focus windows under the mouse pointer
|
||||
workspace-auto-back-and-forth // Enable workspace back & forth switching
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
binds {
|
||||
|
||||
// ────────────── Keybindings ──────────────
|
||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Key-Bindings
|
||||
|
||||
// ─── noctalia-shell keybinds ───
|
||||
// https://docs.noctalia.dev/getting-started/keybinds/
|
||||
|
||||
Mod+Shift+Escape { show-hotkey-overlay; }
|
||||
|
||||
// ─── Applications ───
|
||||
Mod+Return hotkey-overlay-title="Open Terminal: Ghostty" { spawn "ghostty"; }
|
||||
Mod+CTRL+Return hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; }
|
||||
Mod+B hotkey-overlay-title="Open Browser: firefox" { spawn "firefox"; }
|
||||
Mod+ALT+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"; }
|
||||
|
||||
// Please choose your own file manager.
|
||||
Mod+E hotkey-overlay-title="File Manager: Nautilus" { spawn "nautilus"; }
|
||||
|
||||
// ─── Media Controls ───
|
||||
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume increase"; }
|
||||
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume decrease"; }
|
||||
XF86AudioMute allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume muteOutput"; }
|
||||
XF86AudioMicMute allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call volume muteInput"; }
|
||||
XF86AudioNext allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media next"; }
|
||||
XF86AudioPrev allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media previous"; }
|
||||
XF86AudioPlay allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media playPause"; }
|
||||
XF86AudioPause allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call media playPause"; }
|
||||
|
||||
// ─── Brightness Controls ───
|
||||
XF86MonBrightnessUp allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call brightness increase"; }
|
||||
XF86MonBrightnessDown allow-when-locked=true { spawn-sh "qs -c noctalia-shell ipc call brightness decrease"; }
|
||||
|
||||
// ─── Window Movement and Focus ───
|
||||
Mod+Q { close-window; }
|
||||
|
||||
Mod+Left { focus-column-left; }
|
||||
Mod+H { focus-column-left; }
|
||||
Mod+Right { focus-column-right; }
|
||||
Mod+L { focus-column-right; }
|
||||
Mod+Up { focus-window-up; }
|
||||
Mod+K { focus-window-up; }
|
||||
Mod+Down { focus-window-down; }
|
||||
Mod+J { focus-window-down; }
|
||||
|
||||
// Win+Ctrl consume/expel windows to/from columns
|
||||
Mod+CTRL+Left { consume-or-expel-window-left; }
|
||||
Mod+CTRL+H { consume-or-expel-window-left; }
|
||||
Mod+CTRL+Right { consume-or-expel-window-right; }
|
||||
Mod+CTRL+L { consume-or-expel-window-right; }
|
||||
Mod+CTRL+UP { expel-window-from-column; }
|
||||
Mod+CTRL+K { expel-window-from-column; }
|
||||
Mod+CTRL+Down { expel-window-from-column; }
|
||||
Mod+CTRL+J { expel-window-from-column; }
|
||||
Mod+Home { focus-column-first; }
|
||||
Mod+End { focus-column-last; }
|
||||
Mod+CTRL+Home { move-column-to-first; }
|
||||
Mod+CTRL+End { move-column-to-last; }
|
||||
|
||||
Mod+Shift+Left { focus-monitor-left; }
|
||||
Mod+Shift+Right { focus-monitor-right; }
|
||||
Mod+Shift+UP { focus-monitor-up; }
|
||||
Mod+Shift+Down { focus-monitor-down; }
|
||||
|
||||
Mod+Shift+CTRL+Left { move-column-to-monitor-left; }
|
||||
Mod+Shift+CTRL+Right { move-column-to-monitor-right; }
|
||||
Mod+Shift+CTRL+UP { move-column-to-monitor-up; }
|
||||
Mod+Shift+CTRL+Down { move-column-to-monitor-down; }
|
||||
|
||||
// ─── Workspace Switching ───
|
||||
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
|
||||
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
|
||||
Mod+CTRL+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
|
||||
Mod+CTRL+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
|
||||
|
||||
Mod+WheelScrollRight { focus-column-right; }
|
||||
Mod+WheelScrollLeft { focus-column-left; }
|
||||
Mod+CTRL+WheelScrollRight { move-column-right; }
|
||||
Mod+CTRL+WheelScrollLeft { move-column-left; }
|
||||
|
||||
Mod+Shift+WheelScrollDown { focus-column-right; }
|
||||
Mod+Shift+WheelScrollUp { focus-column-left; }
|
||||
Mod+CTRL+Shift+WheelScrollDown { move-column-right; }
|
||||
Mod+CTRL+Shift+WheelScrollUp { move-column-left; }
|
||||
|
||||
Mod+1 { focus-workspace 1; }
|
||||
Mod+2 { focus-workspace 2; }
|
||||
Mod+3 { focus-workspace 3; }
|
||||
Mod+4 { focus-workspace 4; }
|
||||
Mod+5 { focus-workspace 5; }
|
||||
Mod+6 { focus-workspace 6; }
|
||||
Mod+7 { focus-workspace 7; }
|
||||
Mod+8 { focus-workspace 8; }
|
||||
Mod+9 { focus-workspace 9; }
|
||||
|
||||
Mod+CTRL+1 { move-column-to-workspace 1; }
|
||||
Mod+CTRL+2 { move-column-to-workspace 2; }
|
||||
Mod+CTRL+3 { move-column-to-workspace 3; }
|
||||
Mod+CTRL+4 { move-column-to-workspace 4; }
|
||||
Mod+CTRL+5 { move-column-to-workspace 5; }
|
||||
Mod+CTRL+6 { move-column-to-workspace 6; }
|
||||
Mod+CTRL+7 { move-column-to-workspace 7; }
|
||||
Mod+CTRL+8 { move-column-to-workspace 8; }
|
||||
Mod+CTRL+9 { move-column-to-workspace 9; }
|
||||
|
||||
Mod+TAB { focus-workspace-previous; }
|
||||
|
||||
// ─── Layout Controls ───
|
||||
Mod+CTRL+F { expand-column-to-available-width; }
|
||||
Mod+C hotkey-overlay-title="Calculator" { spawn "gnome-calculator"; }
|
||||
Mod+CTRL+C { center-visible-columns; }
|
||||
Mod+Minus { set-column-width "-10%"; }
|
||||
Mod+Equal { set-column-width "+10%"; }
|
||||
Mod+Shift+Minus { set-window-height "-10%"; }
|
||||
Mod+Shift+Equal { set-window-height "+10%"; }
|
||||
|
||||
// ─── Split / Consume / Expel ───
|
||||
Mod+Shift+H { consume-or-expel-window-left; }
|
||||
Mod+Shift+L { consume-or-expel-window-right; }
|
||||
Mod+Shift+J { expel-window-from-column; }
|
||||
|
||||
// ─── Modes ───
|
||||
Mod+T { toggle-window-floating; }
|
||||
Mod+F { fullscreen-window; }
|
||||
Mod+W { toggle-column-tabbed-display; }
|
||||
|
||||
// ─── Screenshots ───
|
||||
CTRL+Shift+1 { screenshot; }
|
||||
CTRL+Shift+2 { screenshot-screen; }
|
||||
CTRL+Shift+3 { screenshot-window; }
|
||||
|
||||
// ─── Emergency Escape Key ───
|
||||
// Use this when a fullscreen app blocks your keybinds.
|
||||
// It disables any active keyboard shortcut inhibitor, restoring control.
|
||||
Mod+ESCAPE allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
|
||||
|
||||
// ─── Exit / Power ───
|
||||
CTRL+ALT+Delete { quit; } // Also quits Niri
|
||||
Mod+Shift+P { power-off-monitors; } // Turn off screens (useful for OLED or privacy)
|
||||
Mod+O repeat=false { toggle-overview; }
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
layout {
|
||||
gaps 16 // Gap between windows
|
||||
center-focused-column "never" // Don’t auto-center focused column
|
||||
|
||||
background-color "transparent" // <- needed for noctalia-shell to set wallpaper
|
||||
|
||||
preset-column-widths {
|
||||
proportion 0.33333
|
||||
proportion 0.5
|
||||
proportion 0.66667
|
||||
}
|
||||
|
||||
struts {}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
prefer-no-csd
|
||||
screenshot-path null
|
||||
|
||||
environment {
|
||||
ELECTRON_OZONE_PLATFORM_HINT "auto"
|
||||
QT_QPA_PLATFORM "wayland"
|
||||
QT_QPA_PLATFORMTHEME "gtk3"
|
||||
QT_WAYLAND_DISABLE_WINDOWDECORATION "1"
|
||||
XDG_CURRENT_DESKTOP "niri"
|
||||
XDG_SESSION_TYPE "wayland"
|
||||
render-node "/dev/dri/renderD129" // Intel Arc iGPU
|
||||
}
|
||||
|
||||
cursor {
|
||||
xcursor-theme "capitaine-cursors"
|
||||
xcursor-size 48
|
||||
}
|
||||
|
||||
debug {
|
||||
// Allows notification actions and window activation from Noctalia.
|
||||
honor-xdg-activation-with-invalid-serial
|
||||
}
|
||||
|
||||
hotkey-overlay {
|
||||
skip-at-startup
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
window-rule {
|
||||
geometry-corner-radius 20 // Set every window radius to 20
|
||||
clip-to-geometry true
|
||||
}
|
||||
|
||||
// if you use steam you will probably like these
|
||||
window-rule {
|
||||
match app-id="steam"
|
||||
exclude title=r#"^[Ss]team$"#
|
||||
open-floating true
|
||||
}
|
||||
|
||||
window-rule {
|
||||
match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"#
|
||||
default-floating-position x=10 y=10 relative-to="bottom-right"
|
||||
open-focused false
|
||||
}
|
||||
|
||||
layer-rule {
|
||||
match namespace="^noctalia-wallpaper*"
|
||||
place-within-backdrop true
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
include "./cfg/animation.kdl"
|
||||
include "./cfg/autostart.kdl"
|
||||
include "./cfg/keybinds.kdl"
|
||||
include "./cfg/input.kdl"
|
||||
include "./cfg/display.kdl"
|
||||
include "./cfg/layout.kdl"
|
||||
include "./cfg/rules.kdl"
|
||||
include "./cfg/misc.kdl"
|
||||
@@ -0,0 +1 @@
|
||||
export XCURSOR_SIZE=36
|
||||
@@ -0,0 +1,12 @@
|
||||
[Unit]
|
||||
Description=Shelly Notifications tray service
|
||||
After=graphical-session.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/bin/shelly-notifications
|
||||
Restart=on-failure
|
||||
RestartSec=5s
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical-session.target
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,31 @@
|
||||
source /usr/share/cachyos-zsh-config/cachyos-config.zsh
|
||||
|
||||
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
|
||||
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
|
||||
|
||||
if [ -n "${GHOSTTY_RESOURCES_DIR}" ]; then
|
||||
builtin source "${GHOSTTY_RESOURCES_DIR}/shell-integration/zsh/ghostty-integration"
|
||||
fi
|
||||
|
||||
# Bun
|
||||
export PATH="/home/dank/.bun/bin:$PATH"
|
||||
|
||||
export NVM_DIR="$HOME/.nvm"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
|
||||
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
|
||||
|
||||
# CUDA toolkit + llama.cpp
|
||||
export PATH="/opt/cuda/bin:/home/dank/GitPackages/llama.cpp/build/bin:$PATH"
|
||||
export LD_LIBRARY_PATH="/opt/cuda/lib64:/home/dank/GitPackages/llama.cpp/build:$LD_LIBRARY_PATH"
|
||||
|
||||
# GiTea
|
||||
|
||||
# Terminal Aliases
|
||||
alias systemprompt="nvim ~/.pi/agent/SYSTEM.md"
|
||||
|
||||
# peon-ping quick controls
|
||||
alias peon="bash /home/dank/.claude/hooks/peon-ping/peon.sh"
|
||||
[ -f /home/dank/.claude/hooks/peon-ping/completions.bash ] && source /home/dank/.claude/hooks/peon-ping/completions.bash
|
||||
|
||||
# machine-local secrets, never tracked
|
||||
[ -f "$HOME/.config/environment.d/secrets.env" ] && source "$HOME/.config/environment.d/secrets.env"
|
||||
Executable
+122
@@ -0,0 +1,122 @@
|
||||
#!/usr/bin/env bash
|
||||
# deploy.sh — stow-equivalent deployment of the dotfiles/ packages in this repo.
|
||||
#
|
||||
# Model: the repo checkout IS the deployment. Packages are home-relative trees
|
||||
# under dotfiles/<pkg>/; deploying replaces live files with symlinks into the
|
||||
# repo so `git pull` + `deploy.sh` is the whole propagation story.
|
||||
#
|
||||
# Modes:
|
||||
# deploy.sh sync (default): adopt identicals, link new, quarantine-and-replace divergents
|
||||
# deploy.sh --check dry-run report only; writes nothing
|
||||
# deploy.sh --adopt like sync but divergents are reported and SKIPPED, not quarantined
|
||||
#
|
||||
# Host divergence: a package named zz-$(hostname) is stowed LAST with override
|
||||
# semantics (its files replace symlinks from base packages).
|
||||
#
|
||||
# Special cases:
|
||||
# - dconf package: dump.txt is loaded via `dconf load /` instead of symlinked.
|
||||
# - systemd-user: after linking, daemon-reload + enable --now units whose
|
||||
# ExecStart binary resolves on THIS machine (silent no-op elsewhere).
|
||||
set -euo pipefail
|
||||
|
||||
REPO="$(git -C "$(dirname "$(realpath "$0")")" rev-parse --show-toplevel 2>/dev/null || true)"
|
||||
REPO="${DEPLOY_REPO:-$REPO}"
|
||||
PKGS_DIR="$REPO/dotfiles"
|
||||
HOST="${DEPLOY_HOST:-$(hostname)}"
|
||||
QUAR="$REPO/.quarantine"
|
||||
|
||||
MODE="sync"
|
||||
case "${1:-}" in
|
||||
--check) MODE="check" ;;
|
||||
--adopt) MODE="adopt" ;;
|
||||
""|sync) MODE="sync" ;;
|
||||
*) echo "usage: deploy.sh [--check|--adopt|sync]" >&2; exit 2 ;;
|
||||
esac
|
||||
|
||||
[ -d "$PKGS_DIR" ] || { echo "deploy.sh: no dotfiles/ under $REPO" >&2; exit 1; }
|
||||
|
||||
# packages = all dirs in dotfiles/, override package last
|
||||
mapfile -t PKGS < <(find "$PKGS_DIR" -maxdepth 1 -mindepth 1 -type d ! -name "zz-*" | sort)
|
||||
OVR="$PKGS_DIR/zz-$HOST"
|
||||
[ -d "$OVR" ] && PKGS+=("$OVR")
|
||||
|
||||
actions=0; quarantined=0; skipped=0
|
||||
|
||||
deploy_file() { # $1 = repo file path, $2 = home-relative target path
|
||||
local src="$1" tgt="$HOME/$2"
|
||||
if [ -L "$tgt" ]; then
|
||||
if [ "$(realpath "$tgt")" = "$(realpath "$src")" ]; then return 0; fi # already deployed
|
||||
case "$MODE" in
|
||||
check) echo "DRIFT $2 (symlink points elsewhere: $(realpath "$tgt"))" ;;
|
||||
adopt) echo "SKIP $2 (foreign symlink, --adopt does not overwrite)" ; skipped=$((skipped+1)) ;;
|
||||
sync)
|
||||
ts="$(date +%Y%m%d-%H%M%S)-$$"
|
||||
dest="$QUAR/$HOST/$ts/$2"
|
||||
mkdir -p "$(dirname "$dest")"
|
||||
mv -- "$tgt" "$dest"
|
||||
ln -sfn "$(realpath "$src")" "$tgt"
|
||||
actions=$((actions+1)); quarantined=$((quarantined+1))
|
||||
echo "QUAR $2 -> .quarantine/$HOST/$ts/$2"
|
||||
;;
|
||||
esac
|
||||
return 0
|
||||
fi
|
||||
if [ -e "$tgt" ]; then
|
||||
if cmp -s "$src" "$tgt"; then
|
||||
if [ "$MODE" = "check" ]; then echo "ADOPT $2 (identical, will symlink)"; return 0; fi
|
||||
ln -sfn "$(realpath "$src")" "$tgt"; actions=$((actions+1)); return 0
|
||||
fi
|
||||
case "$MODE" in
|
||||
check) echo "DRIFT $2 (differs from repo; sync would quarantine)" ;;
|
||||
adopt) echo "SKIP $2 (divergent, --adopt does not overwrite)" ; skipped=$((skipped+1)) ;;
|
||||
sync)
|
||||
ts="$(date +%Y%m%d-%H%M%S)-$$"
|
||||
dest="$QUAR/$HOST/$ts/$2"
|
||||
mkdir -p "$(dirname "$dest")"
|
||||
mv -- "$tgt" "$dest"
|
||||
ln -sfn "$(realpath "$src")" "$tgt"
|
||||
actions=$((actions+1)); quarantined=$((quarantined+1))
|
||||
echo "QUAR $2 -> .quarantine/$HOST/$ts/$2"
|
||||
;;
|
||||
esac
|
||||
return 0
|
||||
fi
|
||||
if [ "$MODE" = "check" ]; then echo "LINK $2 (missing, will symlink)"; return 0; fi
|
||||
mkdir -p "$(dirname "$tgt")"
|
||||
ln -sfn "$(realpath "$src")" "$tgt"; actions=$((actions+1))
|
||||
}
|
||||
|
||||
for pkg in "${PKGS[@]}"; do
|
||||
pkgname="$(basename "$pkg")"
|
||||
# dconf package: load dump instead of symlinking
|
||||
if [ "$pkgname" = "dconf" ] && [ -f "$pkg/dump.txt" ]; then
|
||||
if [ "$MODE" != "check" ]; then
|
||||
if command -v dconf >/dev/null; then dconf load / < "$pkg/dump.txt" && echo "LOAD $pkgname/dump.txt -> dconf"; fi
|
||||
else
|
||||
echo "LOAD $pkgname/dump.txt (dconf load / would run on sync)"
|
||||
fi
|
||||
continue
|
||||
fi
|
||||
while IFS= read -r -d '' f; do
|
||||
deploy_file "$f" "${f#"$pkg"/}"
|
||||
done < <(find "$pkg" -type f ! -name 'dump.txt' -print0)
|
||||
done
|
||||
|
||||
if [ "$MODE" != "check" ] && [ -d "$PKGS_DIR/systemd-user/.config/systemd/user" ]; then
|
||||
systemctl --user daemon-reload || true
|
||||
for unit in "$PKGS_DIR"/systemd-user/.config/systemd/user/*.service; do
|
||||
[ -e "$unit" ] || continue
|
||||
bin="$(sed -n 's/^ExecStart=\([^ ]*\).*/\1/p' "$unit" | head -1)"
|
||||
if [ -n "$bin" ] && command -v "$bin" >/dev/null 2>&1; then
|
||||
systemctl --user enable --now "$(basename "$unit")" || true
|
||||
echo "ENABLE $(basename "$unit") (ExecStart resolves here)"
|
||||
else
|
||||
echo "SKIP $(basename "$unit") (ExecStart '$bin' absent on this host)"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# keep the secret gate armed on every machine that deploys
|
||||
git -C "$REPO" config core.hooksPath .githooks
|
||||
|
||||
echo "deploy.sh [$MODE] host=$HOST repo=$REPO — actions=$actions quarantined=$quarantined skipped=$skipped"
|
||||
Reference in New Issue
Block a user