diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2026-06-07 21:10:38 +0200 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2026-06-07 21:11:15 +0200 |
| commit | c643862bfee0debaf1c5110e732adc8c69cdb203 (patch) | |
| tree | 72efc189f659931ed385d7e51ef966f00577bd48 | |
| parent | 64c9728e0c73e35787b2e69393a69c9d2815f936 (diff) | |
update to nixos 26.05
| -rw-r--r-- | common/home/default.nix | 2 | ||||
| -rw-r--r-- | common/home/hyprland/default.nix | 264 | ||||
| -rw-r--r-- | common/home/hyprland/hl.nix | 38 | ||||
| -rw-r--r-- | common/home/programs/waybar/default.nix | 45 | ||||
| -rw-r--r-- | common/home/programs/waybar/style.css | 78 | ||||
| -rw-r--r-- | flake.lock | 12 | ||||
| -rw-r--r-- | hosts/workstation/default.nix | 6 | ||||
| -rw-r--r-- | modules/hyprland/monitor.nix | 153 |
8 files changed, 251 insertions, 347 deletions
diff --git a/common/home/default.nix b/common/home/default.nix index 4a33662..2296d0d 100644 --- a/common/home/default.nix +++ b/common/home/default.nix @@ -105,7 +105,7 @@ packages = [ accounts = import ./accounts { }; - wayland.windowManager.hyprland = import ./hyprland { inherit pkgs; }; + wayland.windowManager.hyprland = import ./hyprland { inherit pkgs; inherit lib; }; home.packages = packages ++ scripts; diff --git a/common/home/hyprland/default.nix b/common/home/hyprland/default.nix index 5ce838d..9ddb9bd 100644 --- a/common/home/hyprland/default.nix +++ b/common/home/hyprland/default.nix @@ -1,4 +1,8 @@ -{ pkgs, ... }: { +{ pkgs, lib, ... }: +let + hl = import ./hl.nix { inherit lib; }; +in +{ enable = true; systemd = { @@ -6,196 +10,130 @@ variables = [ "--all" ]; }; xwayland.enable = true; - #plugins = [ pkgs.hyprlandPlugins.hyprsplit ]; - configType = "hyprlang"; + configType = "lua"; settings = { - plugin = { - #hyprsplit = { - # num_workspaces = 10; - # persistent_workspaces = false; - #}; + mod = { + _var = "SUPER"; }; - "$mod" = "SUPER"; bind = [ - "$mod+Shift, Q, exit" - "$mod, C, killactive," - "$mod+Ctrl, F, togglefloating," - "$mod+Ctrl, S, togglesplit," + (hl.bind { mod = true; keys = [ "Q" ]; flags = { long_press = true; locked = true; }; } (hl.dsp.exec "shutdown")) - "$mod, Escape, exec, hyprlock" - "$mod, Space, exec, wofi --show drun" - "$mod, Shift+Space, exec, wofi --show run" - "$mod, O, exec, openproject" - "$mod, V, exec, openproject -e nvim" - "$mod, B, exec, bluemenu" - "$mod, P, pseudo" + (hl.bind { mod = true; keys = [ "h" ]; } (hl.dsp.focus { direction = "left"; })) + (hl.bind { mod = true; keys = [ "j" ]; } (hl.dsp.focus { direction = "down"; })) + (hl.bind { mod = true; keys = [ "k" ]; } (hl.dsp.focus { direction = "up"; })) + (hl.bind { mod = true; keys = [ "l" ]; } (hl.dsp.focus { direction = "right"; })) + (hl.bind { mod = true; keys = [ "i" ]; } (hl.dsp.layout "removemaster")) + (hl.bind { mod = true; keys = [ "d" ]; } (hl.dsp.layout "addmaster")) - "$mod, F1, exec, loadconfig" + (hl.bind { mod = true; shift = true; keys = [ "h" ]; } (hl.dsp.window.move { direction = "left"; })) + (hl.bind { mod = true; shift = true; keys = [ "j" ]; } (hl.dsp.window.move { direction = "down"; })) + (hl.bind { mod = true; shift = true; keys = [ "k" ]; } (hl.dsp.window.move { direction = "up"; })) + (hl.bind { mod = true; shift = true; keys = [ "l" ]; } (hl.dsp.window.move { direction = "right"; })) - "$mod, S, exec, sshconnect" + (hl.bind { mod = true; keys = [ "c" ]; } hl.dsp.window.close) + (hl.bind { mod = true; keys = [ "f" ]; } hl.dsp.window.fullscreen) - "$mod+Shift, Return, exec, alacritty" - "$mod+Shift, B, exec, firefox" - "$mod+Shift, P, exec, wofi-pass" - "$mod+Shift, O, exec, wofi-pass otp" - "$mod+Shift, E, exec, webtrayctl show https://chat.nathanreiner.xyz" - "$mod+Shift+Alt, J, exec, webtrayctl show https://jellyfin.nathanreiner.xyz" - "$mod+Shift, S, exec, signal-desktop" + (hl.bind { mod = true; keys = [ "Escape" ]; } (hl.dsp.exec "hyprlock")) + (hl.bind { mod = true; keys = [ "Space" ]; } (hl.dsp.exec "wofi --show drun")) + (hl.bind { mod = true; keys = [ "o" ]; } (hl.dsp.exec "openproject")) + (hl.bind { mod = true; keys = [ "v" ]; } (hl.dsp.exec "openproject -e nvim")) + (hl.bind { mod = true; keys = [ "b" ]; } (hl.dsp.exec "bluemenu")) + (hl.bind { mod = true; keys = [ "F1" ]; } (hl.dsp.exec "bluemenu")) + (hl.bind { mod = true; keys = [ "s" ]; } (hl.dsp.exec "sshconnect")) - ", Print, exec, grimshot copy area" + (hl.bind { mod = true; shift = true; keys = [ "Space" ]; } (hl.dsp.exec "wofi --show run")) - "$mod, h, movefocus, l" - "$mod, l, movefocus, r" - "$mod, k, movefocus, u" - "$mod, j, movefocus, d" + (hl.bind { mod = true; shift = true; keys = [ "Return" ]; } (hl.dsp.exec "alacritty")) + (hl.bind { mod = true; shift = true; keys = [ "b" ]; } (hl.dsp.exec "firefox")) + (hl.bind { mod = true; shift = true; keys = [ "p" ]; } (hl.dsp.exec "wofi-pass")) + (hl.bind { mod = true; shift = true; keys = [ "o" ]; } (hl.dsp.exec "wofi-pass otp")) + (hl.bind { mod = true; shift = true; keys = [ "e" ]; } (hl.dsp.exec "webtrayctl show https://chat.nathanreiner.xyz")) + (hl.bind { mod = true; shift = true; keys = [ "m" ]; } (hl.dsp.exec "webtrayctl show https://jellyfin.nathanreiner.xyz")) + (hl.bind { mod = true; shift = true; keys = [ "s" ]; } (hl.dsp.exec "signal-desktop")) - "$mod, f, fullscreen" - "$mod, Return, layoutmsg, swapwithmaster master" - "$mod, i, layoutmsg, addmaster" - "$mod, d, layoutmsg, removemaster" + (hl.bind { mod = true; shift = false; keys = [ "period" ]; flags = { repeating = true; }; } (hl.dsp.window.resize { x = 20; y = 0; relative = true; })) + (hl.bind { mod = true; shift = false; keys = [ "comma" ]; flags = { repeating = true; }; } (hl.dsp.window.resize { x = -20; y = 0; relative = true; })) + (hl.bind { mod = true; shift = true; keys = [ "period" ]; flags = { repeating = true; }; } (hl.dsp.window.resize { x = 0; y = 20; relative = true; })) + (hl.bind { mod = true; shift = true; keys = [ "comma" ]; flags = { repeating = true; }; } (hl.dsp.window.resize { x = 0; y = -20; relative = true; })) - "$mod+Shift, h, movewindow, l" - "$mod+Shift, l, movewindow, r" - "$mod+Shift, k, movewindow, u" - "$mod+Shift, j, movewindow, d" + (hl.bind { keys = [ "Print" ]; } (hl.dsp.exec "grimshot copy area")) + (hl.bind { keys = [ "XF86AudioMute" ]; flags = { repeating = true; }; } (hl.dsp.exec "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle")) + (hl.bind { keys = [ "XF86AudioRaiseVolume" ]; flags = { repeating = true; }; } (hl.dsp.exec "wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+")) + (hl.bind { keys = [ "XF86AudioLowerVolume" ]; flags = { repeating = true; }; } (hl.dsp.exec "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-")) + (hl.bind { keys = [ "XF86AudioPlay" ]; flags = { repeating = true; }; } (hl.dsp.exec "playerctl play-pause")) + (hl.bind { keys = [ "XF86MonBrightnessDown" ]; flags = { repeating = true; }; } (hl.dsp.exec "brightnessctl set 10%-")) + (hl.bind { keys = [ "XF86MonBrightnessUp" ]; flags = { repeating = true; }; } (hl.dsp.exec "brightnessctl set +10%")) - "$mod, 1, split:workspace, 1" - "$mod, 2, split:workspace, 2" - "$mod, 3, split:workspace, 3" - "$mod, 4, split:workspace, 4" - "$mod, 5, split:workspace, 5" - "$mod, 6, split:workspace, 6" - "$mod, 7, split:workspace, 7" - "$mod, 8, split:workspace, 8" - "$mod, 9, split:workspace, 9" - "$mod, 0, split:workspace, 10" - - "$mod+Shift, 1, split:movetoworkspacesilent, 1" - "$mod+Shift, 2, split:movetoworkspacesilent, 2" - "$mod+Shift, 3, split:movetoworkspacesilent, 3" - "$mod+Shift, 4, split:movetoworkspacesilent, 4" - "$mod+Shift, 5, split:movetoworkspacesilent, 5" - "$mod+Shift, 6, split:movetoworkspacesilent, 6" - "$mod+Shift, 7, split:movetoworkspacesilent, 7" - "$mod+Shift, 8, split:movetoworkspacesilent, 8" - "$mod+Shift, 9, split:movetoworkspacesilent, 9" - "$mod+Shift, 0, split:movetoworkspacesilent, 10" - ]; - - binde = [ - "$mod, period, resizeactive, 20 0" - "$mod, comma, resizeactive, -20 0" - "$mod+Shift, period, resizeactive, 0 20" - "$mod+Shift, comma, resizeactive, 0 -20" - - ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" - ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+" - ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" - ", XF86AudioPlay, exec, playerctl play-pause" - - ", XF86MonBrightnessDown, exec, brightnessctl set 10%-" - ", XF86MonBrightnessUp, exec, brightnessctl set +10%" - ]; - - bindm = [ - "$mod, mouse:272, movewindow" + (hl.bind { mod = true; keys = [ "mouse:272" ]; flags = { mouse = true; }; } (hl.dsp.window.drag)) ]; - general = { - gaps_in = 5; - gaps_out = 5; - layout = "master"; - border_size = 1; - "col.active_border" = "rgba(3c3836ff)"; - "col.inactive_border" = "rgba(3c3836ff)"; - }; - - decoration = { - rounding = 4; - shadow = { - enabled = true; - range = true; - render_power = 4; - }; - }; - - animations = { + animation = [ { enabled = true; - animation = [ - "windows, 1, 2, default" - "layers, 1, 2, default" - "border, 1, 2, default" - "borderangle, 1, 2, default" - "fade, 1, 2, default" - "workspaces, 1, 2, default" - ]; - }; - - dwindle = { - pseudotile = true; - preserve_split = true; - }; + speed = 1; + leaf = "global"; + bezier = "default"; + } ]; - master = { - new_on_top = true; - new_status = "master"; - }; - - input = { - kb_layout = "us,ch"; - kb_options = "caps:escape,grp:alt_space_toggle"; + config = { + general = { + gaps_in = 5; + gaps_out = 5; + layout = "scrolling"; + border_size = 1; + "col.active_border" = "rgba(665c54ff)"; + "col.inactive_border" = "rgba(3c3836ff)"; + }; - touchpad = { - natural_scroll = true; - clickfinger_behavior = true; + decoration = { + rounding = 4; + shadow = { + enabled = true; + range = true; + render_power = 4; + }; }; - tablet = { - output = "DP-3"; + misc = { + disable_hyprland_logo = true; + disable_splash_rendering = true; + enable_swallow = false; + swallow_regex = "^(Alacritty)$"; + animate_manual_resizes = true; }; - }; - misc = { - disable_hyprland_logo = true; - disable_splash_rendering = true; - enable_swallow = false; - swallow_regex = "^(Alacritty)$"; - animate_manual_resizes = true; - }; + input = { + kb_layout = "us,ch"; + kb_options = "caps:escape,grp:alt_space_toggle"; - windowrule = [ - "pin,class:^(Hyprland::WinClass::Floating)$" - "float,class:^(Hyprland::WinClass::Floating)$" - "center,class:^(Hyprland::WinClass::Floating)$" + touchpad = { + natural_scroll = true; + clickfinger_behavior = true; + disable_while_typing = true; + }; - # KDE Connect Presentation - "opacity 1, title: KDE Connect Daemon" - "noblur, title: KDE Connect Daemon" - "noborder, title: KDE Connect Daemon" - "noshadow, title: KDE Connect Daemon" - "noanim, title: KDE Connect Daemon" - "nofocus, title: KDE Connect Daemon" - "suppressevent fullscreen, title: KDE Connect Daemon" - "float, title: KDE Connect Daemon" - "pin, title: KDE Connect Daemon" - "move 0 0, title: KDE Connect Daemon" - "size 1920 1080, title: KDE Connect Daemon" + tablet = { + output = "DP-3"; + }; - # Waydroid - "float, size 500 900, class:^(waydroid\\..*)$" - "float, size 500 900, class:^(Waydroid)$" + }; - # Nextcloud - "float, move 100%-500 20, size 500 800, noborder, noblur, xray, pin, class:^(com.nextcloud\\..*)$, title:^(Nextcloud)$" - ]; + master = { + new_on_top = true; + new_status = "master"; + }; - ecosystem = { - no_update_news = true; + scrolling = { + direction = "down"; + explicit_column_widths = "0.8, 1.0"; + column_width = 0.8; + }; }; - exec-once = [ - "signal-desktop" - "kdeconnect-indicator" + on = [ + (hl.on.start [ + (hl.dsp.exec "signal-desktop") + (hl.dsp.exec "kdeconnect-indicator") + ]) ]; }; } diff --git a/common/home/hyprland/hl.nix b/common/home/hyprland/hl.nix new file mode 100644 index 0000000..fb2565d --- /dev/null +++ b/common/home/hyprland/hl.nix @@ -0,0 +1,38 @@ +{ lib }: let + Lua = lib.generators.mkLuaInline; + toLua = lib.generators.toLua; + join = builtins.concatStringsSep; + call = name: opts: (Lua "${name}(${if opts == null then "" else (toLua {} opts)})"); +in +{ + bind = { mod ? false, shift ? false, keys, flags ? null }: lua: { + _args = [ + (Lua ( + (if mod then "mod .. ' + " else "'") + + (if shift then "SHIFT + " else "") + + (join " + " keys) + "'") + ) + lua + flags + ]; + }; + on.start = luas: { + _args = [ + "hyprland.start" + (Lua "function()${join ";" (map (l: l.expr) luas)}end") + ]; + }; + dsp = { + exec = call "hl.dsp.exec_cmd"; + exit = call "hl.dsp.exit" null; + focus = call "hl.dsp.focus"; + layout = call "hl.dsp.layout"; + window = { + drag = call "hl.dsp.window.drag" null; + move = call "hl.dsp.window.move"; + close = call "hl.dsp.window.close" null; + fullscreen = call "hl.dsp.window.fullscreen" null; + resize = call "hl.dsp.window.resize"; + }; + }; +} diff --git a/common/home/programs/waybar/default.nix b/common/home/programs/waybar/default.nix index 5cdf011..8415b02 100644 --- a/common/home/programs/waybar/default.nix +++ b/common/home/programs/waybar/default.nix @@ -9,52 +9,19 @@ height = 20; outputs = "*"; spacing = 0; - modules-left = [ "hyprland/workspaces" ]; - modules-center = [ ]; - modules-right = [ + modules-left = [ "pulseaudio" "bluetooth" "hyprland/language" "battery" + ]; + modules-center = [ + "clock" + ]; + modules-right = [ "tray" ]; - "hyprland/workspaces" = { - format = "{icon}"; - format-icons = { - "1" = "α"; - "2" = "β"; - "3" = "γ"; - "4" = "δ"; - "5" = "ε"; - "6" = "ζ"; - "7" = "η"; - "8" = "θ"; - "9" = "ι"; - "10" = "κ"; - "11" = "α"; - "12" = "β"; - "13" = "γ"; - "14" = "δ"; - "15" = "ε"; - "16" = "ζ"; - "17" = "η"; - "18" = "θ"; - "19" = "ι"; - "20" = "κ"; - "21" = "α"; - "22" = "β"; - "23" = "γ"; - "24" = "δ"; - "25" = "ε"; - "26" = "ζ"; - "27" = "η"; - "28" = "θ"; - "29" = "ι"; - "30" = "κ"; - }; - all-outputs = false; - }; "hyprland/window" = { separate-outputs = true; diff --git a/common/home/programs/waybar/style.css b/common/home/programs/waybar/style.css index de8f3d4..1d646c0 100644 --- a/common/home/programs/waybar/style.css +++ b/common/home/programs/waybar/style.css @@ -7,57 +7,19 @@ window { color: #ebdbb2; } -#language { +#language, +#pulseaudio, +#bluetooth, +#battery, +#clock { font-size: 12px; - padding-right: 10px; -} - -#pulseaudio { - font-size: 12px; -} - -#bluetooth { - padding-left: 10px; - padding-right: 10px; - font-size: 12px; -} - -#workspaces { - padding: 5px; - background: #252525; - border-radius: 5px; -} - -#workspaces button { - padding: 0px; - border-radius: 3px; - min-width: 20px; - min-height: 20px; - border: none; - font-size: 12px; -} - -#workspaces button.active { - background: #504945; -} - -#workspaces button:hover { - background: #3c3836; - padding: 0px; - border: none; -} - -#workspaces button.active:hover { - background: #504945; - padding: 0px; + margin-left: 5px; + margin-right: 5px; } #battery { background: #458588; color: #282828; - margin-right: 5px; - padding-left: 5px; - padding-right: 5px; } #battery.charging { @@ -72,17 +34,23 @@ window { background: #fb4934; } -.modules-left { - margin: 5px; - margin-bottom: 0px; - border-radius: 5px; +.modules-center, .modules-right, .modules-left { + padding: 5px; + margin: 0px; + background: #3c3836; +} + +.modules-center { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; } .modules-right { - padding-left: 10px; - padding-right: 10px; - background: #3c3836; - border-radius: 5px; - margin: 5px; - margin-bottom: 0px; + border-bottom-left-radius: 5px; + padding-right: 8px; + padding-left: 8px; +} + +.modules-left { + border-bottom-right-radius: 5px; } @@ -108,11 +108,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1780453794, - "narHash": "sha256-bXMRa9VTsHSPXL4Cw8R6JJLQeY3Y/IP4+YJCYVmQ7FY=", + "lastModified": 1780734595, + "narHash": "sha256-DmTfP92QFYRLOGXlMIE54MAgxSJjDWocl3gRNOu72Os=", "owner": "nixos", "repo": "nixpkgs", - "rev": "6b316287bae2ee04c9b93c8c858d930fd07d7338", + "rev": "9b696460ac78b5ccfc17c854d8c976f20456e943", "type": "github" }, "original": { @@ -177,11 +177,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1780766315, - "narHash": "sha256-KeuY7VKvH1Bq7mrhaxCDVMlGnDlXRbmZCasG+ufee1c=", + "lastModified": 1780850614, + "narHash": "sha256-WA4wFf6Kp0uriYQQrGM8n7N+K2GfE8e6Yi1kl0QEV5k=", "owner": "nix-community", "repo": "nixvim", - "rev": "ef82d28845422339c4ca1d8ed7b7034b857f416d", + "rev": "ded903229b3f91f462449d2a2dbed9ab4fc1ec20", "type": "github" }, "original": { diff --git a/hosts/workstation/default.nix b/hosts/workstation/default.nix index 69ff662..028182b 100644 --- a/hosts/workstation/default.nix +++ b/hosts/workstation/default.nix @@ -38,21 +38,21 @@ DP-2 = { resolution = "preferred"; - position = "auto"; + position = "1920x0"; scale = 1; bar.enable = true; }; DP-3 = { resolution = "preferred"; - position = "auto"; + position = "0x0"; scale = 1; bar.enable = true; }; HDMA-A-1 = { resolution = "preferred"; - position = "auto"; + position = "3840x0"; scale = 1; bar.enable = true; }; diff --git a/modules/hyprland/monitor.nix b/modules/hyprland/monitor.nix index ef3f227..f9d951e 100644 --- a/modules/hyprland/monitor.nix +++ b/modules/hyprland/monitor.nix @@ -5,88 +5,81 @@ in { imports = [ ../waybar ]; - options.hyprland.monitors = - with lib; - mkOption { + 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; - }; - mirror = mkOption { - description = "Mirror Monitor"; - type = types.submodule { - options = { - enable = mkOption { - description = "Enable Mirroring"; - type = types.bool; - default = false; - }; - monitor = mkOption { - description = "Mirror Monitor Name"; - type = types.str; - default = ""; - }; - }; - }; - default = { enable = false; }; - }; - transform = mkOption { - description = "Hyprland Monitor Transform"; - type = types.submodule { options = { - flipped = mkOption { - description = "Hyprland Flip Monitor"; - type = types.bool; - default = false; + resolution = mkOption { + description = "Monitor Resolution"; + type = types.strMatching "[0-9]+x[0-9]+|preferred"; + default = "preferred"; }; - rotation = mkOption { - description = "Hyprland Monitor Rotation"; - type = types.enum [ - 0 - 90 - 180 - 270 - ]; - default = 0; + position = mkOption { + description = "Monitor Position"; + type = types.strMatching "-?[0-9]+x-?[0-9]+|auto"; + default = "auto"; }; - }; - }; - 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; + scale = mkOption { + description = "Monitor Scale"; + type = types.numbers.positive; + default = 1; + }; + mirror = mkOption { + description = "Mirror Monitor"; + type = types.submodule { + options = { + enable = mkOption { + description = "Enable Mirroring"; + type = types.bool; + default = false; + }; + monitor = mkOption { + description = "Mirror Monitor Name"; + type = types.str; + default = ""; + }; + }; + }; + default = { enable = false; }; + }; + 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 = { - enable = false; - }; - }; - }; } ); default = { @@ -98,13 +91,13 @@ in 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))}" - + (if value.mirror.enable then ",mirror," + value.mirror.monitor else "") + name: value: { + output = (if name == "default" then "" else name); + mode = value.resolution; + scale = value.scale; + transform = ((value.transform.rotation / 90) + (if value.transform.flipped then 4 else 0)); + position = value.position; + } ) cfg; |