new version, with both templates on the same branch
This commit is contained in:
parent
ff5bc7eb4d
commit
a06bdecdad
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,2 +0,0 @@
|
|||
result
|
||||
*.qcow2
|
16
README.md
16
README.md
|
@ -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).
|
||||
|
|
97
flake.nix
97
flake.nix
|
@ -1,86 +1,21 @@
|
|||
{
|
||||
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; };
|
||||
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;
|
||||
};
|
||||
|
||||
# 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
66
minimal/README.md
Normal 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
39
minimal/flake.nix
Normal 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
80
standard/flake.lock
Normal 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
86
standard/flake.nix
Normal 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; };
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
34
standard/home-manager/home.nix
Normal file
34
standard/home-manager/home.nix
Normal 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";
|
||||
}
|
80
standard/nixos/configuration.nix
Normal file
80
standard/nixos/configuration.nix
Normal 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";
|
||||
}
|
10
standard/nixos/hardware-configuration.nix
Normal file
10
standard/nixos/hardware-configuration.nix
Normal 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";
|
||||
}
|
Loading…
Reference in a new issue