Skip to content

Repository files navigation

Dotfiles

These are my dotfiles. Take anything you want, but at your own risk.

Dependencies

Core

Package Description Module
Neovim Editor ($EDITOR / $VISUAL) -
Git Version control tools
delta Git pager (side-by-side diffs) tools
fzf Fuzzy finder (used in git aliases) tools
jq JSON processor (used by toggle-monitor.sh) bin
libnotify notify-send desktop notifications bin
Jujutsu (jj) Alternative VCS tools
Claude Code AI coding CLI (settings/statusline symlinked to ~/.claude/) tools

Shell (pick one)

Package Description Module
Zsh Primary shell zsh
Bash Fallback shell bash
Starship Cross-shell prompt (optional, disabled by default) tools
NVM Node version manager (optional) -

Desktop environment (Wayland)

Package Description Module
Hyprland Wayland compositor ui
Waybar Status bar ui
Wofi Application launcher ui
Hyprlock Lock screen ui
Swaybg Wallpaper (expects ~/wallpapers/bg.jpg) ui
Dunst Notification daemon tools
Cliphist Clipboard manager ui
wl-clipboard Wayland copy/paste (wl-copy, wl-paste) ui
Grim + Slurp Screenshots ui
pavucontrol PulseAudio volume control ui
hyprpolkitagent Polkit authentication agent ui
WirePlumber wpctl audio control (volume keys + Waybar module) ui
brightnessctl Backlight control (brightness keys + Waybar module) ui
playerctl Media key control (play/pause/next/prev) ui
PCManFM File manager tools

Terminal & media

Package Description Module
Ghostty Terminal emulator tools
MPV Video player video
Superfile Terminal file explorer tools
htop Process monitor tools

Fonts & theming

Package Description
Ubuntu Mono GTK and Qt UI font (ttf-ubuntu-font-family, family Ubuntu Mono)
Geist Hyprland OSD and Hyprlock (ttf-geist-variable, family Geist)
Geist Mono Terminal font (otf-geist-mono-nerd, family GeistMono Nerd Font). Note: Geist Mono is not a resolvable family
JetBrainsMono Nerd Font Glyph fallback (Waybar, Wofi)
Neon Noir (custom, inline) Muted cyan/magenta-on-blue-black scheme across terminal/shell apps (Ghostty, Waybar, Wofi, Hyprlock, Dunst, Btop, Starship, Lazygit, Superfile, jj, mpv OSD, Claude statusline)
Neon Noir (CLI tools) fzf, eza and man-page colors via config/shared-exports.sh; bat and delta use ansi so they follow the terminal palette
Tokyonight-Dark GTK2/3/4 app theme (tokyonight-gtk-theme-git)
Catppuccin Mocha Sky Qt theme via Kvantum (kvantum-theme-catppuccin-git)
Papirus-Dark Icon theme (GTK and Qt). Folder color set with papirus-folders
Simp1e Tokyo Night Cursor theme (xcursor-simp1e-tokyo-night, Xcursor only — no hyprcursor build)
Kvantum + qt6ct Qt theming

Folder icons are recolored with a system-wide command, not a config file. It rewrites the SVGs under /usr/share/icons/Papirus-Dark:

sudo papirus-folders -C violet --theme Papirus-Dark

violet is #7e57c2, close to the palette violet #8a7ac4, and pairs with the violet active-tab outline in gtk-3.0/gtk.css. Cyan stays reserved for selection state so the two markers don't compete. Avoid plain cyan (#00bcd4) — full-saturation Material cyan, which glares against the #121824 base.

A papirus-icon-theme upgrade silently reverts this and folders go back to the default blue. Re-run the command after upgrading. It is deliberately not in bin/apply-gtk-theme.sh, which runs at login and must not need sudo.

Usage

Install

git clone https://github.com/nclsprsn/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
cp config/config.sh.default config/config.sh
nvim config/config.sh
./INSTALL.sh

The install script symlinks *.symlink files to your home directory and ~/.config/. Edit config/config.sh to set your OS, environment, user role, and excluded modules.

Configuration

