aboutsummaryrefslogtreecommitdiffstats
path: root/modules/programs
diff options
context:
space:
mode:
authorArpit Chakladar <arpitchakladar@gmail.com>2026-07-09 01:57:05 +0530
committerArpit Chakladar <arpitchakladar@gmail.com>2026-07-09 01:57:05 +0530
commit1314456be1c96e7c61487a7eee11f80682dafdf1 (patch)
treefa130bad69313475670aa58633e7c1641fcab77d /modules/programs
parenta2beb86ab62f0f2c5052b8efe46bec5086907e3b (diff)
downloadhome-manager-config-1314456be1c96e7c61487a7eee11f80682dafdf1.tar.gz
home-manager-config-1314456be1c96e7c61487a7eee11f80682dafdf1.zip
feat: added assertions for automatically validation related options
Some programs and their configurations may depend on other programs. For a truly portable configuration users must be able to get appropriate error messages if a options is enabled but its requirements (like a dependent option) is not met. The build crashes for those and keeps the config concise.
Diffstat (limited to 'modules/programs')
-rw-r--r--modules/programs/aerc/assertions.nix19
-rw-r--r--modules/programs/aerc/default.nix2
-rw-r--r--modules/programs/fzf/assertions.nix13
-rw-r--r--modules/programs/fzf/default.nix2
-rw-r--r--modules/programs/git/assertions.nix13
-rw-r--r--modules/programs/git/default.nix2
6 files changed, 51 insertions, 0 deletions
diff --git a/modules/programs/aerc/assertions.nix b/modules/programs/aerc/assertions.nix
new file mode 100644
index 0000000..a2b49c1
--- /dev/null
+++ b/modules/programs/aerc/assertions.nix
@@ -0,0 +1,19 @@
+{ config, ... }:
+{
+ assertions = [
+ {
+ assertion = !config.programs.aerc.enable || config.programs.less.enable;
+ message = ''
+ programs.aerc is enabled but programs.less.enable is not.
+ aerc requires less as its pager. Please enable programs.less.
+ '';
+ }
+ {
+ assertion = !config.programs.aerc.enable || config.programs.bat.enable;
+ message = ''
+ programs.aerc is enabled but programs.bat.enable is not.
+ aerc requires bat for text/html filtering. Please enable programs.bat.
+ '';
+ }
+ ];
+}
diff --git a/modules/programs/aerc/default.nix b/modules/programs/aerc/default.nix
index 7c69999..2a1361d 100644
--- a/modules/programs/aerc/default.nix
+++ b/modules/programs/aerc/default.nix
@@ -6,6 +6,8 @@
}:
{
+ imports = [ ./assertions.nix ];
+
config = lib.mkIf config.programs.aerc.enable {
programs.aerc = {
extraConfig = {
diff --git a/modules/programs/fzf/assertions.nix b/modules/programs/fzf/assertions.nix
new file mode 100644
index 0000000..7c2e79c
--- /dev/null
+++ b/modules/programs/fzf/assertions.nix
@@ -0,0 +1,13 @@
+{ config, ... }:
+{
+ assertions = [
+ {
+ assertion =
+ !config.programs.fzf.enable || config.programs.zsh.enable || config.programs.bash.enable;
+ message = ''
+ programs.fzf is enabled but neither programs.zsh.enable nor programs.bash.enable is set.
+ fzf shell integration requires zsh or bash. Please enable at least one.
+ '';
+ }
+ ];
+}
diff --git a/modules/programs/fzf/default.nix b/modules/programs/fzf/default.nix
index 8816ddd..7671b3c 100644
--- a/modules/programs/fzf/default.nix
+++ b/modules/programs/fzf/default.nix
@@ -2,6 +2,8 @@
# FZF - Fuzzy finder, CLI fuzzy search tool
{
+ imports = [ ./assertions.nix ];
+
config =
let
shellIntegration = ''
diff --git a/modules/programs/git/assertions.nix b/modules/programs/git/assertions.nix
new file mode 100644
index 0000000..fbe5d3c
--- /dev/null
+++ b/modules/programs/git/assertions.nix
@@ -0,0 +1,13 @@
+{ config, ... }:
+{
+ assertions = [
+ {
+ assertion =
+ !config.programs.git.useSSH || (config.programs.git.enable && config.programs.ssh.enable);
+ message = ''
+ programs.git.useSSH is enabled but programs.ssh.enable is not.
+ SSH must be enabled (programs.ssh.enable = true) to use SSH for git.
+ '';
+ }
+ ];
+}
diff --git a/modules/programs/git/default.nix b/modules/programs/git/default.nix
index 2c4303b..133c063 100644
--- a/modules/programs/git/default.nix
+++ b/modules/programs/git/default.nix
@@ -6,6 +6,8 @@
# Git - Distributed version control system
{
+ imports = [ ./assertions.nix ];
+
options.programs.git = {
username = lib.mkOption {
type = lib.types.str;