mirror of
https://github.com/Theaninova/TheaninovOS.git
synced 2026-07-25 01:54:48 +00:00
update system
This commit is contained in:
@@ -14,77 +14,97 @@ let
|
||||
'';
|
||||
};
|
||||
cfg = osConfig.desktops.hyprland;
|
||||
bind = bind: action: {
|
||||
_args = [
|
||||
bind
|
||||
(lib.generators.mkLuaInline action)
|
||||
];
|
||||
};
|
||||
bindm = bind: action: {
|
||||
_args = [
|
||||
bind
|
||||
(lib.generators.mkLuaInline action)
|
||||
{ mouse = true; }
|
||||
];
|
||||
};
|
||||
in
|
||||
{
|
||||
config = lib.mkIf cfg.enable {
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
configType = "lua";
|
||||
settings = {
|
||||
general = {
|
||||
allow_tearing = true;
|
||||
layout = lib.mkIf cfg.scrolling "scrolling";
|
||||
};
|
||||
input = {
|
||||
accel_profile = "flat";
|
||||
kb_layout = osConfig.services.xserver.xkb.layout;
|
||||
kb_variant = osConfig.services.xserver.xkb.variant;
|
||||
config = {
|
||||
general = {
|
||||
allow_tearing = true;
|
||||
layout = lib.mkIf cfg.scrolling "scrolling";
|
||||
};
|
||||
input = {
|
||||
accel_profile = "flat";
|
||||
kb_layout = osConfig.services.xserver.xkb.layout;
|
||||
kb_variant = osConfig.services.xserver.xkb.variant;
|
||||
touchpad.natural_scroll = true;
|
||||
};
|
||||
misc = {
|
||||
layers_hog_keyboard_focus = false;
|
||||
disable_hyprland_logo = true;
|
||||
disable_splash_rendering = true;
|
||||
vrr = lib.mkDefault 2;
|
||||
enable_swallow = true;
|
||||
swallow_regex = "^kitty$";
|
||||
};
|
||||
binds.scroll_event_delay = 0;
|
||||
decoration.border_part_of_window = false;
|
||||
};
|
||||
bind = [
|
||||
"SUPER,C,killactive"
|
||||
"SUPER,P,togglefloating,"
|
||||
"SUPER,P,pin,"
|
||||
"SUPER,D,fullscreen,1"
|
||||
"SUPER,V,fullscreen,0"
|
||||
(bind "SUPER + C" "hl.dsp.window.close()")
|
||||
(bind "SUPER + P" ''
|
||||
function()
|
||||
hl.dsp.window.float()
|
||||
hl.dsp.window.pin()
|
||||
end
|
||||
'')
|
||||
(bind "SUPER + D" "hl.dsp.window.fullscreen({ mode = 'maximized' })")
|
||||
(bind "SUPER + V" "hl.dsp.window.fullscreen({ mode = 'fullscreen' })")
|
||||
|
||||
"SUPER,f,workspace,r-1"
|
||||
"SUPER,h,workspace,r+1"
|
||||
"SUPER_SHIFT,f,movetoworkspace,r-1"
|
||||
"SUPER_SHIFT,h,movetoworkspace,r+1"
|
||||
(bind "SUPER + F" "hl.dsp.focus({ workspace = 'r-1' })")
|
||||
(bind "SUPER + H" "hl.dsp.focus({ workspace = 'r+1' })")
|
||||
(bind "SUPER + SHIFT + F" "hl.dsp.window.move({ workspace = 'r-1' })")
|
||||
(bind "SUPER + SHIFT + H" "hl.dsp.window.move({ workspace = 'r+1' })")
|
||||
|
||||
(bindm "SUPER + mouse:272" "hl.dsp.window.drag()")
|
||||
(bindm "SUPER + mouse:273" "hl.dsp.window.resize()")
|
||||
]
|
||||
++ (
|
||||
if cfg.scrolling then
|
||||
[
|
||||
"SUPER,up,layoutmsg,focus u"
|
||||
"SUPER,down,layoutmsg,focus d"
|
||||
"SUPER,right,layoutmsg,focus r"
|
||||
"SUPER,left,layoutmsg,focus l"
|
||||
(bind "SUPER + SHIFT + LEFT" "hl.dsp.layout('swapcol l')")
|
||||
(bind "SUPER + SHIFT + RIGHT" "hl.dsp.layout('swapcol r')")
|
||||
|
||||
"SUPER_SHIFT,up,layoutmsg,movewindowto u"
|
||||
"SUPER_SHIFT,down,layoutmsg,movewindowto d"
|
||||
"SUPER_SHIFT,left,layoutmsg,swapcol l"
|
||||
"SUPER_SHIFT,right,layoutmsg,swapcol r"
|
||||
(bind "SUPER + UP" "hl.dsp.layout('focus u')")
|
||||
(bind "SUPER + DOWN" "hl.dsp.layout('focus d')")
|
||||
(bind "SUPER + LEFT" "hl.dsp.layout('focus l')")
|
||||
(bind "SUPER + RIGHT" "hl.dsp.layout('focus r')")
|
||||
|
||||
"SUPER,mouse_up,layoutmsg,focus r"
|
||||
"SUPER,mouse_down,layoutmsg,focus l"
|
||||
(bind "SUPER + mouse_up" "hl.dsp.layout('focus r')")
|
||||
(bind "SUPER + mouse_down" "hl.dsp.layout('focus l')")
|
||||
]
|
||||
else
|
||||
[
|
||||
"SUPER_SHIFT,up,movewindow,u"
|
||||
"SUPER_SHIFT,down,movewindow,d"
|
||||
"SUPER_SHIFT,left,movewindow,l"
|
||||
"SUPER_SHIFT,right,movewindow,r"
|
||||
(bind "SUPER + SHIFT + UP" "hl.dsp.window.move({ direction = 'up' })")
|
||||
(bind "SUPER + SHIFT + DOWN" "hl.dsp.window.move({ direction = 'down' })")
|
||||
(bind "SUPER + SHIFT + LEFT" "hl.dsp.window.move({ direction = 'left' })")
|
||||
(bind "SUPER + SHIFT + RIGHT" "hl.dsp.window.move({ direction = 'right' })")
|
||||
|
||||
"SUPER,up,movefocus,u"
|
||||
"SUPER,down,movefocus,d"
|
||||
"SUPER,left,movefocus,l"
|
||||
"SUPER,right,movefocus,r"
|
||||
(bind "SUPER + UP" "hl.dsp.focus({ direction = 'up' })")
|
||||
(bind "SUPER + DOWN" "hl.dsp.focus({ direction = 'down' })")
|
||||
(bind "SUPER + LEFT" "hl.dsp.focus({ direction = 'left' })")
|
||||
(bind "SUPER + RIGHT" "hl.dsp.focus({ direction = 'right' })")
|
||||
|
||||
"SUPER,mouse_up,workspace,r+1"
|
||||
"SUPER,mouse_down,workspace,r-1"
|
||||
(bind "SUPER + mouse_up" "hl.dsp.focus({ workspace = 'r-1' })")
|
||||
(bind "SUPER + mouse_down" "hl.dsp.focus({ workspace = 'r+1' })")
|
||||
]
|
||||
);
|
||||
bindm = [
|
||||
"SUPER,mouse:272,movewindow"
|
||||
"SUPER,mouse:273,resizewindow"
|
||||
];
|
||||
misc = {
|
||||
layers_hog_keyboard_focus = false;
|
||||
disable_hyprland_logo = true;
|
||||
disable_splash_rendering = true;
|
||||
vrr = lib.mkDefault 2;
|
||||
};
|
||||
decoration.border_part_of_window = false;
|
||||
input.touchpad.natural_scroll = true;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -29,10 +29,10 @@
|
||||
];
|
||||
};
|
||||
};
|
||||
wayland.windowManager.hyprland.settings.windowrule = [
|
||||
wayland.windowManager.hyprland.settings.window_rule = [
|
||||
{
|
||||
name = "Suppress maximize for neovide";
|
||||
"match:class" = "^(neovide)$";
|
||||
match.class = "^(neovide)$";
|
||||
suppress_event = "maximize";
|
||||
}
|
||||
];
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
general {
|
||||
col.inactive_border = 0x00000000
|
||||
col.active_border = 0x00000000
|
||||
# col.inactive_border = rgba({{colors.surface.default.hex_stripped}}{{custom.transparency_hex | to_lower}})
|
||||
# col.active_border = rgb({{colors.primary.default.hex_stripped}})
|
||||
border_size = 0
|
||||
extend_border_grab_area = 4
|
||||
gaps_in = {{custom.padding}}
|
||||
gaps_out = {{custom.double_padding}}
|
||||
}
|
||||
|
||||
decoration {
|
||||
rounding = {{custom.radius}}
|
||||
|
||||
blur {
|
||||
size = {{custom.blur}}
|
||||
passes = 3
|
||||
popups = true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
hl.config({
|
||||
general = {
|
||||
col = {
|
||||
inactive_border = "rgba(00000000)",
|
||||
active_border = "rgba(00000000)",
|
||||
},
|
||||
border_size = 0,
|
||||
extend_border_grab_area = 4,
|
||||
-- stylua: ignore
|
||||
gaps_in = {{custom.padding}},
|
||||
-- stylua: ignore
|
||||
gaps_out = {{custom.double_padding}},
|
||||
},
|
||||
decoration = {
|
||||
-- stylua: ignore
|
||||
rounding = {{custom.radius}},
|
||||
blur = {
|
||||
-- stylua: ignore
|
||||
size = {{custom.blur}},
|
||||
passes = 3,
|
||||
popups = true,
|
||||
},
|
||||
inactive_opacity = 0.8,
|
||||
shadow = {
|
||||
enabled = true,
|
||||
range = 32,
|
||||
render_power = 8,
|
||||
color = "rgba(000000aa)",
|
||||
color_inactive = "rgba(00000011)",
|
||||
},
|
||||
},
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.curve("default", { type = "spring", mass = 1, stiffness = 90, dampening = 30 })
|
||||
hl.curve("linear", { type = "bezier", points = { { 0.5, 0.5 }, { 0.5, 0.5 } } })
|
||||
|
||||
hl.animation({ leaf = "windows", enabled = true, speed = 1, spring = "default", style = "slide" })
|
||||
hl.animation({ leaf = "windowsIn", enabled = true, speed = 1, spring = "default", style = "slide bottom" })
|
||||
hl.animation({ leaf = "windowsOut", enabled = true, speed = 1, spring = "default", style = "slide bottom" })
|
||||
|
||||
hl.animation({ leaf = "border", enabled = true, speed = 1, spring = "default" })
|
||||
|
||||
hl.animation({ leaf = "fade", enabled = true, speed = 3, bezier = "linear" })
|
||||
hl.animation({ leaf = "fadeShadow", enabled = true, speed = 4, bezier = "linear" })
|
||||
hl.animation({ leaf = "fadeDim", enabled = true, speed = 4, bezier = "linear" })
|
||||
|
||||
hl.animation({ leaf = "workspaces", enabled = true, speed = 1, spring = "default" })
|
||||
@@ -189,104 +189,106 @@ in
|
||||
pkgs.zenity
|
||||
pkgs.sunwait
|
||||
];
|
||||
text = ''
|
||||
WALLPAPER=${config.xdg.configHome}/matugen/wallpaper
|
||||
STATE=${config.xdg.stateHome}/md3-evo
|
||||
text =
|
||||
# sh
|
||||
''
|
||||
WALLPAPER=${config.xdg.configHome}/matugen/wallpaper
|
||||
STATE=${config.xdg.stateHome}/md3-evo
|
||||
|
||||
SCHEME=$(dconf read /org/gnome/desktop/interface/color-scheme)
|
||||
if [ "$SCHEME" = "'prefer-light'" ]; then
|
||||
MODE="light"
|
||||
else
|
||||
MODE="dark"
|
||||
fi
|
||||
|
||||
if [ ! -d "$STATE" ]; then
|
||||
mkdir -p "$STATE"
|
||||
fi
|
||||
if [ -f "$STATE/mode" ]; then
|
||||
MODE=$(cat "$STATE/mode")
|
||||
fi
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo -e "\033[1mUsage:\033[0m mode|light|dark|auto|toggle|wallpaper"
|
||||
exit 1
|
||||
elif [ "$1" = "mode" ]; then
|
||||
echo -e "$MODE"
|
||||
exit 0
|
||||
elif [ "$1" = "wallpaper" ]; then
|
||||
if [ $# -eq 1 ]; then
|
||||
PICKED=$(zenity --file-selection --file-filter='Images | *.png *.jpg *.jpeg *.svg *.bmp *.gif')
|
||||
cp "$PICKED" "$WALLPAPER"
|
||||
SCHEME=$(dconf read /org/gnome/desktop/interface/color-scheme)
|
||||
if [ "$SCHEME" = "'prefer-light'" ]; then
|
||||
MODE="light"
|
||||
else
|
||||
cp "$2" "$WALLPAPER"
|
||||
MODE="dark"
|
||||
fi
|
||||
elif [ "$1" = "toggle" ]; then
|
||||
|
||||
if [ ! -d "$STATE" ]; then
|
||||
mkdir -p "$STATE"
|
||||
fi
|
||||
if [ -f "$STATE/mode" ]; then
|
||||
MODE=$(cat "$STATE/mode")
|
||||
fi
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo -e "\033[1mUsage:\033[0m mode|light|dark|auto|toggle|wallpaper"
|
||||
exit 1
|
||||
elif [ "$1" = "mode" ]; then
|
||||
echo -e "$MODE"
|
||||
exit 0
|
||||
elif [ "$1" = "wallpaper" ]; then
|
||||
if [ $# -eq 1 ]; then
|
||||
PICKED=$(zenity --file-selection --file-filter='Images | *.png *.jpg *.jpeg *.svg *.bmp *.gif')
|
||||
cp "$PICKED" "$WALLPAPER"
|
||||
else
|
||||
cp "$2" "$WALLPAPER"
|
||||
fi
|
||||
elif [ "$1" = "toggle" ]; then
|
||||
if [ "$MODE" = "light" ]; then
|
||||
MODE="dark"
|
||||
else
|
||||
MODE="light"
|
||||
fi
|
||||
echo "$MODE" > "$STATE/mode"
|
||||
elif [ "$1" = "light" ] || [ "$1" = "dark" ] || [ "$1" == "auto" ]; then
|
||||
MODE="$1"
|
||||
echo "$MODE" > "$STATE/mode"
|
||||
elif [ "$1" = "init" ]; then
|
||||
echo -e "\033[1mSetting up matugen\033[0m"
|
||||
else
|
||||
echo -e "\033[31mInvalid argument\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f $WALLPAPER ]; then
|
||||
echo -e "\033[31,1mNo wallpaper set\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
THEME_SERVICE_PATH="${config.xdg.configHome}/systemd/user/theme-init.timer"
|
||||
if [ "$MODE" = "auto" ]; then
|
||||
TIME=$(sunwait poll ${builtins.toString cfg.auto-dark.lat}N ${builtins.toString cfg.auto-dark.lon}E || :)
|
||||
if [ "$TIME" = "DAY" ]; then
|
||||
MODE="light"
|
||||
NEXT=6
|
||||
else
|
||||
MODE="dark"
|
||||
NEXT=4
|
||||
fi
|
||||
NEXT=$(sunwait report ${builtins.toString cfg.auto-dark.lat}N ${builtins.toString cfg.auto-dark.lon}E | awk "/Daylight:/ {print \$$NEXT}")
|
||||
cat <<EOF | tee "$THEME_SERVICE_PATH" > /dev/null
|
||||
[Unit]
|
||||
Description=Next theme change timer
|
||||
|
||||
[Timer]
|
||||
OnCalendar=*-*-* $(date -d "$NEXT today + 5 minutes" +'%H:%M'):00
|
||||
AccuracySec=1min
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
EOF
|
||||
else
|
||||
rm -f "$THEME_SERVICE_PATH"
|
||||
fi
|
||||
systemctl --user daemon-reload &> /dev/null || :
|
||||
systemctl --user restart theme-init.timer &> /dev/null || :
|
||||
|
||||
if command -v niri &> /dev/null; then
|
||||
niri msg action do-screen-transition --delay-ms 500
|
||||
fi
|
||||
|
||||
if [ "$MODE" = "light" ]; then
|
||||
MODE="dark"
|
||||
GTK_THEME="adw-gtk3"
|
||||
else
|
||||
MODE="light"
|
||||
GTK_THEME="adw-gtk3-dark"
|
||||
fi
|
||||
echo "$MODE" > "$STATE/mode"
|
||||
elif [ "$1" = "light" ] || [ "$1" = "dark" ] || [ "$1" == "auto" ]; then
|
||||
MODE="$1"
|
||||
echo "$MODE" > "$STATE/mode"
|
||||
elif [ "$1" = "init" ]; then
|
||||
echo -e "\033[1mSetting up matugen\033[0m"
|
||||
else
|
||||
echo -e "\033[31mInvalid argument\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f $WALLPAPER ]; then
|
||||
echo -e "\033[31,1mNo wallpaper set\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
matugen image "$WALLPAPER" --type scheme-${cfg.flavour} --contrast ${builtins.toString cfg.contrast} --mode "$MODE"
|
||||
awww img "$WALLPAPER"
|
||||
|
||||
THEME_SERVICE_PATH="${config.xdg.configHome}/systemd/user/theme-init.timer"
|
||||
if [ "$MODE" = "auto" ]; then
|
||||
TIME=$(sunwait poll ${builtins.toString cfg.auto-dark.lat}N ${builtins.toString cfg.auto-dark.lon}E || :)
|
||||
if [ "$TIME" = "DAY" ]; then
|
||||
MODE="light"
|
||||
NEXT=6
|
||||
else
|
||||
MODE="dark"
|
||||
NEXT=4
|
||||
fi
|
||||
NEXT=$(sunwait report ${builtins.toString cfg.auto-dark.lat}N ${builtins.toString cfg.auto-dark.lon}E | awk "/Daylight:/ {print \$$NEXT}")
|
||||
cat <<EOF | tee "$THEME_SERVICE_PATH" > /dev/null
|
||||
[Unit]
|
||||
Description=Next theme change timer
|
||||
|
||||
[Timer]
|
||||
OnCalendar=*-*-* $(date -d "$NEXT today + 5 minutes" +'%H:%M'):00
|
||||
AccuracySec=1min
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
EOF
|
||||
else
|
||||
rm -f "$THEME_SERVICE_PATH"
|
||||
fi
|
||||
systemctl --user daemon-reload &> /dev/null || :
|
||||
systemctl --user restart theme-init.timer &> /dev/null || :
|
||||
|
||||
if command -v niri &> /dev/null; then
|
||||
niri msg action do-screen-transition --delay-ms 500
|
||||
fi
|
||||
|
||||
if [ "$MODE" = "light" ]; then
|
||||
GTK_THEME="adw-gtk3"
|
||||
else
|
||||
GTK_THEME="adw-gtk3-dark"
|
||||
fi
|
||||
|
||||
matugen image "$WALLPAPER" --type scheme-${cfg.flavour} --contrast ${builtins.toString cfg.contrast} --mode "$MODE"
|
||||
awww img "$WALLPAPER"
|
||||
|
||||
dconf write /org/gnome/desktop/interface/gtk-theme "'$GTK_THEME'"
|
||||
dconf write /org/gnome/desktop/interface/color-scheme "'prefer-$MODE'"
|
||||
dconf write /org/gnome/desktop/interface/icon-theme "'Adwaita'"
|
||||
'';
|
||||
dconf write /org/gnome/desktop/interface/gtk-theme "'$GTK_THEME'"
|
||||
dconf write /org/gnome/desktop/interface/color-scheme "'prefer-$MODE'"
|
||||
dconf write /org/gnome/desktop/interface/icon-theme "'Tela'"
|
||||
'';
|
||||
}
|
||||
);
|
||||
in
|
||||
@@ -294,6 +296,7 @@ in
|
||||
home.packages = [
|
||||
pkgs.adw-gtk3
|
||||
pkgs.awww
|
||||
pkgs.tela-icon-theme
|
||||
theme-script
|
||||
];
|
||||
|
||||
@@ -344,44 +347,18 @@ in
|
||||
};
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
settings = {
|
||||
windowrule = [
|
||||
{
|
||||
name = "floating-zenity";
|
||||
"match:class" = "^(zenity)$";
|
||||
float = true;
|
||||
}
|
||||
];
|
||||
decoration = {
|
||||
inactive_opacity = 0.8;
|
||||
shadow = {
|
||||
enabled = true;
|
||||
range = 32;
|
||||
render_power = 8;
|
||||
color = "rgba(000000aa)";
|
||||
color_inactive = "rgba(00000011)";
|
||||
};
|
||||
};
|
||||
animations = {
|
||||
enabled = "yes";
|
||||
bezier = [
|
||||
"expoOut, 0.16, 1, 0.3, 1"
|
||||
];
|
||||
animation = [
|
||||
"windowsIn, 1, 5, expoOut, slide bottom"
|
||||
"windows, 1, 5, expoOut, slide"
|
||||
"windowsOut, 1, 5, expoOut, slide bottom"
|
||||
"border, 1, 10, default"
|
||||
"fade, 1, 7, default"
|
||||
"fadeShadow, 1, 10, default"
|
||||
"fadeDim, 1, 10, default"
|
||||
"workspaces, 1, 6, default"
|
||||
];
|
||||
};
|
||||
};
|
||||
extraConfig = ''
|
||||
source=./theme.conf
|
||||
'';
|
||||
settings.window_rule = [
|
||||
{
|
||||
name = "floating-zenity";
|
||||
match.class = "^(zenity)$";
|
||||
float = true;
|
||||
}
|
||||
];
|
||||
extraConfig =
|
||||
# lua
|
||||
''
|
||||
require("theme")
|
||||
'';
|
||||
};
|
||||
|
||||
# TODO: include is coming in the next release
|
||||
@@ -518,8 +495,8 @@ in
|
||||
})
|
||||
// (lib.optionalAttrs osConfig.programs.hyprland.enable {
|
||||
hyprland = {
|
||||
input_path = ./hyprland.conf;
|
||||
output_path = "${config.xdg.configHome}/hypr/theme.conf";
|
||||
input_path = ./hyprland.lua;
|
||||
output_path = "${config.xdg.configHome}/hypr/theme.lua";
|
||||
post_hook = pkgs.writeShellScript "reload-hyprland-theme" ''
|
||||
if command -v hyprctl &> /dev/null; then
|
||||
hyprctl reload
|
||||
|
||||
Reference in New Issue
Block a user