{ config, lib, pkgs, username, ... }: let cfg = config.os.core.security; in { options.os.core.security = { enable = lib.mkEnableOption "core security services"; antivirus.enable = lib.mkEnableOption "enables clamav antivirus"; sandboxing.enable = lib.mkEnableOption "enables sandboxing stuff"; }; config = lib.mkIf cfg.enable ( lib.mkMerge [ { security = { polkit.enable = true; rtkit.enable = true; doas = { enable = true; extraRules = [ { users = [ username ]; keepEnv = true; persist = true; } ]; }; sudo.enable = false; pam.services = { swaylock = { }; login.enableGnomeKeyring = true; }; }; environment.systemPackages = [ pkgs.doas-sudo-shim ]; } (lib.mkIf cfg.sandboxing.enable { security.apparmor = { enable = true; enableCache = true; killUnconfinedConfinables = true; packages = with pkgs; [ apparmor-profiles roddhjav-apparmor-rules ]; }; programs.firejail.enable = true; environment.etc = { "firejail/games.profile".text = '' include wine.profile # --- Security stuff --- apparmor nonewprivs net none noinput nogroups novideo dbus-user none dbus-system none # --- Filesystem Isolation --- whitelist ~/games/repacks/firejail private-tmp ''; }; environment.systemPackages = with pkgs; [ landrun apparmor-utils apparmor-bin-utils ]; }) (lib.mkIf cfg.antivirus.enable { services.clamav = { daemon = { enable = true; settings = { OnAccessIncludePath = [ "/home/${username}" ]; OnAccessPrevention = true; OnAccessExcludeUname = "clamav"; MaxThreads = 20; MaxQueue = 100; }; }; scanner.enable = true; updater.enable = true; fangfrisch.enable = true; # massive performance hit # clamonacc.enable = true; }; boot.kernel.sysctl."fs.inotify.max_user_watches" = 524288; users.users.${username}.extraGroups = [ "clamav" ]; }) { services.gnome.gnome-keyring.enable = true; environment.systemPackages = with pkgs; [ veracrypt keepassxc ]; } ] ); }