Compare commits

...
4 Commits
Author SHA1 Message Date
Theaninova fa6b2a387e update system 2026-06-25 10:49:08 +02:00
Theaninova 5f6fbdc0ac feat: audio cast 2026-06-09 14:39:32 +02:00
Theaninova cf2108ad82 update system 2026-06-06 13:11:00 +02:00
Theaninova 7c3a4f9cb6 update system 2026-05-25 14:04:30 +02:00
29 changed files with 651 additions and 385 deletions
Generated
+34 -33
View File
@@ -24,11 +24,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1774640361,
"narHash": "sha256-5PLTPbnbtK0iDbsB9yFeHr5y/pv6/XzoVm/CDeXXt/c=",
"lastModified": 1775706155,
"narHash": "sha256-h7Rw0vlb0n0Jsk21WJPm7H+1T1bG+PEuxE5cJ2TZl8A=",
"owner": "abenz1267",
"repo": "elephant",
"rev": "d30652147d8e16ebc849b779b8ef495a894b0dd4",
"rev": "376ee71c66db38683daabd57350bf3f6f086eaf8",
"type": "github"
},
"original": {
@@ -45,11 +45,11 @@
]
},
"locked": {
"lastModified": 1769996383,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
"lastModified": 1778716662,
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
"type": "github"
},
"original": {
@@ -65,11 +65,11 @@
]
},
"locked": {
"lastModified": 1775622785,
"narHash": "sha256-/yFxO+7oS1SymDfJ2iVO7K5vJKcYfe9XGIJ+quLqz0Q=",
"lastModified": 1781009359,
"narHash": "sha256-w/mZkRscTatf8NWyUstli8ROzM/eopxZzi0WRjoeYkU=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "527e47b78fe67213072f706bf933a9705a8c4974",
"rev": "c58ead12efcac436afffa93a22099a5595eb4157",
"type": "github"
},
"original": {
@@ -112,11 +112,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
"lastModified": 1775566751,
"narHash": "sha256-5Xkx4NQvl2azAQe3lCZCMUx4FiwGOlEb+I4kyycQYw8=",
"lastModified": 1780944960,
"narHash": "sha256-/Tzx2TY0IVm/ptBvkKaLdOHADpM7xsUMfBKOpCibH1M=",
"owner": "sodiboo",
"repo": "niri-flake",
"rev": "6aa49a9c5b82911459e230db5bd64289082d4354",
"rev": "da6577a9bef8a4d7a9d7a2a0dc1e1089edb46bed",
"type": "github"
},
"original": {
@@ -145,11 +145,11 @@
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1775561155,
"narHash": "sha256-TK2IrqQivRcwqJa0suZMbcsN17CtA8Uu0v7CDnLATb0=",
"lastModified": 1780938415,
"narHash": "sha256-QHyIMGSbCQW8d5qbOrMsm6gem10bO3Au2YLa3alJfHo=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "599db847f857b8a7ff78ce02f15acab5d5d9fee1",
"rev": "6f1a2c5f0e8274223d4204b1f8d6f7f91538967e",
"type": "github"
},
"original": {
@@ -176,11 +176,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1775423009,
"narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=",
"lastModified": 1780749050,
"narHash": "sha256-3av0pIjlOWQ6rDbNOmpUSvbNnJkGORQKKjb4LtCZsIY=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9",
"rev": "a799d3e3886da994fa307f817a6bc705ae538eeb",
"type": "github"
},
"original": {
@@ -192,11 +192,11 @@
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1775305101,
"narHash": "sha256-/74n1oQPtKG52Yw41cbToxspxHbYz6O3vi+XEw16Qe8=",
"lastModified": 1780511130,
"narHash": "sha256-2v9lT4ya59Lh1FqPeLnz1MoX9y/wz2huqfe9RtQZITk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "36a601196c4ebf49e035270e10b2d103fe39076b",
"rev": "535f3e6942cb1cead3929c604320d3db54b542b9",
"type": "github"
},
"original": {
@@ -215,11 +215,11 @@
"systems": "systems_3"
},
"locked": {
"lastModified": 1775307257,
"narHash": "sha256-y9hEecHH4ennFwIcw1n480YCGh73DkEmizmQnyXuvgg=",
"lastModified": 1780995253,
"narHash": "sha256-6Lsoyw2XPvY8YNMCtPnsyw0JVVtHsXP2xtrFJBBTAOQ=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "2e008bb941f72379d5b935d5bfe70ed8b7c793ff",
"rev": "43a7e6f82978ac975c3bba6728869b231e7a1ba0",
"type": "github"
},
"original": {
@@ -289,15 +289,16 @@
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"lastModified": 1774449309,
"narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"rev": "c29398b59d2048c4ab79345812849c9bd15e9150",
"type": "github"
},
"original": {
"owner": "nix-systems",
"ref": "future-26.11",
"repo": "default",
"type": "github"
}
@@ -403,11 +404,11 @@
"systems": "systems_4"
},
"locked": {
"lastModified": 1773675699,
"narHash": "sha256-GrormZ2KxchtCLuO90+5fioEQmlUCKBIil0Mzr9w0Iw=",
"lastModified": 1777789924,
"narHash": "sha256-fX3ErzTmHRO9z1SzHC2VZUgKOgRfO13X/joC5a3QN7Q=",
"owner": "abenz1267",
"repo": "walker",
"rev": "d2702235710da3d7daf55c912ca7534261cf20f5",
"rev": "93d44d1cb41732e1370e4b949429ae8e34ea05a4",
"type": "github"
},
"original": {
@@ -436,11 +437,11 @@
"xwayland-satellite-unstable": {
"flake": false,
"locked": {
"lastModified": 1773622265,
"narHash": "sha256-wToKwH7IgWdGLMSIWksEDs4eumR6UbbsuPQ42r0oTXQ=",
"lastModified": 1779745227,
"narHash": "sha256-yqY7RtEJGJiENzR0GwL6q69tSAy6xAAmAcLuIhLjPf8=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "a879e5e0896a326adc79c474bf457b8b99011027",
"rev": "5d1efbc9dc3ab1c10160b656e0247f3325daf0f2",
"type": "github"
},
"original": {
+12 -2
View File
@@ -67,7 +67,17 @@
hardware = {
amdgpu.preset.default.enable = true;
audio.preset.pipewire.enable = true;
audio = {
preset.pipewire.enable = true;
audio-share = {
enable = true;
partner = {
ip = "192.168.0.51";
name = "Luci";
combine = "astro-a50-eq-harman-in";
};
};
};
cc1.enable = true;
fv43u.enable = true;
astro-a50.enable = true;
@@ -123,7 +133,7 @@
programs = {
zsh.enable = true;
wireshark = {
enable = true;
enable = false;
package = pkgs.wireshark;
usbmon.enable = true;
};
+1
View File
@@ -14,6 +14,7 @@
extraConfig.PROJECTS = "${config.home.homeDirectory}/Projects";
};
programs.zoxide.enable = true;
services.jellyfin-mpv-shim.enable = true;
wayland.windowManager.hyprland.settings.device =
let
targetDPI = 1200;
+26 -8
View File
@@ -13,18 +13,37 @@
packages = with pkgs; [
blueman
kdePackages.okular
(pkgs.writeShellApplication {
name = "shut";
text = ''
shutdown now
'';
})
];
};
wayland.windowManager.hyprland.settings = {
general.layout = "master";
master = {
orientation = "right";
mfact = 0.65;
always_keep_position = true;
config = {
general.layout = "master";
master = {
orientation = "right";
mfact = 0.65;
always_keep_position = true;
};
input.kb_options = "lv3:caps_switch";
};
monitor = [
"eDP-1,3840x2160@60,0x0,2"
"HDMI-A-4,2560x1440@75,1920x-768,1"
{
output = "eDP-1";
mode = "3840x2160@60";
position = "0x0";
scale = 2;
}
{
output = "HDMI-A-4";
mode = "2560x1440@75";
position = "1920x-768";
scale = 1;
}
];
};
systemd.user.services = {
@@ -52,6 +71,5 @@
};
};
wayland.windowManager.hyprland.settings.input.kb_options = [ "lv3:caps_switch" ];
services.nextcloud-client.enable = true;
}
+11 -1
View File
@@ -72,7 +72,17 @@
hardware = {
q3279vwf.enable = true;
audio.preset.pipewire.enable = true;
audio = {
preset.pipewire.enable = true;
audio-share = {
enable = true;
partner = {
ip = "192.168.0.84";
name = "Thea";
combine = "alsa_output.usb-SteelSeries_Arctis_Pro_Wireless-00.pro-output-0";
};
};
};
cc1.enable = true;
nvidia.preset.proprietary.enable = true;
+7 -1
View File
@@ -15,9 +15,15 @@
kdePackages.okular
bitbox
gamma-launcher
(pkgs.writeShellApplication {
name = "shut";
text = ''
shutdown now
'';
})
];
};
wayland.windowManager.hyprland.settings.input.kb_options = [ "lv3:caps_switch" ];
wayland.windowManager.hyprland.settings.config.input.kb_options = "lv3:caps_switch";
services.nextcloud-client.enable = true;
systemd.user.services = {
nm-applet = {
@@ -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;
};
};
+1 -2
View File
@@ -14,13 +14,12 @@
tone-mapping = "mobius";
};
};
services.jellyfin-mpv-shim.enable = true;
home.packages = with pkgs; [
# nix
cachix
# lorri
vulnix
gccdiag
# gccdiag
# browsers
firefox
+2 -2
View File
@@ -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";
}
];
-20
View File
@@ -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
}
}
+53
View File
@@ -0,0 +1,53 @@
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}},
--[[ motion_blur = {
enabled = true,
},]]
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", style = "slidevert" })
+107 -130
View File
@@ -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
+1
View File
@@ -11,6 +11,7 @@
./fonts/nerd-fonts.nix
./fonts/open-dyslexic.nix
./hardware/audio-share.nix
./hardware/astro-a50.nix
./hardware/audio.nix
./hardware/gbmonctl.nix
+1 -1
View File
@@ -28,7 +28,7 @@ in
systemd.enable = false;
package = null;
portalPackage = null;
settings = {
settings.config = {
ecosystem = {
no_update_news = true;
no_donation_nag = true;
+157
View File
@@ -0,0 +1,157 @@
{
pkgs,
lib,
config,
username,
...
}:
with lib;
let
cfg = config.hardware.audio.audio-share;
in
{
options.hardware.audio.audio-share = {
enable = mkEnableOption "LAN Audio Sharing";
partner = mkOption {
type = types.submodule {
options = {
ip = mkOption {
type = types.str;
description = "The IP address of the partner machine to share audio with.";
};
name = mkOption {
type = types.str;
description = "Name of the partner machine (for display purposes)";
};
combine = mkOption {
type = types.str;
description = "Name of the sink to combine the shared output with";
};
};
};
};
};
config =
let
sourcePort = 10001;
repairPort = 10002;
controlPort = 10003;
sinkName = "combined_output_3";
in
mkIf cfg.enable {
networking.firewall.allowedUDPPorts = [
sourcePort
repairPort
controlPort
];
home-manager.users.${username} = {
programs.waybar.settings.mainBar = {
"pulseaudio" = {
format-icons.${sinkName} = "󱝉";
on-click-right = lib.getExe (
pkgs.writeShellApplication {
name = "toggle-audio-share";
runtimeEnv = {
SINK_A = sinkName;
SINK_B = cfg.partner.combine;
};
text = builtins.readFile ./audio-share.sh;
}
);
};
};
xdg.configFile = {
"pipewire/pipewire.conf.d/52-audio-share.conf".text = builtins.toJSON {
"context.modules" = [
{
name = "libpipewire-module-roc-source";
args = {
"local.ip" = "0.0.0.0";
"roc.resampler.backend" = "default";
"roc.resampler.profile" = "default";
"roc.latency-tuner.backend" = "default";
"roc.latency-tuner.profile" = "default";
"fec.code" = "default";
"sess.latency.msec" = 100;
"local.source.port" = sourcePort;
"local.repair.port" = repairPort;
"local.control.port" = controlPort;
};
}
];
};
"pipewire/pipewire.conf.d/52-audio-share-sink.conf".text = builtins.toJSON {
"context.modules" = [
{
name = "libpipewire-module-roc-sink";
args = {
"fec.code" = "default";
"remote.ip" = cfg.partner.ip;
"remote.source.port" = sourcePort;
"remote.repair.port" = repairPort;
"remote.control.port" = controlPort;
"sink.props" = {
"node.name" = cfg.partner.name;
"node.description" = cfg.partner.name;
};
};
}
{
name = "libpipewire-module-combine-stream";
args = {
"combine.mode" = "sink";
"node.name" = sinkName;
"node.description" = "Shared Audio Output";
"combine.latency-compensate" = true;
"combine.props" = {
audio.position = [
"FL"
"FR"
];
};
"stream.rules" =
let
actions = {
create-stream = {
"combine.audio.position" = [
"FL"
"FR"
];
"audio.position" = [
"FL"
"FR"
];
};
};
in
[
{
matches = [
{
"media.class" = "Audio/Sink";
"node.name" = cfg.partner.combine;
}
];
inherit actions;
}
{
matches = [
{
"media.class" = "Audio/Sink";
"node.name" = cfg.partner.name;
}
];
inherit actions;
}
];
};
}
];
};
};
};
};
}
+22
View File
@@ -0,0 +1,22 @@
set -eu
get_id() {
pw-dump | jq -r --arg name "$1" '
.[]
| select(.type == "PipeWire:Interface:Node")
| select(.info.props["node.name"] == $name)
| .id
'
}
ID_A=$(get_id "$SINK_A")
ID_B=$(get_id "$SINK_B")
CURRENT_ID=$(wpctl inspect @DEFAULT_AUDIO_SINK@ |
awk '$1 == "id" { gsub(",", "", $2); print $2 }')
if [ "$CURRENT_ID" = "$ID_A" ]; then
wpctl set-default "$ID_B"
else
wpctl set-default "$ID_A"
fi
+73 -101
View File
@@ -32,120 +32,92 @@ in
'')
];
home-manager.users.${username} =
let
monitorline = "DP-3,3840x2160@144,0x0,1,bitdepth,10,cm,${if cfg.hdr then "hdr" else "srgb"}";
in
{
programs.mpv.config = {
vo = "gpu-next";
gpu-api = "vulkan";
gpu-context = "waylandvk";
target-colorspace-hint = "auto";
};
programs.niri.settings = {
prefer-no-csd = true;
outputs."DP-3" = {
scale = 1;
mode = {
width = 3840;
height = 2160;
refresh = 143.999;
};
variable-refresh-rate = "on-demand";
};
layout.struts.top = 80;
};
wayland.windowManager.hyprland.settings = {
home-manager.users.${username} = {
programs.mpv.config = {
vo = "gpu-next";
gpu-api = "vulkan";
gpu-context = "waylandvk";
target-colorspace-hint = "auto";
};
wayland.windowManager.hyprland.settings = {
config = {
scrolling = {
column_width = 0.4;
focus_fit_method = 0;
fullscreen_on_one_column = false;
};
master = {
orientation = "center";
slave_count_for_center_master = 0;
mfact = 0.4;
allow_small_split = true;
wrap_focus = false;
};
render.direct_scanout = 0;
monitorv2 = {
output = "DP-3";
mode = "3840x2160@144";
position = "0x0";
scale = 1;
bitdepth = 10;
addreserved = "80,0,0,0";
cm = if cfg.hdr then "hdredid" else "srgb";
sdr_min_luminance = 0.25;
sdr_max_luminance = 250;
};
xwayland.force_zero_scaling = true;
misc.vrr = 2; # VA suffers from VRR flicker
quirks.prefer_hdr = 1;
cursor = {
min_refresh_rate = 48;
no_break_fs_vrr = 1;
};
# experimental.xx_color_management_v4 = true;
};
programs.waybar.settings.mainBar =
let
tmpFile = "${config.home-manager.users.${username}.xdg.configHome}/gbmonctl-brightness";
cmd =
if cfg.hdr then
# sh
''
BRIGHTNESS=$(cat ${tmpFile} || echo "0")
BRIGHTNESS=$(printf "1.%02d" $((BRIGHTNESS / 2)))
hyprctl keyword monitor ${monitorline},sdrbrightness,$BRIGHTNESS
''
else
"${pkgs.gbmonctl}/bin/gbmonctl -prop brightness -val $BRIGHTNESS";
in
{
"custom/saturation" = { };
"custom/brightness" = {
return-type = "json";
exec = pkgs.writeShellScript "waybar-brightness" ''
BRIGHTNESS=$(cat ${tmpFile} || echo "0")
if [ "$BRIGHTNESS" -lt ${toString (100 / 7 * 1)} ]; then
ICON="󰃚"
elif [ "$BRIGHTNESS" -lt ${toString (100 / 7 * 2)} ]; then
ICON="󰃛"
elif [ "$BRIGHTNESS" -lt ${toString (100 / 7 * 3)} ]; then
ICON="󰃜"
elif [ "$BRIGHTNESS" -lt ${toString (100 / 7 * 4)} ]; then
ICON="󰃝"
elif [ "$BRIGHTNESS" -lt ${toString (100 / 7 * 5)} ]; then
ICON="󰃞"
elif [ "$BRIGHTNESS" -lt ${toString (100 / 7 * 6)} ]; then
ICON="󰃟"
else
ICON="󰃠"
fi
echo "{\"text\": \"$ICON $BRIGHTNESS%\"}"
'';
on-scroll-up = pkgs.writeShellScript "waybar-brightness-up" ''
BRIGHTNESS=$(cat ${tmpFile} || echo "0")
BRIGHTNESS=$((BRIGHTNESS + 5))
BRIGHTNESS=$((BRIGHTNESS > 100 ? 100 : BRIGHTNESS))
echo $BRIGHTNESS > ${tmpFile}
${cmd}
'';
on-scroll-down = pkgs.writeShellScript "waybar-brightness-up" ''
BRIGHTNESS=$(cat ${tmpFile} || echo "0")
BRIGHTNESS=$((BRIGHTNESS - 5))
BRIGHTNESS=$((BRIGHTNESS < 0 ? 0 : BRIGHTNESS))
echo $BRIGHTNESS > ${tmpFile}
${cmd}
'';
exec-on-event = true;
exec-if = "sleep 0.1";
interval = "once";
};
};
monitor = {
output = "DP-3";
mode = "3840x2160@144";
position = "0x0";
scale = 1;
bitdepth = 10;
reserved_area.top = 80;
sdr_min_luminance = 0.25;
sdr_max_luminance = 250;
icc = toString ./fv43u.icc;
# cm = "dcip3";
};
};
programs.waybar.settings.mainBar =
let
tmpFile = "${config.home-manager.users.${username}.xdg.configHome}/gbmonctl-brightness";
cmd = "${pkgs.gbmonctl}/bin/gbmonctl -prop brightness -val $BRIGHTNESS";
in
{
"custom/saturation" = { };
"custom/brightness" = {
return-type = "json";
exec = pkgs.writeShellScript "waybar-brightness" ''
BRIGHTNESS=$(cat ${tmpFile} || echo "0")
if [ "$BRIGHTNESS" -lt ${toString (100 / 7 * 1)} ]; then
ICON="󰃚"
elif [ "$BRIGHTNESS" -lt ${toString (100 / 7 * 2)} ]; then
ICON="󰃛"
elif [ "$BRIGHTNESS" -lt ${toString (100 / 7 * 3)} ]; then
ICON="󰃜"
elif [ "$BRIGHTNESS" -lt ${toString (100 / 7 * 4)} ]; then
ICON="󰃝"
elif [ "$BRIGHTNESS" -lt ${toString (100 / 7 * 5)} ]; then
ICON="󰃞"
elif [ "$BRIGHTNESS" -lt ${toString (100 / 7 * 6)} ]; then
ICON="󰃟"
else
ICON="󰃠"
fi
echo "{\"text\": \"$ICON $BRIGHTNESS%\"}"
'';
on-scroll-up = pkgs.writeShellScript "waybar-brightness-up" ''
BRIGHTNESS=$(cat ${tmpFile} || echo "0")
BRIGHTNESS=$((BRIGHTNESS + 5))
BRIGHTNESS=$((BRIGHTNESS > 100 ? 100 : BRIGHTNESS))
echo $BRIGHTNESS > ${tmpFile}
${cmd}
'';
on-scroll-down = pkgs.writeShellScript "waybar-brightness-up" ''
BRIGHTNESS=$(cat ${tmpFile} || echo "0")
BRIGHTNESS=$((BRIGHTNESS - 5))
BRIGHTNESS=$((BRIGHTNESS < 0 ? 0 : BRIGHTNESS))
echo $BRIGHTNESS > ${tmpFile}
${cmd}
'';
exec-on-event = true;
exec-if = "sleep 0.1";
interval = "once";
};
};
};
};
}
@@ -52,7 +52,7 @@ in
nvidiaPersistenced = false;
};
home-manager.users.${username}.wayland.windowManager.hyprland.settings = {
home-manager.users.${username}.wayland.windowManager.hyprland.settings.config = {
cursor.no_hardware_cursors = true;
opengl.nvidia_anti_flicker = true;
# render.direct_scanout = 1;
+22 -9
View File
@@ -18,18 +18,31 @@ in
fonts.fontconfig.subpixel.rgba = "bgr";
home-manager.users.${username}.wayland.windowManager.hyprland.settings = {
general.layout = "master";
master = {
orientation = "right";
mfact = 0.65;
always_keep_position = true;
config = {
general.layout = "master";
master = {
orientation = "right";
mfact = 0.65;
always_keep_position = true;
};
xwayland.force_zero_scaling = true;
misc.vrr = 0; # VA suffers from VRR flicker
};
monitor = [
"HDMI-A-1,2560x1440@75,0x0,1"
"DP-1,1920x1080@144,auto-center-right,1,transform,3"
{
output = "HDMI-A-1";
mode = "2560x1440@75";
position = "0x0";
scale = 1;
}
{
output = "DP-1";
mode = "1920x1080@144";
position = "auto-center-right";
scale = 1;
transform = 3;
}
];
xwayland.force_zero_scaling = true;
misc.vrr = 0; # VA suffers from VRR flicker
};
};
}
+6 -4
View File
@@ -17,11 +17,13 @@ in
config = lib.mkIf cfg.enable {
home-manager.users.${username} = {
wayland.windowManager.hyprland.settings = {
windowrule = [
window_rule = [
{
name = "firefox-pip";
"match:class" = "^(firefox)$";
"match:title" = "^(Picture-in-Picture)$";
match = {
class = "^(firefox)$";
title = "^(Picture-in-Picture)$";
};
float = true;
no_follow_mouse = true;
opaque = true;
@@ -29,7 +31,7 @@ in
fullscreen_state = "2 0";
move = "240 8";
keep_aspect_ratio = true;
border_size = "0";
border_size = 0;
animation = "fade";
}
];
+2 -2
View File
@@ -21,10 +21,10 @@ in
bind = [
"SUPER_SHIFT,V,exec,XDG_CURRENT_DESKTOP=sway uwsm app -- flameshot gui --clipboard"
];
windowrule = [
window_rule = [
{
name = "Flameshot";
"match:class" = "^(flameshot)$";
match.class = "^(flameshot)$";
animation = "fade";
float = true;
}
+2 -2
View File
@@ -16,10 +16,10 @@ in
config = lib.mkIf cfg.enable {
home-manager.users.${username} = {
wayland.windowManager.hyprland.settings.windowrule = [
wayland.windowManager.hyprland.settings.window_rule = [
{
name = "Gnome Keyring";
"match:class" = "^(gcr-prompter)$";
match.class = "^(gcr-prompter)$";
border_size = 0;
rounding = 10;
animation = "slide";
+6 -1
View File
@@ -19,7 +19,12 @@ in
wayland.windowManager.hyprland = {
settings = {
bind = [
"SUPER_SHIFT,V,exec,uwsm app -- ${lib.getExe pkgs.grimblast} --freeze copy area"
{
_args = [
"SUPER + SHIFT + V"
(lib.generators.mkLuaInline "hl.dsp.exec_cmd('uwsm app -- ${lib.getExe pkgs.grimblast} --freeze copy area')")
];
}
];
};
};
+6 -1
View File
@@ -22,7 +22,12 @@ in
'';
in
[
"SUPER_SHIFT,C,exec,uwsm app -- ${color-picker}"
{
_args = [
"SUPER + SHIFT + C"
(lib.generators.mkLuaInline "hl.dsp.exec_cmd('uwsm app -- ${color-picker}')")
];
}
];
};
}
+6 -1
View File
@@ -16,7 +16,12 @@ in
config = lib.mkIf cfg.enable {
home-manager.users.${username} = {
wayland.windowManager.hyprland.settings.bind = [
"SUPER,T,exec,uwsm app -- kitty"
{
_args = [
"SUPER + T"
(lib.generators.mkLuaInline "hl.dsp.exec_cmd('uwsm app -- kitty')")
];
}
];
programs.kitty = {
enable = true;
+9 -1
View File
@@ -17,7 +17,15 @@ in
config = lib.mkIf cfg.enable {
home-manager.users.${username} = {
wayland.windowManager.hyprland.settings = {
bindr = [ "SUPER,SUPER_L,exec,uwsm app -- ${lib.getExe pkgs.walker}" ];
bind = [
{
_args = [
"SUPER + SUPER_L"
(lib.generators.mkLuaInline "hl.dsp.exec_cmd('uwsm app -- ${lib.getExe pkgs.walker}')")
{ release = true; }
];
}
];
/*
layerrule = [
# TODO: Add layer rules for walker
+1 -1
View File
@@ -76,7 +76,7 @@ in
"pulseaudio" = {
format = "{icon} {volume}%";
format-icons = {
"alsa_output.usb-Turtle_Beach_Turtle_Beach_Stealth_700_G2_MAX-01.iec958-stereo" = "󰋋";
"astro-a50-eq-harman-in" = "󰋋";
"alsa_output.pci-0000_0a_00.4.analog-stereo" = "󰓃";
"alsa_output.pci-0000_08_00.1.hdmi-stereo-extra4" = "󰽟";
"alsa_output.usb-Blue_Microphones_Yeti_Stereo_Microphone_797_2018_11_12_79383-00.analog-stereo" =
+2 -2
View File
@@ -20,9 +20,9 @@ in
environment.systemPackages = with pkgs; [
lpc21isp
dfu-util
openscad
# orca-slicer
];
# Bambu Network Plugin
networking.firewall.allowedUDPPorts = [ 2021 ];
home-manager.users.${username} = {
programs = {
lazygit.enable = true;
+11 -10
View File
@@ -27,18 +27,19 @@ in
];
environment.systemPackages = with pkgs; [
steam
oversteer
obs-studio
(lutris.override {
extraLibraries =
pkgs: with pkgs; [
libgudev
libvdpau
];
})
rpcs3
bottles
/*
(lutris.override {
extraLibraries =
pkgs: with pkgs; [
libgudev
libvdpau
];
})
*/
# rpcs3
# bottles
wineWow64Packages.stagingFull
winetricks
protontricks