My latest iteration of my dotfiles, where I am now using a Laptop as my main development machine (Framework). I’m also using Hyprland as my window manager. Most importantly using NixOS and home-manager to declaratively define the state of my machine i.e. what packages to install, dotfiles.

CURRENTLY A WIP

šŸ  My dotfiles repo, setup using nixos/home-manager

Install

šŸ”„ I wouldn’t recommend just blinding using my dotfiles. They are setup for my specific use-case. I think you’re off using this repo as reference to create your own dotfiles.

git clone [email protected]:hmajid2301/dotfiles.git ~/dotfiles/
cd dotfiles

nix develop

# To build system configuration
sudo nixos-rebuild --flake .#framework

# To build user configuration
home-manager --flake .#framework

You can read more about my dotfiles and development workflows on my blog here (#ShamelessPlug).

Note my dotfiles are almost always changing!

Features

Some features of my dotfiles:

  • Structured to allow multiple NixOS configurations, including desktop, laptop
  • Declarative config including themes, wallpapers and nix-colors
  • Opt-in persistance through impermanence + blank snapshot
  • Delete files on boot
  • Encrypted btrfs partition
  • sops-nix for secrets management
  • Different environments like hyprland and gnome
  • Laptop setup with eGPU and vfio for playing games on windows

Structure

  • flake.nix: Entrypoint for hosts and home configurations
  • nixos:
    • global: Configurations that are globally applied to all my machines
    • optional: Configurations that some of my machines use
  • hosts: NixOS Configurations, accessible via nixos-rebuild --flake.
    • framework: Framework 12th gen laptop | Hyprland | eGPU 7900 XTX
  • home-manager: Most of my dotfiles configuration, user specific

Devices

Here is a list of the devices this repo is used to configure.

Framework Laptop

Neofetch

TypeProgram
EditorNeoVim
LauncherRofi
ShellFish
Status BarWaybar
TerminalAlacritty
Window ManagerHyprland

wallpaper neovim monkeytype

Applications

I basically just installed every package from Modern Unix.

CLI tools that I use often include:

  • fzf: Fuzzy search tool
    • Especially for reverse search in my terminal with fish shell
  • zoxide: Smarter cd tool, integrated well with fzf, nvim and tmux
  • exa: A replacement for ls with better syntax highlighting
  • ripgrep: A faster grep
  • navi: Interactive cheat sheet

Tmux

I manage my projects using tmux sessions with the tmux smart session manager.

Where I create a new session for each project I’m working on and then jump between them. Where a project might be:

  • My Blog
  • My Dotfiles
  • Full stack application
    • A window for each project i.e. GUI and API

Appendix

Inspired By