User Home Size Restriction
Make XFS drives Mounted with Quota Support
parent
bde0963763
commit
86ef25e8ab
|
@ -8,8 +8,12 @@
|
||||||
imports =
|
imports =
|
||||||
[
|
[
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
|
# Set of Modules Defining System Configuration
|
||||||
|
./modules.nix
|
||||||
# Set of System Wide Available Packages
|
# Set of System Wide Available Packages
|
||||||
./packages.nix
|
./packages.nix
|
||||||
|
# Set of Users on This System
|
||||||
|
./users.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# Use the systemd-boot EFI boot loader.
|
# Use the systemd-boot EFI boot loader.
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
fileSystems."/" =
|
fileSystems."/" =
|
||||||
{ device = "/dev/disk/by-uuid/4aa8d42a-e8c3-4b60-bc69-2d0333886c55";
|
{ device = "/dev/disk/by-uuid/4aa8d42a-e8c3-4b60-bc69-2d0333886c55";
|
||||||
fsType = "xfs";
|
fsType = "xfs";
|
||||||
|
options = [ "defaults" "pquota" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/boot" =
|
fileSystems."/boot" =
|
||||||
|
@ -39,6 +40,7 @@
|
||||||
fileSystems."/storage" =
|
fileSystems."/storage" =
|
||||||
{ device = "/dev/disk/by-uuid/eb2170c8-236a-40d4-baa8-07ad4981a442";
|
{ device = "/dev/disk/by-uuid/eb2170c8-236a-40d4-baa8-07ad4981a442";
|
||||||
fsType = "xfs";
|
fsType = "xfs";
|
||||||
|
options = [ "defaults" "pquota" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices = [ ];
|
swapDevices = [ ];
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
{ ... }: {
|
||||||
|
imports = [
|
||||||
|
./modules/userHomeSize.nix
|
||||||
|
];
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
{ config, lib, pkgs, ... }: with lib; let
|
||||||
|
|
||||||
|
userOpts = { name, config, ... }: {
|
||||||
|
options = {
|
||||||
|
homeSize = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
description = "Size of user's home directory";
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
homeProjectId = mkOption {
|
||||||
|
type = types.nullOr types.int;
|
||||||
|
description = "What project does this user's home directory belong to";
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
in {
|
||||||
|
options = {
|
||||||
|
users.users = mkOption {
|
||||||
|
type = with types; attrsOf (submodule userOpts);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = let
|
||||||
|
users' = lib.attrsets.filterAttrs (userName: user: user.homeSize != null) config.users.users;
|
||||||
|
in mkIf (users' != {}) {
|
||||||
|
programs.xfs_quota.projects = mapAttrs (userName: user: let
|
||||||
|
in {
|
||||||
|
id = user.homeProjectId;
|
||||||
|
fileSystem = "/";
|
||||||
|
path = user.home;
|
||||||
|
sizeSoftLimit = user.homeSize;
|
||||||
|
sizeHardLimit = user.homeSize;
|
||||||
|
}) users';
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
{ ... }: {
|
||||||
|
imports = [
|
||||||
|
./users/david.nix
|
||||||
|
];
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
users.users.david = {
|
||||||
|
isNormalUser = true;
|
||||||
|
extraGroups = [ "wheel" ];
|
||||||
|
packages = with pkgs; [
|
||||||
|
];
|
||||||
|
};
|
||||||
|
users.userHomes.david = {};
|
||||||
|
}
|
Loading…
Reference in New Issue