- Shell 40.4%
- Python 24.8%
- Lua 21.5%
- CSS 11.8%
- Just 1%
- Other 0.5%
| bat/.config/bat/themes | ||
| foot/.config/foot | ||
| ghostty/.config | ||
| hyprland | ||
| neomutt/.config | ||
| paru/.config/paru | ||
| password-store | ||
| shell | ||
| tmux | ||
| wezterm/.config/wezterm | ||
| .gitignore | ||
| justfile | ||
| README.md | ||
Dotfiles
Some of the configuration for the software that I use. This doesn't include neovim as that's in a separate repo.
How to use?
Clone the repo to your homedirectory. Then, use GNU Stow to "install" and "uninstall" the configurations.
To install:
stow ghostty
To uninstall:
stow -D ghostty
Some packages also ship a just setup recipe that stows them and wires up their systemd timers in one step — run just (or just --list) to see them.
Configs
foot
Foot terminal config with Catppuccin themes sourced via include=.
- Dependencies:
foot,ttf-jetbrains-mono
sudo pacman -S --needed foot ttf-jetbrains-mono
ghostty
Ghostty terminal config with Catppuccin themes.
- Dependencies:
ghostty
sudo pacman -S --needed ghostty
hyprland
Hyprland compositor config (Lua), Waybar, Rofi themes, wallpaper automation, and theme switchers for Hyprland, GTK, and Qt.
Requires Hyprland 0.55+ — the config is written in the new Lua format (
hyprland.lua); earlier versions only understandhyprland.conf.
sudo pacman -S --needed \
hyprland hyprpaper hypridle hyprlock hyprpolkitagent \
xdg-desktop-portal-hyprland xdg-desktop-portal-gtk \
waybar rofi dunst \
network-manager-applet \
wl-clipboard cliphist \
grim slurp jq socat python \
pipewire-pulse pavucontrol \
playerctl brightnessctl wlsunset \
qt5ct qt6ct kvantum \
papirus-icon-theme breeze \
kwallet kwallet-pam ksshaskpass libsecret gcr-4 \
ghostty thunar gvfs thunar-volman thunar-archive-plugin thunar-media-tags-plugin \
ristretto ffmpegthumbnailer libgsf \
firefox thunderbird zathura mpv \
foot wezterm \
flatpak \
ttf-jetbrains-mono-nerd noto-fonts
- OSD and power menu:
swayosd(volume/brightness/mic on-screen display) andwlogout(power menu) —paru -S swayosd wlogout.swayosdis also in the official repos on current Arch (sudo pacman -S swayosd);wlogoutis AUR-only.wlsunset(night light) is already in the pacman list above. - Enable automatic day/night theme switching (light between sunrise and sunset, computed locally by
sun-times): runjust setup-hypr(stows, enables the timer, applies the current theme), or do it manually withsystemctl --user enable --now theme-auto.timer && systemctl --user enable theme-auto.service. Toggle manually withMod+Shift+T(or run~/.local/bin/theme-toggle). - Night light turns on at 21:00 and reverts at 07:00 via
wlsunset, autostarted fromhyprland.lua; edit the-S/-s/-t/-Tflags there to change the times or warmth. - New keybinds:
Mod+Mpower menu,Mod+/keybind cheatsheet,Mod+Shift+M/XF86AudioMicMutemicrophone mute,Mod+Nnotification history,Mod+Shift+Ndismiss all notifications. steam(used by theMod+Shift+Sbind) needs themultilibrepo — install separately.- Flatpak fallbacks (Spotify, Discord, Bitwarden, Telegram):
flatpak install flathub com.spotify.Client com.discordapp.Discord com.bitwarden.desktop org.telegram.desktop. - Theme assets: install Catppuccin GTK and Kvantum themes so the light/dark switchers can target Latte and Mocha variants.
- If AUR packages are unavailable, run
~/.local/bin/update-catppuccin-themesto install the Catppuccin GTK and Kvantum assets directly for the current user. - Keyring support: KWallet provides the Secret Service.
kwalletd6is the wallet daemon;ksecretdis the bridge that actually registersorg.freedesktop.secrets(the name libsecret,git-credential-libsecret, and Electron's--password-storetalk to). The Hyprland session importsDISPLAY,WAYLAND_DISPLAY, and the XDG session variables into the user D-Bus/systemd environment so prompts work. hyprland.luaautostartsksecretd(Plasma normally does this). It must run, and must start afterdbus-update-activation-environment: thekwallet-pam--pam-logininstance races the user bus at login and loses, so without the explicit autostartorg.freedesktop.secretsends up unregistered (secret-toolreports "The name is not activatable").- SDDM: Arch's default
/etc/pam.d/sddmalready includes thepam_kwallet5.soauth/sessionlines (the module name ispam_kwallet5.soeven with the KF6kwalletd6daemon). Withkwallet-paminstalled, the wallet is unlocked at login using your login password — no manual socket to enable. - After install, fully log out through
SDDMor reboot sokwallet-pamunlocks the wallet andkwalletd6claims the Secret Service. Reloading Hyprland alone is not enough. - Do NOT also run
gnome-keyring: it races KWallet fororg.freedesktop.secrets(whoever registers it first wins). This setup removes it entirely (pacman -Rns gnome-keyring). Note KDE has noorg.freedesktop.impl.portal.Secretbackend, so Flatpak apps using the Secret portal lose secret storage — keepgnome-keyringinstalled only if you need that. - Optional Git HTTPS credential storage:
git config --global credential.helper /usr/lib/git-core/git-credential-libsecret(works against KWallet via the Secret Service). - Electron app wrappers: this repo ships
~/.local/bin/element-desktop,~/.local/bin/discord,~/.local/bin/bitwarden-desktop, and~/.local/bin/signal-desktop, all of which force--password-store=kwallet6. Without it, Electron auto-detects the keyring fromXDG_CURRENT_DESKTOP(which isHyprlandhere, for theming), fails to match KDE/GNOME, and falls back to the plaintextbasicstore.- Discord and Bitwarden are launched via keybinds (
Mod+Ctrl+D/Mod+Ctrl+B) that call the wrappers directly. - Signal is launched from its
.desktopentry, so this repo ships a local override in~/.local/share/applications/signal.desktopthat pointsExecat the wrapper (the system entry calls/usr/bin/...directly and bypasses it). Note~/.local/binis after/usr/binin PATH, so the override uses the wrapper's absolute path, not the bare command. - Element is not forced onto kwallet: element-desktop's safeStorage
migration to kwallet6 relaunches in an infinite loop
(element-hq/element-desktop#2381, unfixed). It's left on Electron's default
(
basic_text) until upstream fixes it; theelement-desktopwrapper stays shipped but no.desktopoverride points at it.
- Discord and Bitwarden are launched via keybinds (
paru
Paru AUR helper configuration.
- Dependencies:
paru
sudo pacman -S --needed base-devel
git clone https://aur.archlinux.org/paru-bin.git /tmp/paru
pushd /tmp/paru
makepkg -si
popd
rm -rf /tmp/paru
shell
Git config and attributes.
- Dependencies:
git,bat,neovim,git-lfs,odt2txt
sudo pacman -S --needed git bat neovim git-lfs odt2txt
tmux
tmux config: vim-style navigation, vi copy-mode (selections go to the system clipboard via OSC-52, so copy works over SSH too), and a Catppuccin status bar that switches between Mocha and Latte on its own systemd timers — no graphical session required, so it also works on a headless server.
- Dependencies:
tmux, plusstowandjustfor setup
sudo pacman -S --needed tmux stow just
First-time setup (stows tmux, enables the 07:00/19:00 theme timers, applies the current theme):
just setup-tmux
On a headless server, also enable lingering once so the timers fire without an active login:
sudo loginctl enable-linger "$USER"
Switch manually any time with ~/.local/bin/tmux-theme dark|light|toggle.
wezterm
WezTerm terminal config with Catppuccin schemes.
- Dependencies:
wezterm
sudo pacman -S --needed wezterm