A collection of my personal configurations, tools, and scripts for a streamlined development workflow.
Find a file
2026-10-20 15:20:25 +03:00
atuin feat: add config for atuin 2026-09-09 19:25:23 +03:00
bash feat: add nixos configuration 2026-10-03 13:15:51 +00:00
git feat: update git aliases 2026-10-20 15:20:25 +03:00
gitui feat: add gitui config 2026-09-09 19:25:37 +03:00
hypr [refactor] fix formating for hyprland 2026-10-11 20:19:43 +03:00
kitty feat: configure ProFont and desktop fonts 2026-10-05 00:37:52 +03:00
mako feat: configure Waybar, Wofi and Mako 2026-10-05 00:37:52 +03:00
nixos [feat] add some usefull modules for nix 2026-10-11 20:19:31 +03:00
nvim feat: add bufferline buffers renaming 2026-10-20 15:20:25 +03:00
sddm feat: add custom SDDM login theme 2026-10-05 00:37:52 +03:00
wallpapers feat: add wallpapers 2026-08-30 14:01:45 +03:00
waybar feat: configure Waybar, Wofi and Mako 2026-10-05 00:37:52 +03:00
wofi feat: configure Waybar, Wofi and Mako 2026-10-05 00:37:52 +03:00
.gitignore feat: update gitignore 2026-10-20 15:20:25 +03:00
flake.lock feat: manage user configuration with Home Manager 2026-10-05 00:37:52 +03:00
flake.nix feat: manage user configuration with Home Manager 2026-10-05 00:37:52 +03:00
README.md [refactor] update README docs 2026-10-11 20:24:56 +03:00

Custom environment

My personal NixOS configuration and dotfiles for user hhhh on host nixos (x86_64-linux). The desktop uses Hyprland, Kitty, Neovim, and Bash, with Home Manager linking application settings directly to this repository.

Toolset

Tool Purpose
Hyprland Wayland desktop compositor
Waybar / Wofi / Mako Status bar, application launcher, and notifications
SDDM / Hyprlock Login screen and session locking
Kitty Terminal emulator
Neovim Editor and development environment
Starship Fast, minimal shell prompt
direnv Per-project environment variables
zoxide Smarter directory navigation
Atuin Searchable shell history
ble.sh Interactive Bash editing and completion
fzf Fuzzy finding from the command line
eza Modern replacement for ls
GitUI Terminal UI for Git

The shell configuration also includes shortcuts for Meson and Ninja builds, sanitizer-assisted test runs, perf, FlameGraph, and systemd user scopes.

Repository layout

.
├── flake.nix             # Reproducible NixOS entry point
├── flake.lock            # Pinned dependency revisions
├── nixos/                # Host and reusable NixOS modules
├── bash/                 # Bash environment, aliases, and helper functions
├── atuin/                # Atuin configuration
├── git/                  # Git settings and aliases
├── gitui/                # GitUI key bindings
├── kitty/                # Kitty settings and color themes
├── hypr/                 # Hyprland Lua config, monitors, wallpapers, and locking
├── sddm/                 # Custom Qt 6 login theme
├── mako/                 # Notification settings
├── nvim/                 # Neovim Lua configuration, plugins, LSP, and themes
├── waybar/               # Compact Hyprland status bar and power menu
├── wofi/                 # Application launcher with icons
└── wallpapers/           # Desktop wallpapers

Starship, direnv, zoxide, fzf, and eza do not currently have dedicated configuration directories tracked in this repository.

NixOS

The flake exposes the nixos host. Its machine-specific configuration lives in nixos/hosts/nixos, while reusable settings are grouped by purpose in nixos/modules. Packages are split into desktop, development, shell, and general utility modules under nixos/modules/packages. The main Nixpkgs input uses nixos-26.05; Home Manager uses release-26.05 and follows that input. The configuration enables NVIDIA graphics, PipeWire audio, NetworkManager, OpenSSH, Podman, and Throne with TUN support.

From the repository root, check and apply the configuration with:

nix flake check --no-build
sudo nixos-rebuild switch --flake .#nixos

Use nix flake check for a full check including builds; --no-build checks configuration evaluation without building the checks.

On the first run, if flakes are not enabled in the currently booted system, pass the feature flags explicitly:

sudo nixos-rebuild switch \
  --extra-experimental-features 'nix-command flakes' \
  --flake .#nixos

Update all pinned flake inputs and rebuild with:

nix flake update
sudo nixos-rebuild switch --flake .#nixos

Codex is taken from a separately pinned Nixpkgs master input so it can be updated without upgrading the stable NixOS package set:

nix flake update codex-nixpkgs
sudo nixos-rebuild switch --flake .#nixos

The codex-background-server user service starts automatically when hhhh logs in and listens on the local Unix socket. Connect with codex --remote unix://. Check its status with systemctl --user status codex-background-server and view its logs with journalctl --user -u codex-background-server.

Before applying this configuration on another machine, replace nixos/hosts/nixos/hardware-configuration.nix with that machine's configuration and review the host name, user, graphics driver, and monitor settings. nixos/hosts/nixos/default.nix also copies Windows EFI files from a specific partition to /boot/EFI/ during bootloader installation; adapt or remove that hook if the target machine does not use this dual-boot layout.

