new version, with both templates on the same branch

This commit is contained in:
Gabriel Fontes 2022-08-05 22:34:46 -03:00
parent ff5bc7eb4d
commit a06bdecdad
No known key found for this signature in database
GPG key ID: 2E54EA7BFE630916
19 changed files with 418 additions and 92 deletions

2
.gitignore vendored
View file

@ -1,2 +0,0 @@
result
*.qcow2

View file

@ -1,8 +1,6 @@
# Nix Starter Config (Full version)
# Nix Starter Config
This is a simple nix flake for getting started with NixOS + home-manager.
**[Looking for the minimal version?](https://github.com/Misterio77/nix-starter-config/tree/minimal)**
This repo contains a few a simple nix flakes for getting started with NixOS + home-manager.
# What this provides
@ -12,7 +10,7 @@ This is a simple nix flake for getting started with NixOS + home-manager.
`home-manager --flake .`
- Basic boilerplate for adding custom packages (under `pkgs`) and overlays
(under `overlay`). Accessible on your system, home config, as well as `nix
build .#package-name`
build .#package-name`.
- Boilerplate for custom NixOS (`modules/nixos`) and home-manager
(`modules/home-manager`) modules
@ -38,10 +36,10 @@ and come back here to get your feet wet, it's the best way to learn!
## The repo
- [Install git](https://nixos.wiki/wiki/git)
- [Hit "Use this
template"](https://github.com/Misterio77/nix-starter-config/generate) on this
repo (or clone this down and push to any another git remote)
- Create a repository for your config, for example: `cd ~/Documents && git init nix-config`
- Choose your template:
- [Minimal version](./minimal): `nix flake init -t github:misterio77/nix-starter-config#minimal`
- [Standard version](./standard): `nix flake init -t github:misterio77/nix-starter-config#standard`
- Add stuff you currently have on `/etc/nixos/` to `nixos` (usually
`configuration.nix` and `hardware-configuration.nix`, when you're starting
out).

View file

@ -1,85 +1,20 @@
{
description = "You new nix config";
inputs = {
# Nixpkgs
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
hardware.url = "github:nixos/nixos-hardware";
# Home manager
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
# TODO: Add any other flake you might need
description = "NixOS + standalone home-manager config flakes to get you started!";
outputs = inputs: {
templates = {
minimal = {
description = ''
Minimal flake - contains only the configs.
Contains the bare minimum to migrate your existing legacy configs to flakes.
'';
path = ./minimal;
};
outputs = { nixpkgs, home-manager, ... }@inputs:
let
forAllSystems = nixpkgs.lib.genAttrs systems;
systems = [
"aarch64-linux"
"i686-linux"
"x86_64-linux"
"aarch64-darwin"
"x86_64-darwin"
];
in
rec {
# Your custom packages and modifications
overlays = {
default = import ./overlay { inherit inputs; };
};
# Reusable nixos modules you might want to export
# These are usually stuff you would upstream into nixpkgs
nixosModules = import ./modules/nixos;
# Reusable home-manager modules you might want to export
# These are usually stuff you would upstream into home-manager
homeManagerModules = import ./modules/home-manager;
# Devshell for bootstrapping
# Acessible through 'nix develop' or 'nix-shell' (legacy)
devShells = forAllSystems (system: {
default = legacyPackages.${system}.callPackage ./shell.nix { };
});
# Reexport nixpkgs with our overlays applied
# Acessible on our configurations, and through nix build, shell, run, etc.
legacyPackages = forAllSystems (system:
import inputs.nixpkgs {
inherit system;
overlays = builtins.attrValues overlays;
}
);
nixosConfigurations = {
# FIXME replace with your hostname
your-hostname = nixpkgs.lib.nixosSystem {
pkgs = legacyPackages.x86_64-linux;
modules = [
# > Our main nixos configuration file <
./nixos/configuration.nix
] ++ (builtins.attrValues nixosModules); # Import our reusable nixos modules
# Pass inputs down to our config, so that they can consume flake inputs
specialArgs = { inherit inputs; };
};
};
homeConfigurations = {
# FIXME replace with your username@hostname
"your-name@your-hostname" = home-manager.lib.homeManagerConfiguration {
pkgs = legacyPackages.x86_64-linux;
modules = [
# > Our main home-manager configuration file <
./home-manager/home.nix
# Import our reusable home-manager modules
] ++ (builtins.attrValues homeManagerModules); # Import our reusable home-manager modules
# Pass inputs down to our config, so that they can consume flake inputs
extraSpecialArgs = { inherit inputs; };
standard = {
description = ''
Standard flake - augmented with boilerplate for custom packages, overlays, and reusable modules.
Perfect migration path for when you want to dive a little deeper.
'';
path = ./standard;
};
};
};

66
minimal/README.md Normal file
View file

@ -0,0 +1,66 @@
# Nix Starter Config (Minimal version)
This is a simple nix flake for getting started with NixOS + home-manager.
[**Looking for the full version?**](https://github.com/Misterio77/nix-starter-config/tree/main)
# What this provides
- NixOS configuration on `nixos/configuration.nix`, accessible via
`nixos-rebuild --flake .`
- Home-manager configuration on `home-manager/home.nix`, accessible via
`home-manager --flake .`
# Getting started
Assuming you have a basic NixOS booted up (either live or installed, anything
works). [Here's a link to the latest NixOS downloads, just for
you](https://nixos.org/download#download-nixos).
## The repo
- [Install git](https://nixos.wiki/wiki/git)
- [Hit "Use this
template"](https://github.com/Misterio77/nix-starter-config/generate) on this
repo (or clone this down and push to any another git remote)
- Add stuff you currently have on `/etc/nixos/` to `nixos` (usually
`configuration.nix` and `hardware-configuration.nix`, when you're starting
out).
- The included file has some options you might want, specially if you don't
have a configuration ready. Make sure you have generated your own
`hardware-configuration.nix`; if not, just mount your partitions to
`/mnt` and run: `nixos-generate-config --root /mnt`.
- If you're already using home-manager, add your stuff from `~/.config/nixpkgs`
to `home-manager` (probably `home.nix`).
- I also include one with some simple options if you need. Feel free to
ignore this step if you don't want to use home-manager just yet.
- Take a look at `flake.nix`, making sure to fill out anything marked with
FIXME (required) or TODO (usually tips or optional stuff you might want)
- Push your changes! Or at least copy them somewhere if you're on a live
medium.
## Bootstrapping
To get everything up and running, you need flake-enabled nix and/or home-manager.
For simplicity, this minimal version does not include a bootstrap shell.
Check the [NixOS wiki](https://nixos.wiki/wiki/Flakes) for information on how to enable flakes.
## Usage
- Run `sudo nixos-rebuild switch --flake .#hostname` to apply your system
configuration.
- If you're still on a live installation medium, run `nixos-install --flake
.#hostname` instead, and reboot.
- Run `home-manager switch --flake .#username@hostname` to apply your home
configuration.
# What next?
## Full version
Once you're confortable with this flake, take a look at the [full
version](https://github.com/Misterio77/nix-starter-config/tree/main), it includes
boilerplate for overlays, custom packages, and more.

39
minimal/flake.nix Normal file
View file

@ -0,0 +1,39 @@
{
description = "You new nix config";
inputs = {
# Nixpkgs
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
hardware.url = "github:nixos/nixos-hardware";
# Home manager
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
# TODO: Add any other flake you might need
};
outputs = { nixpkgs, home-manager, ... }@inputs: {
nixosConfigurations = {
# FIXME replace with your hostname
your-hostname = nixpkgs.lib.nixosSystem {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
modules = [ ./nixos/configuration.nix ];
# Pass inputs down to our config, so that they can consume flake inputs
specialArgs = { inherit inputs; };
};
};
homeConfigurations = {
# FIXME replace with your username@hostname
"your-name@your-hostname" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
modules = [ ./home-manager/home.nix ];
# Pass inputs down to our config, so that they can consume flake inputs
extraSpecialArgs = { inherit inputs; };
};
};
};
}

80
standard/flake.lock Normal file
View file

@ -0,0 +1,80 @@
{
"nodes": {
"hardware": {
"locked": {
"lastModified": 1659356074,
"narHash": "sha256-UwV6hZZEtchvtiTCCD/ODEv1226eam8kEgEyQb7xB0E=",
"owner": "nixos",
"repo": "nixos-hardware",
"rev": "ea3efc80f8ab83cb73aec39f4e76fe87afb15a08",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixos-hardware",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"utils": "utils"
},
"locked": {
"lastModified": 1659484873,
"narHash": "sha256-6VoPiGyDdjBHOJ3IpS24lY1lrDiOHeuEefOFI0qz3WE=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "d8d9ff0b2df77defa10375c6665b51f0251c34d6",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1659522808,
"narHash": "sha256-HBcM19nGhI3IWwPNVlYb0MZ8VW6iKp4JbAVkeIHVykc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "168d1c578909dc143ba52dbed661c36e76b12b36",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"hardware": "hardware",
"home-manager": "home-manager",
"nixpkgs": "nixpkgs"
}
},
"utils": {
"locked": {
"lastModified": 1653893745,
"narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

86
standard/flake.nix Normal file
View file

@ -0,0 +1,86 @@
{
description = "You new nix config";
inputs = {
# Nixpkgs
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
hardware.url = "github:nixos/nixos-hardware";
# Home manager
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
# TODO: Add any other flake you might need
};
outputs = { nixpkgs, home-manager, ... }@inputs:
let
forAllSystems = nixpkgs.lib.genAttrs systems;
systems = [
"aarch64-linux"
"i686-linux"
"x86_64-linux"
"aarch64-darwin"
"x86_64-darwin"
];
in
rec {
# Your custom packages and modifications
overlays = {
default = import ./overlay { inherit inputs; };
};
# Reusable nixos modules you might want to export
# These are usually stuff you would upstream into nixpkgs
nixosModules = import ./modules/nixos;
# Reusable home-manager modules you might want to export
# These are usually stuff you would upstream into home-manager
homeManagerModules = import ./modules/home-manager;
# Devshell for bootstrapping
# Acessible through 'nix develop' or 'nix-shell' (legacy)
devShells = forAllSystems (system: {
default = legacyPackages.${system}.callPackage ./shell.nix { };
});
# Reexport nixpkgs with our overlays applied
# Acessible on our configurations, and through nix build, shell, run, etc.
legacyPackages = forAllSystems (system:
import inputs.nixpkgs {
inherit system;
overlays = builtins.attrValues overlays;
}
);
nixosConfigurations = {
# FIXME replace with your hostname
your-hostname = nixpkgs.lib.nixosSystem {
pkgs = legacyPackages.x86_64-linux;
modules = [
# > Our main nixos configuration file <
./nixos/configuration.nix
] ++ (builtins.attrValues nixosModules); # Import our reusable nixos modules
# Pass inputs down to our config, so that they can consume flake inputs
specialArgs = { inherit inputs; };
};
};
homeConfigurations = {
# FIXME replace with your username@hostname
"your-name@your-hostname" = home-manager.lib.homeManagerConfiguration {
pkgs = legacyPackages.x86_64-linux;
modules = [
# > Our main home-manager configuration file <
./home-manager/home.nix
# Import our reusable home-manager modules
] ++ (builtins.attrValues homeManagerModules); # Import our reusable home-manager modules
# Pass inputs down to our config, so that they can consume flake inputs
extraSpecialArgs = { inherit inputs; };
};
};
};
}

View file

@ -0,0 +1,34 @@
# This is your home-manager configuration file
# Use this to configure your home environment (it replaces ~/.config/nixpkgs/home.nix)
{ inputs, lib, config, pkgs, ... }: {
imports = [
# If you want to use home-manager modules from other flakes (such as nix-colors), use something like:
# inputs.nix-colors.homeManagerModule
# Feel free to split up your configuration and import pieces of it here.
];
# Comment out if you wish to disable unfree packages for your system
nixpkgs.config.allowUnfree = true;
# TODO: Set your username
home = {
username = "your-name";
homeDirectory = "/home/your-name";
};
# Add stuff for your user as you see fit:
# programs.neovim.enable = true;
# home.packages = with pkgs; [ steam ];
# Enable home-manager and git
programs.home-manager.enable = true;
programs.git.enable = true;
# Nicely reload system units when changing configs
systemd.user.startServices = "sd-switch";
# https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
home.stateVersion = "22.05";
}

View file

@ -0,0 +1,80 @@
# This is your system's configuration file.
# Use this to configure your system environment (it replaces /etc/nixos/configuration.nix)
{ inputs, lib, config, pkgs, ... }: {
imports = [
# If you want to use modules from other flakes (such as nixos-hardware), use something like:
# inputs.hardware.nixosModules.common-cpu-amd
# inputs.hardware.nixosModules.common-ssd
# It's strongly recommended you take a look at
# https://github.com/nixos/nixos-hardware
# and import modules relevant to your hardware.
# Import your generated (nixos-generate-config) hardware configuration
./hardware-configuration.nix
# You can also split up your configuration and import pieces of it here.
];
# This will add your inputs as registries, making operations with them (such
# as nix shell nixpkgs#name) consistent with your flake inputs.
nix.registry = lib.mapAttrs' (n: v: lib.nameValuePair n { flake = v; }) inputs;
# Will activate home-manager profiles for each user upon login
# This is useful when using ephemeral installations
environment.loginShellInit = ''
[ -d "$HOME/.nix-profile" ] || /nix/var/nix/profiles/per-user/$USER/home-manager/activate &> /dev/null
'';
nix = {
settings = {
# Enable flakes and new 'nix' command
experimental-features = "nix-command flakes";
# Deduplicate and optimize nix store
auto-optimise-store = true;
};
};
# Remove if you wish to disable unfree packages for your system
nixpkgs.config.allowUnfree = true;
# FIXME: Add the rest of your current configuration
# TODO: Set your hostname
networking.hostName = "your-hostname";
# TODO: This is just an example, be sure to use whatever bootloader you prefer
boot.loader.systemd-boot.enable = true;
# TODO: Configure your system-wide user settings (groups, etc), add more users as needed.
users.users = {
# FIXME: Replace with your username
your-name = {
# TODO: You can set an initial password for your user.
# If you do, you can skip setting a root password by passing '--no-root-passwd' to nixos-install.
# Be sure to change it (using passwd) after rebooting!
# initialPassword = "correcthorsebatterystaple";
isNormalUser = true;
openssh.authorizedKeys.keys = [
# TODO: Add your SSH public key(s) here, if you plan on using SSH to connect
];
# TODO: Be sure to add any other groups you need (such as networkmanager, audio, docker, etc)
extraGroups = [ "wheel" ];
};
};
# This setups a SSH server. Very important if you're setting up a headless system.
# Feel free to remove if you don't need it.
services.openssh = {
enable = true;
# Forbid root login through SSH.
permitRootLogin = "no";
# Use keys only. Remove if you want to SSH using password (not recommended)
passwordAuthentication = false;
};
# https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
system.stateVersion = "22.05";
}

View file

@ -0,0 +1,10 @@
# This is just an example, you should generate yours with nixos-generate-config and put it in here.
{
fileSystems."/" = {
device = "/dev/sda1";
fsType = "ext4";
};
# Set your system kind (needed for flakes)
nixpkgs.hostPlatform = "x86_64-linux";
}