Giter Club home page Giter Club logo

nixos-config's Introduction

Dustin's Nix / NixOS config

GitHub last commit

Psst: I can help write Nix at your company. Get in touch.

Overview

Hey, you made it! Welcome. 🤓

You've stumbled upon my personal journey with Nix. For over a year, I've been hacking away on this configuration. It drives my office PC, M1 Macbook, and virtual machines in my home lab. Along with syncthing to manage data, this Nix configuration guarantees I have a working, seamless experience across each machine I use.

Immutable, reproducible infrastructure rocks! It's game changing and I'll never go back to typing commands in a terminal.

While developing, I've done my best to keep it simple - for both future me and readers like you. You'll see that in how I've organized code, as I keep filename conventions the same across modules. To get you started, I've included step-by-step instructions on bootstrapping a new machine below.

Feel free to open a Github Issue if you run into any problems or have questions. Enjoy Nix!

Videos

NixOS

video-.11.mp4

MacOS

Updating dependencies with one command

Movie2.mp4

Instant Emacs 29 thanks to daemon mode

Movie2.mp4

Features

  • Multiple Nix and NixOS configurations, including desktop, laptop, server
  • Step-by-step instructions to start from zero, both x86 and MacOS platforms
  • Fully declarative MacOS dock and MacOS App Store apps
  • Defined using a single flake and two targets, not small files spread across collections of modules
  • Fully managed, auto-updating homebrew environment
  • Easily share config across Linux and Mac with both Nix and Home Manager
  • Minimal shell scripts covering basic functions for running systems
  • Bleeding edge Emacs that fixes itself, thanks to a community overlay
  • Extensively configured NixOS environment including clean aesthetic + window animations
  • Auto-loading of Nix overlays: drop a file in a dir and it runs (great for patches!)
  • Large Emacs literate configuration to explore (if that's your thing)
  • Optimized for simplicity and readability in all cases

Coming Soon

  • Persistence defined under XDG (#5)
  • Opt-in persistence using impermanence and zfs snapshot reset (#8)
  • Secrets managed with sops-nix (#6)

Layout

.
├── bin          # Simple scripts used to wrap the build
├── common       # Shared configurations applicable to all machines
├── hardware     # Hardware-specific configuration
├── darwin       # MacOS and nix-darwin configuration
├── nixos        # My NixOS desktop-related configuration
├── overlays     # Drop an overlay file in this dir, and it runs. So far mainly patches.
└── vms          # VM-specific configs running in my home-lab

Bootstrap New Computer

Step 1 - For MacOS, install Nix package manager

Install the nix package manager, add unstable channel:

sh <(curl -L https://nixos.org/nix/install) --daemon
nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs
nix-channel --update

Step 2 - For NixOS, create a disk partition and install media

Follow this step-by-step guide for instructions to install using ZFS or ext3.

Step 3 - Install home-manager

Add the home-manager channel and install it:

nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
nix-channel --update

Step 4 - If MacOS, install Darwin dependencies

Install Xcode CLI tools and nix-darwin:

xcode-select --install
nix-build https://github.com/LnL7/nix-darwin/archive/master.tar.gz -A installer
./result/bin/darwin-installer

Step 5 - Build the environment

Download this repo and run:

./bin/build

Step 6 - Reboot computer

That's it. You're done.

Update Computer

Update dependencies

nix flake update

Run build

./bin/build

Read my occasional musings on Nix

Follow @dustinhlyons

"All we have to decide is what to do with the time that is given us." - J.R.R. Tolkien

Star History

Star History Chart

nixos-config's People

Contributors

dustinlyons 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.