No description
  • Shell 40.4%
  • Python 24.8%
  • Lua 21.5%
  • CSS 11.8%
  • Just 1%
  • Other 0.5%
Find a file
2026-10-02 14:49:31 +02:00
bat/.config/bat/themes theme: theme-auto timer, cgroup-safe respawns, bat theming, waybar rework 2026-08-12 21:16:09 +02:00
foot/.config/foot fix foot and gtk 2026-03-11 11:22:09 +01:00
ghostty/.config theme: theme-auto timer, cgroup-safe respawns, bat theming, waybar rework 2026-08-12 21:16:09 +02:00
hyprland hypr: se-mac layout with dead keys 2026-10-02 14:49:31 +02:00
neomutt/.config neomutt + theme fix + packages 2026-04-15 11:31:21 +02:00
paru/.config/paru theme: theme-auto timer, cgroup-safe respawns, bat theming, waybar rework 2026-08-12 21:16:09 +02:00
password-store neomutt + theme fix + packages 2026-04-15 11:31:21 +02:00
shell theme: theme-auto timer, cgroup-safe respawns, bat theming, waybar rework 2026-08-12 21:16:09 +02:00
tmux tmux: run server as a persistent user service 2026-06-05 15:33:04 +02:00
wezterm/.config/wezterm wezterm 2026-03-04 17:59:01 +01:00
.gitignore theme: follow the sun (sun-times NOAA calc, dynamic transition timers) 2026-08-12 21:16:09 +02:00
justfile setup-hypr: theme-auto, pre-create shared dirs before stow 2026-10-02 14:42:28 +02:00
README.md setup-hypr: theme-auto, pre-create shared dirs before stow 2026-10-02 14:42:28 +02:00

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 understand hyprland.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) and wlogout (power menu) — paru -S swayosd wlogout. swayosd is also in the official repos on current Arch (sudo pacman -S swayosd); wlogout is 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): run just setup-hypr (stows, enables the timer, applies the current theme), or do it manually with systemctl --user enable --now theme-auto.timer && systemctl --user enable theme-auto.service. Toggle manually with Mod+Shift+T (or run ~/.local/bin/theme-toggle).
  • Night light turns on at 21:00 and reverts at 07:00 via wlsunset, autostarted from hyprland.lua; edit the -S/-s/-t/-T flags there to change the times or warmth.
  • New keybinds: Mod+M power menu, Mod+/ keybind cheatsheet, Mod+Shift+M / XF86AudioMicMute microphone mute, Mod+N notification history, Mod+Shift+N dismiss all notifications.
  • steam (used by the Mod+Shift+S bind) needs the multilib repo — 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-themes to install the Catppuccin GTK and Kvantum assets directly for the current user.
  • Keyring support: KWallet provides the Secret Service. kwalletd6 is the wallet daemon; ksecretd is the bridge that actually registers org.freedesktop.secrets (the name libsecret, git-credential-libsecret, and Electron's --password-store talk to). The Hyprland session imports DISPLAY, WAYLAND_DISPLAY, and the XDG session variables into the user D-Bus/systemd environment so prompts work.
  • hyprland.lua autostarts ksecretd (Plasma normally does this). It must run, and must start after dbus-update-activation-environment: the kwallet-pam --pam-login instance races the user bus at login and loses, so without the explicit autostart org.freedesktop.secrets ends up unregistered (secret-tool reports "The name is not activatable").
  • SDDM: Arch's default /etc/pam.d/sddm already includes the pam_kwallet5.so auth/session lines (the module name is pam_kwallet5.so even with the KF6 kwalletd6 daemon). With kwallet-pam installed, the wallet is unlocked at login using your login password — no manual socket to enable.
  • After install, fully log out through SDDM or reboot so kwallet-pam unlocks the wallet and kwalletd6 claims the Secret Service. Reloading Hyprland alone is not enough.
  • Do NOT also run gnome-keyring: it races KWallet for org.freedesktop.secrets (whoever registers it first wins). This setup removes it entirely (pacman -Rns gnome-keyring). Note KDE has no org.freedesktop.impl.portal.Secret backend, so Flatpak apps using the Secret portal lose secret storage — keep gnome-keyring installed 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 from XDG_CURRENT_DESKTOP (which is Hyprland here, for theming), fails to match KDE/GNOME, and falls back to the plaintext basic store.
    • Discord and Bitwarden are launched via keybinds (Mod+Ctrl+D / Mod+Ctrl+B) that call the wrappers directly.
    • Signal is launched from its .desktop entry, so this repo ships a local override in ~/.local/share/applications/signal.desktop that points Exec at the wrapper (the system entry calls /usr/bin/... directly and bypasses it). Note ~/.local/bin is after /usr/bin in 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; the element-desktop wrapper stays shipped but no .desktop override points at it.

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, plus stow and just for 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