Personal Linux dotfiles for an i3-based desktop with a Lua-powered theme/template system.
- i3
- Polybar
- Rofi
- Ghostty
- feh
- Fastfetch
- Neovim
- Oh My Zsh
.
├── config/ # Editable source templates and hand-written scripts
│ ├── desktop/ # Wallpaper script template
│ ├── i3/ # i3 config template
│ ├── polybar/ # Polybar template and launch script
│ └── rofi/ # Rofi theme/config template
├── generated/ # Generated config output; do not edit directly
│ ├── desktop/
│ ├── i3/
│ ├── polybar/
│ └── rofi/
├── theme/ # Lua theme system
│ ├── build.lua # Build entry point
│ ├── render.lua # Template renderer
│ └── themes/ # Theme definitions
├── wallpapers/ # Wallpaper assets
├── install.sh # Symlink setup
└── Makefile # Build/apply commands
Themes are defined in:
theme/themes/
The main theme is defined in:
theme/themes/penrose.lua
The active theme is selected in:
theme/build.lua
Templates are stored in:
config/
Generated configs are written to:
generated/
The renderer replaces template placeholders like:
{{colors.bg}}
{{fonts.ui}}
{{i3.gaps_inner}}
{{generated.i3.workspaces.define}}
Do not edit files inside generated/ directly. They are overwritten by the build process. Edit files in config/ or theme/themes/ instead.
Build generated configs:
make buildValidate the generated i3 config:
make checkApply the desktop config:
make applyRun first-time symlink setup:
./install.sh- i3 config
- Rofi config
- Polybar config
- Wallpaper script
- Ghostty config
Edit the theme:
nvim theme/themes/penrose.luaThen apply changes:
make applyEdit a source template:
nvim config/i3/config.template
nvim config/polybar/config.template.ini
nvim config/rofi/config.template.rasi
nvim config/desktop/wallpaper.template.shThen rebuild/apply:
make applyconfig/contains editable templates and hand-written scripts.generated/files are machine-generated.theme/themes/contains theme definitions.theme/render.luahandles placeholder replacement, computed values, and generated blocks.- Inspired by srchby's i3 rice