Nix configurations for my homelab
1{
2 config,
3 pkgs,
4 yemou-scripts,
5 ...
6}:
7{
8 nixpkgs.overlays = [ yemou-scripts.overlays.default ];
9
10 sops.secrets = {
11 "passwordHashes/root".neededForUsers = true;
12 "passwordHashes/mou".neededForUsers = true;
13 };
14
15 i18n.defaultLocale = "C.UTF-8";
16 time.timeZone = "America/New_York";
17
18 environment = {
19 loginShellInit = ''
20 if [ -e "/etc/profiles/per-user/$USER/etc/profile.d/hm-session-vars.sh" ]
21 then . "/etc/profiles/per-user/$USER/etc/profile.d/hm-session-vars.sh"
22 fi
23 '';
24 persistence."/data/persistent" = {
25 hideMounts = true;
26 directories = [
27 "/var/log"
28 "/var/lib/nixos"
29 "/var/lib/systemd/coredump"
30 {
31 directory = "/var/lib/private";
32 mode = "0700";
33 }
34 ];
35 };
36 sessionVariables = {
37 XDG_CACHE_HOME = "$HOME/.cache";
38 XDG_CONFIG_HOME = "$HOME/.config";
39 XDG_DATA_HOME = "$HOME/.local/share";
40 XDG_STATE_HOME = "$HOME/.local/state";
41 # FIXME: For some reason the LESSKEYIN_SYSTEM variable set by `programs.less` doesn't work?
42 # https://github.com/NixOS/nixpkgs/issues/354377
43 LESS = "-R";
44 };
45 systemPackages = with pkgs; [
46 htop
47 lsof
48 magic-wormhole-rs
49 man-pages
50 man-pages-posix
51 thm
52 ];
53 };
54
55 security.polkit.enable = true;
56
57 services = {
58 acpid.enable = true;
59 resolved = {
60 enable = true;
61 dnssec = "true";
62 dnsovertls = "true";
63 domains = [ "~." ];
64 fallbackDns = [ ];
65 };
66 };
67
68 systemd.network = {
69 enable = true;
70 networks."99-ethernet-default-dhcp" = {
71 dhcpV4Config.UseDNS = false;
72 dhcpV6Config.UseDNS = false;
73 ipv6AcceptRAConfig.UseDNS = false;
74 };
75 };
76
77 networking = {
78 nftables.enable = true;
79 useNetworkd = true;
80 nameservers = [
81 "2620:fe::fe"
82 "2620:fe::9"
83 "9.9.9.9"
84 "149.112.112.112"
85 ];
86 };
87
88 users = {
89 groups.mou.gid = 1000;
90 users = {
91 root.hashedPasswordFile = config.sops.secrets."passwordHashes/root".path;
92 mou = {
93 isNormalUser = true;
94 group = "mou";
95 extraGroups = [
96 "kvm"
97 "users"
98 "wheel"
99 ];
100 shell = pkgs.loksh;
101 hashedPasswordFile = config.sops.secrets."passwordHashes/mou".path;
102 };
103 };
104 };
105}