refactor: add NixOS configuration files for server and workstation setups
Some checks failed
Nix Format Check / check-format (push) Failing after 39s
Some checks failed
Nix Format Check / check-format (push) Failing after 39s
This commit is contained in:
147
config/nixos/hardware/mennos-server/zfs.nix
Normal file
147
config/nixos/hardware/mennos-server/zfs.nix
Normal file
@@ -0,0 +1,147 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
let
|
||||
# Create a script to set permissions
|
||||
permissionsScript = pkgs.writeShellScriptBin "set-zfs-permissions" ''
|
||||
# Set default permissions for all service directories
|
||||
find /mnt/services -mindepth 1 -maxdepth 1 -type d \
|
||||
-exec chmod 775 {} \; \
|
||||
-exec chown menno:users {} \;
|
||||
|
||||
# Special cases
|
||||
chmod 774 /mnt/services/golink
|
||||
chown 65532:users /mnt/services/golink
|
||||
|
||||
chmod 754 /mnt/services/torrent
|
||||
chown menno:users /mnt/services/torrent
|
||||
|
||||
chmod 755 /mnt/services/proxy
|
||||
chmod 755 /mnt/services/static-websites
|
||||
|
||||
chown menno:users /mnt/backups
|
||||
chown menno:users /mnt/backups/photos
|
||||
chown menno:users /mnt/backups/services
|
||||
chmod 775 /mnt/backups
|
||||
chmod 775 /mnt/backups/photos
|
||||
chmod 775 /mnt/backups/services
|
||||
|
||||
# Set permissions for other mount points
|
||||
for dir in /mnt/{ai,astrophotography,audiobooks,downloads,ISOs,movies,music,old_backups,photos,stash,tvshows,VMs}; do
|
||||
chmod 755 "$dir"
|
||||
chown menno:users "$dir"
|
||||
done
|
||||
'';
|
||||
in
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
zfs
|
||||
zfstools
|
||||
permissionsScript
|
||||
smartmontools
|
||||
];
|
||||
|
||||
# Add the permissions service
|
||||
systemd.services.zfs-permissions = {
|
||||
description = "Set ZFS mount permissions";
|
||||
|
||||
# Run after ZFS mounts are available
|
||||
after = [ "zfs.target" ];
|
||||
requires = [ "zfs.target" ];
|
||||
|
||||
# Run on boot and every 6 hours
|
||||
startAt = "*-*-* */6:00:00";
|
||||
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "${permissionsScript}/bin/set-zfs-permissions";
|
||||
User = "root";
|
||||
Group = "root";
|
||||
};
|
||||
};
|
||||
|
||||
# Enable ZFS support
|
||||
boot.supportedFilesystems = [
|
||||
"ntfs"
|
||||
"zfs"
|
||||
];
|
||||
|
||||
# ZFS system services
|
||||
services.zfs = {
|
||||
autoScrub = {
|
||||
enable = true;
|
||||
interval = "weekly";
|
||||
};
|
||||
};
|
||||
|
||||
# If you want to keep compression settings
|
||||
boot.kernelParams = [
|
||||
"zfs.zfs_compressed_arc_enabled=1" # Enable compressed ARC
|
||||
"zfs.zfs_arc_max=21474836480" # 20 GiB
|
||||
];
|
||||
|
||||
fileSystems = {
|
||||
# backup ZFS mount points
|
||||
"/mnt/backups/photos" = {
|
||||
device = "backup/photos-duplicati";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/backups/services" = {
|
||||
device = "backup/services-duplicati";
|
||||
fsType = "zfs";
|
||||
};
|
||||
|
||||
# datapool ZFS mount points
|
||||
"/mnt/ai" = {
|
||||
device = "datapool/ai";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/astrophotography" = {
|
||||
device = "datapool/astro";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/audiobooks" = {
|
||||
device = "datapool/audiobooks";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/downloads" = {
|
||||
device = "datapool/downloads";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/ISOs" = {
|
||||
device = "datapool/isos";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/movies" = {
|
||||
device = "datapool/movies";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/music" = {
|
||||
device = "datapool/music";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/old_backups" = {
|
||||
device = "datapool/old_backups";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/photos" = {
|
||||
device = "datapool/photos";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/services" = {
|
||||
device = "datapool/services";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/stash" = {
|
||||
device = "datapool/stash";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/tvshows" = {
|
||||
device = "datapool/tv_shows";
|
||||
fsType = "zfs";
|
||||
};
|
||||
"/mnt/VMs" = {
|
||||
device = "datapool/vms";
|
||||
fsType = "zfs";
|
||||
};
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user