From 4908eeb0a55cbf1796977ce4314c909191faf8b4 Mon Sep 17 00:00:00 2001 From: m3tam3re Date: Fri, 7 Apr 2023 06:09:28 +0200 Subject: [PATCH] hyprland --- flake.lock | 51 ++++ flake.nix | 5 +- home/features/desktop/default.nix | 9 +- home/features/desktop/hyprland/config.nix | 336 +++++++++++---------- home/features/desktop/hyprland/default.nix | 10 + 5 files changed, 240 insertions(+), 171 deletions(-) diff --git a/flake.lock b/flake.lock index 69daac5..17f48a8 100644 --- a/flake.lock +++ b/flake.lock @@ -19,6 +19,22 @@ "type": "github" } }, + "base16-schemes": { + "flake": false, + "locked": { + "lastModified": 1665690101, + "narHash": "sha256-J2ZvNaVFkqaTXzYO5L+jyRORfIOavFPKvWItP6UTMKs=", + "owner": "tinted-theming", + "repo": "base16-schemes", + "rev": "a3dc916cf90471a422c0bfe1bb4b1bdd12185ced", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-schemes", + "type": "github" + } + }, "darwin": { "inputs": { "nixpkgs": [ @@ -140,6 +156,25 @@ "type": "github" } }, + "nix-colors": { + "inputs": { + "base16-schemes": "base16-schemes", + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1672236234, + "narHash": "sha256-dpBIuxcDEvJbLD8fTipE0A0JbQD1lZB94zYFPoh01PI=", + "owner": "misterio77", + "repo": "nix-colors", + "rev": "7e459f1d88ac54fc2f4b308adb5064863006e4b1", + "type": "github" + }, + "original": { + "owner": "misterio77", + "repo": "nix-colors", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1677676435, @@ -156,6 +191,21 @@ "type": "github" } }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1655599917, + "narHash": "sha256-kjZbt5WdTrnjMxL79okg9TCoRUdADG50x/TWozbyTsE=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "5fb55578aa2f1a502d636a8ac71aece57cb730bb", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, "nixpkgs-unstable": { "locked": { "lastModified": 1679865578, @@ -226,6 +276,7 @@ "deploy-rs": "deploy-rs", "home-manager": "home-manager", "hyprland": "hyprland", + "nix-colors": "nix-colors", "nixpkgs": "nixpkgs_4", "nixpkgs-unstable": "nixpkgs-unstable" } diff --git a/flake.nix b/flake.nix index a767049..43412af 100644 --- a/flake.nix +++ b/flake.nix @@ -13,9 +13,10 @@ nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; deploy-rs.url = "github:serokell/deploy-rs"; hyprland.url = "github:hyprwm/Hyprland"; + nix-colors.url = "github:misterio77/nix-colors"; }; - outputs = { self, nixpkgs, nixpkgs-unstable, home-manager, hyprland + outputs = { self, nix-colors, nixpkgs, nixpkgs-unstable, home-manager, hyprland , agenix, deploy-rs, ... }@inputs: let inherit (self) outputs; @@ -78,7 +79,7 @@ # Laptop "m3tam3re@m3-nix" = home-manager.lib.homeManagerConfiguration { pkgs = nixpkgs.legacyPackages."x86_64-linux"; - extraSpecialArgs = { inherit inputs; + extraSpecialArgs = { inherit inputs nix-colors; }; modules = [ ./home/users/m3tam3re/m3-nix.nix diff --git a/home/features/desktop/default.nix b/home/features/desktop/default.nix index 4e47909..79df767 100644 --- a/home/features/desktop/default.nix +++ b/home/features/desktop/default.nix @@ -1,9 +1,9 @@ -{ pkgs, lib, outputs, ... }: +{ pkgs, lib, outputs, nix-colors, ... }: { imports = [ ./crypto.nix ./design.nix - ./espanso.nix +# ./espanso.nix ./hyprland ./i3-gaps.nix ./extrafonts.nix @@ -13,10 +13,12 @@ ./qt.nix ./rofi.nix ./syncthing.nix + nix-colors.homeManagerModule ]; xdg.mimeApps.enable = true; - + colorScheme = nix-colors.colorSchemes.dracula; + home.sessionVariables = { WEBKIT_DISABLE_COMPOSITING_MODE = "1"; EDITOR = "emacs"; @@ -47,6 +49,7 @@ libnotify lxappearance nyxt + pamixer pasystray pavucontrol picom diff --git a/home/features/desktop/hyprland/config.nix b/home/features/desktop/hyprland/config.nix index 65662db..068dced 100644 --- a/home/features/desktop/hyprland/config.nix +++ b/home/features/desktop/hyprland/config.nix @@ -1,192 +1,196 @@ -{ home, colorscheme, wallpaper }: -let inherit (home.sessionVariables) TERMINAL BROWSER EDITOR; +{ home, ... }: +let + + inherit (home.sessionVariables) TERMINAL BROWSER EDITOR; + in '' monitor=eDP-1,preferred, 2560x0, auto monitor=DP-2,preferred, 0x0, auto - exec-once = waybar - exec-once = wl-paste -p -t text --watch clipman store -P --histpath="~/.local/share/clipman-primary.json" - # Source a file (multi-file configs) - # source = ~/.config/hypr/myColors.conf + exec-once = hyprpaper + exec-once = waybar + exec-once = wl-paste -p -t text --watch clipman store -P --histpath="~/.local/share/clipman-primary.json" + # Source a file (multi-file configs) + # source = ~/.config/hypr/myColors.conf - # Some default env vars. - env = XCURSOR_SIZE,24 - env = WLR_NO_HARDWARE_CURSORS,1 - # For all categories, see https://wiki.hyprland.org/Configuring/Variables/ - input { - kb_layout = de - kb_variant = - kb_model = - kb_rules = - kb_options=ctrl:nocaps - follow_mouse = 1 + # Some default env vars. + env = XCURSOR_SIZE,24 + env = WLR_NO_HARDWARE_CURSORS,1 + # For all categories, see https://wiki.hyprland.org/Configuring/Variables/ + input { + kb_layout = de + kb_variant = + kb_model = + kb_rules = + kb_options=ctrl:nocaps + follow_mouse = 1 - touchpad { - natural_scroll = yes - } + touchpad { + natural_scroll = yes + } - sensitivity = 0 # -1.0 - 1.0, 0 means no modification. - } + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + } - general { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - col.active_border = rgb(44475a) rgb(bd93f9) 90deg - col.inactive_border = rgba(44475aaa) - col.group_border = rgba(282a36dd) - col.group_border_active = rgb(bd93f9) rgb(44475a) 90deg - - gaps_in = 5 - gaps_out = 5 - border_size = 1 - col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg - col.inactive_border = rgba(595959aa) + general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + col.active_border = rgb(44475a) rgb(bd93f9) 90deg + col.inactive_border = rgba(44475aaa) + col.group_border = rgba(282a36dd) + col.group_border_active = rgb(bd93f9) rgb(44475a) 90deg + + gaps_in = 5 + gaps_out = 5 + border_size = 1 + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) - layout = dwindle - } + layout = dwindle + } - decoration { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - col.shadow = rgba(1E202966) - drop_shadow = yes - shadow_range = 60 - shadow_offset = 1 2 - shadow_render_power = 3 - shadow_scale = 0.97 - rounding = 8 - blur = yes - blur_size = 3 - blur_passes = 3 - blur_new_optimizations = on - active_opacity = 0.9 - inactive_opacity = 0.5 - drop_shadow = yes - shadow_range = 4 - shadow_render_power = 3 - } + decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + col.shadow = rgba(1E202966) + drop_shadow = yes + shadow_range = 60 + shadow_offset = 1 2 + shadow_render_power = 3 + shadow_scale = 0.97 + rounding = 8 + blur = yes + blur_size = 3 + blur_passes = 3 + blur_new_optimizations = on + active_opacity = 0.9 + inactive_opacity = 0.5 + drop_shadow = yes + shadow_range = 4 + shadow_render_power = 3 + } - animations { - enabled = yes + animations { + enabled = yes - # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more - bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 - animation = windows, 1, 7, myBezier - animation = windowsOut, 1, 7, default, popin 80% - animation = border, 1, 10, default - animation = borderangle, 1, 8, default - animation = fade, 1, 7, default - animation = workspaces, 1, 6, default - } + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, 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 - } + 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 - } + 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 - } + 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 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 - windowrule = float, file_progress - windowrule = float, confirm - windowrule = float, dialog - windowrule = float, download - windowrule = float, notification - windowrule = float, error - windowrule = float, splash - windowrule = float, confirmreset - windowrule = float, title:Open File - windowrule = float, title:branchdialog - windowrule = float, Lxappearance - windowrule = float, Wofi - windowrule = animation none,Wofi - windowrule = float,viewnior - windowrule = float,feh - windowrule = float, pavucontrol-qt - windowrule = float, pavucontrol - windowrule = float, file-roller - windowrule = fullscreen, wlogout - windowrule = float, title:wlogout - windowrule = fullscreen, title:wlogout - windowrule = idleinhibit focus, mpv - windowrule = idleinhibit fullscreen, firefox - windowrule = float, title:^(Media viewer)$ - windowrule = float, title:^(Volume Control)$ - windowrule = float, title:^(Picture-in-Picture)$ - windowrule = size 800 600, title:^(Volume Control)$ - windowrule = move 75 44%, title:^(Volume Control)$ + # 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 + windowrule = float, file_progress + windowrule = float, confirm + windowrule = float, dialog + windowrule = float, download + windowrule = float, notification + windowrule = float, error + windowrule = float, splash + windowrule = float, confirmreset + windowrule = float, title:Open File + windowrule = float, title:branchdialog + windowrule = float, Lxappearance + windowrule = float, Wofi + windowrule = animation none,Wofi + windowrule = float,viewnior + windowrule = float,feh + windowrule = float, pavucontrol-qt + windowrule = float, pavucontrol + windowrule = float, file-roller + windowrule = fullscreen, wlogout + windowrule = float, title:wlogout + windowrule = fullscreen, title:wlogout + windowrule = idleinhibit focus, mpv + windowrule = idleinhibit fullscreen, firefox + windowrule = float, title:^(Media viewer)$ + windowrule = float, title:^(Volume Control)$ + windowrule = float, title:^(Picture-in-Picture)$ + windowrule = size 800 600, title:^(Volume Control)$ + windowrule = move 75 44%, title:^(Volume Control)$ - # See https://wiki.hyprland.org/Configuring/Keywords/ for more - $mainMod = SUPER + # See https://wiki.hyprland.org/Configuring/Keywords/ for more + $mainMod = SUPER - # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more - bind = $mainMod, return, exec, alacritty -e tmux - bind = $mainMod control, t, exec, alacritty -e tmux attach - bind = $mainMod SHIFT, e, exec, emacsclient -n -c -e '(package-initialize)' - bind = $mainMod, Escape, exec, wlogout -p layer-shell - bind = $mainMod, Space, togglefloating - bind = $mainMod, q, killactive, - bind = $mainMod, M, exit, - bind= $mainMod, F, fullscreen - bind = $mainMod, E, exec, thunar - bind = $mainMod, V, togglefloating, - bind = $mainMod, D, exec, fuzzel - bind = $mainMod, P, pseudo, # dwindle - bind = $mainMod, J, togglesplit, # dwindle + # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more + bind = $mainMod, return, exec, alacritty -e tmux + bind = $mainMod control, t, exec, alacritty -e tmux attach + bind = $mainMod SHIFT, e, exec, emacsclient -n -c -e '(package-initialize)' + bind = $mainMod, Escape, exec, wlogout -p layer-shell + bind = $mainMod, Space, togglefloating + bind = $mainMod, q, killactive, + bind = $mainMod, M, exit, + bind= $mainMod, F, fullscreen + bind = $mainMod, E, exec, thunar + bind = $mainMod, V, togglefloating, + bind = $mainMod, D, exec, fuzzel + bind = $mainMod, P, pseudo, # dwindle + bind = $mainMod, J, togglesplit, # dwindle - # Move focus with mainMod + arrow keys - bind = $mainMod, left, movefocus, l - bind = $mainMod, right, movefocus, r - bind = $mainMod, up, movefocus, u - bind = $mainMod, down, movefocus, d + # Move focus with mainMod + arrow keys + bind = $mainMod, left, movefocus, l + bind = $mainMod, right, movefocus, r + bind = $mainMod, up, movefocus, u + bind = $mainMod, down, 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 + # 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 + # 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 - # Scroll through existing workspaces with mainMod + scroll - bind = $mainMod, mouse_down, workspace, e+1 - bind = $mainMod, mouse_up, workspace, e-1 + # Scroll through existing workspaces with mainMod + scroll + bind = $mainMod, mouse_down, workspace, e+1 + bind = $mainMod, mouse_up, workspace, e-1 - # Move/resize windows with mainMod + LMB/RMB and dragging - bindm = $mainMod, mouse:272, movewindow - bindm = $mainMod, mouse:273, resizewindow + # Move/resize windows with mainMod + LMB/RMB and dragging + bindm = $mainMod, mouse:272, movewindow + bindm = $mainMod, mouse:273, resizewindow '' diff --git a/home/features/desktop/hyprland/default.nix b/home/features/desktop/hyprland/default.nix index adfe88f..8daa81e 100644 --- a/home/features/desktop/hyprland/default.nix +++ b/home/features/desktop/hyprland/default.nix @@ -1,8 +1,18 @@ { inputs, config, lib, pkgs, ... }: { imports = [ inputs.hyprland.homeManagerModules.default ]; + programs = { + fish.loginShellInit = '' + if test (tty) = "/dev/tty1" + exec Hyprland &> /dev/null + end + ''; + }; wayland.windowManager.hyprland = { enable = true; nvidiaPatches = true; + extraConfig = + (import ./config.nix { inherit (config) home; }); + }; programs.waybar.package = pkgs.waybar.overrideAttrs (oa: { mesonFlags = (oa.mesonFlags or [ ]) ++ [ "-Dexperimental=true" ]; });