Initial add of hyprland module
This commit is contained in:
		
							parent
							
								
									f8b7fcd71a
								
							
						
					
					
						commit
						e19b036d3f
					
				
					 5 changed files with 277 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -3,4 +3,5 @@
 | 
			
		|||
  aa.isHeadless = false;
 | 
			
		||||
  aa.windowManagers.sway.clamshell.enable = true;
 | 
			
		||||
  aa.programs.opencode.enable = true;
 | 
			
		||||
  aa.windowManagers.hyprland.enable = true;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ in
 | 
			
		|||
 | 
			
		||||
    programs.waybar = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      systemd.enable = true;
 | 
			
		||||
      # systemd.enable = true;
 | 
			
		||||
 | 
			
		||||
      style = builtins.readFile ./waybar_style.css;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +40,10 @@ in
 | 
			
		|||
          layer = "top";
 | 
			
		||||
          position = "bottom";
 | 
			
		||||
          height = 20;
 | 
			
		||||
          modules-left = [ "sway/workspaces" ];
 | 
			
		||||
          modules-left = [
 | 
			
		||||
            "sway/workspaces"
 | 
			
		||||
            "hyprland/workspaces"
 | 
			
		||||
          ];
 | 
			
		||||
          modules-center = [ "clock" ];
 | 
			
		||||
          modules-right = [
 | 
			
		||||
            "idle_inhibitor"
 | 
			
		||||
| 
						 | 
				
			
			@ -55,6 +58,22 @@ in
 | 
			
		|||
            "tray"
 | 
			
		||||
          ];
 | 
			
		||||
 | 
			
		||||
          "hyprland/workspaces" = {
 | 
			
		||||
            disable-scroll = false;
 | 
			
		||||
            all-outputs = true;
 | 
			
		||||
            format = "{icon}";
 | 
			
		||||
            format-icons = {
 | 
			
		||||
              "1" = "q";
 | 
			
		||||
              "2" = "w";
 | 
			
		||||
              "3" = "e";
 | 
			
		||||
              "4" = "r";
 | 
			
		||||
              "5" = "t";
 | 
			
		||||
              "6" = "y";
 | 
			
		||||
              "7" = "u";
 | 
			
		||||
              "8" = "i";
 | 
			
		||||
              "9" = "o";
 | 
			
		||||
            };
 | 
			
		||||
          };
 | 
			
		||||
          "sway/workspaces" = {
 | 
			
		||||
            disable-scroll = false;
 | 
			
		||||
            all-outputs = true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,6 +50,7 @@ window#waybar.hidden {
 | 
			
		|||
    background-color: rgba(0, 0, 0, 1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#workspaces button.active,
 | 
			
		||||
#workspaces button.focused {
 | 
			
		||||
    color: @yellow;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										254
									
								
								modules/home/windowManagers/hyprland/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										254
									
								
								modules/home/windowManagers/hyprland/default.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,254 @@
 | 
			
		|||
{
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  namespace,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib)
 | 
			
		||||
    mkEnableOption
 | 
			
		||||
    mkOption
 | 
			
		||||
    mkIf
 | 
			
		||||
    types
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
  cfg = config.${namespace}.windowManagers.hyprland;
 | 
			
		||||
  left = "h";
 | 
			
		||||
  right = "l";
 | 
			
		||||
  up = "k";
 | 
			
		||||
  down = "j";
 | 
			
		||||
  modifier = "SUPER";
 | 
			
		||||
 | 
			
		||||
  menu = "${pkgs.fuzzel}/bin/fuzzel";
 | 
			
		||||
  emoji_picker = "${pkgs.bemoji}/bin/bemoji -t";
 | 
			
		||||
  terminal = "${pkgs.kitty}/bin/kitty";
 | 
			
		||||
 | 
			
		||||
  generate_grim_command = target: ''
 | 
			
		||||
    exec mkdir -p ~/screenshots \
 | 
			
		||||
    && ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" \
 | 
			
		||||
    ~/screenshots/"$(date -u --iso-8601=seconds)".png && \
 | 
			
		||||
    ${pkgs.libnotify}/bin/notify-send "Screenshot saved"
 | 
			
		||||
  '';
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.${namespace}.windowManagers.hyprland = {
 | 
			
		||||
    enable = mkEnableOption "Hyprland";
 | 
			
		||||
 | 
			
		||||
    wallpaperPath = mkOption {
 | 
			
		||||
      type = types.str;
 | 
			
		||||
      default = "hyprland/wallpaper.jpg";
 | 
			
		||||
      description = ''
 | 
			
		||||
        Path to wallpaper, relative to xdg.dataHome
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    monitor = mkOption {
 | 
			
		||||
      type = types.listOf types.str;
 | 
			
		||||
      default = [
 | 
			
		||||
        "eDP-1,preferred,auto,1.6"
 | 
			
		||||
        ",preferred,auto,1"
 | 
			
		||||
      ];
 | 
			
		||||
      description = ''
 | 
			
		||||
        Monitor configuration for Hyprland
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    ${namespace} = {
 | 
			
		||||
      fonts.enable = true;
 | 
			
		||||
      programs = {
 | 
			
		||||
        kitty.enable = true;
 | 
			
		||||
        fuzzel.enable = true;
 | 
			
		||||
        waybar.enable = true;
 | 
			
		||||
      };
 | 
			
		||||
      services = {
 | 
			
		||||
        gammastep.enable = true;
 | 
			
		||||
        playerctld.enable = true;
 | 
			
		||||
        swaync.enable = true;
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    home.packages = with pkgs; [
 | 
			
		||||
      grim
 | 
			
		||||
      slurp
 | 
			
		||||
      wl-clipboard
 | 
			
		||||
      wtype
 | 
			
		||||
      xdg-utils
 | 
			
		||||
      libnotify
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    catppuccin.cursors = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      accent = "dark";
 | 
			
		||||
    };
 | 
			
		||||
    catppuccin.gtk.icon.enable = true;
 | 
			
		||||
    catppuccin.kvantum = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      apply = true;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    xdg.dataFile.${cfg.wallpaperPath}.source = ./wallpaper.jpg;
 | 
			
		||||
 | 
			
		||||
    catppuccin.hyprland.enable = true;
 | 
			
		||||
    wayland.windowManager.hyprland = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      systemd.variables = [ "--all" ];
 | 
			
		||||
 | 
			
		||||
      settings = {
 | 
			
		||||
        "$mod" = modifier;
 | 
			
		||||
 | 
			
		||||
        # Monitor configuration
 | 
			
		||||
        monitor = cfg.monitor;
 | 
			
		||||
 | 
			
		||||
        # General settings
 | 
			
		||||
        general = {
 | 
			
		||||
          gaps_in = 5;
 | 
			
		||||
          gaps_out = 20;
 | 
			
		||||
          border_size = 2;
 | 
			
		||||
          "col.active_border" = "$lavender";
 | 
			
		||||
          "col.inactive_border" = "$overlay0";
 | 
			
		||||
          layout = "dwindle";
 | 
			
		||||
          allow_tearing = false;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        # Decoration
 | 
			
		||||
        decoration = {
 | 
			
		||||
          rounding = 10;
 | 
			
		||||
          blur = {
 | 
			
		||||
            enabled = true;
 | 
			
		||||
            size = 3;
 | 
			
		||||
            passes = 1;
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        # Animations
 | 
			
		||||
        animations = {
 | 
			
		||||
          enabled = true;
 | 
			
		||||
          bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
 | 
			
		||||
          animation = [
 | 
			
		||||
            "windows, 1, 7, myBezier"
 | 
			
		||||
            "windowsOut, 1, 7, default, popin 80%"
 | 
			
		||||
            "border, 1, 10, default"
 | 
			
		||||
            "borderangle, 1, 8, default"
 | 
			
		||||
            "fade, 1, 7, default"
 | 
			
		||||
            "workspaces, 1, 6, default"
 | 
			
		||||
          ];
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        # Dwindle layout
 | 
			
		||||
        dwindle = {
 | 
			
		||||
          pseudotile = true;
 | 
			
		||||
          preserve_split = true;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        # Window rules
 | 
			
		||||
        windowrulev2 = [
 | 
			
		||||
          "suppressevent maximize, class:.*"
 | 
			
		||||
          "idleinhibit fullscreen, class:.*"
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        # Startup
 | 
			
		||||
        exec-once = [
 | 
			
		||||
          "systemctl --user import-environment DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
 | 
			
		||||
          "${pkgs.swaynotificationcenter}/bin/swaync"
 | 
			
		||||
          "hyprpaper"
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        # Keybindings
 | 
			
		||||
        bind = [
 | 
			
		||||
          # Applications
 | 
			
		||||
          "$mod, Return, exec, ${terminal}"
 | 
			
		||||
          "$mod, c, killactive"
 | 
			
		||||
          "$mod, p, exec, ${menu}"
 | 
			
		||||
          "$mod, d, exec, ${emoji_picker}"
 | 
			
		||||
          "$mod, z, exec, hyprctl reload"
 | 
			
		||||
 | 
			
		||||
          # Focus
 | 
			
		||||
          "$mod, ${left}, movefocus, l"
 | 
			
		||||
          "$mod, ${down}, movefocus, d"
 | 
			
		||||
          "$mod, ${up}, movefocus, u"
 | 
			
		||||
          "$mod, ${right}, movefocus, r"
 | 
			
		||||
 | 
			
		||||
          # Move windows
 | 
			
		||||
          "$mod SHIFT, ${left}, movewindow, l"
 | 
			
		||||
          "$mod SHIFT, ${down}, movewindow, d"
 | 
			
		||||
          "$mod SHIFT, ${up}, movewindow, u"
 | 
			
		||||
          "$mod SHIFT, ${right}, movewindow, r"
 | 
			
		||||
 | 
			
		||||
          # Workspaces (qwertyuio)
 | 
			
		||||
          "$mod, q, workspace, 1"
 | 
			
		||||
          "$mod, w, workspace, 2"
 | 
			
		||||
          "$mod, e, workspace, 3"
 | 
			
		||||
          "$mod, r, workspace, 4"
 | 
			
		||||
          "$mod, t, workspace, 5"
 | 
			
		||||
          "$mod, y, workspace, 6"
 | 
			
		||||
          "$mod, u, workspace, 7"
 | 
			
		||||
          "$mod, i, workspace, 8"
 | 
			
		||||
          "$mod, o, workspace, 9"
 | 
			
		||||
 | 
			
		||||
          # Move to workspaces
 | 
			
		||||
          "$mod SHIFT, q, movetoworkspace, 1"
 | 
			
		||||
          "$mod SHIFT, w, movetoworkspace, 2"
 | 
			
		||||
          "$mod SHIFT, e, movetoworkspace, 3"
 | 
			
		||||
          "$mod SHIFT, r, movetoworkspace, 4"
 | 
			
		||||
          "$mod SHIFT, t, movetoworkspace, 5"
 | 
			
		||||
          "$mod SHIFT, y, movetoworkspace, 6"
 | 
			
		||||
          "$mod SHIFT, u, movetoworkspace, 7"
 | 
			
		||||
          "$mod SHIFT, i, movetoworkspace, 8"
 | 
			
		||||
          "$mod SHIFT, o, movetoworkspace, 9"
 | 
			
		||||
 | 
			
		||||
          # Layout
 | 
			
		||||
          "$mod, v, togglesplit"
 | 
			
		||||
          "$mod, f, fullscreen"
 | 
			
		||||
          "$mod SHIFT, f, togglefloating"
 | 
			
		||||
          # "$mod, space, focusmode, toggle"
 | 
			
		||||
          # "$mod, a, focusparent"
 | 
			
		||||
 | 
			
		||||
          # Screenshots
 | 
			
		||||
          "$mod, period, exec, ${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\" ~/screenshots/\"$(date -u --iso-8601=seconds)\".png && ${pkgs.libnotify}/bin/notify-send \"Screenshot saved\""
 | 
			
		||||
          "$mod SHIFT, period, exec, ${pkgs.grim}/bin/grim ~/screenshots/\"$(date -u --iso-8601=seconds)\".png && ${pkgs.libnotify}/bin/notify-send \"Screenshot saved\""
 | 
			
		||||
 | 
			
		||||
          # Notifications
 | 
			
		||||
          "$mod SHIFT, n, exec, ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw"
 | 
			
		||||
          "$mod SHIFT, d, exec, ${pkgs.swaynotificationcenter}/bin/swaync-client -d -sw"
 | 
			
		||||
 | 
			
		||||
          # Scratchpad
 | 
			
		||||
          "$mod SHIFT, minus, movetoworkspace, special:magic"
 | 
			
		||||
          "$mod, minus, togglespecialworkspace, magic"
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        # Media keys
 | 
			
		||||
        bindl = [
 | 
			
		||||
          ", XF86AudioRaiseVolume, exec, ${pkgs.pamixer}/bin/pamixer --increase 5"
 | 
			
		||||
          ", XF86AudioLowerVolume, exec, ${pkgs.pamixer}/bin/pamixer --decrease 5"
 | 
			
		||||
          ", XF86AudioMute, exec, ${pkgs.pamixer}/bin/pamixer --toggle-mute"
 | 
			
		||||
          ", XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl previous"
 | 
			
		||||
          ", XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl next"
 | 
			
		||||
          ", XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl play-pause"
 | 
			
		||||
          ", XF86MonBrightnessDown, exec, ${pkgs.light}/bin/light -U 5"
 | 
			
		||||
          ", XF86MonBrightnessUp, exec, ${pkgs.light}/bin/light -A 5"
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    # Hyprpaper configuration for wallpaper
 | 
			
		||||
    services.hyprpaper = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      settings = {
 | 
			
		||||
        ipc = "on";
 | 
			
		||||
        splash = false;
 | 
			
		||||
        splash_offset = 2.0;
 | 
			
		||||
 | 
			
		||||
        preload = [
 | 
			
		||||
          "${config.xdg.dataHome}/${cfg.wallpaperPath}"
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        wallpaper = [
 | 
			
		||||
          ",${config.xdg.dataHome}/${cfg.wallpaperPath}"
 | 
			
		||||
        ];
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								modules/home/windowManagers/hyprland/wallpaper.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								modules/home/windowManagers/hyprland/wallpaper.jpg
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 3.2 MiB  | 
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue