:snowflake: Ryan4Yin's Nix Config :snowflake:

Stargazers

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 :book: for beginners](https://github.com/ryan4yin/nixos-and-flakes-book)!** > If you're using macOS, you can also check out [ryan4yin/nix-darwin-kickstarter](https://github.com/ryan4yin/nix-darwin-kickstarter) for a quick start. ## Components | | NixOS(Wayland) | NixOS(Xorg) | | --------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | **Window Manager** | [Hyprland][Hyprland] | [i3][i3] | | **Terminal Emulator** | [Kitty][Kitty] | [Kitty][Kitty] | | **Bar** | [Waybar][Waybar] | [i3block][i3block] | | **Application Launcher** | [wofi][wofi] | [rofi][rofi] | | **Notification Daemon** | [Mako][Mako] | [Dunst][Dunst] | | **Display Manager** | [GDM][GDM] | [GDM][GDM] | | **network management tool** | [NetworkManager][NetworkManager] | [NetworkManager][NetworkManager] | | **Input method framework** | [Fcitx5][Fcitx5] | [Fcitx5][Fcitx5] | | **System resource monitor** | [Btop][Btop] | [Btop][Btop] | | **File Manager** | [thunar][thunar] | [thunar][thunar] | | **Shell** | [Nushell][Nushell] | [Nushell][Nushell] | | **Music Player** | [mpd][mpd], [ncmpcpp][ncmpcpp], [mpc][mpc], [Netease-cloud-music-gtk][netease-cloud-music-gtk] | [Netease-cloud-music-gtk][netease-cloud-music-gtk] | | **Media Player** | [mpv][mpv] | [mpv][mpv] | | **Text Editor** | [Neovim][Neovim] | [Neovim][Neovim] | | **Fonts** | [Nerd fonts][Nerd fonts] | [Nerd fonts][Nerd fonts] | | **Image Viewer** | [imv][imv] | [feh][feh] | | **Screenshot Software** | [grim][grim] | [flameshot](https://github.com/flameshot-org/flameshot) | | **Screen Recording** | [OBS][OBS] | [OBS][OBS] | ## Hyprland + AstroNvim ![](./_img/hyprland_2023-07-26.webp) ![](./_img/hyprland_2023-07-27.webp) ## I3 + AstroNvim ![](/_img/astronvim_2023-07-13_00-39.webp) ## Hosts ```shell › tree hosts hosts ├── harmonica # my MacBook Pro 2020 13-inch, for work. └── idols ├── ai # my main computer, with NixOS + I5-13600KF + RTX 4090 GPU, for gaming & daily use. ├── aquamarine # my NixOS virtual machine with R9-5900HX(8C16T), for distributed building & testing. ├── kana # yet another NixOS vm on another physical machine with R5-5625U(6C12T). └── ruby # another NixOS vm on another physical machine with R7-5825U(8C16T). ``` ## How to Deploy this Flake? > Note: you should NOT deploy this flake directly on your machine, it contains my hardware information and personal information which is not suitable for you. 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: ```bash # deploy one of the configuration based on the hostname sudo nixos-rebuild switch --flake .#ai_i3 # we can also deploy using `make`, which is defined in Makefile make i3 # or we can deploy with details make i3-debug ``` For MacOS, use the following commands: ```bash # 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. ```bash # 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 # 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: ```shell # 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: ```shell # 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 - [NixOS-CN/NixOS-CN-telegram](https://github.com/NixOS-CN/NixOS-CN-telegram) - [notusknot/dotfiles-nix](https://github.com/notusknot/dotfiles-nix) - [xddxdd/nixos-config](https://github.com/xddxdd/nixos-config) - [bobbbay/dotfiles](https://github.com/bobbbay/dotfiles) - [gytis-ivaskevicius/nixfiles](https://github.com/gytis-ivaskevicius/nixfiles) - [fufexan/dotfiles](https://github.com/fufexan/dotfiles) - [davidtwco/veritas](https://github.com/davidtwco/veritas) - [gvolpe/nix-config](https://github.com/gvolpe/nix-config) - [Ruixi-rebirth/flakes](https://github.com/Ruixi-rebirth/flakes) - Hyprland - [HeinzDev/Hyprland-dotfiles](https://github.com/HeinzDev/Hyprland-dotfiles) - [notwidow/hyprland](https://github.com/notwidow/hyprland) - I3 Window Manager - [denisse-dev/dotfiles](https://github.com/denisse-dev/dotfiles) - Neovim/AstroNvim - [maxbrunet/dotfiles](https://github.com/maxbrunet/dotfiles): astronvim with nix flakes. - Misc - [1amSimp1e/dots](https://github.com/1amSimp1e/dots) [Hyprland]: https://github.com/hyprwm/Hyprland [i3]: https://github.com/i3/i3 [Kitty]: https://github.com/kovidgoyal/kitty [Nushell]: https://github.com/nushell/nushell [Waybar]: https://github.com/Alexays/Waybar [i3block]: https://github.com/vivien/i3blocks [rofi]: https://github.com/davatorium/rofi [wofi]: https://hg.sr.ht/~scoopta/wofi [Dunst]: https://github.com/dunst-project/dunst [Fcitx5]: https://github.com/fcitx/fcitx5 [Btop]: https://github.com/aristocratos/btop [mpv]: https://github.com/mpv-player/mpv [Neovim]: https://github.com/neovim/neovim [AstroNvim]: https://github.com/AstroNvim/AstroNvim [flameshot]: https://github.com/flameshot-org/flameshot [grim]: https://github.com/emersion/grim [feh]: https://github.com/derf/feh [imv]: https://sr.ht/~exec64/imv/ [OBS]: https://obsproject.com [Mako]: https://github.com/emersion/mako [Nerd fonts]: https://github.com/ryanoasis/nerd-fonts [catppuccin]: https://github.com/catppuccin/catppuccin [mpd]: https://github.com/MusicPlayerDaemon/MPD [ncmpcpp]: https://github.com/ncmpcpp/ncmpcpp [mpc]: https://github.com/MusicPlayerDaemon/mpc [Netease-cloud-music-gtk]: https://github.com/gmg137/netease-cloud-music-gtk [NetworkManager]: https://wiki.gnome.org/Projects/NetworkManager [wl-clipboard]: https://github.com/bugaevc/wl-clipboard [GDM]: https://wiki.archlinux.org/title/GDM [thunar]: https://gitlab.xfce.org/xfce/thunar