Compare commits

...

5 commits

Author SHA1 Message Date
428c2eb64f
finally manage hyprland declaratively!! 2026-03-22 13:54:14 +10:00
ce49b845d9
progress flake.lock 2026-03-22 12:35:15 +10:00
c9bdad1a22
ok maybe leave the glaze patch
i updated it to get the version properly though
(ie for any nixpkgs channel)
2026-03-22 12:35:02 +10:00
01d136b291
WARNING: migrate hyprland to unstable
also removing my glaze patch
2026-03-22 12:32:14 +10:00
d9d253fd2a
remove loose files 2026-03-22 12:30:39 +10:00
7 changed files with 417 additions and 90 deletions

14
TODO.md
View file

@ -5,9 +5,21 @@
- [ ] connect matcha to my VPN
- [ ] use matcha to build stuff instead of using my laptop
- [X] update bat config
- [ ] switch to zsh? or maybe elvish?
- [ ] switch to neovim
- [ ] switch to mangowc
- [ ] fix my fuck ass emojis
# add sddm profile pic
systemd.tmpfiles.rules = let
imagePath = /${root}/homes/aurora/profile.png;
in
lib.mkIf (builtins.pathExists imagePath) [
"L /var/lib/AccountsService/icons/${config.home.username} - - - - ${imagePath}"
];
# Cerulean should automatically add set home-managers `home.username` and `home.homeDirectory`
# (this can be done by using .extendModule from the nixos module system :3)

View file

@ -1,20 +0,0 @@
* {
background: rgba(51,37,65,0.9);
foreground: rgba(198,186,227,0.9);
color00: rgba(78,66,70,0.9);
color01: rgba(111,91,159,0.9);
color02: rgba(120,98,164,0.9);
color03: rgba(131,128,181,0.9);
color04: rgba(154,127,183,0.9);
color05: rgba(157,129,185,0.9);
color06: rgba(123,153,183,0.9);
color07: rgba(165,148,207,0.9);
color08: rgba(115,103,145,0.9);
color09: rgba(129,102,193,0.9);
color10: rgba(140,112,199,0.9);
color11: rgba(145,141,218,0.9);
color12: rgba(170,126,217,0.9);
color13: rgba(174,130,220,0.9);
color14: rgba(135,181,228,0.9);
color15: rgba(165,148,207,0.9);
}

92
flake.lock generated
View file

