diff --git a/system/shared/services/default.nix b/system/shared/services/default.nix index 4a85a49..b0a0fe2 100644 --- a/system/shared/services/default.nix +++ b/system/shared/services/default.nix @@ -5,5 +5,7 @@ _: { ./logrotate.nix ./oomd.nix ./thermald.nix + ./journald.nix + ./fstrim.nix ]; } diff --git a/system/shared/services/fstrim.nix b/system/shared/services/fstrim.nix new file mode 100644 index 0000000..01bda11 --- /dev/null +++ b/system/shared/services/fstrim.nix @@ -0,0 +1,35 @@ +{ config, lib, ... }: let + inherit (lib.modules) mkIf; +in { + # if lvm is enabled, then tell it to issue discards + # (this is good for SSDs and has almost no downsides on HDDs, so + # it's a good idea to enable it unconditionally) + environment.etc."lvm/lvm.conf".text = mkIf config.services.lvm.enable '' + devices { + issue_discards = 1 + } + ''; + + # discard blocks that are not in use by the filesystem, good for SSDs + services.fstrim = { + # we may enable this unconditionally across all systems becuase it's performance + # impact is negligible on systems without a SSD - which means it's a no-op with + # almost no downsides aside from the service firing once per week + enable = true; + + # the default value, good enough for average-load systems + interval = "weekly"; + }; + + # tweak fstim service to run only when on AC power + # and to be nice to other processes + # (this is a good idea for any service that runs periodically) + systemd.services.fstrim = { + unitConfig.ConditionACPower = true; + + serviceConfig = { + Nice = 19; + IOSchedulingClass = "idle"; + }; + }; +} diff --git a/system/shared/services/journald.nix b/system/shared/services/journald.nix new file mode 100644 index 0000000..ac97726 --- /dev/null +++ b/system/shared/services/journald.nix @@ -0,0 +1,9 @@ +{ + # Limit systemd journal size, as the default is unlimited and + # journals get big really fast + services.journald.extraConfig = '' + SystemMaxUse=100M + RuntimeMaxUse=50M + SystemMaxFileSize=50M + ''; +}