summaryrefslogtreecommitdiffstats
path: root/makefu/1systems/filepimp/config.nix
blob: 30ba61a9b649aed2542029b053f975398497868b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
{ config, pkgs, lib, ... }:
let
  byid = dev: "/dev/disk/by-id/" + dev;
  part1 = disk: disk + "-part1";
  rootDisk = byid "ata-SanDisk_SDSSDP064G_140237402890";
  primary-interface = "enp3s0"; # c8:cb:b8:cf:e4:dc
  # N54L Chassis:
  # ____________________
  # |______FRONT_______|
  # |   [             ]|
  # |   [ d1 ** d3 d4 ]|
  # |___[_____________]|
  jDisk1 = byid "ata-ST4000DM000-1F2168_Z3040NEA";

  # transfer to omo
  # jDisk0 = byid "ata-ST4000DM000-1F2168_Z303HVSG";
  jDisk2 = byid "ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E0621363";
  jDisk3 = byid "ata-TOSHIBA_MD04ACA400_156GK89OFSBA";
  allDisks = [ rootDisk jDisk1 jDisk2 jDisk3 ];
in {
  imports =
    [ # Include the results of the hardware scan.
      <stockholm/makefu>
      <stockholm/makefu/2configs/fs/single-partition-ext4.nix>
      <stockholm/makefu/2configs/smart-monitor.nix>
      <stockholm/makefu/2configs/tinc/retiolum.nix>
      <stockholm/makefu/2configs/filepimp-share.nix>
    ];

  krebs.build.host = config.krebs.hosts.filepimp;
  # AMD N54L
  boot = {
    loader.grub.device = rootDisk;

    initrd.availableKernelModules = [
      "ahci"
      "ohci_pci"
      "ehci_pci"
      "pata_atiixp"
      "usb_storage"
      "usbhid"
    ];

    kernelModules = [ "kvm-amd" ];
    extraModulePackages = [ ];
  };
  hardware.enableRedistributableFirmware = true;
  hardware.cpu.amd.updateMicrocode = true;

  zramSwap.enable = true;
  zramSwap.numDevices = 2;

  makefu.snapraid = let
    toMedia = name: "/media/" + name;
  in {
    enable = true;
    # todo combine creation when enabling the mount point
    disks = map toMedia [
                        # "j0"
                          "j1"
                          "j2"
                        ];
    parity = toMedia "par0";
  };
  # TODO: refactor, copy-paste from omo
  services.smartd.devices = builtins.map (x: { device = x; }) allDisks;
  powerManagement.powerUpCommands = lib.concatStrings (map (disk: ''
      ${pkgs.hdparm}/sbin/hdparm -S 100 ${disk}
      ${pkgs.hdparm}/sbin/hdparm -B 127 ${disk}
      ${pkgs.hdparm}/sbin/hdparm -y ${disk}
    '') allDisks);
  fileSystems = let
    xfsmount = name: dev:
      { "/media/${name}" = {
        device = dev; fsType = "xfs";
        options = [ "nofail" ];
      }; };
  in
  # (xfsmount "j0" (part1 jDisk0)) //
    (xfsmount "j1" (part1 jDisk1)) //
    (xfsmount "j2" (part1 jDisk2)) //
    (xfsmount "par0" (part1 jDisk3))
    ;

  networking.firewall.trustedInterfaces = [ primary-interface ];

  services.wakeonlan.interfaces = [
    {
      interface = primary-interface;
      method = "password";
      password = "CA:FE:BA:BE:13:37";
    }
  ];
}