Compare commits

...
12 Commits
Author SHA1 Message Date
rootiest 23d74690dc fix: remove watcher from base repo
The Rootiest fish-config will append the watcher automatically when it
adds the symlink.

On systems using this kitty config but not the accompanying fish config,
this will prevent any confusion on the feature.
2026-07-16 02:49:40 -04:00
rootiest 77fcd76f43 chore: fix section indicators 2026-07-16 02:47:28 -04:00
rootiest af9111c791 feat: implement fish-config logging utility 2026-07-16 02:38:47 -04:00
rootiest baf2dc7d0b fix: adjust initial window size to be a bit larger 2026-07-16 02:38:06 -04:00
rootiest 3e00a620d1 chore(gitignore): update ai agent ignore patterns 2026-06-17 21:10:30 -04:00
rootiest 3f7eab7761 refactor(logging): remove redundant home assignment in save_scrollback_safely 2026-06-10 21:38:19 -04:00
rootiest e271c6e486 feat(logging): check C5 sentinel before scrollback capture 2026-06-10 21:36:48 -04:00
rootiest 5970905c08 docs: update links
chore: update gitignore patterns
2026-05-31 00:18:54 -04:00
rootiest 9228f55709 Merge pull request 'feat(watcher): add scrollback history logging on window/pane close' (#2) from feat-scrollback-watcher into main
Reviewed-on: #2
2026-05-31 03:42:31 +00:00
rootiest 9d34764815 feat(watcher): add scrollback history logging on window/pane close
Introduces watcher.py — a kitty Python watcher that captures terminal
scrollback to ~/.terminal_history/ whenever any window or pane is closed
via Ctrl+D, keybind, or full kitty quit. Works alongside the fish
smart_exit function, which handles graceful shell exits and sets a
user var flag to prevent duplicate logs.

Fixes the kitty.conf watcher directive (removed invalid --type=global
prefix that caused a FileNotFoundError on every kitty startup).
2026-05-30 23:40:53 -04:00
rootiest be139ac7ad Merge pull request 'feat(config): add Wayland support, custom font features, and update search' (#1) from feat-wayland-font-features into main
Reviewed-on: #1
2026-05-30 05:26:29 +00:00
rootiest ad242b09e3 feat(config): add Wayland support, custom font features, and update search
- Enable Wayland as the Linux display server
- Increase background blur from 1 to 64 for frosted-glass effect
- Add detailed OpenType font_features for all four Iosevka Rootiest v2 weights
- Remove kitty_search submodule; replace with built-in search_scrollback
- Update kitty_scrollback_nvim path and add search jump arg to F1 binding
- Add F7 clear_selection binding under text manipulation section
- Update .gitignore with tmp/temp/testing/debug directory patterns
- Sync README to reflect current features and remove stale submodule install steps
2026-05-30 01:25:47 -04:00
6 changed files with 310 additions and 33 deletions
View File
+269 -4
View File
@@ -2,7 +2,272 @@ kitty-dump.json
saved-session.conf
/OLD
# AI Sessions
.gemini_session
.claude_session
.remember/
# id: gi-patterns-e390e9c720b3dda36906a2b4cb76ffdd
# Created by https://www.toptal.com/developers/gitignore/api/python
# Edit at https://www.toptal.com/developers/gitignore?templates=python
### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
### Python Patch ###
# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
poetry.toml
# ruff
.ruff_cache/
# LSP config files
pyrightconfig.json
# End of https://www.toptal.com/developers/gitignore/api/python
# id: gitig-boilerplate-7f0528027e23f210196ae4583c408e5b
# ╭──────────────────────────────────────────────────────────╮
# │ GitIgnore Boilerplate Template │
# ╰──────────────────────────────────────────────────────────╯
#
# ──────────────────── OS-Generated Files ────────────────────
# automatic backup files created by some editors (e.g., Vim, Emacs)
*~
# temporary files created if a process still has a handle to a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# MacOS junk
.DS_Store
# Linux trash folder which might appear on any partition or disk
.Trash-*
# files created when an open file is removed but is still being accessed
.nfs*
# ─────────────────── Debug/Temporary/Testing ────────────────
# Matches OLD / .OLD
[Oo][Ll][Dd]/
.[Oo][Ll][Dd]/
# Matches DISABLE / .DISABLE
[Dd][Ii][Ss][Aa][Bb][Ll][Ee]/
.[Dd][Ii][Ss][Aa][Bb][Ll][Ee]/
# Matches DISABLED / .DISABLED
[Dd][Ii][Ss][Aa][Bb][Ll][Ee][Dd]/
.[Dd][Ii][Ss][Aa][Bb][Ll][Ee][Dd]/
# Matches DEBUG / .DEBUG
[Dd][Ee][Bb][Uu][Gg]/
.[Dd][Ee][Bb][Uu][Gg]/
# Matches TMP / .TMP
[Tt][Mm][Pp]/
.[Tt][Mm][Pp]/
# Matches TEMP / .TEMP
[Tt][Ee][Mm][Pp]/
.[Tt][Ee][Mm][Pp]/
# Matches TEMPORARY / .TEMPORARY
[Tt][Ee][Mm][Pp][Oo][Rr][Aa][Rr][Yy]/
.[Tt][Ee][Mm][Pp][Oo][Rr][Aa][Rr][Yy]/
# Matches TESTING / .TESTING
[Tt][Ee][Ss][Tt][Ii][Nn][Gg]/
.[Tt][Ee][Ss][Tt][Ii][Nn][Gg]/
# ─────────────────── AI Sessions and Rules ──────────────────
# Matches CLAUDE.md, .claud*, etc.
[Cc][Ll][Aa][Uu][Dd][Ee].[Mm][Dd]
.[Cc][Ll][Aa][Uu][Dd]*
# Matches GEMINI.md, .gemin*, etc.
[Gg][Ee][Mm][Ii][Nn][Ii].[Mm][Dd]
.[Gg][Ee][Mm][Ii][Nn]*
# Matches ANTIGRAVITY.md, .antigrav*, etc.
[Aa][nN][Tt][Ii][Gg][Rr][Aa][Vv][Ii][Tt][Yy].[Mm][Dd]
.[Aa][Nn][Tt][Ii][Gg][Rr][Aa][Vv]*
# Matches AGENTS.md, .remember, etc.
[Aa][Gg][Ee][Nn][Tt][Ss].[Mm][Dd]
.[Rr][Ee][Mm][Ee][Mm][Bb][Ee][Rr]
# ──────────────────────────────────────────────────────────────
# ──────────────── Added by agents-init ──────────────────
# agents-init --agents
AGENTS/
# ────────────────────────────────────────────────────────
# ──────────────── Added by agents-init ──────────────────
# agents-init --plugins
docs/superpowers
docs/plans
docs/specs
docs/devlogs
# ────────────────────────────────────────────────────────
### Generated dynamically when needed
/fish-config-watcher.py
-3
View File
@@ -1,3 +0,0 @@
[submodule "kitty_search"]
path = kitty_search
url = https://github.com/trygveaa/kitty-kitten-search
+26 -17
View File
@@ -63,42 +63,52 @@ The rootiest kitty configuration you will ever see!
4. Clone the repository
```bash
git clone --recurse-submodules https://git.rootiest.dev/rootiest/kitty-conf.git ~/.config/kitty
```
If you already cloned without `--recurse-submodules`, initialize submodules manually:
```bash
git submodule update --init
git clone https://git.rootiest.dev/rootiest/kitty-conf.git ~/.config/kitty
```
5. **Enjoy!** 🎉
## Features
- Smart key bindings
- Integration with NeoVim
- Smart key bindings with NeoVim-aware passthrough
- Integration with NeoVim (kitty-scrollback.nvim for in-editor scrollback)
- Integration with fish shell
- Catppuccin theme by default
- Integrates cleanly with other Rootiest projects
- Automatic scrollback history logging on every window/pane close
- Catppuccin Mocha theme with 85% background opacity and blur
- Cursor trail effect for enhanced visibility
- Highly-tuned Iosevka Rootiest v2 font with custom OpenType features
- Wayland-native display
- Single clean session with splits layout
- Session saving (F11) and config reload (F12)
- Integrates cleanly with other Rootiest projects
## Configuration
### Scrollback History
Terminal scrollback is automatically saved to `~/.terminal_history/` whenever a window or pane is closed (including `Ctrl+D`, closing a pane via keybind, or quitting kitty). The fish `smart_exit` function handles graceful shell exits; `watcher.py` catches all other close events.
| Variable | Default | Description |
|---|---|---|
| `SCROLLBACK_HISTORY_DIR` | `~/.terminal_history` | Directory where scrollback logs are written |
| `SCROLLBACK_HISTORY_MAX_FILES` | `100` | Maximum number of log files to retain |
## Companion Tools
[Rootiest Fish](https://github.com/rootiest/rootiest-fish) -
[Rootiest Fish](https://git.rootiest.dev/rootiest/fish-config) -
Fish shell configuration that pairs well with this kitty configuration
and the NeoVim configuration.
[Rootiest Tmux](https://github.com/rootiest/rootiest-tmux) -
[Rootiest Tmux](https://git.rootiest.dev/rootiest/tmux-config) -
A tmux configuration that is designed to work with this kitty config.
[Rootiest Neovim](https://github.com/rootiest/rootiest-nvim) -
[Rootiest Neovim](https://git.rootiest.dev/rootiest/neovim-config) -
A NeoVim config built to work alongside this and the fish config.
[Rootiest Iosevka Font](https://github.com/rootiest/rootiest-iosevka) -
[Rootiest Iosevka Font](https://git.rootiest.dev/rootiest/rootiest-iosevka) -
A custom Iosevka font that is designed by developers, for developers.
[Nerd Fonts](https://github.com/ryanoasis/nerd-fonts/) -
[Nerd Fonts](https://github.com/ryanoasis/nerd-fonts) -
A collection of fonts that include many icons and glyphs that are used in this configuration.
## Dotfiles
@@ -109,5 +119,4 @@ A collection of fonts that include many icons and glyphs that are used in this c
- [kitty](https://sw.kovidgoyal.net/kitty/)
- [kitty-scrollback](https://github.com/mikesmithgh/kitty-scrollback.nvim)
- [kitty-search](https://github.com/trygveaa/kitty-kitten-search)
- [vim-kitty-navigator](https://github.com/knubie/vim-kitty-navigator)
+15 -8
View File
@@ -13,14 +13,15 @@ copy_on_select yes
# {{{ Window
remember_window_size no
initial_window_width 150c
initial_window_height 31c
initial_window_width 160c
initial_window_height 36c
enabled_layouts splits
# }}}
# {{{ Appearance
linux_display_server wayland
background_opacity 0.85
background_blur 1
background_blur 64
dynamic_background_opacity yes
cursor_beam_thickness 1.75
cursor_trail 3
@@ -38,7 +39,10 @@ font_family family='Iosevka Rootiest v2' postscript_name=Iosevka-Rootiest-v
bold_font family='Iosevka Rootiest v2' postscript_name=Iosevka-Rootiest-v2 style='ExtraBold'
italic_font family='Iosevka Rootiest v2' postscript_name=Iosevka-Rootiest-v2 style='Italic'
bold_italic_font family='Iosevka Rootiest v2' postscript_name=Iosevka-Rootiest-v2 style='ExtraBold Italic'
symbol_map U+e000-U+e00a,U+ea60-U+ebeb,U+e0a0-U+e0c8,U+e0ca,U+e0cc-U+e0d4,U+e200-U+e2a9,U+e300-U+e3e3,U+e5fa-U+e6b1,U+e700-U+e7c5,U+f000-U+f2e0,U+f300-U+f372,U+f400-U+f532,U+f0001-U+f1af0 Symbols Nerd Font Mono
font_features IosevkaRootiestV2NF ss05 aplf clik wwid calt jspt mosc thnd vdaa=2 vdac=1 vsac=3 vsaf=2 vsag=2 vsah=3 vsai=2 vsaj=3 vsak=1 vsal=6 vsam=6 vsan=6 vsao=4 vsaq=1 vsar=2 vsas=6 vsat=1 cv01=5 cv02=4 cv03=2 cv04=10 cv05=7 cv06=2 cv07=12 cv08=3 cv09=2 cv10=12 cv11=7 cv12=6 cv13=3 cv14=6 cv15=4 cv16=4 cv17=9 cv18=4 cv19=2 cv20=11 cv21=9 cv22=3 cv23=9 cv24=6 cv25=6 cv26=2 cv27=24 cv28=5 cv29=3 cv30=7 cv31=2 cv32=3 cv33=8 cv34=8 cv35=27 cv36=3 cv37=3 cv38=5 cv39=5 cv40=2 cv41=4 cv42=2 cv43=7 cv44=8 cv45=2 cv46=20 cv47=7 cv48=34 cv49=6 cv50=3 cv51=20 cv52=14 cv53=1 cv54=4 cv55=5 cv56=4 cv57=25 cv58=13 cv59=13 cv60=11 cv67=1 cv68=1 cv70=3 cv73=3 cv85=2
font_features IosevkaRootiestV2NF-ExtraBold ss05 aplf clik wwid calt jspt mosc thnd vdaa=2 vdac=1 vsac=3 vsaf=2 vsag=2 vsah=3 vsai=2 vsaj=3 vsak=1 vsal=6 vsam=6 vsan=6 vsao=4 vsaq=1 vsar=2 vsas=6 vsat=1 cv01=5 cv02=4 cv03=2 cv04=10 cv05=7 cv06=2 cv07=12 cv08=3 cv09=2 cv10=12 cv11=7 cv12=6 cv13=3 cv14=6 cv15=4 cv16=4 cv17=9 cv18=4 cv19=2 cv20=11 cv21=9 cv22=3 cv23=9 cv24=6 cv25=6 cv26=2 cv27=24 cv28=5 cv29=3 cv30=7 cv31=2 cv32=3 cv33=8 cv34=8 cv35=27 cv36=3 cv37=3 cv38=5 cv39=5 cv40=2 cv41=4 cv42=2 cv43=7 cv44=8 cv45=2 cv46=20 cv47=7 cv48=34 cv49=6 cv50=3 cv51=20 cv52=14 cv53=1 cv54=4 cv55=5 cv56=4 cv57=25 cv58=13 cv59=13 cv60=11 cv67=1 cv68=1 cv70=3 cv73=3 cv85=2
font_features IosevkaRootiestV2NF-Italic ss05 aplf clik wwid calt jspt mosc thnd vdaa=2 vdac=1 vsac=3 vsaf=2 vsag=2 vsah=3 vsai=2 vsaj=3 vsak=1 vsal=6 vsam=6 vsan=6 vsao=4 vsaq=1 vsar=2 vsas=6 vsat=1 cv01=5 cv02=4 cv03=2 cv04=10 cv05=7 cv06=2 cv07=12 cv08=3 cv09=2 cv10=12 cv11=7 cv12=6 cv13=3 cv14=6 cv15=4 cv16=4 cv17=9 cv18=4 cv19=2 cv20=11 cv21=9 cv22=3 cv23=9 cv24=6 cv25=6 cv26=2 cv27=24 cv28=5 cv29=3 cv30=7 cv31=2 cv32=3 cv33=8 cv34=8 cv35=27 cv36=3 cv37=3 cv38=5 cv39=5 cv40=2 cv41=4 cv42=2 cv43=7 cv44=8 cv45=2 cv46=20 cv47=7 cv48=34 cv49=6 cv50=3 cv51=20 cv52=14 cv53=1 cv54=4 cv55=5 cv56=4 cv57=25 cv58=13 cv59=13 cv60=11 cv67=1 cv68=1 cv70=3 cv73=3 cv85=2
font_features IosevkaRootiestV2NF-ExtraBoldItalic ss05 aplf clik wwid calt jspt mosc thnd vdaa=2 vdac=1 vsac=3 vsaf=2 vsag=2 vsah=3 vsai=2 vsaj=3 vsak=1 vsal=6 vsam=6 vsan=6 vsao=4 vsaq=1 vsar=2 vsas=6 vsat=1 cv01=5 cv02=4 cv03=2 cv04=10 cv05=7 cv06=2 cv07=12 cv08=3 cv09=2 cv10=12 cv11=7 cv12=6 cv13=3 cv14=6 cv15=4 cv16=4 cv17=9 cv18=4 cv19=2 cv20=11 cv21=9 cv22=3 cv23=9 cv24=6 cv25=6 cv26=2 cv27=24 cv28=5 cv29=3 cv30=7 cv31=2 cv32=3 cv33=8 cv34=8 cv35=27 cv36=3 cv37=3 cv38=5 cv39=5 cv40=2 cv41=4 cv42=2 cv43=7 cv44=8 cv45=2 cv46=20 cv47=7 cv48=34 cv49=6 cv50=3 cv51=20 cv52=14 cv53=1 cv54=4 cv55=5 cv56=4 cv57=25 cv58=13 cv59=13 cv60=11 cv67=1 cv68=1 cv70=3 cv73=3 cv85=2
# }}}
# {{{ Tab Bar
@@ -55,8 +59,7 @@ tab_title_template "{fmt.fg._f9e2ae}{bell_symbol}{activity_symbol}{fmt.fg.defaul
action_alias launch_tab launch --type=tab --cwd=current
action_alias launch_win launch --type=window --cwd=current
action_alias view_scrollback launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
action_alias kitty_scrollback_nvim kitten ~/.local/share/nvim/lazy/kitty-scrollback.nvim/python/kitty_scrollback_nvim.py
# }}}
action_alias kitty_scrollback_nvim kitten ~/.local/share/nvim/site/pack/core/opt/kitty-scrollback/python/kitty_scrollback_nvim.py }}}
# {{{ Keymaps
@@ -91,6 +94,9 @@ map kitty_mod+s paste_from_selection
map shift+insert paste_from_selection
map kitty_mod+o pass_selection_to_program
# Text manipulation
map f7 clear_selection
# Window movement
map shift+up move_window up
map shift+down move_window down
@@ -123,7 +129,8 @@ map kitty_mod+f3 detach_window new-tab
map ctrl+f4 detach_window tab-prev
# Search
map kitty_mod+/ launch --location=hsplit --allow-remote-control kitty +kitten kitty_search/search.py @active-kitty-window-id
# map kitty_mod+/ launch --location=hsplit --allow-remote-control kitty +kitten kitty_search/search.py @active-kitty-window-id
map kitty_mod+/ search_scrollback
# Nvim navigation
map ctrl+shift+h neighboring_window left
@@ -136,7 +143,7 @@ map --when-focus-on var:IS_NVIM ctrl+shift+k
map --when-focus-on var:IS_NVIM ctrl+shift+l
# Scrollback (kitty-scrollback.nvim)
map f1 kitty_scrollback_nvim
map f1 kitty_scrollback_nvim --nvim-args -n -c "normal /"
map kitty_mod+b kitty_scrollback_nvim --config ksb_builtin_last_cmd_output
mouse_map kitty_mod+right press ungrabbed combine : mouse_select_command_output : kitty_scrollback_nvim --config ksb_builtin_last_visited_cmd_output
Submodule kitty_search deleted from 0760138fad