A collection of my personal shell configuration files, or "dotfiles"
- Emacs Lisp 28.6%
- Lua 18.1%
- QML 15.2%
- Shell 13.4%
- Vim Script 13.1%
- Other 11.6%
| .doom.d | cleanup sway conf | |
| darkman | revamp | |
| fnott | cleanup | |
| fontconfig/conf.d | systemd | |
| foot | overhaul cleanup | |
| fuzzel | dotfile overhaul | |
| gammastep | update | |
| hypr | overhaul cleanup | |
| kanshi | update changes | |
| mako | revamp | |
| mutt | make dotfiles slav | |
| niri | survival under occupation | |
| nvim | make dotfiles slav | |
| quickshell | cleanup | |
| rofi | commit | |
| scripts | make dotfiles slav | |
| sway | add hyprland config | |
| swaylock | ignore dirty | |
| systemd | docs | |
| vim | fixup | |
| waybar | docs | |
| yambar | cleanup | |
| .gitignore | overhaul cleanup | |
| .gitmodules | make dotfiles slav | |
| desktop.png | wallpaper | |
| gpg-agent.conf | dotfile overhaul | |
| HALL_OF_SHAME.md | survival under occupation | |
| LICENSE | Create LICENSE | |
| Makefile | make dotfiles slav | |
| README | make dotfiles slav | |
| screenrc | clean some stuff up | |
| strip.exiv2 | doom | |
| Xdefaults | vim plugin submodules | |
| xinitrc | overhaul cleanup | |
| zshrc | survival under occupation | |
dotfiles ======== These are my dotfiles, or in other words, a collection of configuration for various programs. All stored in a single repository. The idea is you clone a single repo, and can install the configuration using various make targets. Flagship support is Arch Linux. WSL and Apple are at your own risk — see Apple section below. REQUIREMENTS ------------ git, GNU make, and the following programs from your package manager: Compositor / Shell niri scrollable tiling Wayland compositor foot terminal emulator (responds to SIGUSR1/SIGUSR2 for theming) quickshell QML-based status bar (network, audio, battery) pipewire audio system Notifications / Launcher fnott lightweight Wayland notification daemon fuzzel application launcher and dmenu replacement fyi Wayland notification client (battery warning script) Status Bar waybar status bar (run make waybar separately, not in make all) sass SCSS compiler (builds waybar CSS) Theming theme.sh terminal theme switcher (color extraction) darkman day/night coordinator Network iwd Intel Wireless Daemon (no NetworkManager) Shell doas privilege escalation (aliased over sudo; opendoas) eza modern ls replacement (ls alias) kubecolor colorized kubectl (required by kubectl wrapper) zsh-syntax-highlighting Arch: /usr/share/zsh/plugins/; adjust for other distros zsh-autosuggestions Arch: /usr/share/zsh/plugins/; adjust for other distros Optional menu-iwd Wifi menu selector script; clone to ~/menu-iwd https://codeberg.org/bagnaram/menu-iwd inhibit-bridge Bridges org.freedesktop.ScreenSaver D-Bus Inhibit/ UnInhibit calls (used by Firefox/Chrome/etc. during video playback) to systemd-logind idle inhibits, so swayidle and other logind-aware idle daemons respect them on i3/sway/niri. Source from neighbor Vadim; build and place at ~/build/inhibit-bridge. If the source is unavailable, any FOSS daemon implementing the same ScreenSaver-to-logind bridge fills the role. wlclock Wayland overlay clock shown by niri at startup build and place at ~/build/wclock/wlclock/build/wlclock xscreensaver-pipes Screensaver used by swayidle on lock/idle build and place at ~/build/wscreensaver/wayland/build/xscreensaver-pipes Dracula PRO Paid terminal/editor colorscheme (https://draculatheme.com/pro) Place foot theme at foot/private/dracula-pro.ini Place nvim themes at nvim/colors/dracula_pro_*.vim Falls back to habamax if absent. INSTALLATION ------------ 1. Install packages (Arch Linux) pacman -S niri foot quickshell pipewire fnott fuzzel fyi \ darkman iwd eza zsh-syntax-highlighting \ zsh-autosuggestions gettext dart-sass qt6ct \ rofimoji pass brightnessctl pamixer waybar \ swaylock swayidle gnupg paru -S theme.sh opendoas kubecolor swaylock-plugin 2. Clone the repository git clone https://codeberg.org/bagnaram/dotfiles.git cd dotfiles 3. Install everything make all NOTE: waybar, gpg-agent, and systemd services are not included in make all. Run separately when ready: make waybar make gpg-agent make systemd Other specific targets: make niri make nvim make darkman 4. Initialize nvim plugins make nvim-pathogen 5. To uninstall (removes symlinks and generated theme files) make clean THEMING PIPELINE ---------------- Light and dark configs are generated at install time from two mechanisms: envsubst templates Files ending in .env are processed with colors from theme.sh to produce .light and .dark variants. Applies to: fnott, fuzzel, niri, swaylock. SASS waybar/style.scss is compiled with theme colors injected as SCSS variables. Produces style.css.light and style.css.dark. The active variant is selected at runtime by symlinking: ~/.config/waybar/style.css -> style.css.light (or .dark) Light/dark theme names are set at the top of Makefile: LIGHT_THEME := gruvbox DARK_THEME := dracula darkman calls scripts/day_night_cycle.sh on each transition, which signals foot (SIGUSR1=dark, SIGUSR2=light) and reloads fnott config. NVIM ---- Plugins managed via pathogen and git submodules under nvim/bundle/. No plugin manager. Initialize or update all plugins with: make nvim-pathogen Config split across nvim/init.vim (vimscript) and nvim/config/*.lua (lua). OPSEC: strip.exiv2 ------------------ Strips GPS metadata from images before sharing. Used via the strip alias: strip photo.jpg Removes all Exif.GPSInfo.* tags. No coordinates leave the machine. GPG / YUBIKEY SSH ----------------- GPG subkeys provide SSH access. Private keys live only on the YubiKey. 1. Link GPG agent config make gpg-agent 2. Learn card keys echo 'scd learn --force' | gpg-connect-agent The third line (OPENPGP.3) is the keygrip for the authentication key. Add it to ~/.gnupg/sshcontrol. MUTT ---- Account files are gitignored. Create your own at mutt/account.<name> and update the source line in mutt/muttrc to match. APPLE ------------------------------------- This repo supports macOS. That sentence was painful to write. The author is a Wayland/Linux user. This support exists because a corporate employer issued an Apple laptop and called it non-negotiable. It is not an endorsement. It is not a migration. It is survival under occupation. What is lost: niri, foot, fnott, fuzzel, darkman, waybar, quickshell, swaylock, gammastep, systemd, XKB, pipewire. The entire reason this repo exists. Gone. Replaced by a walled garden with no package manager and rounded corners on everything. What survives: nvim, zsh, mutt, gpg/yubikey, screen, mise, fontconfig. The essentials. Enough to work. Not enough to be happy about it. Terminal: install WezTerm or raTTY manually. foot is Wayland-only. foot will be missed. dnkl wrote something beautiful. Compositor: macOS has one. You cannot configure it. You cannot tile with it. You will use Rectangle or Aerospace and pretend it is enough. It is not. Package manager: brew. It is fine but it is not pacman. REQUIREMENTS (macOS) brew install neovim neomutt mise eza fzf gpg pinentry-mac \ zsh-syntax-highlighting zsh-autosuggestions \ sass/sass/sass fontconfig INSTALLATION (macOS) make all-apple The author reserves the right to return to Linux at the earliest opportunity. The Wayland targets remain in this repo, maintained and ready, for when that day comes. They are not dead. They are waiting. WSL ------------- This repo also supports WSL but much more at your own risk. Please see make targets for WSL specifics and tread carefully. CUSTOMIZATION ------------- Modify files within the dotfiles directory directly. For templated configs (fnott, fuzzel, niri, swaylock, waybar) edit the *.env / *.scss source files, not the generated output in ~/.config/.