951 Commits

Author SHA1 Message Date
Hadi 80ca377585 v5.0.0 2026-04-19 18:51:14 +02:00
Hadi 3a8ac99f43 fix warning
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-19 18:50:55 +02:00
Hadi 6724573f16 Merge pull request #54 from Chiloute/fix-nvf-tailwind-install
nvf tailwind new install method
2026-04-19 18:48:30 +02:00
Hadi 13ae753f3d update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-19 18:45:22 +02:00
Hadi 805f43618c Edit qutebrowser config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-19 18:45:19 +02:00
Hadi 4489c9e0ae Add Proton Mail & Calendar shortcuts
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-19 17:38:03 +02:00
Hadi 3a86013330 new theme!
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-18 20:11:38 +02:00
Hadi 922a412cda tabs switching & shortcuts
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-18 01:25:06 +02:00
Hadi cedf87698c edit home src
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-18 01:13:04 +02:00
Hadi 52561cf335 qutebrowser configuration
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-18 01:12:46 +02:00
Hadi 9429c9f93b dead imports
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-18 01:03:57 +02:00
Hadi 5e0dd70cfa Edit secrets & hostname
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-18 00:53:51 +02:00
Hadi 9e24c44c53 A lot of QOL changement, remove Zen, config Qutebrowser, update a lot of things
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-18 00:44:22 +02:00
pph 241db5ce7a init qutebrowser
Signed-off-by: pph <pph@pph.pph>
2026-04-17 14:43:58 +02:00
pph 00faa213bf move shortcuts
Signed-off-by: pph <pph@pph.pph>
2026-04-17 13:40:29 +02:00
pph 0aac097e77 edit groups
Signed-off-by: pph <pph@pph.pph>
2026-04-17 13:40:23 +02:00
pph 5aaeba1512 new bookmark
Signed-off-by: pph <pph@pph.pph>
2026-04-16 14:54:37 +02:00
Chiloute 1bdf7a3af5 nvf tailwind new install method
Signed-off-by: Chiloute <35150997+Chiloute@users.noreply.github.com>
2026-04-15 19:33:59 +02:00
Hadi 4f3cf99b99 nevermind
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-12 20:24:15 +02:00
Hadi f7a2aa6256 change from number to username + env var
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-12 19:24:24 +02:00
Hadi ac3c0886b7 auto upgrades
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-12 19:02:46 +02:00
Hadi 17f976d4e7 edit keybinds
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-11 17:44:25 +02:00
Hadi daaf0d2b27 edit secrets
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-11 12:26:35 +02:00
Hadi 5f0d3bff5f remove pins and change some keybinds
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-11 12:22:53 +02:00
Hadi 36ad6aeb57 Change from brave to zen
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-11 11:59:04 +02:00
Hadi 2326857f65 hardening
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-11 11:27:39 +02:00
Hadi 28b7923e47 New way to deploy apps in my server
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-11 02:26:00 +02:00
Hadi 29bdd6468a remove discord
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-11 01:34:02 +02:00
Hadi 08db0a42c4 add claude-code to jack
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-10 22:57:18 +02:00
Hadi 66cc2a3958 add colors
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-10 22:57:09 +02:00
Hadi 80afef207a edit gitignore
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-10 22:23:05 +02:00
Hadi d18d67d86e update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-07 22:48:29 +02:00
pph 2e10d6feff Merge branch 'main' of github.com:anotherhadi/nixy 2026-04-07 13:42:51 +02:00
pph dea17ebf3c remove update nws
Signed-off-by: pph <pph@pph.pph>
2026-04-07 13:42:40 +02:00
Hadi ae024e308d Merge branch 'main' of github.com:anotherhadi/nixy 2026-04-06 15:13:17 +02:00
Hadi 302f0ceec9 Add variables for domain & tunnel id
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-06 15:13:10 +02:00
github-actions 1cddeef739 Update README.md (auto) 2026-04-03 18:45:39 +00:00
Hadi d7b72277f7 change gitlab user
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-04-03 20:45:03 +02:00
Hadi 5d9ab362a3 update blog config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-30 20:00:00 +02:00
Hadi a6b2f66ac8 init swappy config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-30 18:30:34 +02:00
Hadi e2a60b15dc Merge branch 'main' of github.com:anotherhadi/nixy 2026-03-30 18:30:19 +02:00
Hadi d029d6f205 init gitea instance
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-30 18:30:14 +02:00
Hadi d9b4102bed rename
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-30 18:05:44 +02:00
Hadi a744d85f48 update secrets
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-30 18:05:22 +02:00
github-actions 5d50819d49 Update README.md (auto) 2026-03-30 15:11:28 +00:00
Hadi 087f71d2d5 update readme
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-30 17:10:18 +02:00
Hadi 3f36665767 new secret
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-28 19:31:18 +01:00
Hadi 6cb4d1eb96 Merge branch 'main' of github.com:anotherhadi/nixy 2026-03-28 18:59:06 +01:00
Hadi 983c83b981 change gitlab secret
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-28 18:59:02 +01:00
Hadi c482e6e075 update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-25 21:57:24 +01:00
Hadi 0a01e8f3e8 update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-25 21:40:18 +01:00
Hadi 641411ad51 edit bookmarks
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-25 21:40:13 +01:00
Hadi 86fd60fd3d update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-25 20:53:09 +01:00
Hadi 9a41aff92d migration hadi.diy > hadi.icu
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-25 20:30:02 +01:00
Hadi e4a2a7abd0 edit tunnels
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-25 18:51:17 +01:00
Hadi b4d8e87abe change domain name
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-25 18:35:27 +01:00
Hadi 5de0ce50d6 edit secrets
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-25 18:34:43 +01:00
Hadi aba6dafffa Remove eleakxir for now #53
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-24 22:57:28 +01:00
Hadi 290471fcc2 Update default-creds
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-20 20:16:28 +01:00
pph ac90e05258 edit ghostty configuration
Signed-off-by: pph <pph@pph.pph>
2026-03-17 11:30:00 +01:00
Hadi 562f2507c0 update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-16 23:49:16 +01:00
Hadi a393b97680 +umami
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-16 23:27:43 +01:00
Hadi 59901b0081 Enable clipboard even in ssh
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-16 22:40:13 +01:00
Hadi 6ecf475301 Update hyprland
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-16 21:17:40 +01:00
pph 75483ea97a update
Signed-off-by: pph <pph@pph.pph>
2026-03-16 14:25:11 +01:00
pph 4cd0eccde5 Merge branch 'main' of github.com:anotherhadi/nixy 2026-03-16 09:45:05 +01:00
pph d32c4a317f edit secrets
Signed-off-by: pph <pph@pph.pph>
2026-03-16 09:44:54 +01:00
Hadi 5ecc516a2f init default-creds
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-14 21:16:01 +01:00
Hadi de489d7d9c remove Neofetch: deprecated
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-03-14 21:13:56 +01:00
pph 19bfd1201b Edit keymaps & add dependencies
Signed-off-by: pph <pph@pph.pph>
2026-03-13 13:47:00 +01:00
pph 20f7bca099 add nix-index-database
Signed-off-by: pph <pph@pph.pph>
2026-03-13 13:13:16 +01:00
pph 72ed018351 fix type
Signed-off-by: pph <pph@pph.pph>
2026-03-12 09:35:33 +01:00
pph b904fd4fde suppress float event from brave
Signed-off-by: pph <pph@pph.pph>
2026-03-11 17:02:15 +01:00
pph b1cf5fb3a1 QOL vim option
Signed-off-by: pph <pph@pph.pph>
2026-03-11 17:02:02 +01:00
pph fee44db81c let nixy take arguments
Signed-off-by: pph <pph@pph.pph>
2026-03-10 12:59:16 +01:00
pph 214095c02a edit secret
Signed-off-by: pph <pph@pph.pph>
2026-03-09 13:41:38 +01:00
Hadi 29fc893847 more stable nvidia version & fan control
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-28 22:37:32 +01:00
Hadi 3689215480 add extension
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-28 22:26:24 +01:00
Hadi 14168a65ea add amazon to bookmarks
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-24 21:59:24 +01:00
Hadi 43ae447b34 clamav: init
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-24 21:58:41 +01:00
Hadi 07fa66f1b6 add firefox to cybersecurity
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-24 21:58:32 +01:00
Hadi 168423cf16 Update images path 2026-02-24 18:25:34 +01:00
pph bde39be205 Add proton to work
Signed-off-by: pph <pph@pph.pph>
2026-02-23 10:59:59 +01:00
Hadi 18137f444a add bookmarks
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-20 20:57:32 +01:00
Hadi e835f2466b revert hyprland: current bug with external monitor
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-20 20:54:27 +01:00
Hadi d2a9fff0d1 DRM DEVICES now in host files
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-20 20:53:36 +01:00
Hadi 081e05c702 update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-20 20:04:17 +01:00
Hadi 4a4b997ef3 fix brave fullscreen
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-20 19:05:31 +01:00
pph 37abf49364 Merge branch 'main' of github.com:anotherhadi/nixy 2026-02-20 15:28:06 +01:00
pph 36f5ef3792 Add monitor
Signed-off-by: pph <pph@pph.pph>
2026-02-20 15:27:54 +01:00
Hadi 3d4099c97b Fix brave fullscreen
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-19 20:29:03 +01:00
Hadi 89413d06a8 add apps
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-18 21:44:57 +01:00
Hadi 76e3368f3e lock instead of logout
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-18 21:44:48 +01:00
Hadi 0f40fccb5e remove usefull keymaps
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-18 21:44:42 +01:00
Hadi cefebdbd0a quit without confirmation
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-18 21:44:36 +01:00
pph 05cfe684c2 add python lsp
Signed-off-by: pph <pph@pph.pph>
2026-02-18 15:00:11 +01:00
pph f11bd21e00 add apps
Signed-off-by: pph <pph@pph.pph>
2026-02-18 15:00:07 +01:00
pph 40477c6562 change theme
Signed-off-by: pph <pph@pph.pph>
2026-02-18 15:00:02 +01:00
Hadi d1fec1128d Merge branch 'main' of github.com:anotherhadi/nixy 2026-02-16 22:48:16 +01:00
Hadi 677a279eda add freshrss
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-16 22:48:13 +01:00
Hadi 1489261fa9 add a shortcut for the dashboard
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-15 21:21:21 +01:00
Hadi 29d19d5502 add brave & brave incognito to which-key
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-15 20:36:52 +01:00
Hadi 2f69c6e1d4 fix env variables
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-15 19:43:37 +01:00
Hadi 9ad71c5775 add binding to restart caelestia-shell
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-15 19:16:58 +01:00
Hadi b5c64e96c4 change theme
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-15 18:23:16 +01:00
Hadi af787952ad add bookmarks
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-15 18:23:11 +01:00
Hadi 4ebf579743 new bindings! which-key like
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-15 17:36:49 +01:00
Hadi 78aa49547d edit opacity
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-13 23:19:37 +01:00
pph d21fc81a19 Don't show on hover the dashbaord
Signed-off-by: pph <pph@pph.pph>
2026-02-10 09:38:12 +01:00
pph b0684b2e56 fix thunar config overwrite
Signed-off-by: pph <pph@pph.pph>
2026-02-10 09:37:52 +01:00
Hadi 49a9f3f169 new theme
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 21:49:14 +01:00
Hadi 8caa02139c fix caelestia scheme change
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 21:49:07 +01:00
Hadi 0c0a487488 add cache to glance
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 20:37:54 +01:00
Hadi 6f463fc7f9 add brave settings
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 20:33:18 +01:00
Hadi 3e82b1cd60 Add desktop entries for incognito & tor
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 19:53:44 +01:00
Hadi f9d171cef3 add QOL apps
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 19:52:40 +01:00
Hadi 89c61650bc +witr
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 19:16:04 +01:00
Hadi c94559d29f done
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 13:27:44 +01:00
Hadi e91047a3e1 Kitty -> Ghostty
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 13:27:14 +01:00
Hadi 1d75175be8 Change default for text & add title
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 13:22:00 +01:00
Hadi ea18558cb3 add code mime files
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 13:16:42 +01:00
Hadi 72c13294e6 update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 13:02:37 +01:00
Hadi a771f685b2 remove notifications from audio input/output change
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 12:46:58 +01:00
Hadi 27ad0783bc change inactive border opacity
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 12:37:35 +01:00
Hadi d61e378405 remove blueman
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 12:31:29 +01:00
Hadi baa1ce858d add more icons lib
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 12:31:06 +01:00
Hadi f32ea27565 fix icons
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 12:22:37 +01:00
Hadi b657e5a891 New mono font
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-07 12:22:25 +01:00
pph 48f3f3170b change ssh config
Signed-off-by: pph <pph@pph.pph>
2026-02-05 22:01:22 +01:00
pph 87778bd3fa init new host
Signed-off-by: pph <pph@pph.pph>
2026-02-05 19:57:56 +01:00
Hadi 5736c8ccf2 jellyfin on gpu
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-01 18:22:18 +01:00
Hadi 31031447ce glance rewrite
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-02-01 18:22:08 +01:00
Hadi 4fb4058dca Merge branch 'main' of github.com:anotherhadi/nixy 2026-02-01 18:21:43 +01:00
Hadi 33b3ef66f2 update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-30 16:49:58 +01:00
Hadi 52ee08e13b Firewall allow port 53: DNS requests
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-15 18:48:18 +01:00
Hadi 8c4b9340b6 add comments
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-13 20:30:49 +01:00
Hadi a1d57253f0 Merge branch 'main' of github.com:anotherhadi/nixy 2026-01-13 20:26:06 +01:00
Hadi 6e21914113 +mazanoke
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-13 20:25:57 +01:00
Hadi 7acddfafa1 Update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-10 15:23:28 +01:00
Hadi 9fb4072893 add unrar & 7z to utils
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-07 22:33:12 +01:00
Hadi fd644671af Server update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-06 17:24:21 +01:00
Hadi bfb7c2f4e0 -tailscale
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-06 16:53:35 +01:00
Hadi 22b5aa9797 change ssh config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-06 16:53:30 +01:00
Hadi 4ac3945174 Vivaldi->Brave
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-06 16:53:23 +01:00
Hadi d3cdc25481 Merge branch 'main' of github.com:anotherhadi/nixy 2026-01-04 00:40:14 +01:00
Hadi 6a0b3418a7 update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-04 00:40:10 +01:00
Hadi f2c2540cd4 Merge branch 'main' of github.com:anotherhadi/nixy 2026-01-04 00:28:28 +01:00
Hadi 223f785c3a auto start vpn
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-04 00:28:20 +01:00
Hadi 81ab17fed7 go back to brave
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-04 00:28:13 +01:00
Hadi 8f16767240 add cloudflared
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-04 00:11:37 +01:00
github-actions e32cf43d87 Update README.md (auto) 2026-01-01 16:15:25 +00:00
Hadi 8e6270ca34 v4.0.0
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2026-01-01 17:15:04 +01:00
github-actions 1b0eb2f7bf Update KEYBINDINGS-HYPRLAND.md (auto) 2025-12-09 16:44:29 +00:00
Hadi 7861a22df0 wofi -> vicinae
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-12-09 17:44:18 +01:00
Hadi 53ab3a608c update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-12-09 17:44:11 +01:00
Hadi e6873e8caa update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-12-03 12:27:33 +01:00
Hadi 9b7a311fc3 add nuclei
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-11-10 22:15:59 +01:00
Hadi bb7819114b gogo ghostty
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-11-06 16:55:00 +01:00
Hadi 1acb888684 add caido & wireshark
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-11-04 16:15:06 +01:00
Hadi c09899e365 remove nextcloud
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-11-04 16:15:01 +01:00
Hadi d7fea0c4aa remove bitwarden
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-11-04 16:14:44 +01:00
Hadi c8dd5f2bbf add readarr
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-11-04 16:14:40 +01:00
Hadi 71b559e0f6 edit apps
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-11-03 15:50:33 +01:00
Hadi a901005929 change kitty config & switch from alacritty to kitty
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-11-03 15:49:02 +01:00
Hadi 31fb93ff68 change theme
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-11-03 15:48:42 +01:00
Hadi 84018b229c change theme
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-11-03 15:48:30 +01:00
Hadi 27d8dfb87f update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-11-03 15:48:26 +01:00
Hadi 61c56e1b1d update git config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-10-25 22:03:13 +02:00
Hadi 2ad7a99077 update flakes
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-10-25 21:53:07 +02:00
Hadi 8088a45891 kitty -> alacritty
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-10-16 21:18:02 +02:00
Hadi 5b8240c176 add utils
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-10-16 21:16:33 +02:00
Hadi 44964ce7cc init alacritty
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-10-16 21:16:28 +02:00
github-actions 25c331b2f1 Update KEYBINDINGS-HYPRLAND.md (auto) 2025-10-13 10:06:09 +00:00
Hadi d58e10e95d update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-10-13 12:05:57 +02:00
Hadi e79e8d0d3b get back wofi for now
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-10-13 12:05:49 +02:00
Hadi 45aa87f9f8 update eleakxir
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-10-02 17:28:06 +02:00
Hadi 9dee9b0d6a new secret
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-29 14:09:34 +02:00
Hadi 2fac831333 update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-25 19:53:45 +02:00
Hadi a2cfea4c3e remove git ignore on eza
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-25 19:49:26 +02:00
Hadi 6095fb13cc update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-24 19:12:48 +02:00
Hadi 738631870d change eleakxir configuration
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-24 19:12:35 +02:00
Hadi 66169bb57e QOL Nvf
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-24 19:08:29 +02:00
Hadi 984c99f45e remove Nextcloud shortcut
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-23 19:24:41 +02:00
Hadi 47ec5d10e9 change wallpaper
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-23 19:24:35 +02:00
Hadi 43e45e5cce change notes dir
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-23 19:24:14 +02:00
Hadi 76a97d964f eleakxir: init
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-16 13:38:40 +02:00
Hadi 198e88682c update secrets
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-16 13:38:28 +02:00
Hadi 6e57ee66c2 Merge branch 'main' of github.com:anotherhadi/nixy 2025-09-13 23:08:25 +02:00
Hadi 1ace7442a1 add nixpkgs-stable
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-13 23:08:10 +02:00
github-actions cce4cbee10 Update KEYBINDINGS-HYPRLAND.md (auto) 2025-09-13 08:34:50 +00:00
Hadi 3c7702789c add back the bindings
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-13 10:34:29 +02:00
Hadi 65213eb7cf temp fix
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-12 15:49:10 +02:00
Hadi 56d7a4cd23 update flakes
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-12 15:48:59 +02:00
Hadi 8bd2c8752e working state
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-12 15:27:41 +02:00
Hadi cd95d86540 remove unused
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-12 14:49:27 +02:00
github-actions fa37b8c89f Update SCRIPTS.md (auto) 2025-09-12 12:44:19 +00:00
Hadi 32a079507c remove unused
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-12 14:44:09 +02:00
github-actions 0cb07052bd Update KEYBINDINGS-HYPRLAND.md (auto) 2025-09-12 12:36:27 +00:00
Hadi 0455d520d1 Merge branch 'main' of github.com:anotherhadi/nixy 2025-09-12 14:36:02 +02:00
Hadi 1bca9316b4 old unused wofi bindings
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-12 14:35:51 +02:00
github-actions 60c25395eb Update KEYBINDINGS-HYPRLAND.md (auto) 2025-09-12 12:35:04 +00:00
Hadi 3807536cf2 change bindings
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-12 14:34:51 +02:00
Hadi fada191840 update & remove old files
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-12 14:33:02 +02:00
Hadi b756f0fcd5 add todolist
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-11 17:25:55 +02:00
Hadi f88825b93c edit max volume
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-11 17:25:50 +02:00
Hadi ae115a50f2 change to brave browser
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-09-11 17:25:41 +02:00
Hadi 3d6a3f62ec let's try with ripgrep
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-29 00:21:37 +02:00
Hadi b0c93e7e00 change styling & font
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-29 00:13:13 +02:00
Hadi 96dc0bcb4c remove old calendar
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-29 00:03:23 +02:00
Hadi c853611916 remove the number of notifications
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-28 23:52:43 +02:00
Hadi 49f4828046 edit waybar & swaync config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-28 23:50:40 +02:00
Hadi 29dbc0af97 add vpn module
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-28 23:29:39 +02:00
github-actions bc064cf1c5 Update KEYBINDINGS-HYPRLAND.md (auto) 2025-08-28 21:11:45 +00:00
Hadi 4f9ea610d6 change for waybar
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-28 23:11:34 +02:00
github-actions 9d04654018 Update SCRIPTS.md (auto) 2025-08-28 18:59:37 +00:00
Hadi 8508faf26e add powermode-toggle
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-28 20:59:26 +02:00
Hadi 71437939ab Not using duckduckgo anymore
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-25 19:55:57 +02:00
Hadi e851e8c2c3 remove walker
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-25 19:52:54 +02:00
Hadi f3e4069e8c remove walker
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-25 19:52:05 +02:00
Hadi 3bce0bce82 add bindings for proton's app
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-25 19:41:21 +02:00
Hadi 38a61285b3 change shortcuts
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-25 19:34:31 +02:00
Hadi 2a77cbf773 add apps and remove nextcloud
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-25 19:32:24 +02:00
Hadi 87b4be1860 remove exec once of tailscale
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-25 19:32:13 +02:00
github-actions e55385b3f0 Update SCRIPTS.md (auto) 2025-08-25 17:31:18 +00:00
Hadi 8d25b1b088 Merge pull request #45 from Dylouwu/feat/qol 2025-08-25 19:31:10 +02:00
Purin 97ff9eb09e removed useless options in wofi
Same as last commit, you probably did it on purpose to allow easier
modification later on.

Signed-off-by: Purin <118902463+Dylouwu@users.noreply.github.com>
2025-08-25 16:01:11 +02:00
Purin f9c4bd1f99 removed caffeine in tofi as Hypridle is not used anymore
This is another change that can be ignored as hypridle can be commented
out and used again in nixy (even though it's quite clunky)

Signed-off-by: Purin <118902463+Dylouwu@users.noreply.github.com>
2025-08-25 15:57:16 +02:00
Purin bd2c7dfc25 Fix not needed anymore and allows rounding on all apps
Signed-off-by: Purin <118902463+Dylouwu@users.noreply.github.com>
2025-08-25 15:55:22 +02:00
Purin f110213bb0 removed useless packages for screenshot
Signed-off-by: Purin <118902463+Dylouwu@users.noreply.github.com>
2025-08-25 15:53:27 +02:00
Purin 8fdab8a9cc Hyprlock tweak, removed useless options and added QoL tweaks
This can be seen as a subjective change and you can ignore it if it does
not fit into your idea of nixy.

Signed-off-by: Purin <118902463+Dylouwu@users.noreply.github.com>
2025-08-25 15:43:08 +02:00
Purin 1e68496efe added overrideGpg to lazygit
This allows to remove the flickering/prompting from lazygit when
committing a signed commit.

Signed-off-by: Purin <118902463+Dylouwu@users.noreply.github.com>
2025-08-25 15:33:03 +02:00
Purin 172205b613 added new options when right-clicking in Thunar
Open Terminal Here and Extract here options

Signed-off-by: Purin <118902463+Dylouwu@users.noreply.github.com>
2025-08-25 15:29:32 +02:00
Purin a07b0a38ac garbage collect cleans more stuff
You might want to remove the logging

Signed-off-by: Purin <118902463+Dylouwu@users.noreply.github.com>
2025-08-25 15:24:00 +02:00
Purin f70a139bd7 changed nixy from having an upgrade to a test option
This allows you to test the configuration without building it, where as
upgrade is useless with flakes (and can be confusing with update)

Signed-off-by: Purin <118902463+Dylouwu@users.noreply.github.com>
2025-08-25 15:12:35 +02:00
Purin b98af7060b removed allowUnfree redundancy
Signed-off-by: Purin <118902463+Dylouwu@users.noreply.github.com>
2025-08-25 15:02:47 +02:00
Hadi 31bb45950d update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-23 17:18:43 +02:00
Hadi cd55babaa2 add vert.sh to the bookmarks
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-23 17:09:33 +02:00
Hadi d9b4ef2766 update flakes
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-09 20:03:43 +02:00
Hadi e8a5db5dc2 Merge pull request #42 from romek-codes/systemd-extra-config-rfc-42 2025-08-09 19:38:53 +02:00
Hadi b69baaf428 Merge branch 'main' of github.com:anotherhadi/nixy 2025-08-09 19:37:01 +02:00
Hadi 550248aa4e edit n4c alias
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-08-09 19:36:58 +02:00
Hadi 229e7bf30e Merge pull request #43 from romek-codes/fix-hyprpanel-layouts 2025-08-09 19:36:16 +02:00
romek e1f03b2909 fix hyprpanel bar layout config 2025-08-08 23:34:38 +02:00
Romek 696bbcdcdf Update systemd extraConfig to rfc 42 2025-08-08 21:49:30 +02:00
Hadi d61b5989c0 change the alias
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-29 15:20:01 +02:00
Hadi dd73b1c3e5 change wallpaper
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-29 14:19:48 +02:00
Hadi ecde37dbe6 remove grave
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-29 14:19:44 +02:00
Hadi 279a89e424 Merge branch 'main' of github.com:anotherhadi/nixy 2025-07-29 14:19:32 +02:00
Hadi be47d4801a update eleakxir
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-29 14:18:38 +02:00
Hadi 6a641139bd remove rmtrash
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-29 14:15:57 +02:00
Hadi d211c4408b change leaks path
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-28 14:40:37 +02:00
Hadi 5a6c1e7663 mounting /mnt/data
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-28 14:40:33 +02:00
Hadi 91944a9b8d add duckdb
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-28 14:36:38 +02:00
Hadi 4932c2dd5e add eleakxir
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-28 00:24:19 +02:00
Hadi c66fcbd709 testing eleakxir prod
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-27 23:00:16 +02:00
Hadi 9f01990924 update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-24 18:00:14 +02:00
Hadi 4b3c6bcb04 add utils and cache
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-24 17:59:57 +02:00
Hadi c077387e5f init walker
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-24 17:59:48 +02:00
Hadi 877171faa7 disable hypridle
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-24 17:59:35 +02:00
Hadi f9ecc03f9d put back the custom dirs
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-24 17:56:36 +02:00
Hadi a419fb2214 Merge pull request #39 from MehdiBoustani/patch-1 2025-07-21 21:17:20 +02:00
Mehdi Boustani 838187c0ad feat (hyprpanel): generic directories configuration 2025-07-21 20:40:35 +02:00
Hadi d7dc6ff8ab disable recyclarr for now
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-16 20:53:15 +02:00
Hadi 66ed46603b remove hyprpanel overlay
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-16 20:32:27 +02:00
Hadi 4323eb53b7 todo
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-16 20:32:21 +02:00
Hadi 7c36c6ce14 increase download buffer size
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-16 20:32:16 +02:00
Hadi c9ec302d19 add adguard pwd secret to glance
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-16 20:23:47 +02:00
github-actions 69bba83536 Update KEYBINDINGS-HYPRLAND.md (auto) 2025-07-16 18:14:55 +00:00
Hadi 59ae3d5f9d update laptop configuration
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-16 20:14:43 +02:00
Hadi 72e4be86eb update/format configuration for jack
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-16 19:51:05 +02:00
Hadi 18c8afb616 update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-16 19:25:32 +02:00
Hadi f74e15288b change secrets
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-11 10:47:09 +02:00
Hadi 21b993d1cc edit ssh config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-07 10:31:53 +02:00
Hadi 9ee631dd7a Merge branch 'main' of github.com:anotherhadi/nixy 2025-07-07 10:31:34 +02:00
Hadi ba3536c4dd fix typescript error with svelte
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-07 10:13:45 +02:00
github-actions 6e14ad1357 Update README.md (auto) 2025-07-04 16:52:13 +00:00
Hadi ee84daa4b4 Fix github callout 2025-07-04 18:51:58 +02:00
github-actions 806697e20d Update README.md (auto) 2025-07-04 16:49:29 +00:00
Hadi db9286108d Fix github callouts 2025-07-04 18:49:06 +02:00
Hadi 709c6c3680 change theme
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
2025-07-04 15:44:06 +02:00
Hadi 4a40717982 zen global config init
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 13d6150a4592ca4cd5e3f4950c838ae57523727c
2025-07-01 17:48:52 +02:00
Hadi 51f20ec168 fix hyprpanel config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 8639b495d233014065227a3e6ea0ed564af4c592
2025-07-01 17:48:29 +02:00
Hadi fc3d977050 update flake & fix hyprpanel
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: eebaa0ffc17af2e314bba4c7161a9b76ffd03cd8
2025-07-01 17:36:22 +02:00
github-actions 38665036fc Update README.md (auto)
Former-commit-id: 852502635cfccdd5c4b9f5c833a2c45984d5417c
2025-06-25 23:08:30 +00:00
Hadi d5cc53f975 new catppuccin theme
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 677a048f271be5beceb8fe10634cad0365efa0cf
2025-06-26 01:08:11 +02:00
Hadi 1c539f857d format & add server-modules
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: ea0d931b6464252a90f71953bf774d574b15a2d0
2025-06-26 00:13:57 +02:00
Hadi b241a2f367 update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 50cb11ecbc469b79ae9f43f473debf44dd1ecb85
2025-06-24 10:00:43 +02:00
Hadi d9d4cf53f8 change render-markdown to markview
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 8d21295f5cf94a17a7b4cb7cc67f9cf7cf38a223
2025-06-23 11:38:21 +02:00
Hadi 6649f93754 add plymouth
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 5e67a0bcd2c02d201cf8d074b5fc29aca2e41d0e
2025-06-21 14:28:12 +02:00
Hadi 74d2b12889 edit nvf config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 74aee44e9e6fc9310cd989049989c529b74b1da8
2025-06-21 14:27:59 +02:00
Hadi c594900d45 edit nvf config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 2899b84d8f0809ba14540adce1ebebb3eb225065
2025-06-19 16:06:29 +02:00
Hadi f306041af9 edit nvf config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 20350cacd5f393f214438f5b19753af53b56f305
2025-06-19 15:29:24 +02:00
Hadi 5d7c159e34 update nixarr conf
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 012e81f99509ff0756c85581292fc641c0528761
2025-06-19 15:10:03 +02:00
Hadi f4e951169a update secrets
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 09934db50d6cae2062d79577792fe980e8e2f3ff
2025-06-19 15:09:56 +02:00
Hadi 8d75aa0b2d update server
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 4a0a78fcd868e0be2a195f3bebdc82087ffd8e1e
2025-06-17 15:54:12 +02:00
Hadi 88d712360a change lazygit shortcut
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: a106c7d6be97b9e0459db1c7681a7cb34285c8ee
2025-06-17 11:30:40 +02:00
Hadi a1691ae886 from nixvim to nvf
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: d966eafd50f111f94ffe368ce685bfeb5e32c2f6
2025-06-17 11:28:12 +02:00
Hadi 37f63e248a update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: ddb95461f8394dbae6559872816e879dfe46ae53
2025-06-17 11:27:47 +02:00
Hadi 1a0e9429f7 from nixvim to nvf
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 0d6390b18f38bdba346a1f92799884d209159b33
2025-06-17 11:27:22 +02:00
Hadi f2e7751d7f from tmux to kitty
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 049f6885e51fa8227f6cd7da2a4954387eb6f0d8
2025-06-17 11:27:06 +02:00
Hadi 9857d75263 add shortcut to create a new tab in kitty
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 57c170c9aad1db000706d3dfea9e60be8fc67c57
2025-06-05 15:29:21 +02:00
Hadi 2af2fdd7a1 update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 7525f892db2971f189ab93a4e5ad6b586269688f
2025-06-05 15:29:09 +02:00
Hadi 5eeba41413 add kitty shortcuts
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: c2b90d76340429a0d6ffbaf070b28a30d2f6a2a2
2025-06-05 14:05:51 +02:00
Hadi 794650d294 remove this
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 41f98c18a1d177ee310acc3f3cb68d6897760aa8
2025-06-05 14:04:13 +02:00
Hadi 7013531715 move LD_LIBRARY_PATH
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 5a35789f8cc7009e3310d49b27381b84aca0a475
2025-06-05 13:46:20 +02:00
Hadi d35af50097 Merge pull request #32 from Brisingr05/remove-legacy-system-alias
Former-commit-id: b4eb50568dfc5819daf849513cd52e30e501e7bf
2025-06-02 09:48:08 +02:00
Brisingr05 1c587f2ff3 Remove mentions of system in flake.nix
It's a legacy alias of `nixpkgs.hostPlatform`, which is already set in each host's `hardware-configuration.nix` files.

Source: https://github.com/NixOS/nixpkgs/blob/837ff226bbd44c29303611703a4085d48f0957c9/flake.nix#L61
Former-commit-id: fb5595cb37
2025-05-31 11:00:48 +05:30
Hadi 2d344e086e update flakes
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 23fe9da36b
2025-05-28 14:33:47 +02:00
Hadi c5c6c46af8 full collect garbage
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: d60e4530f5
2025-05-28 14:33:35 +02:00
Hadi 0afd3fc6cf change chatgpt func
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: b7598a36ee
2025-05-28 10:24:07 +02:00
Hadi 7f094e0a4f update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 612a978e29
2025-05-28 10:23:48 +02:00
Hadi 3506f691eb Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: 6cb71d92ac
2025-05-26 11:16:01 +02:00
Hadi 1f36d4eb75 add trash instead of rm & improve mkdir
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 736fa52b0f
2025-05-26 11:15:42 +02:00
github-actions a7d433c2fd Update KEYBINDINGS-HYPRLAND.md (auto)
Former-commit-id: d87830d57e
2025-05-23 13:21:30 +00:00
Hadi 3ccb167d6d update
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: a0c510f906
2025-05-23 15:21:15 +02:00
Hadi 680ee14463 format
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 3f1eb01070
2025-05-23 15:11:34 +02:00
Hadi 8c4162b885 don't blink when charging
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 494de74831
2025-05-20 22:02:50 +02:00
Hadi 15f4554703 update flake
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 4eba6b9767
2025-05-16 14:01:34 +02:00
Hadi 56792d70ec Use the hyprpanel module (ty gemini)
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: a6df02573c
2025-05-13 11:24:25 +02:00
Hadi e82fa4e8c8 fix transmission
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 29fc2d6a1b
2025-05-12 14:21:17 +02:00
Hadi b7636142cd Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: a6eb2f375e
2025-05-12 13:27:39 +02:00
Hadi 43ae984817 edit secret
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: b6d1175e71
2025-05-12 13:27:36 +02:00
Hadi e3090bee73 Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: a278d7b787
2025-05-12 11:15:05 +02:00
Hadi 587bbf860e edit server config
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: e1c7055db2
2025-05-12 11:13:41 +02:00
Hadi 17e31c6bbc remove sabnzbd
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: aa72726934
2025-05-12 10:53:37 +02:00
Hadi 3693fad125 update secrets
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 9bef5046b4
2025-05-12 09:52:10 +02:00
Hadi f275bee6c8 new wallpaper
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: e9f7e9a3d0
2025-05-11 18:51:44 +02:00
Hadi 18d5042a21 add config for xarchiver
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: ac3a48dc05
2025-05-11 00:33:41 +02:00
Hadi dd83ee0e5e change floaterm command
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: ab6fc98de6
2025-05-11 00:33:24 +02:00
Hadi 0f944e4c05 add bookmarks
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: e9de49e3c7
2025-05-10 20:23:38 +02:00
Hadi 98598ee3ce add #changeme
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 8dabda6194
2025-05-07 16:10:04 +02:00
Hadi 830c1059a9 update flakes
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>

Former-commit-id: 70355c96ac
2025-05-07 15:42:38 +02:00
Hadi 53e8a42484 update lazygit config
Former-commit-id: 4bc6576d7c
2025-05-07 15:39:50 +02:00
Hadi ea7eaa106a edit nix shell prompt
Former-commit-id: 53ff7a2a94
2025-05-07 15:25:07 +02:00
Hadi 936266ab11 add astro lsp
Former-commit-id: 75f499a996
2025-05-07 15:24:48 +02:00
Hadi 26b08ec009 add signing key to sops
Former-commit-id: 1a771e97ac
2025-05-06 11:27:32 +02:00
Hadi 96673a4e69 add signing
Former-commit-id: 6a4634bb04
2025-05-06 11:20:40 +02:00
Hadi 81b3128ef6 Upgrade flakes
Former-commit-id: 685f104a67
2025-05-05 10:06:59 +02:00
Hadi 55349958d3 Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: 770569c1d9
2025-05-04 16:00:10 +02:00
Hadi a6524d8d83 same-tab
Former-commit-id: 38b9bcec07
2025-05-04 16:00:08 +02:00
Hadi 682f24b1be remove apps tmp
Former-commit-id: 5a3f4dcd49
2025-05-04 15:57:28 +02:00
Hadi 4fb4ab9ae2 test colors
Former-commit-id: 6f9ca7e044
2025-05-04 15:53:03 +02:00
Hadi 64c833dfaf update bookmarks
Former-commit-id: 5f7c914d1e
2025-05-04 15:46:51 +02:00
Hadi fe1d58998c glance config update
Former-commit-id: 72690d7d0c
2025-05-04 15:38:42 +02:00
Hadi 557844d07a Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: 6353514e49
2025-05-04 15:34:48 +02:00
Hadi aac1ced91e add bookmarks glance
Former-commit-id: 7939150e37
2025-05-04 15:34:28 +02:00
Hadi 45cd05c304 update flakes
Former-commit-id: 1d286f7c47
2025-05-04 15:34:21 +02:00
Hadi 4da1706085 update flakes
Former-commit-id: 66b78355f8
2025-05-02 16:54:57 +02:00
Hadi b06ec10646 update wallpaper
Former-commit-id: a4e107eafc
2025-05-02 16:05:15 +02:00
Hadi 8ea5a5e6ae add xarchiver
Former-commit-id: 0d235c33f4
2025-04-30 12:58:10 +02:00
Hadi 40d80808c3 remove auto-kill wofi
Former-commit-id: 42464199cc
2025-04-29 23:03:05 +02:00
Hadi 66cce04e98 update theme
Former-commit-id: afde9edaea
2025-04-26 18:27:34 +02:00
Hadi 580c7302aa update flake
Former-commit-id: 8260e6f7fd
2025-04-26 18:27:20 +02:00
Hadi f36bef6bde edit keyboard-backlight
Former-commit-id: 62ceddf5f8
2025-04-26 18:27:08 +02:00
Hadi 0bfb226119 remove slow cache
Former-commit-id: e0fbb91516
2025-04-24 19:57:31 +02:00
Hadi 6fd6982d0f fix omen perms
Former-commit-id: b7bfd6eed8
2025-04-24 11:27:54 +02:00
Hadi d1eb1353f5 tmp buffer & fix notes
Former-commit-id: 6391904287
2025-04-24 10:17:55 +02:00
Hadi 7dce2b592f Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: a91dc2dc22
2025-04-22 13:53:09 +02:00
Hadi bbec068d1d hardening nginx conf
Former-commit-id: 94b9738638
2025-04-22 13:48:02 +02:00
Hadi 30c4099b64 set keyboard backlight on boot
Former-commit-id: f01ec00483
2025-04-22 10:08:59 +02:00
Hadi 8eec546631 init headscale-ui
Former-commit-id: aaf3532cde
2025-04-22 10:05:58 +02:00
Hadi 21f9ed2d54 init headscale
Former-commit-id: 05891cdd1d
2025-04-22 09:51:46 +02:00
Hadi a056244dd8 fix package panel
Former-commit-id: 6ce19fb663
2025-04-18 14:58:38 +02:00
Hadi d7e1dd20d9 start services on hyprland exec
Former-commit-id: 4530d9063c
2025-04-18 14:34:54 +02:00
Hadi f1a7ba0f77 change mime
Former-commit-id: 04bf9cad16
2025-04-18 14:09:34 +02:00
Hadi 0540ee700d add apps
Former-commit-id: 9a4ddf29ac
2025-04-18 14:09:28 +02:00
Hadi 24d77739b9 UWSM Hyprland
Former-commit-id: 5bfd891d39
2025-04-18 14:09:24 +02:00
Hadi 6d4a886acb change $BROWSER var
Former-commit-id: 4cb131cd97
2025-04-18 11:57:42 +02:00
Hadi af0c00d1d0 theme change
Former-commit-id: 3a51928e3f
2025-04-18 11:51:55 +02:00
Hadi 23c3d86c73 zen desktop file change
Former-commit-id: 27b8f8dbe1
2025-04-18 11:51:33 +02:00
Hadi 64d63b8f52 remove curline on markdown
Former-commit-id: cc0898f848
2025-04-18 11:51:20 +02:00
Hadi 6b43b76880 change my keyboard backlight depending on the battery lvl
Former-commit-id: 2cfc92bca1
2025-04-18 10:18:21 +02:00
Hadi 31e03a7fb8 Init hp-omen-linux-module to controle the keyboard backlight on omen laptop
Former-commit-id: d69b8c39e3
2025-04-18 10:18:05 +02:00
Hadi c6d4c3f14b not working as expected
Former-commit-id: 59b8ade974
2025-04-18 09:12:22 +02:00
Hadi 9f3521a716 change backup browser
Former-commit-id: 6ea33fc39b
2025-04-17 09:37:35 +02:00
Hadi 767d687674 update flakes
Former-commit-id: c2d25d0f7d
2025-04-17 09:32:46 +02:00
Hadi 13312a62a1 edit monitors configuration, now working with my dock!!
Former-commit-id: d76e83c09c
2025-04-16 19:45:38 +02:00
Hadi a12fe9a81a add Aerial (tags)
Former-commit-id: 44686a7b38
2025-04-16 19:45:24 +02:00
Hadi c5e85ae57d add reset search
Former-commit-id: 05b022f664
2025-04-16 19:45:17 +02:00
Hadi 0d8bfd7749 add alias to force obsidian launch
Former-commit-id: c641bc645b
2025-04-15 18:39:37 +02:00
Hadi d8993672c1 add portal from inputs
Former-commit-id: e442622024
2025-04-15 18:38:52 +02:00
Hadi fedd6a72ea edit nvidia config
Former-commit-id: a30fa6288f
2025-04-15 18:38:42 +02:00
Hadi 36bd8b84e1 remove getty config
Former-commit-id: 6a6e8acff4
2025-04-15 18:38:31 +02:00
Hadi c43ae9578b edit function
Former-commit-id: 2e36e3da64
2025-04-15 17:57:16 +02:00
Hadi 911845949e anyrun flake
Former-commit-id: 8fcb27d514
2025-04-15 17:10:26 +02:00
Hadi 76c47913ea add n4c alias
Former-commit-id: a77128b56d
2025-04-14 13:07:02 +02:00
Hadi fe1f7245b0 remove anyrun
Former-commit-id: f49afa5f5d
2025-04-14 09:50:17 +02:00
Hadi ceadb80791 update flake
Former-commit-id: f4829e758e
2025-04-14 09:49:40 +02:00
Hadi cc27decf7a add nixshell to zsh & starship
Former-commit-id: 7b04553470
2025-04-11 16:32:23 +02:00
Hadi cbd2d465e9 hide desktop navigation
Former-commit-id: 63e4cee9b0
2025-04-09 09:20:26 +02:00
Hadi de2a311f84 test
Former-commit-id: 366b3afc37
2025-04-08 15:19:59 +02:00
Hadi afedf85534 edit colors
Former-commit-id: 17da2378d7
2025-04-08 15:03:12 +02:00
Hadi 5af43b4194 update flake
Former-commit-id: 1d0c26f760
2025-04-05 22:20:11 +02:00
Hadi 10e01b3270 update flake
Former-commit-id: e0a837a434
2025-04-05 21:56:33 +02:00
Hadi 7c6aaf80c3 edit glance dashboard
Former-commit-id: b4878ea48a
2025-04-05 20:49:58 +02:00
Hadi 0fcc535f53 update
Former-commit-id: f86839d03e
2025-04-05 14:22:12 +02:00
Hadi 6fe18fb699 init anyrun config
Former-commit-id: 67bdbb09a3
2025-04-05 14:22:06 +02:00
Hadi 5ee6829136 update hyprpanel config
Former-commit-id: 36248551d9
2025-04-05 14:21:55 +02:00
Hadi 01c55c2428 fix search-nix-api
Former-commit-id: 0398d077e5
2025-04-05 14:04:06 +02:00
Hadi a21e14e5e6 Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: bc52572df5
2025-04-04 20:32:54 +02:00
Hadi b4ecbdb587 add nixos-search-api
Former-commit-id: b8955cc31a
2025-04-04 20:32:50 +02:00
Hadi 299f017b06 update
Former-commit-id: ee4508203b
2025-04-04 15:42:53 +02:00
Hadi 3e1c32ff6c multiple conf edit
Former-commit-id: 40f5fbc6b1
2025-04-04 15:42:46 +02:00
Hadi 7a72b4229d add tailscale conf to use exit node
Former-commit-id: f1482b5c18
2025-04-04 15:42:39 +02:00
Hadi 5a9dc62173 add priority to cache.nixos.org
Former-commit-id: c364afa343
2025-04-04 15:42:20 +02:00
Hadi d146aa6af1 add clock
Former-commit-id: 286e47e3a9
2025-04-04 15:41:47 +02:00
Hadi 068f8722f0 zen wan't this
Former-commit-id: 4be613c256
2025-04-04 15:41:19 +02:00
Hadi f2cf006a02 add window2rules (ty fufuxan)
Former-commit-id: 3c8a07b9c4
2025-04-04 15:41:00 +02:00
Hadi c268e920c4 edit kitty confi (Url, copy)
Former-commit-id: aa9ce824c4
2025-04-04 15:40:37 +02:00
Hadi e9eed8212a Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: 6ccbbc78f1
2025-04-03 17:40:05 +02:00
Hadi 8753ac2d0b fix meali
Former-commit-id: cd395e5987
2025-04-03 17:40:01 +02:00
Hadi 13578f0f2f init nixos search api
Former-commit-id: 0770bedfdb
2025-04-03 17:39:42 +02:00
Hadi b8ceb39db9 fix issue
Former-commit-id: c110983dcf
2025-04-01 20:43:03 +02:00
Hadi b22bd95f9f lsp edit config
Former-commit-id: ee38dd75dc
2025-04-01 20:42:58 +02:00
Hadi b25ce91ca0 lsp config
Former-commit-id: 10dffe8d92
2025-04-01 20:22:27 +02:00
Hadi dac3b34e64 new function for copying text to chatgpt
Former-commit-id: eb1f6b2e8b
2025-04-01 20:22:23 +02:00
Hadi ae9427b508 fix temp bug
Former-commit-id: 757224a73f
2025-04-01 11:25:47 +02:00
Hadi cd3715664f remove copilot temp
Former-commit-id: 09698790b9
2025-03-31 20:23:40 +02:00
Hadi 8136b19187 add 'git add .'
Former-commit-id: 8dc339f0cc
2025-03-31 13:46:44 +02:00
Hadi a90a77a29d add air
Former-commit-id: 21d9ddd0fc
2025-03-31 13:46:39 +02:00
Hadi 1006680dea edit theme
Former-commit-id: f97a9f397c
2025-03-31 13:19:15 +02:00
Hadi d0ad3c6e6e add jpeg optimisation bin
Former-commit-id: 684c11ecda
2025-03-31 13:18:56 +02:00
Hadi 2e6e17f224 remove cursor highlighter
Former-commit-id: 87eedfc74a
2025-03-31 13:18:41 +02:00
Hadi 61830ffe71 edit config
Former-commit-id: 67d14dbb44
2025-03-27 15:40:04 +01:00
Hadi 1cb855c181 hyprspace config update
Former-commit-id: 676eed1fdf
2025-03-27 15:39:33 +01:00
Hadi c1eee689fd remove batsignal
Former-commit-id: 2d76df1b85
2025-03-27 15:39:26 +01:00
Hadi d6c080930d nixy script update
Former-commit-id: 4fd31d6de8
2025-03-27 15:39:21 +01:00
Hadi 67b70c3e5c zen config update
Former-commit-id: d6d7bb9b9b
2025-03-27 15:39:14 +01:00
Hadi 07f7654c69 thunar new icons
Former-commit-id: dd311b1292
2025-03-27 15:39:10 +01:00
Hadi 2f5e5683e9 zsh config update
Former-commit-id: ffa3817383
2025-03-27 15:39:06 +01:00
Hadi 1f2a665ef0 edit git rebase
Former-commit-id: c96034e3ad
2025-03-27 14:59:54 +01:00
Hadi 58e16598b1 Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: d827e751ab
2025-03-27 14:59:46 +01:00
Hadi 16896d0b37 add awesome wallpapers
Former-commit-id: 3fbc9691b5
2025-03-27 14:57:19 +01:00
github-actions 3f2a7346c5 Update README.md (auto)
Former-commit-id: b9819c5c4d
2025-03-27 12:21:05 +00:00
Hadi 3e1255349b change wallpapers repo
Former-commit-id: 5d0625de2a
2025-03-27 13:20:37 +01:00
github-actions 7f3757e530 Update SCRIPTS.md (auto)
Former-commit-id: 59830dc9ff
2025-03-26 18:45:15 +00:00
Hadi d39656ad66 Edit pickers
Former-commit-id: 088d50c9b3
2025-03-26 17:24:34 +01:00
Hadi 3d25e1799b Change notification opacity
Former-commit-id: f07a41a7d1
2025-03-26 17:01:59 +01:00
Hadi c937ee3afc Change theme
Former-commit-id: 3f1421b491
2025-03-26 17:00:25 +01:00
Hadi 43b8be4931 Send exit code of the command
Former-commit-id: 6994b95d78
2025-03-26 16:59:51 +01:00
Hadi 31879f6186 Sleep if failed
Former-commit-id: 3c4c639552
2025-03-26 16:59:41 +01:00
Hadi 0c34239fab improve documentation
Former-commit-id: 0409a4db26
2025-03-26 16:01:34 +01:00
github-actions 104c816612 Update README.md (auto)
Former-commit-id: 29bebce5cd
2025-03-26 14:39:13 +00:00
Hadi 60d177ba39 Init text color on wallpaper
Former-commit-id: c0dfbe8249
2025-03-26 15:38:53 +01:00
Hadi b6cad25714 edit readme
Former-commit-id: 0f27406bb4
2025-03-26 10:57:37 +01:00
Hadi 542f811107 fix copilot on markdown files
Former-commit-id: 2ac4321f7b
2025-03-26 10:30:04 +01:00
Hadi 4b80d21c00 Edit hardware conf
Former-commit-id: b6bd84fc3b
2025-03-25 13:32:50 +01:00
Hadi ab80268f61 no password for rebuild
Former-commit-id: f31c271d7b
2025-03-24 15:58:45 +01:00
Hadi 30cd88a6b0 floaterm init: Quick nixy inside nvim
Former-commit-id: 5d3399ebc3
2025-03-24 15:13:58 +01:00
Hadi 28d59ed58e remove border on fzf
Former-commit-id: 96fb0bd8f0
2025-03-24 15:13:38 +01:00
Hadi eb81d94717 change the inactive border
Former-commit-id: 58a9056c90
2025-03-24 15:13:32 +01:00
Hadi f1c4eff2d6 let's try the one from hyprpanel
Former-commit-id: bb9a6b743c
2025-03-24 14:07:04 +01:00
Hadi d044e3dd2e change notifications theme
Former-commit-id: a26542e0ba
2025-03-24 14:06:55 +01:00
Hadi 6851655e0a run tailscale without password
Former-commit-id: d495ce1d57
2025-03-24 13:18:55 +01:00
Hadi c7e6aba945 add what's next
Former-commit-id: c52657df22
2025-03-24 13:18:32 +01:00
Hadi 669249bdaa default virtualHost
Former-commit-id: edeedda316
2025-03-24 13:15:37 +01:00
Hadi 31488b2534 add mealie to glance
Former-commit-id: f14fa50742
2025-03-24 13:15:30 +01:00
Hadi 638e37a4b4 mealie init
Former-commit-id: bb02792bf4
2025-03-24 13:15:10 +01:00
Hadi 422e3ffaf5 edit secrets
Former-commit-id: 2493fb0dfe
2025-03-24 13:15:02 +01:00
Hadi 8e26c50b92 good one
Former-commit-id: 9ba8a67c69
2025-03-24 10:17:51 +01:00
Hadi 0ff65b95b5 new secret
Former-commit-id: e3c711da58
2025-03-24 10:13:55 +01:00
Hadi 0f6d9c16b5 edit description
Former-commit-id: e0ddc9786e
2025-03-22 17:55:12 +01:00
Hadi a26a80596a change font
Former-commit-id: f75dfd8456
2025-03-22 17:47:03 +01:00
Hadi 1a1b5e9d07 update mimeapps
Former-commit-id: 8c43e65000
2025-03-22 17:46:47 +01:00
Hadi ad194bb96d Thunar bookmarks
Former-commit-id: e6244ea98d
2025-03-22 17:25:17 +01:00
Hadi f8b20c8f20 change nixvim config
Former-commit-id: 30009bcafb
2025-03-22 13:21:33 +01:00
Hadi 6971afb3af change zen browser flake
Former-commit-id: 1bd70e403f
2025-03-22 13:21:20 +01:00
Hadi 50c3a83d84 add trusted nix caches
Former-commit-id: d438abe210
2025-03-22 13:20:42 +01:00
Hadi 33810fc79e Spotify theme update
Former-commit-id: f54e69719b
2025-03-21 21:40:35 +01:00
github-actions cd8cbe7d65 Update README.md (auto)
Former-commit-id: 12cf7e7592
2025-03-21 20:18:45 +00:00
Hadi e1bec5a053 update documentation
Former-commit-id: 82d8d6e1a7
2025-03-21 21:18:25 +01:00
github-actions 1a53b35a1f Update README.md (auto)
Former-commit-id: a9d9f24228
2025-03-21 20:01:56 +00:00
Hadi 968c7a922e update documentation
Former-commit-id: 9c7ca1adcb
2025-03-21 21:01:38 +01:00
Hadi aac1a100d8 old todolist
Former-commit-id: 07d1fb6c49
2025-03-21 21:00:26 +01:00
Hadi 38c9906ada add resources dashboard
Former-commit-id: 12912aec57
2025-03-21 14:56:06 +01:00
Hadi 14744197ac Nixvim config update: +Snacks, -telescope
Former-commit-id: 9cc35a7039
2025-03-21 14:55:38 +01:00
Hadi f374f6de9b change wofi size
Former-commit-id: ea3b343523
2025-03-21 14:55:08 +01:00
Hadi e7ccac616d change theme
Former-commit-id: 97ee9b6033
2025-03-21 14:55:00 +01:00
Hadi f76aee3783 edit secrets
Former-commit-id: 0e057dd54d
2025-03-20 17:50:53 +01:00
Hadi 4dd98a5554 edit secrets
Former-commit-id: 0d96b89c7e
2025-03-20 15:15:29 +01:00
Hadi c70507cebd secrets edit
Former-commit-id: 42bb5612ab
2025-03-20 15:05:43 +01:00
Hadi dbc55aaa6f secrets edit
Former-commit-id: 2519a9ec70
2025-03-20 14:47:44 +01:00
Hadi 62a1a19d9d Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: dfd985f3c0
2025-03-20 14:16:13 +01:00
Hadi 1ad395000d update
Former-commit-id: 00b406b56a
2025-03-20 14:15:56 +01:00
Hadi e54127637e arr
Former-commit-id: a4874d18d2
2025-03-19 22:53:29 +01:00
Hadi 2fc1d31961 add recyclarr
Former-commit-id: 9a2f22a571
2025-03-19 22:07:56 +01:00
Hadi 9e53d48c68 y
Former-commit-id: 9863bdbdd0
2025-03-19 22:05:17 +01:00
Hadi 0b1f3996cf add wg conf
Former-commit-id: 82c51c85d9
2025-03-19 21:57:09 +01:00
Hadi b2688973f1 init hoarder
Former-commit-id: 1f4205a1d1
2025-03-19 19:41:41 +01:00
Hadi 75fcb1c2be add secret for hoarder
Former-commit-id: d2b3819779
2025-03-19 19:27:22 +01:00
Hadi c587c47b79 update modules
Former-commit-id: ae06546eb7
2025-03-19 19:25:37 +01:00
Hadi d63ce02e5e woops
Former-commit-id: 78245dc92b
2025-03-19 18:25:38 +01:00
Hadi 2e371da2e5 add adguard
Former-commit-id: 2db05d7d2e
2025-03-19 18:18:34 +01:00
Hadi c52a7766c2 test
Former-commit-id: 5c70995da5
2025-03-19 18:17:04 +01:00
Hadi d9337db684 adguard + glance
Former-commit-id: bb0f6279fd
2025-03-19 18:15:42 +01:00
Hadi e5f2161604 updates
Former-commit-id: d2d113fab5
2025-03-19 15:46:23 +01:00
Hadi 9151dc75d8 add nextcloud root password
Former-commit-id: 36ecdde469
2025-03-19 15:05:01 +01:00
Hadi 3ce26e6b88 add dns challenge token
Former-commit-id: b150bbef08
2025-03-19 14:09:35 +01:00
Hadi 84026e498e ui
Former-commit-id: 7db62269d4
2025-03-19 14:00:09 +01:00
Hadi 29ff0aa3dd add modules
Former-commit-id: d199f35824
2025-03-19 13:55:03 +01:00
Hadi fa76704fb5 edit secrets
Former-commit-id: bfbb4b54c3
2025-03-19 10:20:51 +01:00
Hadi 5c59bfa474 testing
Former-commit-id: 8242da9bcb
2025-03-19 10:11:56 +01:00
Hadi b5a5efde90 add secrets to configuration
Former-commit-id: 4f415df0ce
2025-03-19 09:52:39 +01:00
Hadi 7c1f56d6a3 change secrets
Former-commit-id: 9bf66b26cf
2025-03-19 09:51:46 +01:00
Hadi b20bf2fbce add hostname
Former-commit-id: 151a4ee7a0
2025-03-19 09:35:06 +01:00
Hadi dbcddb6115 add hardware-config
Former-commit-id: cd5c015c7a
2025-03-19 09:27:46 +01:00
Hadi 56ef64700f add tailscale
Former-commit-id: 40de9b5f5b
2025-03-18 23:45:39 +01:00
Hadi 458fe29a91 update
Former-commit-id: dbcc0a096a
2025-03-18 23:36:54 +01:00
Hadi 8785a2bd04 add jack flake
Former-commit-id: bb2cc5adf6
2025-03-18 23:11:20 +01:00
Hadi 16c9d54a30 init server modules
Former-commit-id: 98cf8e99b0
2025-03-18 23:09:42 +01:00
Hadi e26b4d0285 flake update
Former-commit-id: 05c46a39c0
2025-03-18 22:23:55 +01:00
Hadi 95d3326857 change blur size
Former-commit-id: 58654d5cbd
2025-03-18 21:53:35 +01:00
Hadi c5175cdaeb change theme
Former-commit-id: 4df9852b7e
2025-03-18 21:53:01 +01:00
Hadi bb084f66e9 add env var
Former-commit-id: 9fe06a0cfb
2025-03-18 21:52:43 +01:00
Hadi 0960892340 grub theme
Former-commit-id: 73bca2fbfb
2025-03-18 21:52:39 +01:00
Hadi 34ef6d39f9 go back to systemd-boot
Former-commit-id: 5a8bdffc2a
2025-03-18 21:52:32 +01:00
Hadi 444340c880 I'm trying things
Former-commit-id: f24415e320
2025-03-18 21:52:12 +01:00
Hadi acbc487772 add render-markdown to cmp
Former-commit-id: 7c54507f0f
2025-03-18 21:52:03 +01:00
Hadi 305c11dc6d switch to grub
Former-commit-id: 57fa8d152a
2025-03-13 17:03:05 +01:00
Hadi 8a7a76297a add grub config
Former-commit-id: 2183824c34
2025-03-13 17:02:58 +01:00
Hadi f9c5e63136 attempt to hide tty getty login
Former-commit-id: 545c66ebc3
2025-03-13 13:52:54 +01:00
Hadi 1b70d8c5cf darker color for hyprlock
Former-commit-id: 967879b3f4
2025-03-13 13:39:33 +01:00
Hadi 9f5a1ca09e change background image
Former-commit-id: 1da1d91787
2025-03-13 13:05:46 +01:00
Hadi 1612dca680 change to sddm
Former-commit-id: c89304c621
2025-03-13 13:05:40 +01:00
Hadi f78389127a handled by stylix now
Former-commit-id: 93ce3e73c0
2025-03-13 13:05:26 +01:00
Hadi 52c2187734 change colors
Former-commit-id: 3ed69ab1a5
2025-03-11 13:42:00 +01:00
Hadi d1fadd9059 hyprland config update
Former-commit-id: 0d442f1702
2025-03-11 09:48:33 +01:00
Hadi 2ccd7409ca remove protonmail desktop
Former-commit-id: aa95347035
2025-03-11 09:48:21 +01:00
Hadi 9e35e81a69 add reverseSync cap
Former-commit-id: 3ec054d661
2025-03-11 09:48:14 +01:00
Hadi 8a596d9d86 update flakes
Former-commit-id: 92ae9a2f41
2025-03-11 09:46:32 +01:00
Hadi d8e807633c remove old gtk theme
Former-commit-id: 483d0efa60
2025-03-06 09:49:20 +01:00
Hadi 81ca5204bb add avatar to panel
Former-commit-id: 9f3fd551b9
2025-03-05 16:57:56 +01:00
Hadi ca54d98acf add env var & cache
Former-commit-id: 1675e96793
2025-03-05 16:52:40 +01:00
Hadi 62b2ff0090 hardwareclock confi
Former-commit-id: 2146ce8360
2025-03-05 14:19:00 +01:00
Hadi ee976873ce add close wofi when loose focus
Former-commit-id: 87c6166bf7
2025-03-05 13:28:01 +01:00
Hadi 411b951332 change hardware-configuration
Former-commit-id: 2ec4583391
2025-03-05 11:53:51 +01:00
Hadi 71ec7d1390 remove the hyprspace shortcut
Former-commit-id: 093a6397b9
2025-03-04 21:42:49 +01:00
Hadi 3571c9da85 change theme name
Former-commit-id: ed4d27a4ac
2025-03-04 21:32:46 +01:00
Hadi dee8dcddf8 add todo-comments
Former-commit-id: ff97615cae
2025-03-04 21:32:39 +01:00
Hadi 85fa2c5f11 disable lsp notifications
Former-commit-id: f3aaa759ce
2025-03-04 21:32:33 +01:00
github-actions d3881d19af Update README.md (auto)
Former-commit-id: 615596085a
2025-03-04 19:58:56 +00:00
Hadi d16d6906b8 doc update
Former-commit-id: 936e8b0ffd
2025-03-04 20:58:35 +01:00
Hadi 449ad7997e flake update
Former-commit-id: b90821adff
2025-03-04 20:58:29 +01:00
Hadi 4d80db7ccb refactor variables & theme
Former-commit-id: 276756d998
2025-03-04 20:58:20 +01:00
Hadi b314c9648f remove tofi
Former-commit-id: c9aada8203
2025-03-04 20:57:58 +01:00
Hadi 77ff7edce5 hyprpolkitagent from flake to pkgs
Former-commit-id: b1eb468327
2025-03-04 20:57:53 +01:00
Hadi 5ee186ca15 remove superfile
Former-commit-id: 9bec8574e6
2025-03-04 20:57:42 +01:00
Hadi 92c34e0c28 remove nvf
Former-commit-id: 5851e00adf
2025-03-04 20:57:37 +01:00
Hadi a38304d73b add nixcord
Former-commit-id: 41dacd47a5
2025-03-04 20:57:33 +01:00
Hadi 5fd0da5327 add superfile input
Former-commit-id: f86fd5bf02
2025-03-04 14:37:41 +01:00
Hadi 9ae7a67a40 change yoru theme
Former-commit-id: b8ef571b50
2025-03-02 15:04:16 +01:00
Hadi 48cb6d9065 disable mini.animate (bug with scroll wheel)
Former-commit-id: e6dfa4bd52
2025-03-02 13:04:51 +01:00
Hadi 62bc08a436 Nvim config update
Former-commit-id: b801f55276
2025-03-01 02:58:48 +01:00
Hadi e0e933132b add nvf
Former-commit-id: be161771f4
2025-03-01 02:28:21 +01:00
Hadi eba2fc481e update todo
Former-commit-id: 631525c978
2025-03-01 02:27:31 +01:00
Hadi 15fa1daa8f update flake
Former-commit-id: a7f8c6cd84
2025-03-01 02:27:10 +01:00
Hadi de6a1f4529 init nvf
Former-commit-id: 027b2dcd24
2025-03-01 02:27:02 +01:00
Hadi 04e34161b1 edit theme
Former-commit-id: 7ffef6d2cf
2025-03-01 02:25:51 +01:00
Hadi 575e2d246b edit xdg portals
Former-commit-id: 14d8e50100
2025-02-23 11:48:03 +01:00
Hadi 88ee45885b add hyprland qutils
Former-commit-id: 8026cb5e88
2025-02-23 11:47:56 +01:00
Hadi b48a197157 edit hyprland conf
Former-commit-id: e9af1dac68
2025-02-23 11:47:46 +01:00
Hadi 59c2ee28e1 add cursor trail animations
Former-commit-id: 4b32eaa91e
2025-02-23 11:47:31 +01:00
Hadi 4c32612a43 update flake
Former-commit-id: 61d4f0c4bf
2025-02-21 20:14:36 +01:00
Hadi 72e2184e0b change wallpaper
Former-commit-id: 226752d763
2025-02-21 20:12:56 +01:00
Hadi a221b2d5c1 edit
Former-commit-id: d616d5e4fe
2025-02-21 16:29:25 +01:00
Hadi de60ad7c84 change blur, opacity & background
Former-commit-id: bd8a936a1d
2025-02-21 16:25:04 +01:00
Hadi 30293a616b change the way workflow works
Former-commit-id: de125e21a7
2025-02-21 15:55:13 +01:00
Hadi 16c76c92b3 change to kofi
Former-commit-id: 58bae6e2c0
2025-02-21 15:54:02 +01:00
Hadi d22a30be53 change process name
Former-commit-id: 074dc5864b
2025-02-21 15:49:49 +01:00
Hadi 92e165396d woops mb
Former-commit-id: 9312ef84a2
2025-02-21 15:49:17 +01:00
Hadi b0899442ab only show cava when media is playing
Former-commit-id: a4bd708f24
2025-02-21 15:44:04 +01:00
Hadi 991b456713 add cava to hyprpanel
Former-commit-id: 3383fe5af7
2025-02-21 15:42:50 +01:00
Hadi 53dc030c22 special workspace for ProtonMail
Former-commit-id: d64e096e8c
2025-02-21 15:29:03 +01:00
Hadi afd27f2a92 Fix alpha-nvim keybindings
Former-commit-id: 4eb6d59909
2025-02-21 14:07:44 +01:00
Hadi 6a5c430830 Create FUNDING.yml
Former-commit-id: 56b4a77d1f
2025-02-19 18:01:04 +01:00
Hadi f04821fffe Planify in fullscreen by default
Former-commit-id: e63b86345b
2025-02-19 17:56:38 +01:00
github-actions eeeaf1a7c4 Update KEYBINDINGS-HYPRLAND.md (auto)
Former-commit-id: 0f6f40ab23
2025-02-19 16:47:15 +00:00
Hadi 2c42201b15 Add key binding for Planify
Former-commit-id: b5147a52ba
2025-02-19 17:46:56 +01:00
Hadi e3e7714f4c open planify in special workspace
Former-commit-id: ef189b3b62
2025-02-19 16:54:55 +01:00
Hadi 28ff9b7e6a update flake
Former-commit-id: 813dca5d40
2025-02-19 14:55:11 +01:00
Hadi c92d1ac1ad increase opacity for inactive windows
Former-commit-id: bac6ec2f82
2025-02-19 14:55:08 +01:00
Hadi 3d214c7c2d Make no sense in offload mode ?
Former-commit-id: a0ffe24e7d
2025-02-19 14:54:55 +01:00
Hadi bfd689beab let's try proton mail desktop
Former-commit-id: 052fd7cada
2025-02-19 14:54:41 +01:00
Hadi 8879e0c222 screenshot now save & copy
Former-commit-id: 0eca13a163
2025-02-19 10:44:18 +01:00
Hadi 794932ee3b cleaner solution
Former-commit-id: a91c0e37c0
2025-02-19 10:44:05 +01:00
Hadi d5e56f4092 disable the hyprpanel shadow
Former-commit-id: 480e2bf2da
2025-02-19 10:43:53 +01:00
Hadi ad0cc491f8 reenable hyprspace & static workspace for some apps
Former-commit-id: fa3d207375
2025-02-19 10:43:40 +01:00
Hadi a90dfeac07 batsignal now locks on very low battery
Former-commit-id: 3b200caed9
2025-02-19 10:43:08 +01:00
Hadi 61ae19567a wallpaper change for yoru theme
Former-commit-id: 19a48aee14
2025-02-19 10:42:58 +01:00
Hadi 2ffa0a3abf update todo
Former-commit-id: d56f39275c
2025-02-18 23:40:07 +01:00
Hadi 651de22342 change apps
Former-commit-id: 7aa07cde8e
2025-02-11 20:59:24 +01:00
Hadi 3d5516e20c Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: 4e438e9f78
2025-02-11 20:58:45 +01:00
Hadi 2270fe77b6 update flakes
Former-commit-id: ca73bf3af3
2025-02-11 20:58:40 +01:00
Hadi 6514624612 remove resurrect
Former-commit-id: af79d8031d
2025-02-11 20:58:30 +01:00
github-actions 4d4db27d49 Update KEYBINDINGS-HYPRLAND.md (auto)
Former-commit-id: c5f99341d5
2025-02-04 19:42:52 +00:00
Hadi 9ff48eb543 update flake
Former-commit-id: 1f4be60931
2025-02-04 20:42:09 +01:00
Hadi 519de26e6a edit
Former-commit-id: 43f27ff383
2025-02-04 20:41:21 +01:00
Hadi e1915e1741 change bindings
Former-commit-id: 2433d287f8
2025-02-04 20:41:13 +01:00
Hadi de177e0003 screenshot to clipboard
Former-commit-id: e4f6f611d6
2025-02-04 20:41:10 +01:00
Hadi c054d85b1c markdown writting
Former-commit-id: 6f1bcbf4dc
2025-02-04 20:40:54 +01:00
Hadi 47e9b45cfa update flakes
Former-commit-id: 0e5fbb9ea5
2025-01-27 09:53:06 +01:00
Hadi f1f8d50c2e add mimes for zen
Former-commit-id: 7906679e9a
2025-01-27 08:36:23 +01:00
Hadi e514c9ca09 change homepage path
Former-commit-id: d694a57ae6
2025-01-27 08:36:12 +01:00
Hadi 336574206c edit nextcloud notes path
Former-commit-id: 2ebed4ab9c
2025-01-27 08:35:50 +01:00
Hadi dcd302bf5b update flakes
Former-commit-id: 406889a019
2025-01-23 17:49:40 +01:00
Hadi 5aad861057 update my nvim config
Former-commit-id: cd54511aa0
2025-01-23 17:36:26 +01:00
Hadi 1098005af6 delete old modules
Former-commit-id: 5cc7a65ea1
2025-01-23 17:36:13 +01:00
github-actions 223b91e075 Update SCRIPTS.md (auto)
Former-commit-id: 726bb896dd
2025-01-22 19:16:05 +00:00
Hadi ee80453e77 update flakes
Former-commit-id: 57f9723b87
2025-01-22 20:15:49 +01:00
Hadi a49bc73bbd disable hyprspace, broken
Former-commit-id: d8a45d947b
2025-01-22 20:15:45 +01:00
Hadi 818dfda0e3 temp fix for nvidia drivers
Former-commit-id: b26a7b9dd0
2025-01-22 20:15:38 +01:00
Hadi 33f62390c5 remove desktop & pia
Former-commit-id: fd8f7de9b1
2025-01-22 19:41:19 +01:00
Hadi fe143348a4 edit theme
Former-commit-id: 44a8ac06ec
2025-01-22 19:41:09 +01:00
Hadi 937c0a70d9 app test
Former-commit-id: 722efcf03a
2025-01-22 19:41:03 +01:00
Hadi 11c88abded delete desktop
Former-commit-id: a030370542
2025-01-22 19:40:41 +01:00
Hadi 9c43f16027 open vpn scripts
Former-commit-id: f83370b4fa
2025-01-22 19:40:23 +01:00
github-actions ffc3b1baed Update KEYBINDINGS-HYPRLAND.md (auto)
Former-commit-id: dbe30d164e
2025-01-21 19:55:49 +00:00
Hadi 73c349918f remove systemd.enable
Former-commit-id: 8c92529ef2
2025-01-21 20:55:36 +01:00
Hadi 662009000d add keybind to toggle the bar
Former-commit-id: 141f6d8fc1
2025-01-21 20:55:27 +01:00
Hadi d4ffdae2f4 open webpage to display wallpapers
Former-commit-id: 2fb93eaff5
2025-01-21 20:55:17 +01:00
Hadi 1a69437e3f fix hyprpanel toggleWindow call
Former-commit-id: 943ea80ac2
2025-01-21 20:54:47 +01:00
Hadi a2210756c5 fix
Former-commit-id: 4d63588ddc
2025-01-21 20:54:37 +01:00
Hadi 76dabd905e copilot nvim broken on unstable
Former-commit-id: 2962bd8503
2025-01-21 20:54:28 +01:00
Hadi 3c1be077b9 add duckduckgo colorscheme
Former-commit-id: ed605769b0
2025-01-21 20:54:16 +01:00
Hadi 5aef2f7d40 update flake
Former-commit-id: c828520da1
2025-01-21 20:54:03 +01:00
Hadi 7342a52609 update theme
Former-commit-id: 5fab44846d
2025-01-21 20:53:59 +01:00
Hadi 8f1949c3fb flake update
Former-commit-id: f10612b1d1
2025-01-12 20:00:10 +01:00
Hadi 09352dbcbc fix hyprpanel hide & show
Former-commit-id: 3a34579f35
2025-01-07 21:34:54 +01:00
Hadi b32cc2ade5 flake update
Former-commit-id: 05aa21e311
2025-01-07 21:34:46 +01:00
Hadi eb457f8069 edit theme
Former-commit-id: 5b4670d6e2
2025-01-07 20:23:59 +01:00
Hadi bba6f699bd config edit
Former-commit-id: 972490513f
2025-01-07 20:22:54 +01:00
Hadi 532b2e4e0a change theme & update flake
Former-commit-id: 868c3b4e4f
2025-01-07 00:27:57 +01:00
Hadi 21beb27859 update flake & fix nixpkgs error
Former-commit-id: 8f3645996a
2025-01-06 23:35:06 +01:00
Hadi 029655cb72 enable the hyprpanel overlay
Former-commit-id: b1702060f2
2025-01-06 20:58:55 +01:00
Hadi ec8f733408 treesitter ensure installed
Former-commit-id: d158c6160f
2025-01-06 20:58:41 +01:00
Hadi 47449eb534 migrate config to hyprpanel v2
Former-commit-id: d7dbea9437
2025-01-02 19:42:41 +01:00
Hadi 8d585f941d new theme!
Former-commit-id: ada0a0761c
2025-01-02 19:42:26 +01:00
Hadi 35e8d0a6a6 flakes update
Former-commit-id: 3941e15c5c
2025-01-02 19:01:55 +01:00
Hadi 5662804337 update flake
Former-commit-id: f6f203f848
2025-01-02 18:31:06 +01:00
Hadi 523a3819d1 add a configuration limit in boot menu
Former-commit-id: ce32ac84fa
2025-01-02 18:31:02 +01:00
Hadi 4532330c0c enable auto gc
Former-commit-id: 70baebf547
2025-01-02 18:30:54 +01:00
Hadi 0362bbec14 update flakes
Former-commit-id: 87cf8f6bfa
2024-12-30 20:41:31 +01:00
Hadi fcdd2dc92c remove GTK theming
Former-commit-id: 8ceabe0a8a
2024-12-30 20:41:27 +01:00
Hadi e7b81f510c hyprpanel v2 migration
Former-commit-id: d4db565e46
2024-12-30 20:41:20 +01:00
Hadi c3517e5f56 removed some imports
Former-commit-id: 4551530344
2024-12-30 20:41:12 +01:00
Hadi 9af2f9f691 toolbar-items
Former-commit-id: a957fe856c
2024-12-30 20:40:38 +01:00
Hadi 9ca1a031b5 Merge pull request #11 from hcw9iu/fix-btop-gpu
Former-commit-id: 50b01f235d
2024-12-22 23:47:53 +01:00
william1209 640f815782 fix btop not show gpu
Former-commit-id: 2a50a895ef
2024-12-23 02:38:42 +08:00
Hadi 5885d6e400 update flakes
Former-commit-id: b6014cc3a1
2024-12-20 21:49:52 +01:00
Hadi 897dcfb7e3 update flakes
Former-commit-id: dbfc4887f0
2024-12-17 13:55:08 +01:00
Hadi 17589f5697 update flake
Former-commit-id: 277bafd297
2024-12-16 15:47:02 +01:00
Hadi 914f8bfa7e update flake
Former-commit-id: d1a14bb22c
2024-12-15 22:01:15 +01:00
Hadi 65f98fd3ec update flakes
Former-commit-id: 0d1ff6074f
2024-12-12 21:38:50 +01:00
Hadi f65f5a28e8 Add typescript LSP
Former-commit-id: 1577960c51
2024-12-12 21:37:18 +01:00
Hadi c9ca8c21f3 Fixed!!
Former-commit-id: 46bf6c9cb3
2024-12-12 21:37:05 +01:00
Hadi b0e4113b3b update flakes
Former-commit-id: 65acc4d2da
2024-12-09 10:08:01 +01:00
Hadi 2a200b0e75 new theme!
Former-commit-id: 89db4101fd
2024-12-06 17:02:23 +01:00
Hadi f1b6044ed1 update flakes
Former-commit-id: dbe720e366
2024-12-06 16:49:51 +01:00
Hadi 8891834ae1 remove old temp packages
Former-commit-id: 275178807d
2024-12-06 16:34:02 +01:00
Hadi 4356ad0e2f add desktop to .sops.yaml
Former-commit-id: e928fcf59a
2024-12-05 23:16:46 +01:00
Hadi 3cbf606230 add secrets
Former-commit-id: b94c673084
2024-12-05 23:04:30 +01:00
Hadi fb75ecc61d add desktop host
Former-commit-id: e3e5be7b73
2024-12-05 23:03:57 +01:00
Hadi 792970dc7f Change zen input
Former-commit-id: c79a153478
2024-12-05 22:22:01 +01:00
Hadi 30220aba6c Merge pull request #9 from underscoregeb/patch-1
new zen url

Former-commit-id: 88c1d7f6e0
2024-12-05 19:23:36 +01:00
geb 6f0e14a560 new zen url
Former-commit-id: ad8a0ccf53
2024-12-05 08:54:14 -06:00
Hadi fb297a1016 wallpaper change
Former-commit-id: 30bd93f973
2024-12-04 17:24:13 +01:00
Hadi ea3baad219 flake update
Former-commit-id: a16a9acd49
2024-12-04 17:24:09 +01:00
Hadi f12c527cdc Update flake
Former-commit-id: b3b191831f
2024-12-04 09:19:18 +01:00
github-actions f16312b953 Update KEYBINDINGS-HYPRLAND.md (auto)
Former-commit-id: 8309831a6e
2024-12-03 21:46:55 +00:00
Hadi de8abc2c4f change cursor
Former-commit-id: 4107af5343
2024-12-03 22:46:42 +01:00
Hadi 3308c7424a change browser binding
Former-commit-id: 4a42049faf
2024-12-03 22:46:38 +01:00
Hadi 12ca3743a1 update
Former-commit-id: b8920ade11
2024-12-03 20:08:04 +01:00
Hadi fc7fbfe0ee oops
Former-commit-id: c8c8738bfd
2024-12-03 20:07:49 +01:00
Hadi 916a9ed923 Switch from Firefox to Zen, ...
Former-commit-id: 7add142ab1
2024-12-03 19:36:15 +01:00
Hadi bd98e149f9 update flake
Former-commit-id: 52213697ea
2024-11-29 22:03:36 +01:00
Hadi a66048b432 fix nixd encoding
Former-commit-id: ea3d436c6e
2024-11-25 10:24:53 +01:00
Hadi d8d8d7e990 put bindings to hyprspace file
Former-commit-id: b991c66c2e
2024-11-25 10:01:58 +01:00
Hadi 8c5ce4880e move hyprspace to file
Former-commit-id: de8de47de4
2024-11-25 09:59:45 +01:00
Hadi 14ef376f03 Firefox homepage
Former-commit-id: cb041ad452
2024-11-25 09:34:08 +01:00
Hadi ff5a75f687 Firefox config
Former-commit-id: c8aff9ee96
2024-11-25 09:33:56 +01:00
Hadi bbfd3a5de2 update flakes
Former-commit-id: a6cc144770
2024-11-19 18:16:55 +01:00
Hadi a980904382 try transparentBackground config
Former-commit-id: fd4535f566
2024-11-17 19:53:03 +01:00
Hadi 25d6f672a4 switch to firefox
Former-commit-id: 8a692431e4
2024-11-17 19:52:52 +01:00
Hadi 1922a9550b doesn't build on unstable
Former-commit-id: 69c0605202
2024-11-17 19:52:22 +01:00
Hadi 79b3cec6fb add backupFileExtension in HM
Former-commit-id: 887668d962
2024-11-17 19:52:10 +01:00
Hadi e9f8555d37 update flakes
Former-commit-id: d7a03d4a80
2024-11-17 19:51:53 +01:00
Hadi 0875217932 fix colors for the workspace modules
Former-commit-id: 619b0d3724
2024-11-16 12:06:44 +01:00
Hadi 7dc0964759 update flakes & fix
Former-commit-id: 9f1b464ce4
2024-11-16 11:57:00 +01:00
Hadi d7553fbce8 Fix ssh kitty
Former-commit-id: 8b6f98d153
2024-11-14 20:53:26 +01:00
Hadi 458e61b19c update flakes
Former-commit-id: 65a9e23d90
2024-11-08 14:19:32 +01:00
Hadi d20693de9a change theme
Former-commit-id: 48c334cb5e
2024-11-08 14:19:25 +01:00
Hadi ea770a10ec regroup calls
Former-commit-id: 3b45228e47
2024-11-08 14:19:14 +01:00
Hadi 970aa3133b new theme
Former-commit-id: d2aa568fff
2024-11-08 14:18:55 +01:00
Hadi fe323511a4 Hyprland breaking changes. (Stylix fix, waiting for upstream)
Former-commit-id: f4f9f889ed
2024-11-08 13:32:25 +01:00
Hadi ea806f21d4 update flakes
Former-commit-id: 61a4d11ca4
2024-11-08 11:37:33 +01:00
Hadi a6a6cc3c09 update flakes
Former-commit-id: a43e3e36cf
2024-11-05 15:39:17 +01:00
Hadi c334ff2851 private internet access (vpn)
Former-commit-id: 53efbb88d6
2024-11-05 15:39:11 +01:00
Hadi 40c8ca00db update todos
Former-commit-id: 67f96bde02
2024-11-05 11:36:03 +01:00
Hadi a25c5fd551 Add colored output for git
Former-commit-id: d721e1bc1c
2024-11-05 11:07:21 +01:00
github-actions b6d0f00b34 Update SCRIPTS.md (auto)
Former-commit-id: 868cf5d3b3
2024-11-05 10:01:56 +00:00
Hadi c020deea69 update docs
Former-commit-id: b6f9d2b570
2024-11-05 11:01:41 +01:00
Hadi 01e6c36348 hyprshade -> hyprsunset
Former-commit-id: 8d5eefced0
2024-11-05 10:59:34 +01:00
Hadi 1c9454a1cd broken on unstable
Former-commit-id: f343ef25d2
2024-11-05 10:59:01 +01:00
Hadi 0b65935549 update flakes
Former-commit-id: f2b11b84a2
2024-11-05 10:58:49 +01:00
Hadi b48b9d1ef2 rename underscore
Former-commit-id: c0cdd3fcde
2024-11-05 10:47:07 +01:00
Hadi c52a218305 update github actions
Former-commit-id: b0bb2016bc
2024-11-05 10:46:24 +01:00
Hadi b5638ad2c8 rename underscore
Former-commit-id: 63d38846d8
2024-11-05 10:42:32 +01:00
Hadi ca94ff3e9b update flake
Former-commit-id: 9fc781c7da
2024-11-01 20:01:30 +01:00
Hadi a306013288 add nh informations
Former-commit-id: 999b3abda5
2024-10-29 11:19:37 +01:00
Hadi 90a73be013 init nh
Former-commit-id: 9ffeb42e14
2024-10-29 11:17:40 +01:00
Hadi 4aa1b4eb50 switch to nh
Former-commit-id: 1ae412cf5b
2024-10-29 11:12:35 +01:00
Hadi c2c92cf19c update todos
Former-commit-id: 46b7f8d1b7
2024-10-29 10:44:49 +01:00
Hadi d767f47422 update flake
Former-commit-id: 2551b8c9ec
2024-10-29 09:23:55 +01:00
Hadi 442a0ad2b8 init docker
Former-commit-id: 4657ca3d75
2024-10-28 12:56:55 +01:00
Hadi 8b4fae6767 disable channels
Former-commit-id: 863253bc74
2024-10-25 18:10:08 +02:00
Hadi 886e10612b update flake
Former-commit-id: 34e71c0efd
2024-10-25 18:10:01 +02:00
Hadi 5734351eca Init hyprsunset
Former-commit-id: 9a41310dd7
2024-10-23 20:21:49 +02:00
Hadi c52894ecf0 update todos
Former-commit-id: be5b996255
2024-10-23 20:21:33 +02:00
Hadi 72dd09aca1 fix mistake
Former-commit-id: 0c169156bb
2024-10-23 20:20:26 +02:00
Hadi 4bd0343a63 Init hyprpolkitagent
Former-commit-id: 965ef9e76e
2024-10-23 20:15:46 +02:00
Hadi 961bb66e39 add nix path to nixd config
Former-commit-id: d7831f4115
2024-10-23 20:00:11 +02:00
Hadi 3e2f341bdb add nixpkgs path
Former-commit-id: a74e365403
2024-10-23 19:59:57 +02:00
Hadi e0dcde257a update flake
Former-commit-id: f38ee3051c
2024-10-22 20:34:24 +02:00
github-actions e2ce1c442c Update README.md (auto)
Former-commit-id: a1fcbd51d8
2024-10-21 15:08:56 +00:00
Hadi d3a25298d8 update readme theme section
Former-commit-id: 4e69c6702f
2024-10-21 17:08:34 +02:00
Hadi b4edee45c2 add the theme variables inside the theme dir
Former-commit-id: ba911dc627
2024-10-21 17:06:15 +02:00
Hadi c830e627b0 add just to dev packages
Former-commit-id: c36755f90e
2024-10-21 16:54:39 +02:00
Hadi fcec5fff43 add position option for hyprpanel
Former-commit-id: 1ac07c3ace
2024-10-21 13:16:27 +02:00
Hadi 8a81c97ef3 Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: 7af05cf3b3
2024-10-21 13:04:00 +02:00
Hadi 6d46bb179c update todos
Former-commit-id: b1a5af1257
2024-10-21 13:03:51 +02:00
github-actions a38eb82a2d Update KEYBINDINGS-HYPRLAND.md (auto)
Former-commit-id: 893260f073
2024-10-20 18:38:06 +00:00
Hadi 2c01fd4182 tofi rules & dbus activation
Former-commit-id: f42dc43810
2024-10-20 20:37:53 +02:00
Hadi ad01749b10 playerctl shortcuts
Former-commit-id: bb06cc673a
2024-10-20 20:37:10 +02:00
Hadi 201e9141a9 launch drun through tofi
Former-commit-id: d4761c8c51
2024-10-20 20:36:54 +02:00
Hadi dfbabf721d Add gpu & disable ghost monitors
Former-commit-id: 6744550bf6
2024-10-17 20:29:08 +02:00
Hadi 24553acae4 add hints for changeme comments
Former-commit-id: b8b9d16f8c
2024-10-16 18:56:56 +02:00
Hadi ace16b05dd remove kde connect
Former-commit-id: 4c5963dcaa
2024-10-16 18:56:41 +02:00
Hadi 9222b90b24 add aliases for git reset
Former-commit-id: 968ca31d18
2024-10-16 16:19:20 +02:00
Hadi ac7da3935e update todos
Former-commit-id: c283b9cb9c
2024-10-16 16:17:55 +02:00
Hadi c08d1bd231 sort by lines
Former-commit-id: 339349661a
2024-10-16 16:16:49 +02:00
github-actions 9635c7c8d5 Update KEYBINDINGS-HYPRLAND.md (auto)
Former-commit-id: c904a81267
2024-10-15 23:59:19 +00:00
Hadi 51c00c532f init quickmenu
Former-commit-id: c9663e1da6
2024-10-16 01:59:04 +02:00
Hadi e386a42a43 update todos
Former-commit-id: 37c6ba8d1b
2024-10-16 01:29:47 +02:00
Hadi 26f5c4d041 disable autoDrag (overview)
Former-commit-id: 6f052316e9
2024-10-16 01:29:36 +02:00
github-actions c3c4d5a027 Update KEYBINDINGS-HYPRLAND.md (auto)
Former-commit-id: 01a5992be0
2024-10-15 23:22:27 +00:00
Hadi c416c53ec3 Init Hyprspace (overview)
Former-commit-id: e0e09df208
2024-10-16 01:22:12 +02:00
Hadi 51c1e94c15 fix prompts
Former-commit-id: 0d50980a8d
2024-10-16 00:43:59 +02:00
Hadi 12657964c0 add tofi commandw
Former-commit-id: fdec6ed81c
2024-10-16 00:40:40 +02:00
Hadi b4a41673ed change markdown title highlight
Former-commit-id: f878719b3d
2024-10-15 21:20:43 +02:00
Hadi a0c9d2570d disable treesitter context
Former-commit-id: 491e29a8fc
2024-10-15 20:15:22 +02:00
Hadi abca34497f buttons background color fix if transparent bar
Former-commit-id: e513c2cb44
2024-10-15 19:53:20 +02:00
Hadi 3a66e81390 nixy loop prompt fix
Former-commit-id: f36410f05f
2024-10-15 19:53:08 +02:00
Hadi 9c8ff97621 init nixy loop
Former-commit-id: 51c64ace97
2024-10-15 17:42:52 +02:00
Hadi fd3b272e31 Delete .sops.yaml
Former-commit-id: a88496af4f
2024-10-15 17:37:01 +02:00
Hadi b14941d499 remove .sops.yaml from github
Former-commit-id: 3c72f875ed
2024-10-15 17:36:37 +02:00
Hadi b503ef1dec remove .sops.yaml from github
Former-commit-id: 159e4aad23
2024-10-15 17:36:01 +02:00
Hadi f600f4903f tmux shortcuts for config
Former-commit-id: 3dee75c5d5
2024-10-15 17:30:47 +02:00
Hadi 023bf6d570 update flake
Former-commit-id: e5c39e4f2c
2024-10-15 16:54:19 +02:00
Hadi 3e23890e43 update github actions
Former-commit-id: 05fb0f494a
2024-10-15 15:08:08 +02:00
Hadi fc4dba9a75 update todos
Former-commit-id: f760d9b564
2024-10-15 15:03:50 +02:00
Hadi 2b56da08c6 change tab size for markdown
Former-commit-id: 80e52cc5c6
2024-10-15 15:02:39 +02:00
Hadi f95f539cad Add comments to explain each file
Former-commit-id: 915a767283
2024-10-15 15:02:07 +02:00
Hadi d8b626139a update markdown tab size
Former-commit-id: 4733414bb3
2024-10-15 14:24:58 +02:00
Hadi 477679c0a7 hyprshot -> grimblast
Former-commit-id: 3910bef1bf
2024-10-15 14:14:12 +02:00
Hadi 109ce61bbe add glib
Former-commit-id: 92dded9cc6
2024-10-15 14:05:20 +02:00
Hadi 0c50468ec2 update flake
Former-commit-id: 5e94040f34
2024-10-15 13:42:42 +02:00
Hadi 71f03bde80 update todo
Former-commit-id: 178cb469ab
2024-10-15 13:42:12 +02:00
Hadi b568faa7f2 From flake to nixvim plugin
Former-commit-id: 59202f132e
2024-10-15 03:47:58 +02:00
Hadi 31a84fd6ff update todo
Former-commit-id: 9f98570ef4
2024-10-15 03:47:43 +02:00
Hadi 30d497fef2 update todo
Former-commit-id: bcd3bd19f0
2024-10-15 03:28:56 +02:00
github-actions 6e41aed96f Update README.md (auto)
Former-commit-id: ad13d77413
2024-10-15 01:22:40 +00:00
Hadi 9256aabe91 edit readme
Former-commit-id: 98d8e2c87d
2024-10-15 03:22:09 +02:00
github-actions 7d54322e8c Update README.md (auto)
Former-commit-id: fd87e06e20
2024-10-15 01:20:20 +00:00
Hadi 364945be45 Edit readme
Former-commit-id: 6c9e632ab8
2024-10-15 03:19:53 +02:00
Hadi 7932ba1f44 Edit github actions
Former-commit-id: 66160d6ae2
2024-10-15 03:18:22 +02:00
Hadi 4eef13d9ba Changes config screenshots
Former-commit-id: 480ae1761d
2024-10-15 03:17:17 +02:00
Hadi 80ea020322 Edit aliases
Former-commit-id: 1b41b58e68
2024-10-15 03:16:57 +02:00
Hadi 31d025a1b8 Update todolist
Former-commit-id: bbbf23b3b0
2024-10-15 02:47:32 +02:00
Hadi b41644c69d Config lazygit
Former-commit-id: ff2d397191
2024-10-15 02:45:32 +02:00
Hadi 0ec95f82d2 Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: afe8e81bf6
2024-10-15 02:34:33 +02:00
Hadi 0df71d76df Init lazygit hm module
Former-commit-id: d097caf401
2024-10-15 02:34:18 +02:00
Hadi d3f39e88dc Add git aliases
Former-commit-id: 4b6814ae28
2024-10-15 02:34:00 +02:00
github-actions a8db853539 Update README.md (auto)
Former-commit-id: c76675c145
2024-10-15 00:29:21 +00:00
Hadi ba4af473f4 Move files to .github
Former-commit-id: ff86acc8c8
2024-10-15 02:28:55 +02:00
Hadi c272a4a8f9 Edit github actions
Former-commit-id: 7bb5c3b36c
2024-10-15 02:28:24 +02:00
Hadi 16f1aba0c1 Add transparentButtons option in hyprpanel
Former-commit-id: 1c477bacc3
2024-10-15 02:23:14 +02:00
Hadi 9be215cdea Update todo
Former-commit-id: 391d3dd58b
2024-10-15 02:18:54 +02:00
Hadi f125369e88 Add lazygit
Former-commit-id: e6dd29dac7
2024-10-15 02:17:45 +02:00
Hadi 73d9867b9a Add info
Former-commit-id: 67bed2c355
2024-10-14 22:29:08 +02:00
Hadi 04b3882399 Update github actions
Former-commit-id: 5ec16c82c4
2024-10-14 22:27:33 +02:00
github-actions ad0c8828cf Update README.md (auto)
Former-commit-id: 277faa310d
2024-10-14 20:21:09 +00:00
Hadi 89252b80bf Init tofi
Former-commit-id: 059acab3f9
2024-10-14 22:20:39 +02:00
Hadi ab6ae9e7fb Update todolist
Former-commit-id: 95248322f7
2024-10-14 22:20:30 +02:00
Hadi c84eb4e185 Update readme
Former-commit-id: 0ea82dbf32
2024-10-14 22:20:16 +02:00
Hadi 00236ad9b1 Update github actions
Former-commit-id: 65b9ab0b7e
2024-10-14 22:19:25 +02:00
Hadi 3e9f37ea04 Update readme
Former-commit-id: 4fd7e39c4e
2024-10-14 22:14:49 +02:00
Hadi 0019097d38 Update github actions
Former-commit-id: de477fd3dd
2024-10-14 22:14:30 +02:00
Hadi 90284912bc Update readme
Former-commit-id: 62e6928036
2024-10-14 22:13:13 +02:00
Hadi f9f63657fb Update github actions
Former-commit-id: 4cfdd8f461
2024-10-14 22:12:52 +02:00
Hadi 319da87024 Update readme
Former-commit-id: 2909de8e3a
2024-10-14 22:11:18 +02:00
Hadi b5cad0e00c Fix github action
Former-commit-id: e2f6c5e1ff
2024-10-14 22:09:29 +02:00
Hadi 892666e946 Update readme
Former-commit-id: 206de96fa2
2024-10-14 22:08:31 +02:00
Hadi d1f5b0ea4f Update github actions
Former-commit-id: ff7f46aa5d
2024-10-14 22:07:10 +02:00
Hadi a8980eb4dd Add white-noise app
Former-commit-id: 34cc630789
2024-10-14 21:23:59 +02:00
Hadi 8482de47b2 Update todolist
Former-commit-id: eb4cb4f4f4
2024-10-14 21:23:45 +02:00
Hadi 7faec62f69 Init KDE Connect
Former-commit-id: 52d7a9f2f0
2024-10-14 21:10:16 +02:00
Hadi 69f2ccceca Fix gtk settings key
Former-commit-id: a8dca6d1c1
2024-10-14 20:57:56 +02:00
Hadi 476d89a651 Flake update
Former-commit-id: d06355d5b7
2024-10-14 20:51:31 +02:00
Hadi 690ae53780 Add documentation per modules
Former-commit-id: 39f74ee63c
2024-10-14 16:35:57 +02:00
Hadi 58ed393097 Edit network placement
Former-commit-id: bd57c19a2b
2024-10-14 14:22:14 +02:00
Hadi 4367c39873 Edit popup font size
Former-commit-id: b9e3f09e7f
2024-10-11 22:33:29 +02:00
Hadi f32062d541 Fix copilot completion key overlap
Former-commit-id: f5388f478b
2024-10-11 13:02:43 +02:00
Hadi eb57aa062e Edit todo
Former-commit-id: a24167d107
2024-10-10 22:42:02 +02:00
Hadi fce3056d8f Init zenmode
Former-commit-id: 53703c0db0
2024-10-10 22:41:39 +02:00
Hadi 42bb93093c merge gh actions updates
Former-commit-id: 6adc0d7c3c
2024-10-10 21:43:33 +02:00
Hadi e785e84bf2 Init hyprswitch
Former-commit-id: 4969b5aa8f
2024-10-10 21:43:24 +02:00
github-actions e2af0156c8 Update KEYBINDINGS-HYPRLAND.md (auto)
Former-commit-id: f595e67528
2024-10-10 14:33:34 +00:00
Hadi b071daad02 Update
Former-commit-id: b5071b889b
2024-10-10 16:33:21 +02:00
Hadi 4e7a020fc4 Update
Former-commit-id: fa59c4d8c2
2024-10-10 16:31:30 +02:00
github-actions ac53f1a812 Update README.md (auto)
Former-commit-id: 568306aade
2024-10-10 14:29:41 +00:00
Hadi 5ed0ec12ea Update
Former-commit-id: 159ce3c1c2
2024-10-10 16:29:14 +02:00
Hadi fc0c2b0d13 Update
Former-commit-id: df52538c42
2024-10-10 15:35:23 +02:00
Hadi aa1f99e8f4 Update
Former-commit-id: ee894aaea7
2024-10-10 15:28:25 +02:00
Hadi 2b947bd5b1 Update
Former-commit-id: bd7ff1cc20
2024-10-10 15:09:59 +02:00
Hadi c0efbbd734 Update
Former-commit-id: 3c2157260d
2024-10-09 18:34:02 +02:00
Hadi 6379ff551d Update
Former-commit-id: 36e9281397
2024-10-09 17:09:33 +02:00
Hadi 492d257fa5 Put every variables in top of the file for easy copy to another config
Former-commit-id: 0bd55fdc10
2024-10-09 15:12:50 +02:00
Hadi 3bebb475d7 Update
Former-commit-id: 55c7c7068a
2024-10-08 21:56:44 +02:00
Hadi 4a832f376f Update
Former-commit-id: 5603871ef1
2024-10-08 20:46:56 +02:00
Hadi a5bd556df9 Update
Former-commit-id: a554505de2
2024-10-08 20:07:56 +02:00
Hadi c6710b1d64 Update
Former-commit-id: 3f0a694b5f
2024-10-08 20:02:45 +02:00
Hadi 731aa270b6 Update
Former-commit-id: a781a227ac
2024-10-08 13:00:40 +02:00
Hadi 8c74fa0fc8 Remove duckduckgo theme changing alert
Former-commit-id: 5e8139963f
2024-10-08 12:37:56 +02:00
Hadi 0bb41bb6dd Update the readme
Former-commit-id: 85b8874094
2024-10-08 12:35:38 +02:00
Hadi 92e9e59f02 Update the readme
Former-commit-id: d7184174cd
2024-10-08 12:34:50 +02:00
Hadi 7a177e4bb2 Update
Former-commit-id: 8d7fbd74b5
2024-10-08 12:33:38 +02:00
Hadi e8625f81e9 Update
Former-commit-id: 36527362a7
2024-10-08 11:43:12 +02:00
Hadi b14c343f14 Update
Former-commit-id: e83de257ad
2024-10-08 11:29:59 +02:00
Hadi c364668759 Update
Former-commit-id: c401b9bd7f
2024-10-08 10:39:10 +02:00
Hadi 3381fe405b Update
Former-commit-id: 741a6f97ae
2024-10-08 10:17:01 +02:00
Hadi b738189d0c Update
Former-commit-id: 52e267a436
2024-10-07 20:41:30 +02:00
Hadi ac914caf6a Update
Former-commit-id: d11cf580f9
2024-10-07 20:27:07 +02:00
Hadi 97e2c915cd Update
Former-commit-id: d37504de7c
2024-10-07 18:34:06 +02:00
Hadi 21ed46cd7c Update
Former-commit-id: 8a41ffad2f
2024-10-07 13:13:23 +02:00
Hadi 7eb4e5ade9 Update
Former-commit-id: 3aa0fb8a22
2024-10-07 12:02:26 +02:00
Hadi dae95bc5be Update
Former-commit-id: 75f2c2c7c6
2024-10-07 11:17:59 +02:00
Hadi a33cf73ff1 Update
Former-commit-id: ab65fe342b
2024-10-07 10:13:21 +02:00
Hadi 18c30e5931 Update
Former-commit-id: 905cc9a885
2024-10-06 18:49:52 +02:00
Hadi 13c8f27411 Testing
Former-commit-id: 23dcfd5290
2024-10-05 11:48:16 +02:00
Hadi a640670baa Update
Former-commit-id: 270c1b959e
2024-10-04 21:12:13 +02:00
Hadi ae77733c71 Update
Former-commit-id: 58fa41a210
2024-10-04 21:03:01 +02:00
Hadi 6827360045 Update
Former-commit-id: 8f6b049129
2024-10-04 10:58:53 +02:00
Hadi 359e9745d6 Update
Former-commit-id: 7047ffe785
2024-10-03 10:18:49 +02:00
Hadi 56bcd3d56a Update
Former-commit-id: fe657984fe
2024-10-01 17:16:24 +02:00
Hadi 8a81c546de Update
Former-commit-id: 660c99d5ed
2024-10-01 15:05:02 +02:00
Hadi 23f0682eac Update
Former-commit-id: 7f1c7446f8
2024-10-01 14:57:15 +02:00
Hadi 418bc45bd2 Update
Former-commit-id: 804e6b255e
2024-10-01 13:58:05 +02:00
Hadi 1c4fece944 Update
Former-commit-id: 381e839dfa
2024-10-01 13:21:25 +02:00
Hadi 3716ba6b4f Update
Former-commit-id: 57c0df5d48
2024-09-30 21:15:21 +02:00
Hadi 0e56be3428 Update
Former-commit-id: c1609eefff
2024-09-23 15:12:05 +02:00
Hadi 7beef9441e Update
Former-commit-id: 22c67467c0
2024-09-20 13:35:40 +02:00
Hadi 176e3ba305 Update
Former-commit-id: f49ac89514
2024-09-18 23:54:02 +02:00
Hadi ed045316ff Update
Former-commit-id: e47edc0c1f
2024-09-18 23:53:39 +02:00
Hadi cfec304bbb Update
Former-commit-id: 2721d11575
2024-09-18 00:52:23 +02:00
Hadi 575bb58bfc Update
Former-commit-id: c97e51a9d2
2024-09-16 17:28:52 +02:00
Hadi 9ce3df4884 Update
Former-commit-id: ac293a378c
2024-09-16 17:24:47 +02:00
Hadi 3c9875a110 Update
Former-commit-id: 615028dcca
2024-09-15 20:58:24 +02:00
Hadi 8c69c549db update
Former-commit-id: feeb938f5e
2024-09-13 22:07:19 +02:00
Hadi f1f919fe49 Update
Former-commit-id: b6ec38b1a1
2024-09-13 20:04:14 +02:00
Hadi 12cc080fc3 Update
Former-commit-id: 86d990f157
2024-09-12 01:36:59 +02:00
Hadi 6b4b9a9aa7 Update
Former-commit-id: a16ea9af7d
2024-09-12 00:25:37 +02:00
Hadi 6207e48d84 Update
Former-commit-id: 7904e497bd
2024-09-11 17:53:25 +02:00
Hadi b41dfdf664 Update
Former-commit-id: 7f5e4a8e6d
2024-09-10 09:50:27 +02:00
Hadi 8155f65fb9 Update
Former-commit-id: 1a7e84a8dd
2024-09-09 13:56:45 +02:00
Hadi b0ca6aa757 Update
Former-commit-id: 381f88cf0d
2024-09-07 17:25:21 +02:00
Hadi fd0251afbc Update
Former-commit-id: 166c9f3139
2024-09-06 20:19:21 +02:00
Hadi 5e16ae7463 Update
Former-commit-id: 316e0cd2d3
2024-09-04 22:37:24 +02:00
Hadi 2a2f4e4b9d Update
Former-commit-id: 8fe7237409
2024-09-04 22:36:17 +02:00
Hadi eef1d9531f Update
Former-commit-id: 2ffa7e9518
2024-09-04 22:01:48 +02:00
Hadi b92243118d Update
Former-commit-id: cc8d0ddca3
2024-09-04 21:24:51 +02:00
Hadi 01f9894fc6 update
Former-commit-id: da2aab6f76
2024-09-04 21:07:53 +02:00
Hadi 03d202250b update
Former-commit-id: 79403b916d
2024-09-04 21:06:59 +02:00
Hadi 9cb8036b73 Update
Former-commit-id: 0489f7eaa7
2024-09-04 21:04:53 +02:00
Hadi 60fe3769e8 Release v2.4.0
Former-commit-id: 7ddff66f00
2024-09-04 10:11:28 +02:00
Hadi 641bf821d4 Update
Former-commit-id: e1f973cabf
2024-09-04 10:10:52 +02:00
Hadi 25aa619445 Update
Former-commit-id: e38895c4a5
2024-09-04 10:10:32 +02:00
Hadi 5a0d476de3 Update
Former-commit-id: c2e6fd7d32
2024-09-04 09:34:42 +02:00
Hadi 00db8d0ae6 Update
Former-commit-id: 3d8bcaeeb2
2024-09-04 02:02:57 +02:00
Hadi ef66b6f848 Add wofi clipman
Former-commit-id: 4135134261
2024-09-04 01:53:36 +02:00
Hadi 59caed5e69 Add wofi emoji
Former-commit-id: 027ef1c398
2024-09-04 01:44:37 +02:00
Hadi dad0865d06 Change to gammastep
Former-commit-id: 659509e613
2024-09-04 01:40:24 +02:00
Hadi c106c76cbc Update
Former-commit-id: e9a20f49e2
2024-09-02 18:30:30 +02:00
Hadi 4181544de8 Update
Former-commit-id: 75562adea8
2024-09-02 09:29:50 +02:00
Hadi 30c8414749 Update
Former-commit-id: 4afca71b91
2024-08-30 17:29:30 +02:00
Hadi 6bb9386773 Update
Former-commit-id: 4a8f1be75f
2024-08-30 17:02:38 +02:00
Hadi ae82cbcf67 Update
Former-commit-id: 4540b40dc4
2024-08-30 16:13:57 +02:00
Hadi 518ac107c6 Update
Former-commit-id: fcd5eca04f
2024-08-30 16:06:22 +02:00
Hadi 58f5f421e8 Update
Former-commit-id: da1b88305d
2024-08-30 15:47:17 +02:00
Hadi 999950afc9 Update
Former-commit-id: f0e9294982
2024-08-30 14:16:30 +02:00
Hadi 13a6249227 Update
Former-commit-id: b3f20e6aef
2024-08-30 09:33:57 +02:00
Hadi c68df370cc Update
Former-commit-id: 48a59c4c55
2024-08-29 22:46:04 +02:00
Hadi c08d551932 Update
Former-commit-id: c83e5b2213
2024-08-29 17:04:05 +02:00
Hadi fa63cf950a Update
Former-commit-id: 55a5c52c51
2024-08-29 14:29:05 +02:00
Hadi 31cb1fd0f2 Release v2.3.0
Former-commit-id: 90e8d5577e
2024-08-28 12:30:52 +02:00
Hadi 647236f7b0 Fetch the gtk flatcolor theme folder from github
Former-commit-id: 835a9e9da2
2024-08-28 12:30:04 +02:00
Hadi 43566fc4ae Update
Former-commit-id: 3c171c33be
2024-08-28 11:43:03 +02:00
Hadi 682c50793c Update
Former-commit-id: aa8fca0bed
2024-08-26 17:48:05 +02:00
Hadi 2958b5a03c Update
Former-commit-id: 1255919f41
2024-08-24 17:09:12 +02:00
Hadi 2b25d18bd5 update
Former-commit-id: 109f31151d
2024-08-23 11:42:33 +02:00
Hadi 248f9a5ba8 update
Former-commit-id: 3c3acd03b4
2024-08-23 11:28:15 +02:00
Hadi 89ff802e16 update
Former-commit-id: 65c95ac82a
2024-08-23 11:28:07 +02:00
Hadi 13643dc1bc update
Former-commit-id: 776095c817
2024-08-23 11:25:23 +02:00
Hadi 188ef240ae update
Former-commit-id: d36952e040
2024-08-23 11:23:16 +02:00
Hadi a8c1b6363d update
Former-commit-id: ae0480cab3
2024-08-23 10:59:21 +02:00
Hadi 8aaa6199f2 update
Former-commit-id: bd8e69fe44
2024-08-23 10:58:07 +02:00
Hadi 4cd544d59f update
Former-commit-id: ddeaf0170d
2024-08-23 10:56:42 +02:00
Hadi c9a4f2115d update
Former-commit-id: f27b66f878
2024-08-23 10:52:35 +02:00
Hadi 395efb8ef1 update
Former-commit-id: 574b0043ac
2024-08-23 10:52:11 +02:00
Hadi 1280370a0a update
Former-commit-id: fbd804939f
2024-08-23 10:51:31 +02:00
Hadi f9bcfb5b50 update
Former-commit-id: cfa4e187c5
2024-08-23 10:31:25 +02:00
Hadi 3244b2d7e0 update
Former-commit-id: b1d3094bcc
2024-08-23 10:25:43 +02:00
Hadi eff0846c0f update
Former-commit-id: 1f7ca17d94
2024-08-23 10:12:00 +02:00
Hadi e2a10d4067 update
Former-commit-id: d939bc6f53
2024-08-23 10:11:07 +02:00
Hadi 39a1d16701 update
Former-commit-id: 3419421098
2024-08-23 10:09:02 +02:00
Hadi adbe7f3295 Update
Former-commit-id: d816099985
2024-08-22 21:02:14 +02:00
Hadi d67f234b2b update
Former-commit-id: 28424b82ab
2024-08-22 16:28:08 +02:00
Hadi 14a3a77c9e update
Former-commit-id: 771dceeb06
2024-08-22 16:11:48 +02:00
Hadi 0a1f505dd1 update
Former-commit-id: a2d4d36289
2024-08-22 16:07:39 +02:00
Hadi c6b1af26ce update
Former-commit-id: e4fce0a17a
2024-08-22 16:06:44 +02:00
Hadi 4a42f1fc91 update
Former-commit-id: 88a8168ce2
2024-08-22 16:02:10 +02:00
Hadi 612a8f6d33 update
Former-commit-id: 58d809d860
2024-08-22 15:41:28 +02:00
Hadi e7b608ecc4 update
Former-commit-id: 4b3f43e402
2024-08-22 15:32:46 +02:00
Hadi bfe270b6e1 update
Former-commit-id: bbe0574051
2024-08-22 15:28:47 +02:00
Hadi e5f82cdb2d Update
Former-commit-id: 3ef71b9fa2
2024-08-22 15:25:32 +02:00
Hadi d705c8cecc Update
Former-commit-id: a240a76a8e
2024-08-20 15:27:18 +02:00
Hadi f2613218db Update
Former-commit-id: d254085e29
2024-08-20 00:17:10 +02:00
Hadi 2099c4636c Update
Former-commit-id: ac2223ad24
2024-08-19 22:50:30 +02:00
Hadi 8cf93bfbc8 Update
Former-commit-id: 8092a2d348
2024-08-19 22:28:49 +02:00
Hadi b2dca45c34 Update
Former-commit-id: c434816d83
2024-08-19 22:20:59 +02:00
Hadi 403e4e1967 Update
Former-commit-id: 9e8637e9a8
2024-08-19 21:09:21 +02:00
Hadi 7ef771f14e Update
Former-commit-id: d1896b626b
2024-08-19 20:40:29 +02:00
Hadi acb7db87df Release v2.2.0
Former-commit-id: e6f66110f0
2024-08-19 20:32:10 +02:00
Hadi 0f5b7f60b6 Update
Former-commit-id: caaa500232
2024-08-19 19:42:20 +02:00
Hadi d7264b0de1 Update
Former-commit-id: e27d43df71
2024-08-19 19:41:24 +02:00
Hadi 23b518381a Update
Former-commit-id: 79a69d245c
2024-08-19 19:36:21 +02:00
Hadi 8876aae16c Update
Former-commit-id: 849eb5dd11
2024-08-19 00:38:27 +02:00
Hadi 0ed5d1cf04 Update
Former-commit-id: 31ac58592e
2024-08-19 00:15:43 +02:00
Hadi 83decac5e9 Update
Former-commit-id: b9fda769bc
2024-08-18 23:57:00 +02:00
Hadi 9104494893 Update
Former-commit-id: 94c88e04f2
2024-08-18 23:56:48 +02:00
Hadi 10d1a73eeb Update
Former-commit-id: 9d74ac9d82
2024-08-18 23:52:21 +02:00
Hadi 307c0b5edd Update
Former-commit-id: a64c79ae22
2024-08-18 23:43:17 +02:00
552 changed files with 11223 additions and 58611 deletions
+15
View File
@@ -0,0 +1,15 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: anotherhadi
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
+132
View File
@@ -0,0 +1,132 @@
<div align="center">
<img alt="nixy logo" src="./.github/assets/logo.png" width="120px" />
</div>
<br>
# Nixy
<br>
<div align="center">
<a href="https://github.com/anotherhadi/nixy/stargazers">
<img src="https://img.shields.io/github/stars/anotherhadi/nixy?color={primarycolor}&labelColor={backgroundcolor}&style=for-the-badge&logo=starship&logoColor={primarycolor}">
</a>
<a href="https://github.com/anotherhadi/nixy/">
<img src="https://img.shields.io/github/repo-size/anotherhadi/nixy?color={primarycolor}&labelColor={backgroundcolor}&style=for-the-badge&logo=github&logoColor={primarycolor}">
</a>
<a href="https://nixos.org">
<img src="https://img.shields.io/badge/NixOS-unstable-blue.svg?style=for-the-badge&labelColor={backgroundcolor}&logo=NixOS&logoColor={primarycolor}&color={primarycolor}">
</a>
<a href="https://github.com/anotherhadi/nixy/blob/main/LICENSE">
<img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=License&message=MIT&colorA={backgroundcolor}&colorB={primarycolor}&logo=unlicense&logoColor={primarycolor}"/>
</a>
</div>
<br>
**Nixy simplifies and unifies** the Hyprland ecosystem with a modular, easily
customizable setup. It provides a structured way to manage your system
configuration and dotfiles with minimal effort. It includes _home-manager_,
_secrets_, and _custom theming_ all in one place.
**Features:**
- 💻 Hyprland & Caelestia: Preconfigured Hyprland ecosystem with Caelestia-shell (Ty to both projects!)
- 🎨 Consistent Theming: Base16 & Stylix-powered themes
- ⌨️ Vim-like Everywhere: Unified keybindings (Hyprland, nvim, vimium, etc.)
## Table of Content
{md_table_of_content}
## Screenshots
![Home](.github/assets/rose-pine/home.png)
![Flake & Spotify](.github/assets/rose-pine/flake-spotify.png)
![Browser and notification center](.github/assets/rose-pine/browser-and-notifications.png)
## Architecture
### 🏠 /home (User-level configuration)
Contains **dotfiles and settings** that apply to your user environment.
**Subfolders:**
- `programs` is a collection of apps configured with home-manager
- `system` is some "desktop environment" configuration
### 🐧 /nixos
Those are the system-level configurations. (audio, bluetooth, gpu, bootloader,
...)
### 🎨 /themes
This folder contains all system themes. Mainly
[stylix](https://stylix.danth.me/) configurations. Check out the available
themes and learn how to create your own in [THEMES.md](docs/THEMES.md)
### 💻 /hosts
This directory contains host-specific configurations. Each host includes:
- `configuration.nix` for system-wide settings
- `home.nix` for user-level configuration
- `variables.nix` for global variables
- `secrets/` for sensitive data
### 🖥️ /server-modules
This folder contains server-related nixos modules. (bitwarden, nextcloud, ...)
## Installation
1. [Fork](https://github.com/anotherhadi/nixy/fork) this repo and clone it to
your system:
```sh
git clone https://github.com/anotherhadi/nixy ~/.config/nixos
```
2. Copy the `hosts/laptop` folder, rename it to match your systems hostname,
and update `variables.nix` with your machines settings.
3. Copy your `hardware-configuration.nix` into your new host's folder to ensure
proper hardware support.
4. Register your new host in `flake.nix` by adding it under nixosConfigurations.
> [!IMPORTANT]
> `# CHANGEME` comments are placed throughout the config to
> indicate necessary modifications. Use the following command to quickly locate
> them:
>
> ```sh
> rg "CHANGEME" ~/.config/nixos
> ```
> [!TIP]
> When you add new files, don't forget to run `git add .` to add them to the git
> repository
5. Build the system
```sh
sudo nixos-rebuild switch --flake ~/.config/nixos#yourhostname
```
## Documentation
- [SERVER](docs/SERVER.md): Check out the server documentation
- [THEMES](docs/THEMES.md): How themes work and how to create your own
- [WALLPAPERS](https://github.com/anotherhadi/awesome-wallpapers): An awesome
collection of wallpapers
- [CONTRIBUTING](docs/CONTRIBUTING.md): How to contribute
- [LICENSE](LICENSE): MIT License
---
<div align="center">
<a href="https://github.com/anotherhadi/nixy">github</a> |
<a href="https://gitlab.com/anotherhadi_mirror/nixy">gitlab (mirror)</a> |
<a href="https://git.hadi.icu/anotherhadi/nixy">gitea (mirror)</a>
</div
Binary file not shown.

After

Width:  |  Height:  |  Size: 412 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 837 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

+20
View File
@@ -0,0 +1,20 @@
#!/usr/bin/env bash
# Create the README.md file from the .github/assets/README_template.md file
[[ -d "./docs" ]] || (echo "Folder ./docs not found" && exit 1)
README_FILE="./README.md"
table_of_content=$(markdown-table-of-contents --start-by 2 ./.github/assets/README_template.md) # https://github.com/anotherhadi/markdown-table-of-contents
readme_content=$(cat "./.github/assets/README_template.md")
# Replace variables
readme_content=${readme_content//\{primarycolor\}/A89AD1}
readme_content=${readme_content//\{backgroundcolor\}/0b0b0b}
readme_content=${readme_content//\{md_table_of_content\}/$table_of_content}
echo "[//]: # (This file is autogenerated)" >"$README_FILE"
echo "$readme_content" >>"$README_FILE"
sed 's/\r//' "$README_FILE" >"/tmp/readme.md"
mv "/tmp/readme.md" "$README_FILE"
+31
View File
@@ -0,0 +1,31 @@
on:
push:
paths:
- '.github/assets/README_template.md'
permissions:
contents: write
jobs:
update-readme:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./
steps:
- name: Check out the repository to the runner
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '^1.23'
- name: Install required dependencies
run: |
go install github.com/anotherhadi/markdown-table-of-contents@latest
- name: Run a script
run: |
chmod +x ./.github/scripts/create_readme.sh
./.github/scripts/create_readme.sh
git config user.name github-actions
git config user.email github-actions@github.com
git add .
git commit -m "Update README.md (auto)" && git push
exit 0
+3 -1
View File
@@ -1 +1,3 @@
todolist.md .sops.yaml
.claude/
old/
-11
View File
@@ -1,11 +0,0 @@
keys:
- &primary age12yvtj49pfh3fqzqflscm0ek4yzrjhr6cqhn7x89gdxnlykq0xudq5c7334
creation_rules:
- path_regex: hosts/laptop/secrets/laptop.yaml$
key_groups:
- age:
- *primary
- path_regex: hosts/server/secrets/server.yaml$
key_groups:
- age:
- *primary
+93 -43
View File
@@ -1,11 +1,6 @@
[//]: # (Title: Nixy) [//]: # (This file is autogenerated)
[//]: # (Description: Nixy is a Hyprland NixOS configuration with home-manager, secrets and custom theming all in one place. It's a simple way to manage your system configuration and dotfiles.)
[//]: # (Author: Hadi)
[//]: # (Date: 08/18/24)
[//]: # (Version: v2.0.1)
<div align="center"> <div align="center">
<img src="https://raw.githubusercontent.com/anotherhadi/nixy/main/docs/src/logo.png" width="100px" /> <img alt="nixy logo" src="./.github/assets/logo.png" width="120px" />
</div> </div>
<br> <br>
@@ -14,66 +9,115 @@
<br> <br>
<div align="center"> <div align="center">
<a href="https://github.com/anotherhadi/nixy">
<img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=Version&message=v2.0.1&colorA=181825&colorB=89b4fa&logo=githubactions&logoColor=89b4fa"/>
</a>
<a href="https://github.com/anotherhadi/nixy/stargazers"> <a href="https://github.com/anotherhadi/nixy/stargazers">
<img src="https://img.shields.io/github/stars/anotherhadi/nixy?color=89b4fa&labelColor=181825&style=for-the-badge&logo=starship&logoColor=89b4fa"> <img src="https://img.shields.io/github/stars/anotherhadi/nixy?color=A89AD1&labelColor=0b0b0b&style=for-the-badge&logo=starship&logoColor=A89AD1">
</a> </a>
<a href="https://github.com/anotherhadi/nixy/"> <a href="https://github.com/anotherhadi/nixy/">
<img src="https://img.shields.io/github/repo-size/anotherhadi/nixy?color=89b4fa&labelColor=181825&style=for-the-badge&logo=github&logoColor=89b4fa"> <img src="https://img.shields.io/github/repo-size/anotherhadi/nixy?color=A89AD1&labelColor=0b0b0b&style=for-the-badge&logo=github&logoColor=A89AD1">
</a> </a>
<a href="https://nixos.org"> <a href="https://nixos.org">
<img src="https://img.shields.io/badge/NixOS-unstable-blue.svg?style=for-the-badge&labelColor=181825&logo=NixOS&logoColor=89b4fa&color=89b4fa"> <img src="https://img.shields.io/badge/NixOS-unstable-blue.svg?style=for-the-badge&labelColor=0b0b0b&logo=NixOS&logoColor=A89AD1&color=A89AD1">
</a> </a>
<a href="https://github.com/anotherhadi/nixy/blob/main/LICENSE"> <a href="https://github.com/anotherhadi/nixy/blob/main/LICENSE">
<img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=License&message=MIT&colorA=181825&colorB=89b4fa&logo=unlicense&logoColor=89b4fa"/> <img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=License&message=MIT&colorA=0b0b0b&colorB=A89AD1&logo=unlicense&logoColor=A89AD1"/>
</a> </a>
</div> </div>
<br> <br>
**Nixy** is a **Hyprland** NixOS configuration with **home-manager**, **secrets**, and **custom theming** all in one place. **Nixy simplifies and unifies** the Hyprland ecosystem with a modular, easily
It's a simple way to manage your system configuration and dotfiles. customizable setup. It provides a structured way to manage your system
configuration and dotfiles with minimal effort. It includes _home-manager_,
_secrets_, and _custom theming_ all in one place.
**Features:**
- 💻 Hyprland & Caelestia: Preconfigured Hyprland ecosystem with Caelestia-shell (Ty to both projects!)
- 🎨 Consistent Theming: Base16 & Stylix-powered themes
- ⌨️ Vim-like Everywhere: Unified keybindings (Hyprland, nvim, vimium, etc.)
## Table of Content ## Table of Content
- [Table of Content](#table-of-content) - [Table of Content](#table-of-content)
- [Gallery](#gallery) - [Screenshots](#screenshots)
- [Architecture](#architecture) - [Architecture](#architecture)
- [🏠 /home (User-level configuration)](#-home-user-level-configuration)
- [🐧 /nixos](#-nixos)
- [🎨 /themes](#-themes)
- [💻 /hosts](#-hosts)
- [🖥️ /server-modules](#-server-modules)
- [Installation](#installation) - [Installation](#installation)
- [Documentation](#documentation) - [Documentation](#documentation)
## Gallery ## Screenshots
![catppuccin1](docs/src/catppuccin/1.png) ![Home](.github/assets/rose-pine/home.png)
![catppuccin2](docs/src/catppuccin/2.png) ![Flake & Spotify](.github/assets/rose-pine/flake-spotify.png)
![catppuccin3](docs/src/catppuccin/3.png) ![Browser and notification center](.github/assets/rose-pine/browser-and-notifications.png)
## Architecture ## Architecture
- 🏠 `home` are the dotfiles and configuration files for the users ### 🏠 /home (User-level configuration)
- 'programs' is a collection of apps configured with home-manager
- 'scripts' is a folder full of bash scripts (see [SCRIPTS.md](docs/SCRIPTS.md)) Contains **dotfiles and settings** that apply to your user environment.
- 'system' is some desktop environment like configuration
- 'wallpapers' are... wallpapers **Subfolders:**
- 💻 `hosts` are the system configuration files
- 'laptop' is my configuration for my laptop with Nvidia that you can copy - `programs` is a collection of apps configured with home-manager
- 'server' is for my homeserver (w/nextcloud, nginx, vaultwarden, ... look `hosts/server`) - `system` is some "desktop environment" configuration
- 'themes' contains all the *themes* available *(see [THEMES.md](docs/THEMES.md))*
- 'modules' are some nix modules that you can import (Nvidia, prime, fonts, ...) ### 🐧 /nixos
Those are the system-level configurations. (audio, bluetooth, gpu, bootloader,
...)
### 🎨 /themes
This folder contains all system themes. Mainly
[stylix](https://stylix.danth.me/) configurations. Check out the available
themes and learn how to create your own in [THEMES.md](docs/THEMES.md)
### 💻 /hosts
This directory contains host-specific configurations. Each host includes:
- `configuration.nix` for system-wide settings
- `home.nix` for user-level configuration
- `variables.nix` for global variables
- `secrets/` for sensitive data
### 🖥️ /server-modules
This folder contains server-related nixos modules. (bitwarden, nextcloud, ...)
## Installation ## Installation
1. [Fork](https://github.com/anotherhadi/nixy/fork) this repo and clone it to
your system:
```sh ```sh
git clone https://github.com/anotherhadi/nixy ~/.config/nixos git clone https://github.com/anotherhadi/nixy ~/.config/nixos
``` ```
- Copy the `hosts/laptop` folder, rename it to your system name, and change the variables inside the `variables.nix` file 2. Copy the `hosts/laptop` folder, rename it to match your systems hostname,
- Add your `hardware-configuration.nix` to your new host's folder and update `variables.nix` with your machines settings.
- Add your 'nixosConfigurations' inside `flake.nix` (You can edit your hostname one and change the lines containing '# CHANGEME') 3. Copy your `hardware-configuration.nix` into your new host's folder to ensure
proper hardware support.
4. Register your new host in `flake.nix` by adding it under nixosConfigurations.
> [!NOTE] > [!IMPORTANT]
> When you add new files, don't forget to run `git add .` to add them to the git repository > `# CHANGEME` comments are placed throughout the config to
> indicate necessary modifications. Use the following command to quickly locate
> them:
>
> ```sh
> rg "CHANGEME" ~/.config/nixos
> ```
> [!TIP]
> When you add new files, don't forget to run `git add .` to add them to the git
> repository
5. Build the system
```sh ```sh
sudo nixos-rebuild switch --flake ~/.config/nixos#yourhostname sudo nixos-rebuild switch --flake ~/.config/nixos#yourhostname
@@ -81,12 +125,18 @@ sudo nixos-rebuild switch --flake ~/.config/nixos#yourhostname
## Documentation ## Documentation
- [THEMES.md](docs/THEMES.md): How themes work and how to create your own - [SERVER](docs/SERVER.md): Check out the server documentation
- [APPS.md](docs/APPS.md): Which apps are installed - [THEMES](docs/THEMES.md): How themes work and how to create your own
- [SCRIPTS.md](docs/SCRIPTS.md): Scripts that are available - [WALLPAPERS](https://github.com/anotherhadi/awesome-wallpapers): An awesome
- [KEYBINDINGS.md](docs/KEYBINDINGS.md): Keybindings available in Hyprland collection of wallpapers
- [WALLPAPERS.md](docs/WALLPAPERS.md): Preview of every wallpapers available
- [TODO.md](docs/TODO.md): What's next (feel free to contribute) - [CONTRIBUTING](docs/CONTRIBUTING.md): How to contribute
- [CONTRIBUTING.md](docs/CONTRIBUTING.md): How to contribute
- [LICENSE](LICENSE): MIT License - [LICENSE](LICENSE): MIT License
---
<div align="center">
<a href="https://github.com/anotherhadi/nixy">github</a> |
<a href="https://gitlab.com/anotherhadi_mirror/nixy">gitlab (mirror)</a> |
<a href="https://git.hadi.icu/anotherhadi/nixy">gitea (mirror)</a>
</div
-56
View File
@@ -1,56 +0,0 @@
# Apps and services
*non-exhaustive lists*
## Laptop
The laptop configuration is used by an Omen 16 laptop w/ nvidia and an amd gpu running NixOS.
The configurations files can be found in the `hosts/laptop` directory.
| Category | Name |
|-----------------------------------------|----------------|
| WM | Hyprland |
| | hyprlock |
| | hyprpaper |
| | hypridle |
| | wlogout |
| Bar | waybar |
| Terminal | kitty |
| Shell | zsh |
| | tmux |
| | starship |
| | bat |
| | eza |
| | zoxide |
| | fzf |
| Editor | neovim(nixvim) |
| File manager | lf |
| | thunar |
| Browser | qutebrowser |
| Music | spicetify |
| Notifications | dunst |
| Launcher | wofi |
| DM | tuigreet |
| Secrets | sops-nix |
| Misc | lazygit |
| | neofetch |
| | cava |
| See [hosts/laptop](../hosts/laptop/)... | |
## Server
The server configuration is used by a home server running NixOS.
The configurations files can be found in the `hosts/server` directory.
I mainly use it for self-hosting websites and services such as Nextcloud, Vaultwarden, ...
I exposed some services to the internet using a reverse proxy (Nginx) and cloudflare-dyndns, others are accessed through a tailscale network
### Apps
- Nextcloud
- Vaultwarden
- Adguard Home
- Unifi Controler
- Uptime Kuma
- "Jackflix"
- Jellyfin, Transmission, *arr
- See [hosts/server](../hosts/server/)...
+3 -6
View File
@@ -1,19 +1,16 @@
# Contributing to Nixy # Contributing to Nixy
Everybody is invited and welcome to contribute to Nixy. There is a lot to do... Check the [TODO.md](./TODO.md) file! Everybody is invited and welcome to contribute to Nixy. There is a lot to do... Check the issues!
The process is straight-forward. The process is straight-forward.
- Read [How to get faster PR reviews](https://github.com/kubernetes/community/blob/master/contributors/guide/pull-requests.md#best-practices-for-faster-reviews) by Kubernetes (but skip step 0 and 1) - Read [How to get faster PR reviews](https://github.com/kubernetes/community/blob/master/contributors/guide/pull-requests.md#best-practices-for-faster-reviews) by Kubernetes (but skip step 0 and 1)
- Fork Nixy [git repository](https://github.com/anotherhadi/nixy). - Fork Nixy [git repository](https://github.com/anotherhadi/nixy).
- Write your changes (new theme, bug fixes, task in to-do, ...). - Write your changes (new theme, bug fixes, issues fix, ...).
- Create a Pull Request against the main branch of Nixy. - Create a Pull Request against the main branch of Nixy.
> [!TIP] > [!TIP]
> When wallpapers are added, run `./docs/scripts/compress_png.sh` and `./docs/scripts/create_preview_wallpapers.sh` > To update the README, change the `./.github/assets/README_template.md`
> [!TIP]
> To update the README, change the `./docs/src/README_template.md` and run `./docs/scripts/create_readme.sh`
> [!IMPORTANT] > [!IMPORTANT]
> Don't push your host's folder > Don't push your host's folder
-38
View File
@@ -1,38 +0,0 @@
# Keybindings
The list of the keybindings working on Hyprland:
| Description | Keybinding | Command |
| --------------------------- | ---------------------- | ------------------------------------------------------------------ |
| Switch Workspace | SUPER + {Number} | workspace {Number} |
| Move app to Workspace | SUPER SHIFT + {Number} | movetoworkspace {Number} |
| Kitty | SUPER + RETURN | exec \${pkgs.kitty}/bin/kitty |
| Thunar | SUPER + E | exec \${pkgs.xfce.thunar}/bin/thunar |
| Qutebrowser | SUPER + B | exec \${pkgs.qutebrowser}/bin/qutebrowser |
| Bitwarden | SUPER + K | exec \${pkgs.bitwarden}/bin/bitwarden |
| Peaclock | SUPER + C | exec \${pkgs.kitty}/bin/kitty --class peaclock peaclock |
| Lock | SUPER + L | exec \${pkgs.hyprlock}/bin/hyprlock |
| Powermenu | SUPER + X | exec powermenu |
| Launcher | SUPER + SPACE | exec menu |
| Close window | SUPER + Q | killactive |
| Toggle Floating | SUPER + T | togglefloating |
| Toggle Fullscreen | SUPER + F | fullscreen |
| Move focus left | SUPER + left | movefocus l |
| Move focus Right | SUPER + right | movefocus r |
| Move focus Up | SUPER + up | movefocus u |
| Move focus Down | SUPER + down | movefocus d |
| Screenshot window | SUPER + PRINT | exec screenshot window |
| Screenshot monitor | PRINT | exec screenshot monitor |
| Screenshot region | SUPER SHIFT + PRINT | exec screenshot region |
| Screenshot region then edit | ALT PRINT | exec screenshot region swappy |
| Turn off night shift | SUPER + F2 | exec night-shift-off |
| Turn on night shift | SUPER + F3 | exec night-shift-on |
| Choose sound output | SUPER + F5 | exec \${pkgs.kitty}/bin/kitty --class floating zsh -c sound-output |
| Move Window (mouse) | SUPER + mouse:272 | movewindow |
| Resize Window (mouse) | SUPER + R | resizewindow |
| Toggle Mute | XF86AudioMute | exec sound-toggle |
| Lock when closing Lid | switch:Lid Switch | exec \${pkgs.hyprlock}/bin/hyprlock |
| Sound Up | XF86AudioRaiseVolume | exec sound-up |
| Sound Down | XF86AudioLowerVolume | exec sound-down |
| Brightness Up | XF86MonBrightnessUp | exec brightness-up |
| Brightness Down | XF86MonBrightnessDown | exec brightness-down |
-59
View File
@@ -1,59 +0,0 @@
# Scripts
Scripts are located in the `home/scripts` folder. Home-manager add those in the path.
## Nix/NixOs shortcuts
> [!TIP]
> The `hostname` variable in `hosts/yourhost/variables.nix` should be also the name of the `nixosConfiguration` in `flake.nix` file.
- `nixy` # UI
- `nixy rebuild`
- `nixy update`
- `nixy upgrade`
- `nixy gc` # garbage collection
- `nixy cb` # clean boot menu
## Brightness control
- `brightness-up`
- `brightness-down`
- `brightness-change <up/down> <increment>`
## Sound control
- `sound-up`
- `sound-down`
- `sound-toggle`
- `sound-output`
- `sound-change [up/down/mute] <increment>`
## Caffeine
Caffeine is a simple script that toggles hypridle (disable suspend & screenlock).
- `caffeine` # Toggle caffeine
- `caffeine-status` # Return active/inactive
## Night-Shift
Blue light filter, using wlsunset
- `night-shift` # Toggle night shift
- `night-shift-status` # Return active/inactive
- `night-shift-on`
- `night-shift-off`
## Nerdfont FZF
Nerdfont fzf is a quick way to search for nerdfont icons locally.
It will copy the selected icon to the clipboard.
- `nerdfont-fzf`
## Compress/Extract
Some shortcuts to compress and extract files.
- `compress` ...
- `extract` ...
+29
View File
@@ -0,0 +1,29 @@
# SERVER
## Overview
This document describes the architecture and setup of the self-hosted **NixOS server**, which is securely accessible via **a Cloudflare Tunnel**.
The server is designed for private, secure, and easily manageable self-hosting of various services.
![server dashboard](../.github/assets/server_dashboard.png)
## **Why This Setup?**
- **Private & Secure**: Services are only accessible through Cloudflare's access control, preventing exposure to the "public internet".
- **Domain-based Access**: A custom domain maps to the server's tunnel, making service access simple and consistent.
- **Modular & Declarative**: Everything is managed through NixOS modules (except for access control), ensuring reproducibility and easy configuration.
## **Self-Hosted Services**
The server hosts several key applications:
- **NGINX**: Reverse proxy for routing traffic to services via my domain name.
- **AdGuard Home**: A self-hosted DNS ad blocker for network-wide ad and tracker filtering.
- **Glance**: An awesome dashboard! (See the screenshot above)
- **Arr Stack (Radarr, Sonarr, etc.)**: Automated media management tools for handling movies and TV shows. (legaly ofc)
- **Mealie**: A self-hosted recipe manager and meal planner with a clean user interface.
- **Stirling-PDF**: A powerful, locally hosted web application for editing, merging, and converting PDF files.
- **CyberChef**: The "Cyber Swiss Army Knife" for data analysis, decoding, and encryption tasks.
- **Mazanoke**: A utility service for image processing, specialized in format conversion and downgrading/optimization.
- **SSH**: Secure remote access configuration for server management. (via browser too)
- **Security related stuff**: Cloudflared, Fail2Ban, Firewall
+6 -21
View File
@@ -1,32 +1,17 @@
# Themes # Themes
Themes are defined in `hosts/themes`. Those themes define the colors, fonts, icons, etc, used by Hyprland and the apps/programs installed. Themes are defined in `themes`. Those themes define the colors, fonts, icons, etc, used by Hyprland and the apps/programs installed.
You can change the selected theme by changing the import statement of your host's variables.nix file. You can change the selected theme by changing the import statement of your host's variables.nix file.
> [!TIP]
> To apply the theme to DuckDuckGo, follow the instructions in `$HOME/.duckduckgo-colorscheme.js`
## Create your theme ## Create your theme
Create a copy of one of the existing themes and change the variables. Create a copy of one of the existing themes and change the variables.
Wallpapers are loaded from the `home/wallpapers` folder. Wallpapers are loaded from the [hadi's awesome-wallpapers](https://github.com/anotherhadi/awesome-wallpapers) repo.
## Gallery ## Gallery
### Nixy ### Rose-pine
![nixy1](src/nixy/1.png) ![Home](../.github/assets/rose-pine/home.png)
![nixy2](src/nixy/2.png) ![Flake & Spotify](../.github/assets/rose-pine/flake-spotify.png)
![nixy3](src/nixy/3.png) ![Browser and notification center](../.github/assets/rose-pine/browser-and-notifications.png)
### Catppuccin
![catppuccin1](src/catppuccin/1.png)
![catppuccin2](src/catppuccin/2.png)
![catppuccin3](src/catppuccin/3.png)
### Windows
![windows1](src/windows/1.png)
![windows2](src/windows/2.png)
![windows3](src/windows/3.png)
-44
View File
@@ -1,44 +0,0 @@
# Todolist
feel free to contribute <3 ([CONTRIBUTING.md](CONTRIBUTING.md))
- [ ] Jackflix V2
- Backup Radarr, Prowlarr, Sonarr config
- [ ] Nixy
- [~] Installation script ([install.sh](./scripts/install.sh) to test on a fresh install)
- [~] Variables-template with defaults
- [ ] Themes
- [ ] macOS theme
- [ ] Tofi (Wofi, but terminal based)
- [ ] Qutebrowser
- [ ] !!! Bitwarden integration (I need this.)
- [ ] Hyprland
- [-] Implement Hyprcursor (see home/system/hyprland/hyprcursor.nix: Not working, small cursor on some apps, big one on others)
- [ ] Animations based on app name
- [ ] Wofi: popin
- [ ] Wlogout: fade in
- [ ] Fix screenshots
- [ ] Fix hyprlock
- [ ] Hyprlock tty theme
- [ ] Nixvim
- [ ] Keymaps:
- Trouble
- Tagbar
- [ ] Disable background color for headlines.nvim for titles
- [ ] Backup system for some folders ($home/dev, $home/pictures, ...)
- [ ] Exclude file pattern (nodes modules, ...)
- [ ] Auto backup when a specific usb key is plugged
- [ ] Pika backup?
- [ ] Markdown to pdf tool
- [ ] Server
- [ ] Bitcoin-git
- [ ] ServerFetch: Neofetch like, but for server: CPU, RAM, Disk, Network, Uptime, status (check with uptime kuma API)
- [ ] Ntfy auth file
- [ ] Launch transmission-openvpn on boot (see hosts/server/modules/jackflix/transmission.nix)
-39
View File
@@ -1,39 +0,0 @@
# Wallpapers
Wallpapers can be found in the `/home/wallpapers` folder.
| Name | Preview |
|---------------------|----------------------------------------------------------------|
| astronaut.png | ![astronaut.png](../home/wallpapers/astronaut.png) |
| aurore.png | ![aurore.png](../home/wallpapers/aurore.png) |
| barcode.png | ![barcode.png](../home/wallpapers/barcode.png) |
| cat-leaves.png | ![cat-leaves.png](../home/wallpapers/cat-leaves.png) |
| city.png | ![city.png](../home/wallpapers/city.png) |
| cloud.png | ![cloud.png](../home/wallpapers/cloud.png) |
| clouds2.png | ![clouds2.png](../home/wallpapers/clouds2.png) |
| clouds.png | ![clouds.png](../home/wallpapers/clouds.png) |
| coffee.png | ![coffee.png](../home/wallpapers/coffee.png) |
| dark_cloud.png | ![dark_cloud.png](../home/wallpapers/dark_cloud.png) |
| dark.png | ![dark.png](../home/wallpapers/dark.png) |
| fuji-dark.png | ![fuji-dark.png](../home/wallpapers/fuji-dark.png) |
| fuji-light.png | ![fuji-light.png](../home/wallpapers/fuji-light.png) |
| galaxy.png | ![galaxy.png](../home/wallpapers/galaxy.png) |
| house-cloud.png | ![house-cloud.png](../home/wallpapers/house-cloud.png) |
| key.png | ![key.png](../home/wallpapers/key.png) |
| lavender-cat.png | ![lavender-cat.png](../home/wallpapers/lavender-cat.png) |
| lofi-computer.png | ![lofi-computer.png](../home/wallpapers/lofi-computer.png) |
| lofi-urban.png | ![lofi-urban.png](../home/wallpapers/lofi-urban.png) |
| magma.png | ![magma.png](../home/wallpapers/magma.png) |
| mountains-black.png | ![mountains-black.png](../home/wallpapers/mountains-black.png) |
| mountains.png | ![mountains.png](../home/wallpapers/mountains.png) |
| nix.png | ![nix.png](../home/wallpapers/nix.png) |
| problems.png | ![problems.png](../home/wallpapers/problems.png) |
| sea.png | ![sea.png](../home/wallpapers/sea.png) |
| see.png | ![see.png](../home/wallpapers/see.png) |
| space2.png | ![space2.png](../home/wallpapers/space2.png) |
| space.png | ![space.png](../home/wallpapers/space.png) |
| street.png | ![street.png](../home/wallpapers/street.png) |
| sun.png | ![sun.png](../home/wallpapers/sun.png) |
| tokyo.png | ![tokyo.png](../home/wallpapers/tokyo.png) |
| train.png | ![train.png](../home/wallpapers/train.png) |
| windows.png | ![windows.png](../home/wallpapers/windows.png) |
-20
View File
@@ -1,20 +0,0 @@
#!/usr/bin/env bash
# Compress png files in ./docs/src and ./home/wallpapers
[[ -d "./docs" ]] || (echo "Folder ./docs not found" && exit 1)
# Main images
for file in ./docs/src/*.png; do
optipng "$file"
done
# Theme's images
for file in ./docs/src/*/*.png; do
optipng "$file"
done
# Wallpapers
for file in ./home/wallpapers/*.png; do
optipng "$file"
done
-24
View File
@@ -1,24 +0,0 @@
#!/usr/bin/env bash
[[ -d "./docs" ]] || (echo "Folder ./docs not found" && exit 1)
# Create WALLPAPERS.md to preview wallpapers in ./home/wallpapers
WALLPAPERS_FOLDER="./home/wallpapers"
WALLPAPERS_MD="./docs/WALLPAPERS.md"
[[ -d "$WALLPAPERS_FOLDER" ]] || (echo "Wallpapers folder not found" && exit 1)
echo "# Wallpapers" >"$WALLPAPERS_MD"
echo "" >>"$WALLPAPERS_MD"
echo "Wallpapers can be found in the \`/home/wallpapers\` folder." >>"$WALLPAPERS_MD"
echo "" >>"$WALLPAPERS_MD"
echo "| Name | Preview |" >>"$WALLPAPERS_MD"
echo "| -- | -- |" >>"$WALLPAPERS_MD"
for file in "$WALLPAPERS_FOLDER"/*.png; do
filename=$(basename "$file")
echo "| $filename | ![$filename](../home/wallpapers/$filename) |" >>"$WALLPAPERS_MD"
done
pandoc -t commonmark_x "$WALLPAPERS_MD" -o "/tmp/wallpapers.md"
mv "/tmp/wallpapers.md" "$WALLPAPERS_MD"
-27
View File
@@ -1,27 +0,0 @@
#!/usr/bin/env bash
# Create the README.md file from the docs/src/README_template.md file
[[ -d "./docs" ]] || (echo "Folder ./docs not found" && exit 1)
README_FILE="./README.md"
header=$(cat "./docs/src/header.md")
table_of_content=$(md-table-of-contents ./docs/src/README_template.md) # https://github.com/anotherhadi/md-table-of-contents
version=$(git describe --tags --abbrev=0)
readme_content=$(cat "./docs/src/README_template.md")
description=$(curl -s https://api.github.com/repos/anotherhadi/nixy | jq .description)
description="${description%\"}"
description="${description#\"}"
header=${header//\{date\}/$(date '+%D')}
header=${header//\{primarycolor\}/89b4fa}
header=${header//\{backgroundcolor\}/181825}
header=${header//\{version\}/$version}
header=${header//\{description\}/$description}
readme_content=${readme_content//\{md_table_of_content\}/$table_of_content}
echo "$header" >"$README_FILE"
echo "$readme_content" >>"$README_FILE"
sed 's/\r//' "$README_FILE" >"/tmp/readme.md"
mv "/tmp/readme.md" "$README_FILE"
-61
View File
@@ -1,61 +0,0 @@
#!/usr/bin/env bash
# A script to parse the Hyprland configuration to store keybindings in a table
[[ -d "./docs" ]] || (echo "Folder ./docs not found" && exit 1)
KEYBINDINGS_FILE="./docs/KEYBINDINGS.md"
function getList() {
content=$1
name=$2
list_start=$(echo "$content" | sed "/$name = \[/!d;=;Q")
list=$(echo "$content" | tail +"$list_start")
list_end=$(echo "$list" | sed '/\]/!d;=;Q')
list=$(echo "$list" | head -n"$list_end")
echo "$list"
}
[[ -f "./home/system/hyprland/default.nix" ]] || (echo "File ./home/system/hyprland/default.nix not found" && exit 1)
config=$(cat "./home/system/hyprland/default.nix")
# Bind
bind=$(getList "$config" "bind")
# Bindm (mouse)
bindm=$(getList "$config" "bindm")
# Bindl (lock)
bindl=$(getList "$config" "bindl")
# Bindle (lock, repetition)
bindle=$(getList "$config" "bindle")
# Join the lists:
keybindings=$(echo -e "$bind\n$bindm\n$bindl\n$bindle" | grep '"')
echo "# Keybindings" >"$KEYBINDINGS_FILE"
echo "" >>"$KEYBINDINGS_FILE"
echo "The list of the keybindings working on Hyprland:" >>"$KEYBINDINGS_FILE"
echo "" >>"$KEYBINDINGS_FILE"
echo "| Description | Keybinding |" >>"$KEYBINDINGS_FILE"
echo "| -- | -- |" >>"$KEYBINDINGS_FILE"
echo "| Switch Workspace | SUPER + {Number} |" >>"$KEYBINDINGS_FILE"
echo "| Move app to Workspace | SHIFT + SUPER + {Number} |" >>"$KEYBINDINGS_FILE"
echo "$keybindings" | while read line; do
comment=$(echo "$line" | cut -d\# -f2)
line=$(echo "$line" | cut -d\# -f1)
line=${line:1:${#line}-3}
mod=$(echo "$line" | cut -d, -f1)
key=$(echo "$line" | cut -d, -f2)
dispatcher=$(echo "$line" | cut -d, -f3)
params=$(echo "$line" | cut -d, -f4)
[[ $mod == '$mod' ]] && mod="SUPER + "
[[ $mod == '$shiftMod' ]] && mod="SHIFT + SUPER + "
echo "| $comment | $mod$key |" >>"$KEYBINDINGS_FILE"
done
pandoc -t commonmark_x "$KEYBINDINGS_FILE" -o "/tmp/keybindings.md"
mv "/tmp/keybindings.md" "$KEYBINDINGS_FILE"
-22
View File
@@ -1,22 +0,0 @@
#!/usr/bin/env bash
[[ -d "./docs" ]] || (echo "Folder ./docs not found" && exit 1)
TAG=$(git describe --tags --abbrev=0)
echo "Current tag: $TAG"
read -rp "Enter the new tag name: " NEW_TAG
echo "Compresing png files..."
bash ./docs/scripts/compress_png.sh
echo "Creating wallpapers preview..."
bash ./docs/scripts/create_preview_wallpapers.sh
echo "Creating README.md..."
bash ./docs/scripts/create_readme.sh
echo "Creating keybindings.md..."
bash ./docs/scripts/create_keybindings.sh
git add .
git commit -m "Release $NEW_TAG"
git tag -a "$NEW_TAG" -m "Release $NEW_TAG"
git push origin "$NEW_TAG"
-42
View File
@@ -1,42 +0,0 @@
#!/usr/bin/env bash
[ "$1" = "" ] && echo "Usage: $0 <theme_name>" && exit 1
theme_name=$1
# Switch to workspace 1
sleep 2
# Step 1
kitty --class peaclock peaclock &
sleep 1
menu &
sleep 1
hyprshot -m "output" -m "active" -o "$HOME/.config/nixos/docs/src/$theme_name" -f "1.png" -d
sleep 2
pkill peaclock
menu
sleep 2
# Step 2
kitty cmatrix &
sleep 1
kitty &
sleep 1
qutebrowser &
sleep 3
hyprshot -m "output" -m "active" -o "$HOME/.config/nixos/docs/src/$theme_name" -f "2.png" -d
sleep 2
pkill cmatrix
pkill --newest qutebrowser ""
pkill --newest kitty
sleep 2
# Step 3
kitty cava &
sleep 1
spotify &
sleep 10
brightness-down
sleep 1
hyprshot -m "output" -m "active" -o "$HOME/.config/nixos/docs/src/$theme_name" -f "3.png" -d
sleep 2
-55
View File
@@ -1,55 +0,0 @@
**Nixy** is a **Hyprland** NixOS configuration with **home-manager**, **secrets**, and **custom theming** all in one place.
It's a simple way to manage your system configuration and dotfiles.
## Table of Content
{md_table_of_content}
## Gallery
![catppuccin1](docs/src/catppuccin/1.png)
![catppuccin2](docs/src/catppuccin/2.png)
![catppuccin3](docs/src/catppuccin/3.png)
## Architecture
- 🏠 `home` are the dotfiles and configuration files for the users
- 'programs' is a collection of apps configured with home-manager
- 'scripts' is a folder full of bash scripts (see [SCRIPTS.md](docs/SCRIPTS.md))
- 'system' is some desktop environment like configuration
- 'wallpapers' are... wallpapers
- 💻 `hosts` are the system configuration files
- 'laptop' is my configuration for my laptop with Nvidia that you can copy
- 'server' is for my homeserver (w/nextcloud, nginx, vaultwarden, ... look `hosts/server`)
- 'themes' contains all the *themes* available *(see [THEMES.md](docs/THEMES.md))*
- 'modules' are some nix modules that you can import (Nvidia, prime, fonts, ...)
## Installation
```sh
git clone https://github.com/anotherhadi/nixy ~/.config/nixos
```
- Copy the `hosts/laptop` folder, rename it to your system name, and change the variables inside the `variables.nix` file
- Add your `hardware-configuration.nix` to your new host's folder
- Add your 'nixosConfigurations' inside `flake.nix` (You can edit your hostname one and change the lines containing '# CHANGEME')
> [!NOTE]
> When you add new files, don't forget to run `git add .` to add them to the git repository
```sh
sudo nixos-rebuild switch --flake ~/.config/nixos#yourhostname
```
## Documentation
- [THEMES.md](docs/THEMES.md): How themes work and how to create your own
- [APPS.md](docs/APPS.md): Which apps are installed
- [SCRIPTS.md](docs/SCRIPTS.md): Scripts that are available
- [KEYBINDINGS.md](docs/KEYBINDINGS.md): Keybindings available in Hyprland
- [WALLPAPERS.md](docs/WALLPAPERS.md): Preview of every wallpapers available
- [TODO.md](docs/TODO.md): What's next (feel free to contribute)
- [CONTRIBUTING.md](docs/CONTRIBUTING.md): How to contribute
- [LICENSE](LICENSE): MIT License
Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 617 KiB

-33
View File
@@ -1,33 +0,0 @@
[//]: # (Title: Nixy)
[//]: # (Description: {description})
[//]: # (Author: Hadi)
[//]: # (Date: {date})
[//]: # (Version: {version})
<div align="center">
<img src="https://raw.githubusercontent.com/anotherhadi/nixy/main/docs/src/logo.png" width="100px" />
</div>
<br>
# Nixy
<br>
<div align="center">
<a href="https://github.com/anotherhadi/nixy">
<img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=Version&message={version}&colorA={backgroundcolor}&colorB={primarycolor}&logo=githubactions&logoColor={primarycolor}"/>
</a>
<a href="https://github.com/anotherhadi/nixy/stargazers">
<img src="https://img.shields.io/github/stars/anotherhadi/nixy?color={primarycolor}&labelColor={backgroundcolor}&style=for-the-badge&logo=starship&logoColor={primarycolor}">
</a>
<a href="https://github.com/anotherhadi/nixy/">
<img src="https://img.shields.io/github/repo-size/anotherhadi/nixy?color={primarycolor}&labelColor={backgroundcolor}&style=for-the-badge&logo=github&logoColor={primarycolor}">
</a>
<a href="https://nixos.org">
<img src="https://img.shields.io/badge/NixOS-unstable-blue.svg?style=for-the-badge&labelColor={backgroundcolor}&logo=NixOS&logoColor={primarycolor}&color={primarycolor}">
</a>
<a href="https://github.com/anotherhadi/nixy/blob/main/LICENSE">
<img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=License&message=MIT&colorA={backgroundcolor}&colorB={primarycolor}&logo=unlicense&logoColor={primarycolor}"/>
</a>
</div>
<br>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

-1
View File
@@ -1 +0,0 @@
8c00e379ddd7f89e4bbf9f381a5721d980c8026f
Binary file not shown.

Before

Width:  |  Height:  |  Size: 566 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 811 KiB

-1
View File
@@ -1 +0,0 @@
62b52ad02a886c19a8cfe1ea17e8aaad50f23632
Binary file not shown.

Before

Width:  |  Height:  |  Size: 411 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 990 KiB

Generated
+1416 -340
View File
File diff suppressed because it is too large Load Diff
+50 -38
View File
@@ -1,72 +1,84 @@
{ {
# https://github.com/anotherhadi/nixy # https://github.com/anotherhadi/nixy
description = '' description = ''
Nixy is a NixOS configuration with home-manager, secrets and custom theming all in one place. Nixy simplifies and unifies the Hyprland ecosystem with a modular, easily customizable setup.
It's a simple way to manage your system configuration and dotfiles. It provides a structured way to manage your system configuration and dotfiles with minimal effort.
''; '';
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.11";
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
stylix.url = "github:danth/stylix";
sops-nix.url = "github:Mic92/sops-nix";
nvf.url = "github:notashelf/nvf";
bun2nix.url = "github:nix-community/bun2nix";
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nixvim = { caelestia-shell = {
url = "github:nix-community/nixvim"; url = "github:caelestia-dots/shell";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
apple-fonts.url = "github:Lyndeno/apple-fonts.nix"; caelestia-cli = {
spicetify-nix.url = "github:the-argus/spicetify-nix"; url = "github:caelestia-dots/cli";
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; spicetify-nix = {
nurpkgs.url = "github:nix-community/NUR"; url = "github:Gerg-L/spicetify-nix";
nixos-hardware.url = "github:NixOS/nixos-hardware/master"; inputs.nixpkgs.follows = "nixpkgs";
};
# Server
# FIXME: Deleted repo for now
# eleakxir.url = "github:anotherhadi/eleakxir";
nixarr.url = "github:rasmus-kirk/nixarr";
default-creds.url = "github:anotherhadi/default-creds";
blog.url = "github:anotherhadi/blog";
awesome-wallpapers.url = "github:anotherhadi/awesome-wallpapers";
iknowyou.url = "github:anotherhadi/iknowyou";
}; };
outputs = inputs @ {nixpkgs, ...}: { outputs = inputs @ {nixpkgs, ...}: {
nixosConfigurations = { nixosConfigurations = {
h-laptop =
nixy = nixpkgs.lib.nixosSystem { # CHANGE ME # CHANGEME: This should match the 'hostname' in your variables.nix file
system = "x86_64-linux"; nixpkgs.lib.nixosSystem {
modules = [ modules = [
./hosts/laptop/configuration.nix # CHANGE ME
inputs.nixos-hardware.nixosModules.omen-16-n0005ne # CHANGE ME
inputs.home-manager.nixosModules.home-manager
{ {
nixpkgs.overlays = [ inputs.nurpkgs.overlay ]; nixpkgs.overlays = [];
_module.args = { inherit inputs; }; _module.args = {
home-manager = { inherit inputs;
useGlobalPkgs = true;
useUserPackages = true;
users."hadi" = import ./hosts/laptop/home.nix; # CHANGE ME
extraSpecialArgs = { inherit inputs; };
}; };
} }
inputs.nixos-hardware.nixosModules.omen-16-n0005ne # CHANGEME: check https://github.com/NixOS/nixos-hardware
inputs.home-manager.nixosModules.home-manager
inputs.stylix.nixosModules.stylix
inputs.nix-index-database.nixosModules.default
./hosts/laptop/configuration.nix # CHANGEME: change the path to match your host folder
]; ];
}; };
# Jack is my server
jack = nixpkgs.lib.nixosSystem { jack = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ modules = [
inputs.sops-nix.nixosModules.sops {_module.args = {inherit inputs;};}
./hosts/server/configuration.nix
inputs.home-manager.nixosModules.home-manager inputs.home-manager.nixosModules.home-manager
{ inputs.stylix.nixosModules.stylix
nixpkgs.overlays = [ inputs.nurpkgs.overlay ]; inputs.sops-nix.nixosModules.sops
_module.args = { inherit inputs; }; inputs.nixarr.nixosModules.default
home-manager = { # inputs.eleakxir.nixosModules.eleakxir
useGlobalPkgs = true; inputs.nix-index-database.nixosModules.default
useUserPackages = true; inputs.default-creds.nixosModules.default
users."hadi" = import ./hosts/server/home.nix; ./hosts/server/configuration.nix
extraSpecialArgs = { inherit inputs; };
};
}
]; ];
}; };
}; };
}; };
} }
+78
View File
@@ -0,0 +1,78 @@
{
programs.brave = {
enable = true;
commandLineArgs = [
# Wayland Native
"--enable-features=UseOzonePlatform"
"--ozone-platform=wayland"
# Hardware Acceleration (NVIDIA optimized)
"--enable-accelerated-video-decode"
"--enable-gpu-rasterization"
"--enable-zero-copy"
"--ignore-gpu-blocklist"
# Performance
"--enable-features=VaapiVideoDecoder"
"--enable-features=VaapiVideoEncoder"
"--enable-features=CanvasOopRasterization"
"--disable-features=UseChromeOSDirectVideoDecoder"
# Privacy & Security
"--disable-features=MediaRouter" # Disable Chromecast
"--disable-features=OptimizationHints" # No Google suggestions
"--disable-features=AutofillSavePaymentMethods"
"--disable-background-networking" # No telemetry
"--disable-sync" # Manual sync control
# Wayland-specific fixes
"--disable-features=WaylandWpColorManagerV1" # Color management fix
# UI/UX
"--force-dark-mode" # Match Stylix theme
"--enable-features=WebUIDarkMode"
"--no-default-browser-check"
];
extensions = let
ids = [
];
in
map (id: {inherit id;}) ids;
};
xdg.configFile."BraveSoftware/Brave-Browser/Policies/managed/policy.json".text = builtins.toJSON {
BraveShieldsAdControl = 2;
BraveShieldsTrackersBlocked = 1;
BraveShieldsHttpsEverywhere = 1;
BraveRewardsDisabled = 1;
BraveWalletDisabled = 1;
BraveVPNDisabled = 1;
BraveAIChatEnabled = 0;
PasswordManagerEnabled = 0;
BravePlaylistEnabled = 0;
BraveWebDiscoveryEnabled = 0;
BraveStatsPingEnabled = 0;
DnsOverHttpsMode = "automatic";
BraveDarkMode = 1;
};
xdg.desktopEntries = {
brave-incognito = {
name = "Brave (Private window)";
genericName = "Navigateur Web";
exec = "brave --incognito";
icon = "brave-browser";
terminal = false;
categories = ["Network" "WebBrowser"];
mimeType = ["text/html" "text/xml"];
};
brave-tor = {
name = "Brave (Private window w/Tor)";
genericName = "Navigateur Web";
exec = "brave --tor";
icon = "brave-browser";
terminal = false;
categories = ["Network" "WebBrowser"];
};
};
}
-9
View File
@@ -1,9 +0,0 @@
{
programs.btop = {
enable = true;
settings = {
color_theme = "Default";
theme_background = false;
};
};
}
-13
View File
@@ -1,13 +0,0 @@
{ config, ... }: {
programs.cava = {
enable = true;
settings = {
general.framerate = 60;
smoothing.noise_reduction = 88;
color = {
background = "'#${config.var.theme.colors.bg}'";
foreground = "'#${config.var.theme.colors.accent}'";
};
};
};
}
-1
View File
@@ -1 +0,0 @@
{ imports = [ ./neofetch ./nerdfetch ]; }
-150
View File
@@ -1,150 +0,0 @@
{ pkgs, config, ... }: {
home.packages = with pkgs; [ neofetch ];
xdg.configFile."neofetch/ascii.txt".text = ''
''${c6}
'';
xdg.configFile."neofetch/config.conf".text = ''
# From: https://github.com/Chick2D/neofetch-themes/
# Made by https://github.com/Dan1jel
print_info() {
prin "\n"
info "\n \n OS" distro
info "\n \n Host" model
info "\n \n Kernel" kernel
info "\n \n Uptime" uptime
info "\n \n Packages" packages
info "\n \n Shell" shell
info "\n \n Resolution" resolution
info "\n \n DE" de
info "\n \n WM" wm
info "\n \n WM Theme" wm_theme
info "\n \n Theme" theme
info "\n \n Icons" icons
info "\n \n Terminal" term
info "\n \n Terminal Font" term_font
info "\n \n CPU" cpu
info "\n \n GPU" gpu
info "\n \n Memory" memory
info "\n \n Disk" disk
info "\n \n Battery" battery
info "\n \n Font" font
info "\n \n Song" song
[[ "$player" ]] && prin "\n \n Music Player" "$player"
info "\n \n Local IP" local_ip
prin "\n"
# prin "\n \n ''${cl0}''${cl1}''${cl2}''${cl3}''${cl4}''${cl5}''${cl6}''${cl7}"
prin "\n \n \n \n \n \n ''${cl0} \n \n ''${cl1} \n \n ''${cl2} \n \n ''${cl3} \n \n ''${cl4} \n \n ''${cl5} \n \n ''${cl6} \n \n ''${cl7}"
}
reset="\033[0m"
gray="\033[1;90m"
red="\033[1;31m"
green="\033[1;32m"
yellow="\033[1;33m"
blue="\033[1;34m"
magenta="\033[1;35m"
cyan="\033[1;36m"
white="\033[1;37m"
cl0="''${gray}"
cl1="''${red}"
cl2="''${green}"
cl3="''${yellow}"
cl4="''${blue}"
cl5="''${magenta}"
cl6="''${cyan}"
cl7="''${white}"
title_fqdn="off"
kernel_shorthand="on"
distro_shorthand="off"
os_arch="off"
uptime_shorthand="on"
memory_percent="off"
memory_unit="mib"
package_managers="on"
shell_path="off"
shell_version="on"
speed_type="bios_limit"
speed_shorthand="off"
cpu_brand="on"
cpu_speed="on"
cpu_cores="logical"
cpu_temp="off"
gpu_brand="on"
gpu_type="all"
refresh_rate="off"
gtk_shorthand="off"
gtk2="on"
gtk3="on"
de_version="on"
disk_show=('/storage/emulated' '/' '/server')
disk_subtitle="none"
disk_percent="on"
music_player="auto"
song_format="%artist% - %album% - %title%"
song_shorthand="off"
mpc_args=()
colors=(${toString config.var.theme.colors.accentNumber} 1 ${
toString config.var.theme.colors.accentNumber
} ${toString config.var.theme.colors.accentNumber} 7)
bold="on"
underline_enabled="on"
underline_char="-"
separator=":"
block_range=(0 15)
color_blocks="on"
block_width=3
block_height=1
col_offset="auto"
bar_char_elapsed="-"
bar_char_total="="
bar_border="on"
bar_length=15
bar_color_elapsed="distro"
bar_color_total="distro"
cpu_display="off"
memory_display="off"
battery_display="off"
disk_display="off"
image_backend="ascii"
image_source="$HOME/.config/neofetch/ascii.txt"
ascii_distro="auto"
ascii_colors=(distro)
ascii_bold="on"
image_loop="off"
thumbnail_dir="''${XDG_CACHE_HOME:-''${HOME}/.cache}/thumbnails/neofetch"
crop_mode="normal"
crop_offset="center"
image_size="auto"
gap=2
yoffset=0
xoffset=0
background_color=
stdout="off"
'';
}
-369
View File
@@ -1,369 +0,0 @@
{ pkgs, config, ... }:
let
nerdfetch = pkgs.writeShellScriptBin "nerdfetch" ''
ostype="$(uname)"
version=8.1.1
font=nerd
distrotype=none
osi=""
ki=""
ri="󰍛"
pi="󰏔"
ui="󰅶"
ci=""
case $1 in
"-p")
font=phosphor
osi=""
ki=""
ri=""
pi=""
ui=""
ci=""
;;
"-c")
font=cozette
ki=""
ri=""
pi=""
ui=""
ci=""
;;
"-e")
font=emoji
osi="🐧"
ki="💓"
ri="🐐"
pi="📦"
ui=""
ci="🎨"
;;
"-v")
echo "NerdFetch $version"
exit
;;
"-h")
echo "Flags:
-c: Cozette font
-p: Phosphor font
-e: Emoji font
-v: Version"
exit
;;
esac
if command -v getprop 1>/dev/null; then
distrotype=android
fi
kernel="$(echo $(uname -r) | cut -d'-' -f1-1)"
case $ostype in
*"Linux"*)
if [ $distrotype = android ]; then
host="$(hostname)"
USER="$(whoami)"
os="Android $(getprop ro.build.version.release)"
case $font in
phosphor) osi="" ;;
emoji) osi="🤖" ;;
*) osi="󰀲" ;;
esac
else
host="$(cat /proc/sys/kernel/hostname)"
. /etc/os-release
if [ -f /bedrock/etc/bedrock-release ]; then
os="$(brl version)"
else
os="''${PRETTY_NAME}"
if [ $font = nerd ]; then
case $(echo $ID | sed 's/ .*//') in
debian) osi="" ;;
arch) osi="󰣇" ;;
endeavouros) osi="" ;;
fedora) osi="" ;;
gentoo) osi="" ;;
rhel) osi="" ;;
slackware) osi="" ;;
void) osi="" ;;
alpine) osi="" ;;
nixos) osi="󱄅" ;;
artix) osi="" ;;
exherbo) osi="󰆚" ;;
mageia) osi="" ;;
manjaro) osi="" ;;
opensuse) osi="" ;;
solus) osi="" ;;
ubuntu) osi="" ;;
mint) osi="󰣭" ;;
trisquel) osi="" ;;
puppy) osi="" ;;
coreos) osi="" ;;
mx) osi="" ;;
vanilla) osi="" ;;
pop_os) osi="" ;;
raspbian) osi="" ;;
deepin) osi="" ;;
almalinux) osi="" ;;
garuda) osi="" ;;
centos) osi="" ;;
rocky) osi="" ;;
esac
elif [ $font = cozette ]; then
case $(echo $ID | sed 's/ .*//') in
debian) osi="" ;;
arch) osi="" ;;
fedora) osi="" ;;
gentoo) osi="" ;;
slackware) osi="" ;;
void) osi="" ;;
alpine) osi="" ;;
nixos) osi="" ;;
mageia) osi="" ;;
manjaro) osi="" ;;
opensuse) osi="" ;;
ubuntu) osi="" ;;
mint) osi="" ;;
coreos) osi="" ;;
centos) osi="" ;;
esac
fi
fi
fi
shell=$(basename "$SHELL")
;;
*"Darwin"*)
host="$(hostname -f | sed -e 's/^[^.]*\.//')"
mac_product="$(/usr/libexec/PlistBuddy -c "Print:ProductName" /System/Library/CoreServices/SystemVersion.plist)"
mac_version="$(/usr/libexec/PlistBuddy -c "Print:ProductVersion" /System/Library/CoreServices/SystemVersion.plist)"
os="''${mac_product} ''${mac_version}"
case $font in
nerd) osi="" ;;
phosphor) osi="" ;;
cozette) osi="" ;;
emoji) osi="🍎" ;;
esac
;;
*"FreeBSD"*)
host="$(hostname)"
distrotype=bsd
os="FreeBSD $(freebsd-version | sed 's/-.*//')"
case $font in
nerd) osi="" ;;
phosphor) osi="" ;;
cozette) osi="" ;;
emoji) osi="😈" ;;
esac
;;
*"OpenBSD"*)
host="$(hostname)"
distrotype=bsd
os="OpenBSD $(uname -r)"
case $font in
nerd) osi="" ;;
phosphor) osi="" ;;
cozette) osi="" ;;
emoji) osi="🐡" ;;
esac
;;
*"NetBSD"*)
host="$(hostname)"
distrotype=netbsd
os="NetBSD $(uname -r)"
case $font in
nerd) osi="󰉀" ;;
phosphor) osi="" ;;
cozette) osi="" ;;
emoji) osi="🚩" ;;
esac
;;
*)
os="Unix-like"
host="host"
;;
esac
## PACKAGE MANAGER AND PACKAGES DETECTION
MANAGER=$(which nix-env pkg flatpak yum zypper dnf rpm dpkg-query brew port pacman xbps-query emerge cave apk kiss pmm /usr/sbin/slackpkg bulge birb yay paru pacstall cpm pmm eopkg getprop 2>/dev/null)
manager=$(basename "$MANAGER")
if [ $distrotype = netbsd ]; then
manager="pkg_info-netbsd"
fi
case $manager in
cpm) packages="$(cpm C)" ;;
flatpak) packages="$(flatpak list --app | wc -l)" ;;
brew) packages="$(printf '%s\n' "$(brew --cellar)/"* | wc -l)" ;;
port) packages="$(port installed | wc -l)" ;;
dpkg-query) packages="$(dpkg-query -f '${
"binary:Package"
}\n' -W | wc -l)" ;;
rpm) packages="$(rpm -qa --last | wc -l)" ;;
yum) packages="$(yum list installed | wc -l)" ;;
dnf) packages="$(dnf list installed | wc -l)" ;;
zypper) packages="$(zypper se | wc -l)" ;;
pacman) packages="$(pacman -Q | wc -l)" ;;
yay) packages="$(yay -Q | wc -l)" ;;
paru) packages="$(paru -Q | wc -l)" ;;
pacstall) packages="$(pacstall -L | wc -l)" ;;
kiss) packages="$(kiss list | wc -l)" ;;
emerge) packages="$(qlist -I | wc -l)" ;;
pkg) packages="$(pkg info | wc -l | tr -d ' ')" ;;
cave) packages="$(cave show installed-slots | wc -l)" ;;
xbps-query) packages="$(xbps-query -l | wc -l)" ;;
nix-env) packages="$(nix-store -q --requisites /run/current-system/sw | wc -l)" ;;
apk) packages="$(apk list --installed | wc -l)" ;;
pmm) packages="$(/bedrock/libexec/pmm pacman pmm -Q 2>/dev/null | wc -l)" ;;
eopkg) packages="$(eopkg li | wc -l)" ;;
/usr/sbin/slackpkg) packages="$(ls /var/log/packages | wc -l)" ;;
bulge) packages="$(bulge list | wc -l)" ;;
birb) packages="$(birb --list-installed | wc -l)" ;;
pkg_info)
packages="$(pkg_info -A | wc -l)"
manager="pkg"
;;
pkg_info-netbsd)
packages="$(pkg_info -a | wc -l)"
manager="pkg"
;;
*)
if [ $distrotype = android ]; then
packages="$(dpkg-query -f '${"binary:Package"}\n' -W | wc -l)"
manager="dpkg"
else
packages="$(ls /usr/bin | wc -l)"
manager="bin"
fi
;;
esac
packages="''${packages#"''${packages%%[![:space:]]*}"}"
manager=$(echo $manager | sed "s/-query//; s/\/usr\/.*\///")
## UPTIME DETECTION
if [ $distrotype = android ]; then
uptime="$(echo $(uptime -p) | cut -c 4-)"
elif [ $distrotype = bsd ] || [ $distrotype = netbsd ]; then
uptime="$(uptime | sed -e 's/.* up //; s/, [0-9]* user.*//')"
else
case $ostype in
*"Linux"*)
IFS=. read -r s _ </proc/uptime
;;
*)
s=$(sysctl -n kern.boottime)
s=''${s#*=}
s=''${s%,*}
s=$(($(date +%s) - s))
;;
esac
d="$((s / 60 / 60 / 24))"
h="$((s / 60 / 60 % 24))"
m="$((s / 60 % 60))"
# Plurals
[ "$d" -gt 1 ] && dp=s
[ "$h" -gt 1 ] && hp=s
[ "$m" -gt 1 ] && mp=s
[ "$s" -gt 1 ] && sp=s
# Hide empty fields.
[ "$d" = 0 ] && d=
[ "$h" = 0 ] && h=
[ "$m" = 0 ] && m=
[ "$m" != "" ] && s=
# Make the output of uptime smaller.
[ "$d" ] && uptime="$d day$dp, "
[ "$h" ] && uptime="$uptime$h hour$hp, "
[ "$m" ] && uptime="$uptime$m min$mp"
[ "$s" ] && uptime="$uptime$s sec$sp"
uptime=''${uptime%, }
fi
## RAM DETECTION
case $ostype in
*"Linux"*)
while IFS=':k ' read -r key val _; do
case $key in
MemTotal)
mem_used=$((mem_used + val))
mem_full=$val
;;
Shmem) mem_used=$((mem_used + val)) ;;
MemFree | Buffers | Cached | SReclaimable) mem_used=$((mem_used - val)) ;;
esac
done </proc/meminfo
mem_used=$((mem_used / 1024))
mem_full=$((mem_full / 1024))
;;
*"Darwin"*)
mem_full=$(($(sysctl -n hw.memsize) / 1024 / 1024))
while IFS=:. read -r key val; do
case $key in
*' wired'* | *' active'* | *' occupied'*)
mem_used=$((mem_used + ${"val:-0"}))
;;
esac
done <-EOF
$(vm_stat)
EOF
mem_used=$((mem_used * 4 / 1024))
;;
*"BSD"*)
mem_full=$(($(sysctl -n hw.physmem) / 1024 / 1024))
if [ $distrotype = netbsd ]; then
mem_free=$(($(vmstat | awk 'NR==3 {print $4}') / 1024))
else
mem_free=$(($(sysctl -n vm.stats.vm.v_free_count) * $(sysctl -n vm.stats.vm.v_page_size) / 1024 / 1024))
fi
mem_used=$((mem_full - mem_free))
;;
*)
mem_full=1
mem_used=0
;;
esac
memstat="''${mem_used}/''${mem_full} MiB"
if which expr >/dev/null 2>&1; then
mempercent="($(expr $(expr ''${mem_used} \* 100 / ''${mem_full}))%)"
fi
## DEFINE COLORS
bold=''
black=''
red=''
green=''
yellow=''
blue=''
magenta=''
cyan=''
white=''
grey=''
reset=''
## USER VARIABLES -- YOU CAN CHANGE THESE
lc="$reset$bold''$${config.var.theme.colors.accentName}" # labels
nc="$reset$bold''$${config.var.theme.colors.accentName}" # labels
hn="$reset$bold''$${config.var.theme.colors.accentName}" # labels
ic="$reset$white" # info
c0="$reset$grey" # first color
c1="$reset$white" # second color
c2="$reset$yellow" # third color
## OUTPUT
echo """
''${c0} ___ ''${nc}''${USER}''${grey}@''${reset}''${hn}''${host}''${reset}
''${c0} (''${c1}.. ''${c0}\ ''${lc}''${osi} ''${ic}''${os}''${reset}
''${c0} (''${c2}<> ''${c0}| ''${lc}''${ki} ''${ic}''${kernel}''${reset}
''${c0} /''${c1}/ \\ ''${c0}\\ ''${lc}''${ri} ''${ic}''${RAM}''${memstat} ''${mempercent}
''${c0} ( ''${c1}| | ''${c0}/| ''${lc}''${pi} ''${ic}''${packages} (''${manager})''${reset}
''${c2} _''${c0}/\\ ''${c1}__)''${c0}/''${c2}_''${c0}) ''${lc}''${ui} ''${ic}''${uptime}''${reset}
''${c2} \/''${c0}-____''${c2}\/''${reset} ''${lc}''${ci} ''${red}''${green}''${yellow}''${blue}''${magenta}''${cyan}''${reset}
"""
'';
in { home.packages = [ nerdfetch ]; }
+32
View File
@@ -0,0 +1,32 @@
{
home.sessionVariables = {
TERMINAL = "ghostty";
TERM = "ghostty";
};
programs.ghostty = {
enable = true;
installVimSyntax = true;
enableZshIntegration = true;
settings = {
window-padding-x = 10;
confirm-close-surface = false;
window-padding-y = 10;
clipboard-read = "allow";
clipboard-write = "allow";
copy-on-select = "clipboard";
app-notifications = false;
keybind = [
"ctrl+j=goto_split:left"
"ctrl+i=goto_split:up"
"ctrl+k=goto_split:down"
"ctrl+l=goto_split:right"
"shift+ctrl+h=new_split:left"
"shift+ctrl+j=new_split:down"
"shift+ctrl+k=new_split:up"
"shift+ctrl+l=new_split:right"
"shift+ctrl+tab=new_tab"
];
};
};
}
+13 -8
View File
@@ -1,8 +1,10 @@
{ config, ... }: { # Git configuration
{config, ...}: let
username = config.var.git.username;
email = config.var.git.email;
in {
programs.git = { programs.git = {
enable = true; enable = true;
userName = config.var.git.username;
userEmail = config.var.git.email;
ignores = [ ignores = [
".cache/" ".cache/"
".DS_Store" ".DS_Store"
@@ -15,11 +17,14 @@
"result" "result"
"result-*" "result-*"
]; ];
extraConfig = { settings = {
user.name = username;
user.email = email;
init.defaultBranch = "main"; init.defaultBranch = "main";
pull.rebase = "false";
push.autoSetupRemote = true; push.autoSetupRemote = true;
}; color.ui = "1";
aliases = { alias = {
essa = "push --force"; essa = "push --force";
co = "checkout"; co = "checkout";
fuck = "commit --amend -m"; fuck = "commit --amend -m";
@@ -43,8 +48,8 @@
log --pretty=format:"%Cgreen%h %Creset%cd %Cblue[%cn] %Creset%s%C(yellow)%d%C(reset)" --graph --date=relative --decorate --all''; log --pretty=format:"%Cgreen%h %Creset%cd %Cblue[%cn] %Creset%s%C(yellow)%d%C(reset)" --graph --date=relative --decorate --all'';
llog = '' llog = ''
log --graph --name-status --pretty=format:"%C(red)%h %C(reset)(%cd) %C(green)%an %Creset%s %C(yellow)%d%Creset" --date=relative''; log --graph --name-status --pretty=format:"%C(red)%h %C(reset)(%cd) %C(green)%an %Creset%s %C(yellow)%d%Creset" --date=relative'';
edit-unmerged = edit-unmerged = "!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; hx `f`";
"!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; hx `f`"; };
}; };
}; };
} }
+35
View File
@@ -0,0 +1,35 @@
# Lazygit is a simple terminal UI for git commands.
{
config,
lib,
...
}: let
accent = "#${config.lib.stylix.colors.base0D}";
muted = "#${config.lib.stylix.colors.base03}";
in {
programs.lazygit = {
enable = true;
settings = lib.mkForce {
disableStartupPopups = true;
notARepository = "skip";
promptToReturnFromSubprocess = false;
update.method = "never";
git = {
commit.signOff = true;
overrideGpg = true;
parseEmoji = true;
};
gui = {
theme = {
activeBorderColor = [accent "bold"];
inactiveBorderColor = [muted];
};
showListFooter = false;
showRandomTip = false;
showCommandLog = false;
showBottomLine = false;
nerdFontsVersion = "3";
};
};
};
}
+15
View File
@@ -0,0 +1,15 @@
# This file is used to sign git commits using an SSH key.
{
# CHANGEME: change this to your own SSH key.
home.file.".ssh/allowed_signers".text = "* ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIINhWby7lUUXQNKbRu9/UOrGjWDf3fvoAwGHomWv/+lL";
programs.git = {
signing.format = "openpgp";
settings = {
commit.gpgsign = true;
gpg.ssh.allowedSignersFile = "~/.ssh/allowed_signers";
gpg.format = "ssh";
user.signingkey = "~/.ssh/key.pub";
};
};
}
+21
View File
@@ -0,0 +1,21 @@
{
pkgs,
pkgs-stable,
...
}: {
home.packages = with pkgs-stable; [
vlc # Video player
blanket # White-noise app
obsidian # Note taking app
textpieces # Manipulate texts
resources # Ressource monitor
gnome-clocks # Clocks app
gnome-text-editor # Basic graphic text editor
ticktick # Todo app
pinta # Image editor
onlyoffice-desktopeditors # Office suite
signal-desktop # Messaging app
element-desktop # Messaging app
];
}
+25
View File
@@ -0,0 +1,25 @@
{
pkgs-stable,
inputs,
...
}: {
home.packages = with pkgs-stable; [
wireshark
nmap
john
hashcat
# Web
caido
nuclei
gobuster
dirb
# Utils
inetutils
samba
openvpn
mariadb
redis
];
}
+24
View File
@@ -0,0 +1,24 @@
{
pkgs,
pkgs-stable,
inputs,
...
}: {
home.packages =
(with pkgs; [
# Unstable: latest toolchain versions preferred for dev
go
bun
nodejs
air
duckdb
claude-code
inputs.bun2nix.packages.${stdenv.hostPlatform.system}.default
])
++ (with pkgs-stable; [
docker
python3
jq
just
]);
}
+9
View File
@@ -0,0 +1,9 @@
{pkgs-stable, ...}: {
home.packages = with pkgs-stable; [
peaclock
cbonsai
pipes
cmatrix
fastfetch
];
}
-48
View File
@@ -1,48 +0,0 @@
{ config, pkgs, ... }: {
programs.kitty = {
enable = true;
settings = {
scrollback_lines = 10000;
initial_window_width = 1200;
initial_window_height = 600;
update_check_interval = 0;
enable_audio_bell = false;
confirm_os_window_close = "0";
remember_window_size = "no";
disable_ligatures = "never";
shell = "${pkgs.tmux}/bin/tmux";
url_style = "curly";
cursor_shape = "Underline";
cursor_underline_thickness = config.var.theme.border-size;
window_padding_width = config.var.theme.gaps-in;
# Font
font_family = config.var.theme.font-mono;
font_size = config.var.theme.font-size;
# Colors
background = "#" + config.var.theme.colors.bg;
url_color = "#" + config.var.theme.colors.accent;
color0 = "#" + config.var.theme.colors.c0;
color8 = "#" + config.var.theme.colors.c8;
color1 = "#" + config.var.theme.colors.c1;
color9 = "#" + config.var.theme.colors.c9;
color2 = "#" + config.var.theme.colors.c2;
color10 = "#" + config.var.theme.colors.c10;
color3 = "#" + config.var.theme.colors.c3;
color11 = "#" + config.var.theme.colors.c11;
color4 = "#" + config.var.theme.colors.c4;
color12 = "#" + config.var.theme.colors.c12;
color5 = "#" + config.var.theme.colors.c5;
color13 = "#" + config.var.theme.colors.c13;
color6 = "#" + config.var.theme.colors.c6;
color14 = "#" + config.var.theme.colors.c14;
color7 = "#" + config.var.theme.colors.c7;
color15 = "#" + config.var.theme.colors.c15;
cursor = "#" + config.var.theme.colors.fg;
cursor_text_color = "#" + config.var.theme.colors.bg;
selection_foreground = "#" + config.var.theme.colors.accentFg;
selection_background = "#" + config.var.theme.colors.accent;
};
};
}
-174
View File
@@ -1,174 +0,0 @@
# vim:ft=dircolors
# (This is not a dircolors file but it helps to highlight colors and comments)
# default values from dircolors
# (entries with a leading # are not implemented in lf)
# #no 00 # NORMAL
# fi 00 # FILE
# #rs 0 # RESET
# di 01;34 # DIR
# ln 01;36 # LINK
# #mh 00 # MULTIHARDLINK
# pi 40;33 # FIFO
# so 01;35 # SOCK
# #do 01;35 # DOOR
# bd 40;33;01 # BLK
# cd 40;33;01 # CHR
# or 40;31;01 # ORPHAN
# #mi 00 # MISSING
# su 37;41 # SETUID
# sg 30;43 # SETGID
# #ca 30;41 # CAPABILITY
# tw 30;42 # STICKY_OTHER_WRITABLE
# ow 34;42 # OTHER_WRITABLE
# st 37;44 # STICKY
# ex 01;32 # EXEC
# default values from lf (with matching order)
# ln 01;36 # LINK
# or 31;01 # ORPHAN
# tw 01;34 # STICKY_OTHER_WRITABLE
# ow 01;34 # OTHER_WRITABLE
# st 01;34 # STICKY
# di 01;34 # DIR
# pi 33 # FIFO
# so 01;35 # SOCK
# bd 33;01 # BLK
# cd 33;01 # CHR
# su 01;32 # SETUID
# sg 01;32 # SETGID
# ex 01;32 # EXEC
# fi 00 # FILE
# file types (with matching order)
ln 01;36 # LINK
or 31;01 # ORPHAN
tw 34 # STICKY_OTHER_WRITABLE
ow 34 # OTHER_WRITABLE
st 01;34 # STICKY
di 01;34 # DIR
pi 33 # FIFO
so 01;35 # SOCK
bd 33;01 # BLK
cd 33;01 # CHR
su 01;32 # SETUID
sg 01;32 # SETGID
ex 01;32 # EXEC
fi 00 # FILE
# archives or compressed (dircolors defaults)
*.tar 01;31
*.tgz 01;31
*.arc 01;31
*.arj 01;31
*.taz 01;31
*.lha 01;31
*.lz4 01;31
*.lzh 01;31
*.lzma 01;31
*.tlz 01;31
*.txz 01;31
*.tzo 01;31
*.t7z 01;31
*.zip 01;31
*.z 01;31
*.dz 01;31
*.gz 01;31
*.lrz 01;31
*.lz 01;31
*.lzo 01;31
*.xz 01;31
*.zst 01;31
*.tzst 01;31
*.bz2 01;31
*.bz 01;31
*.tbz 01;31
*.tbz2 01;31
*.tz 01;31
*.deb 01;31
*.rpm 01;31
*.jar 01;31
*.war 01;31
*.ear 01;31
*.sar 01;31
*.rar 01;31
*.alz 01;31
*.ace 01;31
*.zoo 01;31
*.cpio 01;31
*.7z 01;31
*.rz 01;31
*.cab 01;31
*.wim 01;31
*.swm 01;31
*.dwm 01;31
*.esd 01;31
# image formats (dircolors defaults)
*.jpg 01;35
*.jpeg 01;35
*.mjpg 01;35
*.mjpeg 01;35
*.gif 01;35
*.bmp 01;35
*.pbm 01;35
*.pgm 01;35
*.ppm 01;35
*.tga 01;35
*.xbm 01;35
*.xpm 01;35
*.tif 01;35
*.tiff 01;35
*.png 01;35
*.svg 01;35
*.svgz 01;35
*.mng 01;35
*.pcx 01;35
*.mov 01;35
*.mpg 01;35
*.mpeg 01;35
*.m2v 01;35
*.mkv 01;35
*.webm 01;35
*.ogm 01;35
*.mp4 01;35
*.m4v 01;35
*.mp4v 01;35
*.vob 01;35
*.qt 01;35
*.nuv 01;35
*.wmv 01;35
*.asf 01;35
*.rm 01;35
*.rmvb 01;35
*.flc 01;35
*.avi 01;35
*.fli 01;35
*.flv 01;35
*.gl 01;35
*.dl 01;35
*.xcf 01;35
*.xwd 01;35
*.yuv 01;35
*.cgm 01;35
*.emf 01;35
*.ogv 01;35
*.ogx 01;35
# audio formats (dircolors defaults)
*.aac 00;36
*.au 00;36
*.flac 00;36
*.m4a 00;36
*.mid 00;36
*.midi 00;36
*.mka 00;36
*.mp3 00;36
*.mpc 00;36
*.ogg 00;36
*.ra 00;36
*.wav 00;36
*.oga 00;36
*.opus 00;36
*.spx 00;36
*.xspf 00;36
-361
View File
@@ -1,361 +0,0 @@
# vim:ft=conf
# These examples require Nerd Fonts or a compatible font to be used.
# See https://www.nerdfonts.com for more information.
# default values from lf (with matching order)
# ln l # LINK
# or l # ORPHAN
# tw t # STICKY_OTHER_WRITABLE
# ow d # OTHER_WRITABLE
# st t # STICKY
# di d # DIR
# pi p # FIFO
# so s # SOCK
# bd b # BLK
# cd c # CHR
# su u # SETUID
# sg g # SETGID
# ex x # EXEC
# fi - # FILE
# file types (with matching order)
ln  # LINK
or  # ORPHAN
tw t # STICKY_OTHER_WRITABLE
ow  # OTHER_WRITABLE
st t # STICKY
di  # DIR
pi p # FIFO
so s # SOCK
bd b # BLK
cd c # CHR
su u # SETUID
sg g # SETGID
ex  # EXEC
fi  # FILE
# file extensions (vim-devicons)
*.styl 
*.sass 
*.scss 
*.htm 
*.html 
*.slim 
*.haml 
*.ejs 
*.css 
*.less 
*.md 
*.mdx 
*.markdown 
*.rmd 
*.json 
*.webmanifest 
*.js 
*.mjs 
*.jsx 
*.rb 
*.gemspec 
*.rake 
*.php 
*.py 
*.pyc 
*.pyo 
*.pyd 
*.coffee 
*.mustache 
*.hbs 
*.conf 
*.ini 
*.yml 
*.yaml 
*.toml 
*.bat 
*.mk 
*.jpg 
*.jpeg 
*.bmp 
*.png 
*.webp 
*.gif 
*.ico 
*.twig 
*.cpp 
*.c++ 
*.cxx 
*.cc 
*.cp 
*.c 
*.cs 󰌛
*.h 
*.hh 
*.hpp 
*.hxx 
*.hs 
*.lhs 
*.nix 
*.lua 
*.java 
*.sh 
*.fish 
*.bash 
*.zsh 
*.ksh 
*.csh 
*.awk 
*.ps1 
*.ml λ
*.mli λ
*.diff 
*.db 
*.sql 
*.dump 
*.clj 
*.cljc 
*.cljs 
*.edn 
*.scala 
*.go 
*.dart 
*.xul 
*.sln 
*.suo 
*.pl 
*.pm 
*.t 
*.rss 
'*.f#' 
*.fsscript 
*.fsx 
*.fs 
*.fsi 
*.rs 
*.rlib 
*.d 
*.erl 
*.hrl 
*.ex 
*.exs 
*.eex 
*.leex 
*.heex 
*.vim 
*.ai 
*.psd 
*.psb 
*.ts 
*.tsx 
*.jl 
*.pp 
*.vue 
*.elm 
*.swift 
*.xcplayground 
*.tex 󰙩
*.r 󰟔
*.rproj 󰗆
*.sol 󰡪
*.pem 
# file names (vim-devicons) (case-insensitive not supported in lf)
*gruntfile.coffee 
*gruntfile.js 
*gruntfile.ls 
*gulpfile.coffee 
*gulpfile.js 
*gulpfile.ls 
*mix.lock 
*dropbox 
*.ds_store 
*.gitconfig 
*.gitignore 
*.gitattributes 
*.gitlab-ci.yml 
*.bashrc 
*.zshrc 
*.zshenv 
*.zprofile 
*.vimrc 
*.gvimrc 
*_vimrc 
*_gvimrc 
*.bashprofile 
*favicon.ico 
*license 
*node_modules 
*react.jsx 
*procfile 
*dockerfile 
*docker-compose.yml 
*docker-compose.yaml 
*compose.yml 
*compose.yaml 
*rakefile 
*config.ru 
*gemfile 
*makefile 
*cmakelists.txt 
*robots.txt 󰚩
# file names (case-sensitive adaptations)
*Gruntfile.coffee 
*Gruntfile.js 
*Gruntfile.ls 
*Gulpfile.coffee 
*Gulpfile.js 
*Gulpfile.ls 
*Dropbox 
*.DS_Store 
*LICENSE 
*React.jsx 
*Procfile 
*Dockerfile 
*Docker-compose.yml 
*Docker-compose.yaml 
*Rakefile 
*Gemfile 
*Makefile 
*CMakeLists.txt 
# file patterns (vim-devicons) (patterns not supported in lf)
# .*jquery.*\.js$ 
# .*angular.*\.js$ 
# .*backbone.*\.js$ 
# .*require.*\.js$ 
# .*materialize.*\.js$ 
# .*materialize.*\.css$ 
# .*mootools.*\.js$ 
# .*vimrc.* 
# Vagrantfile$ 
# file patterns (file name adaptations)
*jquery.min.js 
*angular.min.js 
*backbone.min.js 
*require.min.js 
*materialize.min.js 
*materialize.min.css 
*mootools.min.js 
*vimrc 
Vagrantfile 
# archives or compressed (extensions from dircolors defaults)
*.tar 
*.tgz 
*.arc 
*.arj 
*.taz 
*.lha 
*.lz4 
*.lzh 
*.lzma 
*.tlz 
*.txz 
*.tzo 
*.t7z 
*.zip 
*.z 
*.dz 
*.gz 
*.lrz 
*.lz 
*.lzo 
*.xz 
*.zst 
*.tzst 
*.bz2 
*.bz 
*.tbz 
*.tbz2 
*.tz 
*.deb 
*.rpm 
*.jar 
*.war 
*.ear 
*.sar 
*.rar 
*.alz 
*.ace 
*.zoo 
*.cpio 
*.7z 
*.rz 
*.cab 
*.wim 
*.swm 
*.dwm 
*.esd 
# image formats (extensions from dircolors defaults)
*.jpg 
*.jpeg 
*.mjpg 
*.mjpeg 
*.gif 
*.bmp 
*.pbm 
*.pgm 
*.ppm 
*.tga 
*.xbm 
*.xpm 
*.tif 
*.tiff 
*.png 
*.svg 
*.svgz 
*.mng 
*.pcx 
*.mov 
*.mpg 
*.mpeg 
*.m2v 
*.mkv 
*.webm 
*.ogm 
*.mp4 
*.m4v 
*.mp4v 
*.vob 
*.qt 
*.nuv 
*.wmv 
*.asf 
*.rm 
*.rmvb 
*.flc 
*.avi 
*.fli 
*.flv 
*.gl 
*.dl 
*.xcf 
*.xwd 
*.yuv 
*.cgm 
*.emf 
*.ogv 
*.ogx 
# audio formats (extensions from dircolors defaults)
*.aac 
*.au 
*.flac 
*.m4a 
*.mid 
*.midi 
*.mka 
*.mp3 
*.mpc 
*.ogg 
*.ra 
*.wav 
*.oga 
*.opus 
*.spx 
*.xspf 
# other formats
*.pdf 
-80
View File
@@ -1,80 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs; [ pistol ];
programs.lf = {
enable = true;
commands = {
dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"'';
editor-open = "$$EDITOR $f";
mkdir = ''
''${{
printf "Directory Name: "
read DIR
mkdir $DIR
}}
'';
};
keybindings = {
d = "delete";
x = "cut";
"<enter>" = "open";
"<c-g>" = "quit";
"<esc>" = "quit";
"H" = "set hidden!";
"\\\"" = "";
o = "";
c = "mkdir";
"." = "set hidden!";
"`" = "mark-load";
"\\'" = "mark-load";
"g~" = "cd";
do = "dragon-out";
gh = "cd";
"g/" = "/";
ee = "editor-open";
V = ''$''${pkgs.bat}/bin/bat --paging=always "$f"'';
};
settings = {
ratios = [ 1 1 2 ];
preview = true;
hidden = true;
drawbox = true;
icons = true;
ignorecase = true;
incsearch = true;
};
previewer.source = "${pkgs.pistol}/bin/pistol";
extraConfig = let
previewer = pkgs.writeShellScriptBin "pv.sh" ''
file=$1
w=$2
h=$3
x=$4
y=$5
if [[ "$( ${pkgs.file}/bin/file -Lb --mime-type "$file")" =~ ^image ]]; then
${pkgs.kitty}/bin/kitty +kitten icat --silent --stdin no --transfer-mode file --place "''${w}x''${h}@''${x}x''${y}" "$file" < /dev/null > /dev/tty
exit 1
fi
${pkgs.pistol}/bin/pistol "$file"
'';
cleaner = pkgs.writeShellScriptBin "clean.sh" ''
${pkgs.kitty}/bin/kitty +kitten icat --clear --stdin no --silent --transfer-mode file < /dev/null > /dev/tty
'';
in ''
set cleaner ${cleaner}/bin/clean.sh
set previewer ${previewer}/bin/pv.sh
'';
};
xdg.configFile."lf" = {
recursive = true;
source = ./config;
};
}
-6
View File
@@ -1,6 +0,0 @@
{
services.nextcloud-client = {
enable = true;
startInBackground = true;
};
}
+19
View File
@@ -0,0 +1,19 @@
{pkgs, ...}: let
nightshift-toggle =
pkgs.writeShellScriptBin "nightshift-toggle"
# bash
''
if pidof "hyprsunset"; then
pkill hyprsunset
${pkgs.libnotify}/bin/notify-send "Night Shift Disabled" "Returning to full spectrum light. Filter disabled."
else
${pkgs.hyprsunset}/bin/hyprsunset -t 4500 &
${pkgs.libnotify}/bin/notify-send "Night Shift Activated" "Welcome to the warm side. Blue light filtering is now active."
fi
'';
in {
home.packages = with pkgs; [
hyprsunset
nightshift-toggle
];
}
+5
View File
@@ -0,0 +1,5 @@
{inputs, ...}: {
imports = [inputs.nix-index-database.homeModules.default];
programs.nix-index.enable = true;
programs.nix-index-database.comma.enable = true;
}
+81
View File
@@ -0,0 +1,81 @@
# - ## Nixy
#-
#- Nixy is a simple script that I use to manage my NixOS system. It's a simple script that provides a menu to rebuild, test, update, collect garbage, clean boot menu, etc.
#-
#- - `nixy` - UI wizard to manage the system.
#- - `nixy rebuild` - Rebuild the system.
#- - `nixy ...` - ... see the script for more commands.
{
pkgs,
config,
...
}: let
inherit (config.var) configDirectory;
nixy =
pkgs.writeShellScriptBin "nixy"
# bash
''
EXTRA_ARGS="''${@:2}"
function exec() {
$@
}
function ui(){
DEFAULT_ICON="󰘳"
# "icon;name;command"[]
apps=(
"󰑓;Rebuild;nixy rebuild"
"󰐊;Test;nixy test"
"󰚰;Update;nixy update"
";Collect Garbage;nixy gc"
"󰍜;Clean Boot Menu;nixy cb"
";List generation;nixy listgen"
)
# Apply default icons if empty:
for i in "''${!apps[@]}"; do
apps[i]=$(echo "''${apps[i]}" | sed 's/^;/'$DEFAULT_ICON';/')
done
fzf_result=$(printf "%s\n" "''${apps[@]}" | awk -F ';' '{print $1" "$2}' | fzf)
[[ -z $fzf_result ]] && exit 0
fzf_result=''${fzf_result/ /;}
line=$(printf "%s\n" "''${apps[@]}" | grep "$fzf_result")
command=$(echo "$line" | sed 's/^[^;]*;//;s/^[^;]*;//')
exec "$command"
exit $?
}
[[ $1 == "" ]] && ui
if [[ $1 == "rebuild" ]];then
cd ${configDirectory} && git add . && sudo nixos-rebuild switch --flake . $EXTRA_ARGS
elif [[ $1 == "test" ]];then
cd ${configDirectory} && git add . && sudo nixos-rebuild test --flake . $EXTRA_ARGS
elif [[ $1 == "update" ]];then
cd ${configDirectory} && nix flake update $EXTRA_ARGS
elif [[ $1 == "gc" ]];then
echo "Starting Nix garbage collection..."
cd ${configDirectory} && \
echo "Cleaning up system garbage..." && \
sudo nix-collect-garbage -d && \
echo "Cleaning up user garbage..." && \
nix-collect-garbage -d && \
echo "Collecting garbage from Nix store..." && \
nix-store --gc && \
echo "Optimizing Nix store..." && \
nix-store --optimise
echo "Nix garbage collection complete."
elif [[ $1 == "cb" ]];then
sudo /run/current-system/bin/switch-to-configuration boot
elif [[ $1 == "listgen" ]];then
sudo nix-env -p /nix/var/nix/profiles/system --list-generations
else
echo "Unknown argument"
fi
'';
in {home.packages = [nixy];}
+21
View File
@@ -0,0 +1,21 @@
# NVF is a Neovim configuration that provides a minimal setup with essential plugins and configurations.
{
inputs,
pkgs,
...
}: {
imports = [
inputs.nvf.homeManagerModules.default
./options.nix
./languages.nix
./picker.nix
./snacks.nix
./keymaps.nix
./utils.nix
./mini.nix
];
programs.nvf = {
enable = true;
};
}
+229
View File
@@ -0,0 +1,229 @@
{
programs.nvf.settings.vim = {
globals.mapleader = " ";
binds = {
whichKey = {
enable = true;
# TODO: registers
register = {};
};
};
keymaps = [
# General Mappings
{
key = "s";
mode = "n";
silent = true;
action = "<cmd>lua require('flash').jump()<cr>";
desc = "Flash";
}
{
key = "K";
mode = "n";
silent = true;
action = "<cmd>lua vim.lsp.buf.hover()<cr>";
desc = "LSP Hover";
}
{
key = "<C-tab>";
mode = "n";
silent = true;
action = "<cmd>bnext<cr>";
desc = "Next Buffer";
}
# Disable Arrow Keys in Normal Mode and Middle click
{
key = "<Up>";
mode = "n";
silent = true;
action = "<Nop>";
desc = "Disable Up Arrow";
}
{
key = "<Down>";
mode = "n";
silent = true;
action = "<Nop>";
desc = "Disable Down Arrow";
}
{
key = "<Left>";
mode = "n";
silent = true;
action = "<Nop>";
desc = "Disable Left Arrow";
}
{
key = "<Right>";
mode = "n";
silent = true;
action = "<Nop>";
desc = "Disable Right Arrow";
}
{
key = "<MiddleMouse>";
mode = ["n" "i" "v"]; # Normal, Insert, Visual
action = "<nop>"; # No Operation
silent = true;
}
{
key = "<2-MiddleMouse>"; # Désactive aussi le double clic molette
mode = ["n" "i" "v"];
action = "<nop>";
silent = true;
}
{
key = "<3-MiddleMouse>"; # Désactive aussi le double clic molette
mode = ["n" "i" "v"];
action = "<nop>";
silent = true;
}
# UI
{
key = "<leader>uw";
mode = "n";
silent = true;
action = "<cmd>set wrap!<cr>";
desc = "Toggle word wrapping";
}
{
key = "<leader>ul";
mode = "n";
silent = true;
action = "<cmd>set linebreak!<cr>";
desc = "Toggle linebreak";
}
{
key = "<leader>us";
mode = "n";
silent = true;
action = "<cmd>set spell!<cr>";
desc = "Toggle spellLazyGitcheck";
}
{
key = "<leader>uc";
mode = "n";
silent = true;
action = "<cmd>set cursorline!<cr>";
desc = "Toggle cursorline";
}
{
key = "<leader>un";
mode = "n";
silent = true;
action = "<cmd>set number!<cr>";
desc = "Toggle line numbers";
}
{
key = "<leader>ur";
mode = "n";
silent = true;
action = "<cmd>set relativenumber!<cr>";
desc = "Toggle relative line numbers";
}
{
key = "<leader>ut";
mode = "n";
silent = true;
action = "<cmd>set showtabline=2<cr>";
desc = "Show tabline";
}
{
key = "<leader>uT";
mode = "n";
silent = true;
action = "<cmd>set showtabline=0<cr>";
desc = "Hide tabline";
}
# Windows
{
key = "<leader>ws";
mode = "n";
silent = true;
action = "<cmd>split<cr>";
desc = "Split";
}
{
key = "<leader>wv";
mode = "n";
silent = true;
action = "<cmd>vsplit<cr>";
desc = "VSplit";
}
{
key = "<leader>wd";
mode = "n";
silent = true;
action = "<cmd>close<cr>";
desc = "Close";
}
# QOL
{
key = ">";
mode = "v";
silent = true;
action = ">gv";
desc = "Indent and keep selection";
}
{
key = "<";
mode = "v";
silent = true;
action = "<gv";
desc = "Dedent and keep selection";
}
# Move
{
key = "<C-h>";
mode = "n";
silent = true;
action = "<C-w>h";
desc = "Move to left window";
}
{
key = "<C-j>";
mode = "n";
silent = true;
action = "<C-w>j";
desc = "Move to bottom window";
}
{
key = "<C-k>";
mode = "n";
silent = true;
action = "<C-w>k";
desc = "Move to top window";
}
{
key = "<C-l>";
mode = "n";
silent = true;
action = "<C-w>l";
desc = "Move to right window";
}
# Save
{
key = "<C-s>";
mode = ["n" "i" "v"];
silent = true;
action = "<cmd>w<cr>";
desc = "Save file";
}
# Deactivate "esc"
{
key = "<Esc>";
mode = ["n" "i" "v"];
silent = true;
action = "<Nop>";
desc = "Disable Escape";
}
];
};
}
+130
View File
@@ -0,0 +1,130 @@
{
lib,
pkgs,
...
}: {
programs.nvf.settings.vim = {
diagnostics = {
enable = true;
config = {
signs = {
text = {
"vim.diagnostic.severity.Error" = " ";
"vim.diagnostic.severity.Warn" = " ";
"vim.diagnostic.severity.Hint" = " ";
"vim.diagnostic.severity.Info" = " ";
};
};
underline = true;
update_in_insert = true;
virtual_text = {
format =
lib.generators.mkLuaInline
/*
lua
*/
''
function(diagnostic)
return string.format("%s", diagnostic.message)
--return string.format("%s (%s)", diagnostic.message, diagnostic.source)
end
'';
};
};
nvim-lint = {
enable = true;
};
};
syntaxHighlighting = true;
treesitter = {
enable = true;
autotagHtml = true;
context.enable = true;
highlight.enable = true;
grammars = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
typescript # in language settings only tsx gets enabled, not typescript
];
};
lsp = {
enable = true;
presets = {
tailwindcss-language-server = {
enable = true;
};
};
trouble.enable = true;
lspSignature.enable = true;
lspconfig.enable = true;
formatOnSave = true;
inlayHints.enable = true;
null-ls.enable = true;
servers.nixd.settings.nil.nix.autoArchive = true;
otter-nvim = {
enable = true;
setupOpts = {
buffers.set_filetype = true;
lsp = {
diagnostic_update_event = [
"BufWritePost"
"InsertLeave"
];
};
};
};
lspkind.enable = true;
lspsaga = {
enable = true;
setupOpts = {
ui = {
code_action = "";
};
lightbulb = {
sign = false;
virtual_text = true;
};
breadcrumbs.enable = false;
};
};
};
languages = {
enableDAP = true;
enableExtraDiagnostics = true;
enableFormat = true;
enableTreesitter = true;
python = {
enable = true;
lsp = {
enable = true;
servers = ["pyright"];
};
};
astro.enable = true;
go.enable = true;
markdown = {
enable = true;
format.type = ["prettierd"];
extensions = {
markview-nvim = {
enable = true;
};
};
extraDiagnostics.enable = true;
};
typescript = {
enable = true;
extensions.ts-error-translator.enable = true;
};
css.enable = true;
svelte.enable = true;
html.enable = true;
bash.enable = true;
nix.enable = true;
};
formatter = {
conform-nvim = {
enable = true;
};
};
};
}
+13
View File
@@ -0,0 +1,13 @@
{
programs.nvf.settings.vim.mini = {
starter.enable = true;
comment.enable = true;
# cursorword.enable = true;
icons.enable = true;
indentscope.enable = true;
notify.enable = true;
pairs.enable = true;
diff.enable = true;
git.enable = true;
};
}
+53
View File
@@ -0,0 +1,53 @@
{lib, ...}: {
programs.nvf.settings.vim = {
viAlias = false;
vimAlias = true;
withNodeJs = true;
# syntaxHighlighting = true;
options = {
autoindent = true;
smartindent = true;
shiftwidth = 2;
foldlevel = 99;
foldcolumn = "auto:1";
mousescroll = "ver:1,hor:1";
mousemoveevent = true;
fillchars = "eob:,fold: ,foldopen:,foldsep:,foldclose:";
signcolumn = "yes";
tabstop = 2;
softtabstop = 2;
wrap = false;
};
globals = {
navic_silence = true; # navic tries to attach multiple LSPs and fails
suda_smart_edit = 1; # use super user write automatically
neovide_scale_factor = 0.7;
neovide_cursor_animation_length = 0.1;
neovide_cursor_short_animation_length = 0;
};
clipboard = {
enable = true;
registers = "unnamedplus";
providers.wl-copy.enable = true;
};
luaConfigRC.osc52-clipboard = ''
vim.g.clipboard = {
name = 'OSC 52',
copy = {
['+'] = require('vim.ui.clipboard.osc52').copy '+',
['*'] = require('vim.ui.clipboard.osc52').copy '*',
},
paste = {
['+'] = require('vim.ui.clipboard.osc52').paste '+',
['*'] = require('vim.ui.clipboard.osc52').paste '*',
},
}
'';
theme = {
enable = true;
name = lib.mkForce "catppuccin";
style = lib.mkForce "mocha";
transparent = lib.mkForce true;
};
};
}
+257
View File
@@ -0,0 +1,257 @@
{
programs.nvf.settings.vim = {
utility = {
oil-nvim.enable = true;
snacks-nvim = {
setupOpts = {
picker.enabled = true;
explorer.enabled = true;
};
};
};
keymaps = [
# Top Pickers & Explorer
{
key = "<leader> ";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.smart()<cr>";
desc = "Smart Find Files";
}
{
key = "<leader>,";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.buffers()<cr>";
desc = "Buffers";
}
{
key = "<leader>/";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep()<cr>";
desc = "Grep";
}
{
key = "<leader>:";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.command_history()<cr>";
desc = "Command History";
}
{
key = "<leader>e";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.explorer()<cr>";
desc = "File Explorer";
}
{
key = "-";
mode = "n";
silent = true;
action = "<cmd>Oil<cr>";
desc = "Oil";
}
# Find
{
key = "<leader>fb";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.buffers()<cr>";
desc = "Buffers";
}
{
key = "<leader>fc";
mode = "n";
silent = true;
action = ''
<cmd>lua Snacks.picker.files({ cwd = vim.fn.stdpath("config") })<cr>'';
desc = "Find Config File";
}
{
key = "<leader>ff";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.files()<cr>";
desc = "Find Files";
}
{
key = "<leader>fg";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_files()<cr>";
desc = "Find Git Files";
}
{
key = "<leader>fp";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.projects()<cr>";
desc = "Projects";
}
{
key = "<leader>fr";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.recent()<cr>";
desc = "Recent";
}
{
key = "<leader>fn";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.notifications()<cr>";
desc = "Notification History";
}
{
key = "<leader>fe";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.icons()<cr>";
desc = "Emoji";
}
# Git
{
key = "<leader>gb";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_branches()<cr>";
desc = "Git Branches";
}
{
key = "<leader>gL";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_log()<cr>";
desc = "Git Log Line";
}
{
key = "<leader>gs";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_status()<cr>";
desc = "Git Status";
}
{
key = "<leader>gS";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_stash()<cr>";
desc = "Git Stash";
}
{
key = "<leader>gd";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_diff()<cr>";
desc = "Git Diff (Hunks)";
}
{
key = "<leader>gf";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.git_log_file()<cr>";
desc = "Git Log File";
}
# Grep
{
key = "<leader>sb";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lines()<cr>";
desc = "Buffer Lines";
}
{
key = "<leader>st";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.todo_comments()<cr>";
desc = "Todos";
}
{
key = "<leader>sB";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep_buffers()<cr>";
desc = "Grep Open Buffers";
}
{
key = "<leader>sg";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep()<cr>";
desc = "Grep";
}
{
key = "<leader>sw";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.grep_word()<cr>";
desc = "Visual selection or word";
}
{
key = "<leader>sr";
mode = "n";
silent = true;
action = "<cmd>nohlsearch<cr>";
desc = "Reset search";
}
# LSP
{
key = "gd";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_definitions()<cr>";
desc = "Goto Definition";
}
{
key = "gD";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_declarations()<cr>";
desc = "Goto Declaration";
}
{
key = "gr";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_references()<cr>";
desc = "References";
nowait = true;
}
{
key = "gI";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_implementations()<cr>";
desc = "Goto Implementation";
}
{
key = "gy";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_type_definitions()<cr>";
desc = "Goto Type Definition";
}
{
key = "<leader>ss";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_symbols()<cr>";
desc = "LSP Symbols";
}
{
key = "<leader>sS";
mode = "n";
silent = true;
action = "<cmd>lua Snacks.picker.lsp_workspace_symbols()<cr>";
desc = "LSP Workspace Symbols";
}
];
};
}
+26
View File
@@ -0,0 +1,26 @@
{pkgs, ...}: {
home.packages = with pkgs; [
imagemagick
tree-sitter
ghostscript
tectonic
mermaid-cli
];
programs.nvf.settings.vim.utility.snacks-nvim = {
enable = true;
setupOpts = {
image = {
enabled = true;
doc = {
inline = false;
float = true;
};
};
quickfile.enabled = true;
statuscolumn.enabled = true;
zen.enabled = true;
bufdelete.enabled = true;
gitsigns.enabled = true;
};
};
}
+52
View File
@@ -0,0 +1,52 @@
{pkgs, ...}: {
programs.nvf.settings.vim = {
undoFile.enable = true;
utility = {
motion.flash-nvim.enable = true;
outline.aerial-nvim.enable = true;
};
tabline.nvimBufferline.enable = true;
notes.todo-comments.enable = true;
assistant.copilot = {
enable = true;
cmp.enable = true;
};
statusline.lualine.enable = true;
autocomplete = {
nvim-cmp = {
enable = true;
sources = {
buffer = "[Buffer]";
path = "[Path]";
};
sourcePlugins = [
pkgs.vimPlugins.cmp-cmdline
];
};
};
snippets.luasnip.enable = true;
ui = {
noice.enable = true;
colorizer.enable = true;
};
git = {
enable = true;
gitsigns.enable = true;
};
terminal.toggleterm = {
enable = true;
lazygit = {
enable = true;
mappings.open = "<leader>gl";
};
};
visuals = {
rainbow-delimiters.enable = true;
nvim-scrollbar = {
enable = false;
};
};
};
}
-12
View File
@@ -1,12 +0,0 @@
{
programs.nixvim = {
enable = true;
colorschemes.catppuccin = {
enable = true;
settings = {
transparent_background = true;
flavour = "mocha";
};
};
};
}
-17
View File
@@ -1,17 +0,0 @@
{ inputs, ... }: {
imports = [
inputs.nixvim.homeManagerModules.nixvim
./plugins/cmp.nix
./plugins/dashboard.nix
./plugins/lsp.nix
./plugins/markdown.nix
./plugins/tree.nix
./plugins/ui.nix
./plugins/utils.nix
./plugins/zen-mode.nix
./options.nix
./colorscheme.nix
./keymaps.nix
];
}
-24
View File
@@ -1,24 +0,0 @@
{
programs.nixvim.keymaps = [
{
key = "<leader>fm";
action = "<cmd>lua vim.lsp.buf.format()<cr>";
options.desc = "LSP Format";
}
{
key = "<leader>w";
action = "<cmd>set wrap!<cr>";
options.desc = "Toggle word wrapping";
}
{
key = "<leader>W";
action = "<cmd>set linebreak!<cr>";
options.desc = "Toggle linebreak";
}
{
key = "<leader>z";
action = "<cmd>ZenMode<cr>";
options.desc = "ZenMode";
}
];
}
-37
View File
@@ -1,37 +0,0 @@
{
programs.nixvim.globals.mapleader = " ";
programs.nixvim.opts = {
updatetime = 50; # Faster completion
number = true;
relativenumber = true;
autoindent = true;
clipboard = "unnamed,unnamedplus";
expandtab = true;
tabstop = 2;
softtabstop = 2;
shiftwidth = 2;
smartindent = true;
breakindent = true;
ignorecase = true;
incsearch = true;
hlsearch = true;
smartcase = true;
wildmode = "list:longest";
completeopt = [ "menuone" "noselect" ];
signcolumn = "yes";
cursorline = false;
scrolloff = 8;
mouse = "a";
wrap = false;
swapfile = false;
undofile = true;
conceallevel = 3;
};
}
-113
View File
@@ -1,113 +0,0 @@
{
programs.nixvim.plugins = {
luasnip.enable = true;
cmp-buffer = { enable = true; };
cmp-emoji = { enable = true; };
cmp-nvim-lsp = { enable = true; };
cmp-path = { enable = true; };
cmp_luasnip = { enable = true; };
cmp = {
enable = true;
settings = {
snippet.expand =
"function(args) require('luasnip').lsp_expand(args.body) end";
sources = [
{ name = "nvim_lsp"; }
{ name = "luasnip"; }
{ name = "buffer"; }
{ name = "nvim_lua"; }
{ name = "path"; }
];
formatting = {
fields = [ "abbr" "kind" "menu" ];
format =
# lua
''
function(_, item)
local icons = {
Namespace = "󰌗",
Text = "󰉿",
Method = "󰆧",
Function = "󰆧",
Constructor = "",
Field = "󰜢",
Variable = "󰀫",
Class = "󰠱",
Interface = "",
Module = "",
Property = "󰜢",
Unit = "󰑭",
Value = "󰎠",
Enum = "",
Keyword = "󰌋",
Snippet = "",
Color = "󰏘",
File = "󰈚",
Reference = "󰈇",
Folder = "󰉋",
EnumMember = "",
Constant = "󰏿",
Struct = "󰙅",
Event = "",
Operator = "󰆕",
TypeParameter = "󰊄",
Table = "",
Object = "󰅩",
Tag = "",
Array = "[]",
Boolean = "",
Number = "",
Null = "󰟢",
String = "󰉿",
Calendar = "",
Watch = "󰥔",
Package = "",
Copilot = "",
Codeium = "",
TabNine = "",
}
local icon = icons[item.kind] or ""
item.kind = string.format("%s %s", icon, item.kind or "")
return item
end
'';
};
window = {
completion = {
winhighlight =
"FloatBorder:CmpBorder,Normal:CmpPmenu,Search:PmenuSel";
scrollbar = true;
sidePadding = 0;
border = [ "" "" "" "" "" "" "" "" ];
};
documentation = {
border = [ "" "" "" "" "" "" "" "" ];
winhighlight =
"FloatBorder:CmpBorder,Normal:CmpPmenu,Search:PmenuSel";
};
};
mapping = {
"<C-n>" = "cmp.mapping.select_next_item()";
"<C-p>" = "cmp.mapping.select_prev_item()";
"<Down>" = "cmp.mapping.select_next_item()";
"<Up>" = "cmp.mapping.select_prev_item()";
"<C-j>" = "cmp.mapping.select_next_item()";
"<C-k>" = "cmp.mapping.select_prev_item()";
"<C-d>" = "cmp.mapping.scroll_docs(-4)";
"<C-f>" = "cmp.mapping.scroll_docs(4)";
"<C-Space>" = "cmp.mapping.complete()";
"<C-e>" = "cmp.mapping.close()";
"<CR>" =
"cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true })";
};
};
};
};
}
-148
View File
@@ -1,148 +0,0 @@
{ config, ... }: {
programs.nixvim.highlight = {
AlphaHeaderColor.fg = "#${config.var.theme.colors.accent}";
AlphaTextColor.fg = "#${config.var.theme.colors.fg}";
AlphaShortcutColor.fg = "#${config.var.theme.colors.fgalt}";
};
programs.nixvim.plugins.alpha = {
enable = true;
layout = [
{
type = "padding";
val = 4;
}
{
type = "text";
opts = {
position = "center";
hl = "AlphaHeaderColor";
};
val = [
" "
" "
" "
" "
" "
" "
" "
" "
" "
];
}
{
type = "padding";
val = 4;
}
{
type = "group";
val = [
{
type = "button";
val = "󰭎 Find file";
on_press.__raw = "function() vim.cmd[[Telescope find_files]] end";
opts = {
shortcut = "nf";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "AlphaShortcutColor";
hl = "AlphaTextColor";
};
}
{
type = "button";
val = " New file";
on_press.__raw = "function() vim.cmd[[ene]] end";
opts = {
shortcut = "nn";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "AlphaShortcutColor";
hl = "AlphaTextColor";
};
}
{
type = "button";
val = " NixOs Config";
on_press.__raw =
"function() vim.cmd[[Neotree ${config.var.configDirectory}]] end";
opts = {
shortcut = "nc";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "AlphaShortcutColor";
hl = "AlphaTextColor";
};
}
{
type = "button";
val = " Keybindings";
on_press.__raw =
"function() vim.cmd[[e ${config.var.configDirectory}/docs/KEYBINDINGS.md]] end";
opts = {
shortcut = "nc";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "AlphaShortcutColor";
hl = "AlphaTextColor";
};
}
{
type = "button";
val = " Recently used";
on_press.__raw = "function() vim.cmd[[Telescope oldfiles]] end";
opts = {
shortcut = "no";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "AlphaShortcutColor";
hl = "AlphaTextColor";
};
}
{
type = "button";
val = "󰱽 Find text";
on_press.__raw = "function() vim.cmd[[Telescope live_grep]] end";
opts = {
shortcut = "nt";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "AlphaShortcutColor";
hl = "AlphaTextColor";
};
}
{
type = "button";
val = "󰩈 Quit Neovim";
on_press.__raw = "function() vim.cmd[[qa]] end";
opts = {
shortcut = "nq";
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "AlphaShortcutColor";
hl = "AlphaTextColor";
};
}
];
}
];
};
}
-50
View File
@@ -1,50 +0,0 @@
{
programs.nixvim.plugins = {
lsp-format.enable = true;
lsp = {
enable = true;
servers = {
bashls.enable = true;
clangd.enable = true;
gopls.enable = true;
nixd.enable = true;
tailwindcss.enable = true;
html.enable = true;
svelte.enable = true;
marksman.enable = true;
ltex = {
enable = false;
settings = {
enabled = false;
language = "en";
};
};
};
keymaps.lspBuf = {
"gd" = "definition";
"gD" = "references";
"gt" = "type_definition";
"gi" = "implementation";
"K" = "hover";
};
};
none-ls = {
enable = true;
sources = {
diagnostics = {
golangci_lint.enable = true;
statix.enable = true;
};
formatting = {
gofmt.enable = true;
goimports.enable = true;
nixfmt.enable = true;
markdownlint.enable = true;
tidy.enable = true;
shellharden.enable = true;
shfmt.enable = true;
};
};
};
};
}
-133
View File
@@ -1,133 +0,0 @@
{
programs.nixvim.plugins = {
mkdnflow = {
enable = true;
mappings = {
# Main
MkdnEnter = {
key = "<CR>";
modes = [ "n" "v" "i" ];
};
# Links
MkdnCreateLink = false;
MkdnCreateLinkFromClipboard = {
key = "<leader>lc";
modes = [ "n" "v" ];
};
MkdnDestroyLink = {
key = "<leader>dl";
modes = "n";
};
MkdnFollowLink = false;
MkdnNextLink = {
key = "<Tab>";
modes = "n";
};
MkdnYankAnchorLink = {
key = "ya";
modes = "n";
};
MkdnYankFileAnchorLink = {
key = "yfa";
modes = "n";
};
MkdnPrevLink = {
key = "<S-Tab>";
modes = "n";
};
MkdnDecreaseHeading = {
key = "-";
modes = "n";
};
MkdnExtendList = false;
MkdnFoldSection = {
key = "<leader>ff";
modes = "n";
};
MkdnUnfoldSection = {
key = "<leader>fu";
modes = "n";
};
MkdnGoBack = {
key = "<BS>";
modes = "n";
};
MkdnGoForward = {
key = "<Del>";
modes = "n";
};
MkdnIncreaseHeading = {
key = "+";
modes = "n";
};
MkdnMoveSource = {
key = "<F2>";
modes = "n";
};
MkdnNewListItem = false;
MkdnNewListItemAboveInsert = {
key = "O";
modes = "n";
};
MkdnNewListItemBelowInsert = {
key = "o";
modes = "n";
};
MkdnNextHeading = {
key = "]]";
modes = "n";
};
MkdnPrevHeading = {
key = "[[";
modes = "n";
};
MkdnSTab = false;
MkdnTab = false;
MkdnTableFormat = {
key = "<leader>ft";
modes = "n";
};
MkdnTableNewColAfter = {
key = "<leader>ic";
modes = "n";
};
MkdnTableNewColBefore = {
key = "<leader>iC";
modes = "n";
};
MkdnTableNewRowAbove = {
key = "<leader>iR";
modes = "n";
};
MkdnTableNewRowBelow = {
key = "<leader>ir";
modes = "n";
};
MkdnTableNextCell = {
key = "<S-Tab>";
modes = "i";
};
MkdnTableNextRow = false;
MkdnTablePrevCell = {
key = "<M-Tab>";
modes = "i";
};
MkdnTablePrevRow = {
key = "<M-CR>";
modes = "i";
};
MkdnToggleToDo = {
key = "<C-Space>";
modes = [ "n" "v" ];
};
MkdnUpdateNumbering = {
key = "<leader>nn";
modes = "n";
};
};
};
};
}
-61
View File
@@ -1,61 +0,0 @@
{
programs.nixvim = {
plugins = {
neo-tree.enable = true;
oil = {
enable = true;
settings = {
default_file_explorer = false;
skip_confirm_for_simple_edits = true;
win_options = {
concealcursor = "ncv";
conceallevel = 3;
cursorcolumn = false;
foldcolumn = "0";
list = false;
signcolumn = "no";
spell = false;
wrap = false;
};
float = { padding = 5; };
keymaps = {
"-" = "actions.parent";
"b" = "actions.parent";
"<C-c>" = "actions.close";
"<C-h>" = "actions.select_split";
"<C-l>" = "actions.refresh";
"<C-p>" = "actions.preview";
"<C-s>" = "actions.select_vsplit";
"<C-t>" = "actions.select_tab";
"<CR>" = "actions.select";
_ = "actions.open_cwd";
"`" = "actions.cd";
"g." = "actions.toggle_hidden";
"g?" = "actions.show_help";
"g\\" = "actions.toggle_trash";
gs = "actions.change_sort";
gx = "actions.open_external";
"~" = "actions.tcd";
};
};
};
};
keymaps = [
{
key = "-";
action = "<cmd>Oil<cr>";
options.desc = "Oil";
}
{
key = "<leader>e";
action = "<cmd>Oil --float<cr>";
options.desc = "Oil";
}
{
key = "<leader>E";
action = "<cmd>Neotree toggle<cr>";
options.desc = "Neotree";
}
];
};
}
-31
View File
@@ -1,31 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs; [ ctags ];
programs.nixvim = {
plugins = {
lualine.enable = true;
noice.enable = true;
gitsigns = {
enable = true;
settings.current_line_blame = false;
};
bufferline.enable = true;
trouble.enable = true;
which-key.enable = true;
headlines = {
enable = true;
settings = {
markdown = {
codeblock_highlight = false;
};
};
};
nvim-colorizer.enable = true;
# tagbar.enable = true;
};
keymaps = [{
key = "<leader>t";
action = "<cmd>TroubleToggle<cr>";
options.desc = "Trouble";
}];
};
}
-51
View File
@@ -1,51 +0,0 @@
{ config, ... }: {
programs.nixvim = {
highlightOverride = {
FloatBorder.fg = "#${config.var.theme.colors.accent}";
};
plugins = {
copilot-vim.enable = true;
flash.enable = true;
# image.enable = true;
tmux-navigator.enable = true;
comment.enable = true;
nvim-autopairs.enable = true;
friendly-snippets.enable = true;
telescope = {
enable = true;
keymaps = {
"<leader>fg" = "live_grep";
"<leader> " = "find_files";
};
extensions.fzf-native = { enable = true; };
};
treesitter = {
enable = true;
nixGrammars = true;
settings = {
indent.enable = true;
highlight.enable = true;
};
};
treesitter-context.enable = true;
};
keymaps = [
{
key = "<C-h>";
action = "<cmd>TmuxNavigateLeft<cr>";
}
{
key = "<C-j>";
action = "<cmd>TmuxNavigateDown<cr>";
}
{
key = "<C-k>";
action = "<cmd>TmuxNavigateUp<cr>";
}
{
key = "<C-l>";
action = "<cmd>TmuxNavigateRight<cr>";
}
];
};
}
-31
View File
@@ -1,31 +0,0 @@
{
programs.nixvim.plugins.zen-mode = {
enable = true;
settings = {
on_open = ''
function()
require("gitsigns.actions").toggle_current_line_blame()
vim.opt.relativenumber = false
vim.opt.signcolumn = "no"
vim.opt.wrap = true
vim.opt.linebreak = true
end
'';
plugins = {
gitsigns = { enabled = true; };
options = {
enabled = true;
ruler = false;
showcmd = false;
};
tmux = { enabled = true; };
};
window = {
backdrop = 0.95;
height = 1;
options = { signcolumn = "no"; };
width = 0.9;
};
};
};
}
+5
View File
@@ -0,0 +1,5 @@
{
wayland.windowManager.hyprland.settings.exec-once = [
"protonvpn-app --start-minimized &"
];
}
+35
View File
@@ -0,0 +1,35 @@
{pkgs, ...}: {
home.packages = with pkgs; [
proton-vpn
proton-pass
proton-authenticator
];
# Fix Proton Authenticator desktop entry
xdg.desktopEntries = {
"Proton Authenticator" = {
name = "Proton Authenticator";
exec = "env WEBKIT_DISABLE_COMPOSITING_MODE=1 ${pkgs.proton-authenticator}/bin/proton-authenticator";
icon = "proton-authenticator";
type = "Application";
categories = ["Utility"];
terminal = false;
};
"Proton Calendar" = {
name = "Proton Calendar";
exec = "${pkgs.qutebrowser}/bin/qutebrowser \"https://calendar.proton.me\"";
icon = "proton-calendar";
type = "Application";
categories = ["Utility"];
terminal = false;
};
"Proton Mail" = {
name = "Proton Mail";
exec = "${pkgs.qutebrowser}/bin/qutebrowser \"https://mail.proton.me/\"";
icon = "proton-mail";
type = "Application";
categories = ["Utility"];
terminal = false;
};
};
}
+466
View File
@@ -0,0 +1,466 @@
{
config,
lib,
pkgs,
...
}: let
bookmarkList = [
{
name = "Proton Mail";
url = "https://mail.proton.me";
}
{
name = "Proton Drive";
url = "https://drive.proton.me";
}
{
name = "Proton Lumo";
url = "https://lumo.proton.me";
}
{
name = "Proton Calendar";
url = "https://calendar.proton.me";
}
{
name = "Tools";
bookmarks = [
{
name = "tldr";
url = "https://tldr.inbrowser.app/";
}
{
name = "Excalidraw";
url = "https://excalidraw.com";
}
{
name = "Cobalt (downloader)";
url = "https://cobalt.meowing.de";
}
{
name = "Mazanoke (image)";
url = "https://mazanoke.hadi.icu";
}
{
name = "Stirling PDF";
url = "https://pdf.hadi.icu";
}
{
name = "Vert";
url = "https://vert.sh";
}
{
name = "Markdown to PDF";
url = "https://md2file.com";
}
{
name = "Image to Vector";
url = "https://www.vectorcascade.com/";
}
{
name = "PrivateBin";
url = "https://privatebin.net";
}
];
}
{
name = "Social";
bookmarks = [
{
name = "Bluesky";
url = "https://bsky.app";
}
{
name = "Reddit";
url = "https://reddit.com";
}
{
name = "Youtube";
url = "https://youtube.com";
}
{
name = "Instagram";
url = "https://instagram.com";
}
{
name = "Github";
url = "https://github.com";
}
{
name = "Discord";
url = "https://discord.com/channels/@me/";
}
];
}
{
name = "Other";
bookmarks = [
{
name = "Startpage Config";
url = "https://www.startpage.com/do/mypage.pl?prfe=45d331deb05471d659dba933e7400df51d952bb103da6f6125c0e769a6be1d65610456a479f495ceeee7e97311cf227d7c1bb198de0ceeb193d8cddf9c455c19a409cc35c3e3f542ee27bd7cecd3";
}
{
name = "Hyprland Wiki";
url = "https://wiki.hypr.land";
}
{
name = "MyNixOS";
url = "https://mynixos.com";
}
{
name = "Nixpkgs";
url = "https://github.com/NixOS/nixpkgs";
}
{
name = "Claude";
url = "https://claude.ai";
}
{
name = "Gemini";
url = "https://gemini.google.com";
}
{
name = "Medium";
url = "https://medium.com";
}
{
name = "Maps";
url = "https://maps.apple.com";
}
{
name = "Amazon";
url = "https://amazon.fr";
}
];
}
{
name = "Infosec";
bookmarks = [
{
name = "Nix 4 Cyber";
url = "https://n4c.hadi.icu";
}
{
name = "Cyberchef";
url = "https://cyberchef.hadi.icu";
}
{
name = "TryHackMe";
url = "https://tryhackme.com";
}
{
name = "Root-Me";
url = "https://root-me.org";
}
{
name = "Exploit-DB";
url = "https://exploit-db.com";
}
{
name = "Crack Station";
url = "https://crackstation.net";
}
{
name = "Osint Tracker";
url = "https://app.osintracker.com";
}
];
}
];
c = config.lib.stylix.colors;
stripProtocol = url:
lib.removePrefix "https://" (lib.removePrefix "http://" url);
mkCard = item: ''
<a href="${item.url}" class="card">
<div class="favicon-wrapper">
<span class="favicon-fallback">${builtins.substring 0 1 item.name}</span>
</div>
<div class="card-info">
<span class="card-name">${item.name}</span>
<span class="card-url">${stripProtocol item.url}</span>
</div>
</a>'';
# Group consecutive root items so they share the same .cards grid
grouped = let
step = acc: item:
if item ? url
then acc // {pending = acc.pending ++ [item];}
else {
groups =
acc.groups
++ lib.optional (acc.pending != []) {
isRoot = true;
items = acc.pending;
}
++ [
{
isRoot = false;
inherit item;
}
];
pending = [];
};
result =
lib.foldl' step {
groups = [];
pending = [];
}
bookmarkList;
in
result.groups
++ lib.optional (result.pending != []) {
isRoot = true;
items = result.pending;
};
mkSection = group:
if group.isRoot
then ''
<div class="folder-section">
<div class="cards">
${lib.concatMapStrings mkCard group.items}
</div>
</div>
''
else ''
<div class="folder-section">
<h2 class="folder-title">${group.item.name}</h2>
<div class="cards">
${lib.concatMapStrings mkCard group.item.bookmarks}
</div>
</div>
'';
publicBookmarks =
pkgs.writeText "qutebrowser-public-bookmarks"
(lib.concatMapStrings (
item:
if item ? url
then "${item.url} ${item.name}\n"
else lib.concatMapStrings (b: "${b.url} ${item.name}/${b.name}\n") item.bookmarks
)
bookmarkList);
inherit (config.qutebrowser) privateBookmarksPath;
in {
options.qutebrowser.privateBookmarksPath = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = "Path to a file containing extra (private) bookmarks to append.";
};
config = {
# Fully static HTML — order is preserved, no dependency on qutebrowser's Jinja rendering
xdg.dataFile."qutebrowser/bookmarks.html".text = ''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bookmarks</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
background-color: #${c.base00};
color: #${c.base05};
font-family: 'Source Sans Pro', sans-serif;
font-size: 14px;
min-height: 100vh;
padding: 2.5rem 2rem;
}
.header {
max-width: 1100px;
margin: 0 auto 2rem;
display: flex;
align-items: center;
gap: 1.5rem;
}
.page-title {
font-size: 1.3rem;
font-weight: 700;
color: #${c.base0D};
letter-spacing: -0.01em;
flex-shrink: 0;
}
.search-bar {
flex: 1;
background-color: #${c.base01};
border: 1px solid #${c.base02};
border-radius: 8px;
color: #${c.base05};
font-family: 'Source Sans Pro', sans-serif;
font-size: 0.9rem;
padding: 0.5rem 0.9rem;
outline: none;
transition: border-color 0.15s ease;
}
.search-bar::placeholder { color: #${c.base03}; }
.search-bar:focus { border-color: #${c.base0D}; }
.bookmarks-container {
max-width: 1100px;
margin: 0 auto;
display: flex;
flex-direction: column;
gap: 1.75rem;
}
.folder-title {
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
color: #${c.base03};
margin-bottom: 0.6rem;
padding-left: 0.2rem;
}
.cards {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: 0.4rem;
}
.card {
display: flex;
align-items: center;
gap: 0.7rem;
padding: 0.6rem 0.8rem;
background-color: #${c.base01};
border: 1px solid #${c.base02};
border-radius: 10px;
text-decoration: none;
transition: background-color 0.12s ease, border-color 0.12s ease;
overflow: hidden;
}
.card:hover {
background-color: #${c.base02};
border-color: #${c.base03};
}
.favicon-wrapper { position: relative; width: 18px; height: 18px; flex-shrink: 0; }
.favicon-fallback {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
background-color: #${c.base02};
border-radius: 4px;
color: #${c.base04};
font-size: 10px;
font-weight: 700;
text-transform: uppercase;
user-select: none;
}
.card-info {
display: flex;
flex-direction: column;
gap: 0.05rem;
overflow: hidden;
flex: 1;
}
.card-name {
color: #${c.base05};
font-size: 0.86rem;
font-weight: 500;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
transition: color 0.12s ease;
}
.card:hover .card-name { color: #${c.base0A}; }
.card-url {
color: #${c.base03};
font-family: 'Maple Mono NF', monospace;
font-size: 0.7rem;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.no-results {
color: #${c.base03};
font-size: 0.9rem;
padding: 0.5rem 0.2rem;
display: none;
}
</style>
</head>
<body>
<div class="header">
<h1 class="page-title">Bookmarks</h1>
<input id="search" class="search-bar" type="text" placeholder="Search" autocomplete="off" spellcheck="false">
</div>
<div class="bookmarks-container">
<p id="no-results" class="no-results">No results</p>
${lib.concatMapStrings mkSection grouped}
</div>
<script>
window.addEventListener('DOMContentLoaded', function () {
const input = document.getElementById('search');
const noResults = document.getElementById('no-results');
input.focus();
input.addEventListener('input', function () {
const query = this.value.toLowerCase().trim();
let anyVisible = false;
document.querySelectorAll('.folder-section').forEach(function (section) {
let sectionVisible = false;
section.querySelectorAll('.card').forEach(function (card) {
const name = card.querySelector('.card-name').textContent.toLowerCase();
const url = card.querySelector('.card-url').textContent.toLowerCase();
const match = !query || name.includes(query) || url.includes(query);
card.style.display = match ? ''' : 'none';
if (match) { sectionVisible = true; anyVisible = true; }
});
section.style.display = sectionVisible ? ''' : 'none';
});
noResults.style.display = anyVisible || !query ? 'none' : 'block';
});
input.addEventListener('keydown', function (e) {
if (e.key === 'Enter') {
const first = document.querySelector('.card:not([style*="none"])');
if (first) {
location.href = first.href;
} else {
const q = encodeURIComponent(this.value.trim());
if (q) location.href = 'https://www.startpage.com/sp/search?q=' + q;
}
}
if (e.key === 'Escape') {
this.value = ''';
this.dispatchEvent(new Event('input'));
}
});
});
</script>
</body>
</html>
'';
home.activation.qutebrowserBookmarks = lib.hm.dag.entryAfter ["setupSecrets" "writeBoundary"] ''
mkdir -p ${config.home.homeDirectory}/.config/qutebrowser/bookmarks
cat ${publicBookmarks} ${lib.optionalString (privateBookmarksPath != null) ''"${privateBookmarksPath}"''} \
> ${config.home.homeDirectory}/.config/qutebrowser/bookmarks/urls
'';
};
}
+30 -335
View File
@@ -1,342 +1,37 @@
{ pkgs, config, ... }: {...}: {
let
settings = ''
{
"config": {
"title" : "Welcome Home",
"openLinksInNewTab": false,
"locale": "fr-FR",
"colors": {
"primary": "#${config.var.theme.colors.accent}",
"background": "#${config.var.theme.colors.bg}",
"foreground": "#${config.var.theme.colors.fg}",
"muted": "#${config.var.theme.colors.c8}"
},
"folders": [
{
"name": "Bookmarks",
"links": [
{"title": "MyNixOs", "url": "https://mynixos.com", "icon": "󱄅"},
{"title": "Github", "url": "https://github.com", "icon": ""},
{"title": "Proton", "url": "https://mail.proton.me/u/0/inbox", "icon": ""},
{"title": "Cloudflare One", "url": "https://one.dash.cloudflare.com/", "icon": ""},
{"title": "Chat GPT", "url": "https://chat.openai.com/", "icon": "󰭹"},
{"title": "Nixvim", "url": "https://nix-community.github.io/nixvim/", "icon": ""},
{"title": "Hyprland Wiki", "url": "https://wiki.hyprland.org/", "icon": "󰖬"},
{"title": "Youtube", "url": "https://youtube.com", "icon": "󰗃"},
{"title": "Figma", "url": "https://figma.com", "icon": ""},
{"title": "Server", "url": "https://home.anotherhadi.com", "icon": ""}
]
},
{
"name": "Work",
"links": [
{"title": "Outlook", "url": "https://outlook.office.com/mail/", "icon": "󰴢"},
{"title": "Office", "url": "https://www.office.com/?auth=2", "icon": "󰏆"},
{"title": "Teams", "url": "https://teams.microsoft.com/_", "icon": "󰊻"}
]
}
]
}
}
'';
homepage = pkgs.buildNpmPackage {
pname = "homepage";
version = "0.0.0";
src = pkgs.fetchFromGitHub {
owner = "anotherhadi";
repo = "homepage";
rev = "b77d35ed3596eb451bd2ec78063d7cc6e73c773d";
hash = "sha256-j/40922kfAh6zqJ4IRYpr66YXNNYsxuXwZ0aiJFJea0=";
};
# npmDepsHash = lib.fakeHash;
npmDepsHash = "sha256-bG+CHTq2Rst3JMxsjAC81KhK+G7WwsTVD1eyP87g0z4=";
buildPhase = ''
npm install
cp ${
pkgs.writeText "src/routes/config.json" settings
} src/routes/config.json
npm run build
mkdir $out
mv build $out
'';
meta = {
description = "homepage";
homepage = "https://github.com/anotherhadi/homepage";
};
};
in {
imports = [ imports = [
./duckduckgo-colorscheme.nix ./bookmarks.nix
# ./userscripts.nix ./search.nix
./keybindings.nix
./settings.nix
./userscripts.nix
]; ];
home.sessionVariables = {
DEFAULT_BROWSER = "qutebrowser";
BROWSER = "qutebrowser";
};
xdg.mimeApps.defaultApplications = {
"text/html" = ["org.qutebrowser.qutebrowser.desktop"];
"text/xml" = ["org.qutebrowser.qutebrowser.desktop"];
"x-scheme-handler/http" = ["org.qutebrowser.qutebrowser.desktop"];
"x-scheme-handler/https" = ["org.qutebrowser.qutebrowser.desktop"];
"x-scheme-handler/unknown" = ["org.qutebrowser.qutebrowser.desktop"];
"x-scheme-handler/about" = ["org.qutebrowser.qutebrowser.desktop"];
"x-scheme-handler/qute" = ["org.qutebrowser.qutebrowser.desktop"];
};
xdg.desktopEntries.qutebrowser-private = {
name = "Qutebrowser (Temp session)";
genericName = "Web Browser";
exec = "qutebrowser --temp-basedir %U";
icon = "qutebrowser";
categories = ["Network" "WebBrowser"];
};
programs.qutebrowser = { programs.qutebrowser = {
enable = true; enable = true;
loadAutoconfig = true;
searchEngines = {
"DEFAULT" = "https://duckduckgo.com/?q={}&ia=web";
"d" = "https://duckduckgo.com/?q={}&ia=web";
"g" = "https://google.com/search?q={}";
"y" = "https://youtube.com/results?search_query={}";
"ya" = "https://yandex.com/search/?text={}";
"n" = "https://mynixos.com/search?q={}";
"nixo" = "https://search.nixos.org/options?channel=unstable&query={}";
"nixp" = "https://search.nixos.org/packages?channel=unstable&query={}";
"gt" = "https://github.com/search?q={}&type=repositories";
};
quickmarks = {
home = "${homepage}/build/index.html";
server = "https://home.anotherhadi.com";
jack = "https://home.anotherhadi.com";
mynixos = "https://mynixos.com";
github = "https://github.com";
outlook = "https://outlook.office.com/mail/";
office = "https://www.office.com/?auth=2";
teams = "https://teams.microsoft.com/_";
casa = "http://192.168.2.16:8081/#/";
proton = "https://mail.proton.me/u/0/inbox";
cloudflare-one = "https://one.dash.cloudflare.com/";
chatgpt = "https://chat.openai.com/";
nixvim = "https://nix-community.github.io/nixvim/";
hyprland = "https://wiki.hyprland.org/";
nerdfont = "https://www.nerdfonts.com/cheat-sheet";
youtube = "https://youtube.com/";
cloudflare = "https://dash.cloudflare.com/";
};
settings = {
url = {
default_page = "${homepage}/build/index.html";
start_pages = [ "${homepage}/build/index.html" ];
};
colors = {
tabs = {
odd.bg = "#${config.var.theme.colors.bg}";
odd.fg = "#${config.var.theme.colors.fg}";
even.bg = "#${config.var.theme.colors.bg}";
even.fg = "#${config.var.theme.colors.fg}";
selected = {
odd = {
bg = "#${config.var.theme.colors.accent}";
fg = "#${config.var.theme.colors.accentFg}";
};
even = {
bg = "#${config.var.theme.colors.accent}";
fg = "#${config.var.theme.colors.accentFg}";
};
};
indicator = {
error = "#${config.var.theme.colors.c1}";
start = "#${config.var.theme.colors.bgalt}";
stop = "#${config.var.theme.colors.bgalt}";
};
};
hints = {
bg = "#${config.var.theme.colors.bgalt}";
fg = "#${config.var.theme.colors.fgalt}";
match.fg = "#${config.var.theme.colors.bg}";
};
completion = {
category = {
bg = "#${config.var.theme.colors.bg}";
fg = "#${config.var.theme.colors.fg}";
border = {
top = "#${config.var.theme.colors.bg}";
bottom = "#${config.var.theme.colors.bg}";
};
};
odd.bg = "#${config.var.theme.colors.bg}";
even.bg = "#${config.var.theme.colors.bg}";
fg = [ "#FFFFFF" "#FFFFFF" "#FFFFFF" ];
match.fg = "#${config.var.theme.colors.accent}";
item.selected = {
bg = "#${config.var.theme.colors.accent}";
border.top = "#${config.var.theme.colors.accent}";
border.bottom = "#${config.var.theme.colors.accent}";
fg = "#${config.var.theme.colors.accentFg}";
match.fg = "#${config.var.theme.colors.accentFg}";
};
};
statusbar = {
normal.bg = "#${config.var.theme.colors.bg}";
normal.fg = "#${config.var.theme.colors.fg}";
private.bg = "#${config.var.theme.colors.bg}";
private.fg = "#${config.var.theme.colors.fg}";
insert.bg = "#${config.var.theme.colors.accent}";
insert.fg = "#${config.var.theme.colors.accentFg}";
command = {
bg = "#${config.var.theme.colors.bgalt}";
fg = "#${config.var.theme.colors.fgalt}";
private.bg = "#${config.var.theme.colors.bgalt}";
private.fg = "#${config.var.theme.colors.fgalt}";
};
};
messages = {
info = {
bg = "#${config.var.theme.colors.bgalt}";
fg = "#${config.var.theme.colors.fgalt}";
border = "#${config.var.theme.colors.bgalt}";
};
error = {
bg = "#${config.var.theme.colors.c1}";
fg = "#${config.var.theme.colors.fgalt}";
border = "#${config.var.theme.colors.c1}";
};
};
#webpage.darkmode.enabled = true; # Enable dark mode for all websites (Weird on images)
webpage.preferred_color_scheme =
"dark"; # Enable dark mode for websites that support it
};
statusbar.show = "in-mode";
fonts = { default_family = "${config.var.theme.font}"; };
completion = {
height = "30%";
open_categories = [ "history" ];
scrollbar = {
padding = 0;
width = 0;
};
show = "always";
shrink = true;
timestamp_format = "";
web_history.max_items = 7;
};
content = {
autoplay = false;
javascript.clipboard = "access";
javascript.enabled = true;
webgl = true;
pdfjs = true;
};
downloads = {
position = "bottom";
remove_finished = 0;
};
hints = {
border = "none";
radius = 1;
};
scrolling = {
bar = "never";
smooth = true;
};
tabs = {
show = "multiple";
last_close = "close";
mode_on_change = "restore";
close_mouse_button = "right";
};
zoom.default = "100%";
qt.force_software_rendering = "chromium";
};
keyBindings = {
normal = {
"gh" = "open ${homepage}/build/index.html";
"gs" = "open https://home.anotherhadi.com";
" p" = "tab-move -";
" n" = "tab-move +";
" w" = "tab-close";
" 1" = "tab-focus 1";
" 2" = "tab-focus 2";
" 3" = "tab-focus 3";
" 4" = "tab-focus 4";
" 5" = "tab-focus 5";
" 6" = "tab-focus 6";
" 7" = "tab-focus 7";
" 8" = "tab-focus 8";
" 9" = "tab-focus 9";
" 0" = "tab-focus 10";
"<Ctrl-w>" = "tab-close";
"<Ctrl-n>" = "open -w";
"<Ctrl-1>" = "tab-focus 1";
"<Ctrl-2>" = "tab-focus 2";
"<Ctrl-3>" = "tab-focus 3";
"<Ctrl-4>" = "tab-focus 4";
"<Ctrl-5>" = "tab-focus 5";
"<Ctrl-6>" = "tab-focus 6";
"<Ctrl-7>" = "tab-focus 7";
"<Ctrl-8>" = "tab-focus 8";
"<Ctrl-9>" = "tab-focus 9";
"<Ctrl-0>" = "tab-focus 10";
};
command = {
"<Ctrl-w>" = "tab-close";
"<Ctrl-n>" = "open -w";
"<Ctrl-1>" = "tab-focus 1";
"<Ctrl-2>" = "tab-focus 2";
"<Ctrl-3>" = "tab-focus 3";
"<Ctrl-4>" = "tab-focus 4";
"<Ctrl-5>" = "tab-focus 5";
"<Ctrl-6>" = "tab-focus 6";
"<Ctrl-7>" = "tab-focus 7";
"<Ctrl-8>" = "tab-focus 8";
"<Ctrl-9>" = "tab-focus 9";
"<Ctrl-0>" = "tab-focus 10";
};
insert = {
"<Ctrl-w>" = "tab-close";
"<Ctrl-n>" = "open -w";
"<Ctrl-1>" = "tab-focus 1";
"<Ctrl-2>" = "tab-focus 2";
"<Ctrl-3>" = "tab-focus 3";
"<Ctrl-4>" = "tab-focus 4";
"<Ctrl-5>" = "tab-focus 5";
"<Ctrl-6>" = "tab-focus 6";
"<Ctrl-7>" = "tab-focus 7";
"<Ctrl-8>" = "tab-focus 8";
"<Ctrl-9>" = "tab-focus 9";
"<Ctrl-0>" = "tab-focus 10";
};
};
extraConfig = ''
config.unbind("gm")
config.unbind("gd")
config.unbind("gb")
config.unbind("tl")
config.unbind("gt")
c.tabs.padding = {"bottom": 6, "left": 7, "right": 7, "top": 6}
c.statusbar.padding = {"bottom": 6, "left": 7, "right": 7, "top": 6}
config.load_autoconfig(True)
'';
}; };
} }
@@ -1,36 +0,0 @@
{ config, ... }: {
home.file.".duckduckgo-colorscheme.js".text = ''
// Go to DuckDuckGo settings page, open the console, paste the code and hit enter.
// based on https://ddg.codingcodax.dev/
// Cookies string for your theme
const cookie = '7=${config.var.theme.colors.bg}; j=${config.var.theme.colors.bg}; 9=${config.var.theme.colors.fg}; aa=${config.var.theme.colors.fgalt}; 8=${config.var.theme.colors.c7}; x=${config.var.theme.colors.accent}; 21=${config.var.theme.colors.bgalt};';
// Converts cookie string into formatted JSON
const cookieToJSON = (cookieRaw) => {
const cookieJson = {};
const items = cookieRaw.split(/[ ,]+/);
items.forEach((item) => {
const parts = item.split('=');
cookieJson[parts[0]] = parts[1];
});
return cookieJson;
};
// Iterates over JSON, and adds to browser cookie store
const setCookies = (cookieJson) => {
Object.keys(cookieJson).forEach((key) => {
document.cookie = `''${key}=''${cookieJson [ key ]}`;
});
};
alert('The Nixy theme will be applied.');
// Call set cookies, passing in formated cookie data
setCookies(cookieToJSON(cookie));
// All done, reload page for changes to take effect :)
location.reload();
'';
}
@@ -0,0 +1,826 @@
// ==UserScript==
// @name Don't track me Google
// @namespace Rob W
// @description Removes the annoying link-conversion at Google Search/maps/...
// @version 4.28
// @icon https://raw.githubusercontent.com/Rob--W/dont-track-me-google/master/icon48.png
// @supportURL https://github.com/Rob--W/dont-track-me-google/issues
// @license MIT
// @run-at document-start
// @match *://*.google.com/*
// @match *://*.google.ad/*
// @match *://*.google.ae/*
// @match *://*.google.com.af/*
// @match *://*.google.com.ag/*
// @match *://*.google.com.ai/*
// @match *://*.google.al/*
// @match *://*.google.am/*
// @match *://*.google.co.ao/*
// @match *://*.google.com.ar/*
// @match *://*.google.as/*
// @match *://*.google.at/*
// @match *://*.google.com.au/*
// @match *://*.google.az/*
// @match *://*.google.ba/*
// @match *://*.google.com.bd/*
// @match *://*.google.be/*
// @match *://*.google.bf/*
// @match *://*.google.bg/*
// @match *://*.google.com.bh/*
// @match *://*.google.bi/*
// @match *://*.google.bj/*
// @match *://*.google.com.bn/*
// @match *://*.google.com.bo/*
// @match *://*.google.com.br/*
// @match *://*.google.bs/*
// @match *://*.google.bt/*
// @match *://*.google.co.bw/*
// @match *://*.google.by/*
// @match *://*.google.com.bz/*
// @match *://*.google.ca/*
// @match *://*.google.cd/*
// @match *://*.google.cf/*
// @match *://*.google.cg/*
// @match *://*.google.ch/*
// @match *://*.google.ci/*
// @match *://*.google.co.ck/*
// @match *://*.google.cl/*
// @match *://*.google.cm/*
// @match *://*.google.cn/*
// @match *://*.google.com.co/*
// @match *://*.google.co.cr/*
// @match *://*.google.com.cu/*
// @match *://*.google.cv/*
// @match *://*.google.com.cy/*
// @match *://*.google.cz/*
// @match *://*.google.de/*
// @match *://*.google.dj/*
// @match *://*.google.dk/*
// @match *://*.google.dm/*
// @match *://*.google.com.do/*
// @match *://*.google.dz/*
// @match *://*.google.com.ec/*
// @match *://*.google.ee/*
// @match *://*.google.com.eg/*
// @match *://*.google.es/*
// @match *://*.google.com.et/*
// @match *://*.google.fi/*
// @match *://*.google.com.fj/*
// @match *://*.google.fm/*
// @match *://*.google.fr/*
// @match *://*.google.ga/*
// @match *://*.google.ge/*
// @match *://*.google.gg/*
// @match *://*.google.com.gh/*
// @match *://*.google.com.gi/*
// @match *://*.google.gl/*
// @match *://*.google.gm/*
// @match *://*.google.gp/*
// @match *://*.google.gr/*
// @match *://*.google.com.gt/*
// @match *://*.google.gy/*
// @match *://*.google.com.hk/*
// @match *://*.google.hn/*
// @match *://*.google.hr/*
// @match *://*.google.ht/*
// @match *://*.google.hu/*
// @match *://*.google.co.id/*
// @match *://*.google.ie/*
// @match *://*.google.co.il/*
// @match *://*.google.im/*
// @match *://*.google.co.in/*
// @match *://*.google.iq/*
// @match *://*.google.is/*
// @match *://*.google.it/*
// @match *://*.google.je/*
// @match *://*.google.com.jm/*
// @match *://*.google.jo/*
// @match *://*.google.co.jp/*
// @match *://*.google.co.ke/*
// @match *://*.google.com.kh/*
// @match *://*.google.ki/*
// @match *://*.google.kg/*
// @match *://*.google.co.kr/*
// @match *://*.google.com.kw/*
// @match *://*.google.kz/*
// @match *://*.google.la/*
// @match *://*.google.com.lb/*
// @match *://*.google.li/*
// @match *://*.google.lk/*
// @match *://*.google.co.ls/*
// @match *://*.google.lt/*
// @match *://*.google.lu/*
// @match *://*.google.lv/*
// @match *://*.google.com.ly/*
// @match *://*.google.co.ma/*
// @match *://*.google.md/*
// @match *://*.google.me/*
// @match *://*.google.mg/*
// @match *://*.google.mk/*
// @match *://*.google.ml/*
// @match *://*.google.com.mm/*
// @match *://*.google.mn/*
// @match *://*.google.ms/*
// @match *://*.google.com.mt/*
// @match *://*.google.mu/*
// @match *://*.google.mv/*
// @match *://*.google.mw/*
// @match *://*.google.com.mx/*
// @match *://*.google.com.my/*
// @match *://*.google.co.mz/*
// @match *://*.google.com.na/*
// @match *://*.google.com.nf/*
// @match *://*.google.com.ng/*
// @match *://*.google.com.ni/*
// @match *://*.google.ne/*
// @match *://*.google.nl/*
// @match *://*.google.no/*
// @match *://*.google.com.np/*
// @match *://*.google.nr/*
// @match *://*.google.nu/*
// @match *://*.google.co.nz/*
// @match *://*.google.com.om/*
// @match *://*.google.com.pa/*
// @match *://*.google.com.pe/*
// @match *://*.google.com.pg/*
// @match *://*.google.com.ph/*
// @match *://*.google.com.pk/*
// @match *://*.google.pl/*
// @match *://*.google.pn/*
// @match *://*.google.com.pr/*
// @match *://*.google.ps/*
// @match *://*.google.pt/*
// @match *://*.google.com.py/*
// @match *://*.google.com.qa/*
// @match *://*.google.ro/*
// @match *://*.google.ru/*
// @match *://*.google.rw/*
// @match *://*.google.com.sa/*
// @match *://*.google.com.sb/*
// @match *://*.google.sc/*
// @match *://*.google.se/*
// @match *://*.google.com.sg/*
// @match *://*.google.sh/*
// @match *://*.google.si/*
// @match *://*.google.sk/*
// @match *://*.google.com.sl/*
// @match *://*.google.sn/*
// @match *://*.google.so/*
// @match *://*.google.sm/*
// @match *://*.google.sr/*
// @match *://*.google.st/*
// @match *://*.google.com.sv/*
// @match *://*.google.td/*
// @match *://*.google.tg/*
// @match *://*.google.co.th/*
// @match *://*.google.com.tj/*
// @match *://*.google.tk/*
// @match *://*.google.tl/*
// @match *://*.google.tm/*
// @match *://*.google.tn/*
// @match *://*.google.to/*
// @match *://*.google.com.tr/*
// @match *://*.google.tt/*
// @match *://*.google.com.tw/*
// @match *://*.google.co.tz/*
// @match *://*.google.com.ua/*
// @match *://*.google.co.ug/*
// @match *://*.google.co.uk/*
// @match *://*.google.com.uy/*
// @match *://*.google.co.uz/*
// @match *://*.google.com.vc/*
// @match *://*.google.co.ve/*
// @match *://*.google.vg/*
// @match *://*.google.co.vi/*
// @match *://*.google.com.vn/*
// @match *://*.google.vu/*
// @match *://*.google.ws/*
// @match *://*.google.rs/*
// @match *://*.google.co.za/*
// @match *://*.google.co.zm/*
// @match *://*.google.co.zw/*
// @match *://*.google.cat/*
// @match *://*.google.ng/*
// @downloadURL https://update.greasyfork.org/scripts/428243/Don%27t%20track%20me%20Google.user.js
// @updateURL https://update.greasyfork.org/scripts/428243/Don%27t%20track%20me%20Google.meta.js
// ==/UserScript==
document.addEventListener('mousedown', handlePointerPress, true);
document.addEventListener('touchstart', handlePointerPress, true);
document.addEventListener('click', handleClick, true);
var scriptCspNonce;
var needsCspNonce = typeof browser !== 'undefined'; // Firefox.
var preferenceObservers = [];
setupAggresiveUglyLinkPreventer();
var forceNoReferrer = true;
var noping = true;
if (typeof chrome == 'object' && chrome.storage) {
(chrome.storage.sync || chrome.storage.local).get({
forceNoReferrer: true,
// From version 4.7 until 4.11, the preference was the literal value of
// the referrer policy.
referrerPolicy: 'no-referrer',
noping: true,
}, function(items) {
if (items) {
// Migration code (to be removed in the future).
if (items.referrerPolicy === '') {
// User explicitly allowed referrers to be sent, respect that.
items.forceNoReferrer = false;
}
forceNoReferrer = items.forceNoReferrer;
noping = items.noping;
callPreferenceObservers();
}
});
chrome.storage.onChanged.addListener(function(changes) {
if (changes.forceNoReferrer) {
forceNoReferrer = changes.forceNoReferrer.newValue;
}
if (changes.noping) {
noping = changes.noping.newValue;
}
callPreferenceObservers();
});
}
function callImmediatelyAndOnPreferenceUpdate(callback) {
callback();
preferenceObservers.push(callback);
}
function callPreferenceObservers() {
// This method is usually once, and occasionally more than once if the user
// changes a preference. For simplicity we don't check whether a pref was
// changed before calling a callback - these are cheap anyway.
preferenceObservers.forEach(function(callback) {
callback();
});
}
function getReferrerPolicy() {
return forceNoReferrer ? 'origin' : '';
}
function updateReferrerPolicy(a) {
if (a.referrerPolicy === 'no-referrer') {
// "no-referrer" is more privacy-friendly than "origin".
return;
}
var referrerPolicy = getReferrerPolicy();
if (referrerPolicy) {
a.referrerPolicy = referrerPolicy;
}
}
function handlePointerPress(e) {
var a = e.target;
while (a && !a.href) {
a = a.parentElement;
}
if (!a) {
return;
}
var inlineMousedown = a.getAttribute('onmousedown');
// return rwt(....); // E.g Google search results.
// return google.rwt(...); // E.g. sponsored search results
// return google.arwt(this); // E.g. sponsored search results (dec 2016).
if (inlineMousedown && /\ba?rwt\(/.test(inlineMousedown)) {
a.removeAttribute('onmousedown');
// Just in case:
a.removeAttribute('ping');
// In Chrome, removing onmousedown during event dispatch does not
// prevent the inline listener from running... So we have to cancel
// event propagation just in case.
e.stopImmediatePropagation();
}
if (noping) {
a.removeAttribute('ping');
}
var realLink = getRealLinkFromGoogleUrl(a);
if (realLink) {
a.href = realLink;
// Sometimes, two fixups are needed, on old mobile user agents:
// /url?q=https://googleweblight.com/fp?u=... -> ...
realLink = getRealLinkFromGoogleUrl(a);
if (realLink) {
a.href = realLink;
}
}
updateReferrerPolicy(a);
if (e.eventPhase === Event.CAPTURING_PHASE) {
// Our event listener runs first, to sanitize the link.
// But the page may have an event handler that modifies the link again.
// We can append a listener to the bubbling phase of the (current)
// event dispatch to fix the link up again, provided that the page did
// not call stopPropagation() or stopImmediatePropagation().
var eventOptions = { capture: false, once: true };
a.addEventListener(e.type, handlePointerPress, eventOptions);
document.addEventListener(e.type, handlePointerPress, eventOptions);
}
}
// This is specifically designed for catching clicks in Gmail.
// Gmail binds a click handler to a <div> and cancels the event after opening
// a window with an ugly URL. It uses a blank window + meta refresh in Firefox,
// which is too crazy to patch. So we just make sure that the browser's default
// click handler is activated (=open link in new tab).
// The entry point for this crazy stuff is shown in my comment at
// https://github.com/Rob--W/dont-track-me-google/issues/2
function handleClick(e) {
if (e.button !== 0) {
return;
}
var a = e.target;
while (a && !a.href) {
a = a.parentElement;
}
if (!a) {
return;
}
if (a.dataset && a.dataset.url) {
var realLink = getSanitizedIntentUrl(a.dataset.url);
if (realLink) {
a.dataset.url = realLink;
}
}
if (!location.hostname.startsWith('mail.')) {
// This hack was designed for Gmail, but broke other Google sites:
// - https://github.com/Rob--W/dont-track-me-google/issues/6
// - https://github.com/Rob--W/dont-track-me-google/issues/19
// So let's disable it for every domain except Gmail.
return;
}
// TODO: Consider using a.baseURI instead of location in case Gmail ever
// starts using <base href>?
if (a.origin === location.origin) {
// Same-origin link.
// E.g. an in-page navigation at Google Docs (#...)
// or an attachment at Gmail (https://mail.google.com/mail/u/0?ui=2&...)
return;
}
if (a.protocol !== 'http:' &&
a.protocol !== 'https:' &&
a.protocol !== 'ftp:') {
// Be conservative and don't block too much. E.g. Gmail has special
// handling for mailto:-URLs, and using stopPropagation now would
// cause mailto:-links to be opened by the platform's default mailto
// handler instead of Gmail's handler (=open in new window).
return;
}
if (a.target === '_blank') {
e.stopPropagation();
updateReferrerPolicy(a);
}
}
/**
* @param {URL|HTMLHyperlinkElementUtils} a
* @returns {String} the real URL if the given link is a Google redirect URL.
*/
function getRealLinkFromGoogleUrl(a) {
if (a.protocol !== 'https:' && a.protocol !== 'http:') {
return;
}
var url;
if ((a.hostname === location.hostname || a.hostname === 'www.google.com') &&
(a.pathname === '/url' || a.pathname === '/local_url' ||
a.pathname === '/searchurl/rr.html' ||
a.pathname === '/linkredirect')) {
// Google Maps / Dito (/local_url?q=<url>)
// Mobile (/url?q=<url>)
// Google Meet's chat (/linkredirect?authuser=0&dest=<url>)
url = /[?&](?:q|url|dest)=((?:https?|ftp)[%:][^&]+)/.exec(a.search);
if (url) {
return decodeURIComponent(url[1]);
}
// Help pages, e.g. safe browsing (/url?...&q=%2Fsupport%2Fanswer...)
url = /[?&](?:q|url)=((?:%2[Ff]|\/)[^&]+)/.exec(a.search);
if (url) {
return a.origin + decodeURIComponent(url[1]);
}
// Redirect pages for Android intents (/searchurl/rr.html#...&url=...)
// rr.html only supports http(s). So restrict to http(s) only.
url = /[#&]url=(https?[:%][^&]+)/.exec(a.hash);
if (url) {
return decodeURIComponent(url[1]);
}
}
// Google Search with old mobile UA (e.g. Firefox 41).
if (a.hostname === 'googleweblight.com' && a.pathname === '/fp') {
url = /[?&]u=((?:https?|ftp)[%:][^&]+)/.exec(a.search);
if (url) {
return decodeURIComponent(url[1]);
}
}
}
/**
* @param {string} intentUrl
* @returns {string|undefined} The sanitized intent:-URL if it was an intent URL
* with embedded tracking link.
*/
function getSanitizedIntentUrl(intentUrl) {
if (!intentUrl.startsWith('intent:')) {
return;
}
// https://developer.chrome.com/multidevice/android/intents#syntax
var BROWSER_FALLBACK_URL = ';S.browser_fallback_url=';
var indexStart = intentUrl.indexOf(BROWSER_FALLBACK_URL);
if (indexStart === -1) {
return;
}
indexStart += BROWSER_FALLBACK_URL.length;
var indexEnd = intentUrl.indexOf(';', indexStart);
indexEnd = indexEnd === -1 ? intentUrl.length : indexEnd;
var url = decodeURIComponent(intentUrl.substring(indexStart, indexEnd));
var realUrl = getRealLinkFromGoogleUrl(newURL(url));
if (!realUrl) {
return;
}
return intentUrl.substring(0, indexStart) +
encodeURIComponent(realUrl) +
intentUrl.substring(indexEnd);
}
/**
* Intercept the .href setter in the page so that the page can never change the
* URL to a tracking URL. Just intercepting mousedown/touchstart is not enough
* because e.g. on Google Maps, the page rewrites the URL in the contextmenu
* event at the bubbling event stage and then stops the event propagation. So
* there is no event-driven way to fix the URL. The DOMAttrModified event could
* be used, but the event is deprecated, so not a viable long-term solution.
*/
function setupAggresiveUglyLinkPreventer() {
// This content script runs as document_start, so we can have some assurance
// that the methods in the page are reliable.
var s = document.createElement('script');
if (getScriptCspNonce()) {
s.setAttribute('nonce', scriptCspNonce);
} else if (document.readyState !== 'complete' && needsCspNonce) {
// In Firefox, a page's CSP is enforced for content scripts, so we need
// to wait for the document to be loaded (we may be at document_start)
// and find a fitting CSP nonce.
findScriptCspNonce(setupAggresiveUglyLinkPreventer);
return;
}
s.textContent = '(' + function(getRealLinkFromGoogleUrl) {
var proto = HTMLAnchorElement.prototype;
// The link target can be changed in many ways, but let's only consider
// the .href attribute since it's probably the only used setter.
var hrefProp = Object.getOwnPropertyDescriptor(proto, 'href');
var hrefGet = Function.prototype.call.bind(hrefProp.get);
var hrefSet = Function.prototype.call.bind(hrefProp.set);
Object.defineProperty(proto, 'href', {
configurable: true,
enumerable: true,
get() {
return hrefGet(this);
},
set(v) {
hrefSet(this, v);
try {
v = getRealLinkFromGoogleUrl(this);
if (v) {
hrefSet(this, v);
}
} catch (e) {
// Not expected to happen, but don't break the setter if for
// some reason the (hostile) page broke the link APIs.
}
updateReferrerPolicy(this);
},
});
function replaceAMethod(methodName, methodFunc) {
// Overwrite the methods without triggering setters, because that
// may inadvertently overwrite the prototype, as observed in
// https://github.com/Rob--W/dont-track-me-google/issues/52#issuecomment-1596207655
Object.defineProperty(proto, methodName, {
configurable: true,
// All methods that we are overriding are not part of
// HTMLAnchorElement.prototype, but inherit.
enumerable: false,
writable: true,
value: methodFunc,
});
}
// proto inherits Element.prototype.setAttribute:
var setAttribute = Function.prototype.call.bind(proto.setAttribute);
replaceAMethod('setAttribute', function(name, value) {
// Attribute names are not case-sensitive, but weird capitalizations
// are unlikely, so only check all-lowercase and all-uppercase.
if (name === 'href' || name === 'HREF') {
this.href = value;
} else {
setAttribute(this, name, value);
}
});
// proto inherits EventTarget.prototype.dispatchEvent:
var aDispatchEvent = Function.prototype.apply.bind(proto.dispatchEvent);
replaceAMethod('dispatchEvent', function() {
updateReferrerPolicy(this);
return aDispatchEvent(this, arguments);
});
// proto inherits HTMLElement.prototype.click:
var aClick = Function.prototype.apply.bind(proto.click);
replaceAMethod('click', function() {
updateReferrerPolicy(this);
return aClick(this, arguments);
});
var rpProp = Object.getOwnPropertyDescriptor(proto, 'referrerPolicy');
var rpGet = Function.prototype.call.bind(rpProp.get);
var rpSet = Function.prototype.call.bind(rpProp.set);
var currentScript = document.currentScript;
var getReferrerPolicy = Object.getOwnPropertyDescriptor(
HTMLScriptElement.prototype,
'referrerPolicy'
).get.bind(currentScript);
function updateReferrerPolicy(a) {
try {
if (rpGet(a) === 'no-referrer') {
// "no-referrer" is more privacy-friendly than "origin".
return;
}
var referrerPolicy = getReferrerPolicy();
if (referrerPolicy) {
rpSet(a, referrerPolicy);
}
} catch (e) {
// Not expected to happen, but don't break callers if it happens
// anyway.
}
}
currentScript.dataset.jsEnabled = 1;
} + ')(' + getRealLinkFromGoogleUrl + ');';
callImmediatelyAndOnPreferenceUpdate(function forceNoReferrerChanged() {
// Send the desired referrerPolicy value to the injected script.
s.referrerPolicy = getReferrerPolicy();
});
(document.head || document.documentElement).appendChild(s);
s.remove();
if (!s.dataset.jsEnabled) {
cleanLinksWhenJsIsDisabled();
if (!needsCspNonce) {
needsCspNonce = true;
// This is not Firefox, but the script was blocked. Perhaps a CSP
// nonce is needed anyway.
findScriptCspNonce(function() {
if (scriptCspNonce) {
setupAggresiveUglyLinkPreventer();
}
});
}
} else {
// Scripts enabled (not blocked by CSP), run other inline scripts.
blockTrackingBeacons();
overwriteWindowOpen();
if (location.hostname === 'docs.google.com') {
// Google Docs have simple non-JS interfaces where the ugly links
// are hard-coded in the HTML. Remove them (#51).
// https://docs.google.com/document/d/.../mobilebasic
// https://docs.google.com/spreadsheets/d/.../htmlview
cleanLinksWhenJsIsDisabled();
}
}
}
// Block sendBeacon requests with destination /gen_204, because Google
// asynchronously sends beacon requests in response to mouse events on links:
// https://github.com/Rob--W/dont-track-me-google/issues/20
//
// This implementation also blocks other forms of tracking via gen_204 as a side
// effect. That is not fully intentional, but given the lack of obvious ways to
// discern such link-tracking events from others, I will block all of them.
function blockTrackingBeacons() {
var s = document.createElement('script');
if (getScriptCspNonce()) {
s.setAttribute('nonce', scriptCspNonce);
}
s.textContent = '(' + function() {
var navProto = window.Navigator.prototype;
var navProtoSendBeacon = navProto.sendBeacon;
if (!navProtoSendBeacon) {
return;
}
var sendBeacon = Function.prototype.apply.bind(navProtoSendBeacon);
// Blocks the following:
// gen_204
// /gen_204
// https://www.google.com/gen_204
var isTrackingUrl = RegExp.prototype.test.bind(
/^(?:(?:https?:\/\/[^\/]+)?\/)?gen_204(?:[?#]|$)/);
navProto.sendBeacon = function(url, data) {
if (isTrackingUrl(url) && isNoPingEnabled()) {
// Lie that the data has been transmitted to avoid fallbacks.
return true;
}
return sendBeacon(this, arguments);
};
var currentScript = document.currentScript;
var getElementId = Object.getOwnPropertyDescriptor(
Element.prototype,
'id'
).get.bind(currentScript);
function isNoPingEnabled() {
try {
return getElementId() !== '_dtmg_do_not_touch_ping';
} catch (e) {
return true;
}
}
} + ')();';
callImmediatelyAndOnPreferenceUpdate(function nopingChanged() {
// Send the noping value to the injected script. The "id" property is
// mirrored and can have an arbitrary (string) value, so we use that:
s.id = noping ? '' : '_dtmg_do_not_touch_ping';
});
(document.head || document.documentElement).appendChild(s);
s.remove();
}
// Google sometimes uses window.open() to open ugly links.
// https://github.com/Rob--W/dont-track-me-google/issues/18
// https://github.com/Rob--W/dont-track-me-google/issues/41
function overwriteWindowOpen() {
var s = document.createElement('script');
if (getScriptCspNonce()) {
s.setAttribute('nonce', scriptCspNonce);
}
s.textContent = '(' + function() {
var open = window.open;
window.open = function(url, windowName, windowFeatures) {
var isBlankUrl = !url || url === "about:blank";
try {
if (!isBlankUrl) {
var a = document.createElement('a');
// Triggers getRealLinkFromGoogleUrl via the href setter in
// setupAggresiveUglyLinkPreventer.
a.href = url;
url = a.href;
// The origin check exists to avoid adding "noreferrer" to
// same-origin popups. That implies noopener and causes
// https://github.com/Rob--W/dont-track-me-google/issues/43
// And allow any Google domain to support auth popups:
// https://github.com/Rob--W/dont-track-me-google/issues/45
// And don't bother editing the list if it already contains
// "opener" (it would be disabled by "noreferrer").
if (a.referrerPolicy && a.origin !== location.origin &&
!/\.google\.([a-z]+)$/.test(a.hostname) &&
!/\bopener|noreferrer/.test(windowFeatures)) {
if (windowFeatures) {
windowFeatures += ',';
} else {
windowFeatures = '';
}
windowFeatures += 'noreferrer';
}
}
} catch (e) {
// Not expected to happen, but don't break callers if it does.
}
var win = open(url, windowName, windowFeatures);
try {
if (isBlankUrl && win) {
// In Google Docs, sometimes a blank document is opened,
// and document.write is used to insert a redirector.
// https://github.com/Rob--W/dont-track-me-google/issues/41
var doc = win.document;
var docWrite = win.Function.prototype.call.bind(doc.write);
doc.write = function(markup) {
try {
markup = fixupDocMarkup(markup);
} catch (e) {
// Not expected, but don't break callers otherwise.
}
return docWrite(this, markup);
};
}
} catch (e) {
// Not expected to happen, but don't break callers if it does.
}
return win;
};
function fixupDocMarkup(html) {
html = html || '';
html += '';
return html.replace(
/<meta [^>]*http-equiv=(["']?)refresh\1[^>]*>/i,
function(m) {
var doc = new DOMParser().parseFromString(m, 'text/html');
var meta = doc.querySelector('meta[http-equiv=refresh]');
return meta && fixupMetaUrl(meta) || m;
});
}
function fixupMetaUrl(meta) {
var parts = /^(\d*;\s*url=)(.+)$/i.exec(meta.content);
if (!parts) {
return;
}
var metaPrefix = parts[1];
var url = parts[2];
var a = document.createElement('a');
// Triggers getRealLinkFromGoogleUrl via the href setter in
// setupAggresiveUglyLinkPreventer.
a.href = url;
url = a.href;
meta.content = metaPrefix + url;
var html = meta.outerHTML;
if (a.referrerPolicy) {
// Google appears to already append the no-referrer
// meta tag, but add one just in case it doesn't.
html = '<meta name="referrer" content="no-referrer">' + html;
}
return html;
}
} + ')();';
(document.head || document.documentElement).appendChild(s);
s.remove();
}
function cleanLinksWhenJsIsDisabled() {
// When JavaScript is disabled, Google sets the "href" attribute's value to
// an ugly URL. Although the link is rewritten on click, we still need to
// rewrite the link even earlier because otherwise the ugly URL is shown in
// the tooltip upon hover.
if (document.readyState == 'complete') {
cleanAllLinks();
return;
}
// When JS is disabled, the links won't change after the document finishes
// loading. Until the DOM has finished loading, use the mouseover event to
// beautify links (the DOMContentLoaded may be delayed on slow networks).
document.addEventListener('mouseover', handleMouseOver);
document.addEventListener('DOMContentLoaded', function() {
document.removeEventListener('mouseover', handleMouseOver);
cleanAllLinks();
}, {once: true});
function cleanAllLinks() {
var as = document.querySelectorAll('a[href]');
for (var i = 0; i < as.length; ++i) {
var href = getRealLinkFromGoogleUrl(as[i]);
if (href) {
as[i].href = href;
}
}
}
function handleMouseOver(e) {
var a = e.target;
var href = a.href && getRealLinkFromGoogleUrl(a);
if (href) {
a.href = href;
}
}
}
function getScriptCspNonce() {
var scripts = document.querySelectorAll('script[nonce]');
for (var i = 0; i < scripts.length && !scriptCspNonce; ++i) {
scriptCspNonce = scripts[i].nonce;
}
return scriptCspNonce;
}
function findScriptCspNonce(callback) {
var timer;
function checkDOM() {
if (getScriptCspNonce() || document.readyState === 'complete') {
document.removeEventListener('DOMContentLoaded', checkDOM, true);
if (timer) {
clearTimeout(timer);
}
callback();
return;
}
timer = setTimeout(checkDOM, 50);
}
document.addEventListener('DOMContentLoaded', checkDOM, true);
checkDOM();
}
function newURL(href) {
try {
return new URL(href);
} catch (e) {
var a = document.createElement('a');
a.href = href;
return a;
}
}
@@ -0,0 +1,984 @@
// ==UserScript==
// @name I don't care about cookies
// @name:vi Tôi không quan tâm về cookie
// @name:zh-CN 我不关心cookie
// @name:zh-TW 我不關心cookie
// @name:ja クッキーについては気にしない
// @name:ru Я не забочусь о куки
// @namespace http://tampermonkey.net/
// @version 2025.01.03.2
// @description Remove cookie warnings from almost all websites! Auto accept cookies and remove annoying cookie popups
// @description:vi Loại bỏ cảnh báo cookie từ hầu hết các trang web! Tự động chấp nhận cookie và xóa các popup cookie phiền phức
// @description:zh-CN 自动接受cookie并移除烦人的cookie弹窗
// @description:zh-TW 自動接受cookie並移除煩人的cookie彈窗
// @description:ru Автоматическое принятие cookie и удаление надоедливых всплывающих окон
// @description:ja 自動承認cookieと迷惑なポップアップを削除
// @author Yuusei
// @match *://*/*
// @grant none
// @icon https://lh3.googleusercontent.com/sCLTYpGX0VcVootQ_XaFQ9saRIhVWu79ngSzY5eTZ5evRpJ_Q27OdvxA4RrOoZXP7Q4enFh-u6VhxObcJLfARw1g=s60
// @compatible chrome
// @compatible edge
// @compatible firefox
// @compatible safari
// @run-at document-start
// @license gpl-3.0-only
// @downloadURL https://update.greasyfork.org/scripts/522645/I%20don%27t%20care%20about%20cookies.user.js
// @updateURL https://update.greasyfork.org/scripts/522645/I%20don%27t%20care%20about%20cookies.meta.js
// ==/UserScript==
(function () {
'use strict';
const CONSENT_TEXTS = {
en: ['accept', 'accept all', 'agree', 'continue', 'got it', 'reject all', 'decline', 'necessary only', 'required only', 'manage', 'customize'],
vi: ['chấp nhận', 'chấp nhận tất cả', 'đồng ý', 'tiếp tục', 'từ chối tất cả', 'từ chối', 'chỉ cần thiết', 'tùy chỉnh', 'quản lý', 'cho phép', 'đồng ý và tiếp tục', 'tôi đồng ý', 'xác nhận', 'tôi chấp nhận', 'đồng ý tất cả', 'chấp nhận và tiếp tục', 'cho phép tất cả'],
zh: ['接受', '接受全部', '同意', '继续', '拒绝全部', '拒绝', '仅必要', '管理', '自定义'],
ru: ['принять', 'принять все', 'согласен', 'продолжить', 'отклонить все', 'отклонить', 'только необходимые', 'настроить', 'управлять'],
ja: ['承認', '同意', '続ける', 'すべて拒否', '拒否', '必要のみ', 'カスタマイズ', '管理'],
de: ['akzeptieren', 'einverstanden', 'fortfahren', 'alle ablehnen', 'ablehnen', 'nur notwendige', 'anpassen', 'verwalten'],
fr: ['accepter', 'accepter tout', 'accepte', 'continuer', 'tout refuser', 'refuser', 'uniquement nécessaire', 'personnaliser', 'gérer'],
es: ['aceptar', 'acepto todo', 'acepto', 'continuar', 'rechazar todo', 'rechazar', 'solo necesario', 'personalizar', 'gestionar'],
it: ['accetta', 'accetto tutto', 'accetto', 'continua', 'rifiuta tutto', 'rifiuta', 'solo necessari', 'personalizza', 'gestisci'],
pl: ['akceptuj', 'akceptuj wszystko', 'zgadzam się', 'kontynuuj', 'odrzuć wszystko', 'odrzuć', 'tylko niezbędne', 'dostosuj', 'zarządzaj'],
nl: ['accepteren', 'accepteren', 'doorgaan', 'alles weigeren', 'weigeren', 'alleen noodzakelijk', 'aanpassen', 'beheren'],
ko: ['동의', '모두 동의', '계속하기', '모두 거부', '거부', '필수만', '설정', '관리'],
th: ['ยอมรับ', 'ยอมรับทั้งหมด', 'ตกลง', 'ปฏิเสธทั้งหมด', 'ปฏิเสธ', 'จำเป็นเท่านั้น', 'ตั้งค่า', 'จัดการ'],
id: ['setuju', 'setuju semua', 'lanjutkan', 'tolak semua', 'tolak', 'wajib saja', 'pengaturan', 'kelola'],
ms: ['terima', 'terima semua', 'teruskan', 'tolak semua', 'tolak', 'perlu sahaja', 'tetapan', 'urus'],
pt: ['aceitar', 'aceitar tudo', 'continuar', 'rejeitar tudo', 'rejeitar', 'necessário', 'configurar', 'gerir'],
sv: ['godkänn', 'godkänn alla', 'fortsätt', 'neka alla', 'neka', 'nödvändiga', 'inställningar', 'hantera'],
da: ['accepter', 'accepter alle', 'fortsæt', 'afvis alle', 'afvis', 'nødvendige', 'indstillinger', 'administrer'],
fi: ['hyväksy', 'hyväksy kaikki', 'jatka', 'hylkää kaikki', 'hylkää', 'välttämätön', 'asetukset', 'hallitse'],
'zh-CN': ['接受', '接受全部', '同意', '继续', '我同意', '确定', '确认', '知道了', '好的', '拒绝全部', '拒绝', '仅必要', '设置', '自定义', '管理', '保存设置', '允许', '允许全部', '接受并继续', '同意并继续', '保存并继续'],
'zh-TW': ['接受', '接受全部', '同意', '繼續', '我同意', '確定', '確認', '知道了', '好的', '拒絕全部', '拒絕', '僅必要', '設置', '自定義', '管理', '保存設置', '允許', '允許全部', '接受並繼續', '同意並繼續', '保存並繼續'],
ko: ['동의', '모두 동의', '수락', '계속하기', '확인', '거부', '거부하기', '필수만', '설정', '관리', '저장', '허용', '모두 허용'],
th: ['ยอมรับ', 'ยอมรับทั้งหมด', 'ตกลง', 'ดำเนินการต่อ', 'ปฏิเสธ', 'ปฏิเสธทั้งหมด', 'จำเป็นเท่านั้น', 'ตั้งค่า', 'จัดการ', 'บันทึก', 'อนุญาต', 'อนุญาตทั้งหมด'],
id: ['terima', 'terima semua', 'setuju', 'lanjutkan', 'tolak', 'tolak semua', 'wajib saja', 'pengaturan', 'kelola', 'simpan', 'izinkan', 'izinkan semua'],
ms: ['terima', 'terima semua', 'setuju', 'teruskan', 'tolak', 'tolak semua', 'perlu sahaja', 'tetapan', 'urus', 'simpan', 'benarkan', 'benarkan semua'],
};
function matchesConsentText(element) {
const text = element.textContent.toLowerCase();
const lang = document.documentElement.lang || 'en';
const texts = CONSENT_TEXTS[lang.split('-')[0]] || CONSENT_TEXTS['en'];
return texts.some(t => text.includes(t));
}
// Utility functions
function _sl(selector, container) {
return (container || document).querySelector(selector);
}
function _id(id) {
return document.getElementById(id);
}
function _ev(selector, container, full) {
return document.evaluate((typeof full == 'undefined' ? '//' : '') + selector, container || document, null, XPathResult.ANY_TYPE, null).iterateNext();
}
function _if(condition, ...selectors) {
return _sl(condition) ? _chain(...selectors) : false;
}
function _if_else(condition, if_selectors, else_selectors) {
if (_sl(condition)) return _chain(...if_selectors);
return _chain(...else_selectors);
}
function _chain(...selectors) {
let elements,
l = selectors.length;
let flagUnique = false,
flagOptional = false,
flagAllMatches = false;
for (let i = currentChainElement; i < l; i++) {
if (/^FLAG\:/.test(selectors[i])) {
selectors[i]
.split(':')[1]
.split(',')
.forEach(function (flag) {
if (flag == 'UNIQUE') flagUnique = true;
else if (flag == 'OPTIONAL') flagOptional = true;
else if (flag == 'REQUIRED') flagOptional = false;
else if (flag == 'ALL-MATCHES') flagAllMatches = true;
else if (flag == 'SINGLE-MATCH') flagAllMatches = false;
});
continue;
}
if (flagUnique) selectors[i] += selectors[i].startsWith('//') ? '[not(contains(@class, "' + classname + '"))]' : ':not(.' + classname + ')';
if (i == l - 1) return selectors[i];
elements = _sl(selectors[i], false, flagAllMatches);
if (!flagAllMatches) elements = elements ? [elements] : [];
if (!elements.length) {
if (flagOptional) {
currentChainElement++;
continue;
}
return false;
}
currentChainElement++;
elements.forEach(function (element) {
if (flagUnique) element.classList.add(classname);
if (element.nodeName == 'OPTION') element.selected = true;
else element.click();
});
}
return false;
}
function getItem(hostname) {
switch (hostname) {
case 'youtube.com':
case 'www.youtube.com':
return { strict: true, key: 'CONSENT', value: 'PENDING+999' };
case 'google.com':
case 'www.google.com':
return { strict: true, key: 'CONSENT', value: 'YES+' };
case 'twitter.com':
case 'www.twitter.com':
return { strict: false, key: 'twtr_cookie_consent', value: '1' };
case 'pepephone.com':
case 'lyricsbox.com':
return { strict: true, key: 'cookieconsent', value: '1111' };
case 'kontaktbazar.at':
case 'hoernews.de':
return { strict: false, key: 'cookieconsent_status', value: 'dismiss' };
case 'vodafoneziggo.nl':
return { strict: false, key: 'cookies-accepted', value: 'true' };
case 'frankfurt.de':
return { strict: false, key: 'cookieAccepted', value: 'needed---piwik' };
case 'hackerrank.com':
return { strict: false, key: 'show_cookie_banner', value: 'false' };
case 'facebook.com':
case 'www.facebook.com':
return { strict: true, key: 'datr', value: 'accepted' };
case 'instagram.com':
case 'www.instagram.com':
return { strict: true, key: 'ig_did', value: 'accepted' };
case 'linkedin.com':
case 'www.linkedin.com':
return { strict: false, key: 'lidc', value: 'accepted' };
case 'reddit.com':
case 'www.reddit.com':
return { strict: false, key: 'eu_cookie', value: '{"opted":true}' };
case 'tiktok.com':
case 'www.tiktok.com':
return { strict: true, key: 'tt_webid', value: 'accepted' };
case 'netflix.com':
case 'www.netflix.com':
return { strict: false, key: 'netflix-cookie-consent', value: 'accepted' };
case 'spotify.com':
case 'www.spotify.com':
return { strict: false, key: 'sp_dc', value: 'accepted' };
case 'amazon.com':
case 'www.amazon.com':
return { strict: false, key: 'amazon-cookie-consent', value: 'accepted' };
case 'pinterest.com':
case 'www.pinterest.com':
return { strict: false, key: '_pinterest_sess', value: 'accepted' };
case 'twitch.tv':
case 'www.twitch.tv':
return { strict: false, key: 'twitch_cookie_consent', value: 'accepted' };
case 'github.com':
case 'www.github.com':
return { strict: false, key: '_gh_sess', value: 'accepted' };
case 'medium.com':
case 'www.medium.com':
return { strict: false, key: 'medium_cookie_consent', value: 'accepted' };
case 'quora.com':
case 'www.quora.com':
return { strict: false, key: 'm-b', value: 'accepted' };
case 'stackoverflow.com':
case 'www.stackoverflow.com':
return { strict: false, key: 'acct', value: 'accepted' };
case 'microsoft.com':
case 'www.microsoft.com':
return { strict: false, key: 'MUID', value: 'accepted' };
case 'apple.com':
case 'www.apple.com':
return { strict: false, key: 'geo', value: 'accepted' };
case 'dropbox.com':
case 'www.dropbox.com':
return { strict: false, key: 'dbx-consent', value: 'accepted' };
case 'booking.com':
case 'www.booking.com':
return { strict: false, key: 'bkng_consent', value: 'accepted' };
case 'vnexpress.net':
case 'www.vnexpress.net':
return { strict: false, key: 'vnexpress_cookie_consent', value: 'accepted' };
case 'thanhnien.vn':
case 'www.thanhnien.vn':
return { strict: false, key: 'thanhnien_cookie', value: 'accepted' };
case 'tuoitre.vn':
case 'www.tuoitre.vn':
return { strict: false, key: 'tuoitre_cookie', value: 'accepted' };
case 'tiki.vn':
case 'www.tiki.vn':
return { strict: false, key: 'tiki_cookie', value: 'accepted' };
case 'shopee.vn':
case 'www.shopee.vn':
return { strict: false, key: 'shopee_cookie', value: 'accepted' };
case 'lazada.vn':
case 'www.lazada.vn':
return { strict: false, key: 'lzd_cookie', value: 'accepted' };
case 'sendo.vn':
case 'www.sendo.vn':
return { strict: false, key: 'sendo_cookie', value: 'accepted' };
case 'thegioididong.com':
case 'www.thegioididong.com':
return { strict: false, key: 'tgdd_cookie', value: 'accepted' };
case 'fptshop.com.vn':
case 'www.fptshop.com.vn':
return { strict: false, key: 'fpt_cookie', value: 'accepted' };
case 'cellphones.com.vn':
case 'www.cellphones.com.vn':
return { strict: false, key: 'cps_cookie', value: 'accepted' };
case 'aliexpress.com':
case 'www.aliexpress.com':
return { strict: false, key: 'aep_usuc_f', value: 'accepted' };
case 'ebay.com':
case 'www.ebay.com':
return { strict: false, key: 'ebay_cookie_consent', value: 'accepted' };
case 'coursera.org':
case 'www.coursera.org':
return { strict: false, key: 'coursera_cookie', value: 'accepted' };
case 'udemy.com':
case 'www.udemy.com':
return { strict: false, key: 'ud_cookie', value: 'accepted' };
case 'bachhoaxanh.com':
case 'www.bachhoaxanh.com':
return { strict: false, key: 'bhx_cookie', value: 'accepted' };
case 'dienmayxanh.com':
case 'www.dienmayxanh.com':
return { strict: false, key: 'dmx_cookie', value: 'accepted' };
case 'nguyenkim.com':
case 'www.nguyenkim.com':
return { strict: false, key: 'nk_cookie', value: 'accepted' };
case 'dantri.com.vn':
case 'www.dantri.com.vn':
return { strict: false, key: 'dantri_cookie', value: 'accepted' };
case 'vietnamnet.vn':
case 'www.vietnamnet.vn':
return { strict: false, key: 'vietnamnet_cookie', value: 'accepted' };
case '24h.com.vn':
case 'www.24h.com.vn':
return { strict: false, key: '24h_cookie', value: 'accepted' };
case 'vietcombank.com.vn':
case 'www.vietcombank.com.vn':
return { strict: false, key: 'vcb_cookie', value: 'accepted' };
case 'techcombank.com.vn':
case 'www.techcombank.com.vn':
return { strict: false, key: 'tcb_cookie', value: 'accepted' };
case 'mbbank.com.vn':
case 'www.mbbank.com.vn':
return { strict: false, key: 'mb_cookie', value: 'accepted' };
case 'amazon.co.jp':
case 'www.amazon.co.jp':
return { strict: false, key: 'amazon_jp_cookie', value: 'accepted' };
case 'rakuten.co.jp':
case 'www.rakuten.co.jp':
return { strict: false, key: 'rakuten_jp_cookie', value: 'accepted' };
case 'taobao.com':
case 'www.taobao.com':
return { strict: false, key: 'taobao_cookie', value: 'accepted' };
case 'line.me':
case 'www.line.me':
return { strict: false, key: 'line_cookie', value: 'accepted' };
case 'weibo.com':
case 'www.weibo.com':
return { strict: false, key: 'weibo_cookie', value: 'accepted' };
case 'kakao.com':
case 'www.kakao.com':
return { strict: false, key: 'kakao_cookie', value: 'accepted' };
case 'yahoo.co.jp':
case 'www.yahoo.co.jp':
return { strict: false, key: 'yahoo_jp_cookie', value: 'accepted' };
case 'naver.com':
case 'www.naver.com':
return { strict: false, key: 'naver_cookie', value: 'accepted' };
case 'baidu.com':
case 'www.baidu.com':
return { strict: false, key: 'baidu_cookie', value: 'accepted' };
case 'zalando.com':
case 'www.zalando.com':
return { strict: false, key: 'zalando_cookie', value: 'accepted' };
case 'asos.com':
case 'www.asos.com':
return { strict: false, key: 'asos_cookie', value: 'accepted' };
case 'zara.com':
case 'www.zara.com':
return { strict: false, key: 'zara_cookie', value: 'accepted' };
case 'tmall.com':
case 'www.tmall.com':
return { strict: false, key: 'tmall_cookie', value: 'accepted' };
case 'jd.com':
case 'www.jd.com':
return { strict: false, key: 'jd_cookie', value: 'accepted' };
case 'sina.com.cn':
case 'www.sina.com.cn':
return { strict: false, key: 'sina_cookie', value: 'accepted' };
case 'qq.com':
case 'www.qq.com':
return { strict: false, key: 'qq_cookie', value: 'accepted' };
case '163.com':
case 'www.163.com':
return { strict: false, key: 'netease_cookie', value: 'accepted' };
case 'sohu.com':
case 'www.sohu.com':
return { strict: false, key: 'sohu_cookie', value: 'accepted' };
case 'bilibili.com':
case 'www.bilibili.com':
return { strict: false, key: 'bilibili_cookie', value: 'accepted' };
}
const parts = hostname.split('.');
if (parts.length > 2) {
parts.shift();
return getItem(parts.join('.'));
}
return false;
}
function _parent(element) {
if (element && element.parentNode) return element.parentNode;
return false;
}
function _iframe(iframe_selector, selector) {
var e = _sl(iframe_selector);
return e ? _sl(selector, e.contentDocument || e.contentWindow.contentDocument) : e;
}
// Cookie consent handling logic
let searchPairs = {
'.vn-cookie-banner': ['.vn-cookie-banner__reject', '.vn-cookie-banner__customize'],
'.vn-cookie-notice': ['.vn-cookie-notice__reject', '.vn-cookie-notice__settings'],
'.vn-cookie-consent': ['.vn-cookie-consent__reject', '.vn-cookie-consent__customize'],
'.vn-cookie-popup': ['.vn-cookie-popup__reject', '.vn-cookie-popup__settings'],
'.shopee-cookie-banner': ['.shopee-cookie-banner__reject', '.shopee-cookie-banner__settings'],
'.lazada-cookie-notice': ['.lazada-cookie-notice__reject', '.lazada-cookie-notice__settings'],
'.tiki-cookie-popup': ['.tiki-cookie-popup__reject', '.tiki-cookie-popup__settings'],
'.sendo-cookie-consent': ['.sendo-cookie-consent__reject', '.sendo-cookie-consent__settings'],
'.vnexpress-cookie': ['.vnexpress-cookie__reject', '.vnexpress-cookie__settings'],
'.tuoitre-cookie': ['.tuoitre-cookie__reject', '.tuoitre-cookie__settings'],
'.thanhnien-cookie': ['.thanhnien-cookie__reject', '.thanhnien-cookie__settings'],
'.dantri-cookie': ['.dantri-cookie__reject', '.dantri-cookie__settings'],
'.tgdd-cookie-notice': ['.tgdd-cookie-notice__reject', '.tgdd-cookie-notice__settings'],
'.fpt-cookie-popup': ['.fpt-cookie-popup__reject', '.fpt-cookie-popup__settings'],
'.cps-cookie-consent': ['.cps-cookie-consent__reject', '.cps-cookie-consent__settings'],
'.vcb-cookie-notice': ['.vcb-cookie-notice__reject', '.vcb-cookie-notice__settings'],
'.tcb-cookie-popup': ['.tcb-cookie-popup__reject', '.tcb-cookie-popup__settings'],
'.mb-cookie-consent': ['.mb-cookie-consent__reject', '.mb-cookie-consent__settings'],
'div[class*="consent"]': ['button[class*="reject"]', 'button[class*="decline"]', 'button[class*="settings"]'],
'div[class*="notice"]': ['button[class*="reject"]', 'button[class*="decline"]', 'button[class*="settings"]'],
'div[class*="popup"]': ['button[class*="reject"]', 'button[class*="decline"]', 'button[class*="settings"]'],
'div[class*="banner"]': ['button[class*="reject"]', 'button[class*="decline"]', 'button[class*="settings"]'],
};
let searchGroups = [
'.qc-cmp2-summary-buttons button[mode="secondary"],\
.qc-cmp2-buttons-desktop > button:first-child,\
#didomi-popup .didomi-button-highlight:not([class*="paywall"]):not([class*="disagree"]),\
#rgpd_video .rgpd-mask a[data-rgpd-consent],\
.cli-barmodal-open #wt-cli-privacy-save-btn,\
.js--modal[style*="block"] .cookie-permission--accept-button,\
.gdpr-modal-rider .btn-cookieaccept,\
.js-cookiewall #sel-test-accept-cookies-button,\
#mpo[style*="block"] .submit.modal-privacy__btn[onclick*="privacyframe.accept"],\
.lightbox--cookie-consent .btn-cta,\
.lightbox.cookie-consent .cookie-consent-button-decline,\
.js-modal-gdpr.is-active .btn[data-level="2"],\
#CybotCookiebotDialogBodyLevelButtonLevelOptinAllowallSelection,\
#cookieNotificationModal.in .btn.accept-cookie,\
.has-ccwindow .cc-compliance .cc-dismiss,\
.ds2-cookie-disclaimer--slidedown .ds2-cookie-disclaimer-js--submit,\
#mdlCookieCompliance.in .cookieClose,\
#cookieModal.in .js-acceptDefaultCookie,\
.c-cookiebutton .c-cookiebutton__close,\
#normativa_cookies.in .btn,\
#cookiewall.in .btn-primary,\
.outerCookieBar .EuCookieBar__cookieButton,\
#TOS-POPUP .rhododendron-popup__button--agree,\
#cookie-wall #accept-cookies,\
#popup-wrapper .button[href*="/cookies.consent.php"],\
.reveal.cookies[style*="block"] button[click*="aceptaCookies"],\
.mnd-cookie-modal[style*="block"] .btn.is--primary,\
.cookieHandler.cookieHandler--modalOpen #acceptAllCookies,\
.gdpr-modal--active .btn--primary,\
#dpi-banner:not(.hidden) #btn-agree-cookie,\
.gh-banner.gh-banner-active #gh-cookiebanner-close,\
#mrktpref.notification-bar .btn-success,\
#PopinGDPRCookie[style*="block"] .jsbd-popin-ok,\
#modal-rodo.in .btn-primary,\
.cookie-compliance-modal.in .btn-primary,\
.cookieconsent.show .btn[data-dm*="accept"],\
.cookie-wall-modal.in .btn.ja,\
#modal-consent.in .modal-consent-accept,\
.rodo #cookies.in .btn-primary,\
.js-cookie-alert.in .js-cookie-alert-accept,\
#modal_gdpr_intro_popup.in #gdpr-modal-btn-ok-agree,\
#consentButtonContainer > button[onclick*="sendAndRedirect"],\
#eu-consent[style*="block"] .btn.yes,\
.modal--gdpr.is-open .js-gdpr-consent,\
#cookiePopupModal.in .cookiepopup-agreed,\
.polityka-cookie-rodo[style*="block"] .button-zgoda,\
.ui-dialog.consent-modal[style*="block"] .js-btn-agree,\
#up-cookie.active .button[onclick*="setCookiePreference"],\
.RodoModal.in .close,\
.consent-popup form[action*="cookie-consent"] .consent-popup__button,\
#consent form[action*="cookie-consent"] .one-btn,\
#cookiewall-wrapper .button[href*="accept"],\
#cookieChoiceButtonAccept,\
.mod-cookie-consent[style*="block"] .btn-all-cookies,\
.c-layer--consent .layer-button--accept,\
.button.button-ok[onclick*="acceptAVG"],\
#meredithGdprConsentFormButton,\
#advanced-cookie-modal.in .cookie-accept,\
.show-modal .cookie-settings-manager-container .initial-dialog .js-accept-button,\
.cookie-settings-manager-container .initial-dialog[style*="block"] .js-accept-button,\
.gdprLightbox[data-module="gdprLightbox"] ._type_gdpr_agree,\
.cookie.showa #Row1_Column1_Cell1_CookieSettings_AdvancedSaveAccept,\
#core-cookie-container[style*="block"] .btn--agree,\
.cookie-consent-modal._show .action-primary,\
#dsgvoModal.show #dsvgo-banner__button,\
.basicLightbox--visible #accept-all-gdpr,\
#gdpr-modal.in .gdpr-modal__btn--accept,\
.cookiehint .btn.cookieagree,\
#cookiealert .modal.in .btn[href*="accept"],\
#lml-data-consent-accept,\
#CBCookieMsg.in .btn[onclick*="approveCookies"],\
#cookiewall-container .button[name="submit"],\
#cookie_disclaimer.in .cookie_disclaimer_button,\
.m-cookie.iziModal[style*="block"] .m-cookie__save2.button,\
kamino-cookie-policy .mat-raised-button,\
#surbma-gpga-modal[style*="block"] button,\
#GDPR.overlayBox .menuButton,\
#cookiebar .cookie-selection-button.accept,\
.modal.in .btn.close-modal-cookie,\
#consent-module[style*="block"] #consent-module-text-button,\
.modal #consentButton,\
#consent-modal[style*="block"] .lm_modal__modal__content__body__buttons__ok,\
.cookiesOverlay3Box #cookiesConsentOK,\
.bemCookieOverlay--activePopup .bemCookieOverlay__btn--save,\
#root main ~ div [data-gi-selector="reject-all-cookies"] ~ div a,\
.cookies-management .cookies-deny,\
.offcanvas.is-open .js-offcanvas-cookie-submit,\
.force--consent.show--consent #cs_save__btn,\
.force--consent.show--consent #s-sv-bn,\
#cookieNoticeModal.vrm-reveal[style*="block"] .vrm-reveal__icon--close',
'.cookie-banner .cookie-banner__buttons .cookie-banner__button--reject,\
.cookie-consent-banner .cookie-consent-banner__reject,\
.cookie-notification .cookie-notification__buttons .cookie-notification__reject,\
.cookie-policy-banner .cookie-policy-banner__buttons .cookie-policy-banner__reject,\
.cookie-warning .cookie-warning__buttons .cookie-warning__reject,\
.cookie-notice .cookie-notice__buttons .cookie-notice__reject,\
.cookie-alert .cookie-alert__buttons .cookie-alert__reject,\
.cookie-popup .cookie-popup__buttons .cookie-popup__reject,\
.cookie-modal .cookie-modal__buttons .cookie-modal__reject,\
.cookie-dialog .cookie-dialog__buttons .cookie-dialog__reject,\
.gdpr-banner .gdpr-banner__buttons .gdpr-banner__reject,\
.gdpr-modal .gdpr-modal__buttons .gdpr-modal__reject,\
.gdpr-notice .gdpr-notice__buttons .gdpr-notice__reject,\
.gdpr-popup .gdpr-popup__buttons .gdpr-popup__reject,\
.gdpr-dialog .gdpr-dialog__buttons .gdpr-dialog__reject,\
.privacy-banner .privacy-banner__buttons .privacy-banner__reject,\
.privacy-modal .privacy-modal__buttons .privacy-modal__reject,\
.privacy-notice .privacy-notice__buttons .privacy-notice__reject,\
.privacy-popup .privacy-popup__buttons .privacy-popup__reject,\
.privacy-dialog .privacy-dialog__buttons .privacy-dialog__reject',
'.consent-banner .consent-banner__buttons .consent-banner__reject,\
.consent-modal .consent-modal__buttons .consent-modal__reject,\
.consent-notice .consent-notice__buttons .consent-notice__reject,\
.consent-popup .consent-popup__buttons .consent-popup__reject,\
.consent-dialog .consent-dialog__buttons .consent-dialog__reject,\
.tracking-banner .tracking-banner__buttons .tracking-banner__reject,\
.tracking-modal .tracking-modal__buttons .tracking-modal__reject,\
.tracking-notice .tracking-notice__buttons .tracking-notice__reject,\
.tracking-popup .tracking-popup__buttons .tracking-popup__reject,\
.tracking-dialog .tracking-dialog__buttons .tracking-dialog__reject',
'.cookie-settings-modal .cookie-settings__reject,\
.cookie-settings-modal .cookie-settings__customize,\
.cookie-preferences-modal .cookie-preferences__reject,\
.cookie-preferences-modal .cookie-preferences__customize,\
.cookie-manager-modal .cookie-manager__reject,\
.cookie-manager-modal .cookie-manager__customize,\
.cookie-control-modal .cookie-control__reject,\
.cookie-control-modal .cookie-control__customize,\
.cookie-options-modal .cookie-options__reject,\
.cookie-options-modal .cookie-options__customize',
'.data-privacy-modal .data-privacy__reject,\
.data-privacy-modal .data-privacy__customize,\
.data-protection-modal .data-protection__reject,\
.data-protection-modal .data-protection__customize,\
.data-consent-modal .data-consent__reject,\
.data-consent-modal .data-consent__customize,\
.data-settings-modal .data-settings__reject,\
.data-settings-modal .data-settings__customize,\
.data-preferences-modal .data-preferences__reject,\
.data-preferences-modal .data-preferences__customize',
'.privacy-manager-modal .privacy-manager__reject,\
.privacy-manager-modal .privacy-manager__customize,\
.privacy-settings-modal .privacy-settings__reject,\
.privacy-settings-modal .privacy-settings__customize,\
.privacy-options-modal .privacy-options__reject,\
.privacy-options-modal .privacy-options__customize,\
.privacy-control-modal .privacy-control__reject,\
.privacy-control-modal .privacy-control__customize,\
.privacy-preferences-modal .privacy-preferences__reject,\
.privacy-preferences-modal .privacy-preferences__customize',
'.consent-manager-modal .consent-manager__reject,\
.consent-manager-modal .consent-manager__customize,\
.consent-settings-modal .consent-settings__reject,\
.consent-settings-modal .consent-settings__customize,\
.consent-options-modal .consent-options__reject,\
.consent-options-modal .consent-options__customize,\
.consent-control-modal .consent-control__reject,\
.consent-control-modal .consent-control__customize,\
.consent-preferences-modal .consent-preferences__reject,\
.consent-preferences-modal .consent-preferences__customize',
'.tracking-manager-modal .tracking-manager__reject,\
.tracking-manager-modal .tracking-manager__customize,\
.tracking-settings-modal .tracking-settings__reject,\
.tracking-settings-modal .tracking-settings__customize,\
.tracking-options-modal .tracking-options__reject,\
.tracking-options-modal .tracking-options__customize,\
.tracking-control-modal .tracking-control__reject,\
.tracking-control-modal .tracking-control__customize,\
.tracking-preferences-modal .tracking-preferences__reject,\
.tracking-preferences-modal .tracking-preferences__customize',
'.gdpr-manager-modal .gdpr-manager__reject,\
.gdpr-manager-modal .gdpr-manager__customize,\
.gdpr-settings-modal .gdpr-settings__reject,\
.gdpr-settings-modal .gdpr-settings__customize,\
.gdpr-options-modal .gdpr-options__reject,\
.gdpr-options-modal .gdpr-options__customize,\
.gdpr-control-modal .gdpr-control__reject,\
.gdpr-control-modal .gdpr-control__customize,\
.gdpr-preferences-modal .gdpr-preferences__reject,\
.gdpr-preferences-modal .gdpr-preferences__customize',
'div[class*="cookie-banner"] button[class*="reject"],\
div[class*="cookie-banner"] button[class*="decline"],\
div[class*="cookie-banner"] button[class*="settings"],\
div[id*="cookie-banner"] button[class*="reject"],\
div[id*="cookie-banner"] button[class*="decline"],\
div[id*="cookie-banner"] button[class*="settings"]',
'div[class*="cookie-consent"] button[class*="reject"],\
div[class*="cookie-consent"] button[class*="decline"],\
div[class*="cookie-consent"] button[class*="settings"],\
div[id*="cookie-consent"] button[class*="reject"],\
div[id*="cookie-consent"] button[class*="decline"],\
div[id*="cookie-consent"] button[class*="settings"]',
'div[class*="cookie-notice"] button[class*="reject"],\
div[class*="cookie-notice"] button[class*="decline"],\
div[class*="cookie-notice"] button[class*="settings"],\
div[id*="cookie-notice"] button[class*="reject"],\
div[id*="cookie-notice"] button[class*="decline"],\
div[id*="cookie-notice"] button[class*="settings"]',
'[data-*="cookie"] button[data-*="reject"],\
[data-*="cookie"] button[data-*="decline"],\
[data-*="cookie"] button[data-*="settings"],\
[data-*="gdpr"] button[data-*="reject"],\
[data-*="gdpr"] button[data-*="decline"],\
[data-*="gdpr"] button[data-*="settings"]',
'div[class*="cookie-layer"] button[class*="reject"],\
div[class*="cookie-layer"] button[class*="decline"],\
div[class*="cookie-layer"] button[class*="settings"],\
div[id*="cookie-layer"] button[class*="reject"],\
div[id*="cookie-layer"] button[class*="decline"],\
div[id*="cookie-layer"] button[class*="settings"]',
'div[class*="cookie-section"] button[class*="reject"],\
div[class*="cookie-section"] button[class*="decline"],\
div[class*="cookie-section"] button[class*="settings"],\
div[id*="cookie-section"] button[class*="reject"],\
div[id*="cookie-section"] button[class*="decline"],\
div[id*="cookie-section"] button[class*="settings"]',
'div[class*="cookie-container"] button[class*="reject"],\
div[class*="cookie-container"] button[class*="decline"],\
div[class*="cookie-container"] button[class*="settings"],\
div[id*="cookie-container"] button[class*="reject"],\
div[id*="cookie-container"] button[class*="decline"],\
div[id*="cookie-container"] button[class*="settings"]',
'[data-purpose*="cookie"] button[data-purpose*="reject"],\
[data-purpose*="cookie"] button[data-purpose*="decline"],\
[data-purpose*="cookie"] button[data-purpose*="settings"],\
[data-ref*="cookie"] button[data-ref*="reject"],\
[data-ref*="cookie"] button[data-ref*="decline"],\
[data-ref*="cookie"] button[data-ref*="settings"]',
'[id*="cookie-manager"] button[id*="reject"],\
[id*="cookie-manager"] button[id*="decline"],\
[id*="cookie-manager"] button[id*="settings"],\
[id*="cookie-control"] button[id*="reject"],\
[id*="cookie-control"] button[id*="decline"],\
[id*="cookie-control"] button[id*="settings"]',
'div[class*="vn-cookie"] button[class*="reject"],\
div[class*="vn-cookie"] button[class*="decline"],\
div[class*="vn-cookie"] button[class*="settings"],\
div[id*="vn-cookie"] button[class*="reject"],\
div[id*="vn-cookie"] button[class*="decline"],\
div[id*="vn-cookie"] button[class*="settings"]',
'div[class*="ecommerce"] button[class*="cookie-reject"],\
div[class*="ecommerce"] button[class*="cookie-decline"],\
div[class*="ecommerce"] button[class*="cookie-settings"],\
div[id*="ecommerce"] button[class*="cookie-reject"],\
div[id*="ecommerce"] button[class*="cookie-decline"],\
div[id*="ecommerce"] button[class*="cookie-settings"]',
'div[class*="news"] button[class*="cookie-reject"],\
div[class*="news"] button[class*="cookie-decline"],\
div[class*="news"] button[class*="cookie-settings"],\
div[id*="news"] button[class*="cookie-reject"],\
div[id*="news"] button[class*="cookie-decline"],\
div[id*="news"] button[class*="cookie-settings"]',
'div[class*="retail"] button[class*="cookie-reject"],\
div[class*="retail"] button[class*="cookie-decline"],\
div[class*="retail"] button[class*="cookie-settings"],\
div[id*="retail"] button[class*="cookie-reject"],\
div[id*="retail"] button[class*="cookie-decline"],\
div[id*="retail"] button[class*="cookie-settings"]',
'div[class*="gdpr"] button[class*="reject"],\
div[class*="gdpr"] button[class*="decline"],\
div[class*="gdpr"] button[class*="settings"],\
div[id*="gdpr"] button[class*="reject"],\
div[id*="gdpr"] button[class*="decline"],\
div[id*="gdpr"] button[class*="settings"]',
'div[class*="privacy"] button[class*="reject"],\
div[class*="privacy"] button[class*="decline"],\
div[class*="privacy"] button[class*="settings"],\
div[id*="privacy"] button[class*="reject"],\
div[id*="privacy"] button[class*="decline"],\
div[id*="privacy"] button[class*="settings"]',
'div[class*="bank"] button[class*="cookie-reject"],\
div[class*="bank"] button[class*="cookie-decline"],\
div[class*="bank"] button[class*="cookie-settings"],\
div[id*="bank"] button[class*="cookie-reject"],\
div[id*="bank"] button[class*="cookie-decline"],\
div[id*="bank"] button[class*="cookie-settings"]',
'div[class*="consent"] button[class*="reject"],\
div[class*="consent"] button[class*="decline"],\
div[class*="consent"] button[class*="settings"],\
div[id*="consent"] button[class*="reject"],\
div[id*="consent"] button[class*="decline"],\
div[id*="consent"] button[class*="settings"]',
'div[class*="notice"] button[class*="reject"],\
div[class*="notice"] button[class*="decline"],\
div[class*="notice"] button[class*="settings"],\
div[id*="notice"] button[class*="reject"],\
div[id*="notice"] button[class*="decline"],\
div[id*="notice"] button[class*="settings"]',
'div[class*="popup"] button[class*="reject"],\
div[class*="popup"] button[class*="decline"],\
div[class*="popup"] button[class*="settings"],\
div[id*="popup"] button[class*="reject"],\
div[id*="popup"] button[class*="decline"],\
div[id*="popup"] button[class*="settings"]',
'div[class*="eu-cookie-banner"] button[class*="reject"],\
div[class*="eu-cookie-banner"] button[class*="settings"]',
'div[class*="gdpr-notice"] button[class*="reject"],\
div[class*="gdpr-notice"] button[class*="settings"]',
'div[class*="privacy-consent"] button[class*="reject"],\
div[class*="privacy-consent"] button[class*="settings"]',
'div[class*="asia"] button[class*="cookie-reject"],\
div[class*="asia"] button[class*="cookie-decline"],\
div[class*="asia"] button[class*="cookie-settings"]',
'div[class*="europe"] button[class*="cookie-reject"],\
div[class*="europe"] button[class*="cookie-decline"],\
div[class*="europe"] button[class*="cookie-settings"]',
'div[class*="global"] button[class*="cookie-reject"],\
div[class*="global"] button[class*="cookie-decline"],\
div[class*="global"] button[class*="cookie-settings"]',
'div[class*="america"] button[class*="cookie-reject"],\
div[class*="america"] button[class*="cookie-decline"],\
div[class*="america"] button[class*="cookie-settings"]',
'div[class*="oceania"] button[class*="cookie-reject"],\
div[class*="oceania"] button[class*="cookie-decline"],\
div[class*="oceania"] button[class*="cookie-settings"]',
];
let currentChainElement = 0;
const classname = Math.random()
.toString(36)
.replace(/[^a-z]+/g, '');
// Search loop function
let searchGroupsLength = searchGroups.length,
searchPairsKeys = Object.keys(searchPairs),
searchPairsJoinedKeys = searchPairsKeys.join(','),
timeoutDuration = 300;
function querySelectorAllShadowRoot(selector, root = document) {
const elements = [];
const findElements = node => {
if (node.shadowRoot) {
node.shadowRoot.querySelectorAll(selector).forEach(el => elements.push(el));
node.shadowRoot.querySelectorAll('*').forEach(findElements);
}
};
root.querySelectorAll('*').forEach(findElements);
return elements;
}
function searchLoop(counter) {
if (document.cookie.indexOf('cookie_consent') !== -1) {
return;
}
const dynamicTimeout = Math.min(timeoutDuration * (counter + 1), 2000);
setTimeout(function () {
document.querySelectorAll(searchPairsJoinedKeys).forEach(function (box) {
searchPairsKeys.forEach(function (selector) {
if (box.matches(selector)) {
const shadowElements = querySelectorAllShadowRoot(searchPairs[selector].join(','), box);
shadowElements.forEach(button => {
if (button.click && !button.classList.contains(classname)) {
button.classList.add(classname);
if (typeof chrome == 'object' && chrome.runtime) chrome.runtime.sendMessage({ command: 'cookie_warning_dismissed', url: document.location.href });
button.click();
if (selector != '.message-container' && button.getAttribute('href') != '#cookieman-settings')
setTimeout(function () {
if (button) button.click();
}, 500);
timeoutDuration += 500;
}
});
}
});
});
document.querySelectorAll(searchGroups[counter % searchGroupsLength]).forEach(function (element) {
if (element.click && !element.classList.contains(classname)) {
element.classList.add(classname);
if (typeof chrome == 'object' && chrome.runtime) chrome.runtime.sendMessage({ command: 'cookie_warning_dismissed', url: document.location.href });
element.click();
if (element.getAttribute('aria-pressed') != 'true')
setTimeout(function () {
if (element) element.click();
}, 500);
timeoutDuration += 500;
}
});
if (counter < 100 * searchGroupsLength) {
searchLoop(counter + 1);
}
}, dynamicTimeout);
}
// Embeds handling
function handleEmbeds() {
var l = document.location,
is_audioboom = false,
is_dailymotion = false,
is_dailybuzz = false,
is_playerclipslaliga = false;
switch (l.hostname) {
case 'embeds.audioboom.com':
is_audioboom = true;
break;
case 'dailymotion.com':
case 'www.dailymotion.com':
is_dailymotion = l.pathname.indexOf('/embed') === 0;
break;
case 'geo.dailymotion.com':
is_dailymotion = l.pathname.indexOf('/player') === 0;
break;
case 'dailybuzz.nl':
is_dailybuzz = l.pathname.indexOf('/buzz/embed') === 0;
break;
case 'playerclipslaliga.tv':
is_playerclipslaliga = true;
break;
}
function searchEmbeds() {
setTimeout(function () {
if (is_audioboom) {
document.querySelectorAll('div[id^="cookie-modal"] .modal[style*="block"] .btn.mrs:not(.' + classname + ')').forEach(function (button) {
button.className += ' ' + classname;
button.click();
});
} else if (is_dailymotion) {
document.querySelectorAll('.np_DialogConsent-accept:not(.' + classname + '), .consent_screen-accept:not(.' + classname + ')').forEach(function (button) {
button.className += ' ' + classname;
button.click();
});
} else if (is_dailybuzz) {
document.querySelectorAll('#ask-consent #accept:not(.' + classname + ')').forEach(function (button) {
button.className += ' ' + classname;
button.click();
});
} else if (is_playerclipslaliga) {
document.querySelectorAll('#cookies button[onclick*="saveCookiesSelection"]:not(.' + classname + ')').forEach(function (button) {
button.className += ' ' + classname;
button.click();
});
} else {
return;
}
searchEmbeds();
}, 1000);
}
searchEmbeds();
}
// Initialize
var start = setInterval(function () {
var html = document.querySelector('html');
if (!html || /idc0_350/.test(html.className)) return;
clearInterval(start);
html.className += ' idc0_350';
searchLoop(0);
handleEmbeds();
}, 500);
var hostname = document.location.hostname.replace(/^w{2,3}\d*\./i, ''),
items = getItem(hostname);
if (items) {
(items instanceof Array ? items : [items]).forEach(function (item) {
let value = localStorage.getItem(item.key);
if (value == null || (item.strict && value != item.value)) {
localStorage.setItem(item.key, item.value);
counter++;
}
});
if (counter > 0) document.location.reload();
}
})();
@@ -0,0 +1,704 @@
// ==UserScript==
// @name Return YouTube Dislike
// @namespace https://www.returnyoutubedislike.com/
// @homepage https://www.returnyoutubedislike.com/
// @version 3.1.5
// @encoding utf-8
// @description Return of the YouTube Dislike, Based off https://www.returnyoutubedislike.com/
// @icon https://github.com/Anarios/return-youtube-dislike/raw/main/Icons/Return%20Youtube%20Dislike%20-%20Transparent.png
// @author Anarios & JRWR
// @match *://*.youtube.com/*
// @exclude *://music.youtube.com/*
// @exclude *://*.music.youtube.com/*
// @compatible chrome
// @compatible firefox
// @compatible opera
// @compatible safari
// @compatible edge
// @grant GM.xmlHttpRequest
// @connect youtube.com
// @grant GM_addStyle
// @run-at document-end
// @downloadURL https://update.greasyfork.org/scripts/436115/Return%20YouTube%20Dislike.user.js
// @updateURL https://update.greasyfork.org/scripts/436115/Return%20YouTube%20Dislike.meta.js
// ==/UserScript==
const extConfig = {
// BEGIN USER OPTIONS
// You may change the following variables to allowed values listed in the corresponding brackets (* means default). Keep the style and keywords intact.
showUpdatePopup: false, // [true, false*] Show a popup tab after extension update (See what's new)
disableVoteSubmission: false, // [true, false*] Disable like/dislike submission (Stops counting your likes and dislikes)
disableLogging: true, // [true*, false] Disable Logging API Response in JavaScript Console.
coloredThumbs: false, // [true, false*] Colorize thumbs (Use custom colors for thumb icons)
coloredBar: false, // [true, false*] Colorize ratio bar (Use custom colors for ratio bar)
colorTheme: "classic", // [classic*, accessible, neon] Color theme (red/green, blue/yellow, pink/cyan)
numberDisplayFormat: "compactShort", // [compactShort*, compactLong, standard] Number format (For non-English locale users, you may be able to improve appearance with a different option. Please file a feature request if your locale is not covered)
numberDisplayRoundDown: true, // [true*, false] Round down numbers (Show rounded down numbers)
tooltipPercentageMode: "none", // [none*, dash_like, dash_dislike, both, only_like, only_dislike] Mode of showing percentage in like/dislike bar tooltip.
numberDisplayReformatLikes: false, // [true, false*] Re-format like numbers (Make likes and dislikes format consistent)
rateBarEnabled: false, // [true, false*] Enables ratio bar under like/dislike buttons
// END USER OPTIONS
};
const LIKED_STATE = "LIKED_STATE";
const DISLIKED_STATE = "DISLIKED_STATE";
const NEUTRAL_STATE = "NEUTRAL_STATE";
let previousState = 3; //1=LIKED, 2=DISLIKED, 3=NEUTRAL
let likesvalue = 0;
let dislikesvalue = 0;
let preNavigateLikeButton = null;
let isMobile = location.hostname == "m.youtube.com";
let isShorts = () => location.pathname.startsWith("/shorts");
let mobileDislikes = 0;
function cLog(text, subtext = "") {
if (!extConfig.disableLogging) {
subtext = subtext.trim() === "" ? "" : `(${subtext})`;
console.log(`[Return YouTube Dislikes] ${text} ${subtext}`);
}
}
function isInViewport(element) {
const rect = element.getBoundingClientRect();
const height = innerHeight || document.documentElement.clientHeight;
const width = innerWidth || document.documentElement.clientWidth;
return (
// When short (channel) is ignored, the element (like/dislike AND short itself) is
// hidden with a 0 DOMRect. In this case, consider it outside of Viewport
!(rect.top == 0 && rect.left == 0 && rect.bottom == 0 && rect.right == 0) &&
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= height &&
rect.right <= width
);
}
function getButtons() {
if (isShorts()) {
let elements = document.querySelectorAll(
isMobile ? "ytm-like-button-renderer" : "#like-button > ytd-like-button-renderer",
);
for (let element of elements) {
if (isInViewport(element)) {
return element;
}
}
}
if (isMobile) {
return (
document.querySelector(".slim-video-action-bar-actions .segmented-buttons") ??
document.querySelector(".slim-video-action-bar-actions")
);
}
if (document.getElementById("menu-container")?.offsetParent === null) {
return (
document.querySelector("ytd-menu-renderer.ytd-watch-metadata > div") ??
document.querySelector("ytd-menu-renderer.ytd-video-primary-info-renderer > div")
);
} else {
return document.getElementById("menu-container")?.querySelector("#top-level-buttons-computed");
}
}
function getDislikeButton() {
if (getButtons().children[0].tagName === "YTD-SEGMENTED-LIKE-DISLIKE-BUTTON-RENDERER") {
if (getButtons().children[0].children[1] === undefined) {
return document.querySelector("#segmented-dislike-button");
} else {
return getButtons().children[0].children[1];
}
} else {
if (getButtons().querySelector("segmented-like-dislike-button-view-model")) {
const dislikeViewModel = getButtons().querySelector("dislike-button-view-model");
if (!dislikeViewModel) cLog("Dislike button wasn't added to DOM yet...");
return dislikeViewModel;
} else {
return getButtons().children[1];
}
}
}
function getLikeButton() {
return getButtons().children[0].tagName === "YTD-SEGMENTED-LIKE-DISLIKE-BUTTON-RENDERER"
? document.querySelector("#segmented-like-button") !== null
? document.querySelector("#segmented-like-button")
: getButtons().children[0].children[0]
: getButtons().querySelector("like-button-view-model") ?? getButtons().children[0];
}
function getLikeTextContainer() {
return (
getLikeButton().querySelector("#text") ??
getLikeButton().getElementsByTagName("yt-formatted-string")[0] ??
getLikeButton().querySelector("span[role='text']")
);
}
function getDislikeTextContainer() {
const dislikeButton = getDislikeButton();
let result =
dislikeButton?.querySelector("#text") ??
dislikeButton?.getElementsByTagName("yt-formatted-string")[0] ??
dislikeButton?.querySelector("span[role='text']");
if (result === null) {
let textSpan = document.createElement("span");
textSpan.id = "text";
textSpan.style.marginLeft = "6px";
dislikeButton?.querySelector("button").appendChild(textSpan);
if (dislikeButton) dislikeButton.querySelector("button").style.width = "auto";
result = textSpan;
}
return result;
}
function createObserver(options, callback) {
const observerWrapper = new Object();
observerWrapper.options = options;
observerWrapper.observer = new MutationObserver(callback);
observerWrapper.observe = function (element) {
this.observer.observe(element, this.options);
};
observerWrapper.disconnect = function () {
this.observer.disconnect();
};
return observerWrapper;
}
let shortsObserver = null;
if (isShorts() && !shortsObserver) {
cLog("Initializing shorts mutation observer");
shortsObserver = createObserver(
{
attributes: true,
},
(mutationList) => {
mutationList.forEach((mutation) => {
if (
mutation.type === "attributes" &&
mutation.target.nodeName === "TP-YT-PAPER-BUTTON" &&
mutation.target.id === "button"
) {
cLog("Short thumb button status changed");
if (mutation.target.getAttribute("aria-pressed") === "true") {
mutation.target.style.color =
mutation.target.parentElement.parentElement.id === "like-button"
? getColorFromTheme(true)
: getColorFromTheme(false);
} else {
mutation.target.style.color = "unset";
}
return;
}
cLog("Unexpected mutation observer event: " + mutation.target + mutation.type);
});
},
);
}
function isVideoLiked() {
if (isMobile) {
return getLikeButton().querySelector("button").getAttribute("aria-label") == "true";
}
return getLikeButton().classList.contains("style-default-active");
}
function isVideoDisliked() {
if (isMobile) {
return getDislikeButton()?.querySelector("button").getAttribute("aria-label") == "true";
}
return getDislikeButton()?.classList.contains("style-default-active");
}
function isVideoNotLiked() {
if (isMobile) {
return !isVideoLiked();
}
return getLikeButton().classList.contains("style-text");
}
function isVideoNotDisliked() {
if (isMobile) {
return !isVideoDisliked();
}
return getDislikeButton()?.classList.contains("style-text");
}
function checkForUserAvatarButton() {
if (isMobile) {
return;
}
if (document.querySelector("#avatar-btn")) {
return true;
} else {
return false;
}
}
function getState() {
if (isVideoLiked()) {
return LIKED_STATE;
}
if (isVideoDisliked()) {
return DISLIKED_STATE;
}
return NEUTRAL_STATE;
}
function setLikes(likesCount) {
if (isMobile) {
getButtons().children[0].querySelector(".button-renderer-text").innerText = likesCount;
return;
}
getLikeTextContainer().innerText = likesCount;
}
function setDislikes(dislikesCount) {
if (isMobile) {
mobileDislikes = dislikesCount;
return;
}
const _container = getDislikeTextContainer();
_container?.removeAttribute("is-empty");
if (_container?.innerText !== dislikesCount) {
_container.innerText = dislikesCount;
}
}
function getLikeCountFromButton() {
try {
if (isShorts()) {
//Youtube Shorts don't work with this query. It's not necessary; we can skip it and still see the results.
//It should be possible to fix this function, but it's not critical to showing the dislike count.
return false;
}
let likeButton =
getLikeButton().querySelector("yt-formatted-string#text") ?? getLikeButton().querySelector("button");
let likesStr = likeButton.getAttribute("aria-label").replace(/\D/g, "");
return likesStr.length > 0 ? parseInt(likesStr) : false;
} catch {
return false;
}
}
(typeof GM_addStyle != "undefined"
? GM_addStyle
: (styles) => {
let styleNode = document.createElement("style");
styleNode.type = "text/css";
styleNode.innerText = styles;
document.head.appendChild(styleNode);
})(`
#return-youtube-dislike-bar-container {
background: var(--yt-spec-icon-disabled);
border-radius: 2px;
}
#return-youtube-dislike-bar {
background: var(--yt-spec-text-primary);
border-radius: 2px;
transition: all 0.15s ease-in-out;
}
.ryd-tooltip {
position: absolute;
display: block;
height: 2px;
bottom: -10px;
}
.ryd-tooltip-bar-container {
width: 100%;
height: 2px;
position: absolute;
padding-top: 6px;
padding-bottom: 12px;
top: -6px;
}
ytd-menu-renderer.ytd-watch-metadata {
overflow-y: visible !important;
}
#top-level-buttons-computed {
position: relative !important;
}
`);
function createRateBar(likes, dislikes) {
if (isMobile || !extConfig.rateBarEnabled) {
return;
}
let rateBar = document.getElementById("return-youtube-dislike-bar-container");
const widthPx = getLikeButton().clientWidth + (getDislikeButton()?.clientWidth ?? 52);
const widthPercent = likes + dislikes > 0 ? (likes / (likes + dislikes)) * 100 : 50;
var likePercentage = parseFloat(widthPercent.toFixed(1));
const dislikePercentage = (100 - likePercentage).toLocaleString();
likePercentage = likePercentage.toLocaleString();
var tooltipInnerHTML;
switch (extConfig.tooltipPercentageMode) {
case "dash_like":
tooltipInnerHTML = `${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}&nbsp;&nbsp;-&nbsp;&nbsp;${likePercentage}%`;
break;
case "dash_dislike":
tooltipInnerHTML = `${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}&nbsp;&nbsp;-&nbsp;&nbsp;${dislikePercentage}%`;
break;
case "both":
tooltipInnerHTML = `${likePercentage}%&nbsp;/&nbsp;${dislikePercentage}%`;
break;
case "only_like":
tooltipInnerHTML = `${likePercentage}%`;
break;
case "only_dislike":
tooltipInnerHTML = `${dislikePercentage}%`;
break;
default:
tooltipInnerHTML = `${likes.toLocaleString()}&nbsp;/&nbsp;${dislikes.toLocaleString()}`;
}
if (!rateBar && !isMobile) {
let colorLikeStyle = "";
let colorDislikeStyle = "";
if (extConfig.coloredBar) {
colorLikeStyle = "; background-color: " + getColorFromTheme(true);
colorDislikeStyle = "; background-color: " + getColorFromTheme(false);
}
getButtons().insertAdjacentHTML(
"beforeend",
`
<div class="ryd-tooltip" style="width: ${widthPx}px">
<div class="ryd-tooltip-bar-container">
<div
id="return-youtube-dislike-bar-container"
style="width: 100%; height: 2px;${colorDislikeStyle}"
>
<div
id="return-youtube-dislike-bar"
style="width: ${widthPercent}%; height: 100%${colorDislikeStyle}"
></div>
</div>
</div>
<tp-yt-paper-tooltip position="top" id="ryd-dislike-tooltip" class="style-scope ytd-sentiment-bar-renderer" role="tooltip" tabindex="-1">
<!--css-build:shady-->${tooltipInnerHTML}
</tp-yt-paper-tooltip>
</div>
`,
);
let descriptionAndActionsElement = document.getElementById("top-row");
descriptionAndActionsElement.style.borderBottom = "1px solid var(--yt-spec-10-percent-layer)";
descriptionAndActionsElement.style.paddingBottom = "10px";
} else {
document.querySelector(".ryd-tooltip").style.width = widthPx + "px";
document.getElementById("return-youtube-dislike-bar").style.width = widthPercent + "%";
if (extConfig.coloredBar) {
document.getElementById("return-youtube-dislike-bar-container").style.backgroundColor = getColorFromTheme(false);
document.getElementById("return-youtube-dislike-bar").style.backgroundColor = getColorFromTheme(true);
}
}
}
function setState() {
cLog("Fetching votes...");
let statsSet = false;
fetch(`https://returnyoutubedislikeapi.com/votes?videoId=${getVideoId()}`).then((response) => {
response.json().then((json) => {
if (json && !("traceId" in response) && !statsSet) {
const { dislikes, likes } = json;
cLog(`Received count: ${dislikes}`);
likesvalue = likes;
dislikesvalue = dislikes;
setDislikes(numberFormat(dislikes));
if (extConfig.numberDisplayReformatLikes === true) {
const nativeLikes = getLikeCountFromButton();
if (nativeLikes !== false) {
setLikes(numberFormat(nativeLikes));
}
}
createRateBar(likes, dislikes);
if (extConfig.coloredThumbs === true) {
const dislikeButton = getDislikeButton();
if (isShorts()) {
// for shorts, leave deactived buttons in default color
const shortLikeButton = getLikeButton().querySelector("tp-yt-paper-button#button");
const shortDislikeButton = dislikeButton?.querySelector("tp-yt-paper-button#button");
if (shortLikeButton.getAttribute("aria-pressed") === "true") {
shortLikeButton.style.color = getColorFromTheme(true);
}
if (shortDislikeButton && shortDislikeButton.getAttribute("aria-pressed") === "true") {
shortDislikeButton.style.color = getColorFromTheme(false);
}
shortsObserver.observe(shortLikeButton);
shortsObserver.observe(shortDislikeButton);
} else {
getLikeButton().style.color = getColorFromTheme(true);
if (dislikeButton) dislikeButton.style.color = getColorFromTheme(false);
}
}
}
});
});
}
function updateDOMDislikes() {
setDislikes(numberFormat(dislikesvalue));
createRateBar(likesvalue, dislikesvalue);
}
function likeClicked() {
if (checkForUserAvatarButton() == true) {
if (previousState == 1) {
likesvalue--;
updateDOMDislikes();
previousState = 3;
} else if (previousState == 2) {
likesvalue++;
dislikesvalue--;
updateDOMDislikes();
previousState = 1;
} else if (previousState == 3) {
likesvalue++;
updateDOMDislikes();
previousState = 1;
}
if (extConfig.numberDisplayReformatLikes === true) {
const nativeLikes = getLikeCountFromButton();
if (nativeLikes !== false) {
setLikes(numberFormat(nativeLikes));
}
}
}
}
function dislikeClicked() {
if (checkForUserAvatarButton() == true) {
if (previousState == 3) {
dislikesvalue++;
updateDOMDislikes();
previousState = 2;
} else if (previousState == 2) {
dislikesvalue--;
updateDOMDislikes();
previousState = 3;
} else if (previousState == 1) {
likesvalue--;
dislikesvalue++;
updateDOMDislikes();
previousState = 2;
if (extConfig.numberDisplayReformatLikes === true) {
const nativeLikes = getLikeCountFromButton();
if (nativeLikes !== false) {
setLikes(numberFormat(nativeLikes));
}
}
}
}
}
function setInitialState() {
setState();
}
function getVideoId() {
const urlObject = new URL(window.location.href);
const pathname = urlObject.pathname;
if (pathname.startsWith("/clip")) {
return (document.querySelector("meta[itemprop='videoId']") || document.querySelector("meta[itemprop='identifier']")).content;
} else {
if (pathname.startsWith("/shorts")) {
return pathname.slice(8);
}
return urlObject.searchParams.get("v");
}
}
function isVideoLoaded() {
if (isMobile) {
return document.getElementById("player").getAttribute("loading") == "false";
}
const videoId = getVideoId();
return (
// desktop: spring 2024 UI
document.querySelector(`ytd-watch-grid[video-id='${videoId}']`) !== null ||
// desktop: older UI
document.querySelector(`ytd-watch-flexy[video-id='${videoId}']`) !== null ||
// mobile: no video-id attribute
document.querySelector('#player[loading="false"]:not([hidden])') !== null
);
}
function roundDown(num) {
if (num < 1000) return num;
const int = Math.floor(Math.log10(num) - 2);
const decimal = int + (int % 3 ? 1 : 0);
const value = Math.floor(num / 10 ** decimal);
return value * 10 ** decimal;
}
function numberFormat(numberState) {
let numberDisplay;
if (extConfig.numberDisplayRoundDown === false) {
numberDisplay = numberState;
} else {
numberDisplay = roundDown(numberState);
}
return getNumberFormatter(extConfig.numberDisplayFormat).format(numberDisplay);
}
function getNumberFormatter(optionSelect) {
let userLocales;
if (document.documentElement.lang) {
userLocales = document.documentElement.lang;
} else if (navigator.language) {
userLocales = navigator.language;
} else {
try {
userLocales = new URL(
Array.from(document.querySelectorAll("head > link[rel='search']"))
?.find((n) => n?.getAttribute("href")?.includes("?locale="))
?.getAttribute("href"),
)?.searchParams?.get("locale");
} catch {
cLog("Cannot find browser locale. Use en as default for number formatting.");
userLocales = "en";
}
}
let formatterNotation;
let formatterCompactDisplay;
switch (optionSelect) {
case "compactLong":
formatterNotation = "compact";
formatterCompactDisplay = "long";
break;
case "standard":
formatterNotation = "standard";
formatterCompactDisplay = "short";
break;
case "compactShort":
default:
formatterNotation = "compact";
formatterCompactDisplay = "short";
}
const formatter = Intl.NumberFormat(userLocales, {
notation: formatterNotation,
compactDisplay: formatterCompactDisplay,
});
return formatter;
}
function getColorFromTheme(voteIsLike) {
let colorString;
switch (extConfig.colorTheme) {
case "accessible":
if (voteIsLike === true) {
colorString = "dodgerblue";
} else {
colorString = "gold";
}
break;
case "neon":
if (voteIsLike === true) {
colorString = "aqua";
} else {
colorString = "magenta";
}
break;
case "classic":
default:
if (voteIsLike === true) {
colorString = "lime";
} else {
colorString = "red";
}
}
return colorString;
}
let smartimationObserver = null;
function setEventListeners(evt) {
let jsInitChecktimer;
function checkForJS_Finish() {
//console.log();
if (isShorts() || (getButtons()?.offsetParent && isVideoLoaded())) {
const buttons = getButtons();
const dislikeButton = getDislikeButton();
if (preNavigateLikeButton !== getLikeButton() && dislikeButton) {
cLog("Registering button listeners...");
try {
getLikeButton().addEventListener("click", likeClicked);
dislikeButton?.addEventListener("click", dislikeClicked);
getLikeButton().addEventListener("touchstart", likeClicked);
dislikeButton?.addEventListener("touchstart", dislikeClicked);
dislikeButton?.addEventListener("focusin", updateDOMDislikes);
dislikeButton?.addEventListener("focusout", updateDOMDislikes);
preNavigateLikeButton = getLikeButton();
if (!smartimationObserver) {
smartimationObserver = createObserver(
{
attributes: true,
subtree: true,
childList: true,
},
updateDOMDislikes,
);
smartimationObserver.container = null;
}
const smartimationContainer = buttons.querySelector("yt-smartimation");
if (smartimationContainer && smartimationObserver.container != smartimationContainer) {
cLog("Initializing smartimation mutation observer");
smartimationObserver.disconnect();
smartimationObserver.observe(smartimationContainer);
smartimationObserver.container = smartimationContainer;
}
} catch {
return;
} //Don't spam errors into the console
}
if (dislikeButton) {
setInitialState();
clearInterval(jsInitChecktimer);
}
}
}
cLog("Setting up...");
jsInitChecktimer = setInterval(checkForJS_Finish, 111);
}
(function () {
"use strict";
window.addEventListener("yt-navigate-finish", setEventListeners, true);
setEventListeners();
})();
if (isMobile) {
let originalPush = history.pushState;
history.pushState = function (...args) {
window.returnDislikeButtonlistenersSet = false;
setEventListeners(args[2]);
return originalPush.apply(history, args);
};
setInterval(() => {
const dislikeButton = getDislikeButton();
if (dislikeButton?.querySelector(".button-renderer-text") === null) {
getDislikeTextContainer().innerText = mobileDislikes;
} else {
if (dislikeButton) dislikeButton.querySelector(".button-renderer-text").innerText = mobileDislikes;
}
}, 1000);
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,18 @@
// ==UserScript==
// @name Startpage - Hide Ads
// @match https://www.startpage.com/*
// @run-at document-start
// ==/UserScript==
new MutationObserver(function(mutations) {
mutations.forEach((mutation) => {
if (mutation.type === 'childList') {
mutation.addedNodes.forEach((node) => {
if (node.nodeType === 1 && node.nodeName === 'DIV' && node.id === 'gcsa-top') {
node.remove();
this.disconnect();
}
});
}
});
}).observe(document, { childList: true, subtree: true });
@@ -0,0 +1,191 @@
// ==UserScript==
// @name TrackingTokenStripper
// @version 1.4
// @description Remove most of the annoying tracking token from URL parameters
// @license MIT
// @homepage https://blog.miniasp.com/
// @homepageURL https://blog.miniasp.com/
// @website https://www.facebook.com/will.fans
// @source https://github.com/doggy8088/TrackingTokenStripper/raw/refs/heads/master/TrackingTokenStripper.user.js
// @namespace https://github.com/doggy8088/TrackingTokenStripper
// @author Will Huang
// @match *://*/*
// @run-at document-start
// ==/UserScript==
(function () {
'use strict';
const oldReplaceState = history.replaceState;
history.replaceState = function replaceState() {
let ret = oldReplaceState.apply(this, arguments);
window.dispatchEvent(new Event('replacestate'));
window.dispatchEvent(new Event('locationchange'));
return ret;
};
window.addEventListener('popstate', () => {
window.dispatchEvent(new Event('locationchange'));
});
window.addEventListener('locationchange', function () {
executeActions();
});
executeActions();
let id = setInterval(executeActions, 500);
setTimeout(() => { clearInterval(id); }, 2000);
function executeActions() {
var s = TrackingTokenStripper(location.href)
// facebook
.remove('fbclid')
.removeByDomain('www.facebook.com', 'privacy_mutation_token')
.removeByDomain('www.facebook.com', 'acontext')
.removeByDomain('www.facebook.com', '__xts__[0]')
.removeByDomain('www.facebook.com', 'notif_t')
.removeByDomain('www.facebook.com', 'notif_id')
.removeByDomain('www.facebook.com', 'notif_ids[0]')
.removeByDomain('www.facebook.com', 'notif_ids[1]')
.removeByDomain('www.facebook.com', 'notif_ids[2]')
.removeByDomain('www.facebook.com', 'notif_ids[3]')
.removeByDomain('www.facebook.com', 'ref', 'notif')
.removeByDomain('www.facebook.com', 'ref=watch_permalink')
// Dropbox
.removeByDomain('www.dropbox.com', '_ad')
.removeByDomain('www.dropbox.com', '_camp')
.removeByDomain('www.dropbox.com', '_tk')
// YouTube
// https://youtu.be/4f-Y9G5ENPc?si=SHSu2hEdSbXGy4_Q
// https://www.youtube.com/embed/4f-Y9G5ENPc?si=GQFJV_nKMXxpiQb6
.removeByDomain('youtu.be', 'si')
.removeByDomain('www.youtube.com', 'si')
// Google Analytics
// https://support.google.com/analytics/answer/1033863?hl=en
.remove('utm_id')
.remove('utm_source')
.remove('utm_medium')
.remove('utm_campaign')
.remove('utm_term')
.remove('utm_content')
.remove('_ga')
// GA - others
.remove('utm_campaignid')
.remove('utm_cid')
.remove('utm_reader')
.remove('utm_referrer')
.remove('utm_name')
.remove('utm_social')
.remove('utm_social-type')
.remove('gclid')
.remove('igshid')
.remove('_hsenc')
.remove('_hsmi')
.remove('mc_cid')
.remove('mc_eid')
.remove('mkt_tok')
.remove('yclid')
.remove('_openstat')
// devblogs.microsoft.com
.removeByDomain('devblogs.microsoft.com', 'utm_issue')
.removeByDomain('devblogs.microsoft.com', 'utm_position')
.removeByDomain('devblogs.microsoft.com', 'utm_topic')
.removeByDomain('devblogs.microsoft.com', 'utm_section')
.removeByDomain('devblogs.microsoft.com', 'utm_cta')
.removeByDomain('devblogs.microsoft.com', 'utm_description')
.removeByDomain('devblogs.microsoft.com', 'ocid')
// Microsoft
.remove('wt.mc_id')
.removeByDomain('learn.microsoft.com', 'ocid')
.removeByDomain('learn.microsoft.com', 'redirectedfrom')
.removeByDomain('azure.microsoft.com', 'OCID')
.removeByDomain('azure.microsoft.com', 'ef_id')
.removeByDomain('www.msn.com', 'ocid')
.removeByDomain('www.msn.com', 'cvid')
// bilibili
.removeByDomain('www.bilibili.com', 'share_source')
.removeByDomain('www.bilibili.com', 'share_medium')
// Others
.remove('__tn__')
.remove('gclsrc')
.remove('itm_source')
.remove('itm_medium')
.remove('itm_campaign')
.remove('mc') // sendgrid.com
.remove('mcd') // sendgrid.com
.remove('cvosrc') // sendgrid.com
.remove('cr_cc') // https://blogs.microsoft.com/
.remove('sc_channel')
.remove('sc_campaign')
.remove('sc_geo')
.remove('trk')
.remove('sc_publisher')
.remove('trkCampaign')
.remove('sc_outcome')
.remove('sc_country')
.remove('__hstc')
.remove('__hssc')
.remove('__hsfp')
.remove('_gl')
// Yahoo News
.remove('guce_referrer')
.remove('guce_referrer_sig')
.toString();
if (s && location.href !== s) {
// console.log('Changing URL', s);
// location.href = s;
oldReplaceState.apply(history, [{}, '', s]);
}
function TrackingTokenStripper(url) {
const parsedUrl = new URL(url);
return {
remove(name, value) {
if (parsedUrl.searchParams.has(name)) {
if (value && value === parsedUrl.searchParams.get(name)) {
parsedUrl.searchParams.delete(name);
}
if (!value) {
parsedUrl.searchParams.delete(name);
}
}
return TrackingTokenStripper(parsedUrl.toString());
},
removeByDomain(domain, name) {
if (parsedUrl.hostname.toLocaleLowerCase() === domain.toLocaleLowerCase()) {
if (name.indexOf('=') >= 0) {
var [key, value] = name.split("=");
return this.remove(key, value);
} else {
return this.remove(name);
}
} else {
return this;
}
},
toString() {
return parsedUrl.toString();
}
}
}
}
})();
+17
View File
@@ -0,0 +1,17 @@
{config, ...}: {
programs.qutebrowser.keyBindings = {
normal."<Ctrl-w>" = "tab-close";
normal."<Ctrl-Tab>" = "tab-next";
normal."<Ctrl-Shift-Tab>" = "tab-prev";
normal."<Ctrl-b>" = "open file://${config.xdg.dataHome}/qutebrowser/bookmarks.html";
# Ctrl+c is used to leave the current mode and return to normal mode.
insert."<Ctrl-c>" = "mode-leave";
hint."<Ctrl-c>" = "mode-leave";
caret."<Ctrl-c>" = "mode-leave";
command."<Ctrl-c>" = "mode-leave";
prompt."<Ctrl-c>" = "mode-leave";
yesno."<Ctrl-c>" = "mode-leave";
register."<Ctrl-c>" = "mode-leave";
};
}
+30
View File
@@ -0,0 +1,30 @@
{
programs.qutebrowser.searchEngines = rec {
startpage = "https://www.startpage.com/sp/search?q={}";
mynixos = "https://mynixos.com/search?q={}";
duckduckgo = "https://duckduckgo.com/?q={}";
google = "https://google.com/search?hl=en&q={}";
yandex = "https://yandex.com/search/?text={}";
bing = "https://bing.com/search?q={}";
youtube = "https://youtube.com/results?search_query={}";
google-images = "https://google.com/search?hl=en&tbm=isch&q={}";
# AI
chatgpt = "https://chatgpt.com/?q={}";
claude = "https://claude.ai/new?q={}";
gemini = "https://gemini.google.com/app?q={}";
# Maps
amap = "https://maps.apple.com/?q={}";
gmap = "https://www.google.com/maps/search/{}";
# shortcuts
g = google;
n = mynixos;
gpt = chatgpt;
gem = gemini;
cla = claude;
DEFAULT = startpage;
};
}
+51
View File
@@ -0,0 +1,51 @@
{config, ...}: {
programs.qutebrowser = {
settings = {
url = rec {
default_page = "file://${config.xdg.dataHome}/qutebrowser/bookmarks.html";
start_pages = [default_page];
};
new_instance_open_target = "window";
"tabs.last_close" = "close";
"statusbar.widgets" = ["keypress" "url" "progress"];
# Adblock
"content.blocking.enabled" = true;
"content.blocking.method" = "adblock";
"content.blocking.adblock.lists" = [
"https://easylist.to/easylist/easylist.txt"
"https://easylist.to/easylist/easyprivacy.txt"
"https://secure.fanboy.co.nz/fanboy-cookiemonster.txt"
];
# Clipboard access (needed for Excalidraw, Cyberchef, etc.)
"content.javascript.clipboard" = "access";
# Downloads
"downloads.location.directory" = "~/Downloads";
"downloads.location.prompt" = false;
# Editor (Ctrl+e in text fields)
"editor.command" = ["ghostty" "-e" "nvim" "{}"];
# Tabs
# "tabs.show" = "switching";
# "tabs.show_switching_delay" = 3000;
# Scrollbar
"scrolling.bar" = "never";
# Statusbar
"statusbar.show" = "in-mode";
# Privacy
"content.geolocation" = false;
"content.cookies.accept" = "no-3rdparty";
};
extraConfig = ''
c.statusbar.padding = {'top': 6, 'bottom': 6, 'left': 8, 'right': 8}
c.tabs.padding = {'top': 6, 'bottom': 6, 'left': 8, 'right': 8}
'';
};
}
+23 -10
View File
@@ -1,14 +1,27 @@
{ pkgs, ... }: { {
xdg.dataFile = {
# Startpage - hide sponsored results
"qutebrowser/greasemonkey/startpage-no-ads.user.js".source =
./greasemonkey/startpage-no-ads.user.js;
home.packages = with pkgs; [ # Return YouTube Dislike
keyutils "qutebrowser/greasemonkey/return-youtube-dislike.user.js".source =
python3 ./greasemonkey/return-youtube-dislike.user.js;
python311Packages.pyperclip
python312Packages.tldextract
];
xdg.configFile."qutebrowser/userscripts/bitwarden" = { # SponsorBlock Lite - auto-skip sponsors on YouTube
source = ./userscripts/qute-bitwarden.py; "qutebrowser/greasemonkey/sponsorblock-lite.user.js".source =
executable = true; ./greasemonkey/sponsorblock-lite.user.js;
# Don't Track Me Google - remove Google tracking redirects
"qutebrowser/greasemonkey/dont-track-me-google.user.js".source =
./greasemonkey/dont-track-me-google.user.js;
# I don't care about cookies - auto-dismiss cookie banners
"qutebrowser/greasemonkey/i-dont-care-about-cookies.user.js".source =
./greasemonkey/i-dont-care-about-cookies.user.js;
# TrackingTokenStripper - remove tracking params from URLs (utm_*, fbclid, etc.)
"qutebrowser/greasemonkey/tracking-token-stripper.user.js".source =
./greasemonkey/tracking-token-stripper.user.js;
}; };
} }
@@ -1,291 +0,0 @@
#!/usr/bin/env python3
# SPDX-FileCopyrightText: Chris Braun (cryzed) <cryzed@googlemail.com>
#
# SPDX-License-Identifier: GPL-3.0-or-later
"""
Insert login information using Bitwarden CLI and a dmenu-compatible application
(e.g. dmenu, rofi -dmenu, ...).
"""
USAGE = """The domain of the site has to be in the name of the Bitwarden entry, for example: "github.com/cryzed" or
"websites/github.com". The login information is inserted by emulating key events using qutebrowser's fake-key command in this manner:
[USERNAME]<Tab>[PASSWORD], which is compatible with almost all login forms.
If enabled, with the `--totp` flag, it will also move the TOTP code to the
clipboard, much like the Firefox add-on.
You must log into Bitwarden CLI using `bw login` prior to use of this script.
The session key will be stored using keyctl for the number of seconds passed to
the --auto-lock option.
To use in qutebrowser, run: `spawn --userscript qute-bitwarden`
"""
EPILOG = """Dependencies: tldextract (Python 3 module), pyperclip (optional
Python module, used for TOTP codes), Bitwarden CLI (1.7.4 is known to work
but older versions may well also work)
WARNING: The login details are viewable as plaintext in qutebrowser's debug log
(qute://log) and might be shared if you decide to submit a crash report!"""
import argparse
import enum
import functools
import os
import shlex
import subprocess
import sys
import json
import tldextract
argument_parser = argparse.ArgumentParser(
description=__doc__,
usage=USAGE,
epilog=EPILOG,
)
argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL'))
argument_parser.add_argument('--dmenu-invocation', '-d', default='wofi --dmenu -i',
help='Invocation used to execute a dmenu-provider')
argument_parser.add_argument('--password-prompt-invocation', '-p', default='rofi -dmenu -p "Master Password" -password -lines 0',
help='Invocation used to prompt the user for their Bitwarden password')
argument_parser.add_argument('--no-insert-mode', '-n', dest='insert_mode', action='store_false',
help="Don't automatically enter insert mode")
argument_parser.add_argument('--totp', '-t', action='store_true',
help="Copy TOTP key to clipboard")
argument_parser.add_argument('--io-encoding', '-i', default='UTF-8',
help='Encoding used to communicate with subprocesses')
argument_parser.add_argument('--merge-candidates', '-m', action='store_true',
help='Merge pass candidates for fully-qualified and registered domain name')
argument_parser.add_argument('--auto-lock', type=int, default=900,
help='Automatically lock the vault after this many seconds')
group = argument_parser.add_mutually_exclusive_group()
group.add_argument('--username-only', '-e',
action='store_true', help='Only insert username')
group.add_argument('--password-only', '-w',
action='store_true', help='Only insert password')
group.add_argument('--totp-only', '-T',
action='store_true', help='Only insert totp code')
stderr = functools.partial(print, file=sys.stderr)
class ExitCodes(enum.IntEnum):
SUCCESS = 0
FAILURE = 1
# 1 is automatically used if Python throws an exception
NO_PASS_CANDIDATES = 2
COULD_NOT_MATCH_USERNAME = 3
COULD_NOT_MATCH_PASSWORD = 4
def qute_command(command):
with open(os.environ['QUTE_FIFO'], 'w') as fifo:
fifo.write(command + '\n')
fifo.flush()
def ask_password(password_prompt_invocation):
process = subprocess.run(
shlex.split(password_prompt_invocation),
text=True,
stdout=subprocess.PIPE,
)
if process.returncode > 0:
raise Exception('Could not unlock vault')
master_pass = process.stdout.strip()
return subprocess.check_output(
['bw', 'unlock', '--raw', master_pass],
text=True,
).strip()
def get_session_key(auto_lock, password_prompt_invocation):
if auto_lock == 0:
subprocess.call(['keyctl', 'purge', 'user', 'bw_session'])
return ask_password(password_prompt_invocation)
else:
process = subprocess.run(
['keyctl', 'request', 'user', 'bw_session'],
text=True,
stdout=subprocess.PIPE,
)
key_id = process.stdout.strip()
if process.returncode > 0:
session = ask_password(password_prompt_invocation)
if not session:
raise Exception('Could not unlock vault')
key_id = subprocess.check_output(
['keyctl', 'add', 'user', 'bw_session', session, '@u'],
text=True,
).strip()
if auto_lock > 0:
subprocess.call(['keyctl', 'timeout', str(key_id), str(auto_lock)])
return subprocess.check_output(
['keyctl', 'pipe', str(key_id)],
text=True,
).strip()
def pass_(domain, encoding, auto_lock, password_prompt_invocation):
session_key = get_session_key(auto_lock, password_prompt_invocation)
process = subprocess.run(
['bw', 'list', 'items', '--session', session_key, '--url', domain],
capture_output=True,
)
err = process.stderr.decode(encoding).strip()
if err:
msg = 'Bitwarden CLI returned for {:s} - {:s}'.format(domain, err)
stderr(msg)
if process.returncode:
return '[]'
out = process.stdout.decode(encoding).strip()
return out
def get_totp_code(selection_id, domain_name, encoding, auto_lock, password_prompt_invocation):
session_key = get_session_key(auto_lock, password_prompt_invocation)
process = subprocess.run(
['bw', 'get', 'totp', '--session', session_key, selection_id],
capture_output=True,
)
err = process.stderr.decode(encoding).strip()
if err:
# domain_name instead of selection_id to make it more user-friendly
msg = 'Bitwarden CLI returned for {:s} - {:s}'.format(domain_name, err)
stderr(msg)
if process.returncode:
return '[]'
out = process.stdout.decode(encoding).strip()
return out
def dmenu(items, invocation, encoding):
command = shlex.split(invocation)
process = subprocess.run(command, input='\n'.join(
items).encode(encoding), stdout=subprocess.PIPE)
return process.stdout.decode(encoding).strip()
def fake_key_raw(text):
for character in text:
# Escape all characters by default, space requires special handling
sequence = '" "' if character == ' ' else r'\{}'.format(character)
qute_command('fake-key {}'.format(sequence))
def main(arguments):
if not arguments.url:
argument_parser.print_help()
return ExitCodes.FAILURE
extract_result = tldextract.extract(arguments.url)
# Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains),
# the registered domain name and finally: the IPv4 address if that's what
# the URL represents
candidates = []
for target in filter(None, [
extract_result.fqdn,
extract_result.registered_domain,
extract_result.subdomain + '.' + extract_result.domain,
extract_result.domain,
extract_result.ipv4]):
target_candidates = json.loads(
pass_(
target,
arguments.io_encoding,
arguments.auto_lock,
arguments.password_prompt_invocation,
)
)
if not target_candidates:
continue
candidates = candidates + target_candidates
if not arguments.merge_candidates:
break
else:
if not candidates:
stderr('No pass candidates for URL {!r} found!'.format(
arguments.url))
return ExitCodes.NO_PASS_CANDIDATES
if len(candidates) == 1:
selection = candidates.pop()
else:
choices = ['{:s} | {:s}'.format(c['name'], c['login']['username']) for c in candidates]
choice = dmenu(choices, arguments.dmenu_invocation, arguments.io_encoding)
choice_tokens = choice.split('|')
choice_name = choice_tokens[0].strip()
choice_username = choice_tokens[1].strip()
selection = next((c for (i, c) in enumerate(candidates)
if c['name'] == choice_name
and c['login']['username'] == choice_username),
None)
# Nothing was selected, simply return
if not selection:
return ExitCodes.SUCCESS
username = selection['login']['username']
password = selection['login']['password']
totp = selection['login']['totp']
if arguments.username_only:
fake_key_raw(username)
elif arguments.password_only:
fake_key_raw(password)
elif arguments.totp_only:
# No point in moving it to the clipboard in this case
fake_key_raw(
get_totp_code(
selection['id'],
selection['name'],
arguments.io_encoding,
arguments.auto_lock,
arguments.password_prompt_invocation,
)
)
else:
# Enter username and password using fake-key and <Tab> (which seems to work almost universally), then switch
# back into insert-mode, so the form can be directly submitted by
# hitting enter afterwards
fake_key_raw(username)
qute_command('fake-key <Tab>')
fake_key_raw(password)
if arguments.insert_mode:
qute_command('mode-enter insert')
# If it finds a TOTP code, it copies it to the clipboard,
# which is the same behavior as the Firefox add-on.
if not arguments.totp_only and totp and arguments.totp:
# The import is done here, to make pyperclip an optional dependency
import pyperclip
pyperclip.copy(
get_totp_code(
selection['id'],
selection['name'],
arguments.io_encoding,
arguments.auto_lock,
arguments.password_prompt_invocation,
)
)
return ExitCodes.SUCCESS
if __name__ == '__main__':
arguments = argument_parser.parse_args()
sys.exit(main(arguments))

Some files were not shown because too many files have changed in this diff Show More