diff --git a/modules/hm/desktop/mango.nix b/modules/hm/desktop/mango.nix index 5843311..a5d2c87 100644 --- a/modules/hm/desktop/mango.nix +++ b/modules/hm/desktop/mango.nix @@ -1,253 +1,256 @@ { inputs, ... }: { flake.modules.homeManager.desktop = - { pkgs, ... }: + { + config, + pkgs, + lib, + ... + }: + with lib; + let + cfg = config.tnix.desktop.mangowm; + in { imports = [ inputs.mango.hmModules.mango ]; - wayland.windowManager.mango = { - enable = true; - settings = { - # Monitors - monitorrule = [ - "name:DP-2, width:1440, height:2560, refresh:144, x:0, y:0, vrr:0, rr:1" - "name:DP-3, width:2560, height:1440, refresh:144, x:1440, y:0, vrr:0" - "name:DP-1, width:1080, height:1920, refresh:144, x:4000, y:0, vrr:0, rr:3" - ]; + options.tnix.desktop.mangowm = { + enable = mkEnableOption "Enable MangoWM"; - focus_cross_monitor = 1; - exchange_cross_monitor = 1; - drag_tile_to_tile = 1; + monitorRule = mkOption { + type = with types; listOf str; + default = [ ]; + }; - # Keyboard - repeat_rate = 25; - repeat_delay = 600; - numlockon = 0; - xkb_rules_layout = "us"; - - # Trackpad - disable_trackpad = 0; - tap_to_click = 1; - tap_and_drag = 1; - drag_lock = 1; - trackpad_natural_scrolling = 1; - disable_while_typing = 1; - left_handed = 0; - middle_button_emulation = 0; - swipe_min_threshold = 1; - - # Mouse - mouse_natural_scrolling = 0; - mouse_accel_profile = 0; - - # Theme - border_radius = 8; - no_radius_when_single = 0; - focused_opacity = 0.9; - unfocused_opacity = 0.9; - - # Scroller Layout Setting - scroller_structs = 0; - scroller_default_proportion = 0.5; - scroller_ignore_proportion_single = 0; - scroller_default_proportion_single = 1.0; - - # Master-Stack Layout Setting - new_is_master = 0; - default_mfact = 0.5; - default_nmaster = 1; - smartgaps = 0; - - # Overview Setting - hotarea_size = 10; - enable_hotarea = 1; - ov_tab_mode = 0; - overviewgappi = 15; - overviewgappo = 15; - - # layouts - tagrule = [ - "id:1, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" - "id:2, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" - "id:3, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" - "id:4, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" - "id:5, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" - - "id:1, layout_name:tile, monitor_name:DP-3, no_hide:1" - "id:2, layout_name:tile, monitor_name:DP-3, no_hide:1" - "id:3, layout_name:tile, monitor_name:DP-3, no_hide:1" - "id:4, layout_name:tile, monitor_name:DP-3, no_hide:1" - "id:5, layout_name:tile, monitor_name:DP-3, no_hide:1" - - "id:1, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" - "id:2, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" - "id:3, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" - "id:4, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" - "id:5, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" - ]; - - # Keybindings - mousebind = [ - "SUPER, btn_left, moveresize, curmove" - "SUPER, btn_right, moveresize, curresize" - ]; - - gesturebind = [ - "none, right, 3, viewtoleft_have_client" - "none, up, 3, toggleoverview" - "none, down, 3, toggleoverview" - ]; - - bind = [ - # apps - "SUPER, Return, spawn, wezterm" - "SUPER, Space, spawn, vicinae toggle" - "SUPER, D, spawn, vesktop" - "SUPER, T, spawn, Telegram" - "SUPER, B, spawn, brave" - "SUPER, V, spawn, vicinae vicinae://extensions/vicinae/clipboard/history" - "SUPER+SHIFT, W, spawn, vicinae vicinae://extensions/sovereign/awww-switcher/wpgrid" - - # WM - "SUPER, Q, killclient" - "SUPER+SHIFT, R, reload_config" - "SUPER+SHIFT, F, togglefullscreen" - "SUPER+SHIFT, Space, togglefloating" - "SUPER+SHIFT, Space, centerwin" - - "ALT, Tab, toggleoverview" - "ALT+SHIFT, minus, incgaps, -1" - "ALT+SHIFT, equal, incgaps, 1" - "ALT+SHIFT, R, togglegaps" - "SUPER+SHIFT, P, toggleglobal" - - # switch layout - "SUPER+SHIFT, H, setlayout, tile" - "SUPER+SHIFT, V, setlayout, vertical_tile" - "SUPER+SHIFT, S, setlayout, scroller" - - # resize client - "SUPER+CTRL, Up, resizewin, +0, -50" - "SUPER+CTRL, Down, resizewin, +0, +50" - "SUPER+CTRL, Left, resizewin, -50, +0" - "SUPER+CTRL, Right, resizewin, +50, +0" - "SUPER+CTRL, Equal, setoption, default_mfact, 0.5" - - # swap client - "SUPER+SHIFT, Up, exchange_client, up" - "SUPER+SHIFT, Down, exchange_client, down" - "SUPER+SHIFT, Left, exchange_client, left" - "SUPER+SHIFT, Right, exchange_client, right" - - # switch client focus - "SUPER, Tab, focusstack, next" - "SUPER, Left, focusdir, left" - "SUPER, Right, focusdir, right" - "SUPER, Up, focusdir, up" - "SUPER, Down, focusdir, down" - - # switch view - "SUPER, 1, view, 1, 1" - "SUPER, 2, view, 2, 1" - "SUPER, 3, view, 3, 1" - "SUPER, 4, view, 4, 1" - "SUPER, 5, view, 5, 1" - - # move client to the tag with focus - "SUPER+SHIFT, 1, tagsilent, 1, 1" - "SUPER+SHIFT, 2, tagsilent, 2, 1" - "SUPER+SHIFT, 3, tagsilent, 3, 1" - "SUPER+SHIFT, 4, tagsilent, 4, 1" - "SUPER+SHIFT, 5, tagsilent, 5, 1" - - # move client to the tag without focus - "SUPER+ALT, 1, tag, 1, 1" - "SUPER+ALT, 2, tag, 2, 1" - "SUPER+ALT, 3, tag, 3, 1" - "SUPER+ALT, 4, tag, 4, 1" - "SUPER+ALT, 5, tag, 5, 1" - ]; - - # Window effect - blur = 1; - blur_layer = 0; - blur_optimized = 1; - blur_params_num_passes = 2; - blur_params_radius = 5; - blur_params_noise = 0.02; - blur_params_brightness = 0.9; - blur_params_contrast = 0.9; - blur_params_saturation = 1.2; - - shadows = 1; - layer_shadows = 0; - shadow_only_floating = 1; - shadows_size = 10; - shadows_blur = 15; - shadows_position_x = 0; - shadows_position_y = 0; - shadowscolor = "0x000000ff"; - - # Animation - animations = 1; - layer_animations = 1; - animation_type_open = "slide"; - animation_type_close = "fade"; - animation_fade_in = 1; - animation_fade_out = 1; - tag_animation_direction = 0; - zoom_initial_ratio = 0.3; - zoom_end_ratio = 0.8; - fadein_begin_opacity = 0.5; - fadeout_begin_opacity = 0.8; - - animation_duration_move = 100; - animation_duration_open = 100; - animation_duration_close = 100; - animation_duration_tag = 200; - animation_duration_focus = 0; - - animation_curve_open = "0.46, 1.0, 0.29, 1"; - animation_curve_move = "0.46, 1.0, 0.29, 1"; - animation_curve_tag = "0.46, 1.0, 0.29, 1"; - animation_curve_close = "0.08, 0.92, 0, 1"; - animation_curve_focus = "0.46, 1.0, 0.29, 1"; - animation_curve_opafadeout = "0.5, 0.5, 0.5, 0.5"; - animation_curve_opafadein = "0.46, 1.0, 0.29, 1"; - - # Appearance - borderpx = 0; - gappih = 10; - gappiv = 10; - gappoh = 10; - gappov = 10; - - rootcolor = "0x201b14ff"; - bordercolor = "0x444444ff"; - focuscolor = "0xc9b890ff"; - maximizescreencolor = "0x89aa61ff"; - urgentcolor = "0xad401fff"; - scratchpadcolor = "0x516c93ff"; - globalcolor = "0xb153a7ff"; - overlaycolor = "0x14a57cff"; - - # Misc - syncobj_enable = 1; - - exec-once = [ - "dbus-update-activation-environment --systemd --all; systemctl --user reset-failed && systemctl --user start mango-session.target" - "awww-daemon" - "dms run" - ]; + tagRule = mkOption { + type = with types; listOf str; + default = [ ]; }; }; - home.packages = with pkgs; [ - quickshell - dms-shell - dgop - ]; + config = mkIf cfg.enable { + wayland.windowManager.mango = { + enable = true; + settings = { + # Monitors + monitorrule = cfg.monitorRule; + + focus_cross_monitor = 1; + exchange_cross_monitor = 1; + drag_tile_to_tile = 1; + + # Keyboard + repeat_rate = 25; + repeat_delay = 600; + numlockon = 0; + xkb_rules_layout = "us"; + + # Trackpad + disable_trackpad = 0; + tap_to_click = 1; + tap_and_drag = 1; + drag_lock = 1; + trackpad_natural_scrolling = 1; + disable_while_typing = 1; + left_handed = 0; + middle_button_emulation = 0; + swipe_min_threshold = 1; + + # Mouse + mouse_natural_scrolling = 0; + mouse_accel_profile = 0; + + # Theme + border_radius = 8; + no_radius_when_single = 0; + focused_opacity = 0.9; + unfocused_opacity = 0.9; + + # Scroller Layout Setting + scroller_structs = 0; + scroller_default_proportion = 0.5; + scroller_ignore_proportion_single = 0; + scroller_default_proportion_single = 1.0; + + # Master-Stack Layout Setting + new_is_master = 0; + default_mfact = 0.5; + default_nmaster = 1; + smartgaps = 0; + + # Overview Setting + hotarea_size = 10; + enable_hotarea = 1; + ov_tab_mode = 0; + overviewgappi = 15; + overviewgappo = 15; + + # layouts + tagrule = cfg.tagRule; + + # Keybindings + mousebind = [ + "SUPER, btn_left, moveresize, curmove" + "SUPER, btn_right, moveresize, curresize" + ]; + + gesturebind = [ + "none, right, 3, viewtoleft_have_client" + "none, up, 3, toggleoverview" + "none, down, 3, toggleoverview" + ]; + + bind = [ + # apps + "SUPER, Return, spawn, wezterm" + "SUPER, Space, spawn, vicinae toggle" + "SUPER, D, spawn, vesktop" + "SUPER, T, spawn, Telegram" + "SUPER, B, spawn, brave" + "SUPER, V, spawn, vicinae vicinae://extensions/vicinae/clipboard/history" + "SUPER+SHIFT, W, spawn, vicinae vicinae://extensions/sovereign/awww-switcher/wpgrid" + + # WM + "SUPER, Q, killclient" + "SUPER+SHIFT, R, reload_config" + "SUPER+SHIFT, F, togglefullscreen" + "SUPER+SHIFT, Space, togglefloating" + "SUPER+SHIFT, Space, centerwin" + + "ALT, Tab, toggleoverview" + "ALT+SHIFT, minus, incgaps, -1" + "ALT+SHIFT, equal, incgaps, 1" + "ALT+SHIFT, R, togglegaps" + "SUPER+SHIFT, P, toggleglobal" + + # switch layout + "SUPER+SHIFT, H, setlayout, tile" + "SUPER+SHIFT, V, setlayout, vertical_tile" + "SUPER+SHIFT, S, setlayout, scroller" + + # resize client + "SUPER+CTRL, Up, resizewin, +0, -50" + "SUPER+CTRL, Down, resizewin, +0, +50" + "SUPER+CTRL, Left, resizewin, -50, +0" + "SUPER+CTRL, Right, resizewin, +50, +0" + "SUPER+CTRL, Equal, setoption, default_mfact, 0.5" + + # swap client + "SUPER+SHIFT, Up, exchange_client, up" + "SUPER+SHIFT, Down, exchange_client, down" + "SUPER+SHIFT, Left, exchange_client, left" + "SUPER+SHIFT, Right, exchange_client, right" + + # switch client focus + "SUPER, Tab, focusstack, next" + "SUPER, Left, focusdir, left" + "SUPER, Right, focusdir, right" + "SUPER, Up, focusdir, up" + "SUPER, Down, focusdir, down" + + # switch view + "SUPER, 1, view, 1, 1" + "SUPER, 2, view, 2, 1" + "SUPER, 3, view, 3, 1" + "SUPER, 4, view, 4, 1" + "SUPER, 5, view, 5, 1" + + # move client to the tag with focus + "SUPER+SHIFT, 1, tagsilent, 1, 1" + "SUPER+SHIFT, 2, tagsilent, 2, 1" + "SUPER+SHIFT, 3, tagsilent, 3, 1" + "SUPER+SHIFT, 4, tagsilent, 4, 1" + "SUPER+SHIFT, 5, tagsilent, 5, 1" + + # move client to the tag without focus + "SUPER+ALT, 1, tag, 1, 1" + "SUPER+ALT, 2, tag, 2, 1" + "SUPER+ALT, 3, tag, 3, 1" + "SUPER+ALT, 4, tag, 4, 1" + "SUPER+ALT, 5, tag, 5, 1" + ]; + + # Window effect + blur = 1; + blur_layer = 0; + blur_optimized = 1; + blur_params_num_passes = 2; + blur_params_radius = 5; + blur_params_noise = 0.02; + blur_params_brightness = 0.9; + blur_params_contrast = 0.9; + blur_params_saturation = 1.2; + + shadows = 1; + layer_shadows = 0; + shadow_only_floating = 1; + shadows_size = 10; + shadows_blur = 15; + shadows_position_x = 0; + shadows_position_y = 0; + shadowscolor = "0x000000ff"; + + # Animation + animations = 1; + layer_animations = 1; + animation_type_open = "slide"; + animation_type_close = "fade"; + animation_fade_in = 1; + animation_fade_out = 1; + tag_animation_direction = 0; + zoom_initial_ratio = 0.3; + zoom_end_ratio = 0.8; + fadein_begin_opacity = 0.5; + fadeout_begin_opacity = 0.8; + + animation_duration_move = 100; + animation_duration_open = 100; + animation_duration_close = 100; + animation_duration_tag = 200; + animation_duration_focus = 0; + + animation_curve_open = "0.46, 1.0, 0.29, 1"; + animation_curve_move = "0.46, 1.0, 0.29, 1"; + animation_curve_tag = "0.46, 1.0, 0.29, 1"; + animation_curve_close = "0.08, 0.92, 0, 1"; + animation_curve_focus = "0.46, 1.0, 0.29, 1"; + animation_curve_opafadeout = "0.5, 0.5, 0.5, 0.5"; + animation_curve_opafadein = "0.46, 1.0, 0.29, 1"; + + # Appearance + borderpx = 0; + gappih = 10; + gappiv = 10; + gappoh = 10; + gappov = 10; + + rootcolor = "0x201b14ff"; + bordercolor = "0x444444ff"; + focuscolor = "0xc9b890ff"; + maximizescreencolor = "0x89aa61ff"; + urgentcolor = "0xad401fff"; + scratchpadcolor = "0x516c93ff"; + globalcolor = "0xb153a7ff"; + overlaycolor = "0x14a57cff"; + + # Misc + syncobj_enable = 1; + + exec-once = [ + "dbus-update-activation-environment --systemd --all; systemctl --user reset-failed && systemctl --user start mango-session.target" + "awww-daemon" + "dms run" + ]; + }; + }; + + home.packages = with pkgs; [ + quickshell + dms-shell + dgop + ]; + }; }; } diff --git a/modules/hosts/canopus/home.nix b/modules/hosts/canopus/home.nix index 71f1e2c..b6da448 100644 --- a/modules/hosts/canopus/home.nix +++ b/modules/hosts/canopus/home.nix @@ -5,12 +5,31 @@ desktop ]; - tnix.services.lan-mouse = { - enable = true; - settings = { - authorized_fingerprints = { - "f4:4b:17:61:f7:01:a4:a2:e1:c7:8c:1c:7a:f3:8b:87:14:3d:05:3d:a0:8b:cc:e7:88:d8:d8:d2:a4:c2:75:8b" = - "sirius"; + tnix = { + desktop = { + mangowm = { + enable = true; + monitorRule = [ + "name:eDP-1, width:2560, height:1440, refresh:165, x:0, y:0, vrr:1" + ]; + + tagRule = [ + "id:1, layout_name:tile" + "id:2, layout_name:tile" + "id:3, layout_name:tile" + "id:4, layout_name:tile" + "id:5, layout_name:scroller" + ]; + }; + }; + + services.lan-mouse = { + enable = true; + settings = { + authorized_fingerprints = { + "f4:4b:17:61:f7:01:a4:a2:e1:c7:8c:1c:7a:f3:8b:87:14:3d:05:3d:a0:8b:cc:e7:88:d8:d8:d2:a4:c2:75:8b" = + "sirius"; + }; }; }; }; diff --git a/modules/hosts/sirius/home.nix b/modules/hosts/sirius/home.nix index 664e29e..143d2f0 100644 --- a/modules/hosts/sirius/home.nix +++ b/modules/hosts/sirius/home.nix @@ -5,17 +5,50 @@ desktop ]; - tnix.services.lan-mouse = { - enable = true; - settings = { - clients = [ - { - position = "bottom"; - hostname = "canopus"; - activate_on_startup = true; - ips = [ "192.168.8.2" ]; - } - ]; + tnix = { + desktop = { + mangowm = { + enable = true; + monitorRule = [ + "name:DP-2, width:1440, height:2560, refresh:144, x:0, y:0, vrr:0, rr:1" + "name:DP-3, width:2560, height:1440, refresh:144, x:1440, y:0, vrr:0" + "name:DP-1, width:1080, height:1920, refresh:144, x:4000, y:0, vrr:0, rr:3" + ]; + + tagRule = [ + "id:1, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" + "id:2, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" + "id:3, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" + "id:4, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" + "id:5, layout_name:vertical_tile, monitor_name:DP-2, no_hide:1" + + "id:1, layout_name:tile, monitor_name:DP-3, no_hide:1" + "id:2, layout_name:tile, monitor_name:DP-3, no_hide:1" + "id:3, layout_name:tile, monitor_name:DP-3, no_hide:1" + "id:4, layout_name:tile, monitor_name:DP-3, no_hide:1" + "id:5, layout_name:tile, monitor_name:DP-3, no_hide:1" + + "id:1, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" + "id:2, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" + "id:3, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" + "id:4, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" + "id:5, layout_name:vertical_tile, monitor_name:DP-1, no_hide:1" + ]; + }; + }; + + services.lan-mouse = { + enable = true; + settings = { + clients = [ + { + position = "bottom"; + hostname = "canopus"; + activate_on_startup = true; + ips = [ "192.168.8.2" ]; + } + ]; + }; }; };