From ba70754bf393d54b150b88bfa2d5c6ba51f43b69 Mon Sep 17 00:00:00 2001
From: Manuel Thalmann <m@nuth.ch>
Date: Fri, 23 Aug 2024 19:39:18 +0200
Subject: [PATCH] Allow configuring `oh-my-posh`

---
 lib/modules/packages/oh-my-posh.nix | 55 +++++++++++++++++++++++++++++
 lib/modules/valhalla.nix            |  1 +
 2 files changed, 56 insertions(+)
 create mode 100644 lib/modules/packages/oh-my-posh.nix

diff --git a/lib/modules/packages/oh-my-posh.nix b/lib/modules/packages/oh-my-posh.nix
new file mode 100644
index 00000000..e7fa5242
--- /dev/null
+++ b/lib/modules/packages/oh-my-posh.nix
@@ -0,0 +1,55 @@
+{ lib, ... }:
+  let
+    inherit (lib)
+      mkOption
+      types
+    ;
+
+    themeType = types.submodule (
+      { config, ... }: {
+        options = {
+          path = mkOption {
+            type = types.path;
+            description = "The path to the oh-my-posh theme to use.";
+          };
+
+          name = mkOption {
+            type = types.nullOr types.str;
+            description = "The name of the theme.";
+            default = lib.strings.removeSuffix ".omp" (lib.strings.removeSuffix ".json" (builtins.baseNameOf config.path));
+          };
+        };
+      });
+
+    ompType = types.submodule (
+      { config, ... }: {
+        options = {
+          theme = mkOption {
+            type = types.nullOr (types.either types.str themeType);
+            description = "The default theme.";
+            default = null;
+          };
+
+          additionalThemes = mkOption {
+            type = types.listOf themeType;
+            description = "A set of additional themes to install.";
+            default = [];
+          };
+        };
+      });
+  in {
+    options = {
+      valhalla.users = mkOption {
+        type = types.attrsOf (types.submodule (
+          { ... }: {
+            options = {
+              oh-my-posh = mkOption {
+                type = ompType;
+                description = "The Oh My Posh configuration to apply.";
+                default = {};
+              };
+            };
+          }));
+      };
+    };
+  }
\ No newline at end of file
diff --git a/lib/modules/valhalla.nix b/lib/modules/valhalla.nix
index 086eb458..a4628840 100644
--- a/lib/modules/valhalla.nix
+++ b/lib/modules/valhalla.nix
@@ -10,6 +10,7 @@
       ./i18n.nix
       ./os.nix
       ./packages/git.nix
+      ./packages/oh-my-posh.nix
       ./packages/rclone.nix
       ./partition.nix
       ./software.nix