Initial commit
This commit is contained in:
commit
956a0e3bbc
16 changed files with 647 additions and 0 deletions
47
flake.lock
Normal file
47
flake.lock
Normal file
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"nodes": {
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1632256651,
|
||||
"narHash": "sha256-+jbZKohfqTjp/5SwudwIhYzmFqmGDlIG99V5lOE4Yjg=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "58aa667e28ca4a6a2159b1f3258ef5d494d5ecb6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1631962327,
|
||||
"narHash": "sha256-h2fgtNHozEcB42BQ1QVWAJUpQ1FA3gpgq/RrOKAxbfE=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "bc9b956714ed6eac5f8888322aac5bc41389defa",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-unstable",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
136
flake.nix
Normal file
136
flake.nix
Normal file
|
@ -0,0 +1,136 @@
|
|||
{
|
||||
description = "System config";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "nixpkgs/nixos-unstable";
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { nixpkgs, home-manager, ... }@inputs:
|
||||
let
|
||||
inherit (nixpkgs) lib;
|
||||
|
||||
util = import ./lib {
|
||||
inherit system pkgs home-manager lib;
|
||||
overlays = (pkgs.overlays);
|
||||
};
|
||||
|
||||
inherit (util) user;
|
||||
inherit (util) host;
|
||||
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
config.allowUnfree = true;
|
||||
overlays = [ ];
|
||||
};
|
||||
|
||||
system = "x86_64-linux";
|
||||
|
||||
nixosConfig = {
|
||||
boot = {
|
||||
type = "qemu-bios";
|
||||
qemu = true;
|
||||
grubInstallDevice = "/dev/vda";
|
||||
};
|
||||
core.enable = true;
|
||||
};
|
||||
|
||||
vm2Config = {
|
||||
boot = {
|
||||
type = "uefi";
|
||||
qemu = true;
|
||||
};
|
||||
core.enable = true;
|
||||
};
|
||||
|
||||
nixosUsers = [{
|
||||
name = "erwin";
|
||||
groups = [ "wheel" "networkmanager" "video" ];
|
||||
uid = 1000;
|
||||
shell = pkgs.fish;
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMNoTcRsAxDwpiIj6nhUXwzSQjtcgKCR0RDlzP57wi0W erwin@horusvr-ws2"
|
||||
];
|
||||
}];
|
||||
|
||||
in {
|
||||
homeManagerConfigurations = {
|
||||
erwin = user.mkHMUser {
|
||||
userConfig = {
|
||||
git.enable = true;
|
||||
ssh.enable = true;
|
||||
applications.enable = true;
|
||||
gpg.enable = true;
|
||||
fish.enable = true;
|
||||
};
|
||||
username = "erwin";
|
||||
};
|
||||
};
|
||||
|
||||
nixosConfigurations = {
|
||||
vm1 = host.mkHost {
|
||||
name = "vm1";
|
||||
NICs = [ "enp1s0" ];
|
||||
kernelPackage = pkgs.linuxPackages;
|
||||
initrdMods = [
|
||||
"ahci"
|
||||
"xhci_pci"
|
||||
"virtio_pci"
|
||||
"sr_mod"
|
||||
"virtio_blk"
|
||||
"virtio_net"
|
||||
"virtio_mmio"
|
||||
"virtio_scsi"
|
||||
"9p"
|
||||
"9pnet_virtio"
|
||||
];
|
||||
kernelMods =
|
||||
[ "kvm-amd" "virtio_balloon" "virtio_console" "virtio_rng" ];
|
||||
kernelParams = [ ];
|
||||
systemConfig = nixosConfig;
|
||||
|
||||
users = nixosUsers;
|
||||
|
||||
cpuCores = 6;
|
||||
};
|
||||
|
||||
vm2 = host.mkHost {
|
||||
name = "vm2";
|
||||
NICs = [ "enp1s0" ];
|
||||
kernelPackage = pkgs.linuxPackages;
|
||||
initrdMods = [
|
||||
"ahci"
|
||||
"xhci_pci"
|
||||
"virtio_pci"
|
||||
"sr_mod"
|
||||
"virtio_blk"
|
||||
"virtio_net"
|
||||
"virtio_mmio"
|
||||
"virtio_scsi"
|
||||
"9p"
|
||||
"9pnet_virtio"
|
||||
];
|
||||
kernelMods =
|
||||
[ "kvm-amd" "virtio_balloon" "virtio_console" "virtio_rng" ];
|
||||
kernelParams = [ ];
|
||||
systemConfig = vm2Config;
|
||||
|
||||
users = nixosUsers;
|
||||
|
||||
cpuCores = 4;
|
||||
};
|
||||
|
||||
loki = host.mkHost {
|
||||
name = "loki";
|
||||
NICs = [ "enp4s0" ];
|
||||
kernelPackage = pkgs.linuxPackages;
|
||||
initrdMods = [ "nvme" "xhci_pci" "ahci" ];
|
||||
kernelMods = [ "kvm-amd" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
5
lib/default.nix
Normal file
5
lib/default.nix
Normal file
|
@ -0,0 +1,5 @@
|
|||
{ pkgs, home-manager, system, lib, overlays, ... }:
|
||||
rec {
|
||||
user = import ./user.nix { inherit pkgs home-manager lib system overlays; };
|
||||
host = import ./host.nix { inherit system pkgs home-manager lib user; };
|
||||
}
|
47
lib/host.nix
Normal file
47
lib/host.nix
Normal file
|
@ -0,0 +1,47 @@
|
|||
{ system, pkgs, home-manager, lib, user, ... }:
|
||||
with builtins;
|
||||
{
|
||||
mkHost = { name, NICs, initrdMods, kernelMods, kernelParams, kernelPackage,
|
||||
systemConfig, cpuCores, users, wifi ? [],
|
||||
gpuTempSensor ? null, cpuTempSensor ? null
|
||||
}:
|
||||
let
|
||||
networkCfg = listToAttrs (map (n: {
|
||||
name = "${n}"; value = { useDHCP = true; };
|
||||
}) NICs);
|
||||
|
||||
userCfg = {
|
||||
inherit name NICs systemConfig cpuCores gpuTempSensor cpuTempSensor;
|
||||
};
|
||||
|
||||
sys_users = (map (u: user.mkSystemUser u) users);
|
||||
in lib.nixosSystem {
|
||||
inherit system;
|
||||
|
||||
modules = [
|
||||
{
|
||||
imports = [ ../modules/system ] ++ sys_users;
|
||||
|
||||
eb = systemConfig;
|
||||
|
||||
environment.etc = {
|
||||
"hmsystemdata.json".text = toJSON userCfg;
|
||||
};
|
||||
|
||||
networking.hostName = "${name}";
|
||||
networking.interfaces = networkCfg;
|
||||
networking.wireless.interfaces = wifi;
|
||||
|
||||
boot.initrd.availableKernelModules = initrdMods;
|
||||
boot.kernelModules = kernelMods;
|
||||
boot.kernelParams = kernelParams;
|
||||
boot.kernelPackages = kernelPackage;
|
||||
|
||||
nixpkgs.pkgs = pkgs;
|
||||
nix.maxJobs = lib.mkDefault cpuCores;
|
||||
|
||||
system.stateVersion = "21.05";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
49
lib/user.nix
Normal file
49
lib/user.nix
Normal file
|
@ -0,0 +1,49 @@
|
|||
{ pkgs, home-manager, lib, system, overlays, ... }:
|
||||
with builtins;
|
||||
{
|
||||
mkHMUser = { userConfig, username }:
|
||||
home-manager.lib.homeManagerConfiguration {
|
||||
inherit system username pkgs;
|
||||
stateVersion = "21.05";
|
||||
configuration =
|
||||
let
|
||||
trySettings = tryEval (fromJSON (readFile /etc/hmsystemdata.json));
|
||||
machineData = if trySettings.success then trySettings.value else {};
|
||||
|
||||
machineModule = { pkgs, config, lib, ... }: {
|
||||
options.machineData = lib.mkOption {
|
||||
default = {};
|
||||
description = "Settings passed from nixos system config. If not present it will be empty.";
|
||||
};
|
||||
|
||||
config.machineData = machineData;
|
||||
};
|
||||
in {
|
||||
erwin = userConfig;
|
||||
|
||||
nixpkgs.overlays = overlays;
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
systemd.user.startServices = true;
|
||||
home.stateVersion = "21.05";
|
||||
home.username = username;
|
||||
home.homeDirectory = "/home/${username}";
|
||||
|
||||
imports = [ ../modules/users machineModule ];
|
||||
};
|
||||
homeDirectory = "/home/${username}";
|
||||
};
|
||||
|
||||
mkSystemUser = { name, groups, uid, shell, ... }:
|
||||
{
|
||||
users.users."${name}" = {
|
||||
name = name;
|
||||
isNormalUser = true;
|
||||
isSystemUser = false;
|
||||
extraGroups = groups;
|
||||
uid = uid;
|
||||
initialPassword = "helloworld";
|
||||
shell = shell;
|
||||
};
|
||||
};
|
||||
}
|
83
modules/system/boot/default.nix
Normal file
83
modules/system/boot/default.nix
Normal file
|
@ -0,0 +1,83 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
with lib;
|
||||
|
||||
let cfg = config.eb.boot;
|
||||
in {
|
||||
options.eb.boot = {
|
||||
type = mkOption {
|
||||
description = "Type of boot. Default bios.";
|
||||
default = null;
|
||||
type = types.enum [ "bios" "uefi" ];
|
||||
};
|
||||
|
||||
qemu = mkOption {
|
||||
description = "Set to true if running in qemu";
|
||||
default = false;
|
||||
type = types.bool;
|
||||
};
|
||||
|
||||
grubInstallDevice = mkOption {
|
||||
description = "The disk to install Grub to";
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkMerge [
|
||||
{
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-label/nixos";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
swapDevices = [{ device = "/dev/disk/by-label/swap"; }];
|
||||
}
|
||||
(mkIf (cfg.type == "bios") {
|
||||
boot.loader = {
|
||||
grub = {
|
||||
enable = true;
|
||||
version = 2;
|
||||
device = cfg.grubInstallDevice;
|
||||
efiSupport = false;
|
||||
useOSProber = true;
|
||||
extraEntries = ''
|
||||
menuentry "Reboot" {
|
||||
reboot
|
||||
}
|
||||
menuentry "Power off" {
|
||||
halt
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
})
|
||||
(mkIf (cfg.type == "uefi") {
|
||||
boot.loader = {
|
||||
systemd-boot = {
|
||||
enable = true;
|
||||
editor = false;
|
||||
configurationLimit = 10;
|
||||
};
|
||||
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-label/boot";
|
||||
fsType = "vfat";
|
||||
};
|
||||
})
|
||||
(mkIf (cfg.qemu) {
|
||||
boot.initrd.postDeviceCommands = ''
|
||||
# Set the system time from the hardware clock to work around a
|
||||
# bug in qemu-kvm > 1.5.2 where the VM clock is initialized
|
||||
# to the *boot time* of the host.
|
||||
hwclock -s
|
||||
'';
|
||||
|
||||
services.qemuGuest.enable = true;
|
||||
})
|
||||
];
|
||||
}
|
69
modules/system/core/default.nix
Normal file
69
modules/system/core/default.nix
Normal file
|
@ -0,0 +1,69 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.eb.core;
|
||||
in {
|
||||
options.eb.core = {
|
||||
enable = mkOption {
|
||||
description = "Enable core options";
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable) {
|
||||
nix = {
|
||||
package = pkgs.nixUnstable;
|
||||
extraOptions = "experimental-features = nix-command flakes";
|
||||
gc = {
|
||||
automatic = true;
|
||||
options = "--delete-older-than 10d";
|
||||
};
|
||||
};
|
||||
|
||||
environment.shells = [ pkgs.fish pkgs.zsh pkgs.bash ];
|
||||
|
||||
console = {
|
||||
font = "Lat2-Terminus16";
|
||||
keyMap = "colemak";
|
||||
};
|
||||
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
time.timeZone = "Europe/Amsterdam";
|
||||
|
||||
powerManagement.cpuFreqGovernor = lib.mkDefault "performance";
|
||||
hardware.enableRedistributableFirmware = lib.mkDefault true;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
unzip
|
||||
|
||||
zsh
|
||||
fish
|
||||
|
||||
gawk
|
||||
gnused
|
||||
|
||||
curl
|
||||
xh
|
||||
|
||||
bottom
|
||||
acpi
|
||||
pstree
|
||||
|
||||
git
|
||||
|
||||
patchelf
|
||||
nix-index
|
||||
manix
|
||||
|
||||
neovim
|
||||
];
|
||||
|
||||
security.sudo.extraConfig = ''Defaults env_reset,timestamp_timeout=5,insults,lecture="always"'';
|
||||
security.sudo.execWheelOnly = true;
|
||||
|
||||
services.openssh.enable = true;
|
||||
|
||||
};
|
||||
}
|
8
modules/system/default.nix
Normal file
8
modules/system/default.nix
Normal file
|
@ -0,0 +1,8 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
{
|
||||
imports = [
|
||||
./boot
|
||||
./core
|
||||
./nixos
|
||||
];
|
||||
}
|
19
modules/system/nixos/default.nix
Normal file
19
modules/system/nixos/default.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.eb.nixos;
|
||||
in {
|
||||
options.eb.nixos = {
|
||||
enable = mkOption {
|
||||
description = "Whether to enable nixos settings";
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable) {
|
||||
environment.systemPackages = [
|
||||
];
|
||||
|
||||
};
|
||||
}
|
26
modules/users/applications/default.nix
Normal file
26
modules/users/applications/default.nix
Normal file
|
@ -0,0 +1,26 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.erwin.applications;
|
||||
in {
|
||||
options.erwin.applications = {
|
||||
enable = mkOption {
|
||||
description = "Enable a set of common applications";
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable) {
|
||||
home.sessionVariables = {
|
||||
EDITOR = "vim";
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
neovim
|
||||
];
|
||||
|
||||
fonts.fontconfig.enable = true;
|
||||
};
|
||||
}
|
11
modules/users/default.nix
Normal file
11
modules/users/default.nix
Normal file
|
@ -0,0 +1,11 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./applications
|
||||
./fish
|
||||
./git
|
||||
./gpg
|
||||
./ssh
|
||||
];
|
||||
}
|
29
modules/users/fish/default.nix
Normal file
29
modules/users/fish/default.nix
Normal file
|
@ -0,0 +1,29 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
with lib;
|
||||
|
||||
let cfg = config.erwin.fish;
|
||||
in {
|
||||
options.erwin.fish = {
|
||||
enable = mkOption {
|
||||
description = "Enable fish shell";
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable) (let starship = pkgs.starship;
|
||||
in {
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
# interactiveShellInit = ''
|
||||
# source ("${starship}/bin/starship" init fish --print-full-init | psub)
|
||||
# '';
|
||||
};
|
||||
});
|
||||
}
|
41
modules/users/git/default.nix
Normal file
41
modules/users/git/default.nix
Normal file
|
@ -0,0 +1,41 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.erwin.git;
|
||||
in {
|
||||
options.erwin.git = {
|
||||
enable = mkOption {
|
||||
description = "Enable git";
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
|
||||
userName = mkOption {
|
||||
description = "Name for git";
|
||||
type = types.str;
|
||||
default = "Erwin Boskma";
|
||||
};
|
||||
|
||||
userEmail = mkOption {
|
||||
description = "Email for git";
|
||||
type = types.str;
|
||||
default = "erwin@datarift.nl";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable) {
|
||||
programs.git = {
|
||||
enable = true;
|
||||
userName = cfg.userName;
|
||||
userEmail = cfg.userEmail;
|
||||
extraConfig = {
|
||||
credential.helper = "${pkgs.git.override { withLibsecret = true; }}/bin/git-credential-libsecret";
|
||||
};
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
];
|
||||
};
|
||||
}
|
||||
|
32
modules/users/gpg/default.nix
Normal file
32
modules/users/gpg/default.nix
Normal file
|
@ -0,0 +1,32 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.erwin.gpg;
|
||||
in {
|
||||
options.erwin.gpg = {
|
||||
enable = mkOption {
|
||||
description = "Enable GPG";
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable) {
|
||||
home.packages = with pkgs; [
|
||||
pinentry-curses
|
||||
];
|
||||
|
||||
programs.gpg = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
services.gpg-agent = {
|
||||
enable = true;
|
||||
pinentryFlavor = "curses";
|
||||
enableSshSupport = true;
|
||||
defaultCacheTtlSsh = 14400;
|
||||
maxCacheTtlSsh = 14400;
|
||||
};
|
||||
};
|
||||
}
|
22
modules/users/input/default.nix
Normal file
22
modules/users/input/default.nix
Normal file
|
@ -0,0 +1,22 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.erwin.input;
|
||||
in {
|
||||
options.erwin.input = {
|
||||
enable = mkOption {
|
||||
description = "Enable input configuration";
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable) {
|
||||
home.keyboard = {
|
||||
layout = "us";
|
||||
variant = "colemak";
|
||||
options = [];
|
||||
};
|
||||
};
|
||||
}
|
23
modules/users/ssh/default.nix
Normal file
23
modules/users/ssh/default.nix
Normal file
|
@ -0,0 +1,23 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.erwin.ssh;
|
||||
in {
|
||||
options.erwin.ssh = {
|
||||
enable = mkOption {
|
||||
description = "Enable ssh";
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = mkIf (cfg.enable) {
|
||||
home.packages = with pkgs; [
|
||||
];
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue