Skip to content

testfailed/nixos-config-srid

 
 

Repository files navigation

AGPL project chat Harmless Code of Conduct

This repository contains the Nix / NixOS configuration for all of my systems. See nixos-flake if you want to create your own configuration from scratch.

Setup

To use this repository as base configuration for your new machine running:

NixOS Linux

Tip

For a general tutorial, see https://nixos.asia/en/nixos-install-flake

  • Install NixOS
  • Clone this repo anywhere
  • Edit flake.nix to use your system hostname as a key of the nixosConfigurations set
  • Edit users/config.nix to contain your users
  • Run nix run. That's it. Re-open your terminal.

macOS

  • Install Nix
  • Clone this repo anywhere
  • Edit flake.nix to use your system hostname as a key of the darwinConfigurations set
  • Edit users/config.nix to contain your users
  • Run nix run.1 That's it. Re-open your terminal.

Architecture

Start from flake.nix (see Flakes). flake-parts is used as the module system.

Directory layout

  • home: home-manager config (shared between Linux and macOS)
  • nixos: nixos modules for Linux
  • nix-darwin: nix-darwin modules for macOS
  • users: user information
  • systems: top-level configuration.nix('ish) for various systems

Tips

  • To update NixOS (and other inputs) run nix flake update
    • You may also update a subset of inputs, e.g.
      nix flake lock --update-input nixpkgs --update-input darwin --update-input home-manager
      # Or, `nix run .#update`
  • To free up disk space,
    sudo nix-env -p /nix/var/nix/profiles/system --delete-generations +2
    sudo nixos-rebuild boot
  • To autoformat the project tree using nixfmt(rfc-style) run nix fmt.
  • To build all flake outputs (locally or in CI), run nix --accept-flake-config run github:juspay/omnix ci build
  • For secrets management, I use ragenix.

Discussion

If you wish to discuss about this config, join the Zulip.

Deploying on Remote Server

Using nixos-infect (Successful on Ubuntu 24.04 LTS x64)

To install Manually,

  curl https://raw.githubusercontent.com/elitak/nixos-infect/master/nixos-infect | NIX_CHANNEL=nixos-23.05 bash -x

Or Automatically using Cloud-Init User-Data,

#!/bin/sh

curl https://raw.githubusercontent.com/elitak/nixos-infect/master/nixos-infect | NIX_CHANNEL=nixos-23.05 bash

After nix is instantiated, change and update nix channels.

nix-channel --add https://channels.nixos.org/nixos-24.05 nixos
nix-channel --add https://channels.nixos.org/nixos-unstable nixos-unstable
nix-channel --update

And then bootstrap with manual script ./manual_scripts/init-configuration.nix.

nixos-rebuild switch

After bootstrapping, install further with flake configs with created user.

mkdir -p ~/repos/nixos/config && cd $_

git clone https://github.com/testfailed/nixos-config-srid
cd nixos-config-srid

nixos-rebuild switch

Reference

Examples & Tutorials

Build into the nix store.

nix-build ./examples/what-is-my-ip.nix

# Visualize the dependency graph.
nix-store --query --graph $(nix-build ./examples/what-is-my-ip.nix) | \
  dot -Tsvg -o what-is-my-ip-deps.svg

Build and include in a shell environment.

nix-shell ./examples/what-is-my-ip-shell.nix

Build into a docker image and run it.

docker load < $(nix-build ./examples/what-is-my-ip-docker.nix)
# => Loaded image: what-is-my-ip-docker:c9g6x30invdq1bjfah3w1aw5w52vkdfn

docker run -it --rm what-is-my-ip-docker:c9g6x30invdq1bjfah3w1aw5w52vkdfn

Footnotes

  1. You might have to rm -rf /etc/nix/nix.conf, so our flake.nix can do its thing.

About

KISS NixOS configuration based on Flakes & flake-parts (supports macOS too)

Resources

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Nix 90.8%
  • Shell 5.6%
  • Haskell 2.9%
  • JavaScript 0.3%
  • CSS 0.2%
  • Nu 0.1%
  • Just 0.1%