❄️ Ryan4Yin's Nix Config ❄️
This repository is home to the nix code that builds my systems.
Why Nix?
Nix allows for easy-to-manage, collaborative, reproducible deployments. This means that once something is setup and configured once, it works forever. If someone else shares their configuration, anyone can make use of it.
Want to know Nix in detail? Looking for a beginner-friendly tutorial or best practices? Check out NixOS & Nix Flakes Book - 🛠️ ❤️ An unofficial & opinionated 📖 for beginners!
If you're using macOS, you can also check out ryan4yin/nix-darwin-kickstarter for a quick start.
Components
| NixOS(Wayland) | NixOS(Xorg) | |
|---|---|---|
| Window Manager | Hyprland | i3 |
| Terminal Emulator | Kitty | Kitty |
| Bar | Waybar | i3block |
| Application Launcher | wofi | rofi |
| Notification Daemon | Mako | Dunst |
| Display Manager | GDM | GDM |
| Color Scheme | Catppuccin | Catppuccin |
| network management tool | NetworkManager | NetworkManager |
| Input method framework | Fcitx5 | Fcitx5 |
| System resource monitor | Btop | Btop |
| File Manager | ranger + thunar | ranger + thunar |
| Shell | Nushell + Starship | Nushell + Starship |
| Music Player | mpd, ncmpcpp, mpc, Netease-cloud-music-gtk | Netease-cloud-music-gtk |
| Media Player | mpv | mpv |
| Text Editor | Neovim | Neovim |
| Fonts | Nerd fonts | Nerd fonts |
| Image Viewer | imv | imv |
| Screenshot Software | grim | flameshot |
| Screen Recording | OBS | OBS |
Wallpapers: https://github.com/ryan4yin/wallpapers
Hyprland + AstroNvim
I3 + AstroNvim
Hosts
See ./hosts for details.
How to Deploy this Flake?
🔴 IMPORTANT: You should NOT deploy this flake directly on your machine❗ It will not succeed. this flake contains my hardware configuration(such as hardware-configuration.nix) which is not suitable for your hardware, and my private secrets repository ryan4yin/nix-secrets that only I have access to. You may use this repo as a reference to build your own configuration.
After installing NixOS with nix-command & flake enabled, follow the steps below to deploy this flake.
For NixOS, use the following commands:
# deploy one of the configuration based on the hostname
sudo nixos-rebuild switch --flake .#ai_i3
# sudo nixos-rebuild switch --flake .#ai_hyprland
# we can also deploy using `make`, which is defined in Makefile
make i3 # deploy my pc with i3 window manager
# make hypr # deploy my pc with hyprland compositor
# or we can deploy with details
make i3-debug
# make hypr-debug
For MacOS, use the following commands:
# deploy the darwin configuration(harmonicia)
make ha
# deploy with details
make ha-debug
Install Apps from Flatpak
We can install apps from flathub, which has a lot of apps that are not supported well in nixpkgs.
# Add the Flathub repository
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# install apps from flathub
flatpak install netease-cloud-music-gtk
# install 3d printer slicer - cura
flatpak install flathub com.ultimaker.cura
# or you can search apps from flathub
flatpak search <keyword>
# search on website is also supported: https://flathub.org/
How to create & managage VM from this flake?
use aquamarine as an example, we can create a virtual machine with the following command:
# 1. generate a proxmox vma image file
nom build .#aquamarine # `nom`(nix-output-monitor) can be replaced by the standard command `nix`
# 2. upload the genereated image to proxmox server's backup directory `/var/lib/vz/dump`
# please replace the vma file name with the one you generated in step 1.
scp result/vzdump-qemu-aquamarine-nixos-23.11.20230603.dd49825.vma.zst root@192.168.5.174:/var/lib/vz/dump
# 3. the image we uploaded will be listed in proxmox web ui's this page: [storage 'local'] -> [backups], we can restore a vm from it via the web ui now.
Once the virtual machine aquamarine is created, we can deploy updates to it with the following commands:
# 1. add the ssh key to ssh-agent
ssh-add ~/.ssh/ai-idols
# 2. deploy the configuration to the remote host, using the ssh key we added in step 1
# and the username defaults to `$USER`, it's `ryan` in my case.
nixos-rebuild --flake .#aquamarine --target-host aquamarine --build-host aquamarine switch --use-remote-sudo --verbose
# or we can replace the command above with the following command, which is defined in Makefile
make aqua
The commands above will build & deploy the configuration to aquamarine, the build process will be executed on aquamarine too, and the --use-remote-sudo option indicates that we will use sudo on the remote host.
References
Other dotfiles that inspired me:
- Nix Flakes
- Hyprland
- I3 Window Manager
- Neovim/AstroNvim
- maxbrunet/dotfiles: astronvim with nix flakes.
- Misc




