# dotfiles
**Repository Path**: zenaster/dotfiles
## Basic Information
- **Project Name**: dotfiles
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-05
- **Last Updated**: 2025-11-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## Motivations
> [*Your dotfiles will most likely be the longest project you ever worked on.*](https://www.anishathalye.com/2014/08/03/managing-your-dotfiles/)
Managing dotfiles without a version control system is a chore. That's why I created this GitHub repo :)
## Structure of my dotfiles
```
.
├── flake.lock
├── flake.nix
├── lib # utils for Nix
├── hosts # hosts (aka. machines) configurations
├── users # user-level configurations
├── hammerspoon # hammerspoon configurations
├── kitty # keymapping configurations
├── nvim # neovim configurations
├── README.md
└── windows-only # Windows configurations
```
## What is inside?
### Kitty
My Personal Kitty Configurations
### Hammerspoon
> [!TIP]
> Install the [Fennel](https://fennel-lang.org/setup) and run `make` to get the corresponding `*.lua` files.
I use [Hammerspoon](https://www.hammerspoon.org/) to manage windows. The available key mappings are:
- Full screen - ⌘ Command + ⌥ Option + f
- Center - ⌘ Command + ⌥ Option + c
- Left half - ⌘ Command + ⌥ Option + ←
- Right half - ⌘ Command + ⌥ Option + →
- Top half - ⌘ Command + ⌥ Option + ↑
- Bottom half - ⌘ Command + ⌥ Option + ↓
- Top left - ⌘ Command + ⌥ Option + ⌃ Control + u
- Top right - ⌘ Command + ⌥ Option + ⌃ Control + i
- Bottom left - ⌘ Command + ⌥ Option + ⌃ Control + j
- Bottom right - ⌘ Command + ⌥ Option + ⌃ Control + k
- Hold to quit any app - ⌘ Command + q
### Neovim
My Go-to text editor with the following plugins:
- Package manager: [lazy.nvim](https://github.com/folke/lazy.nvim)
- Auto-completion
- Completion sources: [blink.cmp](https://github.com/saghen/blink.cmp)
- Vscode-like pictograms: [lspkind.nvim](https://github.com/onsails/lspkind.nvim)
- LSP registry: [mason.nvim](https://github.com/williamboman/mason.nvim)
- Git related
- Git integration: [vim-fugitive](https://github.com/tpope/vim-fugitive)
- Git decorations: [gitsigns.nvim](https://github.com/lewis6991/gitsigns.nvim)
- Git diff: [diffview.nvim](https://github.com/sindrets/diffview.nvim)
- Typst tools
- [tinymist](https://github.com/Myriad-Dreamin/tinymist?tab=readme-ov-file)
- [typst-preview](https://github.com/chomosuke/typst-preview.nvim)
- Markdown tools:
- Markdown: [vim-markdown](https://github.com/preservim/vim-markdown)
- Markdown previewer (in browser): [markdown-preview.nvim](https://github.com/iamcco/markdown-preview.nvim)
- Markdown previewer (within file): [render-markdown.nvim](https://github.com/MeanderingProgrammer/render-markdown.nvim)
- Paste image : [img-clip.nvim](https://github.com/HakonHarnes/img-clip.nvim)
- Stylish
- Colorscheme: [tokyonight.nvim](https://github.com/folke/tokyonight.nvim)
- Better UI for messages/cmdline/popupmenu: [noice.nvim](https://github.com/folke/noice.nvim)
- TODO highlighting: [todo-comments.nvim](https://github.com/folke/todo-comments.nvim?tab=readme-ov-file)
- Code editing
- General capability
- Treesitter integration: [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter)
- Show context at the top: [nvim-treesitter-context](https://github.com/nvim-treesitter/nvim-treesitter-context)
- Syntax aware text-object: [nvim-treesitter-textobjects](https://github.com/nvim-treesitter/nvim-treesitter-textobjects)
- A pretty list for showing diagnostics: [trouble.nvim](https://github.com/folke/trouble.nvim)
- Indentation indicator: [indent-blankline](https://github.com/lukas-reineke/indent-blankline.nvim)
- Easy motion: [flash.nvim](https://github.com/folke/flash.nvim)
- Surrounding: [nvim-surround](https://github.com/kylechui/nvim-surround)
- CodeCompanion: [codecompanion.nvim](https://github.com/olimorris/codecompanion.nvim)
- Linter: [nvim-lint](https://github.com/mfussenegger/nvim-lint)
- Colorful delimiters: [rainbow-delimiters.nvim](https://github.com/HiPhish/rainbow-delimiters.nvim)
- Formatter: [conform.nvim](https://github.com/stevearc/conform.nvim)
- REPL-Driven Development: [conjure](https://github.com/Olical/conjure)
- Make tracing function call easier: [overlook.nvim](https://github.com/WilliamHsieh/overlook.nvim/)
- Lisp kind
- nvim-parinfer: [nvim-parinfer](https://github.com/gpanders/nvim-parinfer)
- nvim-paredit: [nvim-paredit](https://github.com/julienvincent/nvim-paredit)
- Integration
- Use `c-h/j/k/l` consistently: [vim-tmux-navigator](https://github.com/christoomey/vim-tmux-navigator)
- Fuzzy finders: [fzf-lua](https://github.com/ibhagwan/fzf-lua)
- File explorer: [mini.files](https://github.com/echasnovski/mini.files)
- Status line: [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim)
- Editor Performance: [faster.nvim](https://github.com/pteroctopus/faster.nvim)
### Windows-only
I use Mac for personal business *but* use a Windows PC at work, so I wrote the `keymappings.ahk` to map keys between Mac and Windows to keep a consistent muscle memory. To use this `.ahk` script, you need to install the [AutoHotKey](https://www.autohotkey.com/) tool and run `keymappings.ahk` *as administrator*. Besides that, you *should* install a third-party Chinese IME and delete the built-in Microsoft Pinyin IME *if* you are also a Chinese user because there is an unfixed [issue](https://answers.microsoft.com/en-us/windows/forum/all/how-to-completely-disable-the-english-mode-in/2dadd3c1-e441-4e35-8049-dbcb5d50fdfc).
### nix-darwin
I have been *gradually* migrating to Nix flakes because I really appreciate the reproducibility they offer. My Nix configuration structure is largely inspired by [mitchellh' nixos-config](https://github.com/mitchellh/nixos-config).
## Appendix
- [Home Manager Configuration Options](https://nix-community.github.io/home-manager/options.xhtml)
- [The nix-darwin Configuration Options](https://nix-darwin.github.io/nix-darwin/manual/)