2024-01-31 22:17:28 +01:00
|
|
|
# Nix Based Configuration
|
|
|
|
|
|
|
|
I use [NixOS](https://nixos.org) and
|
|
|
|
[home-manager](https://github.com/nixos-community/home-manager) to manage my
|
|
|
|
system and user configuration respectively. You can see what options I have
|
|
|
|
added to configure the system and user configuration in the next chapters.
|
|
|
|
|
2024-02-18 16:06:32 +01:00
|
|
|
The source repo is
|
|
|
|
[configuration.nix](https://github.com/jalil-salame/configuration.nix).
|
|
|
|
|
2024-02-01 21:57:23 +01:00
|
|
|
## Table of Contents
|
|
|
|
|
2024-02-01 21:54:08 +01:00
|
|
|
<!-- toc -->
|
|
|
|
|
2024-01-31 22:17:28 +01:00
|
|
|
## How to Use
|
|
|
|
|
|
|
|
If you are not me, then you probably shouldn't use this, but feel free to draw
|
|
|
|
inspiration from what I have done c:.
|
|
|
|
|
|
|
|
First you want to see what your environment is; if you are using NixOS then you
|
|
|
|
want to look at the [NixOS Module Setup](#nixos-module-setup), if you are just
|
|
|
|
using home-manager, then you should look at the [homa-manager Module
|
2024-03-03 15:20:42 +01:00
|
|
|
Setup](#home-manager-module-setup). Or if you just want to use my NeoVIM
|
|
|
|
configuration then look at the [NeoVIM standalone
|
|
|
|
setup](#neovim-standalone-setup).
|
2024-01-31 22:17:28 +01:00
|
|
|
|
|
|
|
### NixOS Module Setup
|
|
|
|
|
|
|
|
> Although I am talking about the NixOS module setup, this uses both NixOS and
|
|
|
|
> home-manager, so you can (and should) use both modules.
|
|
|
|
|
|
|
|
#### Setup from LiveISO
|
|
|
|
|
|
|
|
Follow the [NixOS Manual](https://nixos.org/manual/nixos/stable) until before
|
|
|
|
you run `nixos-generate-config`.
|
|
|
|
|
|
|
|
First you will want to create a directory for your NixOS configuration. I like
|
|
|
|
using `~/.config/nixos`. You then want to run `nixos-generate-config --root /mnt
|
|
|
|
--dir ~/.config/nixos` (assuming you mounted your filesystem to `/mnt`). Now you
|
|
|
|
have `configuration.nix` and `hardware-configuration.nix` inside
|
|
|
|
`~/.config/nixos`. I like renaming `configuration.nix` to `default.nix` and
|
|
|
|
putting it in a folder with the same hostname as the machine (See [the source
|
|
|
|
repo](https://github.com/jalil-salame/configuration.nix/tree/main/machines)).
|
|
|
|
|
|
|
|
Now you can add a `flake.nix` file to your `~/.config/nixos` and make it a flake
|
|
|
|
based configuration. This is the general structure you'll want:
|
|
|
|
|
|
|
|
```nix
|
|
|
|
{
|
|
|
|
inputs.nixpkgs.url = "nixpkgs/nixos-unstable";
|
|
|
|
# My custom configuration module
|
|
|
|
inputs.config.url = "github:jalil-salame/configuration.nix";
|
|
|
|
inputs.config.inputs.follows.nixpkgs = "nixpkgs";
|
|
|
|
|
|
|
|
outputs = { self, nixpkgs, config }: let
|
|
|
|
pc = import (./. + hostname);
|
|
|
|
hostname = "nixos";
|
|
|
|
system = "x86_64-linux";
|
|
|
|
overlays = builtins.attrValues config.overlays;
|
|
|
|
config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
|
|
|
|
"steam-original"
|
|
|
|
];
|
|
|
|
pkgs = import nixpkgs { inherit system overlays config; };
|
|
|
|
in {
|
|
|
|
nixosConfigurations.${hostname} = nixpkgs.lib.nixosSystem {
|
|
|
|
inherit system pkgs;
|
|
|
|
modules = [
|
|
|
|
# My configuration module (includes home-manager)
|
|
|
|
config.nixosModules.nixosModule
|
|
|
|
# Results from `nixos-generate-config`
|
|
|
|
pc
|
|
|
|
# Custom options (see module configuration options)
|
|
|
|
{
|
|
|
|
# Enable my custom configuration
|
|
|
|
jconfig.enable = true;
|
|
|
|
jconfig.gui.enable = true; # Enable gui environment
|
|
|
|
|
|
|
|
# Add users to use with home-manager
|
|
|
|
users.users = {};
|
|
|
|
|
2024-02-01 21:54:08 +01:00
|
|
|
# You should probably also enable wifi if needed
|
|
|
|
|
2024-01-31 22:17:28 +01:00
|
|
|
# Add home-manager users configuration (here you can enable jhome options)
|
|
|
|
home-manager.users = {};
|
|
|
|
# home-manager globally set options
|
|
|
|
home-manager.sharedModules = [{ jhome.hostName = hostname; }];
|
|
|
|
}
|
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2024-02-01 21:54:08 +01:00
|
|
|
Now you should be ready to do `sudo nixos-rebuild switch --flake .#$hostname`
|
|
|
|
and use the configuration c:.
|
|
|
|
|
2024-01-31 22:17:28 +01:00
|
|
|
### home-manager Module Setup
|
|
|
|
|
|
|
|
If you are not using NixOS, then you probably want to only use the home-manager
|
|
|
|
configuration. In that case, you want to use the
|
|
|
|
`nixosModules.homeManagerModuleSandalone` in your `home-manager` configuration,
|
|
|
|
and probably disable GUI applications all together `jhome.gui.enable = false`.
|
2024-02-01 21:54:08 +01:00
|
|
|
|
|
|
|
Your flake should then look like this (follow the [home-manager
|
|
|
|
Manual](https://nix-community.github.io/home-manager/index.xhtml#sec-flakes-standalone)
|
|
|
|
for more information):
|
|
|
|
|
|
|
|
```nix
|
|
|
|
{
|
|
|
|
inputs.nixpkgs.url = "nixpkgs/nixos-unstable";
|
|
|
|
inputs.home-manager.url = "github:nixos-community/home-manager";
|
|
|
|
inputs.home-manager.inputs.follows.nixpkgs = "nixpkgs";
|
|
|
|
|
|
|
|
# My custom configuration module
|
|
|
|
inputs.config.url = "github:jalil-salame/configuration.nix";
|
|
|
|
inputs.config.inputs.follows.nixpkgs = "nixpkgs";
|
|
|
|
inputs.config.inputs.follows.home-manager = "home-manager";
|
|
|
|
|
|
|
|
outputs = { self, nixpkgs, home-manager, config }: let
|
|
|
|
hostname = "nixos";
|
|
|
|
username = "jdoe";
|
|
|
|
system = "x86_64-linux";
|
|
|
|
overlays = builtins.attrValues config.overlays;
|
|
|
|
pkgs = import nixpkgs { inherit system overlays; };
|
|
|
|
in {
|
|
|
|
homeConfigurations.${username} = home-manager.lib.homeManagerConfiguration {
|
|
|
|
inherit pkgs;
|
|
|
|
modules = [
|
|
|
|
# My configuration module (includes home-manager)
|
|
|
|
config.nixosModules.homeManagerModuleSandalone
|
|
|
|
# Custom options (see module configuration options and home-manager options)
|
|
|
|
{
|
|
|
|
# Enable my custom configuration
|
|
|
|
jhome.enable = true;
|
|
|
|
jhome.hostName = hostname;
|
|
|
|
jhome.gui.enable = false;
|
|
|
|
|
|
|
|
# Extra configuration options
|
|
|
|
}
|
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
|
|
|
```
|
2024-03-03 15:20:42 +01:00
|
|
|
|
|
|
|
### NeoVIM Standalone setup
|
|
|
|
|
|
|
|
My NeoVIM configuration is managed by
|
|
|
|
[NixVIM](https://github.com/nix-community/nixvim), so check that project out if
|
|
|
|
you want to understand how it works. You can use [this
|
|
|
|
tutorial](https://nix-community.github.io/nixvim/user-guide/extending-config.html)
|
|
|
|
to extend my configuration without forking this repo or copying its files.
|
|
|
|
|
|
|
|
If you want to test out my configuration then you can run this handy nix
|
|
|
|
command:
|
|
|
|
|
|
|
|
```console
|
|
|
|
$ nix run github:jalil-salame/configuration.nix#nvim
|
|
|
|
```
|
|
|
|
|
|
|
|
It will download and build my NeoVIM configuration and run NeoVIM. Alternatively
|
|
|
|
you can replace `nix run` with `nix shell` which will temporarily add my NeoVIM
|
|
|
|
configuration to your shell and when you run `nvim` it will launch it.
|