Keep system.stateVersion and home.stateVersion at their initial setup versions when updating packages. Ordinary package additions do not require updating flake.lock.

Hyprland desktop

The active configuration is hypr/hyprland.lua, which loads monitors.lua. The neighboring monitors.conf and workspaces.conf are not loaded by it. Workspaces 1–10 belong to DP-3; HDMI-A-2 has a dedicated named workspace. Monitor modes and positions live in monitors.lua, and wallpaper assignments live in hypr/hyprpaper.conf.

Hyprland starts Hyprpaper, Waybar, and the Home Manager udiskie service. Udiskie automatically mounts removable media without a tray icon.

Shortcut Action
Super+T Open Kitty
Super+R Open Wofi
Super+C Close the active window
Super+L Lock the session
Super+Shift+S Copy a region screenshot to the clipboard
Super+1 … Super+0 Select workspace 1–10
Super+Shift+1 … Super+Shift+0 Move a window to workspace 1–10
Alt+H / Alt+L Cycle primary-monitor workspaces
Ctrl+Space Switch English/Russian keyboard layouts

Waybar settings are in waybar/config.jsonc and waybar/style.css; waybar/power-menu.sh provides lock, suspend, reboot, and power-off actions.

Screen locking

The initial SDDM login screen uses a matching Qt 6 theme in sddm/, packaged by nixos/modules/login-theme.nix. Its assets and ProFont are included in the theme package so they are available before a user session starts. It supports username/password entry, desktop session selection, and power actions. Apply with nixos-rebuild switch; the theme appears at the next login. Avoid restarting the display manager during an active session.

Hyprlock uses hypr/hyprlock.conf and the existing wallpaper assets for a blurred, two-column lock screen with ProFont, a clock, and live system status. Press Super+L or choose Lock in the Waybar power menu. hypr/hypridle.conf defines session locking and a lock request before suspend, with no idle timeout. Hypridle is not currently installed or started by the tracked configuration; these hooks require installing and running it. The NixOS Hyprlock module supplies its PAM authentication configuration.

Home Manager

Home Manager is integrated into the NixOS flake and uses the same pinned Nixpkgs input. The user configuration lives in nixos/home/hhhh.nix. It manages atuin, gitui, hypr, kitty, mako, nvim, waybar, and wofi under ~/.config.

These directories link to ~/Git/Custom-environment through mkOutOfStoreSymlink, so edits in the repository are available immediately. Reload or restart the affected application to pick up configuration changes. Keep the repository at this location, or adjust repo in the user module.

Apply Home Manager changes together with the system configuration:

sudo nixos-rebuild switch --flake .#nixos

On activation, conflicting configuration files or links are backed up with the .hm-backup suffix; links already pointing to the same content can be adopted without a backup. Existing backups are preserved; move an old backup aside if it blocks activation. Keep home.stateVersion at the version used when first enabling Home Manager.

Installation

On NixOS, clone the repository into the location expected by Home Manager, review the machine-specific settings described above, then check and apply the flake:

git clone git@github.com:Claucdan/Custom-environment.git ~/Git/Custom-environment
cd ~/Git/Custom-environment
nix flake check --no-build
sudo nixos-rebuild switch --flake .#nixos

On other distributions, install the tools using your system package manager and link the configuration directories manually. Inspect existing settings and move conflicting files or directories aside before creating links:

git clone git@github.com:Claucdan/Custom-environment.git ~/Git/Custom-environment
cd ~/Git/Custom-environment
mkdir -p "$HOME/.config"

for config in atuin gitui hypr kitty mako nvim waybar wofi; do
    ln -s "$PWD/$config" "$HOME/.config/$config"
done

Bash and Git

Home Manager does not manage bash/ or git/. Review their settings and back up any existing ~/.bashrc and ~/.gitconfig before linking them separately:

cd ~/Git/Custom-environment
ln -s "$PWD/bash/.bashrc" "$HOME/.bashrc"
ln -s "$PWD/git/.gitconfig" "$HOME/.gitconfig"

Link the Bash entry point rather than copying it: it resolves the ~/.bashrc symlink to locate env.bash, aliases.bash, build.bash, perf.bash, systemd.bash, and tools.bash. Machine-specific additions belong in bash/local.*.bash, which is ignored by Git. Start a new interactive Bash session after changing the links.

The Git configuration includes ~/Git/Custom-environment/git/aliases.gitconfig, uses Neovim as its editor, and enables pull rebase with automatic stashing. Adjust the include path if you keep the repository elsewhere.

Notes

  • NixOS installs ProFont Nerd Font, Font Awesome, and Noto fonts. Kitty uses ProFontWindows Nerd Font Mono; install it separately on other distributions.
  • Neovim plugins are managed with lazy.nvim; open Neovim after linking the configuration to install them. The entry point is nvim/init.lua, plugin specifications are in nvim/lua/plugins/, and settings are in nvim/lua/configs/. nvim/lazy-lock.json is currently ignored by Git, so plugin versions are not pinned by this repository.
  • This is a personal setup rather than a universal bootstrap script. Feel free to copy or adapt any part of it.