diff --git a/hosts/T430/default.nix b/hosts/T430/default.nix index 0044968..060c6d5 100755 --- a/hosts/T430/default.nix +++ b/hosts/T430/default.nix @@ -8,7 +8,7 @@ gui = { enable = true; - flavour = [ "sway" ]; + flavour = [ "sway" "hyprland" ]; }; nvidia.enable = false; audio.enable = true; diff --git a/modules/default.nix b/modules/default.nix index bb7b978..08cb07e 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -8,7 +8,7 @@ flavour = mkOption { type = types.listOf types.str; default = [ "sway" ]; - example = [ "sway" "i3" ]; + example = [ "sway" "i3" "hyprland" ]; description = '' The flavour (WM) for your system to use ''; diff --git a/modules/greetd.nix b/modules/greetd.nix index 17a6768..1f34581 100644 --- a/modules/greetd.nix +++ b/modules/greetd.nix @@ -3,6 +3,7 @@ environment.pathsToLink = [ "/libexec" ]; # links /libexec from derivations to /run/current-system/sw programs.sway.enable = builtins.elem "sway" gui.flavour; + programs.hyprland.enable = builtins.elem "hyprland" gui.flavour; services.xserver.windowManager.i3.enable = builtins.elem "i3" gui.flavour; services.xserver = { @@ -16,6 +17,7 @@ etc = { "greetd/environments".text = '' sway + Hyprland ''; "greetd/kanshi-config".text = '' profile nomad { diff --git a/modules/packages.nix b/modules/packages.nix index f5eaf82..29bceeb 100644 --- a/modules/packages.nix +++ b/modules/packages.nix @@ -18,6 +18,7 @@ nvd # Nix/NixOS package version diff tool inotify-tools # a C library and a set of command-line programs providing a simple interface to inotify ghostscript # postscript interpreter (mainline version) + ventoy-full # bootable usb solution ] ++ lib.optionals (devenv.enable) [ # languages gcc13 diff --git a/modules/xdg-portal.nix b/modules/xdg-portal.nix index 463bc71..bfa353a 100644 --- a/modules/xdg-portal.nix +++ b/modules/xdg-portal.nix @@ -1,13 +1,14 @@ -{ lib, config, ... }: lib.mkIf config.bchmnn.gui.enable { +{ lib, config, pkgs, ... }: lib.mkIf config.bchmnn.gui.enable { xdg.portal = { enable = true; wlr.enable = true; # gtk portal needed to make gtk apps happy - # extraPortals = [ - # pkgs.xdg-desktop-portal-wlr - # pkgs.xdg-desktop-portal-gtk - # ]; # upper has been replaced by following config.common.default = "*"; + extraPortals = with lib; with config.bchmnn; optionals (elem "sway" gui.flavour) [ + pkgs.xdg-desktop-portal-wlr + ] ++ optionals (elem "hyprland" gui.flavour) [ + pkgs.xdg-desktop-portal-hyprland + ]; }; } diff --git a/users/gandalf/modules/gui/default.nix b/users/gandalf/modules/gui/default.nix index 085120d..36e70e1 100644 --- a/users/gandalf/modules/gui/default.nix +++ b/users/gandalf/modules/gui/default.nix @@ -6,6 +6,8 @@ ./programs ] ++ optionals (gui.enable && elem "sway" gui.flavour) [ ./sway + ] ++ optionals (gui.enable && elem "hyprland" gui.flavour) [ + ./hyprland ] ++ optionals (gui.enable && elem "i3" gui.flavour) [ ./i3 ]; diff --git a/users/gandalf/modules/gui/hyprland/default.nix b/users/gandalf/modules/gui/hyprland/default.nix new file mode 100644 index 0000000..267606a --- /dev/null +++ b/users/gandalf/modules/gui/hyprland/default.nix @@ -0,0 +1,143 @@ +{ pkgs, lib, nixosConfig, ... }: +let + common = (import ../common.nix) { pkgs = pkgs; lib = lib; }; +in +{ + imports = [ + ../sway/waybar.nix + ../sway/wofi.nix + ]; + wayland.windowManager.hyprland = { + enable = true; + enableNvidiaPatches = nixosConfig.bchmnn.nvidia.enable; + # plugins = [ hy3.packages.x86_64-linux.hy3 ]; + settings = { + "exec-once" = with pkgs; [ + "${waybar}/bin/waybar" + "${dbus}/bin/dbus-update-activation-environment --all" + "${kanshi}/bin/kanshi" + "${networkmanagerapplet}/bin/nm-applet" + "${blueman}/bin/blueman-applet" + "${udiskie}/bin/udiskie --tray" + "${swaynotificationcenter}/bin/swaync" + "${nextcloud-client}/bin/nextcloud" + "${plasma5Packages.kdeconnect-kde}/bin/kdeconnect-indicator" + "${system-config-printer}/bin/system-config-printer-applet" + "${emote}/bin/emote" + ]; + input = { + accel_profile = "flat"; + touchpad = { + natural_scroll = "true"; + scroll_factor = "0.5"; + }; + }; + general = { + border_size = "2"; + gaps_out = "5"; + gaps_in = "5"; + }; + decoration = { + rounding = "5"; + drop_shadow = "true"; + shadow_range = "10"; + shadow_render_power = "3"; # int [1-4] + shadow_offset = "0 5"; # vec2 [0, 0] + shadow_scale = "0.5"; # float [0.0-1.0] + "col.shadow" = "rgba(00000099)"; + }; + "$terminal" = "${pkgs.alacritty}/bin/alacritty"; + "$fileManager" = "${pkgs.gnome.nautilus}/bin/nautilus"; + "$menu" = "${pkgs.wofi}/bin/wofi"; + "$mod" = "SUPER"; + bind = [ + "$mod, Q, killactive," + "$mod, return, exec, $terminal" + "$mod SHIFT, Q, exit," + "$mod SHIFT, E, exec, $fileManager" + "$mod, D, togglefloating," + "$mod, space, exec, $menu" + "$mod CONTROL SHIFT, L, exec, ${pkgs.swaylock-effects}/bin/swaylock --screenshots --clock --indicator --indicator-radius 100 --indicator-thickness 7 --effect-blur 7x5 --effect-vignette 0.5:0.5 --ring-color ffffff --key-hl-color ${common.colorschemes.default._activeDark} --line-color 00000000 --inside-color 00000088 --inside-ver-color ${common.colorschemes.default._activeDark} --separator-color 00000000 --text-color ${common.colorschemes.default._activeDark} --fade-in 0.1" + "$mod SHIFT, V, exec, ${pkgs.pavucontrol}/bin/pavucontrol" + "$mod SHIFT, B, exec, ${pkgs.blueman}/bin/blueman-manager" + "$mod SHIFT, N, exec, ${pkgs.networkmanagerapplet}/bin/nm-connection-editor" + "$mod SHIFT, A, exec, ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw" + "$mod, period, exec, ${pkgs.emote}/bin/emote" + # bind = $mod, P, pseudo, # dwindle + # bind = $mod, J, togglesplit, # dwindle + + # Move focus + "$mod, H, movefocus, l" + "$mod, L, movefocus, r" + "$mod, K, movefocus, u" + "$mod, J, movefocus, d" + + "$mod, P, focusmonitor, l" + "$mod, N, focusmonitor, r" + + # Move windows + "$mod SHIFT, H, movewindow, l" + "$mod SHIFT, J, movewindow, d" + "$mod SHIFT, K, movewindow, u" + "$mod SHIFT, L, movewindow, r" + + # Switch workspaces + "$mod, 1, workspace, 1" + "$mod, 2, workspace, 2" + "$mod, 3, workspace, 3" + "$mod, 4, workspace, 4" + "$mod, 5, workspace, 5" + "$mod, 6, workspace, 6" + "$mod, 7, workspace, 7" + "$mod, 8, workspace, 8" + "$mod, 9, workspace, 9" + "$mod, 0, workspace, 10" + + # Move active window to a workspace + "$mod SHIFT, 1, movetoworkspace, 1" + "$mod SHIFT, 2, movetoworkspace, 2" + "$mod SHIFT, 3, movetoworkspace, 3" + "$mod SHIFT, 4, movetoworkspace, 4" + "$mod SHIFT, 5, movetoworkspace, 5" + "$mod SHIFT, 6, movetoworkspace, 6" + "$mod SHIFT, 7, movetoworkspace, 7" + "$mod SHIFT, 8, movetoworkspace, 8" + "$mod SHIFT, 9, movetoworkspace, 9" + "$mod SHIFT, 0, movetoworkspace, 10" + + "$mod CONTROL, J, workspace, -1" + "$mod CONTROL, K, workspace, +1" + + "$mod CONTROL SHIFT, J, movecurrentworkspacetomonitor, l" + "$mod CONTROL SHIFT, K, movecurrentworkspacetomonitor, r" + + "$mod, W, togglegroup," + + ", print, exec, ${pkgs.sway-contrib.grimshot}/bin/grimshot copy area" + ]; + binde = [ + ", XF86AudioRaiseVolume, exec, ${pkgs.wireplumber}/bin/wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+" + ", XF86AudioLowerVolume, exec, ${pkgs.wireplumber}/bin/wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-" + ", XF86AudioMute, exec, ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ", XF86AudioMicMute, exec, ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + ", XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl -q set 5%-" + ", XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl -q set 5%+" + ", XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl previous" + ", XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl next" + ", XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl play-pause" + ", XF86AudioPause, exec, ${pkgs.playerctl}/bin/playerctl play-pause" + ]; + bindm = [ + # mouse movements + "$mod, mouse:272, movewindow" + "$mod, mouse:273, resizewindow" + "$mod ALT, mouse:272, resizewindow" + ]; + }; + systemd = { + enable = true; + # extraCommands = [] + }; + xwayland.enable = true; + }; +} diff --git a/users/gandalf/modules/gui/sway/waybar.nix b/users/gandalf/modules/gui/sway/waybar.nix index 76571af..120adcb 100644 --- a/users/gandalf/modules/gui/sway/waybar.nix +++ b/users/gandalf/modules/gui/sway/waybar.nix @@ -5,12 +5,14 @@ settings.mainBar = { layer = "top"; margin = "5 5 5 5"; - modules-left = [ "sway/workspaces" "sway/window" "sway/mode" ]; + modules-left = [ "sway/workspaces" "sway/window" "sway/mode" + # "hyprland/workspaces" "hyprland/window" + ]; modules-center = [ "clock" ]; modules-right = [ "tray" "network" "pulseaudio" "custom/mem" "temperature" "backlight" "battery" ]; "sway/workspaces" = { disable-scroll = true; - persistent_workspaces = { + persistent-workspaces = { "1" = [ ]; "2" = [ ]; "3" = [ ]; @@ -24,6 +26,12 @@ "sway/mode" = { format = "{}"; }; + "hyprland/workspaces" = { + disable-scroll = true; + }; + "hyprland/window" = { + format = "{title}"; + }; clock = { timezones = [ "Europe/Berlin" ]; tooltip-format = "{:%Y %B}\n{calendar}"; @@ -201,6 +209,10 @@ color: white; } + #workspaces button.visible { + color: white; + } + #window { padding-left: 16px; padding-right: 16px;