mirror of
https://github.com/ItsDrike/nixdots
synced 2024-11-10 02:19:41 +00:00
Add early incomplete hyprland config
This commit is contained in:
parent
953334c841
commit
6da71787f1
|
@ -1,3 +1,5 @@
|
||||||
_: {
|
_: {
|
||||||
imports = [ ];
|
imports = [
|
||||||
|
./wayland.nix
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
15
home/packages/gui/wayland.nix
Normal file
15
home/packages/gui/wayland.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
osConfig,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (lib) mkIf;
|
||||||
|
|
||||||
|
in {
|
||||||
|
config = mkIf osConfig.myOptions.home-manager.wms.isWayland {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
wlogout
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
12
home/programs/graphical/wms/hyprland/config/default.nix
Normal file
12
home/programs/graphical/wms/hyprland/config/default.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
_: {
|
||||||
|
imports = [
|
||||||
|
./exec.nix
|
||||||
|
./gestures.nix
|
||||||
|
./input.nix
|
||||||
|
./keybinds.nix
|
||||||
|
./layout.nix
|
||||||
|
./misc.nix
|
||||||
|
./style.nix
|
||||||
|
./window_rules.nix
|
||||||
|
];
|
||||||
|
}
|
8
home/programs/graphical/wms/hyprland/config/exec.nix
Normal file
8
home/programs/graphical/wms/hyprland/config/exec.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
exec-once = [
|
||||||
|
# TODO: Add this (probably only vesktop)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
13
home/programs/graphical/wms/hyprland/config/gestures.nix
Normal file
13
home/programs/graphical/wms/hyprland/config/gestures.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
gestures = {
|
||||||
|
workspace_swipe = true;
|
||||||
|
workspace_swipe_fingers = 3;
|
||||||
|
workspace_swipe_distance = 300;
|
||||||
|
workspace_swipe_invert = false;
|
||||||
|
workspace_swipe_min_speed_to_force = 20;
|
||||||
|
workspace_swipe_cancel_ratio = 0.650000;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
25
home/programs/graphical/wms/hyprland/config/input.nix
Normal file
25
home/programs/graphical/wms/hyprland/config/input.nix
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
input = {
|
||||||
|
# Keyboard layout settings
|
||||||
|
# Default to US keyboard, but allow switching to SK with alt-shift
|
||||||
|
kb_layout = "us, sk";
|
||||||
|
kb_variant = ",qwerty";
|
||||||
|
kb_options = "grp:alt_shift_toggle";
|
||||||
|
|
||||||
|
# Enable numlock by default (once Hyprland is loaded)
|
||||||
|
numlock_by_default = true;
|
||||||
|
|
||||||
|
# cursor movement will always change focus to the window under the cursor
|
||||||
|
follow_mouse = 1;
|
||||||
|
|
||||||
|
touchpad = {
|
||||||
|
# Sending LMB + RMB = MMB
|
||||||
|
middle_button_emulation = true;
|
||||||
|
# I'm not natural
|
||||||
|
natural_scroll = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
166
home/programs/graphical/wms/hyprland/config/keybinds.nix
Normal file
166
home/programs/graphical/wms/hyprland/config/keybinds.nix
Normal file
|
@ -0,0 +1,166 @@
|
||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
"$MOUSE_LMB" = "mouse:272";
|
||||||
|
"$MOUSE_RMB" = "mouse:273";
|
||||||
|
"$MOUSE_MMB" = "mouse:274";
|
||||||
|
"$MOUSE_EX1" = "mouse:275";
|
||||||
|
"$MOUSE_EX2" = "mouse:276";
|
||||||
|
|
||||||
|
"$XF86Favorites" = "164";
|
||||||
|
|
||||||
|
bind = [
|
||||||
|
#
|
||||||
|
# Active window
|
||||||
|
#
|
||||||
|
"SUPER, W, killactive,"
|
||||||
|
"SUPER, F, togglefloating,"
|
||||||
|
"SUPER, Space, fullscreen, 0"
|
||||||
|
"SUPER, Space, fullscreen, 1" # maximize
|
||||||
|
"SUPER_SHIFT, S, layoutmsg, togglesplit"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Programs
|
||||||
|
#
|
||||||
|
"SUPER, Return, exec, kitty"
|
||||||
|
# TODO: requires programs
|
||||||
|
|
||||||
|
#
|
||||||
|
# DE/WM Control programs
|
||||||
|
#
|
||||||
|
# TODO: Requires programs
|
||||||
|
"SUPER_SHIFT, L, exec, wlogout -p layer-shell"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Screenshots
|
||||||
|
#
|
||||||
|
# TODO: requires script
|
||||||
|
|
||||||
|
#
|
||||||
|
# Brightness control
|
||||||
|
#
|
||||||
|
# TODO: requires script
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Audio/Volume control
|
||||||
|
#
|
||||||
|
"SUPER, Down, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-"
|
||||||
|
"SUPER, Up, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+"
|
||||||
|
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-"
|
||||||
|
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+"
|
||||||
|
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||||
|
", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Notifications
|
||||||
|
#
|
||||||
|
# TODO: Requires notification daemon (dunst?)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Window groups
|
||||||
|
#
|
||||||
|
"SUPER, G, togglegroup,"
|
||||||
|
"ALT, tab, changegroupactive, f"
|
||||||
|
"ALT, grave, changegroupactive, b"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Special workspace (scratchpad)
|
||||||
|
#
|
||||||
|
"ALT, grave, movetoworkspace, special"
|
||||||
|
"SUPER, grave, togglespecialworkspace,"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Move window focus
|
||||||
|
#
|
||||||
|
"SUPER, h, movefocus, l"
|
||||||
|
"SUPER, l, movefocus, r"
|
||||||
|
"SUPER, k, movefocus, u"
|
||||||
|
"SUPER, j, movefocus, d"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Move active window in direction
|
||||||
|
#
|
||||||
|
"SUPER_ALT, h, movewindow, l"
|
||||||
|
"SUPER_ALT, l, movewindow, r"
|
||||||
|
"SUPER_ALT, k, movewindow, u"
|
||||||
|
"SUPER_ALT, j, movewindow, d"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Move floating windows
|
||||||
|
#
|
||||||
|
# TODO: requires script (move-window.sh)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Override split direction for next window (manual tiling)
|
||||||
|
#
|
||||||
|
"SUPER_ALT, left, layoutmsg, preselect l"
|
||||||
|
"SUPER_ALT, right, layoutmsg, preselect r"
|
||||||
|
"SUPER_ALT, up, layoutmsg, preselect u"
|
||||||
|
"SUPER_ALT, down, layoutmsg, preselect d"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Switch workspace (swapping to current monitor)
|
||||||
|
#
|
||||||
|
# TODO: requires script (swap-workspace)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Move window to workspace
|
||||||
|
#
|
||||||
|
"SUPER_SHIFT, 1, movetoworkspacesilent, 1"
|
||||||
|
"SUPER_SHIFT, 2, movetoworkspacesilent, 2"
|
||||||
|
"SUPER_SHIFT, 3, movetoworkspacesilent, 3"
|
||||||
|
"SUPER_SHIFT, 4, movetoworkspacesilent, 4"
|
||||||
|
"SUPER_SHIFT, 5, movetoworkspacesilent, 5"
|
||||||
|
"SUPER_SHIFT, 6, movetoworkspacesilent, 6"
|
||||||
|
"SUPER_SHIFT, 7, movetoworkspacesilent, 7"
|
||||||
|
"SUPER_SHIFT, 8, movetoworkspacesilent, 8"
|
||||||
|
"SUPER_SHIFT, 9, movetoworkspacesilent, 9"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Move window to workspace + focus it
|
||||||
|
#
|
||||||
|
"ALT, 1, movetoworkspace, 1"
|
||||||
|
"ALT, 2, movetoworkspace, 2"
|
||||||
|
"ALT, 3, movetoworkspace, 3"
|
||||||
|
"ALT, 4, movetoworkspace, 4"
|
||||||
|
"ALT, 5, movetoworkspace, 5"
|
||||||
|
"ALT, 6, movetoworkspace, 6"
|
||||||
|
"ALT, 7, movetoworkspace, 7"
|
||||||
|
"ALT, 8, movetoworkspace, 8"
|
||||||
|
"ALT, 9, movetoworkspace, 9"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cycle workspaces (relative movement)
|
||||||
|
#
|
||||||
|
"SUPER, mouse_down, workspace, +1"
|
||||||
|
"SUPER, mouse_up, workspace, -1"
|
||||||
|
"SUPER, bracketright, workspace, +1"
|
||||||
|
"SUPER, bracketleft, workspace, -1"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cycle monitors (relative movement)
|
||||||
|
#
|
||||||
|
"SUPER_SHIFT, mouse_down, focusmonitor, +1"
|
||||||
|
"SUPER_SHIFT, mouse_up, focusmonitor, -1"
|
||||||
|
"SUPER_SHIFT, bracketright, focusmonitor, +1"
|
||||||
|
"SUPER_SHIFT, bracketleft, focusmonitor, -1"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Window resizing
|
||||||
|
#
|
||||||
|
# TODO: Submaps + binde
|
||||||
|
|
||||||
|
#
|
||||||
|
# Isolation group
|
||||||
|
#
|
||||||
|
# TODO: Submaps
|
||||||
|
];
|
||||||
|
|
||||||
|
bindm = [
|
||||||
|
# Mouse window resizing
|
||||||
|
"SUPER, $MOUSE_LMB, movewindow"
|
||||||
|
"SUPER, $MOUSE_RMB, resizewindow"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
25
home/programs/graphical/wms/hyprland/config/layout.nix
Normal file
25
home/programs/graphical/wms/hyprland/config/layout.nix
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
general.layout = "dwindle";
|
||||||
|
|
||||||
|
dwindle = {
|
||||||
|
# Don't change the split (side/top) regardless of what happens to the container
|
||||||
|
preserve_split = true;
|
||||||
|
|
||||||
|
# Show gaps even when there's only 1 window opened
|
||||||
|
no_gaps_when_only = false;
|
||||||
|
|
||||||
|
# Scale down special workspaces (bigger borders)
|
||||||
|
special_scale_factor = 0.9;
|
||||||
|
};
|
||||||
|
|
||||||
|
group = {
|
||||||
|
# Add new windows in the group after the current window
|
||||||
|
# rather than after the group tail window
|
||||||
|
insert_after_current = true;
|
||||||
|
|
||||||
|
# Focus the window that was just moved out of the group
|
||||||
|
focus_removed_window = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
19
home/programs/graphical/wms/hyprland/config/misc.nix
Normal file
19
home/programs/graphical/wms/hyprland/config/misc.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
misc = {
|
||||||
|
# Disable redundant renders (covered by wallpaper)
|
||||||
|
disable_hyprland_logo = true;
|
||||||
|
disable_splash_rendering = true;
|
||||||
|
|
||||||
|
# Follow requests from windows to be focused
|
||||||
|
focus_on_activate = true;
|
||||||
|
|
||||||
|
# Auto-reload is unnecessary on NixOS, config is readonly
|
||||||
|
disable_autoreload = true;
|
||||||
|
|
||||||
|
# Enable DPMS on these actions
|
||||||
|
mouse_move_enables_dpms = true;
|
||||||
|
key_press_enables_dpms = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
127
home/programs/graphical/wms/hyprland/config/style.nix
Normal file
127
home/programs/graphical/wms/hyprland/config/style.nix
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
|
||||||
|
#
|
||||||
|
# Window gaps
|
||||||
|
#
|
||||||
|
|
||||||
|
general = {
|
||||||
|
gaps_in = 5;
|
||||||
|
gaps_out = 8;
|
||||||
|
};
|
||||||
|
|
||||||
|
#
|
||||||
|
# Borders
|
||||||
|
#
|
||||||
|
|
||||||
|
decoration.rounding = 8;
|
||||||
|
|
||||||
|
general = {
|
||||||
|
border_size = 2;
|
||||||
|
|
||||||
|
# Regular windows
|
||||||
|
"col.active_border" = "rgba(FFA500FF)"; # orange
|
||||||
|
"col.inactive_border" = "rgba(666666AA)"; # transparent gray
|
||||||
|
|
||||||
|
# Windows with nogroup property
|
||||||
|
"col.nogroup_border_active" = "rgba(FF00FFFF)"; # purple
|
||||||
|
"col.nogroup_border" = "rgba(FF00FFAA)"; # transparent purple
|
||||||
|
};
|
||||||
|
|
||||||
|
group = {
|
||||||
|
# Groupped windows
|
||||||
|
"col.border_active" = "rgba(00A500FF)"; # green
|
||||||
|
"col.border_inactive" = "rgba(5AA500FF)"; # transparent green
|
||||||
|
|
||||||
|
# Locked groupped windows
|
||||||
|
"col.border_locked_active" = "rgba(A0A500FF)"; # yellow
|
||||||
|
"col.border_locked_inactive" = "rgba(A0A500AA)"; # transparent yellow
|
||||||
|
};
|
||||||
|
|
||||||
|
#
|
||||||
|
# Group bar
|
||||||
|
#
|
||||||
|
|
||||||
|
group = {
|
||||||
|
groupbar = {
|
||||||
|
# Title box above window
|
||||||
|
render_titles = false; # disable, looks kinda bad
|
||||||
|
font_family = "Monaspace Krypton";
|
||||||
|
font_size = 11;
|
||||||
|
text_color = "rgba(FFFFFFFF)"; # white
|
||||||
|
|
||||||
|
# Gradients should be enabled only if title rendering is also enabled
|
||||||
|
# on their own, they look really bad
|
||||||
|
gradients = false;
|
||||||
|
|
||||||
|
"col.active" = "rgba(FFA500FF)"; # light orange
|
||||||
|
"col.inactive" = "rgba(00A500AA)"; # transparent green
|
||||||
|
|
||||||
|
"col.locked_active" = "rgba(FF8000FF)"; # dark orange
|
||||||
|
"col.locked_inactive" = "rgba(A0A500AA)"; # transparent yello
|
||||||
|
|
||||||
|
# Scrolling in the groupbar shouldn't change the active window
|
||||||
|
scrolling = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#
|
||||||
|
# Drop shadow
|
||||||
|
#
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
drop_shadow = true;
|
||||||
|
shadow_range = 20;
|
||||||
|
shadow_render_power = 2;
|
||||||
|
"col.shadow" = "rgba(0F0F0FE6)";
|
||||||
|
"col.shadow_inactive" = "rgba(0F0F0F99)";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Window Blur
|
||||||
|
#
|
||||||
|
|
||||||
|
decoration.blur = {
|
||||||
|
enabled = true;
|
||||||
|
size = 8;
|
||||||
|
passes = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Dim inactive windows
|
||||||
|
#
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
dim_inactive = false; # disabled for now
|
||||||
|
dim_strength = 0.05;
|
||||||
|
dim_special = 0.2;
|
||||||
|
inactive_opacity = 0.9;
|
||||||
|
};
|
||||||
|
|
||||||
|
#
|
||||||
|
# Animation
|
||||||
|
#
|
||||||
|
|
||||||
|
animations = {
|
||||||
|
enabled = true;
|
||||||
|
first_launch_animation = true; # fade in on first launch
|
||||||
|
|
||||||
|
animation = [
|
||||||
|
"windows, 1, 3, default, popin 50%"
|
||||||
|
"border, 1, 4, default"
|
||||||
|
"fade, 1, 4, default"
|
||||||
|
"workspaces, 1, 3, default"
|
||||||
|
"specialWorkspace, 1, 2, default, slidefadevert"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
misc.animate_manual_resizes = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
windowrulev2 = [
|
||||||
|
# TODO: Add these
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -1,10 +1,31 @@
|
||||||
{
|
{
|
||||||
wayland.windowManager.hyprland = {
|
osConfig,
|
||||||
enable = true;
|
pkgs,
|
||||||
xwayland.enable = true;
|
lib,
|
||||||
systemd = {
|
...
|
||||||
|
}: let
|
||||||
|
inherit (lib) mkIf;
|
||||||
|
|
||||||
|
inherit (import ./packages {inherit pkgs;}) dbus-hyprland-env;
|
||||||
|
|
||||||
|
cfg = osConfig.myOptions.home-manager.wms.hyprland;
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
./config
|
||||||
|
];
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
dbus-hyprland-env
|
||||||
|
];
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
enable = true;
|
enable = true;
|
||||||
variables = ["--all"];
|
xwayland.enable = true;
|
||||||
|
systemd = {
|
||||||
|
enable = true;
|
||||||
|
variables = ["--all"];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
{pkgs, ...}:
|
||||||
|
pkgs.writeTextFile {
|
||||||
|
name = "dbus-hyprland-env";
|
||||||
|
destination = "/bin/dbus-hyprland-environment";
|
||||||
|
executable = true;
|
||||||
|
text = ''
|
||||||
|
dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=hyprland
|
||||||
|
systemctl --user stop pipewire pipewire-media-session xdg-desktop-portal xdg-desktop-portal-wlr
|
||||||
|
systemctl --user start pipewire wireplumber pipewire-media-session xdg-desktop-portal xdg-desktop-portal-hyprland
|
||||||
|
'';
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
packages = {
|
||||||
|
dbus-hyprland-env = pkgs.callPackage ./dbus-hyprland-env.nix {};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
packages
|
|
@ -85,6 +85,7 @@
|
||||||
key = "FA2745890B7048C0";
|
key = "FA2745890B7048C0";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
wms.hyprland.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./git.nix
|
./git.nix
|
||||||
|
./wms.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
options.myOptions.home-manager = {
|
options.myOptions.home-manager = {
|
||||||
|
|
22
options/home/wms.nix
Normal file
22
options/home/wms.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (lib) mkEnableOption mkOption types;
|
||||||
|
in {
|
||||||
|
options.myOptions.home-manager.wms = {
|
||||||
|
hyprland.enable = mkEnableOption ''
|
||||||
|
Hyprland wayland compositor.
|
||||||
|
'';
|
||||||
|
|
||||||
|
isWayland = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = with config.myOptions.home-manager.wms; (hyprland.enable);
|
||||||
|
description = ''
|
||||||
|
Whether to enable Wayland exclusive modules, this contains a variety
|
||||||
|
of packages, modules, overlays, XDG portals and so on.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue