Compare commits

...
Sign in to create a new pull request.

31 commits

Author SHA1 Message Date
71af6bd2c6
style waybar 2026-03-27 11:39:05 +10:00
990216c8a5
fix discord being a shit ass program 2026-03-27 11:39:05 +10:00
8f5943b9f5
mako force to DP-2 2026-03-26 11:28:49 +10:00
14f04b488d
fix nixcord config again... 2026-03-26 09:53:37 +10:00
c8172255a4
update millennium 2026-03-26 09:47:41 +10:00
4eb0378a65
fix MOD!=SUPER on lolcathost 2026-03-26 09:46:47 +10:00
92995bac8b
progress flake.lock 2026-03-26 09:43:39 +10:00
fac35b5010
add waybar to hyprland 2026-03-26 09:42:29 +10:00
4467238597
TODO fix kanshi 2026-03-26 09:42:29 +10:00
463beff6e3
fix nixcord config layout changed 2026-03-26 09:42:28 +10:00
3272e94157
create elvish home-manager module 2026-03-26 09:42:28 +10:00
a8fde8ae1b
testing out sops a lil bit more 2026-03-22 23:40:27 +10:00
fa1df304a6
git merge with upstream 2026-03-22 23:40:19 +10:00
c79ac20f79
99-silent-bell.conf 2026-03-22 23:37:37 +10:00
e1c361ac23
disable equibop ghosted plugin 2026-03-22 23:37:37 +10:00
60848d83d7
ignore non-root secrets 2026-03-22 23:37:37 +10:00
de45ceb4fe
x_x 2026-03-22 14:45:26 +10:00
9a2324c2eb
fix fish config 2026-03-22 14:25:24 +10:00
c23c949bf3
add nix-search-tv overlay 2026-03-22 14:25:24 +10:00
907f048cd3
ignore hidden 2026-03-22 13:55:02 +10:00
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
85071855ec
reorganise /homes 2026-03-22 12:26:35 +10:00
719bd1de6b
update TODO 2026-03-22 11:48:09 +10:00
64325631a6
configure bat 2026-03-22 11:47:57 +10:00
f9f0e9b9c7
add decompile shell function 2026-03-22 11:47:30 +10:00
8dffcd3386
add nix-search-tv 2026-03-22 11:44:25 +10:00
c952146305
add keyd service 2026-03-22 11:42:51 +10:00
61 changed files with 1260 additions and 1215 deletions

6
.gitignore vendored
View file

@ -1,5 +1,7 @@
ISSUES/ hidden/
secrets/
result result
rebuild*.log rebuild*.log
secrets/
!/secrets

View file

@ -4,6 +4,6 @@ keys:
creation_rules: creation_rules:
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
key_groups: key_groups:
- age: - pgp:
- *cry - *cry
- *idk - *idk

23
TODO.md
View file

@ -1,9 +1,26 @@
- [ ] get kanshi working with hyprland
- [ ] Update the README.md - [ ] Update the README.md
- [ ] switch ssh keys to ECC (fuck RSA) - [ ] switch ssh keys to ECC (fuck RSA)
- [ ] forgejo not post-quantum (fix that)
- [X] migrate forge.dobutterfliescry.net -> tearforge.net
- [X] rename forgejo user to git
- [ ] setup my own VPN - [ ] setup my own VPN
- [ ] connect matcha to my VPN - [ ] connect matcha to my VPN
- [ ] use matcha to build stuff instead of using my laptop - [ ] use matcha to build stuff instead of using my laptop
- [ ] 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);
}

185
flake.lock generated
View file

