diff --git a/hosts/desktop/home.nix b/hosts/desktop/home.nix index d238922..233e4f0 100755 --- a/hosts/desktop/home.nix +++ b/hosts/desktop/home.nix @@ -12,7 +12,11 @@ homeFiles.enable = true; # modules/home/environment - hyprlandConfig.enable = true; + hyprlandConfig = { + enable = true; + monitorNames = [ "HDMI-A-1" "DP-1" ]; + workspaceLayout = "dualmonitor"; + }; autojumpConfig.enable = true; stylixHomeConfig.enable = true; waybarConfig.enable = true; diff --git a/hosts/laptop/home.nix b/hosts/laptop/home.nix index d75fb9e..05bc6c5 100755 --- a/hosts/laptop/home.nix +++ b/hosts/laptop/home.nix @@ -12,7 +12,11 @@ homeFiles.enable = true; # modules/home/environment - hyprlandConfig.enable = true; + hyprlandConfig = { + enable = true; + workspaceLayout = "singlemonitor"; + monitorNames = [ "eDP-1" ]; + }; autojumpConfig.enable = true; stylixHomeConfig.enable = true; waybarConfig.enable = true; diff --git a/modules/home/default.nix b/modules/home/default.nix index 8c4d62d..58b6929 100755 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -14,40 +14,4 @@ ./scripts ./files.nix ]; - - movOpts = { - # ./files - homeFiles.enable = lib.mkDefault false; - - # ./environment - hyprlandConfig.enable = lib.mkDefault false; - autojumpConfig.enable = lib.mkDefault false; - stylixHomeConfig.enable = lib.mkDefault false; - waybarConfig.enable = lib.mkDefault false; - gtkConfig.enable = lib.mkDefault false; - spicetifyConfig.enable = lib.mkDefault false; - starshipConfig.enable = lib.mkDefault false; - - # ./programs - btopConfig.enable = lib.mkDefault false; - swayncConfig.enable = lib.mkDefault false; - userPkgs.enable = lib.mkDefault false; - cavaConfig.enable = lib.mkDefault false; - ezaConfig.enable = lib.mkDefault false; - firefoxConfig.enable = lib.mkDefault false; - fuzzelConfig.enable = lib.mkDefault false; - fzfConfig.enable = lib.mkDefault false; - gitConfig.enable = lib.mkDefault false; - kittyConfig.enable = lib.mkDefault false; - yaziConfig.enable = lib.mkDefault false; - zshConfig.enable = lib.mkDefault false; - passConfig.enable = lib.mkDefault false; - batConfig.enable = lib.mkDefault false; - - # ./scripts - movScripts.enable = lib.mkDefault false; - movScripts.commandScripts.enable = lib.mkDefault false; - movScripts.hyprlandControls.enable = lib.mkDefault false; - movScripts.nixShortcuts.enable = lib.mkDefault false; - }; } diff --git a/modules/home/environment/hyprland.nix b/modules/home/environment/hyprland.nix index 721f469..fa811a3 100755 --- a/modules/home/environment/hyprland.nix +++ b/modules/home/environment/hyprland.nix @@ -1,20 +1,32 @@ -{inputs, pkgs, lib, config, self, host, ... }: let +{ inputs, pkgs, lib, config, self, host, ... }: +let desktop = host == "oganesson"; - screenshot_bind = - if desktop - then [ - "super, print, exec, grimblast copy area" - ] - else [ + screenshot_bind = if desktop then + [ "super, print, exec, grimblast copy area" ] + else + [ # My laptop does not have a printscreen button "super, insert, exec, grimblast copy area" ]; scheme = config.lib.stylix.colors; + mons = config.movOpts.hyprlandConfig.monitorNames; in { options = { - movOpts.hyprlandConfig.enable = lib.mkEnableOption "enables my hyprland config"; + movOpts.hyprlandConfig = { + enable = lib.mkEnableOption "enables my hyprland config"; + workspaceLayout = lib.mkOption { + type = lib.types.str; + default = "dualmonitor"; + }; + monitorNames = lib.mkOption { + type = lib.types.listOf lib.types.str; + # The order of the monitor names matters for the purpose of workspace assignment + # For instance, in a dual monitor setup, index 0 gets 4,5 and 6, while index 1 gets 1,2 and 3 + default = [ "DP-1" "HDMI-A-1" ]; + }; + }; }; config = lib.mkIf config.movOpts.hyprlandConfig.enable { home.packages = with pkgs; [ @@ -29,25 +41,20 @@ in { wayland direnv ]; - systemd.user.targets.hyprland-session.Unit.Wants = ["xdg-desktop-autostart.target"]; + systemd.user.targets.hyprland-session.Unit.Wants = + [ "xdg-desktop-autostart.target" ]; wayland.windowManager.hyprland = { enable = true; - xwayland = { - enable = true; - }; + xwayland = { enable = true; }; systemd.enable = true; }; wayland.windowManager.hyprland = { settings = { - monitor = - if (host == "oganesson") - then [ - "DP-1, 1920x1080@144, 1920x0, 1" - "HDMI-A-1, 1920x1080, 0x0, 1" - ] - else [ - "eDP-1, 1600x900, 0x0, 1" - ]; + monitor = if (host == "oganesson") then [ + "DP-1, 1920x1080@144, 1920x0, 1" + "HDMI-A-1, 1920x1080, 0x0, 1" + ] else + [ "eDP-1, 1600x900, 0x0, 1" ]; exec-once = [ "waybar &" @@ -62,35 +69,34 @@ in { ]; workspace = - if desktop - then [ - "1,persistent=true,monitor:HDMI-A-1" - "2,persistent=true,monitor:HDMI-A-1" - "3,persistent=true,monitor:HDMI-A-1" - "4,persistent=true,monitor:DP-1" - "5,persistent=true,monitor:DP-1" - "6,persistent=true,monitor:DP-1" - ] - else [ - "1,persistent=true,monitor:eDP-1" - "2,persistent=true,monitor:eDP-1" - "3,persistent=true,monitor:eDP-1" - "4,persistent=true,monitor:eDP-1" - ]; + if (config.movOpts.hyprlandConfig.workspaceLayout == "dualmonitor") then [ + "1,persistent=true,monitor:${builtins.elemAt mons 0}" + "2,persistent=true,monitor:${builtins.elemAt mons 0}" + "3,persistent=true,monitor:${builtins.elemAt mons 0}" + "4,persistent=true,monitor:${builtins.elemAt mons 1}" + "5,persistent=true,monitor:${builtins.elemAt mons 1}" + "6,persistent=true,monitor:${builtins.elemAt mons 1}" + ] else if (config.movOpts.hyprlandConfig.workspaceLayout == "singlemonitor") then [ + "1,persistent=true,monitor:${builtins.elemAt mons 0} " + "2,persistent=true,monitor:${builtins.elemAt mons 0}" + "3,persistent=true,monitor:${builtins.elemAt mons 0}" + "4,persistent=true,monitor:${builtins.elemAt mons 0}" + ] else if (config.movOpts.hyprlandConfig.workspaceLayout == "trimonitor") then [ + "1,persistent=true,monitor:${builtins.elemAt mons 2}" + "2,persistent=true,monitor:${builtins.elemAt mons 2}" + "3,persistent=true,monitor:${builtins.elemAt mons 1}" + "4,persistent=true,monitor:${builtins.elemAt mons 1}" + "5,persistent=true,monitor:${builtins.elemAt mons 0}" + "6,persistent=true,monitor:${builtins.elemAt mons 0}" + ] else []; env = [ "XDG_CONFIG_HOME,$HOME/.config" "XDG_DATA_HOME,$HOME/.local/share" "XDG_CACHE_HOME,$HOME/.cache" ]; - layerrule = [ - "blur,waybar" - "ignorezero,waybar" - "blur,launcher" - ]; - windowrule = [ - "opacity 0.8,nemo" - ]; + layerrule = [ "blur,waybar" "ignorezero,waybar" "blur,launcher" ]; + windowrule = [ "opacity 0.8,nemo" ]; input = { kb_layout = "us"; @@ -146,7 +152,7 @@ in { size = 2; passes = 1; brightness = 1; - contrast = 1.400; + contrast = 1.4; ignore_opacity = true; popups = true; noise = 0; @@ -189,52 +195,48 @@ in { "workspaces, 1, 4, easeOutCubic, fade" # styles: slide, slidevert, fade, slidefade, slidefadevert ]; - bind = - [ - "super, up, exec, pactl set-sink-volume @default_sink@ +10%" - "super, down, exec, pactl set-sink-volume @default_sink@ -10%" - "super, t, exec, swaync-client -t -sw" - "super, a, exec, firefox" - "super, q, exec, kitty --title Kitty" - "super shift, q, exec, [float;size 40% 30%;move onscreen cursor -50% -50%] kitty --title Kitty" - "super, c, killactive," - "super, e, exec, nemo" - "super, p, exec, [float;size 40% 25%;move onscreen cursor] [ ! -f /tmp/keyringfile ] && kitty toolbelt" - "super shift, m, exit," - "super, m, exec, fuzzel" - "super, r, exec, neovide" - "super, b, togglesplit, # dwindle" - "super, f, togglefloating" - "super, g, fullscreen" - "super, h, movefocus, l" - "super, l, movefocus, r" - "super, k, movefocus, u" - "super, j, movefocus, d" - "super shift, h, movewindow, l" - "super shift, l, movewindow, r" - "super shift, k, movewindow, u" - "super shift, j, movewindow, d" - "super, d, exec, switchmon" - "super, 1, exec, hyprctl 'dispatch workspace 1'" - "super, 2, exec, hyprctl 'dispatch workspace 2'" - "super, 3, exec, hyprctl 'dispatch workspace 3'" - "super, 4, exec, hyprctl 'dispatch workspace 4'" - "super, 5, exec, hyprctl 'dispatch workspace 5'" - "super, 6, exec, hyprctl 'dispatch workspace 6'" - "super shift, 1, movetoworkspace, 1" - "super shift, 2, movetoworkspace, 2" - "super shift, 3, movetoworkspace, 3" - "super shift, 4, movetoworkspace, 4" - "super shift, 5, movetoworkspace, 5" - "super shift, 6, movetoworkspace, 6" - "super, s, togglespecialworkspace, magic" - "super shift, s, movetoworkspace, special:magic" - ] - ++ screenshot_bind; - bindm = [ - "super, mouse:272, movewindow" - "super, mouse:273, resizewindow" - ]; + bind = [ + "super, up, exec, pactl set-sink-volume @default_sink@ +10%" + "super, down, exec, pactl set-sink-volume @default_sink@ -10%" + "super, t, exec, swaync-client -t -sw" + "super, a, exec, firefox" + "super, q, exec, kitty --title Kitty" + "super shift, q, exec, [float;size 40% 30%;move onscreen cursor -50% -50%] kitty --title Kitty" + "super, c, killactive," + "super, e, exec, nemo" + "super, p, exec, [float;size 40% 25%;move onscreen cursor] [ ! -f /tmp/keyringfile ] && kitty toolbelt" + "super shift, m, exit," + "super, m, exec, fuzzel" + "super, r, exec, neovide" + "super, b, togglesplit, # dwindle" + "super, f, togglefloating" + "super, g, fullscreen" + "super, h, movefocus, l" + "super, l, movefocus, r" + "super, k, movefocus, u" + "super, j, movefocus, d" + "super shift, h, movewindow, l" + "super shift, l, movewindow, r" + "super shift, k, movewindow, u" + "super shift, j, movewindow, d" + "super, d, exec, switchmon" + "super, 1, exec, hyprctl 'dispatch workspace 1'" + "super, 2, exec, hyprctl 'dispatch workspace 2'" + "super, 3, exec, hyprctl 'dispatch workspace 3'" + "super, 4, exec, hyprctl 'dispatch workspace 4'" + "super, 5, exec, hyprctl 'dispatch workspace 5'" + "super, 6, exec, hyprctl 'dispatch workspace 6'" + "super shift, 1, movetoworkspace, 1" + "super shift, 2, movetoworkspace, 2" + "super shift, 3, movetoworkspace, 3" + "super shift, 4, movetoworkspace, 4" + "super shift, 5, movetoworkspace, 5" + "super shift, 6, movetoworkspace, 6" + "super, s, togglespecialworkspace, magic" + "super shift, s, movetoworkspace, special:magic" + ] ++ screenshot_bind; + bindm = + [ "super, mouse:272, movewindow" "super, mouse:273, resizewindow" ]; }; }; }; diff --git a/modules/home/environment/waybar.nix b/modules/home/environment/waybar.nix index 2fa805e..1a7439c 100755 --- a/modules/home/environment/waybar.nix +++ b/modules/home/environment/waybar.nix @@ -13,14 +13,17 @@ let "6" = "六"; }; persistent-workspaces = - if desktop - then { - "HDMI-A-1" = [1 2 3]; - "DP-1" = [4 5 6]; - } - else { - "eDP-1" = [1 2 3 4]; - }; + if (config.movOpts.hyprlandConfig.workspaceLayout == "singlemonitor") then { + "${builtins.elemAt monitors 0}" = [ 1 2 3 4 ]; + } else if (config.movOpts.hyprlandConfig.workspaceLayout == "dualmonitor") then { + "${builtins.elemAt monitors 0}" = [ 1 2 3 ]; + "${builtins.elemAt monitors 1}" = [ 4 5 6 ]; + } else if (config.movOpts.hyprlandConfig.workspaceLayout == "trimonitor") then { + "${builtins.elemAt monitors 2}" = [ 1 2 ]; + "${builtins.elemAt monitors 1}" = [ 3 4 ]; + "${builtins.elemAt monitors 0}" = [ 5 6 ]; + } else {}; + }; scheme = config.lib.stylix.colors; @@ -46,15 +49,7 @@ let color6 = scheme.base0E; color7 = scheme.base0F; }; - monitors = - if desktop - then [ - "DP-1" - "HDMI-A-1" - ] - else [ - "eDP-1" - ]; + monitors = config.movOpts.hyprlandConfig.monitorNames; in { options = { movOpts.waybarConfig.enable = lib.mkEnableOption "enables my waybar configuration"; @@ -68,7 +63,7 @@ in { settings = { mainBar = { layer = "bottom"; - output = builtins.elemAt monitors 0; + output = builtins.elemAt monitors 1; position = "top"; name = "mainBar"; margin-left = 8; @@ -242,8 +237,8 @@ in { layer = "bottom"; output = if desktop - then builtins.elemAt monitors 1 - else builtins.elemAt monitors 0; + then builtins.elemAt monitors 0 + else builtins.elemAt monitors 1; position = "right"; margin-top = 8; margin-right = 5; diff --git a/modules/home/scripts/commands/vipkg.nix b/modules/home/scripts/commands/vipkg.nix index 8673ddb..39d5526 100644 --- a/modules/home/scripts/commands/vipkg.nix +++ b/modules/home/scripts/commands/vipkg.nix @@ -24,31 +24,18 @@ pkgs.writeShellApplication { [ "$numresults" -eq 0 ] && echo "$1 not found in ${nixpkgs_toplevel}/pkgs" && exit 1 if [ "$numresults" -gt 1 ]; then - # Trim the path to show only package directory and .nix file (e.g., package/default.nix) results=$(echo "$results" | awk -F"${nixpkgs_toplevel}/pkgs/" '{print $2}') file=$(echo "$results" | fzf) full_path="${nixpkgs_toplevel}/pkgs/$file" - # Check if the file contains any non-UTF-8 characters - if grep --color='auto' -P -q "[^\x00-\x7F]" "$full_path"; then - NIXD_FLAGS="--semantic-tokens=false" nvim "$full_path" - else - nvim "$full_path" - fi + nvim "$full_path" else - # Trim the path for the single result case result_path=$(echo "$results" | awk -F"${nixpkgs_toplevel}/pkgs/" '{print $2}') full_path="${nixpkgs_toplevel}/pkgs/$result_path" - - # Check if the file contains any non-UTF-8 characters - if grep --color='auto' -P -q "[^\x00-\x7F]" "$full_path"; then - NIXD_FLAGS="--semantic-tokens=false" nvim "$full_path" - else - nvim "$full_path" - fi + nvim "$full_path" fi ''; } diff --git a/modules/sys/default.nix b/modules/sys/default.nix index 565d0e0..9c346f0 100755 --- a/modules/sys/default.nix +++ b/modules/sys/default.nix @@ -13,20 +13,4 @@ ./software ./environment ]; - - movOpts = { - networkModule.enable = lib.mkDefault false; - nixSettings.enable = lib.mkDefault false; - bootLoader.enable = lib.mkDefault false; - issue.enable = lib.mkDefault false; - sddmConfig.enable = lib.mkDefault false; - stylixConfig.enable = lib.mkDefault false; - gamingPkgs.enable = lib.mkDefault false; - steamConfig.enable = lib.mkDefault false; - sysPkgs.enable = lib.mkDefault false; - sysProgs.enable = lib.mkDefault false; - sysServices.enable = lib.mkDefault false; - virtConfig.enable = lib.mkDefault false; - powerProfiles.enable = lib.mkDefault false; - }; }