diff --git a/flake.lock b/flake.lock index 7db6049..282c50a 100644 --- a/flake.lock +++ b/flake.lock @@ -80,6 +80,48 @@ "type": "github" } }, + "hyprland": { + "inputs": { + "hyprland-protocols": "hyprland-protocols", + "nixpkgs": "nixpkgs", + "wlroots": "wlroots", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1675689419, + "narHash": "sha256-UyCVZVhkZiisMPjfDTAzQIe0YpIkN1Gic97bie3Kf0A=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "863812a0979646fbc1a51b6593fa25fbad77a7be", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1671839510, + "narHash": "sha256-+PY1qqJfmZzzROgcIY4I7AkCwpnC+qBIYk2eFoA9RWc=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "b8f55e02a328c47ed373133c52483bbfa20a1b75", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, "i3utils": { "inputs": { "flake-utils": "flake-utils", @@ -103,6 +145,22 @@ } }, "nixpkgs": { + "locked": { + "lastModified": 1675273418, + "narHash": "sha256-tpYc4TEGvDzh9uRf44QemyQ4TpVuUbxb07b2P99XDbM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4d7c2644dbac9cf8282c0afe68fca8f0f3e7b2db", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1675273418, "narHash": "sha256-tpYc4TEGvDzh9uRf44QemyQ4TpVuUbxb07b2P99XDbM=", @@ -121,8 +179,9 @@ "inputs": { "agenix": "agenix", "home-manager": "home-manager", + "hyprland": "hyprland", "i3utils": "i3utils", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs_2" } }, "utils": { @@ -139,6 +198,49 @@ "repo": "flake-utils", "type": "github" } + }, + "wlroots": { + "flake": false, + "locked": { + "host": "gitlab.freedesktop.org", + "lastModified": 1675374853, + "narHash": "sha256-BSrjNcddYWhFUMtjGwxiEXw67MYRaIHGvLn19Mvm1NE=", + "owner": "wlroots", + "repo": "wlroots", + "rev": "677a3f2f8847ed2de49dd60868f9d9487a546f58", + "type": "gitlab" + }, + "original": { + "host": "gitlab.freedesktop.org", + "owner": "wlroots", + "repo": "wlroots", + "type": "gitlab" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1673116118, + "narHash": "sha256-eR0yDSkR2XYMesfdRWJs25kAdXET2mbNNHu5t+KUcKA=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "d479c846531fd0e1d2357c9588b8310a2b859ef2", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index a9db9c6..fccc4b3 100644 --- a/flake.nix +++ b/flake.nix @@ -12,6 +12,8 @@ home-manager.url = "github:nix-community/home-manager/master"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; + + hyprland.url = "github:hyprwm/Hyprland"; }; outputs = { @@ -19,6 +21,7 @@ agenix, home-manager, i3utils, + hyprland, ... }: let system = "x86_64-linux"; @@ -44,8 +47,30 @@ ./hosts/${hostname}/configuration.nix agenix.nixosModules.default + hyprland.nixosModules.default + {programs.hyprland = { + enable = true; + package = hyprland.packages.${system}.default.overrideAttrs (finalAttrs: previousAttrs: { + buildInputs = previousAttrs.buildInputs ++ [pkgs.makeWrapper]; + postInstall = '' + ls -lar $out + wrapProgram $out/bin/Hyprland \ + --set LIBVA_DRIVER_NAME nvidia \ + --set XDG_SESSION_TYPE wayland \ + --set GBM_BACKEND nvidia-drm \ + --set __GLX_VENDOR_LIBRARY_NAME nvidia \ + --set WLR_NO_HARDWARE_CURSORS 1 + ''; + }); + xwayland = { + enable = true; + hidpi = true; + }; + nvidiaPatches = true; + };} home-manager.nixosModules.home-manager + { home-manager = { useGlobalPkgs = true; diff --git a/hosts/common/default.nix b/hosts/common/default.nix index 93fefa3..53a2e37 100644 --- a/hosts/common/default.nix +++ b/hosts/common/default.nix @@ -25,6 +25,13 @@ in { experimental-features = nix-command flakes warn-dirty = false ''; + + settings = { + substituters = [ + "https://hyprland.cachix.org" + ]; + trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; + }; }; # Set time zone. @@ -48,13 +55,14 @@ in { hardware.cpu.intel.updateMicrocode = true; users.users."${defaultUser}" = mkUser defaultUser; + xdg.portal.wlr.enable = true; # List packages installed in system profile. To search, run: # $ nix search wget environment.systemPackages = with pkgs; [ curl fd - firefox + firefox-wayland fzf gcc git diff --git a/hosts/common/graphical/default.nix b/hosts/common/graphical/default.nix index febb786..5706f0a 100644 --- a/hosts/common/graphical/default.nix +++ b/hosts/common/graphical/default.nix @@ -12,6 +12,7 @@ services.blueman.enable = true; networking.networkmanager.enable = true; programs.nm-applet.enable = true; + programs.partition-manager.enable = true; age.secrets = { age_identity = { @@ -71,7 +72,7 @@ SUBSYSTEM="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0003", MODE="0666" }; desktopManager = { - plasma5.enable = true; + # plasma5.enable = true; }; }; }; diff --git a/hyprland.conf b/hyprland.conf new file mode 100644 index 0000000..2f9cec1 --- /dev/null +++ b/hyprland.conf @@ -0,0 +1,164 @@ + +######################################################################################## +AUTOGENERATED HYPR CONFIG. +PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT, +OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. +######################################################################################## + +# +# Please note not all available settings / options are set here. +# For a full list, see the wiki +# + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=,preferred,auto,auto + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Execute your favorite apps at launch +# exec-once = waybar & hyprpaper & firefox + +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = gb + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 0 + + touchpad { + natural_scroll = no + } + + accel_profile = flat + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out = 10 + border_size = 2 + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + layout = dwindle +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 10 + blur = yes + blur_size = 3 + blur_passes = 1 + blur_new_optimizations = on + + drop_shadow = yes + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 3, myBezier + animation = windowsOut, 1, 3, default, popin 80% + animation = border, 1, 3, default + animation = borderangle, 1, 3, default + animation = fade, 1, 3, default + animation = workspaces, 1, 3, default +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + new_is_master = true +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = off +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more +device:epic mouse V1 { + sensitivity = -0.5 +} + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = CTRL + SHIFT + ALT + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, return, exec, kitty +bind = $mainMod, Q, killactive, +bind = $mainMod + SUPER, Q, exit, +bind = $mainMod, E, exec, dolphin +bind = $mainMod, V, togglefloating, +bind = $mainMod, D, exec, wofi --show drun +bind = $mainMod, P, pseudo, # dwindle +# bind = $mainMod, J, togglesplit, # dwindle + +# Move focus with mainMod + arrow keys +bind = $mainMod, H, movefocus, l +bind = $mainMod, L, movefocus, r +bind = $mainMod, K, movefocus, u +bind = $mainMod, J, movefocus, d + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +bind = $mainMod, M, workspace, +1 +bind = $mainMod, comma, workspace, -1 +bind = $mainMod, U, movetoworkspace, +1 +bind = $mainMod, I, movetoworkspace, -1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow diff --git a/users/daniel/default.nix b/users/daniel/default.nix index 4d78d76..912b652 100644 --- a/users/daniel/default.nix +++ b/users/daniel/default.nix @@ -62,6 +62,7 @@ playerctl spotify udiskie + wofi xclip zathura ];