How nakulbhat/dotfiles works
Purpose and Entry Points
This is a personal Linux desktop dotfiles repository centered on a NixOS host and Hyprland Wayland session. The primary system entry point is nixos/configuration.nix; user-session behavior is rooted in hypr/hyprland.conf. Application configuration is maintained directly in sibling directories and is expected to be linked or deployed into user config locations.
NixOS System Composition
nixos/configuration.nix defines the machine-level NixOS configuration and imports hardware settings from nixos/hardware-configuration.nix. It composes focused modules for installed applications, shell setup, user accounts, development tools, Python, Neovim, and Hyprland:
• nixos/modules/apps.nix
• nixos/modules/users.nix
• nixos/modules/hyprland.nix
This is the main declarative provisioning boundary: NixOS evaluates these modules to configure system packages, services, users, and desktop-session prerequisites.
Hyprland Desktop Session
hypr/hyprland.conf is the interactive compositor/session control plane: monitor, input, window-management, keybinding, and startup behavior belong here. Its commands delegate operational actions to scripts under hypr/scripts/, separating compositor policy from imperative desktop actions:
• hypr/scripts/monitor_setup.sh
• hypr/scripts/runner.sh
• hypr/scripts/walls_randomiser.sh
The session depends on Wayland-native desktop utilities configured elsewhere in the repository.
Desktop UI and Notification Boundary
The visible desktop shell is split across specialized processes:
• waybar/config and waybar/style.css define the status bar and presentation.
• mako/config configures notifications.
• tofi/config configures the application launcher.
• hypr/hyprpaper.template provides wallpaper configuration input.
waybar/script.sh is the notable bridge from status-bar configuration to shell-derived runtime data or actions.
Launcher and Device Automation Scripts
Hyprland bindings and launch actions invoke shell scripts that encapsulate environment-specific behavior. Terminal, editor, PDF, runner, monitor, wallpaper, and audio-output actions are independently scriptable:
• hypr/scripts/term_launcher.sh
• hypr/scripts/nvim_launcher.sh
• hypr/scripts/switch_to_headphones.sh
These scripts are an imperative boundary around external desktop tools and hardware/audio state; Hyprland remains the dispatcher.
Editor and Developer Environment
Neovim is configured as a Lua-based IDE. nvim/init.lua bootstraps editor configuration; nvim/lua/config/lazy.lua establishes plugin management, while LSP and plugin declarations define language tooling and completion:
• nvim/lua/config/lsp.lua
• nvim/lua/plugins/core.lua
• nvim/lua/plugins/blink.lua
System-level availability of Neovim and development dependencies is coordinated through nixos/modules/neovim.nix, nixos/modules/dev-utils.nix, and nixos/modules/python-environment.nix.
Terminal, Shell, and Document Clients
The user interaction layer uses Kitty, Zsh, Zathura, and Oh My Posh theme data:
• kitty/kitty.conf
• zsh/.zshrc
• zathura/zathurarc
These applications are configured independently but participate in the Hyprland session through launch scripts and NixOS-installed packages. The result is a NixOS-provisioned Wayland workstation whose runtime control flows from Hyprland bindings into dedicated scripts and configured desktop clients.
Main entry points: hyprland.conf Hyprland configuration · configuration.nix NixOS configuration · init.lua Neovim bootstrap · apps.nix Application packages
Components 19
NixOS provisioning
Declarative machine and package setup.
- NixOS configuration · Composes host modules and hardware settings.
nixos/configuration.nix - Hardware settings
nixos/hardware-configuration.nix - Application packages
nixos/modules/apps.nix - User accounts
nixos/modules/users.nix - Hyprland prerequisites
nixos/modules/hyprland.nix - Development dependencies · Provides developer, Python, and Neovim dependencies.
nixos/modules/dev-utils.nix
Hyprland session
Wayland compositor policy and operational actions.
- Hyprland configuration · Controls compositor policy, bindings, and startup.
hypr/hyprland.conf - Desktop action scripts · Launchers and monitor, wallpaper, and audio actions.
hypr/scripts/runner.sh - Wallpaper input
hypr/hyprpaper.template
Desktop clients
Independent user-facing Wayland application configuration.
- Waybar · Status bar configuration and styling.
waybar/config - Waybar runtime bridge · Supplies shell-derived status data or actions.
waybar/script.sh - Mako
mako/config - Tofi
tofi/config - Terminal and shell · Kitty and Zsh user interaction environment.
kitty/kitty.conf - Zathura
zathura/zathurarc
Editor environment
Neovim configuration and language tooling.
- Neovim bootstrap · Initializes the Lua-based IDE configuration.
nvim/init.lua - Plugin manager
nvim/lua/config/lazy.lua - LSP tooling
nvim/lua/config/lsp.lua - Core and completion plugins
nvim/lua/plugins/core.lua
Connections 22
- NixOS configuration → Hardware settings: imports
- NixOS configuration → Application packages: composes
- NixOS configuration → User accounts: composes
- NixOS configuration → Hyprland prerequisites: enables
- NixOS configuration → Development dependencies: provisions
- Hyprland prerequisites → Hyprland configuration: supports session
- Application packages → Waybar: provides package
- Application packages → Mako: provides package
- Application packages → Tofi: provides package
- Hyprland configuration → Desktop action scripts: dispatches actions
- Hyprland configuration → Waybar: starts desktop bar
- Hyprland configuration → Mako: uses notifications
- Hyprland configuration → Tofi: opens launcher
- Hyprland configuration → Wallpaper input: uses wallpaper input
- Desktop action scripts → Terminal and shell: launches terminal
- Desktop action scripts → Neovim bootstrap: launches editor
- Desktop action scripts → Zathura: launches PDF client
- Waybar → Waybar runtime bridge: executes
- Development dependencies → Neovim bootstrap: provides runtime
- Neovim bootstrap → Plugin manager: bootstraps
- Neovim bootstrap → LSP tooling: loads
- Neovim bootstrap → Core and completion plugins: loads