@ -37,11 +37,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1772292445, "lastModified": 1773436376,
"narHash": "sha256-4F1Q7U313TKUDDovCC96m/Za4wZcJ3yqtu4eSrj8lk8=", "narHash": "sha256-OUPRrprbgN27BXHuWkMAPSCfLLQ/uwpWghEfKYN2iAg=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "aquamarine", "repo": "aquamarine",
"rev": "1dbbba659c1cef0b0202ce92cadfe13bae550e8f", "rev": "43f10d24391692bba3d762931ee35e7f17f8e8b8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -273,11 +273,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1769996383, "lastModified": 1772408722,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -291,11 +291,11 @@
"nixpkgs-lib": "nixpkgs-lib_2" "nixpkgs-lib": "nixpkgs-lib_2"
}, },
"locked": { "locked": {
"lastModified": 1769996383, "lastModified": 1772408722,
"narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -392,11 +392,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1770260404, "lastModified": 1772985280,
"narHash": "sha256-3iVX1+7YUIt23hBx1WZsUllhbmP2EnXrV8tCRbLxHc8=", "narHash": "sha256-FdrNykOoY9VStevU4zjSUdvsL9SzJTcXt4omdEDZDLk=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "0d782ee42c86b196acff08acfbf41bb7d13eed5b", "rev": "8f736f007139d7f70752657dff6a401a585d6cbc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -422,11 +422,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753964049, "lastModified": 1772461003,
"narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", "narHash": "sha256-pVICsV7FtcEeVwg5y/LFh3XFUkVJninm/P1j/JHzEbM=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprcursor", "repo": "hyprcursor",
"rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", "rev": "b62396457b9cfe2ebf24fe05404b09d2a40f8ed7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -451,11 +451,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1770511807, "lastModified": 1772461523,
"narHash": "sha256-suKmSbSk34uPOJDTg/GbPrKEJutzK08vj0VoTvAFBCA=", "narHash": "sha256-mI6A51do+hEUzeJKk9YSWfVHdI/SEEIBi2tp5Whq5mI=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprgraphics", "repo": "hyprgraphics",
"rev": "7c75487edd43a71b61adb01cae8326d277aab683", "rev": "7d63c04b4a2dd5e59ef943b4b143f46e713df804",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -476,7 +476,7 @@
"hyprwayland-scanner": "hyprwayland-scanner", "hyprwayland-scanner": "hyprwayland-scanner",
"hyprwire": "hyprwire", "hyprwire": "hyprwire",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs-unstable"
], ],
"pre-commit-hooks": "pre-commit-hooks", "pre-commit-hooks": "pre-commit-hooks",
"systems": [ "systems": [
@ -485,17 +485,17 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1772862346, "lastModified": 1774136452,
"narHash": "sha256-cfzHdBAkACrE2kuFlVPub2W7qZwobsrHcmYhoKVLtdY=", "narHash": "sha256-pSwj8WNWXMuZaDqCyhQwlngRD3JyNmZwldSe6UqWAos=",
"ref": "refs/heads/main", "owner": "hyprwm",
"rev": "b41882c169f589848f0efb10c88c1dad383af04b", "repo": "Hyprland",
"revCount": 6999, "rev": "bf31f642b08a8d8ca796a1b713285f2580805c2f",
"type": "git", "type": "github"
"url": "https://tearforge.net/cry/Hyprland"
}, },
"original": { "original": {
"type": "git", "owner": "hyprwm",
"url": "https://tearforge.net/cry/Hyprland" "repo": "Hyprland",
"type": "github"
} }
}, },
"hyprland-guiutils": { "hyprland-guiutils": {
@ -531,11 +531,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1767023960, "lastModified": 1772467975,
"narHash": "sha256-R2HgtVS1G3KSIKAQ77aOZ+Q0HituOmPgXW9nBNkpp3Q=", "narHash": "sha256-kipyuDBxrZq+beYpZqWzGvFWm4QbayW9agAvi94vDXY=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-guiutils", "repo": "hyprland-guiutils",
"rev": "c2e906261142f5dd1ee0bfc44abba23e2754c660", "rev": "5e1c6b9025aaf4d578f3eff7c0eb1f0c197a9507",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -556,11 +556,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1765214753, "lastModified": 1772460177,
"narHash": "sha256-P9zdGXOzToJJgu5sVjv7oeOGPIIwrd9hAUAP3PsmBBs=", "narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-protocols", "repo": "hyprland-protocols",
"rev": "3f3860b869014c00e8b9e0528c7b4ddc335c21ab", "rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -585,11 +585,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1771866172, "lastModified": 1772459629,
"narHash": "sha256-fYFoXhQLrm1rD8vSFKQBOEX4OGCuJdLt1amKfHd5GAw=", "narHash": "sha256-/iwvNUYShmmnwmz/czEUh6+0eF5vCMv0xtDW0STPIuM=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlang", "repo": "hyprlang",
"rev": "0b219224910e7642eb0ed49f0db5ec3d008e3e41", "rev": "7615ee388de18239a4ab1400946f3d0e498a8186",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -637,11 +637,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1764592794, "lastModified": 1772462885,
"narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=", "narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprtoolkit", "repo": "hyprtoolkit",
"rev": "5cfe0743f0e608e1462972303778d8a0859ee63e", "rev": "9af245a69fa6b286b88ddfc340afd288e00a6998",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -662,11 +662,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1771271487, "lastModified": 1773948364,
"narHash": "sha256-41gEiUS0Pyw3L/ge1l8MXn61cK14VAhgWB/JV8s/oNI=", "narHash": "sha256-S76omfIVQ1TpGiXFbqih6o6XcH3sA5+5QI+SXB4HvlY=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprutils", "repo": "hyprutils",
"rev": "340a792e3b3d482c4ae5f66d27a9096bdee6d76d", "rev": "b85b779e3e3a1adcd9b098e3447cf48f9e780b35",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -687,11 +687,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1770501770, "lastModified": 1772459835,
"narHash": "sha256-NWRM6+YxTRv+bT9yvlhhJ2iLae1B1pNH3mAL5wi2rlQ=", "narHash": "sha256-978jRz/y/9TKmZb/qD4lEYHCQGHpEXGqy+8X2lFZsak=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwayland-scanner", "repo": "hyprwayland-scanner",
"rev": "0bd8b6cde9ec27d48aad9e5b4deefb3746909d40", "rev": "0a692d4a645165eebd65f109146b8861e3a925e7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -716,11 +716,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1771606233, "lastModified": 1773074819,
"narHash": "sha256-F3PLUqQ/TwgR70U+UeOqJnihJZ2EuunzojYC4g5xHr0=", "narHash": "sha256-qRqYnXiKoJLRTcfaRukn7EifmST2IVBUMZOeZMAc5UA=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwire", "repo": "hyprwire",
"rev": "06c7f1f8c4194786c8400653c4efc49dc14c0f3a", "rev": "f68afd0e73687598cc2774804fedad76693046f0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -823,11 +823,11 @@
"scenefx": "scenefx" "scenefx": "scenefx"
}, },
"locked": { "locked": {
"lastModified": 1771732288, "lastModified": 1773034081,
"narHash": "sha256-N1H7LMWXYNn7zN9ghp4vHlBs4O/Rw/+ZEoPUpm9ozw4=", "narHash": "sha256-tH1yy1LQYtmGWnCU7whsdX0iGpc2dvaJ+7p6rvuKkHg=",
"owner": "DreamMaoMao", "owner": "DreamMaoMao",
"repo": "mango", "repo": "mango",
"rev": "6b2d694b234cae9876eb81e27991439eb51860f1", "rev": "db30977196b91cfe2e5db8e9829faafe13417bd9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -901,11 +901,11 @@
}, },
"locked": { "locked": {
"dir": "packages/nix", "dir": "packages/nix",
"lastModified": 1772390578, "lastModified": 1774360398,
"narHash": "sha256-3yQlDZz9JZqPFiYYj8fQkpCXUzjlAw4s7zaZ2n0wFmE=", "narHash": "sha256-IvuZMTxTe5osTszZp4r27X/F0R7FVhLWkP7g6pYMgTs=",
"owner": "SteamClientHomebrew", "owner": "SteamClientHomebrew",
"repo": "millennium", "repo": "millennium",
"rev": "41d8c701e1f1ed4362e8378d12bbe5cb0cb811d6", "rev": "4378aac79283a11912dd1a7adf89f79ab3736a87",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1066,14 +1066,15 @@
"flake-parts": "flake-parts_3", "flake-parts": "flake-parts_3",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ],
"nixpkgs-nixcord": "nixpkgs-nixcord"
}, },
"locked": { "locked": {
"lastModified": 1771375681, "lastModified": 1774312874,
"narHash": "sha256-qDDw0ruBZ1kt63j4uVP5Xrd1OxGKIYrSFnig0z6ozSw=", "narHash": "sha256-mFc7Iy+Oqwr7Vwb7CmNIWilSYiTw2857imf6Rb75ITg=",
"owner": "FlameFlag", "owner": "FlameFlag",
"repo": "nixcord", "repo": "nixcord",
"rev": "d030dbb48ab020092681a39c878c1d48a553ffc1", "rev": "71f4b3f92ca534c3665deb63e229195955d96cf9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1084,11 +1085,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1771903837, "lastModified": 1772822230,
"narHash": "sha256-sdaqdnsQCv3iifzxwB22tUwN/fSHoN7j2myFW5EIkGk=", "narHash": "sha256-yf3iYLGbGVlIthlQIk5/4/EQDZNNEmuqKZkQssMljuw=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e764fc9a405871f1f6ca3d1394fb422e0a0c3951", "rev": "71caefce12ba78d84fe618cf61644dce01cf3a96",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1115,11 +1116,11 @@
}, },
"nixpkgs-lib_2": { "nixpkgs-lib_2": {
"locked": { "locked": {
"lastModified": 1769909678, "lastModified": 1772328832,
"narHash": "sha256-cBEymOf4/o3FD5AZnzC3J9hLbiZ+QDT/KDuyHXVJOpM=", "narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixpkgs.lib", "repo": "nixpkgs.lib",
"rev": "72716169fe93074c333e8d0173151350670b824c", "rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1130,11 +1131,11 @@
}, },
"nixpkgs-master": { "nixpkgs-master": {
"locked": { "locked": {
"lastModified": 1772170669, "lastModified": 1773068446,
"narHash": "sha256-ClBvX0YzaJOaGZInNi0e3mFknzr/rAdwKbWrjO1j1sg=", "narHash": "sha256-MCEmktH6AFJH8Pg1rBGB2Q0FhS5z5K87IsMbUU8uzHI=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "ee234284495a7ff3ecffb062595102fdc4fbe617", "rev": "70b7278e2c0acc26ad3360551bf9c15c5ccc0acd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1144,13 +1145,29 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-unstable": { "nixpkgs-nixcord": {
"locked": { "locked": {
"lastModified": 1771008912, "lastModified": 1773222311,
"narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=", "narHash": "sha256-BHoB/XpbqoZkVYZCfXJXfkR+GXFqwb/4zbWnOr2cRcU=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a82ccc39b39b621151d6732718e3e250109076fa", "rev": "0590cd39f728e129122770c029970378a79d076a",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1772773019,
"narHash": "sha256-E1bxHxNKfDoQUuvriG71+f+s/NT0qWkImXsYZNFFfCs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "aca4d95fce4914b3892661bcb80b8087293536c6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1206,11 +1223,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1772024342, "lastModified": 1772893680,
"narHash": "sha256-+eXlIc4/7dE6EcPs9a2DaSY3fTA9AE526hGqkNID3Wg=", "narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "6e34e97ed9788b17796ee43ccdbaf871a5c2b476", "rev": "8baab586afc9c9b57645a734c820e4ac0a604af9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1309,11 +1326,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1769900466, "lastModified": 1771956684,
"narHash": "sha256-WeoJBj/PhqFCCJEIycTipqPbKm5BpQT2uzFTYcYZ30I=", "narHash": "sha256-+EtzmEzGA2xqwIvKrP0euYaOzrmTQWEWAiWV+k2WBEM=",
"owner": "uiriansan", "owner": "uiriansan",
"repo": "SilentSDDM", "repo": "SilentSDDM",
"rev": "a44caf771b4cb72f5c2514f7d488455b0fa860d2", "rev": "34f82e1fb8412fff78b82a0dcce763492b36054c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1369,11 +1386,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1772494187, "lastModified": 1773007504,
"narHash": "sha256-6ksgNAFXVK+Cg/6ww7bB2nJUPZlnS75UwZC7G+L03EE=", "narHash": "sha256-4NtiCDH3RunKbrlWvPCB6dyTjCwqdrHaBDeMCzG6gIA=",
"owner": "Gerg-L", "owner": "Gerg-L",
"repo": "spicetify-nix", "repo": "spicetify-nix",
"rev": "915ab06b046d05613041780c575c62a32fe67cea", "rev": "434e63b851f9139aaeddc3b8de44d47992828b3b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1512,11 +1529,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1761431178, "lastModified": 1772669058,
"narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=", "narHash": "sha256-XhnY0aRuDo5LT8pmJVPofPOgO2hAR7T+XRoaQxtNPzQ=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland", "repo": "xdg-desktop-portal-hyprland",
"rev": "4b8801228ff958d028f588f0c2b911dbf32297f9", "rev": "906d0ac159803a7df2dc1f948df9327670380f69",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

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

View file

@ -25,8 +25,6 @@
# Games # Games
upkgs.olympus # celeste upkgs.olympus # celeste
discord
discordo
upkgs.ekphos upkgs.ekphos
prismlauncher # minecraft prismlauncher # minecraft

View file

@ -1,6 +1,7 @@
{lib, ...}: { {...}: {
imports = [ imports = [
./programs.nix ./programs.nix
./keybinds.nix
]; ];
boot.loader = { boot.loader = {
@ -83,10 +84,20 @@
alsa.support32Bit = true; alsa.support32Bit = true;
# pulse.enable = true; # pulse.enable = true;
# jack.enable = true; # jack.enable = true;
# disable X11 bell module, which plays a sound on urgency hint
extraConfig = {
pipewire."99-silent-bell.conf" = {
"context.properties" = {
"module.x11.bell" = false;
};
};
};
}; };
}; };
security.rtkit.enable = true; # I *think* this is for pipewire # allows pipewire to use the realtime scheduler for increased performance
security.rtkit.enable = true;
# ---- ENVIRONMENT VARIABLES ---- # ---- ENVIRONMENT VARIABLES ----
environment = { environment = {

19
groups/cryos/keybinds.nix Normal file
View file

@ -0,0 +1,19 @@
{...}: {
services.keyd = {
enable = true;
keyboards.default = {
ids = ["*"];
settings = {
main = {
capslock = "meta";
# NOTE: unsure whether or not i like oneshot...
# shift = "oneshot(shift)";
# control = "oneshot(control)";
# leftalt = "oneshot(alt)";
# rightalt = "oneshot(rightalt)";
};
};
};
};
}

View file

@ -45,6 +45,7 @@
nix-prefetch-git nix-prefetch-git
nix-index nix-index
nix-unit nix-unit
ns # nix-search-tv overlay
# Python # Python
python312 # I use 3.12 since it's in a pretty stable state now python312 # I use 3.12 since it's in a pretty stable state now

View file

@ -16,7 +16,7 @@
# accept Lets Encrypt's security policy # accept Lets Encrypt's security policy
acme = { acme = {
acceptTerms = true; acceptTerms = true;
defaults.email = "eclarkboman@gmail.com"; defaults.email = "them@dobutterfliescry.net";
}; };
# allow SSH keys for passwordless auth # allow SSH keys for passwordless auth

View file

@ -1,36 +1,50 @@
{pkgs, ...}: { {pkgs, ...}: {
imports = [ imports = [
../modules/fish.nix ./modules/cli/git.nix
../modules/btop.nix ./modules/cli/ssh.nix
../modules/tmux.nix
../modules/git.nix
../modules/bat.nix
../modules/term/foot.nix
../modules/term/foot.nix
../modules/shell/zsh.nix
../modules/shell/zsh.nix
../modules/shell/fish.nix
../modules/shell/elvish.nix
../modules/editor/helix.nix ../modules/editor/helix.nix
../modules/editor/neovim ../modules/editor/neovim
../modules/cli/bat.nix
../modules/cli/btop.nix
../modules/cli/hyfetch.nix
../modules/cli/tmux.nix
../modules/apps/firefox.nix ../modules/apps/firefox.nix
../modules/apps/zen-browser.nix ../modules/apps/zen-browser.nix
../modules/apps/thunderbird.nix ../modules/apps/thunderbird.nix
../modules/apps/nixcord.nix ../modules/apps/nixcord.nix
../modules/apps/spicetify.nix ../modules/apps/spicetify.nix
# ../modules/wm ../modules/wm/hyprland
../modules/wm/mangowc.nix ../modules/wm/mango
# ../modules/wm/hypr/hyprland.nix ../modules/de/mako.nix
# ../modules/wm/hypr/hyprlock.nix ../modules/de/waybar
../modules/kanshi.nix
../modules/mako.nix
]; ];
programs.elvish.enable = true;
home = { home = {
shellAliases = { shellAliases = {
# nix
nd = "nix develop"; nd = "nix develop";
ntv = "nix-search-tv";
rebuild = "nh os switch ~/flake"; rebuild = "nh os switch ~/flake";
trybuild = "nh os test ~/flake"; trybuild = "nh os test ~/flake";
brip = "batgrep"; # bat + ripgrep
man = "batman"; # bat + man # shell utilities
ls = "eza --color=auto";
l = "eza -Alh --color=auto --icons=auto";
ll = "eza -lh --color=auto --icons=auto";
li = "eza --color=auto --git-ignore";
rgf = "rg --files | rg";
watch = "viddy";
}; };
pointerCursor = { pointerCursor = {
@ -43,14 +57,13 @@
packages = with pkgs; [ packages = with pkgs; [
# for services.gnome-keyring # for services.gnome-keyring
pkgs.gcr # provides org.gnome.keyring.SystemPrompter gcr # provides org.gnome.keyring.SystemPrompter
seahorse # gui seahorse # gui
krita
krita
tor-browser tor-browser
fuzzel fuzzel
speedtest-cli speedtest-cli
]; ];
}; };
@ -81,98 +94,9 @@
style.name = "gtk2"; style.name = "gtk2";
}; };
programs = {
hyfetch = {
enable = true;
settings = {
backend = "neofetch";
args = null;
distro = null;
preset = "transfeminine"; # "nonbinary";
pride_month_disable = false;
custom_ascii_path = null;
mode = "rgb";
light_dark = "dark";
auto_detect_light_dark = true;
lightness = 0.65;
color_align = {
mode = "horizontal";
};
};
};
zsh = {
enable = true;
enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
history = {
size = 10000;
ignoreAllDups = true;
path = "$HOME/.zsh_history";
ignorePatterns = [
"rm *"
];
};
};
# set ssh profiles
# WARNING: this DOES NOT start the ssh-agent
# WARNING: for that you need to use `services.ssh-agent.enable`
ssh = {
enable = true;
forwardAgent = false;
addKeysToAgent = "yes";
matchBlocks = {
butterfly = {
hostname = "dobutterfliescry.net";
user = "cry";
port = 42069;
identityFile = "~/keys/butterfly";
setEnv = {
TERM = "xterm-256color";
};
};
hyrule = {
hostname = "hyrule.dobutterfliescry.net";
user = "cry";
port = 42069;
identityFile = "~/keys/hyrule";
setEnv = {
TERM = "xterm-256color";
};
};
matcha = {
hostname = "192.168.88.250";
user = "emile";
port = 22;
identityFile = "~/keys/matcha";
};
youcue = {
hostname = "moss.labs.eait.uq.edu.au";
user = "s4740056";
port = 22;
identityFile = "~/keys/other/youcue";
setEnv = {
TERM = "xterm-256color";
};
};
};
};
};
services = { services = {
# enable OpenSSH private key agent
# ssh-agent.enable = true;
gnome-keyring.enable = true; gnome-keyring.enable = true;
}; };
# the ssh-agent won't set this for itself...
# systemd.user.sessionVariables.SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/ssh-agent";
home.stateVersion = "24.05"; # don't change this home.stateVersion = "24.05"; # don't change this
} }

View file

@ -0,0 +1,46 @@
{...}: {
# set ssh profiles
# WARNING: this DOES NOT start the ssh-agent
# WARNING: for that you need to use `services.ssh-agent.enable`
programs.ssh = {
enable = true;
forwardAgent = false;
addKeysToAgent = "yes";
matchBlocks = {
butterfly = {
hostname = "dobutterfliescry.net";
user = "cry";
port = 42069;
identityFile = "~/keys/butterfly";
setEnv = {
TERM = "xterm-256color";
};
};
hyrule = {
hostname = "hyrule.dobutterfliescry.net";
user = "cry";
port = 42069;
identityFile = "~/keys/hyrule";
setEnv = {
TERM = "xterm-256color";
};
};
matcha = {
hostname = "192.168.88.250";
user = "cry";
port = 22;
identityFile = "~/keys/matcha";
};
youcue = {
hostname = "moss.labs.eait.uq.edu.au";
user = "s4740056";
port = 22;
identityFile = "~/keys/other/youcue";
setEnv = {
TERM = "xterm-256color";
};
};
};
};
}

View file

@ -1,30 +0,0 @@
import { AppLauncher } from "./widgets/applauncher.js"
//import { Notifications } from "./widgets/notifications.js"
/*
const date = Variable('', {
poll: [1000, 'date'],
})
*/
/*
const Bar = (monitor = 0) => Widget.Window({
monitor,
name: 'bar${monitor}',
anchor: ['top', 'left', 'right'],
child: Widget.Label({ label: date.bind() }),
})
*/
App.config({
style: "./style.css",
// icons: "./assets",
windows: [
//Bar(),
AppLauncher,
//Notifications()
]
// gtkTheme: "Adwaita-dark",
// cursorTheme: "Qogir",
// iconTheme: "MoreWaita",[]
})

View file

@ -1,12 +0,0 @@
{pkgs, ...}: {
programs.ags = {
enable = true;
configDir = ./.;
extraPackages = with pkgs; [
gtksourceview
webkitgtk
accountsservice
];
};
}

View file

@ -1,125 +0,0 @@
const { query } = await Service.import("applications");
const WINDOW_NAME = "applauncher";
const AppItem = app => Widget.Button({
on_clicked: () => {
App.closeWindow(WINDOW_NAME)
app.launch()
},
attribute: { app },
child: Widget.Box({
children: [
Widget.Icon({
icon: app.icon_name || "",
size: 42,
}),
Widget.Label({
class_name: "title",
label: app.name,
xalign: 0,
vpack: "center",
truncate: "end",
css: "margin-left: 10px;"
}),
],
}),
})
const AppLauncherWidget = ({ width = 500, height = 500, spacing = 12 }) => {
let applications = query("").map(AppItem)
const list = Widget.Box({
vertical: true,
children: applications,
spacing,
})
function refresh() {
applications = query("").map(AppItem)
list.children = applications
}
const entry = Widget.Entry({
placeholder_text: "Search",
hexpand: true,
css: "min-height: 50px;",
// launch first item when Enter is pressed
on_accept: () => {
// only consider applications that are visible in the list
const results = applications.filter((item) => item.visible);
if (results[0]) {
App.toggleWindow(WINDOW_NAME);
results[0].attribute.app.launch()
}
},
// filter the applications based on search term
on_change: ({ text }) => applications.forEach(item => {
item.visible = item.attribute.app.match(text ?? "")
}),
})
return Widget.Box({
vertical: false,
children: [
// LEFT
Widget.Box({
vertical: true,
css: `min-width: ${width}px;`
+ `min-height: ${height}px;`
+ "background-image: url('https://images2.alphacoders.com/135/1351579.png');"
+ "background-size: cover;"
+ "background-position: center;"
+ "background-repeat: no-repeat;",
children: [
// align the entry field with the app list
Widget.Box({
css: `margin: ${spacing * 2}px;`,
child: entry,
}),
],
}),
// RIGHT
Widget.Box({
vertical: true,
css: `margin: ${spacing * 2}px;`,
child:
// make scrollable
Widget.Scrollable({
hscroll: "never",
css: `min-width: ${width}px; min-height: ${height}px;`,
child: list,
}),
setup: self => self.hook(App, (_, windowName, visible) => {
if (windowName !== WINDOW_NAME)
return
// when the launcher becomes visible
if (visible) {
refresh()
entry.text = ""
entry.grab_focus()
}
}),
}),
],
})
}
// the app launcher should be a singleton
export const AppLauncher = Widget.Window({
name: WINDOW_NAME,
setup: self => self.keybind("Escape", () => {
App.closeWindow(WINDOW_NAME)
}),
visible: false,
keymode: "exclusive",
child: AppLauncherWidget({
width: 500,
height: 500,
spacing: 12,
}),
})

View file

@ -1,38 +0,0 @@
import options from "options"p
const { start, center, end } = options.bar.layout
// place all your bar widgets in here
const widgets = {
expander: () => Widget.Box({ expand: true}),
}
//export type BarWidget = keyof typeof widget;
export default (monitor: number) => Widget.Window({
monitor,
class_name: "bar",
name: "bar-${monitor}",
// anchor: position.bind().as(pos => [pos, "left", "right"]),
anchor: ["top", "left", "right"],
child: Widget.CenterBox({
// ensure bar is shown
css: "min-width: 2px; min-height: 2px;"
startWidget: Widget.Box({
hexpand: true,
// map all start widgets to be childen
childen: start.bind().as(s => s.map(w => widgets[w]()))
}),
centerWidget: Widget.Box({
hpack: "center",
// map all center widgets to be childen
childen: center.bind().as(c => c.map(w => widgets[w]()))
}),
endWidget: Widget.Box({
hexpand: true
// map all end widgets to be childen
childen: end.bind().as(e => e.map(w => widgets[w]()))
}),
})
})

View file

@ -1,23 +0,0 @@
const WINDOW_NAME = "fullscreen";
const Fullscreen = (children) => Widget.Box({
vertical: true,
css: "background-image: url('~/downloads/wallpaper/kill-my-firstborn/astronaut-pink-blue.png');",
//+ "background-size: cover;"
//+ "background-position: center;"
//+ "background-repeat: no-repeat;",
children: children,
})
export const fullscreen = Widget.Window({
name: WINDOW_NAME,
setup: self => self.keybind("Escape", () => {
App.closeWindow(WINDOW_NAME)
}),
anchor: ["top", "bottom", "left", "right"],
visible: false,
keymode: "exclusive",
child: Fullscreen(
Widget.Label({"Hello World"});
)
})

View file

@ -1,122 +0,0 @@
const notifications = await Service.import("notifications");
function NotificationIcon({ app_entry, app_icon, image}) {
if (image) {
return Widget.Box({
css: `background-image: url("${image}");`
+ "background-size: contain;"
+ "background-repeat: no-repeat;"
+ "background-position: center;"
})
}
let icon = "dialog-information-symbolic"
if (Utils.lookUpIcon(app_icon))
icon = app_icon
if (app_entry && Utils.lookUpIcon(app_entry))
icon = app_entry
return Widget.Box({
child: Widget.Icon(icon),
})
}
function Notification(n) {
const icon = Widget.Box({
vpack: "start",
class_name: "icon",
child: NotificationIcon(n),
})
const title = Widget.Label({
class_name: "title",
xalign: 0,
justification: "left",
hexpand: true,
max_width_chars: 24,
truncate: "end",
wrap: true,
label: n.summary,
use_markup: true,
})
const body = Widget.Label({
class_name: "body",
hexpand: true,
use_markup: true,
xalign: 0,
justification: "left",
label: n.body,
wrap: true,
})
const actions = Widget.Box({
class_name: "actions",
children: n.actions.map(({ id, label}) => Widget.Button({
class_name: "action-button",
on_clicked: () => {
n.invoke(id),
n.dismiss()
},
hexpand: true,
child: Widget.Label(label),
})),
})
return Widget.EventBox(
{
attribute: {id: n.id},
on_primary_click: n.dismiss,
},
Widget.Box(
{
class_name: `notification ${n.urgency}`,
vertical: true,
},
Widget.Box([
icon,
Widget.Box(
{ vertical: true },
title,
body,
),
]),
actions,
),
)
}
export function Notifications(monitor = 0) {
const list = Widget.Box({
vertical: true,
children: notifications.popups.map(Notification),
})
function onNotified(_, id) {
const n = notifications.getNotification(id)
if (n)
list.children = [Notification(n), ...list.children]
}
function onDismissed(_, id) {
list.children.find(n => n.attribute.id === id)?.destroy()
}
list.hook(notifications, onNotified, "notified")
.hook(notifications, onDismissed, "dismissed")
return Widget.Window({
monitor,
class_name: "notifications-widget",
name: `notifications-${monitor}`,
anchor: ["top", "left"],
child: Widget.Box({
css: "min-width: 2px; min-height: 2px;",
class_name: "notifications",
vertical: true,
child: list,
}),
})
}

View file

@ -1,8 +1,16 @@
{inputs, ...}: { {
inputs,
pkgs,
...
}: {
imports = [ imports = [
inputs.nixcord.homeModules.nixcord inputs.nixcord.homeModules.nixcord
]; ];
home.packages = with pkgs; [
discordo
];
programs.nixcord = { programs.nixcord = {
enable = true; enable = true;
equibop.enable = true; equibop.enable = true;
@ -18,6 +26,7 @@
"base16-colors.css" "base16-colors.css"
]; ];
plugins = { plugins = {
invisibleChat.enable = true;
anonymiseFileNames = { anonymiseFileNames = {
enable = true; enable = true;
anonymiseByDefault = true; anonymiseByDefault = true;
@ -49,7 +58,7 @@
separatedDiffs = false; separatedDiffs = false;
}; };
fakeNitro.enable = true; fakeNitro.enable = true;
ghosted.enable = true; ghosted.enable = false;
noF1.enable = true; noF1.enable = true;
noMaskedUrlPaste.enable = true; noMaskedUrlPaste.enable = true;
messageLatency = { messageLatency = {
@ -68,7 +77,6 @@
forwardAnywhere.enable = true; forwardAnywhere.enable = true;
spotifyCrack.enable = true; spotifyCrack.enable = true;
spotifyShareCommands.enable = true; spotifyShareCommands.enable = true;
spotifyControls.enable = true;
fullUserInChatbox.enable = true; fullUserInChatbox.enable = true;
gifPaste.enable = true; gifPaste.enable = true;
ignoreActivities = { ignoreActivities = {
@ -96,6 +104,11 @@
revealAllSpoilers.enable = true; revealAllSpoilers.enable = true;
serverInfo.enable = true; serverInfo.enable = true;
serverListIndicators.enable = true; serverListIndicators.enable = true;
musicControls = {
enable = true;
showSpotifyControls = true;
showSpotifyLyrics = true;
};
showHiddenChannels.enable = true; showHiddenChannels.enable = true;
showHiddenThings.enable = true; showHiddenThings.enable = true;
showTimeoutDuration = { showTimeoutDuration = {
@ -133,7 +146,6 @@
whoReacted.enable = true; whoReacted.enable = true;
whosWatching.enable = true; whosWatching.enable = true;
quickReply.enable = true; quickReply.enable = true;
questCompleter.enable = true;
shikiCodeblocks = { shikiCodeblocks = {
enable = true; enable = true;
useDevIcon = "COLOR"; useDevIcon = "COLOR";

View file

@ -1,24 +0,0 @@
{
config,
pkgs,
...
}: {
# like `/bin/cat` but with syntax highlighting
# TODO: change the pager (maybe use Github:sachaos/viddy instead)
programs.bat = {
enable = true;
config = {
pager = "less -FR";
theme = "Dracula";
};
};
# other commands that make normal utils prettier
home.packages = with pkgs.bat-extras; [
batdiff
batgrep
batman
batwatch
prettybat
];
}

109
homes/modules/cli/bat.nix Executable file
View file

@ -0,0 +1,109 @@
let
# Module Meta Configuration
setShellAliases = true;
supportBash = true;
supportZsh = true;
supportFish = true;
in
{
osConfig,
config,
pkgs,
lib,
username,
...
}: let
inherit
(builtins)
elemAt
;
inherit
(lib)
flip
mkIf
optional
splitString
;
cfg = config.programs.bat;
# NOTE: `<derivation>.pname` can be used instead of `<derivation>.meta.mainProgram`
# NOTE: but then `pkgs.bash` would return `"bash-interactive"` which is annoying...
shellPkg = osConfig.users.users.${username}.shell;
shell = shellPkg.meta.mainProgram;
pager =
cfg.config.pager
|> splitString " "
|> flip elemAt 0;
in {
programs.bat = {
enable = true;
config = {
# WARNING: pager must be set for this module to function
# NOTE: not sure whether to use ov/moor/viddy as my pager?
pager = "less -FR";
# theme = "Dracula";
};
};
home = {
shellAliases = mkIf setShellAliases {
bat = "prettybat";
cat = "prettybat";
diff = "batdiff";
brg = "batgrep";
man = "batman";
# watch = "batwatch"; # NOTE: using viddy instead atm
};
sessionVariables = {
PAGER = pager;
# REF: https://github.com/eth-p/bat-extras/blob/master/doc/batpipe.md
BATPIPE_ENABLE_COLOR = "true";
BATPIPE_INSIDE_LESS = "true";
BATPIPE_TERM_WIDTH = "-"; # hyphone -> auto detect
};
packages = with pkgs.bat-extras;
[
batdiff
batgrep
batman
batpipe
batwatch
prettybat
]
++ (with pkgs; [
bat
entr # required by pkgs.bat-extras.batwatch
ripgrep # required by pkgs.bat-extras.batgrep
delta # required by pkgs.bat-extras.batdiff
])
++ optional (pkgs?${pager}) pkgs.${pager};
};
# Configure the user's shell to source batpipe
# WARNING: only currently supports bash, zsh, & fish
programs = {
bash = mkIf (supportBash || shell == "bash") {
initExtra = ''
eval "$(batpipe)"
'';
};
zsh = mkIf (supportZsh || shell == "zsh") {
initContent = ''
eval "$(batpipe)"
'';
};
fish = mkIf (supportFish || shell == "fish") {
interactiveShellInit = ''
eval (batpipe)
'';
};
};
}

View file

@ -0,0 +1,22 @@
{...}: {
programs.hyfetch = {
enable = true;
settings = {
backend = "neofetch";
args = null;
distro = null;
preset = "transfeminine"; # "nonbinary";
pride_month_disable = false;
custom_ascii_path = null;
mode = "rgb";
light_dark = "dark";
auto_detect_light_dark = true;
lightness = 0.65;
color_align = {
mode = "horizontal";
};
};
};
}

View file

@ -1,4 +1,8 @@
{...}: let {
lib,
hostname,
...
}: let
dracula = rec { dracula = rec {
background = "#282A36"; background = "#282A36";
border = cyan; border = cyan;
@ -15,6 +19,7 @@ in {
enable = true; enable = true;
settings = { settings = {
actions = true; actions = true;
output = lib.optionalString (hostname == "myputer") "DP-2";
anchor = "top-right"; anchor = "top-right";
layer = "overlay"; layer = "overlay";
sort = "-time"; sort = "-time";
@ -36,7 +41,7 @@ in {
ignore-timeout = false; ignore-timeout = false;
"actionable=true" = { "actionable=true" = {
anchor = "top-left"; anchor = "top-right";
}; };
"urgency=low" = { "urgency=low" = {

View file

@ -0,0 +1,19 @@
@define-color colorbg #26233a;
@define-color colorfg #eb6f92;
@define-color color00 #26233a; /* black (Overlay) */
@define-color color01 #eb6f92; /* red (Love) */
@define-color color02 #9ccfd8; /* green (Foam) */
@define-color color03 #f6c177; /* yellow (Gold) */
@define-color color04 #31748f; /* blue (Pine) */
@define-color color05 #c4a7e7; /* magenta (Iris) */
@define-color color06 #ebbcba; /* cyan (Rose) */
@define-color color07 #e0def4; /* white (Text) */
@define-color color08 #47435d; /* bright black (lighter Overlay) */
@define-color color09 #ff98ba; /* bright red (lighter Love) */
@define-color color10 #c5f9ff; /* bright green (lighter Foam) */
@define-color color11 #ffeb9e; /* bright yellow (lighter Gold) */
@define-color color12 #5b9ab7; /* bright blue (lighter Pine) */
@define-color color13 #eed0ff; /* bright magenta (lighter Iris) */
@define-color color14 #ffe5e3; /* bright cyan (lighter Rose) */
@define-color color15 #fefcff; /* bright white (lighter Text) */

View file

@ -0,0 +1,91 @@
{...}: {
programs.waybar = {
enable = true;
settings = {
mainBar = {
layer = "top";
position = "top";
height = 30;
modules-left = ["hyprland/workspaces"];
modules-center = ["clock"];
modules-right = ["cpu" "memory" "network" "pulseaudio" "privacy" "tray"];
# left
"hyprland/workspaces" = {
format = "{id}";
};
"ext/workspaces" = {
# not enabled yet, hyprland and mango need two different configs ;-;
format = "{id}";
ignore-hidden = true;
on-click = "activate";
};
# center
"clock" = {
format = "{:%b %a | %d %r}";
interval = 1;
tooltip = false;
};
# right
"cpu" = {
format = " {usage}%";
interval = 1;
};
"memory" = {
format = " {used:0.1f} / {total:0.1f} GiB";
interval = 1;
};
"network" = {
format = "{bandwidthUpBits} {bandwidthDownBits} {ifname}";
format-wifi = " {bandwidthUpBits} {bandwidthDownBits} {ifname}";
format-ethernet = "󰈀 {bandwidthUpBits} {bandwidthDownBits} {ifname}";
format-disconnected = "no internet ~ rawr! ~ ;w;"; # empty format hides module
interval = 1;
max-length = 32;
};
"pulseaudio" = {
format = "{icon} {volume}%";
format-muted = " {volume}%";
format-icons = {
default = [
""
""
""
];
};
"scroll-step" = 5;
};
"privacy" = {
icon-size = 12;
icon-spacing = 5;
transition-duration = 200;
modules = [
{
type = "screenshare";
tooltip = true;
tooltip-icon-size = 12;
}
{
type = "audio-in";
tooltip = true;
tooltip-icon-size = 12;
}
];
};
"tray" = {
icon-size = 12;
spacing = 10;
# fixes spotify not showing up when "close button should minimize the Spotify window" is false
show-passive-items = true;
};
};
};
style =
builtins.readFile ./colors.css
+ builtins.readFile ./style.css;
};
}

View file

@ -0,0 +1,165 @@
* {
border: none;
border-radius: 0;
font-family: 'GeistMono Nerd Font';
font-size: 15px;
font-weight: bold;
min-height: 10px;
}
window#waybar {
background: rgba(0, 0, 0, 0);
}
/*
adds a margin around the edge of the taskbar, surrounding the modules,
spacing it out from the edge of the screen and windows below
*/
window#waybar > box {
margin: 0px 12px;
}
tooltip {
background: @colorbg;
color: @colorfg;
opacity: 0.9;
padding: 4px;
border-radius: 12px;
border: 1px solid @color01;
}
tooltip label {
background: rgba(0, 0, 0, 0);
color: @colorfg;
}
#clock,
#memory,
#network,
#workspaces,
#taskbar,
#cpu,
#pulseaudio,
#privacy,
#tray,
#custom-media {
background: @colorbg;
color: @colorfg;
opacity: 0.9;
padding: 4px 16px;
border-radius: 32px;
border: 1px solid @color01;
}
/*
left-side modules
*/
#workspaces,
#taskbar,
#custom-media {
margin: 4px 4px 4px 0px;
}
/*
center modules
*/
#clock {
margin: 4px 0px 4px 0px;
}
/*
right-side modules
*/
#memory,
#network,
#cpu,
#pulseaudio,
#tray,
#privacy {
margin: 4px 0px 4px 4px;
}
#workspaces,
#taskbar {
padding: 0px;
}
#taskbar.empty {
opacity: 0;
padding: 0px;
margin: 0px;
border: none;
}
#tray.empty {
opacity: 0;
padding: 0;
margin: 0;
border: none;
}
/*
connects the workspace and taskbar together :3
*/
/*
#workspaces {
margin: 4px 0px 4px 12px;
padding: 0px 8px 0px 0px;
border-radius: 100px 0px 0px 100px;
border-width: 1px 0px 1px 1px;
}
#taskbar {
margin: 4px 0px 4px 0px;
padding: 0px 0px 0px 8px;
border-radius: 0px 100px 100px 0px;
}
*/
#cpu {
margin: 4px 0 4px 0;
border-radius: 32px 0px 0px 32px;
}
#memory {
margin: 4px 0 4px 0;
border-radius: 0px;
border-width: 1px 0px 1px 0px;
}
#network {
margin: 4px 0 4px 0;
border-radius: 0px 32px 32px 0px;
min-width: 100px; /* surely there's a better way to fix the size? */
}
#workspaces button {
padding: 2px 4px;
border-radius: 32px;
color: @colorfg;
}
#workspaces button:hover {
background: @colorfg;
color: @colorbg;
opacity: 0.8;
}
#workspaces button.active {
background: @colorfg;
color: @colorbg;
}
#taskbar button {
padding: 2px 4px;
border-radius: 32px;
color: @colorfg;
}
#taskbar button:hover {
background: @colorfg;
color: @colorbg;
opacity: 0.8;
}
#taskbar button.active {
background: @colorfg;
color: @colorbg;
}
/*
icons in each button on the taskbar to correct
for them not being properly centred sometimes :3
*/
#taskbar button box image {
padding-left: 2px;
}

View file

@ -1,5 +1,4 @@
{ {
config,
lib, lib,
pkgs, pkgs,
vscodium ? false, vscodium ? false,
@ -20,7 +19,7 @@
homepage ? null, homepage ? null,
changelog ? null, changelog ? null,
license ? null, license ? null,
maintainers ? [lib.maintainers.emileclarkb], maintainers ? [],
}: }:
with pkgs.vscode-utils.buildVscodeMarketplaceExtension; { with pkgs.vscode-utils.buildVscodeMarketplaceExtension; {
${publisher}.${name} = buildVscodeMarketplaceExtension { ${publisher}.${name} = buildVscodeMarketplaceExtension {

View file

@ -1,90 +0,0 @@
{
config,
lib,
pkgs,
...
}: {
options = {
morphBashToFish = lib.mkEnableOption "morphBashToFish";
};
# TODO: make the greeting controllable (ie so my VPS can be different)
config = {
programs.fish = {
enable = true;
generateCompletions = true;
# vendor = {
# config.enable = true;
# functions.enable = true;
# completions.enable = true;
# };
interactiveShellInit = let
greetings =
[
"Welcome weary traveller to my shop"
"It's dangerous to go alone! Take this."
"Do butterflies cry when they're sad?"
"I hope they do"
"I think Alice is lost..."
"I once again retreat to the sanctuary of my virtual realm"
"Something wicked this way comes"
"May your L's be many... and your bitches few"
"What a horrible night to have a curse."
"The ancient spirits of light and dark have been released."
"The god of the stars rejects your offering. The ritual can only be performed at night."
"You should have just died..."
"Supreme Witch, Calamitas has killed every player!"
"A broken heart beats in fractals" # Key Fairy
"Remember our promise" # Signalis
]
|> map (x: "\"${x}\"")
|> builtins.concatStringsSep " ";
in ''
# add dotnet completions if it exists (ie we're in a virtual environment)
if type -q dotnet
complete -f -c dotnet -a "(dotnet complete (commandline -cp))"
end
function rand_greet
set greetings ${greetings}
echo -n $greetings[(random 1 (count $greetings))]
end
function gitignore -a type
curl -sL "https://www.gitignore.io/api/$type"
end
# ripgrep on files
function rgf
rg --files | rg $args
end
set -g fish_greeting (rand_greet)
'';
shellAliases = {
brip = "batgrep"; # bat + ripgrep
man = "batman"; # bat + man
ls = "eza --color=auto";
l = "eza -Alh --color=auto --icons=auto";
ll = "eza -lh --color=auto --icons=auto";
li = "eza --color=auto --git-ignore";
};
plugins = [
{
name = "grc";
src = pkgs.fishPlugins.grc.src;
}
];
};
};
}

View file

@ -1,13 +0,0 @@
{
config,
pkgs,
...
}: {
programs.rofi = {
enable = true;
package = pkgs.rofi-wayland;
font = "JetBrains Mono Nerd Font 10";
location = "center";
terminal = "${pkgs.rio}/bin/rio";
};
}

View file

@ -0,0 +1,16 @@
{osConfig, ...}: {
assertions = [
{
assertion = !osConfig.services.gnupg.agent.enable;
message = ''
It is not recommended to enable both `homeConfig.services.ssh-agent.enable` and `osConfig.services.gnupg.agent.enable`!
'';
}
];
# enable OpenSSH private key agent
services.ssh-agent.enable = true;
# WARNING: the ssh-agent won't set this for itself...
systemd.user.sessionVariables.SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/ssh-agent";
}

View file

@ -0,0 +1,29 @@
{
config,
pkgs,
lib,
...
}: let
cfg = config.programs.elvish;
in {
options.programs.elvish = {
enable = lib.mkEnableOption "elvish";
};
config = lib.mkIf cfg.enable {
home = {
packages = with pkgs; [elvish];
file.".elvish/nix.elv".source = let
elvish-modules = pkgs.fetchFromGitHub {
owner = "zzamboni";
repo = "elvish-modules";
rev = "9005c970346ab06214b3cd3ed3e70f04f3c632ba";
hash = "sha256-/Dwtl12QzPvMoMMGoj+v3dwX2ZwFT8t/bohVy1zDE0c=";
};
in
builtins.toPath "${elvish-modules}/nix.elv";
# /${builtins.toPath elvish-modules.outPath}/nix.elv;
};
};
}

71
homes/modules/shell/fish.nix Executable file
View file

@ -0,0 +1,71 @@
{pkgs, ...}: {
programs.fish = {
enable = true;
generateCompletions = true;
interactiveShellInit = let
greetings =
[
# Official _cry64 quotes
"Do butterflies cry when they're sad?"
"I hope they do"
"I think Alice is lost..."
"I once again retreat to the sanctuary of my virtual realm"
# Unknown
"Welcome weary traveler to my shop"
# Legend of Zelda
"It's dangerous to go alone! Take this."
# ULTRAKILL
"Something wicked this way comes"
"May your L's be many... and your bitches few"
# Terraria
"What a horrible night to have a curse."
"The ancient spirits of light and dark have been released."
# Calamity
"The god of the stars rejects your offering. The ritual can only be performed at night."
"You should have just died..."
"Supreme Witch, Calamitas has killed every player!"
# Key Fairy
"A broken heart beats in fractals"
# Signalis
"Remember our promise"
]
|> map (x: "\"${x}\"")
|> builtins.concatStringsSep " ";
in ''
# add dotnet completions if it exists (ie we're in a virtual environment)
if type -q dotnet
complete -f -c dotnet -a "(dotnet complete (commandline -cp))"
end
function rand_greet
set greetings ${greetings}
echo -n $greetings[(random 1 (count $greetings))]
end
function gitignore -a type
curl -sL "https://www.gitignore.io/api/$type"
end
function decompile
objdump --disassemble --demangle --debugging --debugging-tags $argv | bat --language asm
end
set -g fish_greeting (rand_greet)
'';
plugins = [
{
name = "grc";
src = pkgs.fishPlugins.grc.src;
}
];
};
}

View file

@ -0,0 +1,17 @@
{...}: {
programs.zsh = {
enable = true;
enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
history = {
size = 10000;
ignoreAllDups = true;
path = "$HOME/.zsh_history";
ignorePatterns = [
"rm *"
];
};
};
}

View file

@ -1,9 +0,0 @@
{
lib,
...
}:
{
options = {
}
}

View file

@ -1,8 +1,4 @@
{ {pkgs, ...}: {
config,
pkgs,
...
}: {
home = { home = {
packages = [ packages = [
pkgs.rio pkgs.rio

View file

@ -1,209 +0,0 @@
/**
*
* Author : Aditya Shakya (adi1090x)
* Github : @adi1090x
*
* Rofi Theme File
* Rofi Version: 1.7.3
**/
/*****----- Configuration -----*****/
configuration {
modi: "drun,run,filebrowser,window";
show-icons: true;
display-drun: "APPS";
display-run: "RUN";
display-filebrowser: "FILES";
display-window: "WINDOW";
drun-display-format: "{name}";
window-format: "{w} · {c} · {t}";
}
/*****----- Global Properties -----*****/
* {
font: "JetBrains Mono Nerd Font 10";
background: #11092D;
background-alt: #281657;
foreground: #FFFFFF;
selected: #DF5296;
active: #6E77FF;
urgent: #8E3596;
}
/*****----- Main Window -----*****/
window {
/* properties for window widget */
transparency: "real";
location: center;
anchor: center;
fullscreen: false;
width: 1000px;
x-offset: 0px;
y-offset: 0px;
/* properties for all widgets */
enabled: true;
border-radius: 15px;
cursor: "default";
background-color: @background;
}
/*****----- Main Box -----*****/
mainbox {
enabled: true;
spacing: 0px;
background-color: transparent;
orientation: horizontal;
children: [ "imagebox", "listbox" ];
}
imagebox {
padding: 20px;
background-color: transparent;
background-image: url("~/.config/rofi/images/j.jpg", height);
orientation: vertical;
children: [ "inputbar", "dummy", "mode-switcher" ];
}
listbox {
spacing: 20px;
padding: 20px;
background-color: transparent;
orientation: vertical;
children: [ "message", "listview" ];
}
dummy {
background-color: transparent;
}
/*****----- Inputbar -----*****/
inputbar {
enabled: true;
spacing: 10px;
padding: 15px;
border-radius: 10px;
background-color: @background-alt;
text-color: @foreground;
children: [ "textbox-prompt-colon", "entry" ];
}
textbox-prompt-colon {
enabled: true;
expand: false;
str: "";
background-color: inherit;
text-color: inherit;
}
entry {
enabled: true;
background-color: inherit;
text-color: inherit;
cursor: text;
placeholder: "Search";
placeholder-color: inherit;
}
/*****----- Mode Switcher -----*****/
mode-switcher{
enabled: true;
spacing: 20px;
background-color: transparent;
text-color: @foreground;
}
button {
padding: 15px;
border-radius: 10px;
background-color: @background-alt;
text-color: inherit;
cursor: pointer;
}
button selected {
background-color: @selected;
text-color: @foreground;
}
/*****----- Listview -----*****/
listview {
enabled: true;
columns: 1;
lines: 8;
cycle: true;
dynamic: true;
scrollbar: false;
layout: vertical;
reverse: false;
fixed-height: true;
fixed-columns: true;
spacing: 10px;
background-color: transparent;
text-color: @foreground;
cursor: "default";
}
/*****----- Elements -----*****/
element {
enabled: true;
spacing: 15px;
padding: 8px;
border-radius: 10px;
background-color: transparent;
text-color: @foreground;
cursor: pointer;
}
element normal.normal {
background-color: inherit;
text-color: inherit;
}
element normal.urgent {
background-color: @urgent;
text-color: @foreground;
}
element normal.active {
background-color: @active;
text-color: @foreground;
}
element selected.normal {
background-color: @selected;
text-color: @foreground;
}
element selected.urgent {
background-color: @urgent;
text-color: @foreground;
}
element selected.active {
background-color: @urgent;
text-color: @foreground;
}
element-icon {
background-color: transparent;
text-color: inherit;
size: 32px;
cursor: inherit;
}
element-text {
background-color: transparent;
text-color: inherit;
cursor: inherit;
vertical-align: 0.5;
horizontal-align: 0.0;
}
/*****----- Message -----*****/
message {
background-color: transparent;
}
textbox {
padding: 15px;
border-radius: 10px;
background-color: @background-alt;
text-color: @foreground;
vertical-align: 0.5;
horizontal-align: 0.0;
}
error-message {
padding: 15px;
border-radius: 20px;
background-color: @background;
text-color: @foreground;
}

View file

@ -1,39 +0,0 @@
{
pkgs,
lib,
...
}: let
inherit
(lib)
mkEnableOption
mkOption
types
;
in {
imports = [
./hypr/hyprland.nix
./mangowc.nix
];
options.cryos = {
wm = {
default = mkOption {
type = types.enum ["mangowc" "hyprland"];
default = "mangowc";
example = "hyprland";
description = "Window manager to boot by default.";
};
hyprland.enabled = mkEnableOption "hyprland";
mangowc.enabled = mkEnableOption "mangowc";
};
};
config = {
xdg.portal = {
enable = true;
extraPortals = with pkgs; [
# xdg-desktop-portal-gtk
];
};
};
}

View file

@ -1,29 +0,0 @@
# 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)
{
pkgs,
inputs,
...
}: {
config = {
wayland.windowManager.hyprland = {
enable = true;
# package = pkgs.hyprland;
package = null;
portalPackage = null;
xwayland.enable = true;
# 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
# ];
};
};
}

View file

@ -0,0 +1,379 @@
# 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;
portalPackage = null;
xwayland.enable = true;
# systemd= {
# enable = true;
# # enable autostart of applications
# # REF: `man 8 systemd-xdg-autostart-generator`
# enableXdgAutostart = true;
# };
settings = {
"$MOD" =
if hostname == "myputer"
then "ALT" # my SUPER key broke ;w;
else "SUPER";
# 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 = [
# TODO: make these independent of hyprland, add these to the
"mako &"
"awww-daemon &"
"waybar &"
# "wl-paste --type text --watch cliphist store"
# "wl-paste --type image --watch cliphist store"
# "wl-clip-persist --clipboard regular"
# "playerctld daemon"
];
# 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@60.00Hz, 0x0, 1.0"
"HDMI-A-1, 1920x1080@119.98Hz, 3840x0, 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

@ -1,13 +1,9 @@
{ {...}: {
config,
pkgs,
...
}: {
# Change monitor positions # Change monitor positions
# TODO: find a way to make this modular (ie put something different for my laptop) # TODO: find a way to make this modular (ie put something different for my laptop)
# my idea is to have a "monitors" module and use kanshi for wayland # my idea is to have a "monitors" module and use kanshi for wayland
services.kanshi = { services.kanshi = {
enable = true; enable = false;
systemdTarget = "hyprland-session.target"; systemdTarget = "hyprland-session.target";
# You can find your monitors in hyprland by using `hyprctl monitors all` # You can find your monitors in hyprland by using `hyprctl monitors all`
settings = [ settings = [

View file

@ -1,183 +0,0 @@
{
lib,
config,
pkgs,
...
}: {
programs.wofi = {
enable = true;
settings = {
location = "center";
allow_markup = true;
width = 250;
};
# Force the style to stop Stylix being a bitch and overwriting it
style = lib.mkForce ''
@define-color rosewater #f2d5cf;
@define-color rosewater-rgb rgb(242, 213, 207);
@define-color flamingo #eebebe;
@define-color flamingo-rgb rgb(238, 190, 190);
@define-color pink #f4b8e4;
@define-color pink-rgb rgb(244, 184, 228);
@define-color mauve #ca9ee6;
@define-color mauve-rgb rgb(202, 158, 230);
@define-color red #e78284;
@define-color red-rgb rgb(231, 130, 132);
@define-color maroon #ea999c;
@define-color maroon-rgb rgb(234, 153, 156);
@define-color peach #ef9f76;
@define-color peach-rgb rgb(239, 159, 118);
@define-color yellow #e5c890;
@define-color yellow-rgb rgb(229, 200, 144);
@define-color green #a6d189;
@define-color green-rgb rgb(166, 209, 137);
@define-color teal #81c8be;
@define-color teal-rgb rgb(129, 200, 190);
@define-color sky #99d1db;
@define-color sky-rgb rgb(153, 209, 219);
@define-color sapphire #85c1dc;
@define-color sapphire-rgb rgb(133, 193, 220);
@define-color blue #8caaee;
@define-color blue-rgb rgb(140, 170, 238);
@define-color lavender #babbf1;
@define-color lavender-rgb rgb(186, 187, 241);
@define-color text #c6d0f5;
@define-color text-rgb rgb(198, 208, 245);
@define-color subtext1 #b5bfe2;
@define-color subtext1-rgb rgb(181, 191, 226);
@define-color subtext0 #a5adce;
@define-color subtext0-rgb rgb(165, 173, 206);
@define-color overlay2 #949cbb;
@define-color overlay2-rgb rgb(148, 156, 187);
@define-color overlay1 #838ba7;
@define-color overlay1-rgb rgb(131, 139, 167);
@define-color overlay0 #737994;
@define-color overlay0-rgb rgb(115, 121, 148);
@define-color surface2 #626880;
@define-color surface2-rgb rgb(98, 104, 128);
@define-color surface1 #51576d;
@define-color surface1-rgb rgb(81, 87, 109);
@define-color surface0 #414559;
@define-color surface0-rgb rgb(65, 69, 89);
@define-color base #303446;
@define-color base-rgb rgb(48, 52, 70);
@define-color mantle #292c3c;
@define-color mantle-rgb rgb(41, 44, 60);
@define-color crust #232634;
@define-color crust-rgb rgb(35, 38, 52);
* {
font-family: 'FiraCode Nerd Font';
font-size: 16px;
}
/* Window */
window {
margin: 0px;
padding: 10px;
border: 0.16em solid @teal;
border-radius: 0.5em;
background-color: @base;
animation: slideIn 0.25s ease-in-out both;
}
/* Slide In */
@keyframes slideIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
/* Inner Box */
#inner-box {
margin: 5px;
padding: 10px;
border: none;
background-color: @base;
/*animation: fadeIn 0.5s ease-in-out both;*/
}
/* Fade In */
@keyframes fadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
/* Outer Box */
#outer-box {
margin: 5px;
padding: 10px;
border: none;
background-color: @base;
}
/* Scroll */
#scroll {
margin: 0px;
padding: 10px;
border: none;
background-color: @base;
}
/* Input */
#input {
margin: 5px 20px;
padding: 10px;
border: none;
border-radius: 0.25em;
color: @text;
background-color: @base;
animation: fadeIn 0.25s ease-in-out both;
}
#input image {
border: none;
color: @red;
}
#input * {
outline: 4px solid @red!important;
}
/* Text */
#text {
margin: 5px;
border: none;
color: @text;
animation: fadeIn 0.5s ease-in-out both;
}
#entry {
background-color: @base;
}
#entry arrow {
border: none;
color: @teal;
}
/* Selected Entry */
#entry:selected {
border: 0.10em solid @teal;
border-radius: 0.25em;
}
#entry:selected #text {
color: @teal;
}
#entry:drop(active) {
background-color: @lavender!important;
}
'';
};
}

View file

@ -97,9 +97,9 @@ in {
THEMES = "forgejo-auto,forgejo-light,forgejo-dark"; THEMES = "forgejo-auto,forgejo-light,forgejo-dark";
}; };
"ui.meta" = { "ui.meta" = {
AUTHOR = "Emile Clark-Boman - emileclarkb"; AUTHOR = "_cry64";
DESCRIPTION = "This is my personal self-hosted git forge, where I keep and maintain personal projects! PS do butterflies cry when they're sad?"; DESCRIPTION = "This is my personal self-hosted git forge, where I keep and maintain personal projects! PS do butterflies cry when they're sad?";
KEYWORDS = "emile,clark,boman,clarkboman,emileclarkb,git,forge,forgejo,self-hosted,dobutterfliescry,butterfly,butterflies,cry,tearforge"; KEYWORDS = "emile,clark,boman,clarkboman,emileclarkb,cry,_cry64,cry64,dobutterfliescry,butterfly,butterflies,git,forge,forgejo,self-hosted,tearforge";
}; };
markdown = { markdown = {

View file

@ -24,8 +24,8 @@
# NOTE: generate hashes with `mkpasswd -sm bcrypt` # NOTE: generate hashes with `mkpasswd -sm bcrypt`
loginAccounts = { loginAccounts = {
"me@imbored.dev" = { "them@dobutterfliescry.net" = {
aliases = ["emile@imbored.dev"]; aliases = ["cry@dobutterfliescry.net"];
hashedPasswordFile = let hashedPasswordFile = let
CWD = builtins.getEnv "PWD"; CWD = builtins.getEnv "PWD";
# XXX: TODO: use a secrets manager! # XXX: TODO: use a secrets manager!

View file

@ -1,4 +1,9 @@
{...}: { {
root,
config,
pkgs,
...
}: {
imports = [ imports = [
./hardware.nix ./hardware.nix
]; ];
@ -17,6 +22,38 @@
libinput.enable = true; libinput.enable = true;
}; };
# users = {
# users = {
# # literally me fr (personal account)
# ilovecry = {
# isNormalUser = true;
# extraGroups = ["wheel"];
# shell = pkgs.bash;
# # hashedPasswordFile = config.sops.secrets.ilovecryPassword.path;
# };
# };
# };
# sops = {
# defaultSopsFile = /${root}/secrets/user.yaml;
# # age.sshKeyPaths = ["/etc/ssh/ssh_host_ed25519_key"];
# secrets = {
# "hashedPassword" = {
# neededForUsers = true;
# };
# "ilovecryPassword" = {
# neededForUsers = true;
# };
# # "gitlab/oauth_token" = {};
# # "tailscale/authkey" = {};
# # "guest_accounts.json" = {};
# # "npmrc" = {
# # owner = "youruser";
# # path = "/home/youruser/.npmrc";
# # };
# };
# };
# DO NOT MODIFY # DO NOT MODIFY
system.stateVersion = "24.05"; # Did you read the comment? system.stateVersion = "24.05"; # Did you read the comment?
} }

View file

@ -19,7 +19,6 @@
users.users.cry = { users.users.cry = {
openssh.authorizedKeys.keys = [ openssh.authorizedKeys.keys = [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDYwbPjW26fHivB+UpxRArY7nFI09VLAD9xxOiPk/u+YPAOVR8SYTpsHj3L8kI3ENRtt3PRJb97ZfLpPaAJ0LJiZv4qzisDjbfck12FxSDseQlF2JaJZ4wrJ9llcqJbRLKd5wV4KotrDm8Ct2JSBFOdTBQBGJqtNrLOcAtDqVmDPXsWyONINegtcYHumTbJcQU1ksCABdjW5R1dhJesOuMOM8EvrUtDyftvD7sgnBlXTzybP9c1AphUuBMSR5yEz/cDl+iPtQq7tgB+iepCCuNMGQu1wZFPBCMrZtMoxq6gzmZ4oV+W6tfmGEbtdkY+ix+2j960Zngcw7Gj+aYyMY2TyVJuJmIvlzfcrlsbr1TH35Y/5oYhJA+X6aFpgomUsurJ6/QdI1wQ+ceUCnZEeg/8z+WNaq/Bp2hPzT9Y7SPWolpaotDhh9wiuyVqn5VQqwL2lELfvZM4Lu8l6vRPDeMZTemI1nc5jg3aVpJqZTPqFVcCWrWXfdCFwnfy/SdU0JAprCzVvoqkwDHsJwkxY/NcxlNGNha+8oYZgSH1CZhEp3Z7CDJCTDd5PxxCQHs90ENCWFsoGQIV01dAgwD63460En9q2kGr6gO2aRewMD5Vr8AzeGV87vsR3ARpPQVzEWLX08B076Idjwrz8aebdRYBEg7WCxRe5UVI1i/V8j/zQw== emile@deadlyserver.com"
"ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAGEvtRs3C4hjSuvVm2lukqOvObCz5gVlFthcvpGHAqlBgZo47CNJM78WoviEQWceqtu9ZzJdRJ7qEK9ZGvTM0XTSgExkOs6YdS3J7M3i3YS1vcj9KVPinLhiE90aED/319pbYKFrRs/lRzl8XLeaPNqenNMNJBqeary8+r5u9JC6zYCeQ== me@lolcathost" "ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAGEvtRs3C4hjSuvVm2lukqOvObCz5gVlFthcvpGHAqlBgZo47CNJM78WoviEQWceqtu9ZzJdRJ7qEK9ZGvTM0XTSgExkOs6YdS3J7M3i3YS1vcj9KVPinLhiE90aED/319pbYKFrRs/lRzl8XLeaPNqenNMNJBqeary8+r5u9JC6zYCeQ== me@lolcathost"
]; ];
}; };

View file

@ -36,7 +36,6 @@
meta = { meta = {
homepage = "https://github.com/unoplatform/uno.check"; homepage = "https://github.com/unoplatform/uno.check";
license = licenses.mit; license = licenses.mit;
maintainers = [maintainers.emileclarkb];
}; };
}; };
}; };

View file

@ -10,6 +10,20 @@
lib lib
; ;
in { in {
ns = pkgs.writeShellApplication {
name = "ns";
runtimeInputs = with pkgs; [
fzf
nix-search-tv
];
text = builtins.readFile "${pkgs.nix-search-tv.src}/nixpkgs.sh";
excludeShellChecks = [
# SC2016 (info): Expressions don't expand in single quotes, use double quotes for that.
"SC2016"
];
};
angry-oxide = import ../packages/angryoxide { angry-oxide = import ../packages/angryoxide {
inherit pkgs lib; inherit pkgs lib;
}; };
@ -52,7 +66,7 @@
lib.mkIf (inputs?hyprland) lib.mkIf (inputs?hyprland)
(inputs.hyprland.packages.${system}.hyprland.overrideAttrs (final: prev: { (inputs.hyprland.packages.${system}.hyprland.overrideAttrs (final: prev: {
patches = let patches = let
glaze_version = pkgs.glaze.version; glaze_version = inputs.hyprland.inputs.nixpkgs.legacyPackages.glaze.version;
in in
prev.patches prev.patches
++ [ ++ [

View file

@ -10,7 +10,6 @@
angryoxide-meta = { angryoxide-meta = {
homepage = "https://github.com/${angryoxide-owner}/${angryoxide-pname}"; homepage = "https://github.com/${angryoxide-owner}/${angryoxide-pname}";
license = lib.licenses.gpl3; license = lib.licenses.gpl3;
maintainers = [lib.maintainers.emileclarkb];
}; };
# "Vendored LibWifi used in AngryOxide" # "Vendored LibWifi used in AngryOxide"
@ -66,7 +65,7 @@
meta = meta =
{ {
description = "AngryOxide's source files isolated by (@emileclarkb) into a separate Nix derivation."; description = "AngryOxide's source files isolated by @_cry64 into a separate Nix derivation.";
} }
// angryoxide-meta; // angryoxide-meta;
}; };

View file

@ -463,7 +463,6 @@ rec {
description = "A GUI for the Chameleon Ultra written in Flutter for crossplatform"; description = "A GUI for the Chameleon Ultra written in Flutter for crossplatform";
homepage = "https://github.com/GameTec-live/ChameleonUltraGUI"; homepage = "https://github.com/GameTec-live/ChameleonUltraGUI";
license = licenses.gpl3; license = licenses.gpl3;
maintainers = [maintainers.emileclarkb];
platforms = platforms.linux; platforms = platforms.linux;
}; };
} }

View file

@ -20,6 +20,5 @@ in
description = "A lightweight, fast, terminal-based markdown research tool inspired by Obsidian"; description = "A lightweight, fast, terminal-based markdown research tool inspired by Obsidian";
homepage = "https://github.com/hanebox/ekphos"; homepage = "https://github.com/hanebox/ekphos";
license = lib.licenses.mit; license = lib.licenses.mit;
maintainers = [lib.maintainers.emileclarkb];
}; };
} }

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)

19
secrets/user.yaml Normal file
View file

@ -0,0 +1,19 @@
hashedPassword: ENC[AES256_GCM,data:yUPHY0xg91BNSOkF5PcBkZyacJO7W6OvTE4o8X83i/386D1V/jnRfOpgNZ5FvAwdyA2SNPaeW1gIyLmYbbQGXVLvOPNeRL1Aog==,iv:fz177ve/GlW27NR1CzPGlhWGSM3yaIvN8daEF9xLsM0=,tag:Qv9lXYhj/I6jVzhi7WtuLg==,type:str]
ilovecryPassword: ENC[AES256_GCM,data:3c1ljqAdtiCz8csYW4GJjJUsFpxwh+mjBBWRS7RUg81SC0bdmuSYjKfBFuTu6ML0ZL1p8DXk2elUwV3fMa4RuBami5tIXh7bpw==,iv:eJokDF2GYazbHtlFUjjnK4wsdM1vbn629xkZNSaTdFA=,tag:5mWfg/HoSsnQ+9gX8p26rw==,type:str]
sops:
lastmodified: "2026-03-08T01:44:57Z"
mac: ENC[AES256_GCM,data:geIyLVMcLvGp0/9Yz23/ijZy3oVq1FXVJHobovomCj1oFxSqdsds/w+w/TBmXJ30fvfdXpLULnr6AwwNxSYuNTfm3tXR+EBq0tg1bagbpk6SABOq0TNFRkdfJVyyeVTl/mxBaeHVnPcrV3O50LGGVKdcHkeUFlhuaAqXmYxsq+U=,iv:SvR4yTi1UoSMJldS4NuhGbkNHjdKOo5dw9XhfSsItF8=,tag:AHWXHFVUQkqgJ+KhIuqZEg==,type:str]
pgp:
- created_at: "2026-03-08T01:32:54Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DuHhvXXGIWHkSAQdAh2Khre0KhjaZPgN4PxO2zm31TkUguTW9OdmCDHyQvAww
dON+Q1s0jOh2hEMmEOF5MJcJnAXHXix8WiSsNTpqnZSS0or3QNH8fUUBCgR3t73r
0l4BTv46Cj7+PrpUG4l8BbhYWfiu7N0vex4NbpCfyHKTMDLiFSEf9U4BOzkmNkGs
mB+Hw58WwIaru5JueFztwvflE5ysxb9Wk/1PZ6zTpmiq6Rm+WgYydb5vq699DEKC
=oQCe
-----END PGP MESSAGE-----
fp: 9D052B0EEB1CC3283E3E320FF68745A836CA0412
unencrypted_suffix: _unencrypted
version: 3.11.0