diff --git a/.gitignore b/.gitignore index 1eafeff..31f728a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,5 @@ -hidden/ +ISSUES/ +secrets/ result rebuild*.log - -secrets/ -!/secrets diff --git a/.sops.yaml b/.sops.yaml index fcf0a45..540522e 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -4,6 +4,6 @@ keys: creation_rules: - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ key_groups: - - pgp: + - age: - *cry - *idk diff --git a/TODO.md b/TODO.md index b20a2be..023c781 100644 --- a/TODO.md +++ b/TODO.md @@ -1,26 +1,9 @@ -- [ ] 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 new file mode 100644 index 0000000..a36f6aa --- /dev/null +++ b/colors.rasi @@ -0,0 +1,20 @@ +* { + 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 4306f69..bcbce8e 100644 --- a/flake.lock +++ b/flake.lock @@ -37,11 +37,11 @@ ] }, "locked": { - "lastModified": 1773436376, - "narHash": "sha256-OUPRrprbgN27BXHuWkMAPSCfLLQ/uwpWghEfKYN2iAg=", + "lastModified": 1772292445, + "narHash": "sha256-4F1Q7U313TKUDDovCC96m/Za4wZcJ3yqtu4eSrj8lk8=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "43f10d24391692bba3d762931ee35e7f17f8e8b8", + "rev": "1dbbba659c1cef0b0202ce92cadfe13bae550e8f", "type": "github" }, "original": { @@ -273,11 +273,11 @@ ] }, "locked": { - "lastModified": 1772408722, - "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "type": "github" }, "original": { @@ -291,11 +291,11 @@ "nixpkgs-lib": "nixpkgs-lib_2" }, "locked": { - "lastModified": 1772408722, - "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "type": "github" }, "original": { @@ -392,11 +392,11 @@ ] }, "locked": { - "lastModified": 1772985280, - "narHash": "sha256-FdrNykOoY9VStevU4zjSUdvsL9SzJTcXt4omdEDZDLk=", + "lastModified": 1770260404, + "narHash": "sha256-3iVX1+7YUIt23hBx1WZsUllhbmP2EnXrV8tCRbLxHc8=", "owner": "nix-community", "repo": "home-manager", - "rev": "8f736f007139d7f70752657dff6a401a585d6cbc", + "rev": "0d782ee42c86b196acff08acfbf41bb7d13eed5b", "type": "github" }, "original": { @@ -422,11 +422,11 @@ ] }, "locked": { - "lastModified": 1772461003, - "narHash": "sha256-pVICsV7FtcEeVwg5y/LFh3XFUkVJninm/P1j/JHzEbM=", + "lastModified": 1753964049, + "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "b62396457b9cfe2ebf24fe05404b09d2a40f8ed7", + "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", "type": "github" }, "original": { @@ -451,11 +451,11 @@ ] }, "locked": { - "lastModified": 1772461523, - "narHash": "sha256-mI6A51do+hEUzeJKk9YSWfVHdI/SEEIBi2tp5Whq5mI=", + "lastModified": 1770511807, + "narHash": "sha256-suKmSbSk34uPOJDTg/GbPrKEJutzK08vj0VoTvAFBCA=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "7d63c04b4a2dd5e59ef943b4b143f46e713df804", + "rev": "7c75487edd43a71b61adb01cae8326d277aab683", "type": "github" }, "original": { @@ -476,7 +476,7 @@ "hyprwayland-scanner": "hyprwayland-scanner", "hyprwire": "hyprwire", "nixpkgs": [ - "nixpkgs-unstable" + "nixpkgs" ], "pre-commit-hooks": "pre-commit-hooks", "systems": [ @@ -485,17 +485,17 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1774136452, - "narHash": "sha256-pSwj8WNWXMuZaDqCyhQwlngRD3JyNmZwldSe6UqWAos=", - "owner": "hyprwm", - "repo": "Hyprland", - "rev": "bf31f642b08a8d8ca796a1b713285f2580805c2f", - "type": "github" + "lastModified": 1772862346, + "narHash": "sha256-cfzHdBAkACrE2kuFlVPub2W7qZwobsrHcmYhoKVLtdY=", + "ref": "refs/heads/main", + "rev": "b41882c169f589848f0efb10c88c1dad383af04b", + "revCount": 6999, + "type": "git", + "url": "https://tearforge.net/cry/Hyprland" }, "original": { - "owner": "hyprwm", - "repo": "Hyprland", - "type": "github" + "type": "git", + "url": "https://tearforge.net/cry/Hyprland" } }, "hyprland-guiutils": { @@ -531,11 +531,11 @@ ] }, "locked": { - "lastModified": 1772467975, - "narHash": "sha256-kipyuDBxrZq+beYpZqWzGvFWm4QbayW9agAvi94vDXY=", + "lastModified": 1767023960, + "narHash": "sha256-R2HgtVS1G3KSIKAQ77aOZ+Q0HituOmPgXW9nBNkpp3Q=", "owner": "hyprwm", "repo": "hyprland-guiutils", - "rev": "5e1c6b9025aaf4d578f3eff7c0eb1f0c197a9507", + "rev": "c2e906261142f5dd1ee0bfc44abba23e2754c660", "type": "github" }, "original": { @@ -556,11 +556,11 @@ ] }, "locked": { - "lastModified": 1772460177, - "narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=", + "lastModified": 1765214753, + "narHash": "sha256-P9zdGXOzToJJgu5sVjv7oeOGPIIwrd9hAUAP3PsmBBs=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917", + "rev": "3f3860b869014c00e8b9e0528c7b4ddc335c21ab", "type": "github" }, "original": { @@ -585,11 +585,11 @@ ] }, "locked": { - "lastModified": 1772459629, - "narHash": "sha256-/iwvNUYShmmnwmz/czEUh6+0eF5vCMv0xtDW0STPIuM=", + "lastModified": 1771866172, + "narHash": "sha256-fYFoXhQLrm1rD8vSFKQBOEX4OGCuJdLt1amKfHd5GAw=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "7615ee388de18239a4ab1400946f3d0e498a8186", + "rev": "0b219224910e7642eb0ed49f0db5ec3d008e3e41", "type": "github" }, "original": { @@ -637,11 +637,11 @@ ] }, "locked": { - "lastModified": 1772462885, - "narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=", + "lastModified": 1764592794, + "narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=", "owner": "hyprwm", "repo": "hyprtoolkit", - "rev": "9af245a69fa6b286b88ddfc340afd288e00a6998", + "rev": "5cfe0743f0e608e1462972303778d8a0859ee63e", "type": "github" }, "original": { @@ -662,11 +662,11 @@ ] }, "locked": { - "lastModified": 1773948364, - "narHash": "sha256-S76omfIVQ1TpGiXFbqih6o6XcH3sA5+5QI+SXB4HvlY=", + "lastModified": 1771271487, + "narHash": "sha256-41gEiUS0Pyw3L/ge1l8MXn61cK14VAhgWB/JV8s/oNI=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "b85b779e3e3a1adcd9b098e3447cf48f9e780b35", + "rev": "340a792e3b3d482c4ae5f66d27a9096bdee6d76d", "type": "github" }, "original": { @@ -687,11 +687,11 @@ ] }, "locked": { - "lastModified": 1772459835, - "narHash": "sha256-978jRz/y/9TKmZb/qD4lEYHCQGHpEXGqy+8X2lFZsak=", + "lastModified": 1770501770, + "narHash": "sha256-NWRM6+YxTRv+bT9yvlhhJ2iLae1B1pNH3mAL5wi2rlQ=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "0a692d4a645165eebd65f109146b8861e3a925e7", + "rev": "0bd8b6cde9ec27d48aad9e5b4deefb3746909d40", "type": "github" }, "original": { @@ -716,11 +716,11 @@ ] }, "locked": { - "lastModified": 1773074819, - "narHash": "sha256-qRqYnXiKoJLRTcfaRukn7EifmST2IVBUMZOeZMAc5UA=", + "lastModified": 1771606233, + "narHash": "sha256-F3PLUqQ/TwgR70U+UeOqJnihJZ2EuunzojYC4g5xHr0=", "owner": "hyprwm", "repo": "hyprwire", - "rev": "f68afd0e73687598cc2774804fedad76693046f0", + "rev": "06c7f1f8c4194786c8400653c4efc49dc14c0f3a", "type": "github" }, "original": { @@ -823,11 +823,11 @@ "scenefx": "scenefx" }, "locked": { - "lastModified": 1773034081, - "narHash": "sha256-tH1yy1LQYtmGWnCU7whsdX0iGpc2dvaJ+7p6rvuKkHg=", + "lastModified": 1771732288, + "narHash": "sha256-N1H7LMWXYNn7zN9ghp4vHlBs4O/Rw/+ZEoPUpm9ozw4=", "owner": "DreamMaoMao", "repo": "mango", - "rev": "db30977196b91cfe2e5db8e9829faafe13417bd9", + "rev": "6b2d694b234cae9876eb81e27991439eb51860f1", "type": "github" }, "original": { @@ -901,11 +901,11 @@ }, "locked": { "dir": "packages/nix", - "lastModified": 1774360398, - "narHash": "sha256-IvuZMTxTe5osTszZp4r27X/F0R7FVhLWkP7g6pYMgTs=", + "lastModified": 1772390578, + "narHash": "sha256-3yQlDZz9JZqPFiYYj8fQkpCXUzjlAw4s7zaZ2n0wFmE=", "owner": "SteamClientHomebrew", "repo": "millennium", - "rev": "4378aac79283a11912dd1a7adf89f79ab3736a87", + "rev": "41d8c701e1f1ed4362e8378d12bbe5cb0cb811d6", "type": "github" }, "original": { @@ -1066,15 +1066,14 @@ "flake-parts": "flake-parts_3", "nixpkgs": [ "nixpkgs" - ], - "nixpkgs-nixcord": "nixpkgs-nixcord" + ] }, "locked": { - "lastModified": 1774312874, - "narHash": "sha256-mFc7Iy+Oqwr7Vwb7CmNIWilSYiTw2857imf6Rb75ITg=", + "lastModified": 1771375681, + "narHash": "sha256-qDDw0ruBZ1kt63j4uVP5Xrd1OxGKIYrSFnig0z6ozSw=", "owner": "FlameFlag", "repo": "nixcord", - "rev": "71f4b3f92ca534c3665deb63e229195955d96cf9", + "rev": "d030dbb48ab020092681a39c878c1d48a553ffc1", "type": "github" }, "original": { @@ -1085,11 +1084,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1772822230, - "narHash": "sha256-yf3iYLGbGVlIthlQIk5/4/EQDZNNEmuqKZkQssMljuw=", + "lastModified": 1771903837, + "narHash": "sha256-sdaqdnsQCv3iifzxwB22tUwN/fSHoN7j2myFW5EIkGk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "71caefce12ba78d84fe618cf61644dce01cf3a96", + "rev": "e764fc9a405871f1f6ca3d1394fb422e0a0c3951", "type": "github" }, "original": { @@ -1116,11 +1115,11 @@ }, "nixpkgs-lib_2": { "locked": { - "lastModified": 1772328832, - "narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=", + "lastModified": 1769909678, + "narHash": "sha256-cBEymOf4/o3FD5AZnzC3J9hLbiZ+QDT/KDuyHXVJOpM=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742", + "rev": "72716169fe93074c333e8d0173151350670b824c", "type": "github" }, "original": { @@ -1131,11 +1130,11 @@ }, "nixpkgs-master": { "locked": { - "lastModified": 1773068446, - "narHash": "sha256-MCEmktH6AFJH8Pg1rBGB2Q0FhS5z5K87IsMbUU8uzHI=", + "lastModified": 1772170669, + "narHash": "sha256-ClBvX0YzaJOaGZInNi0e3mFknzr/rAdwKbWrjO1j1sg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "70b7278e2c0acc26ad3360551bf9c15c5ccc0acd", + "rev": "ee234284495a7ff3ecffb062595102fdc4fbe617", "type": "github" }, "original": { @@ -1145,29 +1144,13 @@ "type": "github" } }, - "nixpkgs-nixcord": { - "locked": { - "lastModified": 1773222311, - "narHash": "sha256-BHoB/XpbqoZkVYZCfXJXfkR+GXFqwb/4zbWnOr2cRcU=", - "owner": "NixOS", - "repo": "nixpkgs", - "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=", + "lastModified": 1771008912, + "narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "aca4d95fce4914b3892661bcb80b8087293536c6", + "rev": "a82ccc39b39b621151d6732718e3e250109076fa", "type": "github" }, "original": { @@ -1223,11 +1206,11 @@ ] }, "locked": { - "lastModified": 1772893680, - "narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=", + "lastModified": 1772024342, + "narHash": "sha256-+eXlIc4/7dE6EcPs9a2DaSY3fTA9AE526hGqkNID3Wg=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "8baab586afc9c9b57645a734c820e4ac0a604af9", + "rev": "6e34e97ed9788b17796ee43ccdbaf871a5c2b476", "type": "github" }, "original": { @@ -1326,11 +1309,11 @@ ] }, "locked": { - "lastModified": 1771956684, - "narHash": "sha256-+EtzmEzGA2xqwIvKrP0euYaOzrmTQWEWAiWV+k2WBEM=", + "lastModified": 1769900466, + "narHash": "sha256-WeoJBj/PhqFCCJEIycTipqPbKm5BpQT2uzFTYcYZ30I=", "owner": "uiriansan", "repo": "SilentSDDM", - "rev": "34f82e1fb8412fff78b82a0dcce763492b36054c", + "rev": "a44caf771b4cb72f5c2514f7d488455b0fa860d2", "type": "github" }, "original": { @@ -1386,11 +1369,11 @@ ] }, "locked": { - "lastModified": 1773007504, - "narHash": "sha256-4NtiCDH3RunKbrlWvPCB6dyTjCwqdrHaBDeMCzG6gIA=", + "lastModified": 1772494187, + "narHash": "sha256-6ksgNAFXVK+Cg/6ww7bB2nJUPZlnS75UwZC7G+L03EE=", "owner": "Gerg-L", "repo": "spicetify-nix", - "rev": "434e63b851f9139aaeddc3b8de44d47992828b3b", + "rev": "915ab06b046d05613041780c575c62a32fe67cea", "type": "github" }, "original": { @@ -1529,11 +1512,11 @@ ] }, "locked": { - "lastModified": 1772669058, - "narHash": "sha256-XhnY0aRuDo5LT8pmJVPofPOgO2hAR7T+XRoaQxtNPzQ=", + "lastModified": 1761431178, + "narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "906d0ac159803a7df2dc1f948df9327670380f69", + "rev": "4b8801228ff958d028f588f0c2b911dbf32297f9", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index c6d00fb..4d6e468 100644 --- a/flake.nix +++ b/flake.nix @@ -16,7 +16,9 @@ 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"; @@ -40,10 +42,12 @@ }; hyprland = { - url = "github:hyprwm/Hyprland"; + # FUCK HYPRLAND + # url = "github:hyprwm/Hyprland/4152ac76d0813d9d0f67d2f04653a13fa6e17433"; + url = "git+https://tearforge.net/cry/Hyprland"; inputs = { - nixpkgs.follows = "nixpkgs-unstable"; + nixpkgs.follows = "nixpkgs"; systems.follows = "systems"; }; }; diff --git a/groups/cryde/programs.nix b/groups/cryde/programs.nix index 4505a42..3605866 100644 --- a/groups/cryde/programs.nix +++ b/groups/cryde/programs.nix @@ -25,6 +25,8 @@ # Games upkgs.olympus # celeste + discord + discordo upkgs.ekphos prismlauncher # minecraft diff --git a/groups/cryos/default.nix b/groups/cryos/default.nix index dd4af16..236930f 100644 --- a/groups/cryos/default.nix +++ b/groups/cryos/default.nix @@ -1,7 +1,6 @@ -{...}: { +{lib, ...}: { imports = [ ./programs.nix - ./keybinds.nix ]; boot.loader = { @@ -84,20 +83,10 @@ 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; - }; - }; - }; }; }; - # allows pipewire to use the realtime scheduler for increased performance - security.rtkit.enable = true; + security.rtkit.enable = true; # I *think* this is for pipewire # ---- ENVIRONMENT VARIABLES ---- environment = { diff --git a/groups/cryos/keybinds.nix b/groups/cryos/keybinds.nix deleted file mode 100644 index 25a3f19..0000000 --- a/groups/cryos/keybinds.nix +++ /dev/null @@ -1,19 +0,0 @@ -{...}: { - 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 9d7eaa7..ee38f86 100644 --- a/groups/cryos/programs.nix +++ b/groups/cryos/programs.nix @@ -45,7 +45,6 @@ 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 20da14e..cb55017 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 = "them@dobutterfliescry.net"; + defaults.email = "eclarkboman@gmail.com"; }; # allow SSH keys for passwordless auth diff --git a/homes/me/default.nix b/homes/me/default.nix index b800d70..89d16b5 100755 --- a/homes/me/default.nix +++ b/homes/me/default.nix @@ -1,50 +1,36 @@ {pkgs, ...}: { imports = [ - ./modules/cli/git.nix - ./modules/cli/ssh.nix - + ../modules/fish.nix + ../modules/btop.nix + ../modules/tmux.nix + ../modules/git.nix + ../modules/bat.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/hyprland - ../modules/wm/mango - ../modules/de/mako.nix - ../modules/de/waybar + # ../modules/wm + ../modules/wm/mangowc.nix + # ../modules/wm/hypr/hyprland.nix + # ../modules/wm/hypr/hyprlock.nix + ../modules/kanshi.nix + ../modules/mako.nix ]; - programs.elvish.enable = true; - home = { shellAliases = { - # nix nd = "nix develop"; - ntv = "nix-search-tv"; rebuild = "nh os switch ~/flake"; trybuild = "nh os test ~/flake"; - - # 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"; + brip = "batgrep"; # bat + ripgrep + man = "batman"; # bat + man }; pointerCursor = { @@ -57,13 +43,14 @@ packages = with pkgs; [ # for services.gnome-keyring - gcr # provides org.gnome.keyring.SystemPrompter + pkgs.gcr # provides org.gnome.keyring.SystemPrompter seahorse # gui - krita + tor-browser fuzzel + speedtest-cli ]; }; @@ -94,9 +81,98 @@ 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/me/modules/cli/ssh.nix b/homes/me/modules/cli/ssh.nix deleted file mode 100644 index 34247c8..0000000 --- a/homes/me/modules/cli/ssh.nix +++ /dev/null @@ -1,46 +0,0 @@ -{...}: { - # 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 new file mode 100755 index 0000000..5a11efc --- /dev/null +++ b/homes/modules/ags/config.js @@ -0,0 +1,30 @@ +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 new file mode 100644 index 0000000..448e32e --- /dev/null +++ b/homes/modules/ags/default.nix @@ -0,0 +1,12 @@ +{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 new file mode 100755 index 0000000..e69de29 diff --git a/homes/modules/ags/widgets/applauncher.js b/homes/modules/ags/widgets/applauncher.js new file mode 100755 index 0000000..d94244a --- /dev/null +++ b/homes/modules/ags/widgets/applauncher.js @@ -0,0 +1,125 @@ +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 new file mode 100755 index 0000000..8f361ac --- /dev/null +++ b/homes/modules/ags/widgets/bar.ts @@ -0,0 +1,38 @@ +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 new file mode 100755 index 0000000..72682f2 --- /dev/null +++ b/homes/modules/ags/widgets/fullscreen.js @@ -0,0 +1,23 @@ +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 new file mode 100644 index 0000000..3af9fcf --- /dev/null +++ b/homes/modules/ags/widgets/notifications.js @@ -0,0 +1,122 @@ +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 2913e85..96ec353 100644 --- a/homes/modules/apps/nixcord.nix +++ b/homes/modules/apps/nixcord.nix @@ -1,16 +1,8 @@ -{ - inputs, - pkgs, - ... -}: { +{inputs, ...}: { imports = [ inputs.nixcord.homeModules.nixcord ]; - home.packages = with pkgs; [ - discordo - ]; - programs.nixcord = { enable = true; equibop.enable = true; @@ -26,7 +18,6 @@ "base16-colors.css" ]; plugins = { - invisibleChat.enable = true; anonymiseFileNames = { enable = true; anonymiseByDefault = true; @@ -58,7 +49,7 @@ separatedDiffs = false; }; fakeNitro.enable = true; - ghosted.enable = false; + ghosted.enable = true; noF1.enable = true; noMaskedUrlPaste.enable = true; messageLatency = { @@ -77,6 +68,7 @@ forwardAnywhere.enable = true; spotifyCrack.enable = true; spotifyShareCommands.enable = true; + spotifyControls.enable = true; fullUserInChatbox.enable = true; gifPaste.enable = true; ignoreActivities = { @@ -104,11 +96,6 @@ revealAllSpoilers.enable = true; serverInfo.enable = true; serverListIndicators.enable = true; - musicControls = { - enable = true; - showSpotifyControls = true; - showSpotifyLyrics = true; - }; showHiddenChannels.enable = true; showHiddenThings.enable = true; showTimeoutDuration = { @@ -146,6 +133,7 @@ whoReacted.enable = true; whosWatching.enable = true; quickReply.enable = true; + questCompleter.enable = true; shikiCodeblocks = { enable = true; useDevIcon = "COLOR"; diff --git a/homes/modules/bat.nix b/homes/modules/bat.nix new file mode 100755 index 0000000..fca2231 --- /dev/null +++ b/homes/modules/bat.nix @@ -0,0 +1,24 @@ +{ + 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/btop.nix b/homes/modules/btop.nix similarity index 100% rename from homes/modules/cli/btop.nix rename to homes/modules/btop.nix diff --git a/homes/modules/cli/bat.nix b/homes/modules/cli/bat.nix deleted file mode 100755 index 70268f5..0000000 --- a/homes/modules/cli/bat.nix +++ /dev/null @@ -1,109 +0,0 @@ -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/cli/hyfetch.nix b/homes/modules/cli/hyfetch.nix deleted file mode 100644 index b0a64a0..0000000 --- a/homes/modules/cli/hyfetch.nix +++ /dev/null @@ -1,22 +0,0 @@ -{...}: { - 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/de/waybar/colors.css b/homes/modules/de/waybar/colors.css deleted file mode 100644 index 98bb26f..0000000 --- a/homes/modules/de/waybar/colors.css +++ /dev/null @@ -1,19 +0,0 @@ -@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 deleted file mode 100644 index 96be196..0000000 --- a/homes/modules/de/waybar/default.nix +++ /dev/null @@ -1,91 +0,0 @@ -{...}: { - 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 deleted file mode 100644 index 09740c6..0000000 --- a/homes/modules/de/waybar/style.css +++ /dev/null @@ -1,165 +0,0 @@ -* { - 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 7724723..f824b1c 100644 --- a/homes/modules/editor/vscode.nix +++ b/homes/modules/editor/vscode.nix @@ -1,4 +1,5 @@ { + config, lib, pkgs, vscodium ? false, @@ -19,7 +20,7 @@ homepage ? null, changelog ? null, license ? null, - maintainers ? [], + maintainers ? [lib.maintainers.emileclarkb], }: with pkgs.vscode-utils.buildVscodeMarketplaceExtension; { ${publisher}.${name} = buildVscodeMarketplaceExtension { diff --git a/homes/modules/fish.nix b/homes/modules/fish.nix new file mode 100755 index 0000000..ddfbcf7 --- /dev/null +++ b/homes/modules/fish.nix @@ -0,0 +1,90 @@ +{ + 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/me/modules/cli/git.nix b/homes/modules/git.nix similarity index 100% rename from homes/me/modules/cli/git.nix rename to homes/modules/git.nix diff --git a/homes/modules/wm/hyprland/kanshi.nix b/homes/modules/kanshi.nix similarity index 96% rename from homes/modules/wm/hyprland/kanshi.nix rename to homes/modules/kanshi.nix index 919eee7..906f6a8 100755 --- a/homes/modules/wm/hyprland/kanshi.nix +++ b/homes/modules/kanshi.nix @@ -1,9 +1,13 @@ -{...}: { +{ + 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 = false; + enable = true; systemdTarget = "hyprland-session.target"; # You can find your monitors in hyprland by using `hyprctl monitors all` settings = [ diff --git a/homes/modules/de/mako.nix b/homes/modules/mako.nix similarity index 88% rename from homes/modules/de/mako.nix rename to homes/modules/mako.nix index dca8a73..762cd96 100644 --- a/homes/modules/de/mako.nix +++ b/homes/modules/mako.nix @@ -1,8 +1,4 @@ -{ - lib, - hostname, - ... -}: let +{...}: let dracula = rec { background = "#282A36"; border = cyan; @@ -19,7 +15,6 @@ in { enable = true; settings = { actions = true; - output = lib.optionalString (hostname == "myputer") "DP-2"; anchor = "top-right"; layer = "overlay"; sort = "-time"; @@ -41,7 +36,7 @@ in { ignore-timeout = false; "actionable=true" = { - anchor = "top-right"; + anchor = "top-left"; }; "urgency=low" = { diff --git a/homes/modules/apps/obs.nix b/homes/modules/obs.nix similarity index 100% rename from homes/modules/apps/obs.nix rename to homes/modules/obs.nix diff --git a/homes/modules/rofi.nix b/homes/modules/rofi.nix new file mode 100755 index 0000000..6d05543 --- /dev/null +++ b/homes/modules/rofi.nix @@ -0,0 +1,13 @@ +{ + 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 deleted file mode 100644 index a0b505c..0000000 --- a/homes/modules/services/ssh-agent.nix +++ /dev/null @@ -1,16 +0,0 @@ -{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 deleted file mode 100644 index 44a19dd..0000000 --- a/homes/modules/shell/elvish.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - 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 deleted file mode 100755 index 07f3f59..0000000 --- a/homes/modules/shell/fish.nix +++ /dev/null @@ -1,71 +0,0 @@ -{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 deleted file mode 100644 index 361191e..0000000 --- a/homes/modules/shell/zsh.nix +++ /dev/null @@ -1,17 +0,0 @@ -{...}: { - 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 new file mode 100644 index 0000000..d446b15 --- /dev/null +++ b/homes/modules/term/default.nix @@ -0,0 +1,9 @@ +{ + lib, + ... +}: +{ + options = { + + } +} diff --git a/homes/modules/term/rio.nix b/homes/modules/term/rio.nix index 3b540dd..88ef968 100755 --- a/homes/modules/term/rio.nix +++ b/homes/modules/term/rio.nix @@ -1,4 +1,8 @@ -{pkgs, ...}: { +{ + config, + pkgs, + ... +}: { home = { packages = [ pkgs.rio diff --git a/homes/modules/theme.rasi b/homes/modules/theme.rasi new file mode 100755 index 0000000..07c375d --- /dev/null +++ b/homes/modules/theme.rasi @@ -0,0 +1,209 @@ +/** + * + * 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/cli/tmux.nix b/homes/modules/tmux.nix similarity index 100% rename from homes/modules/cli/tmux.nix rename to homes/modules/tmux.nix diff --git a/homes/modules/wm/default.nix b/homes/modules/wm/default.nix new file mode 100644 index 0000000..8c0cc95 --- /dev/null +++ b/homes/modules/wm/default.nix @@ -0,0 +1,39 @@ +{ + 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/hyprland/hypridle.nix b/homes/modules/wm/hypr/hypridle.nix similarity index 100% rename from homes/modules/wm/hyprland/hypridle.nix rename to homes/modules/wm/hypr/hypridle.nix diff --git a/homes/modules/wm/hypr/hyprland.nix b/homes/modules/wm/hypr/hyprland.nix new file mode 100755 index 0000000..77b3b44 --- /dev/null +++ b/homes/modules/wm/hypr/hyprland.nix @@ -0,0 +1,29 @@ +# 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/hyprlock.nix b/homes/modules/wm/hypr/hyprlock.nix similarity index 100% rename from homes/modules/wm/hyprland/hyprlock.nix rename to homes/modules/wm/hypr/hyprlock.nix diff --git a/homes/modules/wm/hyprland/default.nix b/homes/modules/wm/hyprland/default.nix deleted file mode 100755 index f77e554..0000000 --- a/homes/modules/wm/hyprland/default.nix +++ /dev/null @@ -1,379 +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) -{ - 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/mango/default.nix b/homes/modules/wm/mangowc.nix similarity index 100% rename from homes/modules/wm/mango/default.nix rename to homes/modules/wm/mangowc.nix diff --git a/homes/modules/wofi.nix b/homes/modules/wofi.nix new file mode 100755 index 0000000..81a25d3 --- /dev/null +++ b/homes/modules/wofi.nix @@ -0,0 +1,183 @@ +{ + 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 65a126f..1e1c782 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 = "_cry64"; + AUTHOR = "Emile Clark-Boman - emileclarkb"; 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,cry,_cry64,cry64,dobutterfliescry,butterfly,butterflies,git,forge,forgejo,self-hosted,tearforge"; + KEYWORDS = "emile,clark,boman,clarkboman,emileclarkb,git,forge,forgejo,self-hosted,dobutterfliescry,butterfly,butterflies,cry,tearforge"; }; markdown = { diff --git a/hosts/butterfly/services/mailserver.nix b/hosts/butterfly/services/mailserver.nix index 7602302..cd2adfc 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 = { - "them@dobutterfliescry.net" = { - aliases = ["cry@dobutterfliescry.net"]; + "me@imbored.dev" = { + aliases = ["emile@imbored.dev"]; 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 2e2e450..e3a1309 100755 --- a/hosts/lolcathost/default.nix +++ b/hosts/lolcathost/default.nix @@ -1,9 +1,4 @@ -{ - root, - config, - pkgs, - ... -}: { +{...}: { imports = [ ./hardware.nix ]; @@ -22,38 +17,6 @@ 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 ac62e39..4d5d322 100644 --- a/hosts/matcha/default.nix +++ b/hosts/matcha/default.nix @@ -19,6 +19,7 @@ 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 74ba955..4a42f74 100644 --- a/hosts/modules/langs/dotnet.nix +++ b/hosts/modules/langs/dotnet.nix @@ -36,6 +36,7 @@ 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 b4d7680..cf79fa8 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -10,20 +10,6 @@ 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; }; @@ -66,7 +52,7 @@ lib.mkIf (inputs?hyprland) (inputs.hyprland.packages.${system}.hyprland.overrideAttrs (final: prev: { patches = let - glaze_version = inputs.hyprland.inputs.nixpkgs.legacyPackages.glaze.version; + glaze_version = pkgs.glaze.version; in prev.patches ++ [ diff --git a/packages/angryoxide/default.nix b/packages/angryoxide/default.nix index d9a7632..7610848 100644 --- a/packages/angryoxide/default.nix +++ b/packages/angryoxide/default.nix @@ -10,6 +10,7 @@ angryoxide-meta = { homepage = "https://github.com/${angryoxide-owner}/${angryoxide-pname}"; license = lib.licenses.gpl3; + maintainers = [lib.maintainers.emileclarkb]; }; # "Vendored LibWifi used in AngryOxide" @@ -65,7 +66,7 @@ meta = { - description = "AngryOxide's source files isolated by @_cry64 into a separate Nix derivation."; + description = "AngryOxide's source files isolated by (@emileclarkb) into a separate Nix derivation."; } // angryoxide-meta; }; diff --git a/packages/chameleonultragui/default.nix b/packages/chameleonultragui/default.nix index 13c78b4..0aa10ec 100644 --- a/packages/chameleonultragui/default.nix +++ b/packages/chameleonultragui/default.nix @@ -463,6 +463,7 @@ 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 2dc837e..8e90cab 100644 --- a/packages/ekphos/default.nix +++ b/packages/ekphos/default.nix @@ -20,5 +20,6 @@ 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 new file mode 100644 index 0000000..6607af5 --- /dev/null +++ b/patches @@ -0,0 +1,11 @@ +# 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 deleted file mode 100644 index e0e129a..0000000 --- a/secrets/user.yaml +++ /dev/null @@ -1,19 +0,0 @@ -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