Personal dotfiles for an Arch + Hyprland workstation. Managed by
krypt — every install / update /
template-seed / hook is declared in .krypt.toml instead of a tangle of bash.
Sleek modern Wayland setup. Hyprland tiling, Fish shell, Neovim + LazyVim,
TokyoNight throughout. Config is data: .krypt.toml and its included files
describe what lives where, what packages to install, and what commands the user
can invoke. krypt does the work; bash scripts only exist when the logic is
genuinely shell-shaped.
- Distro: Arch Linux (or derivative). Cross-distro deps are stubbed — expand
[[deps]] apt = […]/dnf = […]in.krypt/deps.tomlto extend. - Display server: Wayland (Hyprland). X11 unsupported.
- CPU/GPU: x86_64, any modern Wayland-capable GPU (tested on AMD).
- CLI bootstrap:
git,bash,curl. Everything elsekrypt setupinstalls.
- Font: Hack Nerd Font (
ttf-hack-nerd). - Cursor:
Breeze_Light(breeze). - GTK theme:
adw-gtk-theme. - Icon theme: system default.
- WM: Hyprland — Wayland tiling compositor.
- Shell: Fish.
- Terminal: Alacritty.
- Editor: Neovim + LazyVim.
- Bar: Waybar.
- Launcher: pikr — vim-like fuzzy picker.
- Notifications: swaync.
- File Manager: Nautilus.
- Browser: Vieb.
- Screenshot: Grimblast.
- System monitor: btop.
- Prompt: Starship.
| Platform | Command |
|---|---|
| Arch | paru -S krypt-bin |
| macOS | brew install kryptic-sh/tap/krypt |
| Any | cargo install krypt-cli |
| Manual | grab a binary from GH Releases |
Verify: krypt --version should report 0.2.0 or newer.
krypt init https://github.com/mxaddict/dotfiles
krypt setup # interactive: seeds templates, prompts for identity, installs deps
krypt link # symlink the tree into $HOMEkrypt setup is the wizard pass — runs the [prompts.*] blocks defined in
.krypt.toml (git identity, hypr defaults, keyboard layout), seeds templates,
then triggers krypt deps to install packages.
krypt update # pull repo, install missing deps, run post-update hooks
krypt update --dry-run # show plan, change nothing
krypt update --skip-hooks # skip nvim/tmux/dconf/bat/etc. plugin syncsHooks declared in .krypt.toml ([[hook]] when = "post-update") cover:
- mkdir essential
$HOMEdirs +~/.local/log - fisher / nvim Lazy / tpm plugin syncs
- bat cache rebuild, tldr cache refresh
- dconf load from
dconf/user.ini hyprctl reload(gated on hyprland running)
krypt init accepts any HTTPS / SSH git URL. Point it at your fork.
If you used .files before krypt landed (.update / .setup bash scripts):
paru -S krypt-bin(or your platform's install)git -C ~/.files pullkrypt update— replaces the old.updatechain; reloads hyprland if active- Existing
~/.config/hypr/{apps,input,monitors,hyprpaper}.confetc. stay untouched (gitignored, krypt does not overwrite seeded files)
Bash scripts in .local/bin/.* (e.g. .menu-power, .kanata, t) stay on
disk — krypt invokes them via [[command]] entries. They get full
shellcheck + ft=bash treatment instead of being inlined into TOML strings.
The Hyprland keybinds in hyprland.conf now invoke krypt menu <name> instead
of the scripts directly. Same for waybar on-click handlers.
krypt setup seeds these from *.template.* files on first run. Re-running is
safe — krypt only seeds files that don't exist yet.
| Template (repo) | Destination | Purpose |
|---|---|---|
.gitconfig.local.template |
~/.gitconfig.local |
Name, email, GPG |
.config/hypr/apps.template.conf |
~/.config/hypr/apps.conf |
$terminal, $browser, $lock |
.config/hypr/input.template.conf |
~/.config/hypr/input.conf |
Keyboard layout |
.config/hypr/monitors.template.conf |
~/.config/hypr/monitors.conf |
Monitor positions |
.config/hypr/hyprpaper.template.conf |
~/.config/hypr/hyprpaper.conf |
Wallpaper |
~/.gitconfig.local— identity + signing.~/.config/hypr/monitors.conf—hyprctl monitorsto discover names.~/.config/hypr/apps.conf— terminal / browser / file manager defaults.~/.config/hypr/input.conf— changekb_layoutif not US.
Optional:
~/.config/hypr/workspaces.conf— pin workspaces to monitors.~/.config/hypr/hyprpaper.conf— wallpaper path..codex/config.toml,.config/opencode/opencode.json— Ollama host.
$mod = Super (Windows key). Every menu binding invokes krypt menu <name>
or another krypt subcommand — see .krypt/commands.toml for the underlying
step.
| Bind | krypt invocation | Action |
|---|---|---|
$mod + return / c |
— | Alacritty |
$mod + b |
— | Browser |
$mod + e |
— | Nautilus |
$mod + space |
krypt menu apps |
App launcher |
$mod + r |
krypt menu calc |
qalculate picker |
$mod + . |
krypt menu emoji |
Emoji picker |
$mod + w |
krypt menu wifi |
WiFi picker |
$mod + a |
krypt menu audio |
wiremix |
$mod + u |
krypt menu bluetooth |
bluetui |
$mod + t |
krypt menu time |
Timezone picker |
$mod + escape |
krypt menu top |
btop |
$mod + shift + m |
krypt menu power |
Power picker |
$mod + n / +S+n |
— | swaync toggle / dismiss |
ctrl + shift + k |
krypt kanata toggle |
Toggle kanata.service |
| Bind | krypt invocation |
|---|---|
$mod + ctrl + j |
krypt menu autofill -- auth |
$mod + ctrl + k |
krypt menu autofill -- user |
$mod + ctrl + l |
krypt menu autofill -- pass |
$mod + ctrl + ; |
krypt menu autofill -- otp |
| Bind | Action |
|---|---|
$mod + p / Print |
Screenshot region (grimblast) |
$mod + shift + p |
Screen record (kooha) |
$mod + ctrl + p |
Color picker |
$mod + m |
Lock screen |
| Bind | Action |
|---|---|
$mod + q |
Close active |
$mod + f |
Maximize |
$mod + shift + f |
True fullscreen |
$mod + v |
Toggle floating |
$mod + s |
Toggle split direction |
$mod + h/j/k/l |
Focus left/down/up/right |
$mod + shift + h/j/k/l |
Move window |
ctrl + arrows |
Resize |
$mod + tab |
Cycle windows |
| Bind | Action |
|---|---|
$mod + 1..9,0 |
Switch to workspace 1..10 |
$mod + shift + 1..0 |
Move window to workspace |
$mod + LMB drag |
Move window |
$mod + RMB drag |
Resize window |
XF86Audio* and XF86MonBrightness* wired via swayosd-client.
$mod + up/down/left/right doubles as volume +/-/mute. Add shift for mic.
Top-level .krypt.toml declares [meta], [paths], [prompts.*], and
[[template]] entries, and includes three sub-files:
| File | Holds |
|---|---|
.krypt/links.toml |
[[link]] symlink rules (stow replacement) |
.krypt/deps.toml |
[[deps]] groups: cross-distro package mappings |
.krypt/commands.toml |
[[command]] group=… name=… — every krypt <group> <name> invocation |
[[hook]] when = "post-update" entries live in the top-level .krypt.toml.
To add a new menu (e.g. krypt menu screenshot):
- Add
[[command]] group = "menu" name = "screenshot" steps = […]to.krypt/commands.toml. - (Optional) Add the Hyprland bind in
.config/hypr/hyprland.conf:bind = $mod shift, s, exec, krypt menu screenshot. krypt validate— fail fast on config errors.
Scripts in .local/bin/ are intentionally named with a leading . (e.g.
.menu-apps, .kanata). Hidden from ls but show with ls -A. Keeps the
user's interactive PATH visually clean while still being invocable from
.krypt.toml.
See CONTRIBUTING.md for commit style, naming, lint.
MIT — see LICENSE.