@ -37,11 +37,11 @@
]
},
"locked": {
"lastModified": 1772292445,
"narHash": "sha256-4F1Q7U313TKUDDovCC96m/Za4wZcJ3yqtu4eSrj8lk8=",
"lastModified": 1773436376,
"narHash": "sha256-OUPRrprbgN27BXHuWkMAPSCfLLQ/uwpWghEfKYN2iAg=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "1dbbba659c1cef0b0202ce92cadfe13bae550e8f",
"rev": "43f10d24391692bba3d762931ee35e7f17f8e8b8",
"type": "github"
},
"original": {
@ -422,11 +422,11 @@
]
},
"locked": {
"lastModified": 1753964049,
"narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=",
"lastModified": 1772461003,
"narHash": "sha256-pVICsV7FtcEeVwg5y/LFh3XFUkVJninm/P1j/JHzEbM=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5",
"rev": "b62396457b9cfe2ebf24fe05404b09d2a40f8ed7",
"type": "github"
},
"original": {
@ -451,11 +451,11 @@
]
},
"locked": {
"lastModified": 1770511807,
"narHash": "sha256-suKmSbSk34uPOJDTg/GbPrKEJutzK08vj0VoTvAFBCA=",
"lastModified": 1772461523,
"narHash": "sha256-mI6A51do+hEUzeJKk9YSWfVHdI/SEEIBi2tp5Whq5mI=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "7c75487edd43a71b61adb01cae8326d277aab683",
"rev": "7d63c04b4a2dd5e59ef943b4b143f46e713df804",
"type": "github"
},
"original": {
@ -476,7 +476,7 @@
"hyprwayland-scanner": "hyprwayland-scanner",
"hyprwire": "hyprwire",
"nixpkgs": [
"nixpkgs"
"nixpkgs-unstable"
],
"pre-commit-hooks": "pre-commit-hooks",
"systems": [
@ -485,17 +485,17 @@
"xdph": "xdph"
},
"locked": {
"lastModified": 1772862346,
"narHash": "sha256-cfzHdBAkACrE2kuFlVPub2W7qZwobsrHcmYhoKVLtdY=",
"ref": "refs/heads/main",
"rev": "b41882c169f589848f0efb10c88c1dad383af04b",
"revCount": 6999,
"type": "git",
"url": "https://tearforge.net/cry/Hyprland"
"lastModified": 1774136452,
"narHash": "sha256-pSwj8WNWXMuZaDqCyhQwlngRD3JyNmZwldSe6UqWAos=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "bf31f642b08a8d8ca796a1b713285f2580805c2f",
"type": "github"
},
"original": {
"type": "git",
"url": "https://tearforge.net/cry/Hyprland"
"owner": "hyprwm",
"repo": "Hyprland",
"type": "github"
}
},
"hyprland-guiutils": {
@ -531,11 +531,11 @@
]
},
"locked": {
"lastModified": 1767023960,
"narHash": "sha256-R2HgtVS1G3KSIKAQ77aOZ+Q0HituOmPgXW9nBNkpp3Q=",
"lastModified": 1772467975,
"narHash": "sha256-kipyuDBxrZq+beYpZqWzGvFWm4QbayW9agAvi94vDXY=",
"owner": "hyprwm",
"repo": "hyprland-guiutils",
"rev": "c2e906261142f5dd1ee0bfc44abba23e2754c660",
"rev": "5e1c6b9025aaf4d578f3eff7c0eb1f0c197a9507",
"type": "github"
},
"original": {
@ -556,11 +556,11 @@
]
},
"locked": {
"lastModified": 1765214753,
"narHash": "sha256-P9zdGXOzToJJgu5sVjv7oeOGPIIwrd9hAUAP3PsmBBs=",
"lastModified": 1772460177,
"narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
"rev": "3f3860b869014c00e8b9e0528c7b4ddc335c21ab",
"rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
"type": "github"
},
"original": {
@ -585,11 +585,11 @@
]
},
"locked": {
"lastModified": 1771866172,
"narHash": "sha256-fYFoXhQLrm1rD8vSFKQBOEX4OGCuJdLt1amKfHd5GAw=",
"lastModified": 1772459629,
"narHash": "sha256-/iwvNUYShmmnwmz/czEUh6+0eF5vCMv0xtDW0STPIuM=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "0b219224910e7642eb0ed49f0db5ec3d008e3e41",
"rev": "7615ee388de18239a4ab1400946f3d0e498a8186",
"type": "github"
},
"original": {
@ -637,11 +637,11 @@
]
},
"locked": {
"lastModified": 1764592794,
"narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=",
"lastModified": 1772462885,
"narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=",
"owner": "hyprwm",
"repo": "hyprtoolkit",
"rev": "5cfe0743f0e608e1462972303778d8a0859ee63e",
"rev": "9af245a69fa6b286b88ddfc340afd288e00a6998",
"type": "github"
},
"original": {
@ -662,11 +662,11 @@
]
},
"locked": {
"lastModified": 1771271487,
"narHash": "sha256-41gEiUS0Pyw3L/ge1l8MXn61cK14VAhgWB/JV8s/oNI=",
"lastModified": 1773948364,
"narHash": "sha256-S76omfIVQ1TpGiXFbqih6o6XcH3sA5+5QI+SXB4HvlY=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "340a792e3b3d482c4ae5f66d27a9096bdee6d76d",
"rev": "b85b779e3e3a1adcd9b098e3447cf48f9e780b35",
"type": "github"
},
"original": {
@ -687,11 +687,11 @@
]
},
"locked": {
"lastModified": 1770501770,
"narHash": "sha256-NWRM6+YxTRv+bT9yvlhhJ2iLae1B1pNH3mAL5wi2rlQ=",
"lastModified": 1772459835,
"narHash": "sha256-978jRz/y/9TKmZb/qD4lEYHCQGHpEXGqy+8X2lFZsak=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "0bd8b6cde9ec27d48aad9e5b4deefb3746909d40",
"rev": "0a692d4a645165eebd65f109146b8861e3a925e7",
"type": "github"
},
"original": {
@ -716,11 +716,11 @@
]
},
"locked": {
"lastModified": 1771606233,
"narHash": "sha256-F3PLUqQ/TwgR70U+UeOqJnihJZ2EuunzojYC4g5xHr0=",
"lastModified": 1773074819,
"narHash": "sha256-qRqYnXiKoJLRTcfaRukn7EifmST2IVBUMZOeZMAc5UA=",
"owner": "hyprwm",
"repo": "hyprwire",
"rev": "06c7f1f8c4194786c8400653c4efc49dc14c0f3a",
"rev": "f68afd0e73687598cc2774804fedad76693046f0",
"type": "github"
},
"original": {
@ -1206,11 +1206,11 @@
]
},
"locked": {
"lastModified": 1772024342,
"narHash": "sha256-+eXlIc4/7dE6EcPs9a2DaSY3fTA9AE526hGqkNID3Wg=",
"lastModified": 1772893680,
"narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "6e34e97ed9788b17796ee43ccdbaf871a5c2b476",
"rev": "8baab586afc9c9b57645a734c820e4ac0a604af9",
"type": "github"
},
"original": {
@ -1512,11 +1512,11 @@
]
},
"locked": {
"lastModified": 1761431178,
"narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=",
"lastModified": 1772669058,
"narHash": "sha256-XhnY0aRuDo5LT8pmJVPofPOgO2hAR7T+XRoaQxtNPzQ=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "4b8801228ff958d028f588f0c2b911dbf32297f9",
"rev": "906d0ac159803a7df2dc1f948df9327670380f69",
"type": "github"
},
"original": {

View file

@ -16,9 +16,7 @@
nt.url = "git+https://tearforge.net/cry/nt";
cerulean = {
# url = "github:cry128/cerulean/v0.2.5-alpha";
url = "github:cry128/cerulean/refactor/snowflake";
# url = "/home/me/cry/mk/cerulean";
inputs = {
nt.follows = "nt";
systems.follows = "systems";
@ -42,12 +40,10 @@
};
hyprland = {
# FUCK HYPRLAND
# url = "github:hyprwm/Hyprland/4152ac76d0813d9d0f67d2f04653a13fa6e17433";
url = "git+https://tearforge.net/cry/Hyprland";
url = "github:hyprwm/Hyprland";
inputs = {
nixpkgs.follows = "nixpkgs";
nixpkgs.follows = "nixpkgs-unstable";
systems.follows = "systems";
};
};

View file

@ -1,10 +1,18 @@
# NOTE: hyprland must be enabled in BOTH your host config (for running hyprland)
# NOTE: and your home-manager config (for managing hyprland's config files)
{...}: {
{
hostname,
pkgs,
...
}: {
imports = [
./kanshi.nix
];
home.packages = with pkgs; [
playerctl
];
wayland.windowManager.hyprland = {
enable = true;
package = null;
@ -12,15 +20,357 @@
xwayland.enable = true;
# systemd = {
# systemd= {
# enable = true;
# # enable autostart of applications
# # REF: `man 8 systemd-xdg-autostart-generator`
# enableXdgAutostart = true;
# };
# plugins = with inputs; [
# split-monitor-workspaces.packages.${pkgs.system}.split
# ];
settings = {
"$MOD" = "ALT";
# applications
"$editor" = "hx";
"$terminal" = "foot";
"$menu" = "fuzzel";
"$colorpicker" = "hyprpicker | head -c 7 | wl-copy";
"$screenshot_region" = "hyprshot -m region --clipboard-only";
"$screenshot_window" = "hyprshot -m window --clipboard-only";
"$cursorLock" = "~/scripts/bin/hyprland-cursor-lock";
# startup programs
exec-once = [
"mako &"
"awww-daemon &"
# "wl-paste --type text --watch cliphist store"
# "wl-paste --type image --watch cliphist store"
# "wl-clip-persist --clipboard regular"
# "playerctld daemon"
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
];
# monitor configuration
monitor =
if hostname == "lolcathost"
then [
"eDP-1, highres@highrr, 0x0, 1.0" # Programming
# "eDP-1, highres@highrr, 0x0, 1.5" # Comfy
]
else if hostname == "myputer"
then [
"DP-2, 3840x2160@59.99700, 0x0, 1.5"
"HDMI-A-1, 1920x1080@119.98Hz, 2560x0, 1.0"
]
else [];
# .__. .___ __..___. . . .___ .___. ._. __ __.
# [__] [__ (__ | |__| [__ | | / ` (__
# | | [___ .__) | | | [___ | _|_ \__. .__)
general = {
gaps_in = 12; # margin between windows
gaps_out = 25; # margin from windows to monitor edge
gaps_workspaces = 0; # margin between workspaces (stacks with gaps_out)
# float_gaps = 0; # gaps_out but for floating windows
border_size = 4;
"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
"col.inactive_border" = "rgba(00000000)";
# Enable resizing windows by clicking and dragging the border
resize_on_border = true;
# REF: https://wiki.hyprland.org/Configuring/Tearing/
allow_tearing = false;
layout = "dwindle";
snap = {
enabled = false;
window_gap = 10;
monitor_gap = 10;
border_overlap = false;
# respect_gaps = false;
};
};
decoration = {
rounding = 20;
rounding_power = 4.0; # Lp norm
border_part_of_window = true; # consider border as part of its window
# screen_shader = ...; # path to custom GLSL fragment shader
# window Transparency
active_opacity = 1.0;
inactive_opacity = 0.95;
fullscreen_opacity = 1.0; # fullscreened windows
# inactive Window Dimming
dim_inactive = false;
dim_strength = 0.5;
dim_special = 0.2;
dim_around = 0.4;
blur = {
enabled = true;
new_optimizations = true;
xray = false; # floating windows xray through tiling windows
ignore_opacity = true;
# blur Parameters
size = 8;
passes = 1;
noise = 0.0117; # default
contrast = 0.8916; # default
brightness = 0.8172; # default
vibrancy = 0.1696; # default
vibrancy_darkness = 0.0; # default
# blurring For Specific Window Types
special = false; # blur special windows
popups = false; # blur popups
popups_ignorealpha = 0.2;
input_methods = false;
input_methods_ignorealpha = 0.2;
};
shadow = {
enabled = true;
ignore_window = true; # only render at edges (not behind)
range = 3;
render_power = 1; # falloff rate
sharp = false; # aka infinite shadow.render_power
offset = "0 0"; # vec2
scale = 1.0;
color = "rgba(00000000)";
color_inactive = "rgba(000000ff)"; # defaults to shadow.color if unset
};
};
# REF: https://cubic-bezier.com
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"
];
# REF: https://wiki.hyprland.org/Configuring/Animations
# Animation Declaration Format:
# "animation = NAME, ENABLE, SPEED, BEZIER [,STYLE]"
# NOTE: SPEED is in ds (where 1ds = 100ms)
animations = [
"global, 1, 10, default"
"border, 1, 5.39, easeOutQuint"
"windowsIn, 1, 4, linear, slide bottom"
"windowsOut, 1, 10, linear, popin"
"fadeIn, 1, 1.73, almostLinear"
"fadeOut, 1, 1.46, almostLinear"
"fade, 1, 3.03, 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.94, almostLinear, fade"
"workspacesIn, 1, 1.21, almostLinear, fade"
"workspacesOut, 1, 1.94, almostLinear, fade"
];
# REF: https://wiki.hyprland.org/Configuring/Dwindle-Layout
dwindle = {
# master switch for pseudotiling. enabling is bound to MOD + P in the keybinds section below
pseudotile = true;
preserve_split = true; # You probably want this
};
# REF: https://wiki.hyprland.org/Configuring/Master-Layout
master = {
new_status = "master";
};
misc = {
#force_default_wallpaper = -1; # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true;
disable_splash_rendering = true;
enable_anr_dialog = false;
font_family = "Geist Mono";
};
input = {
# kb_layout = "us";
# kb_variant =
# kb_model =
# kb_options =
# kb_rules =
follow_mouse = 1;
sensitivity = 0; # -1.0 - 1.0, 0 means no modification
accel_profile = "flat";
force_no_accel = false; # not recommended to turn on
repeat_rate = 50;
repeat_delay = 300;
touchpad = {
natural_scroll = hostname == "lolcathost";
};
};
cursor.no_hardware_cursors = true;
# standard keypress bindings
bind = [
# terminal commands
"$MOD, RETURN, exec, $terminal"
"$MOD SHIFT, RETURN, exec, $terminal -D `[ -f ~/cry/.projdir ] && cat ~/cry/.projdir || echo ~`"
# btop
"$MOD, P, exec, bash -c \"{ hyprctl clients | rg '^\w*title: btop' &>/dev/null; } && hyprctl dispatch closewindow title:btop || $terminal -T btop btop & disown\""
"$MOD, R, exec, $menu"
# lock mouse to window (mostly, for gaming)
"$MOD, F1, exec, pkill hyprland-cursor || $cursorLock"
"$MOD, F2, exec, $colorpicker"
# screenshots
"$MOD, S, exec, $screenshot_region"
"$MOD SHIFT, S, exec, $screenshot_window"
"$MOD, F, fullscreen"
"$MOD SHIFT, F, fullscreenstate, 0 3" # fakefullscreen
"$MOD, C, killactive"
"$MOD SHIFT, Delete, exit"
# switch window
"$MOD, left, movefocus, l"
"$MOD, right, movefocus, r"
"$MOD, up, movefocus, u"
"$MOD, down, movefocus, d"
"$MOD, H, movefocus, l"
"$MOD, J, movefocus, d"
"$MOD, K, movefocus, u"
"$MOD, L, movefocus, r"
# switch workspaces
"$MOD, 1, workspace, 1"
"$MOD, 2, workspace, 2"
"$MOD, 3, workspace, 3"
"$MOD, 4, workspace, 4"
"$MOD, 5, workspace, 5"
"$MOD, 6, workspace, 6"
"$MOD, 7, workspace, 7"
"$MOD, 8, workspace, 8"
"$MOD, 9, workspace, 9"
"$MOD, 0, workspace, 10"
"$MOD SHIFT, left, workspace, e-1"
"$MOD SHIFT, right, workspace, e+1"
# move window to workspace
"$MOD SHIFT, 1, movetoworkspace, 1"
"$MOD SHIFT, 2, movetoworkspace, 2"
"$MOD SHIFT, 3, movetoworkspace, 3"
"$MOD SHIFT, 4, movetoworkspace, 4"
"$MOD SHIFT, 5, movetoworkspace, 5"
"$MOD SHIFT, 6, movetoworkspace, 6"
"$MOD SHIFT, 7, movetoworkspace, 7"
"$MOD SHIFT, 8, movetoworkspace, 8"
"$MOD SHIFT, 9, movetoworkspace, 9"
"$MOD SHIFT, 0, movetoworkspace, 10"
# move workspace to monitor
"$MOD TAB, 1, movecurrentworkspacetomonitor, DP-2"
"$MOD TAB, 2, movecurrentworkspacetomonitor, HDMA-A-1"
];
# bindings for mouse
bindm = [
"$MOD, mouse:272, movewindow"
"$MOD, mouse:273, resizewindow"
];
# bindings that work even while screen is locked
bindl = [
# WARNING: requires `pkgs.playerctl`
", XF86AudioNext, exec, playerctl next"
", XF86AudioPause, exec, playerctl play-pause"
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioPrev, exec, playerctl previous"
];
# bindings that work even while screen is locked
# and also repeat when the key is held
bindel = [
",XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
",XF86MonBrightnessUp, exec, brightnessctl s 10%+"
",XF86MonBrightnessDown, exec, brightnessctl s 10%-"
];
windowrule = [
# btop process manager
{
name = "terminal-manager";
"match:class" = "^(foot)$";
"match:title" = "^(btop)$";
float = true;
center = true;
size = "(monitor_w*0.65) (monitor_h*0.65)";
}
# ignore maximize requests from apps
{
name = "suppress-maximize";
suppress_event = "maximize";
"match:class" = ".*";
}
# fix some dragging issues with XWayland
{
name = "no-focus";
no_focus = "on";
"match:class" = "^$";
"match:title" = "^$";
"match:xwayland" = true;
"match:float" = true;
"match:fullscreen" = false;
"match:pin" = false;
}
# TODO: style fakefullscreen windows to clearly indicate their difference
# {
# name = "fake-fullscreen";
# }
];
# █▀▀ █▄░█ █░█   █░█ ▄▀█ █▀█
# ██▄ █░▀█ ▀▄▀   ▀▄▀ █▀█ █▀▄
env = [
"XCURSOR_THEME,Bibata-Modern-Ice"
"XCURSOR_SIZE,16"
"HYPRCURSOR_THEME,Bibata-Modern-Ice"
"HYPRCURSOR_SIZE,16"
"QT_QPA_PLATFORM,wayland"
"QT_QPA_PLATFORMTHEME,xdgdesktopportal" # makes portals work correctly
"XDG_MENU_PREFIX,arch-"
"XDG_CURRENT_DESKTOP,Hyprland"
];
};
};
}

View file

@ -52,7 +52,7 @@
lib.mkIf (inputs?hyprland)
(inputs.hyprland.packages.${system}.hyprland.overrideAttrs (final: prev: {
patches = let
glaze_version = pkgs.glaze.version;
glaze_version = inputs.hyprland.inputs.nixpkgs.legacyPackages.glaze.version;
in
prev.patches
++ [

11
patches
View file

@ -1,11 +0,0 @@
# add sddm profile pic
systemd.tmpfiles.rules = let
imagePath = /${root}/homes/aurora/profile.png;
in
lib.mkIf (builtins.pathExists imagePath) [
"L /var/lib/AccountsService/icons/${config.home.username} - - - - ${imagePath}"
];
# Cerulean should automatically add set home-managers `home.username` and `home.homeDirectory`
# (this can be done by using .extendModule from the nixos module system :3)