diff --git a/.gitignore b/.gitignore index 31f728a..1eafeff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ -ISSUES/ -secrets/ +hidden/ result rebuild*.log + +secrets/ +!/secrets diff --git a/.sops.yaml b/.sops.yaml index 540522e..fcf0a45 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -4,6 +4,6 @@ keys: creation_rules: - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ key_groups: - - age: + - pgp: - *cry - *idk diff --git a/TODO.md b/TODO.md index 023c781..b20a2be 100644 --- a/TODO.md +++ b/TODO.md @@ -1,9 +1,26 @@ +- [ ] get kanshi working with hyprland + - [ ] Update the README.md - [ ] 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 - [ ] connect matcha to my VPN - [ ] 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) diff --git a/colors.rasi b/colors.rasi deleted file mode 100644 index a36f6aa..0000000 --- a/colors.rasi +++ /dev/null @@ -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); -} diff --git a/flake.lock b/flake.lock index bcbce8e..4306f69 100644 --- a/flake.lock +++ b/flake.lock @@ -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": { @@ -273,11 +273,11 @@ ] }, "locked": { - "lastModified": 1769996383, - "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", "type": "github" }, "original": { @@ -291,11 +291,11 @@ "nixpkgs-lib": "nixpkgs-lib_2" }, "locked": { - "lastModified": 1769996383, - "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", "type": "github" }, "original": { @@ -392,11 +392,11 @@ ] }, "locked": { - "lastModified": 1770260404, - "narHash": "sha256-3iVX1+7YUIt23hBx1WZsUllhbmP2EnXrV8tCRbLxHc8=", + "lastModified": 1772985280, + "narHash": "sha256-FdrNykOoY9VStevU4zjSUdvsL9SzJTcXt4omdEDZDLk=", "owner": "nix-community", "repo": "home-manager", - "rev": "0d782ee42c86b196acff08acfbf41bb7d13eed5b", + "rev": "8f736f007139d7f70752657dff6a401a585d6cbc", "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": { @@ -823,11 +823,11 @@ "scenefx": "scenefx" }, "locked": { - "lastModified": 1771732288, - "narHash": "sha256-N1H7LMWXYNn7zN9ghp4vHlBs4O/Rw/+ZEoPUpm9ozw4=", + "lastModified": 1773034081, + "narHash": "sha256-tH1yy1LQYtmGWnCU7whsdX0iGpc2dvaJ+7p6rvuKkHg=", "owner": "DreamMaoMao", "repo": "mango", - "rev": "6b2d694b234cae9876eb81e27991439eb51860f1", + "rev": "db30977196b91cfe2e5db8e9829faafe13417bd9", "type": "github" }, "original": { @@ -901,11 +901,11 @@ }, "locked": { "dir": "packages/nix", - "lastModified": 1772390578, - "narHash": "sha256-3yQlDZz9JZqPFiYYj8fQkpCXUzjlAw4s7zaZ2n0wFmE=", + "lastModified": 1774360398, + "narHash": "sha256-IvuZMTxTe5osTszZp4r27X/F0R7FVhLWkP7g6pYMgTs=", "owner": "SteamClientHomebrew", "repo": "millennium", - "rev": "41d8c701e1f1ed4362e8378d12bbe5cb0cb811d6", + "rev": "4378aac79283a11912dd1a7adf89f79ab3736a87", "type": "github" }, "original": { @@ -1066,14 +1066,15 @@ "flake-parts": "flake-parts_3", "nixpkgs": [ "nixpkgs" - ] + ], + "nixpkgs-nixcord": "nixpkgs-nixcord" }, "locked": { - "lastModified": 1771375681, - "narHash": "sha256-qDDw0ruBZ1kt63j4uVP5Xrd1OxGKIYrSFnig0z6ozSw=", + "lastModified": 1774312874, + "narHash": "sha256-mFc7Iy+Oqwr7Vwb7CmNIWilSYiTw2857imf6Rb75ITg=", "owner": "FlameFlag", "repo": "nixcord", - "rev": "d030dbb48ab020092681a39c878c1d48a553ffc1", + "rev": "71f4b3f92ca534c3665deb63e229195955d96cf9", "type": "github" }, "original": { @@ -1084,11 +1085,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1771903837, - "narHash": "sha256-sdaqdnsQCv3iifzxwB22tUwN/fSHoN7j2myFW5EIkGk=", + "lastModified": 1772822230, + "narHash": "sha256-yf3iYLGbGVlIthlQIk5/4/EQDZNNEmuqKZkQssMljuw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e764fc9a405871f1f6ca3d1394fb422e0a0c3951", + "rev": "71caefce12ba78d84fe618cf61644dce01cf3a96", "type": "github" }, "original": { @@ -1115,11 +1116,11 @@ }, "nixpkgs-lib_2": { "locked": { - "lastModified": 1769909678, - "narHash": "sha256-cBEymOf4/o3FD5AZnzC3J9hLbiZ+QDT/KDuyHXVJOpM=", + "lastModified": 1772328832, + "narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "72716169fe93074c333e8d0173151350670b824c", + "rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742", "type": "github" }, "original": { @@ -1130,11 +1131,11 @@ }, "nixpkgs-master": { "locked": { - "lastModified": 1772170669, - "narHash": "sha256-ClBvX0YzaJOaGZInNi0e3mFknzr/rAdwKbWrjO1j1sg=", + "lastModified": 1773068446, + "narHash": "sha256-MCEmktH6AFJH8Pg1rBGB2Q0FhS5z5K87IsMbUU8uzHI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ee234284495a7ff3ecffb062595102fdc4fbe617", + "rev": "70b7278e2c0acc26ad3360551bf9c15c5ccc0acd", "type": "github" }, "original": { @@ -1144,13 +1145,29 @@ "type": "github" } }, - "nixpkgs-unstable": { + "nixpkgs-nixcord": { "locked": { - "lastModified": 1771008912, - "narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=", + "lastModified": 1773222311, + "narHash": "sha256-BHoB/XpbqoZkVYZCfXJXfkR+GXFqwb/4zbWnOr2cRcU=", "owner": "NixOS", "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" }, "original": { @@ -1206,11 +1223,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": { @@ -1309,11 +1326,11 @@ ] }, "locked": { - "lastModified": 1769900466, - "narHash": "sha256-WeoJBj/PhqFCCJEIycTipqPbKm5BpQT2uzFTYcYZ30I=", + "lastModified": 1771956684, + "narHash": "sha256-+EtzmEzGA2xqwIvKrP0euYaOzrmTQWEWAiWV+k2WBEM=", "owner": "uiriansan", "repo": "SilentSDDM", - "rev": "a44caf771b4cb72f5c2514f7d488455b0fa860d2", + "rev": "34f82e1fb8412fff78b82a0dcce763492b36054c", "type": "github" }, "original": { @@ -1369,11 +1386,11 @@ ] }, "locked": { - "lastModified": 1772494187, - "narHash": "sha256-6ksgNAFXVK+Cg/6ww7bB2nJUPZlnS75UwZC7G+L03EE=", + "lastModified": 1773007504, + "narHash": "sha256-4NtiCDH3RunKbrlWvPCB6dyTjCwqdrHaBDeMCzG6gIA=", "owner": "Gerg-L", "repo": "spicetify-nix", - "rev": "915ab06b046d05613041780c575c62a32fe67cea", + "rev": "434e63b851f9139aaeddc3b8de44d47992828b3b", "type": "github" }, "original": { @@ -1512,11 +1529,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": { diff --git a/flake.nix b/flake.nix index 4d6e468..c6d00fb 100644 --- a/flake.nix +++ b/flake.nix @@ -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"; }; }; diff --git a/groups/cryde/programs.nix b/groups/cryde/programs.nix index 3605866..4505a42 100644 --- a/groups/cryde/programs.nix +++ b/groups/cryde/programs.nix @@ -25,8 +25,6 @@ # Games upkgs.olympus # celeste - discord - discordo upkgs.ekphos prismlauncher # minecraft diff --git a/groups/cryos/default.nix b/groups/cryos/default.nix index 236930f..dd4af16 100644 --- a/groups/cryos/default.nix +++ b/groups/cryos/default.nix @@ -1,6 +1,7 @@ -{lib, ...}: { +{...}: { imports = [ ./programs.nix + ./keybinds.nix ]; boot.loader = { @@ -83,10 +84,20 @@ alsa.support32Bit = true; # pulse.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 = { diff --git a/groups/cryos/keybinds.nix b/groups/cryos/keybinds.nix new file mode 100644 index 0000000..25a3f19 --- /dev/null +++ b/groups/cryos/keybinds.nix @@ -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)"; + }; + }; + }; + }; +} diff --git a/groups/cryos/programs.nix b/groups/cryos/programs.nix index ee38f86..9d7eaa7 100644 --- a/groups/cryos/programs.nix +++ b/groups/cryos/programs.nix @@ -45,6 +45,7 @@ nix-prefetch-git nix-index nix-unit + ns # nix-search-tv overlay # Python python312 # I use 3.12 since it's in a pretty stable state now diff --git a/groups/server/default.nix b/groups/server/default.nix index cb55017..20da14e 100644 --- a/groups/server/default.nix +++ b/groups/server/default.nix @@ -16,7 +16,7 @@ # accept Lets Encrypt's security policy acme = { acceptTerms = true; - defaults.email = "eclarkboman@gmail.com"; + defaults.email = "them@dobutterfliescry.net"; }; # allow SSH keys for passwordless auth diff --git a/homes/me/default.nix b/homes/me/default.nix index 89d16b5..b800d70 100755 --- a/homes/me/default.nix +++ b/homes/me/default.nix @@ -1,36 +1,50 @@ {pkgs, ...}: { imports = [ - ../modules/fish.nix - ../modules/btop.nix - ../modules/tmux.nix - ../modules/git.nix - ../modules/bat.nix - ../modules/term/foot.nix + ./modules/cli/git.nix + ./modules/cli/ssh.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/neovim + ../modules/cli/bat.nix + ../modules/cli/btop.nix + ../modules/cli/hyfetch.nix + ../modules/cli/tmux.nix + ../modules/apps/firefox.nix ../modules/apps/zen-browser.nix ../modules/apps/thunderbird.nix ../modules/apps/nixcord.nix ../modules/apps/spicetify.nix - # ../modules/wm - ../modules/wm/mangowc.nix - # ../modules/wm/hypr/hyprland.nix - # ../modules/wm/hypr/hyprlock.nix - ../modules/kanshi.nix - ../modules/mako.nix + ../modules/wm/hyprland + ../modules/wm/mango + ../modules/de/mako.nix + ../modules/de/waybar ]; + programs.elvish.enable = true; + home = { shellAliases = { + # nix nd = "nix develop"; + ntv = "nix-search-tv"; rebuild = "nh os switch ~/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 = { @@ -43,14 +57,13 @@ packages = with pkgs; [ # for services.gnome-keyring - pkgs.gcr # provides org.gnome.keyring.SystemPrompter + gcr # provides org.gnome.keyring.SystemPrompter seahorse # gui - krita + krita tor-browser fuzzel - speedtest-cli ]; }; @@ -81,98 +94,9 @@ 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 = { - # enable OpenSSH private key agent - # ssh-agent.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 } diff --git a/homes/modules/git.nix b/homes/me/modules/cli/git.nix similarity index 100% rename from homes/modules/git.nix rename to homes/me/modules/cli/git.nix diff --git a/homes/me/modules/cli/ssh.nix b/homes/me/modules/cli/ssh.nix new file mode 100644 index 0000000..34247c8 --- /dev/null +++ b/homes/me/modules/cli/ssh.nix @@ -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"; + }; + }; + }; + }; +} diff --git a/homes/modules/ags/config.js b/homes/modules/ags/config.js deleted file mode 100755 index 5a11efc..0000000 --- a/homes/modules/ags/config.js +++ /dev/null @@ -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",[] -}) diff --git a/homes/modules/ags/default.nix b/homes/modules/ags/default.nix deleted file mode 100644 index 448e32e..0000000 --- a/homes/modules/ags/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{pkgs, ...}: { - programs.ags = { - enable = true; - configDir = ./.; - - extraPackages = with pkgs; [ - gtksourceview - webkitgtk - accountsservice - ]; - }; -} diff --git a/homes/modules/ags/style.css b/homes/modules/ags/style.css deleted file mode 100755 index e69de29..0000000 diff --git a/homes/modules/ags/widgets/applauncher.js b/homes/modules/ags/widgets/applauncher.js deleted file mode 100755 index d94244a..0000000 --- a/homes/modules/ags/widgets/applauncher.js +++ /dev/null @@ -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, - }), -}) diff --git a/homes/modules/ags/widgets/bar.ts b/homes/modules/ags/widgets/bar.ts deleted file mode 100755 index 8f361ac..0000000 --- a/homes/modules/ags/widgets/bar.ts +++ /dev/null @@ -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]())) - }), - }) -}) diff --git a/homes/modules/ags/widgets/fullscreen.js b/homes/modules/ags/widgets/fullscreen.js deleted file mode 100755 index 72682f2..0000000 --- a/homes/modules/ags/widgets/fullscreen.js +++ /dev/null @@ -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"}); - ) -}) diff --git a/homes/modules/ags/widgets/notifications.js b/homes/modules/ags/widgets/notifications.js deleted file mode 100644 index 3af9fcf..0000000 --- a/homes/modules/ags/widgets/notifications.js +++ /dev/null @@ -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, - }), - }) -} diff --git a/homes/modules/apps/nixcord.nix b/homes/modules/apps/nixcord.nix index 96ec353..2913e85 100644 --- a/homes/modules/apps/nixcord.nix +++ b/homes/modules/apps/nixcord.nix @@ -1,8 +1,16 @@ -{inputs, ...}: { +{ + inputs, + pkgs, + ... +}: { imports = [ inputs.nixcord.homeModules.nixcord ]; + home.packages = with pkgs; [ + discordo + ]; + programs.nixcord = { enable = true; equibop.enable = true; @@ -18,6 +26,7 @@ "base16-colors.css" ]; plugins = { + invisibleChat.enable = true; anonymiseFileNames = { enable = true; anonymiseByDefault = true; @@ -49,7 +58,7 @@ separatedDiffs = false; }; fakeNitro.enable = true; - ghosted.enable = true; + ghosted.enable = false; noF1.enable = true; noMaskedUrlPaste.enable = true; messageLatency = { @@ -68,7 +77,6 @@ forwardAnywhere.enable = true; spotifyCrack.enable = true; spotifyShareCommands.enable = true; - spotifyControls.enable = true; fullUserInChatbox.enable = true; gifPaste.enable = true; ignoreActivities = { @@ -96,6 +104,11 @@ revealAllSpoilers.enable = true; serverInfo.enable = true; serverListIndicators.enable = true; + musicControls = { + enable = true; + showSpotifyControls = true; + showSpotifyLyrics = true; + }; showHiddenChannels.enable = true; showHiddenThings.enable = true; showTimeoutDuration = { @@ -133,7 +146,6 @@ whoReacted.enable = true; whosWatching.enable = true; quickReply.enable = true; - questCompleter.enable = true; shikiCodeblocks = { enable = true; useDevIcon = "COLOR"; diff --git a/homes/modules/obs.nix b/homes/modules/apps/obs.nix similarity index 100% rename from homes/modules/obs.nix rename to homes/modules/apps/obs.nix diff --git a/homes/modules/bat.nix b/homes/modules/bat.nix deleted file mode 100755 index fca2231..0000000 --- a/homes/modules/bat.nix +++ /dev/null @@ -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 - ]; -} diff --git a/homes/modules/cli/bat.nix b/homes/modules/cli/bat.nix new file mode 100755 index 0000000..70268f5 --- /dev/null +++ b/homes/modules/cli/bat.nix @@ -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: `.pname` can be used instead of `.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) + ''; + }; + }; + } diff --git a/homes/modules/btop.nix b/homes/modules/cli/btop.nix similarity index 100% rename from homes/modules/btop.nix rename to homes/modules/cli/btop.nix diff --git a/homes/modules/cli/hyfetch.nix b/homes/modules/cli/hyfetch.nix new file mode 100644 index 0000000..b0a64a0 --- /dev/null +++ b/homes/modules/cli/hyfetch.nix @@ -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"; + }; + }; + }; +} diff --git a/homes/modules/tmux.nix b/homes/modules/cli/tmux.nix similarity index 100% rename from homes/modules/tmux.nix rename to homes/modules/cli/tmux.nix diff --git a/homes/modules/mako.nix b/homes/modules/de/mako.nix similarity index 88% rename from homes/modules/mako.nix rename to homes/modules/de/mako.nix index 762cd96..dca8a73 100644 --- a/homes/modules/mako.nix +++ b/homes/modules/de/mako.nix @@ -1,4 +1,8 @@ -{...}: let +{ + lib, + hostname, + ... +}: let dracula = rec { background = "#282A36"; border = cyan; @@ -15,6 +19,7 @@ in { enable = true; settings = { actions = true; + output = lib.optionalString (hostname == "myputer") "DP-2"; anchor = "top-right"; layer = "overlay"; sort = "-time"; @@ -36,7 +41,7 @@ in { ignore-timeout = false; "actionable=true" = { - anchor = "top-left"; + anchor = "top-right"; }; "urgency=low" = { diff --git a/homes/modules/de/waybar/colors.css b/homes/modules/de/waybar/colors.css new file mode 100644 index 0000000..98bb26f --- /dev/null +++ b/homes/modules/de/waybar/colors.css @@ -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) */ diff --git a/homes/modules/de/waybar/default.nix b/homes/modules/de/waybar/default.nix new file mode 100644 index 0000000..96be196 --- /dev/null +++ b/homes/modules/de/waybar/default.nix @@ -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; + }; +} diff --git a/homes/modules/de/waybar/style.css b/homes/modules/de/waybar/style.css new file mode 100644 index 0000000..09740c6 --- /dev/null +++ b/homes/modules/de/waybar/style.css @@ -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; +} + diff --git a/homes/modules/editor/vscode.nix b/homes/modules/editor/vscode.nix index f824b1c..7724723 100644 --- a/homes/modules/editor/vscode.nix +++ b/homes/modules/editor/vscode.nix @@ -1,5 +1,4 @@ { - config, lib, pkgs, vscodium ? false, @@ -20,7 +19,7 @@ homepage ? null, changelog ? null, license ? null, - maintainers ? [lib.maintainers.emileclarkb], + maintainers ? [], }: with pkgs.vscode-utils.buildVscodeMarketplaceExtension; { ${publisher}.${name} = buildVscodeMarketplaceExtension { diff --git a/homes/modules/fish.nix b/homes/modules/fish.nix deleted file mode 100755 index ddfbcf7..0000000 --- a/homes/modules/fish.nix +++ /dev/null @@ -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; - } - ]; - }; - }; -} diff --git a/homes/modules/rofi.nix b/homes/modules/rofi.nix deleted file mode 100755 index 6d05543..0000000 --- a/homes/modules/rofi.nix +++ /dev/null @@ -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"; - }; -} diff --git a/homes/modules/services/ssh-agent.nix b/homes/modules/services/ssh-agent.nix new file mode 100644 index 0000000..a0b505c --- /dev/null +++ b/homes/modules/services/ssh-agent.nix @@ -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"; +} diff --git a/homes/modules/shell/elvish.nix b/homes/modules/shell/elvish.nix new file mode 100644 index 0000000..44a19dd --- /dev/null +++ b/homes/modules/shell/elvish.nix @@ -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; + }; + }; +} diff --git a/homes/modules/shell/fish.nix b/homes/modules/shell/fish.nix new file mode 100755 index 0000000..07f3f59 --- /dev/null +++ b/homes/modules/shell/fish.nix @@ -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; + } + ]; + }; +} diff --git a/homes/modules/shell/zsh.nix b/homes/modules/shell/zsh.nix new file mode 100644 index 0000000..361191e --- /dev/null +++ b/homes/modules/shell/zsh.nix @@ -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 *" + ]; + }; + }; +} diff --git a/homes/modules/term/default.nix b/homes/modules/term/default.nix deleted file mode 100644 index d446b15..0000000 --- a/homes/modules/term/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - lib, - ... -}: -{ - options = { - - } -} diff --git a/homes/modules/term/rio.nix b/homes/modules/term/rio.nix index 88ef968..3b540dd 100755 --- a/homes/modules/term/rio.nix +++ b/homes/modules/term/rio.nix @@ -1,8 +1,4 @@ -{ - config, - pkgs, - ... -}: { +{pkgs, ...}: { home = { packages = [ pkgs.rio diff --git a/homes/modules/theme.rasi b/homes/modules/theme.rasi deleted file mode 100755 index 07c375d..0000000 --- a/homes/modules/theme.rasi +++ /dev/null @@ -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; -} diff --git a/homes/modules/wm/default.nix b/homes/modules/wm/default.nix deleted file mode 100644 index 8c0cc95..0000000 --- a/homes/modules/wm/default.nix +++ /dev/null @@ -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 - ]; - }; - }; -} diff --git a/homes/modules/wm/hypr/hyprland.nix b/homes/modules/wm/hypr/hyprland.nix deleted file mode 100755 index 77b3b44..0000000 --- a/homes/modules/wm/hypr/hyprland.nix +++ /dev/null @@ -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 - # ]; - }; - }; -} diff --git a/homes/modules/wm/hyprland/default.nix b/homes/modules/wm/hyprland/default.nix new file mode 100755 index 0000000..f77e554 --- /dev/null +++ b/homes/modules/wm/hyprland/default.nix @@ -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" + ]; + }; + }; +} diff --git a/homes/modules/wm/hypr/hypridle.nix b/homes/modules/wm/hyprland/hypridle.nix similarity index 100% rename from homes/modules/wm/hypr/hypridle.nix rename to homes/modules/wm/hyprland/hypridle.nix diff --git a/homes/modules/wm/hypr/hyprlock.nix b/homes/modules/wm/hyprland/hyprlock.nix similarity index 100% rename from homes/modules/wm/hypr/hyprlock.nix rename to homes/modules/wm/hyprland/hyprlock.nix diff --git a/homes/modules/kanshi.nix b/homes/modules/wm/hyprland/kanshi.nix similarity index 96% rename from homes/modules/kanshi.nix rename to homes/modules/wm/hyprland/kanshi.nix index 906f6a8..919eee7 100755 --- a/homes/modules/kanshi.nix +++ b/homes/modules/wm/hyprland/kanshi.nix @@ -1,13 +1,9 @@ -{ - config, - pkgs, - ... -}: { +{...}: { # Change monitor positions # 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 services.kanshi = { - enable = true; + enable = false; systemdTarget = "hyprland-session.target"; # You can find your monitors in hyprland by using `hyprctl monitors all` settings = [ diff --git a/homes/modules/wm/mangowc.nix b/homes/modules/wm/mango/default.nix similarity index 100% rename from homes/modules/wm/mangowc.nix rename to homes/modules/wm/mango/default.nix diff --git a/homes/modules/wofi.nix b/homes/modules/wofi.nix deleted file mode 100755 index 81a25d3..0000000 --- a/homes/modules/wofi.nix +++ /dev/null @@ -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; - } - ''; - }; -} diff --git a/hosts/butterfly/services/forgejo.nix b/hosts/butterfly/services/forgejo.nix index 1e1c782..65a126f 100644 --- a/hosts/butterfly/services/forgejo.nix +++ b/hosts/butterfly/services/forgejo.nix @@ -97,9 +97,9 @@ in { THEMES = "forgejo-auto,forgejo-light,forgejo-dark"; }; "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?"; - 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 = { diff --git a/hosts/butterfly/services/mailserver.nix b/hosts/butterfly/services/mailserver.nix index cd2adfc..7602302 100644 --- a/hosts/butterfly/services/mailserver.nix +++ b/hosts/butterfly/services/mailserver.nix @@ -24,8 +24,8 @@ # NOTE: generate hashes with `mkpasswd -sm bcrypt` loginAccounts = { - "me@imbored.dev" = { - aliases = ["emile@imbored.dev"]; + "them@dobutterfliescry.net" = { + aliases = ["cry@dobutterfliescry.net"]; hashedPasswordFile = let CWD = builtins.getEnv "PWD"; # XXX: TODO: use a secrets manager! diff --git a/hosts/lolcathost/default.nix b/hosts/lolcathost/default.nix index e3a1309..2e2e450 100755 --- a/hosts/lolcathost/default.nix +++ b/hosts/lolcathost/default.nix @@ -1,4 +1,9 @@ -{...}: { +{ + root, + config, + pkgs, + ... +}: { imports = [ ./hardware.nix ]; @@ -17,6 +22,38 @@ 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 system.stateVersion = "24.05"; # Did you read the comment? } diff --git a/hosts/matcha/default.nix b/hosts/matcha/default.nix index 4d5d322..ac62e39 100644 --- a/hosts/matcha/default.nix +++ b/hosts/matcha/default.nix @@ -19,7 +19,6 @@ users.users.cry = { 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" ]; }; diff --git a/hosts/modules/langs/dotnet.nix b/hosts/modules/langs/dotnet.nix index 4a42f74..74ba955 100644 --- a/hosts/modules/langs/dotnet.nix +++ b/hosts/modules/langs/dotnet.nix @@ -36,7 +36,6 @@ meta = { homepage = "https://github.com/unoplatform/uno.check"; license = licenses.mit; - maintainers = [maintainers.emileclarkb]; }; }; }; diff --git a/overlays/default.nix b/overlays/default.nix index cf79fa8..b4d7680 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -10,6 +10,20 @@ lib ; 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 { inherit pkgs lib; }; @@ -52,7 +66,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 ++ [ diff --git a/packages/angryoxide/default.nix b/packages/angryoxide/default.nix index 7610848..d9a7632 100644 --- a/packages/angryoxide/default.nix +++ b/packages/angryoxide/default.nix @@ -10,7 +10,6 @@ angryoxide-meta = { homepage = "https://github.com/${angryoxide-owner}/${angryoxide-pname}"; license = lib.licenses.gpl3; - maintainers = [lib.maintainers.emileclarkb]; }; # "Vendored LibWifi used in AngryOxide" @@ -66,7 +65,7 @@ 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; }; diff --git a/packages/chameleonultragui/default.nix b/packages/chameleonultragui/default.nix index 0aa10ec..13c78b4 100644 --- a/packages/chameleonultragui/default.nix +++ b/packages/chameleonultragui/default.nix @@ -463,7 +463,6 @@ rec { description = "A GUI for the Chameleon Ultra written in Flutter for crossplatform"; homepage = "https://github.com/GameTec-live/ChameleonUltraGUI"; license = licenses.gpl3; - maintainers = [maintainers.emileclarkb]; platforms = platforms.linux; }; } diff --git a/packages/ekphos/default.nix b/packages/ekphos/default.nix index 8e90cab..2dc837e 100644 --- a/packages/ekphos/default.nix +++ b/packages/ekphos/default.nix @@ -20,6 +20,5 @@ in description = "A lightweight, fast, terminal-based markdown research tool inspired by Obsidian"; homepage = "https://github.com/hanebox/ekphos"; license = lib.licenses.mit; - maintainers = [lib.maintainers.emileclarkb]; }; } diff --git a/patches b/patches deleted file mode 100644 index 6607af5..0000000 --- a/patches +++ /dev/null @@ -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) diff --git a/secrets/user.yaml b/secrets/user.yaml new file mode 100644 index 0000000..e0e129a --- /dev/null +++ b/secrets/user.yaml @@ -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