assertions + more descriptive initializations

This commit is contained in:
Danilo Reyes 2025-09-28 14:51:08 -06:00
parent 712a0728a3
commit 6da8588e40
30 changed files with 94 additions and 35 deletions

View File

@ -10,7 +10,7 @@ let
cfg = config.my.stylix; cfg = config.my.stylix;
in in
{ {
options.my.stylix.enable = lib.mkEnableOption "enable"; options.my.stylix.enable = lib.mkEnableOption "system-wide theming with Stylix";
config = { config = {
stylix = { stylix = {
inherit (scheme) image polarity; inherit (scheme) image polarity;

View File

@ -37,8 +37,8 @@ let
in in
{ {
options.my = { options.my = {
apps.art.enable = lib.mkEnableOption "enable"; apps.art.enable = lib.mkEnableOption "digital art and creative applications";
dev.gameDev.enable = lib.mkEnableOption "enable"; dev.gameDev.enable = lib.mkEnableOption "game development tools and engines";
}; };
config.users.users.jawz.packages = artPackages ++ gameDevPackages; config.users.users.jawz.packages = artPackages ++ gameDevPackages;
} }

View File

@ -5,7 +5,7 @@
... ...
}: }:
{ {
options.my.apps.dictionaries.enable = lib.mkEnableOption "enable"; options.my.apps.dictionaries.enable = lib.mkEnableOption "dictionaries and language tools";
config = lib.mkIf config.my.apps.dictionaries.enable { config = lib.mkIf config.my.apps.dictionaries.enable {
users.users.jawz.packages = builtins.attrValues { users.users.jawz.packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)

View File

@ -5,7 +5,7 @@
... ...
}: }:
{ {
options.my.apps.fonts.enable = lib.mkEnableOption "enable"; options.my.apps.fonts.enable = lib.mkEnableOption "additional fonts and typography";
config = lib.mkIf config.my.apps.fonts.enable { config = lib.mkIf config.my.apps.fonts.enable {
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "corefonts" ]; nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "corefonts" ];
fonts.packages = builtins.attrValues { fonts.packages = builtins.attrValues {

View File

@ -8,8 +8,8 @@
{ {
imports = [ inputs.nix-gaming.nixosModules.platformOptimizations ]; imports = [ inputs.nix-gaming.nixosModules.platformOptimizations ];
options.my.apps = { options.my.apps = {
gaming.enable = lib.mkEnableOption "enable"; gaming.enable = lib.mkEnableOption "gaming applications and emulators";
switch.enable = lib.mkEnableOption "enable"; switch.enable = lib.mkEnableOption "Nintendo Switch homebrew tools";
}; };
config = lib.mkIf config.my.apps.gaming.enable { config = lib.mkIf config.my.apps.gaming.enable {
# sops.secrets.switch-presence = lib.mkIf config.my.apps.gaming.switch.enable { # sops.secrets.switch-presence = lib.mkIf config.my.apps.gaming.switch.enable {

View File

@ -30,7 +30,7 @@ let
); );
in in
{ {
options.my.apps.internet.enable = lib.mkEnableOption "enable"; options.my.apps.internet.enable = lib.mkEnableOption "internet browsers and communication apps";
config = lib.mkIf config.my.apps.internet.enable { config = lib.mkIf config.my.apps.internet.enable {
home-manager.users.jawz.programs.librewolf = import ./librewolf.nix; home-manager.users.jawz.programs.librewolf = import ./librewolf.nix;
programs.geary.enable = true; programs.geary.enable = true;

View File

@ -5,7 +5,7 @@
... ...
}: }:
{ {
options.my.apps.misc.enable = lib.mkEnableOption "enable"; options.my.apps.misc.enable = lib.mkEnableOption "miscellaneous desktop applications";
config = lib.mkIf config.my.apps.misc.enable { config = lib.mkIf config.my.apps.misc.enable {
users.users.jawz.packages = builtins.attrValues { users.users.jawz.packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)

View File

@ -5,7 +5,7 @@
... ...
}: }:
{ {
options.my.apps.multimedia.enable = lib.mkEnableOption "enable"; options.my.apps.multimedia.enable = lib.mkEnableOption "multimedia applications and media players";
config = lib.mkIf config.my.apps.multimedia.enable { config = lib.mkIf config.my.apps.multimedia.enable {
users.users.jawz.packages = builtins.attrValues { users.users.jawz.packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)

View File

@ -5,7 +5,7 @@
... ...
}: }:
{ {
options.my.apps.piano.enable = lib.mkEnableOption "enable"; options.my.apps.piano.enable = lib.mkEnableOption "piano learning and music theory apps";
config = lib.mkIf config.my.apps.piano.enable { config = lib.mkIf config.my.apps.piano.enable {
users.users.jawz.packages = builtins.attrValues { users.users.jawz.packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)

View File

@ -5,7 +5,7 @@
... ...
}: }:
{ {
options.my.apps.office.enable = lib.mkEnableOption "enable"; options.my.apps.office.enable = lib.mkEnableOption "office applications and productivity tools";
config = lib.mkIf config.my.apps.office.enable { config = lib.mkIf config.my.apps.office.enable {
environment.variables.CALIBRE_USE_SYSTEM_THEME = "1"; environment.variables.CALIBRE_USE_SYSTEM_THEME = "1";
users.users.jawz.packages = builtins.attrValues { users.users.jawz.packages = builtins.attrValues {

View File

@ -5,7 +5,7 @@
... ...
}: }:
{ {
options.my.emacs.enable = lib.mkEnableOption "enable"; options.my.emacs.enable = lib.mkEnableOption "Doom Emacs configuration";
config = lib.mkIf config.my.emacs.enable { config = lib.mkIf config.my.emacs.enable {
home-manager.users.jawz = { home-manager.users.jawz = {
xdg.dataFile = { xdg.dataFile = {

View File

@ -1,7 +1,7 @@
{ lib, config, ... }: { lib, config, ... }:
let let
mkOptions = name: subdomain: port: { mkOptions = name: subdomain: port: {
enable = lib.mkEnableOption "enable"; enable = lib.mkEnableOption "this server service";
enableCron = lib.mkEnableOption "enable cronjob"; enableCron = lib.mkEnableOption "enable cronjob";
enableProxy = lib.mkEnableOption "enable reverse proxy"; enableProxy = lib.mkEnableOption "enable reverse proxy";
port = lib.mkOption { port = lib.mkOption {

View File

@ -116,10 +116,69 @@ in
default = "America/Mexico_City"; default = "America/Mexico_City";
description = "Timezone"; description = "Timezone";
}; };
enableContainers = lib.mkEnableOption "enable"; enableContainers = lib.mkEnableOption "container services (Docker/Podman)";
enableProxy = lib.mkEnableOption "enable"; enableProxy = lib.mkEnableOption "nginx reverse proxy for services";
}; };
config = { config = {
assertions = [
{
assertion = config.my.servers.nextcloud.enable -> config.my.servers.postgres.enable;
message = "Nextcloud requires PostgreSQL to be enabled";
}
{
assertion = config.my.servers.vaultwarden.enable -> config.my.servers.postgres.enable;
message = "Vaultwarden requires PostgreSQL to be enabled";
}
{
assertion = config.my.servers.firefly-iii.enable -> config.my.servers.postgres.enable;
message = "Firefly III requires PostgreSQL to be enabled";
}
{
assertion = config.my.servers.mealie.enable -> config.my.servers.postgres.enable;
message = "Mealie requires PostgreSQL to be enabled";
}
{
assertion = config.my.servers.shiori.enable -> config.my.servers.postgres.enable;
message = "Shiori requires PostgreSQL to be enabled";
}
{
assertion = config.my.servers.ryot.enable -> config.my.servers.postgres.enable;
message = "Ryot requires PostgreSQL to be enabled";
}
{
assertion = config.my.servers.synapse.enable -> config.my.servers.postgres.enable;
message = "Matrix Synapse requires PostgreSQL to be enabled";
}
{
assertion = config.my.servers.gitea.enable -> config.my.servers.postgres.enable;
message = "Gitea requires PostgreSQL to be enabled";
}
{
assertion =
config.my.enableProxy
-> (builtins.any (s: s.enableProxy or false) (builtins.attrValues config.my.servers));
message = "enableProxy is true but no services have enableProxy enabled";
}
{
assertion =
config.my.enableContainers
|| !(builtins.any (opt: opt) [
config.my.servers.ryot.enable
config.my.servers.lidarr.enable
config.my.servers.prowlarr.enable
config.my.servers.maloja.enable
config.my.servers.multi-scrobbler.enable
config.my.servers.flame.enable
config.my.servers.flameSecret.enable
config.my.servers.metube.enable
config.my.servers.go-vod.enable
config.my.servers.tranga.enable
config.my.servers.drpp.enable
config.my.servers.plex-discord-bot.enable
]);
message = "Container services are enabled but enableContainers is false";
}
];
virtualisation = { virtualisation = {
containers.enable = true; containers.enable = true;
oci-containers.backend = "podman"; oci-containers.backend = "podman";

View File

@ -8,8 +8,8 @@
{ {
imports = [ ../factories/mkscript.nix ]; imports = [ ../factories/mkscript.nix ];
options.my.units = { options.my.units = {
download.enable = lib.mkEnableOption "enable"; download.enable = lib.mkEnableOption "media download automation scripts";
downloadManga.enable = lib.mkEnableOption "enable"; downloadManga.enable = lib.mkEnableOption "manga download automation";
}; };
config = config =
let let

View File

@ -7,7 +7,7 @@
}: }:
{ {
imports = [ ../factories/mkscript.nix ]; imports = [ ../factories/mkscript.nix ];
options.my.units.stream-dl.enable = lib.mkEnableOption "enable"; options.my.units.stream-dl.enable = lib.mkEnableOption "streaming media download service";
config = config =
let let
inherit (inputs.jawz-scripts.packages.x86_64-linux) stream-dl; inherit (inputs.jawz-scripts.packages.x86_64-linux) stream-dl;

View File

@ -3,7 +3,7 @@ let
cfg = config.my.servers.adguardhome; cfg = config.my.servers.adguardhome;
in in
{ {
options.my.servers.adguardhome.enable = lib.mkEnableOption "enable"; options.my.servers.adguardhome.enable = lib.mkEnableOption "AdGuard Home DNS ad blocker";
config = lib.mkIf (cfg.enable && config.my.secureHost) { config = lib.mkIf (cfg.enable && config.my.secureHost) {
services.adguardhome = { services.adguardhome = {
inherit (cfg) enable; inherit (cfg) enable;

View File

@ -4,7 +4,7 @@ let
in in
{ {
options.my.servers.firefly-iii = { options.my.servers.firefly-iii = {
enable = lib.mkEnableOption "enable"; enable = lib.mkEnableOption "Firefly III personal finance manager";
enableProxy = lib.mkEnableOption "enableProxy"; enableProxy = lib.mkEnableOption "enableProxy";
}; };
config = lib.mkIf (cfg.enable && config.my.servers.postgres.enable && config.my.secureHost) { config = lib.mkIf (cfg.enable && config.my.servers.postgres.enable && config.my.secureHost) {

View File

@ -37,7 +37,7 @@ in
options.my.servers = { options.my.servers = {
nextcloud = setup.mkOptions "nextcloud" "cloud" 80; nextcloud = setup.mkOptions "nextcloud" "cloud" 80;
collabora = setup.mkOptions "collabora" "collabora" 9980; collabora = setup.mkOptions "collabora" "collabora" 9980;
go-vod.enable = lib.mkEnableOption "enable"; go-vod.enable = lib.mkEnableOption "Go-VOD video transcoding service";
}; };
config = lib.mkIf (cfg.enable && config.my.servers.postgres.enable && config.my.secureHost) { config = lib.mkIf (cfg.enable && config.my.servers.postgres.enable && config.my.secureHost) {
sops.secrets.nextcloud-adminpass = { sops.secrets.nextcloud-adminpass = {

View File

@ -3,7 +3,7 @@ let
cfg = config.my.servers.paperless; cfg = config.my.servers.paperless;
in in
{ {
options.my.servers.paperless.enable = lib.mkEnableOption "enable"; options.my.servers.paperless.enable = lib.mkEnableOption "Paperless-ngx document management system";
config = lib.mkIf (cfg.enable && config.my.servers.postgres.enable) { config = lib.mkIf (cfg.enable && config.my.servers.postgres.enable) {
networking.firewall.allowedTCPPorts = [ config.services.paperless.port ]; networking.firewall.allowedTCPPorts = [ config.services.paperless.port ];
services.paperless = { services.paperless = {

View File

@ -42,7 +42,7 @@ let
]; ];
in in
{ {
options.my.servers.postgres.enable = lib.mkEnableOption "enable"; options.my.servers.postgres.enable = lib.mkEnableOption "PostgreSQL database server";
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
environment.systemPackages = [ upgrade-pg-cluster ]; environment.systemPackages = [ upgrade-pg-cluster ];
services.postgresql = { services.postgresql = {

View File

@ -38,9 +38,9 @@ let
in in
{ {
options.my.servers = { options.my.servers = {
unpackerr.enable = lib.mkEnableOption "enable"; unpackerr.enable = lib.mkEnableOption "automatic archive extraction service";
qbittorrent = { qbittorrent = {
enable = lib.mkEnableOption "enable"; enable = lib.mkEnableOption "qBittorrent torrent client";
port = lib.mkOption { port = lib.mkOption {
type = lib.types.int; type = lib.types.int;
default = 9091; default = 9091;

View File

@ -4,7 +4,7 @@ let
in in
{ {
options.my.servers.sabnzbd = { options.my.servers.sabnzbd = {
enable = lib.mkEnableOption "enable"; enable = lib.mkEnableOption "SABnzbd Usenet downloader";
port = lib.mkOption { port = lib.mkOption {
type = lib.types.int; type = lib.types.int;
default = 3399; default = 3399;

View File

@ -1,6 +1,6 @@
{ config, lib, ... }: { config, lib, ... }:
{ {
options.my.services.network.enable = lib.mkEnableOption "enable"; options.my.services.network.enable = lib.mkEnableOption "network configuration and services";
config = lib.mkIf config.my.services.network.enable { config = lib.mkIf config.my.services.network.enable {
networking = { networking = {
enableIPv6 = true; enableIPv6 = true;

View File

@ -5,7 +5,7 @@
... ...
}: }:
{ {
options.my.services.nvidia.enable = lib.mkEnableOption "enable"; options.my.services.nvidia.enable = lib.mkEnableOption "NVIDIA GPU drivers and CUDA";
config = lib.mkIf config.my.services.nvidia.enable { config = lib.mkIf config.my.services.nvidia.enable {
environment.variables.CUDA_CACHE_PATH = "\${XDG_CACHE_HOME}/nv"; environment.variables.CUDA_CACHE_PATH = "\${XDG_CACHE_HOME}/nv";
boot.kernelParams = lib.mkIf (config.networking.hostName == "workstation") [ "nvidia-drm.fbdev=1" ]; boot.kernelParams = lib.mkIf (config.networking.hostName == "workstation") [ "nvidia-drm.fbdev=1" ];

View File

@ -11,7 +11,7 @@ let
]; ];
in in
{ {
options.my.services.printing.enable = lib.mkEnableOption "enable"; options.my.services.printing.enable = lib.mkEnableOption "printing services and drivers";
config = lib.mkIf config.my.services.printing.enable { config = lib.mkIf config.my.services.printing.enable {
users.users.jawz.packages = [ pkgs.simple-scan ]; users.users.jawz.packages = [ pkgs.simple-scan ];
services.printing = { services.printing = {

View File

@ -6,7 +6,7 @@
}: }:
{ {
imports = [ inputs.nix-gaming.nixosModules.pipewireLowLatency ]; imports = [ inputs.nix-gaming.nixosModules.pipewireLowLatency ];
options.my.services.sound.enable = lib.mkEnableOption "enable"; options.my.services.sound.enable = lib.mkEnableOption "audio system and PipeWire";
config = lib.mkIf config.my.services.sound.enable { config = lib.mkIf config.my.services.sound.enable {
services.pulseaudio.enable = false; services.pulseaudio.enable = false;
security.rtkit.enable = true; # make pipewire realtime-capable security.rtkit.enable = true; # make pipewire realtime-capable

View File

@ -9,7 +9,7 @@ let
interface = config.my.interfaces.${config.networking.hostName}; interface = config.my.interfaces.${config.networking.hostName};
in in
{ {
options.my.services.wireguard.enable = lib.mkEnableOption "enable"; options.my.services.wireguard.enable = lib.mkEnableOption "WireGuard VPN configuration";
config = lib.mkIf (config.my.services.wireguard.enable && config.my.secureHost) { config = lib.mkIf (config.my.services.wireguard.enable && config.my.secureHost) {
sops.secrets."wireguard/private".sopsFile = ../../secrets/wireguard.yaml; sops.secrets."wireguard/private".sopsFile = ../../secrets/wireguard.yaml;
networking = { networking = {

View File

@ -5,7 +5,7 @@
... ...
}: }:
{ {
options.my.shell.exercism.enable = lib.mkEnableOption "enable"; options.my.shell.exercism.enable = lib.mkEnableOption "Exercism coding practice platform";
config = lib.mkIf config.my.shell.exercism.enable { config = lib.mkIf config.my.shell.exercism.enable {
users.users.jawz.packages = builtins.attrValues { users.users.jawz.packages = builtins.attrValues {
inherit (pkgs) inherit (pkgs)

View File

@ -5,7 +5,7 @@
... ...
}: }:
{ {
options.my.shell.multimedia.enable = lib.mkEnableOption "enable"; options.my.shell.multimedia.enable = lib.mkEnableOption "multimedia CLI tools and codecs";
config = lib.mkIf config.my.shell.multimedia.enable { config = lib.mkIf config.my.shell.multimedia.enable {
home-manager.users.jawz.programs = { home-manager.users.jawz.programs = {
yt-dlp = { yt-dlp = {

View File

@ -6,7 +6,7 @@
... ...
}: }:
{ {
options.my.shell.tools.enable = lib.mkEnableOption "enable"; options.my.shell.tools.enable = lib.mkEnableOption "shell tools and utilities";
config = lib.mkIf config.my.shell.tools.enable { config = lib.mkIf config.my.shell.tools.enable {
home-manager.users.jawz.programs = { home-manager.users.jawz.programs = {
hstr.enable = true; hstr.enable = true;