Code Monkey home page Code Monkey logo

nix-config's Introduction

❄️ Ryan4Yin's Nix Config ❄️

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 📖 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 anyrun 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

Neovim

See ./home/base/desktop/neovim for details.

Hosts

See ./hosts for details.

Secrets Management

See ./secrets for details.

How to Deploy this Flake?

🔴 IMPORTANT: You should NOT deploy this flake directly on your machine:exclamation: It will not succeed. this flake contains my hardware configuration(such as hardware-configuration.nix, cifs-mount.nix, Nvidia Support, etc.) 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:

Need to restart the machine after switching between wayland and xorg.

# 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 [email protected]:/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 all the remote host with tag `@dist-build`
# using the ssh key we added in step 1
colmena apply --on '@dist-build' --show-trace

If you're not familiar with remote deployment, please read this tutorial first: Remote Deployment - NixOS & Flakes Book

References

Other dotfiles that inspired me:

nix-config's People

Contributors

ryan4yin avatar dataeraserc avatar balssh avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.