meow
This commit is contained in:
@@ -12,6 +12,190 @@
|
||||
home,
|
||||
...
|
||||
}:
|
||||
let
|
||||
tofiCfg = pkgs.writeTextFile {
|
||||
name = "hyprland-tofi-config";
|
||||
text = ''
|
||||
width = 100%
|
||||
height = 100%
|
||||
border-width = 0
|
||||
outline-width = 0
|
||||
padding-left = 35%
|
||||
padding-top = 35%
|
||||
result-spacing = 25
|
||||
num-results = 5
|
||||
font = monospace
|
||||
background-color = #000A
|
||||
'';
|
||||
};
|
||||
meowScript = pkgs.writeShellScript "meow" ''
|
||||
fish -c 'grim -g $(slurp) -t png - &| wl-copy -t image/png; killall wayfreeze'
|
||||
'';
|
||||
mreowScript = pkgs.writeShellScript "mreow" ''
|
||||
exec $(tofi-drun -c ${tofiCfg})
|
||||
'';
|
||||
mainMod = "SUPER";
|
||||
hlBind = key: dispatcher: "hl.bind(\"${key}\", ${dispatcher})";
|
||||
workspaceLines = pkgs.lib.concatLists (
|
||||
builtins.genList (
|
||||
i:
|
||||
let
|
||||
ws = toString (i + 1);
|
||||
in
|
||||
[
|
||||
(hlBind "${mainMod} + ${ws}" "hl.dsp.focus({ workspace = ${ws} })")
|
||||
(hlBind "${mainMod} + SHIFT + ${ws}" "hl.dsp.window.move({ workspace = ${ws} })")
|
||||
]
|
||||
) 9
|
||||
);
|
||||
hlBindCode = pkgs.lib.concatStringsSep "\n" (
|
||||
[
|
||||
"-- Hyprland configuration"
|
||||
""
|
||||
"local mainMod = \"${mainMod}\""
|
||||
""
|
||||
"-- Config"
|
||||
"hl.config({"
|
||||
" general = {"
|
||||
" gaps_in = 1,"
|
||||
" gaps_out = 1,"
|
||||
" border_size = 1,"
|
||||
" resize_on_border = false,"
|
||||
" allow_tearing = true,"
|
||||
" layout = \"dwindle\","
|
||||
" },"
|
||||
" input = {"
|
||||
" follow_mouse = 2,"
|
||||
" kb_layout = \"gb\","
|
||||
" },"
|
||||
" decoration = {"
|
||||
" rounding = 4,"
|
||||
" rounding_power = 1,"
|
||||
" active_opacity = 1.0,"
|
||||
" inactive_opacity = 1.0,"
|
||||
" shadow = {"
|
||||
" enabled = false,"
|
||||
" },"
|
||||
" blur = {"
|
||||
" enabled = true,"
|
||||
" passes = 1,"
|
||||
" new_optimizations = true,"
|
||||
" ignore_opacity = false,"
|
||||
" },"
|
||||
" },"
|
||||
" cursor = {"
|
||||
" no_hardware_cursors = false,"
|
||||
" },"
|
||||
" dwindle = {"
|
||||
" preserve_split = true,"
|
||||
" },"
|
||||
" misc = {"
|
||||
" force_default_wallpaper = -1,"
|
||||
" disable_hyprland_logo = false,"
|
||||
" enable_anr_dialog = false,"
|
||||
" },"
|
||||
"})"
|
||||
""
|
||||
"-- Monitors"
|
||||
"hl.monitor({ output = \"HDMI-A-1\", mode = \"1920x1080@60\", position = \"0x0\", scale = \"1\" })"
|
||||
"hl.monitor({ output = \"DP-2\", mode = \"1920x1080@120\", position = \"1920x0\", scale = \"1\" })"
|
||||
""
|
||||
"-- Input"
|
||||
"hl.device({ name = \"default\", kb_layout = \"gb\", sensitivity = -0.5 })"
|
||||
""
|
||||
"-- Curves"
|
||||
"hl.curve(\"easeOutQuint\", { type = \"bezier\", points = { {0.23, 1}, {0.32, 1} } })"
|
||||
"hl.curve(\"easeInOutCubic\", { type = \"bezier\", points = { {0.65, 0.05}, {0.36, 1} } })"
|
||||
"hl.curve(\"linear\", { type = \"bezier\", points = { {0, 0}, {1, 1} } })"
|
||||
"hl.curve(\"almostLinear\", { type = \"bezier\", points = { {0.5, 0.5}, {0.75, 1} } })"
|
||||
"hl.curve(\"quick\", { type = \"bezier\", points = { {0.15, 0}, {0.1, 1} } })"
|
||||
""
|
||||
"-- Animations"
|
||||
"hl.animation({ leaf = \"global\", enabled = true, speed = 10, bezier = \"default\" })"
|
||||
"hl.animation({ leaf = \"border\", enabled = true, speed = 5.39, bezier = \"easeOutQuint\" })"
|
||||
"hl.animation({ leaf = \"windows\", enabled = true, speed = 2.79, bezier = \"easeOutQuint\" })"
|
||||
"hl.animation({ leaf = \"windowsIn\", enabled = true, speed = 1, bezier = \"easeOutQuint\", style = \"popin 87%\" })"
|
||||
"hl.animation({ leaf = \"windowsOut\", enabled = true, speed = 1, bezier = \"linear\", style = \"popin 87%\" })"
|
||||
"hl.animation({ leaf = \"windowsMove\", enabled = true, speed = 1, bezier = \"easeInOutCubic\" })"
|
||||
"hl.animation({ leaf = \"fadeIn\", enabled = true, speed = 0.5, bezier = \"almostLinear\" })"
|
||||
"hl.animation({ leaf = \"fadeOut\", enabled = true, speed = 0.5, bezier = \"almostLinear\" })"
|
||||
"hl.animation({ leaf = \"fade\", enabled = true, speed = 1, bezier = \"quick\" })"
|
||||
"hl.animation({ leaf = \"layers\", enabled = true, speed = 3.81, bezier = \"easeOutQuint\" })"
|
||||
"hl.animation({ leaf = \"layersIn\", enabled = true, speed = 4, bezier = \"easeOutQuint\", style = \"fade\" })"
|
||||
"hl.animation({ leaf = \"layersOut\", enabled = true, speed = 1.5, bezier = \"linear\", style = \"fade\" })"
|
||||
"hl.animation({ leaf = \"fadeLayersIn\", enabled = true, speed = 1.79, bezier = \"almostLinear\" })"
|
||||
"hl.animation({ leaf = \"fadeLayersOut\", enabled = true, speed = 1.39, bezier = \"almostLinear\" })"
|
||||
"hl.animation({ leaf = \"workspaces\", enabled = true, speed = 1, bezier = \"almostLinear\", style = \"slide\" })"
|
||||
"hl.animation({ leaf = \"workspacesIn\", enabled = true, speed = 1, bezier = \"easeInOutCubic\", style = \"slide\" })"
|
||||
"hl.animation({ leaf = \"workspacesOut\", enabled = true, speed = 1, bezier = \"easeInOutCubic\", style = \"slide\" })"
|
||||
"hl.animation({ leaf = \"zoomFactor\", enabled = true, speed = 7, bezier = \"quick\" })"
|
||||
""
|
||||
"-- Binds"
|
||||
(hlBind "${mainMod} + R" "hl.dsp.exec_cmd(\"${mreowScript}\")")
|
||||
(hlBind "${mainMod} + C" "hl.dsp.window.close()")
|
||||
(hlBind "${mainMod} + M" "hl.dsp.exec_cmd(\"uwsm stop\")")
|
||||
(hlBind "${mainMod} + Q" "hl.dsp.exec_cmd(\"kitty\")")
|
||||
(hlBind "${mainMod} + V" "hl.dsp.window.float({ action = \"toggle\" })")
|
||||
(hlBind "${mainMod} + left" "hl.dsp.focus({ direction = \"left\" })")
|
||||
(hlBind "${mainMod} + right" "hl.dsp.focus({ direction = \"right\" })")
|
||||
(hlBind "${mainMod} + up" "hl.dsp.focus({ direction = \"up\" })")
|
||||
(hlBind "${mainMod} + down" "hl.dsp.focus({ direction = \"down\" })")
|
||||
(hlBind "${mainMod} + L" "hl.dsp.exec_cmd(\"wlogout\")")
|
||||
(hlBind "${mainMod} + S" "hl.dsp.exec_cmd(\"wayfreeze --after-freeze-cmd '${meowScript}'\")")
|
||||
(hlBind "${mainMod} + F" "hl.dsp.window.fullscreen({ action = \"toggle\" })")
|
||||
(hlBind "${mainMod} + SHIFT + Q" "hl.dsp.window.close()")
|
||||
(hlBind "${mainMod} + mouse_down" "hl.dsp.focus({ workspace = \"e+1\" })")
|
||||
(hlBind "${mainMod} + mouse_up" "hl.dsp.focus({ workspace = \"e-1\" })")
|
||||
""
|
||||
"-- Mouse binds"
|
||||
(hlBind "${mainMod} + mouse:272" "hl.dsp.window.drag()")
|
||||
(hlBind "${mainMod} + mouse:273" "hl.dsp.window.resize()")
|
||||
""
|
||||
"-- Media keys"
|
||||
(hlBind "XF86AudioLowerVolume" "hl.dsp.exec_cmd(\"wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-\")")
|
||||
(hlBind "XF86AudioRaiseVolume" "hl.dsp.exec_cmd(\"wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+\")")
|
||||
(hlBind "XF86AudioMute" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle\")")
|
||||
(hlBind "XF86AudioPlay" "hl.dsp.exec_cmd(\"playerctl play-pause\")")
|
||||
(hlBind "XF86AudioNext" "hl.dsp.exec_cmd(\"playerctl next\")")
|
||||
(hlBind "XF86AudioPrev" "hl.dsp.exec_cmd(\"playerctl previous\")")
|
||||
(hlBind "XF86AudioMicMute" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle\")")
|
||||
(hlBind "home" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle\")")
|
||||
(hlBind "end" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle\")")
|
||||
(hlBind "F8" "hl.dsp.pass({ window = [[match:class:^(com.obsproject.Studio)$]] })")
|
||||
""
|
||||
"-- Workspaces"
|
||||
(hlBind "${mainMod} + 0" "hl.dsp.focus({ workspace = 10 })")
|
||||
(hlBind "${mainMod} + SHIFT + 0" "hl.dsp.window.move({ workspace = 10 })")
|
||||
]
|
||||
++ workspaceLines
|
||||
++ [
|
||||
""
|
||||
"-- Window rules"
|
||||
"hl.window_rule({ suppress_event = \"maximize\" })"
|
||||
"hl.window_rule({ match = { class = \"gamescope\" }, workspace = \"5\", immediate = true, confine_pointer = true })"
|
||||
"hl.window_rule({ match = { class = \"steam\" }, workspace = \"6 silent\" })"
|
||||
"hl.window_rule({ match = { class = \"vesktop\" }, workspace = \"8 silent\" })"
|
||||
"hl.window_rule({ match = { class = \"org.telegram.desktop\" }, workspace = \"8 silent\" })"
|
||||
"hl.window_rule({ match = { class = \"com.obsproject.Studio\" }, workspace = \"10 silent\" })"
|
||||
"hl.window_rule({ match = { initial_title = \"OBS Studio Crash Detected\" }, pin = true })"
|
||||
"hl.window_rule({ match = { initial_title = \"Discord Popout\" }, workspace = \"1 silent\" })"
|
||||
""
|
||||
"-- Layer rules"
|
||||
"hl.layer_rule({ match = { namespace = \"notifications\" }, no_screen_share = true })"
|
||||
""
|
||||
"-- Host-specific overrides"
|
||||
"local home = os.getenv(\"HOME\")"
|
||||
"if home then"
|
||||
" local f = io.open(home .. '/.config/hypr/hyprland-local.lua', 'r')"
|
||||
" if f then"
|
||||
" _ = f:close()"
|
||||
" local config = loadfile(home .. '/.config/hypr/hyprland-local.lua')"
|
||||
" if config then config() end"
|
||||
" end"
|
||||
"end"
|
||||
]
|
||||
);
|
||||
in
|
||||
{
|
||||
home.packages = [
|
||||
pkgs.hyprcursor
|
||||
@@ -44,177 +228,8 @@
|
||||
];
|
||||
};
|
||||
};
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
env = [
|
||||
"XCURSOR_THEME,BreezeX-RosePine-Linux"
|
||||
"XCURSOR_SIZE,24"
|
||||
"HYPRCURSOR_SIZE,24"
|
||||
"__GLX_VENDOR_LIBRARY_NAME,nvidia"
|
||||
"WEBKIT_DISABLE_DMABUF_RENDERER,1" # maybe disable if nixos fixes alcom
|
||||
];
|
||||
general = {
|
||||
gaps_in = 1;
|
||||
gaps_out = 1;
|
||||
border_size = 1;
|
||||
# "col.active_border" =
|
||||
# "rgb(${toString base16.rgb."base06".r},${toString base16.rgb."base06".g},${toString base16.rgb."base06".b})";
|
||||
# "col.inactive_border" =
|
||||
# "rgb(${toString base16.rgb."base03".r},${toString base16.rgb."base03".g},${toString base16.rgb."base03".b})";
|
||||
resize_on_border = false;
|
||||
allow_tearing = true;
|
||||
layout = "dwindle";
|
||||
};
|
||||
decoration = {
|
||||
rounding = 4;
|
||||
rounding_power = 1;
|
||||
active_opacity = 1.0;
|
||||
inactive_opacity = 1.0;
|
||||
|
||||
shadow = {
|
||||
enabled = false;
|
||||
};
|
||||
|
||||
blur = {
|
||||
enabled = true;
|
||||
passes = 1;
|
||||
new_optimizations = true;
|
||||
ignore_opacity = false;
|
||||
};
|
||||
};
|
||||
cursor = {
|
||||
no_hardware_cursors = false;
|
||||
};
|
||||
animations = {
|
||||
enabled = true;
|
||||
bezier = [
|
||||
"easeOutQuint,0.23,1,0.32,1"
|
||||
"easeInOutCubic,0.65,0.05,0.36,1"
|
||||
"linear,0,0,1,1"
|
||||
"almostLinear,0.5,0.5,0.75,1.0"
|
||||
"quick,0.15,0,0.1,1"
|
||||
];
|
||||
animation = [
|
||||
"global, 1, 10, default"
|
||||
"border, 1, 5.39, easeOutQuint"
|
||||
"windows, 1, 2.79, easeOutQuint"
|
||||
"windowsIn, 1, 1, easeOutQuint, popin 87%"
|
||||
"windowsOut, 1, 1, linear, popin 87%"
|
||||
"windowsMove, 1, 1, easeInOutCubic"
|
||||
"fadeIn, 1, 0.5, almostLinear"
|
||||
"fadeOut, 1, 0.5, almostLinear"
|
||||
"fade, 1, 1, quick"
|
||||
"layers, 1, 3.81, easeOutQuint"
|
||||
"layersIn, 1, 4, easeOutQuint, fade"
|
||||
"layersOut, 1, 1.5, linear, fade"
|
||||
"fadeLayersIn, 1, 1.79, almostLinear"
|
||||
"fadeLayersOut, 1, 1.39, almostLinear"
|
||||
"workspaces, 1, 1, almostLinear, slide"
|
||||
"workspacesIn, 1, 1, easeInOutCubic, slide"
|
||||
"workspacesOut, 1, 1, easeInOutCubic, slide"
|
||||
"zoomFactor, 1, 7, quick"
|
||||
];
|
||||
};
|
||||
dwindle = {
|
||||
# pseudotile = true;
|
||||
preserve_split = true;
|
||||
};
|
||||
# master = {
|
||||
# new_status = master;
|
||||
# };
|
||||
misc = {
|
||||
force_default_wallpaper = -1;
|
||||
disable_hyprland_logo = false;
|
||||
enable_anr_dialog = false;
|
||||
# vfr = true;
|
||||
};
|
||||
"$mainMod" = "SUPER";
|
||||
bind = [
|
||||
(
|
||||
let
|
||||
config = pkgs.writeTextFile {
|
||||
name = "config";
|
||||
text = ''
|
||||
width = 100%
|
||||
height = 100%
|
||||
border-width = 0
|
||||
outline-width = 0
|
||||
padding-left = 35%
|
||||
padding-top = 35%
|
||||
result-spacing = 25
|
||||
num-results = 5
|
||||
font = monospace
|
||||
background-color = #000A
|
||||
'';
|
||||
};
|
||||
script = pkgs.writeShellScript "mreow" ''
|
||||
exec $(tofi-drun -c ${config})
|
||||
'';
|
||||
in
|
||||
"$mainMod, R, exec, ${script}"
|
||||
)
|
||||
"$mainMod, C, killactive"
|
||||
"$mainMod, M, exec, uwsm stop"
|
||||
"$mainMod, Q, exec, kitty"
|
||||
"$mainMod, V, togglefloating,"
|
||||
# "$mainMod, P, pseudo, # dwindle"
|
||||
# "$mainMod, J, togglesplit, # dwindle"
|
||||
"$mainMod, left, movefocus, l"
|
||||
"$mainMod, right, movefocus, r"
|
||||
"$mainMod, up, movefocus, u"
|
||||
"$mainMod, down, movefocus, d"
|
||||
"$mainMod, L, exec, wlogout"
|
||||
(
|
||||
let
|
||||
script = pkgs.writeShellScript "meow" ''
|
||||
fish -c 'grim -g $(slurp) -t png - &| wl-copy -t image/png; killall wayfreeze'
|
||||
'';
|
||||
in
|
||||
"$mainMod, S, exec, " + "wayfreeze --after-freeze-cmd '${script}'"
|
||||
)
|
||||
"$mainMod, F, fullscreen"
|
||||
"$mainMod, mouse_down, workspace, e+1"
|
||||
"$mainMod, mouse_up, workspace, e-1"
|
||||
", home, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||
", end, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
|
||||
", F8, pass, class:^(com\.obsproject\.Studio)$"
|
||||
"$mainMod, 0, workspace, 10"
|
||||
"$mainMod SHIFT, 0, movetoworkspace, 10"
|
||||
]
|
||||
++ (builtins.concatLists (
|
||||
builtins.genList (
|
||||
i:
|
||||
let
|
||||
ws = i + 1;
|
||||
in
|
||||
[
|
||||
"$mainMod, ${toString ws}, workspace, ${toString ws}"
|
||||
"$mainMod SHIFT, ${toString ws}, movetoworkspace, ${toString ws}"
|
||||
]
|
||||
) 9
|
||||
));
|
||||
bindm = [
|
||||
"$mainMod, mouse:272, movewindow"
|
||||
"$mainMod, mouse:273, resizewindow"
|
||||
];
|
||||
windowrule = [
|
||||
"match:class .*, suppress_event maximize"
|
||||
"match:class ^(gamescope)$, workspace 5"
|
||||
"match:class ^(gamescope)$, immediate true"
|
||||
"match:class ^(gamescope)$, confine_pointer true"
|
||||
"match:class ^(steam)$, workspace 6 silent"
|
||||
"match:class ^(vesktop)$, workspace 8 silent"
|
||||
"match:class ^(org.telegram.desktop)$, workspace 8 silent"
|
||||
"match:class ^(com.obsproject.Studio)$, workspace 10 silent"
|
||||
"match:initial_title ^(OBS Studio Crash Detected)$, pin true"
|
||||
"match:initial_title ^(Discord Popout)$, workspace 1 silent"
|
||||
];
|
||||
layerrule = [
|
||||
"match:namespace ^(notifications)$, no_screen_share true"
|
||||
# "match:namespace ^(quickshell)$, blur true"
|
||||
];
|
||||
# exec-once = [
|
||||
# ];
|
||||
# we need to auto launch: quickshell, steam, ar_rpc (maybe), vesktop, telegram, qbit, and obs
|
||||
xdg.configFile."hypr/hyprland.lua" = {
|
||||
source = pkgs.writeText "hyprland.lua" hlBindCode;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user