summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/hyprland/monitor.nix101
-rw-r--r--modules/waybar/default.nix16
2 files changed, 117 insertions, 0 deletions
diff --git a/modules/hyprland/monitor.nix b/modules/hyprland/monitor.nix
new file mode 100644
index 0000000..7aafb7f
--- /dev/null
+++ b/modules/hyprland/monitor.nix
@@ -0,0 +1,101 @@
+{ config, lib, ... }:
+let
+ cfg = config.hyprland.monitors;
+in
+{
+ imports = [ ../waybar ];
+
+ options.hyprland.monitors =
+ with lib;
+ mkOption {
+ description = "Hyprland Monitor Configuration";
+ type = types.attrsOf (
+ types.submodule {
+ options = {
+ resolution = mkOption {
+ description = "Monitor Resolution";
+ type = types.strMatching "[:digit:]+x[:digit:]+|preferred";
+ default = "preferred";
+ };
+ position = mkOption {
+ description = "Monitor Position";
+ type = types.strMatching "-?[:digit:]+x-?[:digit:]+|auto";
+ default = "auto";
+ };
+ scale = mkOption {
+ description = "Monitor Scale";
+ type = types.numbers.positive;
+ default = 1;
+ };
+ transform = mkOption {
+ description = "Hyprland Monitor Transform";
+ type = types.submodule {
+ options = {
+ flipped = mkOption {
+ description = "Hyprland Flip Monitor";
+ type = types.bool;
+ default = false;
+ };
+ rotation = mkOption {
+ description = "Hyprland Monitor Rotation";
+ type = types.enum [
+ 0
+ 90
+ 180
+ 270
+ ];
+ default = 0;
+ };
+ };
+ };
+ default = {
+ flipped = false;
+ rotation = 0;
+ };
+ };
+ bar = mkOption {
+ description = "Waybar Settings";
+ type = types.submodule {
+ options = {
+ enable = mkOption {
+ description = "Enable Waybar for this Monitor";
+ type = types.bool;
+ default = false;
+ };
+ };
+ };
+ default = {
+ enable = false;
+ };
+ };
+ };
+ }
+ );
+ default = {
+ default = { };
+ };
+ };
+
+ config = {
+ home-manager.users.n8.wayland.windowManager.hyprland.settings.monitor =
+ lib.attrsets.mapAttrsToList
+ (
+ name: value:
+ "${if name == "default" then "" else name},${value.resolution},"
+ + "${value.position},"
+ + "${toString value.scale},"
+ + "transform,"
+ + "${toString ((value.transform.rotation / 90) + (if value.transform.flipped then 4 else 0))}"
+ )
+ cfg;
+
+ bar = builtins.map (m: m.name) (
+ builtins.filter (m: m.enable) (
+ lib.attrsets.mapAttrsToList (name: value: {
+ name = name;
+ enable = value.bar.enable;
+ }) cfg
+ )
+ );
+ };
+}
diff --git a/modules/waybar/default.nix b/modules/waybar/default.nix
new file mode 100644
index 0000000..c6ecfb3
--- /dev/null
+++ b/modules/waybar/default.nix
@@ -0,0 +1,16 @@
+{ config, lib, ... }:
+{
+ options.bar =
+ with lib;
+ mkOption {
+ description = "Bar Configuration";
+ type = types.listOf types.str;
+ default = [ "default" ];
+ };
+
+ config = {
+ home-manager.users.n8.programs.waybar.settings.mainBar.output = (
+ builtins.map (o: if o == "default" then "*" else toString o) config.bar
+ );
+ };
+}