In config/config.sh:

Option Values Description
DOTFILES_OS Arch, Debian Target distribution
DOTFILES_ENV Desktop, Server Environment type
DOTFILES_USER Admin, User, Root User role
DOTFILES_STARSHIP_ENABLED true, false Use Starship prompt
DOTFILES_EXCLUDE Module names Modules to skip during install

Available modules: zsh, bash, ui, video, tools.

Machine-specific overrides go in custom/ (gitignored). Drop scripts in custom/bin/ and per-machine env/boot tweaks there so they stay out of version control.

Note: The ui module (Hyprland, Waybar, etc.) ships with hardware-specific defaults (monitor layout, French AZERTY keyboard, AMD GPU env vars) that you will need to adapt to your own setup.

Uninstall

cd ~/.dotfiles
./UNINSTALL.sh --dry-run   # show what would be removed
./UNINSTALL.sh

It reads .installed.list and removes only symlinks that still point into ~/.dotfiles; anything else at a recorded path is reported and left alone. If the installer made a *.backup copy of a file it replaced, that copy is restored. Afterwards, remove the ~/.dotfiles folder.

INSTALL.sh applies the same rule when you remove a module: it compares the previous .installed.list with the new one and prunes any symlink it no longer owns. So adding a module to DOTFILES_EXCLUDE and re-running the installer actually uninstalls that module rather than leaving its symlinks behind.

Claude Code

tools/claude/ is symlinked into ~/.claude/:

Source Target
settings.json.symlink ~/.claude/settings.json — permissions, hooks, statusline, plugins
CLAUDE.md.symlink ~/.claude/CLAUDE.md — global instructions
statusline.sh.symlink ~/.claude/statusline.sh — Neon Noir statusline (context, cost, rate limits, git)
subagent-statusline.sh.symlink ~/.claude/subagent-statusline.sh — one JSON line per running task, not a second status line
claude-powerline.json.symlink ~/.claude/claude-powerline.json — Neon Noir theme for claude-powerline
hooks/*.sh.symlink ~/.claude/hooks/ — pre/post tool-use guards
commands/*.md.symlink ~/.claude/commands//reload-ui, /theme-check, /dotfiles-install
skills/<name>/SKILL.md.symlink ~/.claude/skills/<name>/SKILL.md — currently herdr, generated by the herdr binary

Hooks are standalone scripts rather than inline JSON, so they are linted by CI and covered by tools/claude/hooks/test.sh. They block writes to credential and system paths, and block destructive shell commands. They are a guard rail against accidents, not a sandbox.

Machine-specific bits (local MCP servers) go in ~/.claude/settings.local.json; see tools/claude/settings.local.json.example.

Scripts

Utility scripts in bin/ (added to $PATH):

Script Description
apply-gtk-theme.sh Push the GTK theme/icons/cursor/font into dconf (run from the Hyprland autostart; dconf overrides gtk-3.0/settings.ini for portal-based apps)
toggle-waybar.sh Show/hide Waybar, going edge-to-edge while hidden (bound to $mainMod+B); delegates spacing to toggle-gaps.sh
toggle-gaps.sh Window spacing — gaps, border and rounding (bound to $mainMod+G). off puts windows flush at 0,0; takes on/off, or toggles with no argument; needs jq
toggle-monitor.sh Enable/disable a monitor by name (bound to $mainMod+P / $mainMod+SHIFT+P); needs jq + notify-send
waybar-unmapped-classes.sh List open windows with no window-rewrite icon rule in the Waybar config, so they can be given a workspace icon; needs jq + hyprctl
disk.sh Live block-device + filesystem usage (uses dfc if present, else df)
treeview.sh ASCII tree of a directory
jd-captcha-watcher.py Move JDownloader captcha popups to a dedicated workspace (opt-in; uncomment it in the hyprland.start handler in hyprland.lua)

Screenshots

Screenshot desktop

Contributing to the dotfiles

You can discuss using the issues section. To contribute, create an issue, and send a pull request.

License

The dotfiles are available under the Beerware license.

About

Dotfiles 🐱

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Contributors

Languages