204 Commits

Author SHA1 Message Date
Hadi 5c7d3431bd fix package panel
Former-commit-id: 6ce19fb663
2025-04-18 14:58:38 +02:00
Hadi 1720aae3b3 start services on hyprland exec
Former-commit-id: 4530d9063c
2025-04-18 14:34:54 +02:00
Hadi 73d09fd235 change mime
Former-commit-id: 04bf9cad16
2025-04-18 14:09:34 +02:00
Hadi 8c40743662 add apps
Former-commit-id: 9a4ddf29ac
2025-04-18 14:09:28 +02:00
Hadi e8535bc99a UWSM Hyprland
Former-commit-id: 5bfd891d39
2025-04-18 14:09:24 +02:00
Hadi c61817b21e change $BROWSER var
Former-commit-id: 4cb131cd97
2025-04-18 11:57:42 +02:00
Hadi ca4c787631 theme change
Former-commit-id: 3a51928e3f
2025-04-18 11:51:55 +02:00
Hadi 7d2d98cb59 zen desktop file change
Former-commit-id: 27b8f8dbe1
2025-04-18 11:51:33 +02:00
Hadi 403cf85504 remove curline on markdown
Former-commit-id: cc0898f848
2025-04-18 11:51:20 +02:00
Hadi 1d334c4d64 change my keyboard backlight depending on the battery lvl
Former-commit-id: 2cfc92bca1
2025-04-18 10:18:21 +02:00
Hadi 2e35441da7 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 d294c68aa6 not working as expected
Former-commit-id: 59b8ade974
2025-04-18 09:12:22 +02:00
Hadi 939655e107 change backup browser
Former-commit-id: 6ea33fc39b
2025-04-17 09:37:35 +02:00
Hadi cb01305d5f update flakes
Former-commit-id: c2d25d0f7d
2025-04-17 09:32:46 +02:00
Hadi 007b39acd8 edit monitors configuration, now working with my dock!!
Former-commit-id: d76e83c09c
2025-04-16 19:45:38 +02:00
Hadi d075f6902e add Aerial (tags)
Former-commit-id: 44686a7b38
2025-04-16 19:45:24 +02:00
Hadi 1c153fb5f7 add reset search
Former-commit-id: 05b022f664
2025-04-16 19:45:17 +02:00
Hadi 027b2f1a99 add alias to force obsidian launch
Former-commit-id: c641bc645b
2025-04-15 18:39:37 +02:00
Hadi c3d63aece5 add portal from inputs
Former-commit-id: e442622024
2025-04-15 18:38:52 +02:00
Hadi 4967c75013 edit nvidia config
Former-commit-id: a30fa6288f
2025-04-15 18:38:42 +02:00
Hadi ec0b98a2fb remove getty config
Former-commit-id: 6a6e8acff4
2025-04-15 18:38:31 +02:00
Hadi 940e1ba35b edit function
Former-commit-id: 2e36e3da64
2025-04-15 17:57:16 +02:00
Hadi e53b21b061 anyrun flake
Former-commit-id: 8fcb27d514
2025-04-15 17:10:26 +02:00
Hadi 1ac5cb0321 add n4c alias
Former-commit-id: a77128b56d
2025-04-14 13:07:02 +02:00
Hadi 4959a35759 remove anyrun
Former-commit-id: f49afa5f5d
2025-04-14 09:50:17 +02:00
Hadi e6e74d18a9 update flake
Former-commit-id: f4829e758e
2025-04-14 09:49:40 +02:00
Hadi 2213c3357b add nixshell to zsh & starship
Former-commit-id: 7b04553470
2025-04-11 16:32:23 +02:00
Hadi 40c1319247 hide desktop navigation
Former-commit-id: 63e4cee9b0
2025-04-09 09:20:26 +02:00
Hadi e059a82de5 test
Former-commit-id: 366b3afc37
2025-04-08 15:19:59 +02:00
Hadi 160aeda5e0 edit colors
Former-commit-id: 17da2378d7
2025-04-08 15:03:12 +02:00
Hadi a8a239d64d update flake
Former-commit-id: 1d0c26f760
2025-04-05 22:20:11 +02:00
Hadi 341d4aa484 update flake
Former-commit-id: e0a837a434
2025-04-05 21:56:33 +02:00
Hadi 89edce89c0 edit glance dashboard
Former-commit-id: b4878ea48a
2025-04-05 20:49:58 +02:00
Hadi 7ee33bcbed update
Former-commit-id: f86839d03e
2025-04-05 14:22:12 +02:00
Hadi 38ea4789cc init anyrun config
Former-commit-id: 67bdbb09a3
2025-04-05 14:22:06 +02:00
Hadi 8bb7f1d31b update hyprpanel config
Former-commit-id: 36248551d9
2025-04-05 14:21:55 +02:00
Hadi 7c5f36b3d2 fix search-nix-api
Former-commit-id: 0398d077e5
2025-04-05 14:04:06 +02:00
Hadi 001a7f89bc Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: bc52572df5
2025-04-04 20:32:54 +02:00
Hadi ebcb53e7bb add nixos-search-api
Former-commit-id: b8955cc31a
2025-04-04 20:32:50 +02:00
Hadi 835641feea update
Former-commit-id: ee4508203b
2025-04-04 15:42:53 +02:00
Hadi 880e9c56f1 multiple conf edit
Former-commit-id: 40f5fbc6b1
2025-04-04 15:42:46 +02:00
Hadi 004ed1b728 add tailscale conf to use exit node
Former-commit-id: f1482b5c18
2025-04-04 15:42:39 +02:00
Hadi 69c44fd1ab add priority to cache.nixos.org
Former-commit-id: c364afa343
2025-04-04 15:42:20 +02:00
Hadi 97d6482b1c add clock
Former-commit-id: 286e47e3a9
2025-04-04 15:41:47 +02:00
Hadi 069681999f zen wan't this
Former-commit-id: 4be613c256
2025-04-04 15:41:19 +02:00
Hadi ae69dd7280 add window2rules (ty fufuxan)
Former-commit-id: 3c8a07b9c4
2025-04-04 15:41:00 +02:00
Hadi 9917d453bc edit kitty confi (Url, copy)
Former-commit-id: aa9ce824c4
2025-04-04 15:40:37 +02:00
Hadi 16edacecdc Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: 6ccbbc78f1
2025-04-03 17:40:05 +02:00
Hadi 8625bfe08b fix meali
Former-commit-id: cd395e5987
2025-04-03 17:40:01 +02:00
Hadi 8d83297d4e init nixos search api
Former-commit-id: 0770bedfdb
2025-04-03 17:39:42 +02:00
Hadi 35a2831bcc fix issue
Former-commit-id: c110983dcf
2025-04-01 20:43:03 +02:00
Hadi bebe244701 lsp edit config
Former-commit-id: ee38dd75dc
2025-04-01 20:42:58 +02:00
Hadi 2dda9d80bf lsp config
Former-commit-id: 10dffe8d92
2025-04-01 20:22:27 +02:00
Hadi 19d285973a new function for copying text to chatgpt
Former-commit-id: eb1f6b2e8b
2025-04-01 20:22:23 +02:00
Hadi e1e42c9fad fix temp bug
Former-commit-id: 757224a73f
2025-04-01 11:25:47 +02:00
Hadi 9191c95265 remove copilot temp
Former-commit-id: 09698790b9
2025-03-31 20:23:40 +02:00
Hadi c23988dbd8 add 'git add .'
Former-commit-id: 8dc339f0cc
2025-03-31 13:46:44 +02:00
Hadi 6cf43f5f04 add air
Former-commit-id: 21d9ddd0fc
2025-03-31 13:46:39 +02:00
Hadi 74b64b98b1 edit theme
Former-commit-id: f97a9f397c
2025-03-31 13:19:15 +02:00
Hadi f1ba5fa41f add jpeg optimisation bin
Former-commit-id: 684c11ecda
2025-03-31 13:18:56 +02:00
Hadi 2caa1ab9f6 remove cursor highlighter
Former-commit-id: 87eedfc74a
2025-03-31 13:18:41 +02:00
Hadi afc37d664d edit config
Former-commit-id: 67d14dbb44
2025-03-27 15:40:04 +01:00
Hadi 36d0f439dc hyprspace config update
Former-commit-id: 676eed1fdf
2025-03-27 15:39:33 +01:00
Hadi 36070cc91a remove batsignal
Former-commit-id: 2d76df1b85
2025-03-27 15:39:26 +01:00
Hadi da66a509a8 nixy script update
Former-commit-id: 4fd31d6de8
2025-03-27 15:39:21 +01:00
Hadi f894f27326 zen config update
Former-commit-id: d6d7bb9b9b
2025-03-27 15:39:14 +01:00
Hadi 449e887f32 thunar new icons
Former-commit-id: dd311b1292
2025-03-27 15:39:10 +01:00
Hadi 053f18a513 zsh config update
Former-commit-id: ffa3817383
2025-03-27 15:39:06 +01:00
Hadi 19073bc724 edit git rebase
Former-commit-id: c96034e3ad
2025-03-27 14:59:54 +01:00
Hadi d84e40a207 Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: d827e751ab
2025-03-27 14:59:46 +01:00
Hadi 05a0fef0b2 add awesome wallpapers
Former-commit-id: 3fbc9691b5
2025-03-27 14:57:19 +01:00
github-actions f9feaac752 Update README.md (auto)
Former-commit-id: b9819c5c4d
2025-03-27 12:21:05 +00:00
Hadi 47c47eb961 change wallpapers repo
Former-commit-id: 5d0625de2a
2025-03-27 13:20:37 +01:00
github-actions 194348085a Update SCRIPTS.md (auto)
Former-commit-id: 59830dc9ff
2025-03-26 18:45:15 +00:00
Hadi eb8e102ff6 Edit pickers
Former-commit-id: 088d50c9b3
2025-03-26 17:24:34 +01:00
Hadi fad1e7ac5b Change notification opacity
Former-commit-id: f07a41a7d1
2025-03-26 17:01:59 +01:00
Hadi 623b64d230 Change theme
Former-commit-id: 3f1421b491
2025-03-26 17:00:25 +01:00
Hadi fb27b3101b Send exit code of the command
Former-commit-id: 6994b95d78
2025-03-26 16:59:51 +01:00
Hadi 7288a39da1 Sleep if failed
Former-commit-id: 3c4c639552
2025-03-26 16:59:41 +01:00
Hadi c0e00c562e improve documentation
Former-commit-id: 0409a4db26
2025-03-26 16:01:34 +01:00
github-actions 4cf9c386bd Update README.md (auto)
Former-commit-id: 29bebce5cd
2025-03-26 14:39:13 +00:00
Hadi e0d96ef5cb Init text color on wallpaper
Former-commit-id: c0dfbe8249
2025-03-26 15:38:53 +01:00
Hadi b4e2509a1d edit readme
Former-commit-id: 0f27406bb4
2025-03-26 10:57:37 +01:00
Hadi 06ac6221f2 fix copilot on markdown files
Former-commit-id: 2ac4321f7b
2025-03-26 10:30:04 +01:00
Hadi 450b88406c Edit hardware conf
Former-commit-id: b6bd84fc3b
2025-03-25 13:32:50 +01:00
Hadi eb0e338ea5 no password for rebuild
Former-commit-id: f31c271d7b
2025-03-24 15:58:45 +01:00
Hadi a2fc942aa0 floaterm init: Quick nixy inside nvim
Former-commit-id: 5d3399ebc3
2025-03-24 15:13:58 +01:00
Hadi daaf3a8432 remove border on fzf
Former-commit-id: 96fb0bd8f0
2025-03-24 15:13:38 +01:00
Hadi 60c1a729fa change the inactive border
Former-commit-id: 58a9056c90
2025-03-24 15:13:32 +01:00
Hadi a457cbe633 let's try the one from hyprpanel
Former-commit-id: bb9a6b743c
2025-03-24 14:07:04 +01:00
Hadi ae988b5f93 change notifications theme
Former-commit-id: a26542e0ba
2025-03-24 14:06:55 +01:00
Hadi 829debe331 run tailscale without password
Former-commit-id: d495ce1d57
2025-03-24 13:18:55 +01:00
Hadi a3a7e515ce add what's next
Former-commit-id: c52657df22
2025-03-24 13:18:32 +01:00
Hadi 15d7a32642 default virtualHost
Former-commit-id: edeedda316
2025-03-24 13:15:37 +01:00
Hadi 2e3ff65b70 add mealie to glance
Former-commit-id: f14fa50742
2025-03-24 13:15:30 +01:00
Hadi fffd17a39c mealie init
Former-commit-id: bb02792bf4
2025-03-24 13:15:10 +01:00
Hadi 2e01f54d0e edit secrets
Former-commit-id: 2493fb0dfe
2025-03-24 13:15:02 +01:00
Hadi d49e7d41f4 good one
Former-commit-id: 9ba8a67c69
2025-03-24 10:17:51 +01:00
Hadi 3599deb6aa new secret
Former-commit-id: e3c711da58
2025-03-24 10:13:55 +01:00
Hadi 0c84342ac5 edit description
Former-commit-id: e0ddc9786e
2025-03-22 17:55:12 +01:00
Hadi 3212f23387 change font
Former-commit-id: f75dfd8456
2025-03-22 17:47:03 +01:00
Hadi 93b2a398ba update mimeapps
Former-commit-id: 8c43e65000
2025-03-22 17:46:47 +01:00
Hadi f3d888a5b3 Thunar bookmarks
Former-commit-id: e6244ea98d
2025-03-22 17:25:17 +01:00
Hadi 6515d0774d change nixvim config
Former-commit-id: 30009bcafb
2025-03-22 13:21:33 +01:00
Hadi 0687baf62d change zen browser flake
Former-commit-id: 1bd70e403f
2025-03-22 13:21:20 +01:00
Hadi 74072c04fc add trusted nix caches
Former-commit-id: d438abe210
2025-03-22 13:20:42 +01:00
Hadi d0fbd422df Spotify theme update
Former-commit-id: f54e69719b
2025-03-21 21:40:35 +01:00
github-actions 00b7e0f34b Update README.md (auto)
Former-commit-id: 12cf7e7592
2025-03-21 20:18:45 +00:00
Hadi 23173b891e update documentation
Former-commit-id: 82d8d6e1a7
2025-03-21 21:18:25 +01:00
github-actions 8652824561 Update README.md (auto)
Former-commit-id: a9d9f24228
2025-03-21 20:01:56 +00:00
Hadi ae65eb0e57 update documentation
Former-commit-id: 9c7ca1adcb
2025-03-21 21:01:38 +01:00
Hadi efe9046596 old todolist
Former-commit-id: 07d1fb6c49
2025-03-21 21:00:26 +01:00
Hadi 2bf71ce9a0 add resources dashboard
Former-commit-id: 12912aec57
2025-03-21 14:56:06 +01:00
Hadi 4df69215be Nixvim config update: +Snacks, -telescope
Former-commit-id: 9cc35a7039
2025-03-21 14:55:38 +01:00
Hadi deaa8757e7 change wofi size
Former-commit-id: ea3b343523
2025-03-21 14:55:08 +01:00
Hadi 66fe33f6ea change theme
Former-commit-id: 97ee9b6033
2025-03-21 14:55:00 +01:00
Hadi 6c4104a9e6 edit secrets
Former-commit-id: 0e057dd54d
2025-03-20 17:50:53 +01:00
Hadi 5cb1dd90bc edit secrets
Former-commit-id: 0d96b89c7e
2025-03-20 15:15:29 +01:00
Hadi ce3841586e secrets edit
Former-commit-id: 42bb5612ab
2025-03-20 15:05:43 +01:00
Hadi 21b94c6764 secrets edit
Former-commit-id: 2519a9ec70
2025-03-20 14:47:44 +01:00
Hadi 40745601ed Merge branch 'main' of github.com:anotherhadi/nixy
Former-commit-id: dfd985f3c0
2025-03-20 14:16:13 +01:00
Hadi 04d3544450 update
Former-commit-id: 00b406b56a
2025-03-20 14:15:56 +01:00
Hadi b92753c020 arr
Former-commit-id: a4874d18d2
2025-03-19 22:53:29 +01:00
Hadi 42dea7172e add recyclarr
Former-commit-id: 9a2f22a571
2025-03-19 22:07:56 +01:00
Hadi a03866aab6 y
Former-commit-id: 9863bdbdd0
2025-03-19 22:05:17 +01:00
Hadi ba6a13dd27 add wg conf
Former-commit-id: 82c51c85d9
2025-03-19 21:57:09 +01:00
Hadi ef49fff185 init hoarder
Former-commit-id: 1f4205a1d1
2025-03-19 19:41:41 +01:00
Hadi 7b86425acf add secret for hoarder
Former-commit-id: d2b3819779
2025-03-19 19:27:22 +01:00
Hadi d222d38d23 update modules
Former-commit-id: ae06546eb7
2025-03-19 19:25:37 +01:00
Hadi 78ebef4cc4 woops
Former-commit-id: 78245dc92b
2025-03-19 18:25:38 +01:00
Hadi 440fd90460 add adguard
Former-commit-id: 2db05d7d2e
2025-03-19 18:18:34 +01:00
Hadi 0ba2f306d5 test
Former-commit-id: 5c70995da5
2025-03-19 18:17:04 +01:00
Hadi 6952508638 adguard + glance
Former-commit-id: bb0f6279fd
2025-03-19 18:15:42 +01:00
Hadi 701afe0b97 updates
Former-commit-id: d2d113fab5
2025-03-19 15:46:23 +01:00
Hadi 71c269bc7c add nextcloud root password
Former-commit-id: 36ecdde469
2025-03-19 15:05:01 +01:00
Hadi 7af9f66b5c add dns challenge token
Former-commit-id: b150bbef08
2025-03-19 14:09:35 +01:00
Hadi c4657c96ef ui
Former-commit-id: 7db62269d4
2025-03-19 14:00:09 +01:00
Hadi e7e50ffdd7 add modules
Former-commit-id: d199f35824
2025-03-19 13:55:03 +01:00
Hadi ccd495a7df edit secrets
Former-commit-id: bfbb4b54c3
2025-03-19 10:20:51 +01:00
Hadi 1cdeb2dfb6 testing
Former-commit-id: 8242da9bcb
2025-03-19 10:11:56 +01:00
Hadi 1794861962 add secrets to configuration
Former-commit-id: 4f415df0ce
2025-03-19 09:52:39 +01:00
Hadi da4557f6e9 change secrets
Former-commit-id: 9bf66b26cf
2025-03-19 09:51:46 +01:00
Hadi b6cdb6e520 add hostname
Former-commit-id: 151a4ee7a0
2025-03-19 09:35:06 +01:00
Hadi b84fe4c60b add hardware-config
Former-commit-id: cd5c015c7a
2025-03-19 09:27:46 +01:00
Hadi 220a69f276 add tailscale
Former-commit-id: 40de9b5f5b
2025-03-18 23:45:39 +01:00
Hadi 83b8a846b4 update
Former-commit-id: dbcc0a096a
2025-03-18 23:36:54 +01:00
Hadi 54fe95f5e2 add jack flake
Former-commit-id: bb2cc5adf6
2025-03-18 23:11:20 +01:00
Hadi e59e059fc7 init server modules
Former-commit-id: 98cf8e99b0
2025-03-18 23:09:42 +01:00
Hadi 907133d300 flake update
Former-commit-id: 05c46a39c0
2025-03-18 22:23:55 +01:00
Hadi e8c3a26dbb change blur size
Former-commit-id: 58654d5cbd
2025-03-18 21:53:35 +01:00
Hadi a3b0c62904 change theme
Former-commit-id: 4df9852b7e
2025-03-18 21:53:01 +01:00
Hadi c414653c75 add env var
Former-commit-id: 9fe06a0cfb
2025-03-18 21:52:43 +01:00
Hadi dd782f6ac5 grub theme
Former-commit-id: 73bca2fbfb
2025-03-18 21:52:39 +01:00
Hadi a83a9a2c42 go back to systemd-boot
Former-commit-id: 5a8bdffc2a
2025-03-18 21:52:32 +01:00
Hadi 4b41e5a98a I'm trying things
Former-commit-id: f24415e320
2025-03-18 21:52:12 +01:00
Hadi 25bd6cdc93 add render-markdown to cmp
Former-commit-id: 7c54507f0f
2025-03-18 21:52:03 +01:00
Hadi ae9e720b0e switch to grub
Former-commit-id: 57fa8d152a
2025-03-13 17:03:05 +01:00
Hadi 370af13a74 add grub config
Former-commit-id: 2183824c34
2025-03-13 17:02:58 +01:00
Hadi 1680642b50 attempt to hide tty getty login
Former-commit-id: 545c66ebc3
2025-03-13 13:52:54 +01:00
Hadi 20a7ffc7f5 darker color for hyprlock
Former-commit-id: 967879b3f4
2025-03-13 13:39:33 +01:00
Hadi 28640f6fc4 change background image
Former-commit-id: 1da1d91787
2025-03-13 13:05:46 +01:00
Hadi d775962afe change to sddm
Former-commit-id: c89304c621
2025-03-13 13:05:40 +01:00
Hadi f66c06a489 handled by stylix now
Former-commit-id: 93ce3e73c0
2025-03-13 13:05:26 +01:00
Hadi 5154b31385 change colors
Former-commit-id: 3ed69ab1a5
2025-03-11 13:42:00 +01:00
Hadi b0a379642d hyprland config update
Former-commit-id: 0d442f1702
2025-03-11 09:48:33 +01:00
Hadi fb97929c36 remove protonmail desktop
Former-commit-id: aa95347035
2025-03-11 09:48:21 +01:00
Hadi 20242295ce add reverseSync cap
Former-commit-id: 3ec054d661
2025-03-11 09:48:14 +01:00
Hadi ab4d67768c update flakes
Former-commit-id: 92ae9a2f41
2025-03-11 09:46:32 +01:00
Hadi 2df04620c3 remove old gtk theme
Former-commit-id: 483d0efa60
2025-03-06 09:49:20 +01:00
Hadi 8a2d188e49 add avatar to panel
Former-commit-id: 9f3fd551b9
2025-03-05 16:57:56 +01:00
Hadi 04ca1a3fba add env var & cache
Former-commit-id: 1675e96793
2025-03-05 16:52:40 +01:00
Hadi 8d23a0e6e2 hardwareclock confi
Former-commit-id: 2146ce8360
2025-03-05 14:19:00 +01:00
Hadi f10d4ea424 add close wofi when loose focus
Former-commit-id: 87c6166bf7
2025-03-05 13:28:01 +01:00
Hadi 86ce837ff4 change hardware-configuration
Former-commit-id: 2ec4583391
2025-03-05 11:53:51 +01:00
Hadi 27c5cc520c remove the hyprspace shortcut
Former-commit-id: 093a6397b9
2025-03-04 21:42:49 +01:00
Hadi b1a6ea69c2 change theme name
Former-commit-id: ed4d27a4ac
2025-03-04 21:32:46 +01:00
Hadi 04822e03c4 add todo-comments
Former-commit-id: ff97615cae
2025-03-04 21:32:39 +01:00
Hadi caea92ecc2 disable lsp notifications
Former-commit-id: f3aaa759ce
2025-03-04 21:32:33 +01:00
github-actions fe5ef8a25d Update README.md (auto)
Former-commit-id: 615596085a
2025-03-04 19:58:56 +00:00
Hadi abcb9dfc82 doc update
Former-commit-id: 936e8b0ffd
2025-03-04 20:58:35 +01:00
Hadi fe982f8a12 flake update
Former-commit-id: b90821adff
2025-03-04 20:58:29 +01:00
Hadi b0ab5932e4 refactor variables & theme
Former-commit-id: 276756d998
2025-03-04 20:58:20 +01:00
Hadi de25b920e3 remove tofi
Former-commit-id: c9aada8203
2025-03-04 20:57:58 +01:00
Hadi 4f7853994b hyprpolkitagent from flake to pkgs
Former-commit-id: b1eb468327
2025-03-04 20:57:53 +01:00
Hadi 8ff0c3d558 remove superfile
Former-commit-id: 9bec8574e6
2025-03-04 20:57:42 +01:00
Hadi 4164eccfec remove nvf
Former-commit-id: 5851e00adf
2025-03-04 20:57:37 +01:00
Hadi e0d3ec0bd7 add nixcord
Former-commit-id: 41dacd47a5
2025-03-04 20:57:33 +01:00
Hadi 718f399f7b add superfile input
Former-commit-id: f86fd5bf02
2025-03-04 14:37:41 +01:00
Hadi 10f68e4d86 change yoru theme
Former-commit-id: b8ef571b50
2025-03-02 15:04:16 +01:00
Hadi 7f7f418011 disable mini.animate (bug with scroll wheel)
Former-commit-id: e6dfa4bd52
2025-03-02 13:04:51 +01:00
Hadi cd1ca57dda Nvim config update
Former-commit-id: b801f55276
2025-03-01 02:58:48 +01:00
Hadi 57d1813fae add nvf
Former-commit-id: be161771f4
2025-03-01 02:28:21 +01:00
Hadi b776945818 update todo
Former-commit-id: 631525c978
2025-03-01 02:27:31 +01:00
Hadi 4127bb79a1 update flake
Former-commit-id: a7f8c6cd84
2025-03-01 02:27:10 +01:00
Hadi 3e535ee5e5 init nvf
Former-commit-id: 027b2dcd24
2025-03-01 02:27:02 +01:00
Hadi f3cf06ed29 edit theme
Former-commit-id: 7ffef6d2cf
2025-03-01 02:25:51 +01:00
Hadi 8656e31386 edit xdg portals
Former-commit-id: 14d8e50100
2025-02-23 11:48:03 +01:00
Hadi 02bc033990 add hyprland qutils
Former-commit-id: 8026cb5e88
2025-02-23 11:47:56 +01:00
Hadi fb531ab960 edit hyprland conf
Former-commit-id: e9af1dac68
2025-02-23 11:47:46 +01:00
Hadi e50b3878af add cursor trail animations
Former-commit-id: 4b32eaa91e
2025-02-23 11:47:31 +01:00
Hadi 4e902409c9 update flake
Former-commit-id: 61d4f0c4bf
2025-02-21 20:14:36 +01:00
Hadi 5f60916809 change wallpaper
Former-commit-id: 226752d763
2025-02-21 20:12:56 +01:00
Hadi ec1a6e9379 edit
Former-commit-id: d616d5e4fe
2025-02-21 16:29:25 +01:00
Hadi e8a395d91e change blur, opacity & background
Former-commit-id: bd8a936a1d
2025-02-21 16:25:04 +01:00
115 changed files with 2809 additions and 2382 deletions
+33 -28
View File
@@ -23,18 +23,14 @@
</div>
<br>
**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.
**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.
I'm Hadi, a french developer, student in infosec, enthusiastic about nix, golang & blockchains.
This is my own, **keyboard-centric**, and **minimalistic** NixOS configuration.
I enable vim-like keybindings everywhere I can, and I use a lot of custom scripts to make my life easier.
**Features:**
**Nixy key points:**
- Hypr-ecosystem first (hyprland, hyprlock, hyprpanel, hypridle, ...)
- Stylix/base16 themes
- Vim-like keybindings everywhere (hyprland, qutebrowser, nvim, ...)
- 💻 Hyprland-centric: Preconfigured Hyprland ecosystem (Hyprlock, Hyprpanel, etc.)
- 🎨 Consistent Theming: Base16 & Stylix-powered themes
- ⌨️ Vim-like Everywhere: Unified keybindings (Hyprland, nvim, vimium, etc.)
## Table of Content
@@ -49,9 +45,9 @@ I enable vim-like keybindings everywhere I can, and I use a lot of custom script
## Architecture
### 🏠 home
### 🏠 /home (User-level configuration)
Those are the dotfiles and configuration files for user-level configuration
Contains **dotfiles and settings** that apply to your user environment.
**Subfolders:**
@@ -59,35 +55,44 @@ Those are the dotfiles and configuration files for user-level configuration
- `scripts` is a folder full of bash scripts (see [SCRIPTS.md](docs/SCRIPTS.md))
- `system` is some "desktop environment" configuration
### 🐧 nixos
### 🐧 /nixos
Those are the system-level configurations. (audio, bluetooth, gpu, bootloader, ...)
### 🎨 themes
### 🎨 /themes
Those are the themes used in the system configuration. The `stylix` folder contains the [stylix](https://github.com/danth/stylix) defined themes, the `var` folder contains the variables not handled by stylix.
See avaiable themes in [THEMES.md](docs/THEMES.md)
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
### 💻 /hosts
Those are the host-specific configurations.
Each host contains a `configuration.nix` for system-level configuration, a `home.nix` for user-level configuration, and a `variables.nix` for config wide variables.
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
## Installation
1. Clone the repo
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 your system name, and change the variables inside the `variables.nix` file
3. Add your `hardware-configuration.nix` to your new host's folder
4. Add your 'nixosConfigurations' inside `flake.nix`
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]
> I added few `# CHANGEME` comments in the files to help you find what to change. Be sure to check them up.
> You can use `rg "CHANGEME"` to find them all with ripgrep.
> `# 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
@@ -100,11 +105,11 @@ 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
- [SCRIPTS](docs/SCRIPTS.md): Scripts that are available
- [SCRIPTS](docs/SCRIPTS.md): A list of available scripts and their usage
- [KEYBINDINGS-HYPRLAND](docs/KEYBINDINGS-HYPRLAND.md): Keybindings available in Hyprland
- [WALLPAPERS](https://github.com/anotherhadi/nixy-wallpapers): A collection of wallpapers for Nixy.
- [WALLPAPERS](https://github.com/anotherhadi/awesome-wallpapers): An awesome collection of wallpapers
- [TODO](docs/TODO.md): What's next (feel free to contribute)
- [CONTRIBUTING](docs/CONTRIBUTING.md): How to contribute
- [LICENSE](LICENSE): MIT License
Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

-1
View File
@@ -1,2 +1 @@
todolist.md
.sops.yaml
+37 -32
View File
@@ -24,28 +24,24 @@
</div>
<br>
**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.
**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.
I'm Hadi, a french developer, student in infosec, enthusiastic about nix, golang & blockchains.
This is my own, **keyboard-centric**, and **minimalistic** NixOS configuration.
I enable vim-like keybindings everywhere I can, and I use a lot of custom scripts to make my life easier.
**Features:**
**Nixy key points:**
- Hypr-ecosystem first (hyprland, hyprlock, hyprpanel, hypridle, ...)
- Stylix/base16 themes
- Vim-like keybindings everywhere (hyprland, qutebrowser, nvim, ...)
- 💻 Hyprland-centric: Preconfigured Hyprland ecosystem (Hyprlock, Hyprpanel, etc.)
- 🎨 Consistent Theming: Base16 & Stylix-powered themes
- ⌨️ Vim-like Everywhere: Unified keybindings (Hyprland, nvim, vimium, etc.)
## Table of Content
- [Table of Content](#table-of-content)
- [Gallery](#gallery)
- [Architecture](#architecture)
- [🏠 home](#-home)
- [🐧 nixos](#-nixos)
- [🎨 themes](#-themes)
- [💻 hosts](#-hosts)
- [🏠 /home (User-level configuration)](#-home-user-level-configuration)
- [🐧 /nixos](#-nixos)
- [🎨 /themes](#-themes)
- [💻 /hosts](#-hosts)
- [Installation](#installation)
- [Documentation](#documentation)
@@ -58,9 +54,9 @@ I enable vim-like keybindings everywhere I can, and I use a lot of custom script
## Architecture
### 🏠 home
### 🏠 /home (User-level configuration)
Those are the dotfiles and configuration files for user-level configuration
Contains **dotfiles and settings** that apply to your user environment.
**Subfolders:**
@@ -68,35 +64,44 @@ Those are the dotfiles and configuration files for user-level configuration
- `scripts` is a folder full of bash scripts (see [SCRIPTS.md](docs/SCRIPTS.md))
- `system` is some "desktop environment" configuration
### 🐧 nixos
### 🐧 /nixos
Those are the system-level configurations. (audio, bluetooth, gpu, bootloader, ...)
### 🎨 themes
### 🎨 /themes
Those are the themes used in the system configuration. The `stylix` folder contains the [stylix](https://github.com/danth/stylix) defined themes, the `var` folder contains the variables not handled by stylix.
See avaiable themes in [THEMES.md](docs/THEMES.md)
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
### 💻 /hosts
Those are the host-specific configurations.
Each host contains a `configuration.nix` for system-level configuration, a `home.nix` for user-level configuration, and a `variables.nix` for config wide variables.
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
## Installation
1. Clone the repo
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 your system name, and change the variables inside the `variables.nix` file
3. Add your `hardware-configuration.nix` to your new host's folder
4. Add your 'nixosConfigurations' inside `flake.nix`
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]
> I added few `# CHANGEME` comments in the files to help you find what to change. Be sure to check them up.
> You can use `rg "CHANGEME"` to find them all with ripgrep.
> `# 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
@@ -109,11 +114,11 @@ 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
- [SCRIPTS](docs/SCRIPTS.md): Scripts that are available
- [SCRIPTS](docs/SCRIPTS.md): A list of available scripts and their usage
- [KEYBINDINGS-HYPRLAND](docs/KEYBINDINGS-HYPRLAND.md): Keybindings available in Hyprland
- [WALLPAPERS](https://github.com/anotherhadi/nixy-wallpapers): A collection of wallpapers for Nixy.
- [WALLPAPERS](https://github.com/anotherhadi/awesome-wallpapers): An awesome collection of wallpapers
- [TODO](docs/TODO.md): What's next (feel free to contribute)
- [CONTRIBUTING](docs/CONTRIBUTING.md): How to contribute
- [LICENSE](LICENSE): MIT License
+3 -3
View File
@@ -1,16 +1,16 @@
# 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.
- 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).
- 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.
> [!TIP]
> To update the README, change the `./docs/src/README_template.md` and run `./docs/scripts/create_readme.sh`
> To update the README, change the `./.github/assets/README_template.md`
> [!IMPORTANT]
> Don't push your host's folder
+1
View File
@@ -94,5 +94,6 @@ Usefull quick scripts
- `menu` - Open wofi with drun mode. (wofi)
- `powermenu` - Open power dropdown menu. (wofi)
- `quickmenu` - Open a dropdown menu with shortcuts and scripts. (wofi)
- `lock` - Lock the screen. (hyprlock)
+62
View File
@@ -0,0 +1,62 @@
# SERVER
## Overview
This document describes the architecture and setup of the self-hosted **NixOS server**, which is securely accessible via **Tailscale**. 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 Tailscale, preventing exposure to the public internet.
- **Domain-based Access**: A custom domain (`example.org`) maps to the server's Tailscale IP, making service access simple and consistent.
- **Automatic SSL Certificates**: Using DNS-01 challenges, valid SSL certificates are generated even though the services are not publicly exposed.
- **Modular & Declarative**: Everything is managed through NixOS modules, ensuring reproducibility and easy configuration.
## **Self-Hosted Services**
The server hosts several key applications:
### **Core Infrastructure**
- **NGINX**: Reverse proxy for routing traffic to services via `example.org`.
- **Bitwarden**: A self-hosted password manager for secure credential storage.
- **Nextcloud**: A private cloud solution for file synchronization and collaboration.
### **Networking & Security**
- **AdGuard Home**: A self-hosted DNS ad blocker for network-wide ad and tracker filtering.
### **Monitoring & Storage**
- **Glance**: An awesome dashboard! (See the screenshot above)
- **Hoarder**: A self-hostable bookmark-everything app (links, notes and images)
### **Media & Content Management**
- **Arr Stack (Radarr, Sonarr, etc.)**: Automated media management tools for handling movies and TV shows. (legaly ofc)
## **How It Works**
1. **Domain Configuration**
- `example.org` is pointed to the Tailscale IP of the server. (cloudflare A record, not proxied)
- This allows for easy access without exposing services to the internet.
2. **SSL Certificate Generation**
- Certificates are obtained using a **DNS-01 challenge**, verifying domain ownership without requiring public access.
3. **NGINX Reverse Proxy**
- Routes incoming requests from `*.example.org` to the correct internal service.
- Ensures SSL termination and secure connections.
4. **Access Control**
- Only devices within the Tailscale network can reach the services.
- Firewall rules restrict access further based on necessity.
## What's Next?
I want to self-host:
- **A great todolist app**: One that is compatible with markdown & IOS
- **Cyberchef**
- **Maybe**: An app to manage finances
+1 -1
View File
@@ -1,7 +1,7 @@
# Themes
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 configuration.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`
-5
View File
@@ -1,5 +0,0 @@
# Todolist
feel free to contribute <3 ([CONTRIBUTING.md](CONTRIBUTING.md))
- [ ] <https://github.com/isabelroses/dotfiles/blob/main/home/comfy/system/xdg.nix>
Generated
+406 -386
View File
File diff suppressed because it is too large Load Diff
+30 -19
View File
@@ -1,52 +1,51 @@
{
# https://github.com/anotherhadi/nixy
description = ''
Nixy is a 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.
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.
'';
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
hyprpanel.url = "github:Jas-SinghFSU/HyprPanel";
stylix.url = "github:danth/stylix";
apple-fonts.url = "github:Lyndeno/apple-fonts.nix";
zen-browser.url = "github:0xc000022070/zen-browser-flake";
nixcord.url = "github:kaylorben/nixcord";
sops-nix.url = "github:Mic92/sops-nix";
nixarr.url = "github:rasmus-kirk/nixarr";
anyrun.url = "github:fufexan/anyrun/launch-prefix";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
nixvim = {
url = "github:nix-community/nixvim";
url =
"github:nix-community/nixvim/d81f37256d0a8691b837b74979d27bf89be8ecdd";
inputs.nixpkgs.follows = "nixpkgs";
};
spicetify-nix = {
url = "github:Gerg-L/spicetify-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprspace = {
url = "github:KZDKM/Hyprspace";
inputs.hyprland.follows = "hyprland";
};
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
hyprpolkitagent.url = "github:hyprwm/hyprpolkitagent";
hyprpanel.url = "github:Jas-SinghFSU/HyprPanel";
stylix.url = "github:danth/stylix";
apple-fonts.url = "github:Lyndeno/apple-fonts.nix";
nur.url = "github:nix-community/NUR";
zen-browser.url =
"git+https://git.sr.ht/~canasta/zen-browser-flake/"; # updated flake
search-nixos-api.url = "github:anotherhadi/search-nixos-api";
};
outputs = inputs@{ nixpkgs, ... }: {
nixosConfigurations = {
nixy = # CHANGEME: This should match the 'hostname' in your variables.nix file
nixy =
# CHANGEME: This should match the 'hostname' in your variables.nix file
nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
{
nixpkgs.overlays =
[ inputs.hyprpanel.overlay inputs.nur.overlays.default ];
nixpkgs.overlays = [ inputs.hyprpanel.overlay ];
_module.args = { inherit inputs; };
}
inputs.nixos-hardware.nixosModules.omen-16-n0005ne # CHANGEME: check https://github.com/NixOS/nixos-hardware
@@ -55,7 +54,19 @@
./hosts/laptop/configuration.nix # CHANGEME: change the path to match your host folder
];
};
# Jack is my server
jack = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
{ _module.args = { inherit inputs; }; }
inputs.home-manager.nixosModules.home-manager
inputs.stylix.nixosModules.stylix
inputs.sops-nix.nixosModules.sops
inputs.nixarr.nixosModules.default
inputs.search-nixos-api.nixosModules.search-nixos-api
./hosts/server/configuration.nix
];
};
};
};
}
+87
View File
@@ -0,0 +1,87 @@
{ pkgs, inputs, ... }: {
programs.anyrun = {
enable = true;
config = {
plugins = with inputs.anyrun.packages.${pkgs.system}; [
applications
shell
randr
rink
symbols
translate
];
width.fraction = 0.25;
y.fraction = 0.3;
hidePluginInfo = true;
closeOnClick = true;
};
extraCss = ''
* {
all: unset;
font-size: 1.2rem;
}
#window,
#match,
#entry,
#plugin,
#main {
background: transparent;
}
#match.activatable {
border-radius: 8px;
margin: 4px 0;
padding: 4px;
/* transition: 100ms ease-out; */
}
#match.activatable:first-child {
margin-top: 12px;
}
#match.activatable:last-child {
margin-bottom: 0;
}
#match:hover {
background: rgba(255, 255, 255, 0.05);
}
#match:selected {
background: rgba(255, 255, 255, 0.1);
}
#entry {
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 8px;
padding: 4px 8px;
}
box#main {
background: rgba(0, 0, 0, 0.5);
box-shadow:
inset 0 0 0 1px rgba(255, 255, 255, 0.1),
0 30px 30px 15px rgba(0, 0, 0, 0.5);
border-radius: 20px;
padding: 12px;
}
'';
extraConfigFiles = {
"applications.ron".text = ''
Config(
desktop_actions: false,
max_entries: 5,
terminal: Some("foot"),
)
'';
"shell.ron".text = ''
Config(
prefix: ">"
)
'';
};
};
}
+9
View File
@@ -0,0 +1,9 @@
# Discord is a popular chat application.
{ inputs, ... }: {
imports = [ inputs.nixcord.homeManagerModules.nixcord ];
programs.nixcord = {
enable = true;
config = { frameless = true; };
};
}
+1
View File
@@ -1,3 +1,4 @@
# Legacy
{ pkgs, ... }: {
home.packages = with pkgs; [ neofetch ];
@@ -1,3 +1,5 @@
# Nerdfetch, a simple system info script written in bash
# Source: https://github.com/ThatOneCalculator/NerdFetch
{ pkgs, ... }:
let
nerdfetch = pkgs.writeShellScriptBin "nerdfetch" ''
+2
View File
@@ -1,3 +1,4 @@
# Git configuration
{ config, ... }:
let
username = config.var.git.username;
@@ -21,6 +22,7 @@ in {
];
extraConfig = {
init.defaultBranch = "main";
pull.rebase = "false";
push.autoSetupRemote = true;
color.ui = "1";
};
+5
View File
@@ -1,3 +1,4 @@
# Kitty is a fast, featureful, GPU based terminal emulator
{
programs.kitty = {
enable = true;
@@ -20,9 +21,13 @@
remember_window_size = "no";
disable_ligatures = "never";
url_style = "curly";
copy_on_select = "clipboard";
cursor_shape = "Underline";
cursor_underline_thickness = 3;
cursor_trail = 3;
cursor_trail_decay = "0.1 0.4";
window_padding_width = 10;
open_url_with = "default";
};
};
}
+1
View File
@@ -1,3 +1,4 @@
# Lazygit is a simple terminal UI for git commands.
{ config, lib, ... }:
let
accent = "#${config.lib.stylix.colors.base0D}";
-141
View File
@@ -1,120 +1,11 @@
{
programs.nixvim = {
autoGroups = {
auto_quit.clear = true;
autoview.clear = true;
bufferline.clear = true;
checktime.clear = true;
create_dir.clear = true;
editorconfig_filetype.clear = true;
file_user_events.clear = true;
highlighturl.clear = true;
highlightyank.clear = true;
large_buf_settings.clear = true;
q_close_windows.clear = true;
terminal_settings.clear = true;
unlist_quickfix.clear = true;
};
autoCmd = [
# auto_quit
# https://github.com/AstroNvim/AstroNvim/blob/v4.7.7/lua/astronvim/plugins/_astrocore_autocmds.lua#L18-L46
{
desc =
"Quit neovim if more than one window is open and only sidebar windows are list";
event = "BufEnter";
group = "auto_quit";
callback.__raw = ''
function()
local wins = vim.api.nvim_tabpage_list_wins(0)
-- Both neo-tree and aerial will auto-quit if there is only a single window left
if #wins <= 1 then return end
local sidebar_fts = { aerial = true, ["neo-tree"] = true }
for _, winid in ipairs(wins) do
if vim.api.nvim_win_is_valid(winid) then
local bufnr = vim.api.nvim_win_get_buf(winid)
local filetype = vim.bo[bufnr].filetype
-- If any visible windows are not sidebars, early return
if not sidebar_fts[filetype] then
return
-- If the visible window is a sidebar
else
-- only count filetypes once, so remove a found sidebar from the detection
sidebar_fts[filetype] = nil
end
end
end
if #vim.api.nvim_list_tabpages() > 1 then
vim.cmd.tabclose()
else
vim.cmd.qall()
end
end
'';
}
# autoview
# https://github.com/AstroNvim/AstroNvim/blob/v4.7.7/lua/astronvim/plugins/_astrocore_autocmds.lua#L49-L70
{
desc = "Save view with mkview for real files";
event = [ "BufWinLeave" "BufWritePost" "WinLeave" ];
group = "autoview";
callback.__raw = ''
function(event)
if vim.b[event.buf].view_activated then vim.cmd.mkview { mods = { emsg_silent = true } } end
end
'';
}
{
desc =
"Try to load file view if available and enable view saving for real files";
event = "BufWinEnter";
group = "autoview";
callback.__raw = ''
function(event)
if not vim.b[event.buf].view_activated then
local filetype = vim.bo[event.buf].filetype
local buftype = vim.bo[event.buf].buftype
local ignore_filetypes = { "gitcommit", "gitrebase", "svg", "hgcommit" }
if buftype == "" and filetype and filetype ~= "" and not vim.tbl_contains(ignore_filetypes, filetype) then
vim.b[event.buf].view_activated = true
vim.cmd.loadview { mods = { emsg_silent = true } }
end
end
end
'';
}
# checktime
# https://github.com/AstroNvim/AstroNvim/blob/v4.7.7/lua/astronvim/plugins/_astrocore_autocmds.lua#L118-L122
{
desc = "Check if buffers changed on editor focus";
event = [ "FocusGained" "TermClose" "TermLeave" ];
group = "checktime";
command = "checktime";
}
# editorconfig_filetype
# https://github.com/AstroNvim/AstroNvim/blob/v4.7.7/lua/astronvim/plugins/_astrocore_autocmds.lua#L135-L144
{
desc =
"Configure editorconfig after filetype detection to override `ftplugin`s";
event = "FileType";
group = "editorconfig_filetype";
callback.__raw = ''
function(args)
if vim.F.if_nil(vim.b.editorconfig, vim.g.editorconfig, true) then
local editorconfig_avail, editorconfig = pcall(require, "editorconfig")
if editorconfig_avail then editorconfig.config(args.buf) end
end
end
'';
}
# highlightyank
# https://github.com/AstroNvim/AstroNvim/blob/v4.7.7/lua/astronvim/plugins/_astrocore_autocmds.lua#L206-L211
{
@@ -150,38 +41,6 @@
end
'';
}
# terminal_settings
# https://github.com/AstroNvim/AstroNvim/blob/v4.7.7/lua/astronvim/plugins/_astrocore_autocmds.lua#L258-L266
{
desc = "Disable line number/fold column/sign column for terminals";
event = "TermOpen";
group = "terminal_settings";
callback.__raw = ''
function()
vim.opt_local.number = false
vim.opt_local.relativenumber = false
vim.opt_local.foldcolumn = "0"
vim.opt_local.signcolumn = "no"
end
'';
}
# unlist_quickfix
# https://github.com/AstroNvim/AstroNvim/blob/v4.7.7/lua/astronvim/plugins/_astrocore_autocmds.lua#L270-L275
{
desc = "Unlist quickfix buffers";
event = "FileType";
group = "unlist_quickfix";
pattern = "qf";
callback.__raw = ''
function()
vim.opt_local.buflisted = false
end
'';
}
];
};
}
+8 -7
View File
@@ -2,15 +2,16 @@
{ inputs, ... }: {
imports = [
inputs.nixvim.homeManagerModules.nixvim
./plugins/lsp.nix
./plugins/tree.nix
./plugins/telescope.nix
./plugins/cmp.nix
./plugins/ui.nix
./plugins/lualine.nix
./plugins/utils.nix
./plugins/dashboard.nix
./plugins/floaterm.nix
./plugins/git.nix
./plugins/lsp.nix
./plugins/markdown.nix
./plugins/mini.nix
./plugins/picker.nix
./plugins/snacks.nix
./plugins/trouble.nix
./plugins/utils.nix
./options.nix
./keymaps.nix
+30 -184
View File
@@ -12,31 +12,6 @@
};
spec = [
# General Mappings
{
__unkeyed-1 = "<leader>c";
mode = [ "n" "v" ];
group = "+code";
}
{
__unkeyed-1 = "<leader>d";
mode = [ "n" "v" ];
group = "+debug";
}
{
__unkeyed-1 = "<leader>s";
mode = "n";
group = "+search";
}
{
__unkeyed-1 = "<leader>m";
mode = "n";
group = "+markdown";
}
{
__unkeyed-1 = "<leader>t";
mode = "n";
group = "+trouble";
}
{
__unkeyed-1 = "<leader>u";
mode = "n";
@@ -48,9 +23,9 @@
group = "+windows";
}
{
__unkeyed-1 = "<leader>h";
__unkeyed-1 = "<leader>c";
mode = "n";
group = "+harpoon";
group = "+code";
}
];
win = {
@@ -62,22 +37,6 @@
keymaps = [
# General Mappings
{
key = "<leader>e";
action = "<cmd>Oil --float<cr>";
options.desc = "Oil";
}
{
key = "-";
action = "<cmd>Oil<cr>";
options.desc = "Oil";
}
{
key = "<leader>E";
action = "<cmd>Neotree toggle<cr>";
options.desc = "Neotree";
}
{
key = "s";
action = "<cmd>lua require('flash').jump()<cr>";
@@ -88,7 +47,13 @@
action = "<cmd>lua vim.lsp.buf.hover()<cr>";
options.desc = "LSP Hover";
}
{
key = "<C-tab>";
action = "<cmd>bnext<cr>";
options.desc = "Next Buffer";
}
# Tmux
{
key = "<C-h>";
action = "<cmd>TmuxNavigateLeft<cr>";
@@ -106,12 +71,29 @@
action = "<cmd>TmuxNavigateRight<cr>";
}
# UI
# Disable Arrow Keys in Normal Mode
{
key = "<leader>uz";
action = "<cmd>ZenMode<cr>";
options.desc = "Toggle ZenMode";
key = "<Up>";
action = "<Nop>";
options.desc = "Disable Up Arrow";
}
{
key = "<Down>";
action = "<Nop>";
options.desc = "Disable Down Arrow";
}
{
key = "<Left>";
action = "<Nop>";
options.desc = "Disable Left Arrow";
}
{
key = "<Right>";
action = "<Nop>";
options.desc = "Disable Right Arrow";
}
# UI
{
key = "<leader>uw";
action = "<cmd>set wrap!<cr>";
@@ -125,7 +107,7 @@
{
key = "<leader>us";
action = "<cmd>set spell!<cr>";
options.desc = "Toggle spellcheck";
options.desc = "Toggle spellLazyGitcheck";
}
{
key = "<leader>uc";
@@ -153,95 +135,6 @@
options.desc = "Hide tabline";
}
# Search
{
key = "<leader> ";
action = "<cmd>lua require('telescope.builtin').find_files()<cr>";
options.desc = "Telescope";
}
{
key = "<leader>sg";
action = "<cmd>lua require('telescope.builtin').live_grep()<cr>";
options.desc = "Livegrep";
}
{
key = "<leader>sf";
action = "<cmd>lua require('telescope.builtin').find_files()<cr>";
options.desc = "Find Files";
}
{
key = "<leader>sb";
action = "<cmd>lua require('telescope.builtin').buffers()<cr>";
options.desc = "Buffers";
}
{
key = "<leader>sh";
action = "<cmd>lua require('telescope.builtin').help_tags()<cr>";
options.desc = "Help Tags";
}
{
key = "<leader>sc";
action = "<cmd>lua require('telescope.builtin').commands()<cr>";
options.desc = "Commands";
}
{
key = "<leader>sm";
action = "<cmd>lua require('telescope.builtin').marks()<cr>";
options.desc = "Marks";
}
{
key = "<leader>so";
action = "<cmd>lua require('telescope.builtin').oldfiles()<cr>";
options.desc = "Oldfiles";
}
{
key = "<leader>ss";
action = "<cmd>lua require('telescope.builtin').spell_suggest()<cr>";
options.desc = "Spell Suggest";
}
{
key = "<leader>sr";
action = "<cmd>:noh<return><esc>";
options.desc = "Reset search";
}
{
key = "<leader>st";
action = "<cmd>TodoTelescope<cr>";
options.desc = "Todos";
}
# Trouble
{
key = "<leader>tx";
action = "<cmd>Trouble diagnostics toggle<cr>";
options.desc = "Diagnostics (Trouble)";
}
{
key = "<leader>tX";
action = "<cmd>Trouble diagnostics toggle filter.buf=0<cr>";
options.desc = "Buffer Diagnostics (Trouble)";
}
{
key = "<leader>ts";
action = "<cmd>Trouble symbols toggle focus=false<cr>";
options.desc = "Symbols (Trouble)";
}
{
key = "<leader>tl";
action = "<cmd>Trouble lsp toggle focus=false win.position=right<cr>";
options.desc = "LSP Definitions / references / ... (Trouble)";
}
{
key = "<leader>tL";
action = "<cmd>Trouble loclist toggle<cr>";
options.desc = "Location List (Trouble)";
}
{
key = "<leader>tQ";
action = "<cmd>Trouble qflist toggle<cr>";
options.desc = "Quickfix List (Trouble)";
}
# Windows
{
key = "<leader>ws";
@@ -258,53 +151,6 @@
action = "<cmd>close<cr>";
options.desc = "Close";
}
# Code
{
key = "<leader>cd";
action = "<cmd>lua vim.lsp.buf.definition()<cr>";
options.desc = "LSP Definition";
}
{
key = "<leader>cr";
action = "<cmd>lua vim.lsp.buf.references()<cr>";
options.desc = "LSP References";
}
{
key = "<leader>ct";
action = "<cmd>lua vim.lsp.buf.type_definition()<cr>";
options.desc = "LSP Type Definition";
}
{
key = "<leader>ca";
action = "<cmd>lua vim.lsp.buf.code_action()<cr>";
options.desc = "LSP Code Action";
}
{
key = "<leader>cf";
action = "<cmd>lua vim.lsp.buf.formatting()<cr>";
options.desc = "LSP Formatting";
}
{
key = "<leader>cn";
action = "<cmd>lua vim.lsp.diagnostic.goto_next()<cr>";
options.desc = "LSP Next Diagnostic";
}
{
key = "<leader>cp";
action = "<cmd>lua vim.lsp.diagnostic.goto_prev()<cr>";
options.desc = "LSP Previous Diagnostic";
}
{
key = "<leader>cu";
action = "<cmd>lua require('dapui').toggle()<CR>";
options.desc = "Toggle Dapui";
}
{
key = "<leader>cb";
action = "<cmd>lua require('dap').toggle_breakpoint()<CR>";
options.desc = "Toggle breakpoint";
}
];
};
}
+4 -14
View File
@@ -1,6 +1,10 @@
{
programs.nixvim = {
globals.mapleader = " ";
diagnostics = {
virtual_text = true;
virtual_improved = { current_line = "only"; };
};
opts = {
autoindent = true;
@@ -38,11 +42,6 @@
# Highlight current line
cursorline = true;
# Enable linematch diff algorithm
diffopt.__raw = ''
vim.list_extend(vim.opt.diffopt:get(), { "algorithm:histogram", "linematch:60" })
'';
# Expand <Tab> to spaces
expandtab = true;
@@ -92,11 +91,6 @@
# Number of spaces to use for indentation
shiftwidth = 2;
# Disable search count wrap and startup messages
shortmess.__raw = ''
vim.tbl_deep_extend("force", vim.opt.shortmess:get(), { s = true, I = true })
'';
# Disable showing modes in command line
showmode = false;
@@ -133,10 +127,6 @@
# Save undo history to undo file (in $XDG_STATE_HOME/nvim/undo)
undofile = true;
viewoptions.__raw = ''
vim.tbl_filter(function(val) return val ~= "curdir" end, vim.opt.viewoptions:get())
'';
# Enable virtual edit in visual block mode
# This has the effect of selecting empty cells beyond lines boundaries
virtualedit = "block";
+1
View File
@@ -21,6 +21,7 @@
}
{ name = "nvim_lua"; }
{ name = "mkdnflow"; }
{ name = "render-markdown"; }
{ name = "path"; }
];
-223
View File
@@ -1,223 +0,0 @@
{ config, ... }:
let
accent = "#${config.lib.stylix.colors.base0D}";
muted = "#${config.lib.stylix.colors.base03}";
foreground = "#${config.lib.stylix.colors.base05}";
configDir = config.var.configDirectory;
in {
programs.nixvim.highlight = {
AlphaHeaderColor.fg = accent;
AlphaTextColor.fg = foreground;
AlphaShortcutColor.fg = muted;
};
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 = {
keymap = [
"n"
"nf"
":Telescope find_files <CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
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 = {
keymap = [
"n"
"nn"
":ene <CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
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 ${configDir}]] end";
opts = {
keymap = [
"n"
"nc"
":Neotree ${configDir} <CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
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 ${configDir}/docs/KEYBINDINGS.md]] end";
opts = {
shortcut = "nk";
keymap = [
"n"
"nk"
":e ${configDir}/docs/KEYBINDINGS-HYPRLAND.md <CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
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";
keymap = [
"n"
"no"
":Telescope oldfiles <CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
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 = "ng";
keymap = [
"n"
"ng"
":Telescope live_grep <CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
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";
keymap = [
"n"
"nq"
":qa <CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
position = "center";
cursor = 3;
width = 50;
align_shortcut = "right";
hl_shortcut = "AlphaShortcutColor";
hl = "AlphaTextColor";
};
}
];
}
];
};
}
+13
View File
@@ -0,0 +1,13 @@
{ config, ... }: {
programs.nixvim = {
plugins.floaterm.enable = true;
highlightOverride = {
FloatermBorder.fg = "#${config.lib.stylix.colors.base01}";
};
keymaps = [{
key = "<leader>cn";
action = "<cmd>FloatermNew --title=nixy nixy || sleep 10<cr>";
options.desc = "Nixy";
}];
};
}
+13
View File
@@ -0,0 +1,13 @@
{
programs.nixvim = {
plugins = {
gitsigns.enable = true;
snacks.settings = { lazygit.enable = true; };
};
keymaps = [{
key = "<leader>gl";
action = "<cmd>lua Snacks.lazygit()<cr>";
options.desc = "LazyGit";
}];
};
}
+3 -18
View File
@@ -3,36 +3,21 @@
lsp-format.enable = true;
lsp = {
enable = true;
inlayHints = true;
servers = {
bashls.enable = true;
clangd.enable = true;
gopls.enable = true;
eslint.enable = true;
ts_ls.enable = true;
nixd = {
enable = true;
extraOptions = {
expr = "import <nixpkgs> {}";
# fix- encoding: https://github.com/nix-community/nixvim/issues/2390
offset_encoding = "utf-8";
};
};
nixd.enable = true;
tailwindcss.enable = true;
html.enable = true;
svelte.enable = true;
marksman.enable = true;
};
keymaps.lspBuf = {
"gd" = "definition";
"gD" = "references";
"gt" = "type_definition";
"gi" = "implementation";
"K" = "hover";
};
};
none-ls = {
enable = true;
sources = {
completion = { luasnip.enable = true; };
diagnostics = {
golangci_lint.enable = true;
statix.enable = true;
-30
View File
@@ -1,30 +0,0 @@
{
programs.nixvim.plugins.lualine = {
enable = true;
settings = {
options.disabled_filetypes.statusline =
[ "dashboard" "alpha" "neo-tree" ];
alwaysDivideMiddle = true;
globalstatus = true;
ignoreFocus = [ "neo-tree" ];
extensions = [ "fzf" ];
componentSeparators = {
left = "|";
right = "|";
};
sectionSeparators = {
left = ""; # 
right = ""; # 
};
sections = {
lualine_a = [ "mode" ];
lualine_b = [ "branch" "diff" "diagnostics" ];
lualine_c = [ "filename" ];
lualine_x = [ "filetype" ];
lualine_y = [ "progress" ];
lualine_z = [ ''" " .. os.date("%R")'' ];
};
};
};
}
+11 -220
View File
@@ -4,238 +4,29 @@ let
muted = "#${config.lib.stylix.colors.base03}";
in {
programs.nixvim = {
# Markdown settings
extraFiles."after/ftplugin/markdown.lua".text = ''
vim.bo.tabstop = 2
vim.bo.shiftwidth = 2
vim.bo.expandtab = true
vim.wo.cursorline = false
'';
# Highlight colors
highlight = {
Headline1 = {
bg = "#4B4266";
fg = accent;
};
Headline2 = {
bg = "#3B575E";
fg = "#9FFEFE";
};
Headline3 = {
bg = "#3B5742";
fg = "#9FFE9F";
};
Headline4 = {
bg = "#574842";
fg = "#FECB9F";
};
RenderMarkdownTodo.fg = "#f78c6c";
RenderMarkdownWarning.fg = "#ff5370";
RenderMarkdownDone.fg = muted;
};
# Plugins
plugins = {
# Paste images from clipboard
clipboard-image = {
enable = true;
settings = { default.img_dir = [ "%:p:h" "img" ]; };
};
# Zen mode
zen-mode = {
enable = true;
settings = {
on_close = ''
function()
end
'';
on_open = ''
function()
end
'';
plugins = {
gitsigns = { enabled = false; };
options = {
enabled = true;
ruler = false;
showcmd = false;
laststatus = "0";
kitty = {
enabled = true;
font = "+4";
};
};
};
window = {
backdrop = 0.95;
height = 1;
options = {
signcolumn = "no";
number = false;
relativenumber = false;
};
width = 0.8;
};
};
};
# Display images in markdown
image = {
enable = true;
integrations.markdown = {
clearInInsertMode = true;
onlyRenderImageAtCursor = true;
};
};
# This one takes care of the markdown titles
headlines = {
enable = true;
settings = {
markdown = {
headline_highlights =
[ "Headline1" "Headline2" "Headline3" "Headline4" ];
};
};
};
# MkdnFlow is a plugin that helps you navigate markdown files
mkdnflow = {
enable = true;
modules = { conceal = false; };
toDo.symbols = [ " " "-" "x" "!" "/" ];
mappings = {
MkdnCreateLink = false;
MkdnCreateLinkFromClipboard = {
key = "<leader>ml";
modes = [ "n" "v" ];
};
MkdnDecreaseHeading = {
key = "<leader>m-";
modes = "n";
};
MkdnDestroyLink = false;
MkdnEnter = {
key = "<CR>";
modes = [ "v" ];
};
MkdnExtendList = false;
MkdnFoldSection = {
key = "<leader>mf";
modes = "n";
};
MkdnUnfoldSection = {
key = "<leader>mF";
modes = "n";
};
MkdnFollowLink = {
key = "gd";
modes = "n";
};
MkdnGoBack = false;
MkdnGoForward = false;
MkdnIncreaseHeading = {
key = "<leader>m+";
modes = "n";
};
MkdnMoveSource = false;
MkdnNewListItem = false;
MkdnNewListItemAboveInsert = {
key = "O";
modes = "n";
};
MkdnNewListItemBelowInsert = {
key = "o";
modes = "n";
};
MkdnNextHeading = {
key = "<leader>m#";
modes = "n";
};
MkdnNextLink = false;
MkdnPrevLink = false;
MkdnPrevHeading = {
key = "<leader>m*";
modes = "n";
};
MkdnSTab = false;
MkdnTab = false;
MkdnTableNewColAfter = {
key = "<leader>mc";
modes = "n";
};
MkdnTableNewColBefore = {
key = "<leader>mC";
modes = "n";
};
MkdnTableNewRowAbove = {
key = "<leader>mR";
modes = "n";
};
MkdnTableNewRowBelow = {
key = "<leader>mr";
modes = "n";
};
MkdnTableNextCell = {
key = "<S-Tab>";
modes = "n";
};
MkdnTableNextRow = false;
MkdnTablePrevCell = {
key = "<S-Tab>";
modes = "n";
};
MkdnTablePrevRow = false;
MkdnToggleToDo = {
key = "<C-Space>";
modes = [ "n" "v" ];
};
MkdnUpdateNumbering = {
key = "<leader>mn";
modes = "n";
};
MkdnYankAnchorLink = {
key = "ya";
modes = "n";
};
MkdnYankFileAnchorLink = {
key = "yfa";
modes = "n";
};
};
};
# Render UI elements
render-markdown = {
enable = true;
settings = {
heading = { enabled = false; };
checkbox = {
unchecked = { highlight = "RenderMarkdownTodo"; };
checked = { highlight = "RenderMarkdownDone"; };
custom = {
pending = {
raw = "[-]";
rendered = " ";
highlight = "RenderMarkdownTodo";
};
important = {
raw = "[!]";
rendered = "󰰱 ";
highlight = "RenderMarkdownWarning";
};
cancel = {
raw = "[/]";
rendered = "󱋬 ";
highlight = "RenderMarkdownWarning";
};
};
settings = { completions.lsp.enabled = true; };
};
mkdnflow = {
enable = true;
mappings = {
MkdnTableNextCell = {
key = "<S-Tab>";
modes = "i";
};
MkdnTablePrevCell = false;
};
};
};
+22
View File
@@ -0,0 +1,22 @@
{ config, ... }: {
programs.nixvim = {
plugins.mini = {
enable = true;
mockDevIcons = true;
modules = {
icons = { };
# TODO: Learn how to use this
bracketed = { };
git = { };
diff = { };
starter = { };
pairs = { };
notify = { lsp_progress.enable = false; };
indentscope = { };
cursorword = { };
comment = { };
starter = { };
};
};
};
}
+222
View File
@@ -0,0 +1,222 @@
{ config, ... }: {
programs.nixvim = {
highlightOverride = {
SnacksPicker = {
bg = "none";
nocombine = true;
};
SnacksPickerBorder = {
bg = "none";
fg = "#${config.lib.stylix.colors.base0D}";
};
SnacksPickerTree = { bg = "#${config.lib.stylix.colors.base00}"; };
FloatBorder = {
bg = "#${config.lib.stylix.colors.base00}";
fg = "#${config.lib.stylix.colors.base0D}";
};
NormalFloat = { bg = "#${config.lib.stylix.colors.base00}"; };
};
plugins = {
snacks.settings = {
picker.enable = true;
explorer.enable = true;
};
oil.enable = true;
which-key.settings.spec = [
{
__unkeyed-1 = "<leader>f";
mode = "n";
group = "+find";
}
{
__unkeyed-1 = "<leader>g";
mode = "n";
group = "+git";
}
{
__unkeyed-1 = "<leader>s";
mode = "n";
group = "+search";
}
];
};
keymaps = [
# Top Pickers & Explorer
{
key = "<leader> ";
action = "<cmd>lua Snacks.picker.smart()<cr>";
options.desc = "Smart Find Files";
}
{
key = "<leader>,";
action = "<cmd>lua Snacks.picker.buffers()<cr>";
options.desc = "Buffers";
}
{
key = "<leader>/";
action = "<cmd>lua Snacks.picker.grep()<cr>";
options.desc = "Grep";
}
{
key = "<leader>:";
action = "<cmd>lua Snacks.picker.command_history()<cr>";
options.desc = "Command History";
}
{
key = "<leader>e";
action = "<cmd>lua Snacks.explorer()<cr>";
options.desc = "File Explorer";
}
{
key = "-";
action = "<cmd>Oil<cr>";
options.desc = "Oil";
}
# Find
{
key = "<leader>fb";
action = "<cmd>lua Snacks.picker.buffers()<cr>";
options.desc = "Buffers";
}
{
key = "<leader>fc";
action = ''
<cmd>lua Snacks.picker.files({ cwd = vim.fn.stdpath("config") })<cr>'';
options.desc = "Find Config File";
}
{
key = "<leader>ff";
action = "<cmd>lua Snacks.picker.files()<cr>";
options.desc = "Find Files";
}
{
key = "<leader>fg";
action = "<cmd>lua Snacks.picker.git_files()<cr>";
options.desc = "Find Git Files";
}
{
key = "<leader>fp";
action = "<cmd>lua Snacks.picker.projects()<cr>";
options.desc = "Projects";
}
{
key = "<leader>fr";
action = "<cmd>lua Snacks.picker.recent()<cr>";
options.desc = "Recent";
}
{
key = "<leader>fn";
action = "<cmd>lua Snacks.picker.notifications()<cr>";
options.desc = "Notification History";
}
{
key = "<leader>fe";
action = "<cmd>lua Snacks.picker.icons()<cr>";
options.desc = "Emoji";
}
# Git
{
key = "<leader>gb";
action = "<cmd>lua Snacks.picker.git_branches()<cr>";
options.desc = "Git Branches";
}
{
key = "<leader>gL";
action = "<cmd>lua Snacks.picker.git_log()<cr>";
options.desc = "Git Log Line";
}
{
key = "<leader>gs";
action = "<cmd>lua Snacks.picker.git_status()<cr>";
options.desc = "Git Status";
}
{
key = "<leader>gS";
action = "<cmd>lua Snacks.picker.git_stash()<cr>";
options.desc = "Git Stash";
}
{
key = "<leader>gd";
action = "<cmd>lua Snacks.picker.git_diff()<cr>";
options.desc = "Git Diff (Hunks)";
}
{
key = "<leader>gf";
action = "<cmd>lua Snacks.picker.git_log_file()<cr>";
options.desc = "Git Log File";
}
# Grep
{
key = "<leader>sb";
action = "<cmd>lua Snacks.picker.lines()<cr>";
options.desc = "Buffer Lines";
}
{
key = "<leader>st";
action = "<cmd>lua Snacks.picker.todo_comments()<cr>";
options.desc = "Todos";
}
{
key = "<leader>sB";
action = "<cmd>lua Snacks.picker.grep_buffers()<cr>";
options.desc = "Grep Open Buffers";
}
{
key = "<leader>sg";
action = "<cmd>lua Snacks.picker.grep()<cr>";
options.desc = "Grep";
}
{
key = "<leader>sw";
action = "<cmd>lua Snacks.picker.grep_word()<cr>";
options.desc = "Visual selection or word";
}
{
key = "<leader>sr";
action = "<cmd>nohlsearch<cr>";
options.desc = "Reset search";
}
# LSP
{
key = "gd";
action = "<cmd>lua Snacks.picker.lsp_definitions()<cr>";
options.desc = "Goto Definition";
}
{
key = "gD";
action = "<cmd>lua Snacks.picker.lsp_declarations()<cr>";
options.desc = "Goto Declaration";
}
{
key = "gr";
action = "<cmd>lua Snacks.picker.lsp_references()<cr>";
options.desc = "References";
options.nowait = true;
}
{
key = "gI";
action = "<cmd>lua Snacks.picker.lsp_implementations()<cr>";
options.desc = "Goto Implementation";
}
{
key = "gy";
action = "<cmd>lua Snacks.picker.lsp_type_definitions()<cr>";
options.desc = "Goto Type Definition";
}
{
key = "<leader>ss";
action = "<cmd>lua Snacks.picker.lsp_symbols()<cr>";
options.desc = "LSP Symbols";
}
{
key = "<leader>sS";
action = "<cmd>lua Snacks.picker.lsp_workspace_symbols()<cr>";
options.desc = "LSP Workspace Symbols";
}
];
};
}
+40
View File
@@ -0,0 +1,40 @@
{
programs.nixvim = {
plugins.snacks = {
enable = true;
settings = {
image = {
enable = true;
doc = { inline = false; };
};
quickfile.enable = true;
statuscolumn.enable = true;
zen.enable = true;
bufdelete.enable = true;
};
};
keymaps = [
{
key = "<leader>uz";
action = "<cmd>lua Snacks.zen()<cr>";
options.desc = "Zen";
}
{
key = "<leader>ud";
action = "<cmd>lua Snacks.dim.enable()<cr>";
options.desc = "Dim";
}
{
key = "<leader>uD";
action = "<cmd>lua Snacks.dim.disable()<cr>";
options.desc = "Undim";
}
{
key = "<leader>wc";
action = "<cmd>lua Snacks.bufdelete.all()<cr>";
options.desc = "Close all buffers";
}
];
};
}
-31
View File
@@ -1,31 +0,0 @@
{ config, ... }:
let
accent = "#${config.lib.stylix.colors.base0D}";
background = "#${config.lib.stylix.colors.base00}";
background-alt = "#${config.lib.stylix.colors.base01}";
in {
programs.nixvim = {
highlight = {
TelescopePromptPrefix.fg = accent;
TelescopeSelectionCaret = {
fg = accent;
bg = background-alt;
};
TelescopeSelection.bg = background-alt;
TelescopePromptTitle = {
bg = background;
fg = accent;
};
TelescopePromptNormal.bg = background;
TelescopePromptBorder = {
bg = background;
fg = accent;
};
};
plugins.telescope = {
enable = true;
extensions.fzf-native = { enable = true; };
settings.defaults = { selection_caret = " "; };
};
};
}
-49
View File
@@ -1,49 +0,0 @@
{
programs.nixvim = {
plugins = {
neo-tree.enable = true;
oil = {
enable = true;
settings = {
default_file_explorer = false;
skip_confirm_for_simple_edits = true;
view_options.is_hidden_file = ''
function(name, bufnr)
return vim.startswith(name, ".") or name == "img"
end
'';
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";
};
};
};
};
};
}
+46
View File
@@ -0,0 +1,46 @@
{ pkgs, ... }: {
home.packages = with pkgs; [ ctags ];
programs.nixvim = {
plugins = {
trouble.enable = true;
which-key.settings.spec = [{
__unkeyed-1 = "<leader>t";
mode = "n";
group = "+trouble";
}];
};
keymaps = [
{
key = "<leader>tx";
action = "<cmd>Trouble diagnostics toggle<cr>";
options.desc = "Diagnostics (Trouble)";
}
{
key = "<leader>tX";
action = "<cmd>Trouble diagnostics toggle filter.buf=0<cr>";
options.desc = "Buffer Diagnostics (Trouble)";
}
{
key = "<leader>ts";
action = "<cmd>Trouble symbols toggle focus=false<cr>";
options.desc = "Symbols (Trouble)";
}
{
key = "<leader>tl";
action = "<cmd>Trouble lsp toggle focus=false win.position=right<cr>";
options.desc = "LSP Definitions / references / ... (Trouble)";
}
{
key = "<leader>tL";
action = "<cmd>Trouble loclist toggle<cr>";
options.desc = "Location List (Trouble)";
}
{
key = "<leader>tQ";
action = "<cmd>Trouble qflist toggle<cr>";
options.desc = "Quickfix List (Trouble)";
}
];
};
}
-14
View File
@@ -1,14 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs; [ ctags ];
programs.nixvim.plugins = {
web-devicons.enable = true;
noice.enable = true;
gitsigns = {
enable = true;
settings.current_line_blame = false;
};
trouble.enable = true;
bufferline.enable = true;
};
}
+18 -6
View File
@@ -1,16 +1,21 @@
{ config, ... }: {
{ config, lib, pkgs, ... }: {
programs.nixvim = {
nixpkgs.config.allowUnfree = true; # For copilot
highlightOverride = {
FloatBorder.fg = "#${config.lib.stylix.colors.base0D}";
WhichKeySeparator.bg = "#${config.lib.stylix.colors.base00}";
};
nixpkgs.config = { allowUnfree = true; };
plugins = {
copilot-vim.enable = true;
bufferline.enable = true;
copilot-vim = {
enable = true;
# FIXME: Temp issue solving
settings.node_command = lib.getExe pkgs.nodejs_20;
};
flash.enable = true;
tmux-navigator.enable = true;
comment.enable = true;
nvim-autopairs.enable = true;
todo-comments.enable = true;
lualine = { enable = true; };
aerial.enable = true;
treesitter = {
enable = true;
nixGrammars = true;
@@ -21,5 +26,12 @@
};
};
};
keymaps = [
{
key = "<leader>ct";
action = "<cmd>AerialToggle<cr>";
options.desc = "Aerial (tags)";
}
];
};
}
+1 -1
View File
@@ -80,7 +80,7 @@ let
in {
imports = [ ./duckduckgo-colorscheme.nix ];
imports = [ ../duckduckgo-colorscheme ];
programs.qutebrowser = {
enable = true;
@@ -1,44 +0,0 @@
# A duckduckgo colorscheme generated for the Stylix theme used.
{ config, ... }:
let
accent = config.lib.stylix.colors.base0D;
background = config.lib.stylix.colors.base00;
foreground = config.lib.stylix.colors.base05;
background-alt = config.lib.stylix.colors.base01;
foreground-alt = config.lib.stylix.colors.base06;
in {
home.file.".duckduckgo-colorscheme.js".text =
# js
''
// 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=${background}; j=${background}; 9=${foreground}; aa=${foreground-alt}; 8=${foreground}; x=${accent}; 21=${background-alt};';
// 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 ]}`;
});
};
// Call set cookies, passing in formated cookie data
setCookies(cookieToJSON(cookie));
// All done, reload page for changes to take effect :)
location.reload();
'';
}
+1 -1
View File
@@ -19,7 +19,7 @@ in {
defaultOptions = [
"--margin=1"
"--layout=reverse"
"--border=rounded"
"--border=none"
"--info='hidden'"
"--header=''"
"--prompt='/ '"
+2
View File
@@ -9,6 +9,8 @@ in {
settings = {
add_newline = true;
format = lib.concatStrings [
"$nix_shell"
"$hostname"
"$directory"
"$git_branch"
"$git_state"
+121 -22
View File
@@ -1,6 +1,6 @@
# My shell configuration
{ pkgs, lib, config, ... }:
let fetch = config.var.theme.fetch; # neofetch, nerdfetch, pfetch
let fetch = config.theme.fetch; # neofetch, nerdfetch, pfetch
in {
home.packages = with pkgs; [ bat ripgrep tldr sesh ];
@@ -11,31 +11,51 @@ in {
enable = true;
enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
syntaxHighlighting = {
enable = true;
highlighters = [ "main" "brackets" "pattern" "regexp" "root" "line" ];
};
historySubstringSearch.enable = true;
initExtraFirst = ''
bindkey -e
${if fetch == "neofetch" then
pkgs.neofetch + "/bin/neofetch"
else if fetch == "nerdfetch" then
"nerdfetch"
else if fetch == "pfetch" then
"echo; ${pkgs.pfetch}/bin/pfetch"
else
""}
initExtraFirst =
#bash
''
bindkey -e
${if fetch == "neofetch" then
pkgs.neofetch + "/bin/neofetch"
else if fetch == "nerdfetch" then
"nerdfetch"
else if fetch == "pfetch" then
"echo; ${pkgs.pfetch}/bin/pfetch"
else
""}
function sesh-sessions() {
session=$(sesh list -t -c | fzf --height 70% --reverse)
[[ -z "$session" ]] && return
sesh connect $session
}
function sesh-sessions() {
session=$(sesh list -t -c | fzf --height 70% --reverse)
[[ -z "$session" ]] && return
sesh connect $session
}
zle -N sesh-sessions
bindkey -M emacs '\es' sesh-sessions
bindkey -M vicmd '\es' sesh-sessions
bindkey -M viins '\es' sesh-sessions
'';
function chatgptlist(){
for arg in "$@"; do
echo "$arg:"
echo "\`\`\`"
cat "$arg"
echo "\`\`\`"
echo
done
}
function n4c() {
nix develop --no-write-lock-file --refresh "github:anotherhadi/nix4cyber#''${1:-all}"
}
zle -N sesh-sessions
bindkey -M emacs '\es' sesh-sessions
bindkey -M vicmd '\es' sesh-sessions
bindkey -M viins '\es' sesh-sessions
'';
history = {
ignoreDups = true;
@@ -76,13 +96,19 @@ in {
open = "${pkgs.xdg-utils}/bin/xdg-open";
icat = "${pkgs.kitty}/bin/kitty +kitten icat";
ssh = "kitty +kitten ssh";
cat =
"bat --theme=base16 --color=always --paging=never --tabs=2 --wrap=never --plain";
obsidian-no-gpu =
"env ELECTRON_OZONE_PLATFORM_HINT=auto obsidian --ozone-platform=x11";
wireguard-import = "nmcli connection import type wireguard file";
notes =
"nvim ~/nextcloud/notes/index.md --cmd 'cd ~/nextcloud/notes' -c ':Telescope find_files'";
note = "notes";
nix-shell = "nix-shell --command zsh";
# git
g = "lazygit";
ga = "git add";
@@ -101,5 +127,78 @@ in {
gaa = "git add .";
gcm = "git commit -m";
};
initExtra = ''
# search history based on what's typed in the prompt
autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^[OA" history-beginning-search-backward-end
bindkey "^[OB" history-beginning-search-forward-end
# General completion behavior
zstyle ':completion:*' completer _extensions _complete _approximate
# Use cache
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path "$XDG_CACHE_HOME/zsh/.zcompcache"
# Complete the alias
zstyle ':completion:*' complete true
# Autocomplete options
zstyle ':completion:*' complete-options true
# Completion matching control
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
zstyle ':completion:*' keep-prefix true
# Group matches and describe
zstyle ':completion:*' menu select
zstyle ':completion:*' list-grouped false
zstyle ':completion:*' list-separator '''
zstyle ':completion:*' group-name '''
zstyle ':completion:*' verbose yes
zstyle ':completion:*:matches' group 'yes'
zstyle ':completion:*:warnings' format '%F{red}%B-- No match for: %d --%b%f'
zstyle ':completion:*:messages' format '%d'
zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b'
zstyle ':completion:*:descriptions' format '[%d]'
# Colors
zstyle ':completion:*' list-colors ''${(s.:.)LS_COLORS}
# case insensitive tab completion
zstyle ':completion:*:*:cd:*' tag-order local-directories directory-stack path-directories
zstyle ':completion:*:*:cd:*:directory-stack' menu yes select
zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand'
zstyle ':completion:*:*:-command-:*:*' group-order aliases builtins functions commands
zstyle ':completion:*' special-dirs true
zstyle ':completion:*' squeeze-slashes true
# Sort
zstyle ':completion:*' sort false
zstyle ":completion:*:git-checkout:*" sort false
zstyle ':completion:*' file-sort modification
zstyle ':completion:*:eza' sort false
zstyle ':completion:complete:*:options' sort false
zstyle ':completion:files' sort false
${lib.optionalString config.services.gpg-agent.enable ''
gnupg_path=$(ls $XDG_RUNTIME_DIR/gnupg)
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gnupg/$gnupg_path/S.gpg-agent.ssh"
''}
# Allow foot to pipe command output
function precmd {
if ! builtin zle; then
print -n "\e]133;D\e\\"
fi
}
function preexec {
print -n "\e]133;C\e\\"
}
'';
};
}
+6 -2
View File
@@ -3,6 +3,7 @@
let
spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
accent = "${config.lib.stylix.colors.base0D}";
background = "${config.lib.stylix.colors.base00}";
in {
imports = [ inputs.spicetify-nix.homeManagerModules.default ];
@@ -10,7 +11,7 @@ in {
programs.spicetify = {
enable = true;
theme = lib.mkForce spicePkgs.themes.text;
theme = lib.mkForce spicePkgs.themes.dribbblish;
colorScheme = "custom";
@@ -18,6 +19,9 @@ in {
button = accent;
button-active = accent;
tab-active = accent;
player = background;
main = background;
sidebar = background;
};
enabledExtensions = with spicePkgs.extensions; [
@@ -27,7 +31,7 @@ in {
hidePodcasts
adblock
fullAppDisplay
shuffle
keyboardShortcut
];
};
}
+8
View File
@@ -0,0 +1,8 @@
# Tailscale is a VPN service that works on top of WireGuard.
# It allows me to access my servers and devices from anywhere.
{ pkgs, ... }: {
home.packages = with pkgs; [ tailscale tailscale-systray ];
wayland.windowManager.hyprland.settings.exec-once =
[ "${pkgs.tailscale-systray}/bin/tailscale-systray" ];
}
+35 -7
View File
@@ -1,12 +1,40 @@
# Thunar is a file explorer
{ pkgs, ... }: {
{ pkgs, config, ... }:
let user = config.var.username;
in {
# ctrl + m to toggle the menubar
home.packages = with pkgs.xfce; [
thunar
xfconf
tumbler
thunar-archive-plugin
thunar-volman
home.packages = with pkgs; [
xfce.thunar
xfce.xfconf
xfce.tumbler
xfce.thunar-archive-plugin
xfce.thunar-volman
xfce.thunar-media-tags-plugin
p7zip
unar
];
gtk = {
iconTheme = {
name = "WhiteSur";
package = pkgs.whitesur-icon-theme.override {
boldPanelIcons = true;
alternativeIcons = true;
};
};
};
home.sessionVariables = {
XDG_ICON_DIR = "${pkgs.whitesur-icon-theme}/share/icons/WhiteSur";
};
# bookmarks for the side pane
gtk.gtk3.bookmarks = [
"file:///home/${user}/Downloads Downloads"
"file:///home/${user}/Pictures Pictures"
"file:///home/${user}/nextcloud Nextcloud"
"file:///home/${user}/.config/nixos NixOS"
"file:///home/${user}/dev Development"
];
home.file.".config/xfce4/xfconf/xfce-perchannel-xml/thunar.xml".text = ''
+11 -83
View File
@@ -1,86 +1,14 @@
{ pkgs, config, inputs, ... }:
# Zen is a minimalistic web browser.
{ pkgs, inputs, ... }:
let
accent = "#${config.lib.stylix.colors.base0D}";
background = "#${config.lib.stylix.colors.base00}";
foreground = "#${config.lib.stylix.colors.base05}";
muted = "#${config.lib.stylix.colors.base03}";
settings = ''
{
"config": {
"title" : "Welcome Home",
"openLinksInNewTab": false,
"locale": "fr-FR",
"colors": {
"primary": "${accent}",
"background": "${background}",
"foreground": "${foreground}",
"muted": "#${muted}"
},
"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
# Create a wrapper script for zen-browser with Wayland enabled
zenWithWayland = pkgs.symlinkJoin {
name = "zen-browser-wayland";
paths = [ inputs.zen-browser.packages."${pkgs.system}".default ];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/zen \
--set MOZ_ENABLE_WAYLAND 1
'';
meta = {
description = "homepage";
homepage = "https://github.com/anotherhadi/homepage";
};
};
in {
home.file.".config/homepage" = {
source = "${homepage}/build";
recursive = true;
};
home.packages = with pkgs;
[ inputs.zen-browser.packages."${system}".default ];
}
in { home.packages = [ zenWithWayland ]; }
+5 -12
View File
@@ -28,6 +28,7 @@ let
"󰚰;Update;nixy update"
";Collect Garbage;nixy gc"
"󰍜;Clean Boot Menu;nixy cb"
";List generation;nixy listgen"
"󰌌;Hyprland Keybindings;nvim ${configDirectory}/docs/KEYBINDINGS-HYPRLAND.md"
"󰋩;Wallpapers;zen https://github.com/anotherhadi/nixy-wallpapers"
)
@@ -44,12 +45,13 @@ let
command=$(echo "$line" | sed 's/^[^;]*;//;s/^[^;]*;//')
exec "$command"
exit 0
exit $?
}
[[ $1 == "" ]] && ui
if [[ $1 == "rebuild" ]];then
cd ${configDirectory} && git add .
sudo nixos-rebuild switch --flake ${configDirectory}#${hostname}
elif [[ $1 == "upgrade" ]];then
sudo nixos-rebuild switch --upgrade --flake '${configDirectory}#${hostname}'
@@ -59,17 +61,8 @@ let
cd ${configDirectory} && sudo nix-collect-garbage -d
elif [[ $1 == "cb" ]];then
sudo /run/current-system/bin/switch-to-configuration boot
elif [[ $1 == "remote" ]];then
cd ~/.config/nixos && git add . && git commit -m "update" && git push
ssh jack -S -C "cd /home/hadi/.config/nixos && git pull && sudo -S nixos-rebuild switch --flake ~/.config/nixos#jack"
elif [[ $1 == "loop" ]];then
while true; do
nixy
echo "Press enter to continue, e to exit"
read -n 1 REPLY
clear
[[ $REPLY == "e" ]] && exit 0
done
elif [[ $1 == "listgen" ]];then
sudo nix-env -p /nix/var/nix/profiles/system --list-generations
else
echo "Unknown argument"
fi
+12 -6
View File
@@ -4,6 +4,7 @@
#-
#- - `menu` - Open wofi with drun mode. (wofi)
#- - `powermenu` - Open power dropdown menu. (wofi)
#- - `quickmenu` - Open a dropdown menu with shortcuts and scripts. (wofi)
#- - `lock` - Lock the screen. (hyprlock)
{ pkgs, ... }:
@@ -14,13 +15,18 @@ let
if pgrep wofi; then
pkill wofi
else
wofi -p " Apps" --show drun
wofi -p " Apps" --show drun &
# Quit when not focused anymore
sleep 0.2
while true; do
window=$(hyprctl activewindow | grep "wofi")
if [[ ! $window ]]; then
pkill wofi
break
fi
sleep 0.2
done
fi
# if pgrep tofi; then
# pkill tofi
# else
# tofi-drun --drun-launch=true
# fi
'';
powermenu = pkgs.writeShellScriptBin "powermenu"
-8
View File
@@ -1,8 +0,0 @@
# Batsignal is a simple utility to send battery notifications.
{ pkgs, ... }: {
services.batsignal = {
enable = true;
extraArgs =
[ "-c 10" "-w 30" "-f disabled" "-D ${pkgs.hyprlock}/bin/hyprlock" ];
};
}
+3 -1
View File
@@ -1,5 +1,5 @@
# Hypridle is a daemon that listens for user activity and runs commands when the user is idle.
{ pkgs, ... }: {
{ pkgs, lib, ... }: {
services.hypridle = {
enable = true;
settings = {
@@ -24,4 +24,6 @@
];
};
};
systemd.user.services.hypridle.Unit.After =
lib.mkForce "graphical-session.target";
}
+1 -1
View File
@@ -1,6 +1,6 @@
{ config, ... }:
let
animationSpeed = config.var.theme.animation-speed;
animationSpeed = config.theme.animation-speed;
animationDuration = if animationSpeed == "slow" then
"4"
+6 -6
View File
@@ -1,16 +1,16 @@
{ pkgs, ... }: {
wayland.windowManager.hyprland.settings = {
bind = [
"$mod,RETURN, exec, ${pkgs.kitty}/bin/kitty" # Kitty
"$mod,E, exec, ${pkgs.xfce.thunar}/bin/thunar" # Thunar
"$mod,B, exec, zen" # Zen Browser
"$mod,K, exec, ${pkgs.bitwarden}/bin/bitwarden" # Bitwarden
"$mod,L, exec, ${pkgs.hyprlock}/bin/hyprlock" # Lock
"$mod,RETURN, exec, uwsm app -- ${pkgs.kitty}/bin/kitty" # Kitty
"$mod,E, exec, uwsm app -- ${pkgs.xfce.thunar}/bin/thunar" # Thunar
"$mod,B, exec, uwsm app -- zen-beta" # Zen Browser
"$mod,K, exec, uwsm app -- ${pkgs.bitwarden}/bin/bitwarden" # Bitwarden
"$mod,L, exec, uwsm app -- ${pkgs.hyprlock}/bin/hyprlock" # Lock
"$mod,X, exec, powermenu" # Powermenu
"$mod,SPACE, exec, menu" # Launcher
"$mod,C, exec, quickmenu" # Quickmenu
"$shiftMod,SPACE, exec, hyprfocus-toggle" # Toggle HyprFocus
"$mod,P, exec, ${pkgs.planify}/bin/io.github.alainm23.planify" # Planify
"$mod,P, exec, uwsm app -- ${pkgs.planify}/bin/io.github.alainm23.planify" # Planify
"$mod,Q, killactive," # Close window
"$mod,T, togglefloating," # Toggle Floating
+69 -38
View File
@@ -1,18 +1,25 @@
# So best window tiling manager
{ pkgs, config, inputs, ... }:
{ pkgs, config, inputs, lib, ... }:
let
border-size = config.var.theme.border-size;
gaps-in = config.var.theme.gaps-in;
gaps-out = config.var.theme.gaps-out;
active-opacity = config.var.theme.active-opacity;
inactive-opacity = config.var.theme.inactive-opacity;
rounding = config.var.theme.rounding;
blur = config.var.theme.blur;
border-size = config.theme.border-size;
gaps-in = config.theme.gaps-in;
gaps-out = config.theme.gaps-out;
active-opacity = config.theme.active-opacity;
inactive-opacity = config.theme.inactive-opacity;
rounding = config.theme.rounding;
blur = config.theme.blur;
keyboardLayout = config.var.keyboardLayout;
background = "rgb(" + config.lib.stylix.colors.base00 + ")";
in {
imports =
[ ./animations.nix ./bindings.nix ./polkitagent.nix ./hyprspace.nix ];
imports = [
./animations.nix
./bindings.nix
./polkitagent.nix
./keyboard-backlight.nix # CHANGEME: This is for my laptop only
# FIXME: Broken on unstable
# ./hyprspace.nix
];
home.packages = with pkgs; [
qt5.qtwayland
@@ -40,30 +47,34 @@ in {
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
systemd.enable = true;
# withUWSM = true; # One day, but not today
package = inputs.hyprland.packages."${pkgs.system}".hyprland;
systemd = {
enable = false;
variables = [
"--all"
]; # https://wiki.hyprland.org/Nix/Hyprland-on-Home-Manager/#programs-dont-work-in-systemd-services-but-do-on-the-terminal
};
package = null;
portalPackage = null;
settings = {
"$mod" = "SUPER";
"$shiftMod" = "SUPER_SHIFT";
exec-once = [
"${pkgs.bitwarden}/bin/bitwarden"
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
"dbus-update-activation-environment --systemd --all &"
"systemctl --user enable --now hyprpaper.service &"
"systemctl --user enable --now hypridle.service &"
"systemctl --user enable --now nextcloud-client.service &"
];
monitor = [
"eDP-2,highres,0x0,1"
"DP-7, disable"
"DP-8, disable"
"DP-9, disable"
"HDMI-A-1,3440x1440@99.98,auto,1"
",prefered,auto,1"
"eDP-2,highres,0x0,1" # My internal laptop screen
"desc:AOC U34G2G1 0x00000E06,3440x1440@99.98,auto,1" # My external monitor
"desc:United Microelectr Corporation UMC SHARP,3840x2160,auto,2" # TV
",prefered,auto,1" # default
];
env = [
"XDG_SESSION_TYPE,wayland"
"XDG_CURRENT_DESKTOP,Hyprland"
"MOZ_ENABLE_WAYLAND,1"
"ANKI_WAYLAND,1"
@@ -75,8 +86,6 @@ in {
"QT_QPA_PLATFORM=wayland,xcb"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"ELECTRON_OZONE_PLATFORM_HINT,auto"
# "GTK_THEME,FlatColor:dark"
# "GTK2_RC_FILES,/home/hadi/.local/share/themes/FlatColor/gtk-2.0/gtkrc"
"__GL_GSYNC_ALLOWED,0"
"__GL_VRR_ALLOWED,0"
"DISABLE_QT5_COMPAT,0"
@@ -85,7 +94,6 @@ in {
"WLR_BACKEND,vulkan"
"WLR_RENDERER,vulkan"
"WLR_NO_HARDWARE_CURSORS,1"
"XDG_SESSION_TYPE,wayland"
"SDL_VIDEODRIVER,wayland"
"CLUTTER_BACKEND,wayland"
"AQ_DRM_DEVICES,/dev/dri/card2:/dev/dri/card1" # CHANGEME: Related to the GPU
@@ -101,8 +109,8 @@ in {
gaps_in = gaps-in;
gaps_out = gaps-out;
border_size = border-size;
border_part_of_window = true;
layout = "master";
"col.inactive_border" = lib.mkForce background;
};
decoration = {
@@ -114,7 +122,10 @@ in {
range = 20;
render_power = 3;
};
blur = { enabled = if blur then "true" else "false"; };
blur = {
enabled = if blur then "true" else "false";
size = 18;
};
};
master = {
@@ -134,16 +145,38 @@ in {
new_window_takes_over_fullscreen = 2;
};
windowrulev2 =
[ "float, tag:modal" "pin, tag:modal" "center, tag:modal" ];
windowrulev2 = [
"float, tag:modal"
"pin, tag:modal"
"center, tag:modal"
# telegram media viewer
"float, title:^(Media viewer)$"
windowrule = [
"workspace 6, discord"
"workspace 7, spotify"
"workspace 8, io.github.alainm23.planify"
"fullscreen, io.github.alainm23.planify"
"workspace 9, Proton Mail"
"fullscreen, Proton Mail"
# Bitwarden extension
"float, title:^(.*Bitwarden Password Manager.*)$"
# gnome calculator
"float, class:^(org.gnome.Calculator)$"
"size 360 490, class:^(org.gnome.Calculator)$"
# make Firefox/Zen PiP window floating and sticky
"float, title:^(Picture-in-Picture)$"
"pin, title:^(Picture-in-Picture)$"
# idle inhibit while watching videos
"idleinhibit focus, class:^(mpv|.+exe|celluloid)$"
"idleinhibit focus, class:^(zen)$, title:^(.*YouTube.*)$"
"idleinhibit fullscreen, class:^(zen)$"
"dimaround, class:^(gcr-prompter)$"
"dimaround, class:^(xdg-desktop-portal-gtk)$"
"dimaround, class:^(polkit-gnome-authentication-agent-1)$"
"dimaround, class:^(zen)$, title:^(File Upload)$"
# fix xwayland apps
"rounding 0, xwayland:1"
"center, class:^(.*jetbrains.*)$, title:^(Confirm Exit|Open Project|win424|win201|splash)$"
"size 640 400, class:^(.*jetbrains.*)$, title:^(splash)$"
];
layerrule = [ "noanim, launcher" "noanim, ^ags-.*" ];
@@ -166,6 +199,4 @@ in {
};
};
systemd.user.targets.hyprland-session.Unit.Wants =
[ "xdg-desktop-autostart.target" ];
}
+13 -4
View File
@@ -1,11 +1,20 @@
# Hyprspace is a hyprland plugin that provides a workspaces overview (three-finger swipe up) and a workspace switcher (three-finger down).
{ inputs, pkgs, ... }: {
wayland.windowManager.hyprland = {
plugins = [ inputs.hyprspace.packages.${pkgs.system}.Hyprspace ];
settings = {
plugin = { overview = { autoDrag = false; }; };
bind = [
"$mod,TAB, overview:toggle" # Overview
];
plugin = {
overview = {
centerAligned = true;
hideTopLayers = true;
hideOverlayLayers = true;
showNewWorkspace = true;
exitOnClick = true;
exitOnSwitch = true;
drawActiveWorkspace = true;
autoDrag = false;
};
};
};
};
}
@@ -0,0 +1,32 @@
# Turn the keyboard red/off when the battery is low
{ pkgs, config, ... }:
let
keyboard-backlight = pkgs.writeShellScriptBin "keyboard-backlight" ''
function set_keyboard_backlight {
local color=$1
echo $color > /sys/devices/platform/hp-wmi/rgb_zones/zone00
echo $color > /sys/devices/platform/hp-wmi/rgb_zones/zone01
echo $color > /sys/devices/platform/hp-wmi/rgb_zones/zone02
echo $color > /sys/devices/platform/hp-wmi/rgb_zones/zone03
}
state="white"
while true; do
BATTERY_LEVEL=$(cat /sys/class/power_supply/BAT*/capacity)
if [[ $BATTERY_LEVEL -le 10 ]]; then
if [[ $state == "red" ]];then
state="white"
set_keyboard_backlight "000000"
else
state="red"
set_keyboard_backlight "FF0000"
fi
else
state="white"
set_keyboard_backlight ${config.lib.stylix.colors.base0D}
fi
sleep 2
done
'';
in {
wayland.windowManager.hyprland.settings.exec-once = [ keyboard-backlight ];
}
+3 -3
View File
@@ -1,6 +1,6 @@
{ inputs, pkgs, ... }: {
home.packages =
[ inputs.hyprpolkitagent.packages."${pkgs.system}".hyprpolkitagent ];
# HyprPolkitAgent is a simple polkit agent for wayland compositors
{ pkgs, ... }: {
home.packages = with pkgs; [ hyprpolkitagent ];
wayland.windowManager.hyprland.settings.exec-once =
[ "systemctl --user start hyprpolkitagent" ];
+3 -5
View File
@@ -1,8 +1,7 @@
# Hyprlock is a lockscreen for Hyprland
{ config, lib, ... }:
let
foreground = "rgba(216, 222, 233, 0.70)";
imageStr = toString config.stylix.image;
foreground = "rgba(${config.theme.textColorOnWallpaper}ee)";
font = config.stylix.fonts.serif.name;
in {
programs.hyprlock = {
@@ -17,7 +16,6 @@ in {
# BACKGROUND
background = {
monitor = "";
path = imageStr;
blur_passes = 0;
contrast = 0.8916;
brightness = 0.7172;
@@ -73,8 +71,8 @@ in {
dots_size = 0.2; # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.2; # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true;
outer_color = "rgba(255, 255, 255, 0)";
inner_color = "rgba(255, 255, 255, 0.1)";
outer_color = "rgba(25, 25, 25, 0)";
inner_color = "rgba(25, 25, 25, 0.1)";
font_color = foreground;
fade_on_empty = false;
font_family = font + " Bold";
+46 -30
View File
@@ -2,25 +2,28 @@
# Display informations like workspaces, battery, wifi, ...
{ inputs, config, ... }:
let
transparentButtons = config.var.theme.bar.transparentButtons;
transparentButtons = config.theme.bar.transparentButtons;
accent = "#${config.lib.stylix.colors.base0D}";
accent-alt = "#${config.lib.stylix.colors.base03}";
background = "#${config.lib.stylix.colors.base00}";
background-alt = "#${config.lib.stylix.colors.base01}";
foreground = "#${config.lib.stylix.colors.base05}";
foregroundOnWallpaper = "#${config.theme.textColorOnWallpaper}";
font = "${config.stylix.fonts.serif.name}";
fontSize = "${toString config.stylix.fonts.sizes.desktop}";
rounding = config.var.theme.rounding;
border-size = config.var.theme.border-size;
rounding = config.theme.rounding;
border-size = config.theme.border-size;
gaps-out = config.var.theme.gaps-out;
gaps-in = config.var.theme.gaps-in;
gaps-out = config.theme.gaps-out;
gaps-in = config.theme.gaps-in;
floating = config.var.theme.bar.floating;
transparent = config.var.theme.bar.transparent;
position = config.var.theme.bar.position;
floating = config.theme.bar.floating;
transparent = config.theme.bar.transparent;
position = config.theme.bar.position;
notificationOpacity = 90;
location = config.var.location;
in {
@@ -32,20 +35,22 @@ in {
hyprland.enable = true;
overwrite.enable = true;
overlay.enable = true;
layout = {
"bar.layouts" = {
"*" = {
"left" = [ "dashboard" "workspaces" "windowtitle" ];
"middle" = [ "media" "cava" ];
"right" = [
"systray"
"volume"
"bluetooth"
"battery"
"network"
"clock"
"notifications"
];
settings = {
layout = {
"bar.layouts" = {
"*" = {
"left" = [ "dashboard" "workspaces" "windowtitle" ];
"middle" = [ "media" "cava" ];
"right" = [
"systray"
"volume"
"bluetooth"
"battery"
"network"
"clock"
"notifications"
];
};
};
};
};
@@ -95,6 +100,7 @@ in {
"menus.clock.weather.location" = "${location}";
"menus.clock.weather.unit" = "metric";
"menus.dashboard.powermenu.confirmation" = false;
"menus.dashboard.powermenu.avatar.image" = "~/.face.icon";
"menus.dashboard.shortcuts.left.shortcut1.icon" = "";
"menus.dashboard.shortcuts.left.shortcut1.command" = "zen";
@@ -145,7 +151,10 @@ in {
+ (if transparentButtons && transparent then "00" else "")}";
"theme.bar.buttons.style" = "default";
"theme.bar.buttons.monochrome" = true;
"theme.bar.buttons.text" = "${foreground}";
"theme.bar.buttons.text" = if transparent && transparentButtons then
"${foregroundOnWallpaper}"
else
"${foreground}";
"theme.bar.buttons.background" =
"${(if transparent then background else background-alt)
+ (if transparentButtons then "00" else "")}";
@@ -155,13 +164,6 @@ in {
"theme.bar.buttons.notifications.hover" = "${background}";
"theme.bar.buttons.notifications.total" = "${accent}";
"theme.bar.buttons.notifications.icon" = "${accent}";
"theme.notification.background" = "${background-alt}";
"theme.notification.actions.background" = "${accent}";
"theme.notification.actions.text" = "${foreground}";
"theme.notification.label" = "${accent}";
"theme.notification.border" = "${background-alt}";
"theme.notification.text" = "${foreground}";
"theme.notification.labelicon" = "${accent}";
"theme.osd.bar_color" = "${accent}";
"theme.osd.bar_overflow_color" = "${accent-alt}";
"theme.osd.icon" = "${background}";
@@ -185,6 +187,20 @@ in {
"bar.customModules.cava.showIcon" = false;
"bar.customModules.cava.stereo" = true;
"bar.customModules.cava.showActiveOnly" = true;
"menus.power.lowBatteryNotification" = true;
"notifications.position" = "top right";
"notifications.showActionsOnHover" = true;
"theme.notification.enableShadow" = true;
"theme.notification.opacity" = notificationOpacity;
"theme.notification.background" = "${background-alt}";
"theme.notification.actions.background" = "${accent}";
"theme.notification.actions.text" = "${foreground}";
"theme.notification.label" = "${accent}";
"theme.notification.border" = "${background-alt}";
"theme.notification.text" = "${foreground}";
"theme.notification.labelicon" = "${accent}";
"theme.notification.close_button.background" = "${background-alt}";
"theme.notification.close_button.label" = "#f38ba8";
};
};
}
+3 -1
View File
@@ -1,5 +1,5 @@
# Hyprpaper is used to set the wallpaper on the system
{
{ lib, ... }: {
# The wallpaper is set by stylix
services.hyprpaper = {
enable = true;
@@ -9,4 +9,6 @@
splash_offset = 2.0;
};
};
systemd.user.services.hyprpaper.Unit.After =
lib.mkForce "graphical-session.target";
}
+90 -37
View File
@@ -1,40 +1,93 @@
# Mime allows us to configure the default applications for each file type
{
xdg.mimeApps = {
enable = true;
defaultApplications = {
"text/markdown" = "nvim.desktop";
"text/plain" = "nvim.desktop";
"text/x-shellscript" = "nvim.desktop";
"text/x-python" = "nvim.desktop";
"text/x-go" = "nvim.desktop";
"text/css" = "nvim.desktop";
"text/javascript" = "nvim.desktop";
"text/x-c" = "nvim.desktop";
"text/x-c++" = "nvim.desktop";
"text/x-java" = "nvim.desktop";
"text/x-rust" = "nvim.desktop";
"text/x-yaml" = "nvim.desktop";
"text/x-toml" = "nvim.desktop";
"text/x-dockerfile" = "nvim.desktop";
"text/x-xml" = "nvim.desktop";
"text/x-php" = "nvim.desktop";
"image/jpeg" = "imv.desktop";
"image/jpg" = "imv.desktop";
"image/webp" = "imv.desktop";
"image/gif" = "zen.desktop";
"x-scheme-handler/http" = "zen.desktop";
"x-scheme-handler/https" = "zen.desktop";
"text/html" = "zen.desktop";
"application/pdf" = "zathura.desktop";
"image/png" = "imv-dir.desktop";
"x-scheme-handler/chrome" = "zen.desktop";
"application/x-extension-htm" = "zen.desktop";
"application/x-extension-html" = "zen.desktop";
"application/x-extension-shtml" = "zen.desktop";
"application/xhtml+xml" = "zen.desktop";
"application/x-extension-xhtml" = "zen.desktop";
"application/x-extension-xht" = "zen.desktop";
{ pkgs, lib, ... }:
with lib;
let
defaultApps = {
browser = [ "zen-beta.desktop" ];
text = [ "org.gnome.TextEditor.desktop" ];
image = [ "imv-dir.desktop" ];
audio = [ "mpv.desktop" ];
video = [ "mpv.desktop" ];
directory = [ "thunar.desktop" ];
office = [ "libreoffice.desktop" ];
pdf = [ "zathura.desktop" ];
terminal = [ "kitty.desktop" ];
discord = [ "discord.desktop" ];
};
mimeMap = {
text = [ "text/plain" ];
image = [
"image/bmp"
"image/gif"
"image/jpeg"
"image/jpg"
"image/png"
"image/svg+xml"
"image/tiff"
"image/vnd.microsoft.icon"
"image/webp"
];
audio = [
"audio/aac"
"audio/mpeg"
"audio/ogg"
"audio/opus"
"audio/wav"
"audio/webm"
"audio/x-matroska"
];
video = [
"video/mp2t"
"video/mp4"
"video/mpeg"
"video/ogg"
"video/webm"
"video/x-flv"
"video/x-matroska"
"video/x-msvideo"
];
directory = [ "inode/directory" ];
browser = [
"text/html"
"x-scheme-handler/about"
"x-scheme-handler/http"
"x-scheme-handler/https"
"x-scheme-handler/unknown"
];
office = [
"application/vnd.oasis.opendocument.text"
"application/vnd.oasis.opendocument.spreadsheet"
"application/vnd.oasis.opendocument.presentation"
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
"application/vnd.openxmlformats-officedocument.presentationml.presentation"
"application/msword"
"application/vnd.ms-excel"
"application/vnd.ms-powerpoint"
"application/rtf"
];
pdf = [ "application/pdf" ];
terminal = [ "terminal" ];
# archive = [
# "application/zip"
# "application/rar"
# "application/7z"
# "application/*tar"
# ];
discord = [ "x-scheme-handler/discord" ];
};
associations = with lists;
listToAttrs (flatten (mapAttrsToList
(key: map (type: attrsets.nameValuePair type defaultApps."${key}"))
mimeMap));
in {
xdg = {
configFile."mimeapps.list".force = true;
mimeApps = {
enable = true;
associations.added = associations;
defaultApplications = associations;
};
};
}
-23
View File
@@ -1,23 +0,0 @@
# Tofi is a dmeny-like application launcher
{ config, lib, ... }:
let
background = "#${config.lib.stylix.colors.base00}70";
accent = "#${config.lib.stylix.colors.base0D}";
in {
programs.tofi = lib.mkForce {
enable = true;
settings = {
border-width = 0;
background-color = background;
prompt-color = accent;
selection-color = accent;
height = "100%";
num-results = 5;
outline-width = 0;
padding-left = "35%";
padding-top = "35%";
result-spacing = 25;
width = "100%";
};
};
}
+4 -5
View File
@@ -6,7 +6,7 @@ let
background-alt = "#${config.lib.stylix.colors.base01}";
foreground = "#${config.lib.stylix.colors.base05}";
font = config.stylix.fonts.serif.name;
rounding = config.var.theme.rounding;
rounding = config.theme.rounding;
font-size = config.stylix.fonts.sizes.popups;
in {
@@ -17,13 +17,12 @@ in {
settings = {
allow_markup = true;
width = 450;
width = 650;
show = "drun";
prompt = "Apps";
normal_window = true;
layer = "top";
term = "foot";
height = "305px";
height = "325px";
orientation = "vertical";
halign = "fill";
line_wrap = "off";
@@ -48,7 +47,7 @@ in {
''
* {
font-family: "${font}";
font-weight: 500;
font-weight: 600;
font-size: ${toString font-size}px;
}
+6 -10
View File
@@ -1,26 +1,22 @@
{ config, ... }: {
imports = [
# Mostly system related configuration
../../nixos/nvidia.nix # CHANGEME: Remove this line if you don't have an Nvidia GPU
../../nixos/prime.nix # CHANGEME: Remove this line if you don't have an Nvidia GPU
../../nixos/audio.nix
../../nixos/bluetooth.nix
../../nixos/fonts.nix
../../nixos/home-manager.nix
../../nixos/network-manager.nix
../../nixos/nix.nix
../../nixos/systemd-boot.nix
../../nixos/timezone.nix
../../nixos/tuigreet.nix
../../nixos/sddm.nix
../../nixos/users.nix
../../nixos/utils.nix
../../nixos/xdg-portal.nix
../../nixos/docker.nix
../../nixos/variables-config.nix
../../nixos/tailscale.nix
../../nixos/hyprland.nix
# Choose your theme here
../../themes/stylix/yoru.nix
../../nixos/omen.nix # For my laptop only
# You should let those lines as is
./hardware-configuration.nix
./variables.nix
];
+21 -19
View File
@@ -1,26 +1,28 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: {
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
{ config, lib, pkgs, modulesPath, ... }:
boot = {
initrd.availableKernelModules =
[ "nvme" "xhci_pci" "usb_storage" "sd_mod" ];
initrd.kernelModules = [ ];
kernelModules = [ "kvm-amd" ];
extraModulePackages = [ ];
};
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
fileSystems."/" = {
device = "/dev/disk/by-uuid/6c2487ec-20ff-4ce3-9396-281c2094aba1";
fsType = "ext4";
};
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "uas" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/B4EA-C54F";
fsType = "vfat";
};
fileSystems."/" =
{ device = "/dev/disk/by-uuid/6320d3c6-0231-45ec-817a-c6f0e39aab73";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/5251-9B85";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
swapDevices = [ ];
@@ -30,9 +32,9 @@
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
# networking.interfaces.enp7s0f4u1u4.useDHCP = lib.mkDefault true;
# networking.interfaces.wlo1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+12 -8
View File
@@ -1,12 +1,12 @@
{ pkgs, config, ... }: {
imports = [
# Mostly user-specific configuration
./variables.nix
# Programs
../../home/programs/kitty
../../home/programs/nvim
# ../../home/programs/qutebrowser
../../home/programs/shell
../../home/programs/fetch
../../home/programs/git
@@ -16,6 +16,9 @@
../../home/programs/lazygit
../../home/programs/zen
../../home/programs/duckduckgo-colorscheme
../../home/programs/discord
../../home/programs/tailscale
../../home/programs/anyrun
# Scripts
../../home/scripts # All scripts
@@ -27,7 +30,6 @@
../../home/system/hyprpanel
../../home/system/hyprpaper
../../home/system/wofi
../../home/system/batsignal
../../home/system/zathura
../../home/system/mime
../../home/system/udiskie
@@ -42,33 +44,35 @@
packages = with pkgs; [
# Apps
discord # Chat
bitwarden # Password manager
vlc # Video player
blanket # White-noise app
obsidian # Note taking app
planify # Todolists
gnome-calendar # Calendar
protonmail-desktop
textpieces # Manipulate texts
curtail # Compress images
resources
gnome-clocks
gnome-text-editor
mpv # Video player
figma-linux
# Dev
go
nodejs
python3
jq
figlet
just
pnpm
lazydocker
air
# Utils
zip
unzip
optipng
jpegoptim
pfetch
pandoc
btop
fastfetch
@@ -79,7 +83,7 @@
cmatrix
# Backup
firefox
brave
vscode
];
-4
View File
@@ -23,10 +23,6 @@
key_groups:
- age:
- *primary
- path_regex: hosts/desktop/secrets/secrets.yaml$
key_groups:
- age:
- *primary
- path_regex: hosts/server/secrets/secrets.yaml$
key_groups:
- age:
+4 -4
View File
@@ -1,5 +1,5 @@
pia: ENC[AES256_GCM,data:0bnhHeVqKSLHVimd78a94ShHlO3+LUoZ4oiKD3cnBYkaZsw=,iv:S+/IChlFlqdI+PyFF+Ti4AJUkch2MS0qKiqHL1Q3RMk=,tag:+v2kV70ou84eIc01dKnAhA==,type:str]
sshconfig: ENC[AES256_GCM,data:/sDTGVeYRjxF5Epp5kmVS0ScSYOqOs2grX0+Ap8HJc8CQftpNOYXNYdEyqLDMc5g5ualaO4iKg4sQ76J4j9ZPugt4iprIvOo2Uxmu7KRU47Z8SNwrrMNpv6x/XA2P6r261e/e/pOHyrmiFfV/I5Km9IwGqY5TWbEhvjx8qyRO2bQDIdffI1L1ZWJGC9ZOZ4o5RJCr2xB+qxLLI2pl8qHZhvfZlGHnyHw5ne0RfAFubIrW4nQJTamoaGHZqWro4tVSfXAEb+9IsYCc1aj3MehVdV8PUQ38/LxL2MAQTt9bs7sHLf9DmxZ6rGPWmpJ+IRoQbP1PA65tobFOd+Kf13XvWymNUcQpQFHDj0vpvDONxIikO+vj2T7SteRRPy+38UPdB8jrHfQ1JrGbxUQIrWOWeD3S44lINmquIMclJQ26zf6nvklXR7xCuzNAvmjublsnYK+CGDkt/ap/kDD7nCuQYYY,iv:VX55dyt2N80LJPDYoUES7ZWJjlqVyQrUQWvOQ/yItBc=,tag:6NlHwy0SqJ40+ltQHzmX7g==,type:str]
sshconfig: ENC[AES256_GCM,data:wktwwpHsd6u/A5ti0RmWZB5qGO5Ok0ly0SucjBIUxIfMEF2b8Cbmyg6nBqqELEDo7GQ8Hlvpxa1Pu7ajgXy35HNupb33KSXMLofvxCoyfC9UbzT85nHgGpE5kGv9iTpiuBsaDTAL9UCBcEaJED8xbUIUG3RME1m1Qqi07081mtqY7xR53QgaUc2w8ATCQ1ymiW7xZ0IbZw8G7RWzV7AXMpC1VOgr1NFgvUfLs4L/1PdG40fYwFaF1BcGtzUnkeZCdeAnMWj55GI5+6OX80HYuIgPApHfjlgRVaQ2c6Utsdc2wqekkPut996nm6bGCpld3JlKL/VXnsnhJoKgfdulL2o8uDYypcacYwTXonKsHqXX4tkhniDsyB6PA0Ty/eXrzwbsjD/yTcDHDJX2Xy594nRgLDM+VvyVosH7WhIDcMrk/RpSbBB2T7mNORI0VlLQFdMX2Rc6b6X/kBbd78ZoIthiaiZdgRpX++OGbwr9Fky8ml88,iv:x8aekarsRkyMmU1GjZt9El8dS1B51M6Htv+68yfVB/o=,tag:y3TkpEVf9TSIi3iK5JqilQ==,type:str]
github-key: ENC[AES256_GCM,data:xUgFMlBo8e+3eXqNscxbby1dWug3SgUagDiNUe/IGVbU6cczkaJ3uOaB0OuRBQ8AYhOLkzXj0pIKjUrElHwmYrhURtS1aF4SFEGJsjhhobNA//j3E2/5/nLVjfco+lRzyHdwmsNhEUCqEhsXrrodJMb39H4b5oip3z0rjc729YveiWUKQxXVZVPurp3nq9yNnix9R4CA6XYFRW6T6MNqgPD5qhbcDlhxLb/SN+uI5h+5eZIS24VDWlKaTaCLL5KLhZmfuA37SquOQ+edi9Yg8MnfrZkMrp/3qmAjP2rSQLMOc4QdQCLQBQSf0/snpydgLwY+FoJmMSztwtkqUdIZWOfDUJbJxegEOrAR68jLTNbp+GYiDn3thtOZDiK5p/M1amjCT+A9qeFMed5WS+aZHNTRbR9UcfiP6+48MGZFt1mr7q+/CoL04/DTp0w6tUf6/SZD31NvTJDqngkhpc0ZH9Dh5+2JcnBWpq25AM36kZTn1hIQCLNTr/oGWZXSLA2tksAhQCaUcFj4IIh6Bl96,iv:GEJsAs5NriwENYTV/VShgJF6iMmrtTwNiXOvfXyEP8E=,tag:nfZgsFqaet075GjQAoVZxQ==,type:str]
gitlab-key: ENC[AES256_GCM,data:6271Tg7LIJsXAw7Co32vva+iUWv+eRAfVfXaGkoirHxiPTAgZfq8yDpGJwti2D/aFnLvbURcUgp3B5zy1aURu9puXi6QMu3orJOE2Zx0dX3lyeHyIhOZ1hAWsQxwBDkJYODuMZbIKHNrF26Mkk6smFF9SrGoADZGxY7XSou/iopw6yrLvQAXP6lN55PQvoP5/ek/QzKNwjJAbAjp7FjjtPqPUbUdj7bfIfr9avs6gpRYnRzb2H3auyhb5qvyuRWnKu4+FeZUofC7HnfRU1eSI8UzG49Rg4f2b1Xqr0JtsjvEmuRx7lbptINXEAjW7zaSZ2B9NgotWPIzkNZRNZkuTEaOulBf5iH3wJ9GM1FcbUu2gpCt6y+CMIk5QkVvETYtKuALLbcPx9/sc90doiH1411LeKQCs5l88BBILG9KPkKmXiGGUVNxzFtjbRYQIUEmmyl95kPPEdCkkzGzHXNfE3F9HRu4MCGKPK2yZPZtCXd3Jp1b21wKSIRNYqLqxru+J8eLSljd3czO0SuTG/Vx,iv:E+y3aVLaiStlPLTQBqyfJuEXtAQyOvDUYS+XfuOHuA0=,tag:6d1IAsGcmcpgL1pE9dDcbw==,type:str]
jack-key: ENC[AES256_GCM,data:VfCl3wH0MMBc8QDyjLDFeSvzSEsf7uGpfJvRjFrmjW+bPRUXBpZhJV8a9VQIAz7z7zZXvzARMfCeI0ydyC57CW81GH5/H5pneJ4b+xreINjVfdLbL1nC1thelo/O64jda/L+xVKhgE+QQi8/zt4JmXGghkP+74nYcTTaMpmcbgWw354J1ybXqyCEY+88nsJ1d2s+M7M2bplx4fGb7sLUs6sqdsad3sENzhH/0HQCFXreHTtgsLbIs8ccmdRgFNKM8/wD0OoW76rOQsJoA9JY4yOTQNVoX5M8+Olj6+wVlt6QBrWrYRuEztGnHrHvzxiHXtmEkMwVNfoPpEflQyRYRa0rVp/66REOkMckGx6/LbxKFgrxnifRlsK3kWd28v2bRGVQOghUluYUtVkaJ+eh6o6ik0NQKx8/H6BznBSDE6MjDwbLv434LHBfDtAqhWN1eMbOlunFivsl5Hb/6rl9kydHlcCS6FY8cUHoKQ90gDaUuDrvUifwmdO5hU0GH5tgvGi1ReK9ndcpQsrHptG6,iv:oC1xU5Tu3The105VYRmxIw4kEwDoqe8T/EH6mmqpqwQ=,tag:Pu8c536u6W7ALrqjRsvXDw==,type:str]
@@ -18,8 +18,8 @@ sops:
cmVxVC8rVDlWMUdZaGw3bmdOaWZGS1EKYahBlc8XpB5UdKZQkvxbLcKQ/xkFJjWo
FSfQWnjhe/a7BJtJEcKZkjOQU0mYqlSu+uT2RA9diCQeRUJPRF+nAw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-11-05T12:05:15Z"
mac: ENC[AES256_GCM,data:ggTUKhmfUp4CCE6w3uiuwV0ys6xUhaMBeXi4WiaxkED/lB9iUdP9UssE9iF5lToyNxt/6O2C60CXc4OvpqBxe5dsxPkVNeB6PNhQrD5Ga8+Cu0i6hKz6Fmm0Rq461OuX0Nu2Nl3MUBCWxjM0+1ywfLRKDcjoVC7RzP5eo1NtrV8=,iv:G+Ntog1claKwAY4PEpUK1hjNzspDZiO3bdWNxugUXDQ=,tag:Yg2ZJEV2VrnTmpw8TykmZg==,type:str]
lastmodified: "2025-03-19T08:38:27Z"
mac: ENC[AES256_GCM,data:ZLljLyyibu9KMdJIwf9DsdKr4aVNWIKOneU05iPEOM9paLw/cSXVYqbfmj0i7xwvpZEin6QtUrUmIPepDIRMtIK8chmk7U5Lqxzp7XA0/IbXw0fkGg3+NmauHUGdeb1BJBLTT4AD+W0aqSayT9AvE40JOXMDzOW50WdUPzI5Ou0=,iv:6KdKZK0RoCkfTeO4oAUS1jRxcGZFrlTIXwXothQwsYE=,tag:VFL+TEjLZEue/hT1nl9f0g==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.9.1
version: 3.9.4
+12 -4
View File
@@ -1,5 +1,8 @@
{ config, ... }: {
imports = [ ../../nixos/variables-config.nix ];
{ config, lib, ... }: {
imports = [
# Choose your theme here:
../../themes/nixy.nix
];
config.var = {
hostname = "nixy";
@@ -21,8 +24,13 @@
autoUpgrade = false;
autoGarbageCollector = true;
};
# Choose your theme variables here
theme = import ../../themes/var/yoru.nix;
# Let this here
options = {
var = lib.mkOption {
type = lib.types.attrs;
default = { };
};
};
}
+35
View File
@@ -0,0 +1,35 @@
{ config, ... }: {
imports = [
../../nixos/home-manager.nix
../../nixos/nix.nix
../../nixos/systemd-boot.nix
../../nixos/users.nix
../../nixos/utils.nix
../../nixos/docker.nix
../../nixos/tailscale.nix
../../server-modules/ssh.nix
../../server-modules/bitwarden.nix
../../server-modules/firewall.nix
../../server-modules/nginx.nix
../../server-modules/nextcloud.nix
../../server-modules/glance.nix
../../server-modules/adguardhome.nix
../../server-modules/hoarder.nix
../../server-modules/arr.nix
../../server-modules/mealie.nix
../../server-modules/meilisearch.nix
../../server-modules/search-nixos-api.nix
# You should let those lines as is
./hardware-configuration.nix
./variables.nix
./secrets
];
home-manager.users."${config.var.username}" = import ./home.nix;
# Don't touch this
system.stateVersion = "24.05";
}
+30
View File
@@ -0,0 +1,30 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: {
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules =
[ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ "dm-snapshot" ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/350cf109-5380-4982-8a9e-279a9275ee18";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/DD15-1125";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp3s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+47
View File
@@ -0,0 +1,47 @@
{ pkgs, config, ... }: {
imports = [
# Mostly user-specific configuration
./variables.nix
# Programs
../../home/programs/nvim
../../home/programs/shell
../../home/programs/fetch
../../home/programs/git
../../home/programs/lazygit
# Scripts
../../home/scripts # All scripts
];
home = {
inherit (config.var) username;
homeDirectory = "/home/" + config.var.username;
packages = with pkgs; [
# Dev
go
nodejs
python3
jq
just
pnpm
wireguard-tools
# Utils
zip
unzip
optipng
pfetch
btop
fastfetch
tailscale
];
# Don't touch this
stateVersion = "24.05";
};
programs.home-manager.enable = true;
}
+29
View File
@@ -0,0 +1,29 @@
{ pkgs, ... }: {
sops = {
age.keyFile = "/home/hadi/.config/sops/age/keys.txt";
defaultSopsFile = ./secrets.yaml;
secrets = {
sshconfig = {
owner = "hadi";
path = "/home/hadi/.ssh/config";
mode = "0600";
};
github-key = {
owner = "hadi";
path = "/home/hadi/.ssh/github";
mode = "0600";
};
cloudflare-dns-token = { path = "/etc/cloudflare/dnskey.txt"; };
nextcloud-pwd = { path = "/etc/nextcloud/pwd.txt"; };
adguard-pwd = { };
hoarder = { };
recyclarr = {
owner = "recyclarr";
mode = "0777";
};
wireguard-pia = { };
};
};
environment.systemPackages = with pkgs; [ sops age ];
}
+28
View File
@@ -0,0 +1,28 @@
sshconfig: ENC[AES256_GCM,data:R54HVxqAyj9yGO/AYL8p6cnXgYxkQKW9XveHlBMTnDXBJ7r/4HgnefdymprnXmdlbNWcWrRqmaLEuzJs/0BfixXfMvmGTUrmJ0ASVuDrz9k6rOLADAKFikQh0dib7NU4JmPgmUzMncXc2WuCd3BCG3kwBQ==,iv:Ro9FA+MzTAp+ERQMT88z8ioCox/dTj2vWcqCDOSLag4=,tag:5XiXIyz5/pjGFOB5ZjdOVg==,type:str]
github-key: ENC[AES256_GCM,data:NRYhcBIwGJEV13+YECLR+2IErsn/7clbnkx0Mltr7dQajSb5WHZ3QDH0KQPylEHhplE5IVS0h4I0z+Pb1B0UteCxFmJ5wZq+2BKZkvE7G3dojqBpgHcVqJV2GLEJkRjlHfRgsbq/OBe8xcsPh20P1KUyP0WIwVbpt+9dFWGxEGYkp2uSyuBIJ98kElt0zuVgl7WcYoDO7v5WmGzZfla+yZwURvMk8zcM3gopo+4KL6YnYUs+UA3VlBBn6VK4Nvbqy6X0R0+ZA5HHAXg+OFgGmfWnENZmsyQJHXEchGGgEldzThkQ4r8yMkgN/ax+AGouLyzbITapGE4sE11FFgL6Hmp4pSXxl3UAGF+cvV5pIujbb28CXmSPRMyYpoNxI93PSYz/txAzE6Cr2dgwxR4zpMelv4i6IaGnY8NgpY8jp2Y6C0uuJxJCN0RtnjQw1rM2uRnm7vMGyU7XXz9DEVfGnYpTWnykXsEjHE5DVGy80ejYQlc6dtmf3vdTWpt+YYdCPw8/cd0PIx2D6geh1c28,iv:wl+RG24mXYMklD8CBGXVD36DMhlWT/7zh8ZMvr7vgOk=,tag:OJhqF8PoXotr7IsyFW6q1g==,type:str]
cloudflare-dns-token: ENC[AES256_GCM,data:JIXUtVDpYS9B74W0ooj50kd4v2+PX+FdF218gvgaS04rYATu4N6w9KEFPfdQqLjUmVihzV6s/IR1fg==,iv:AlbQ86kvFQbetvmFwt/hEyUcqKTI+XzL/NvSMXW9wm4=,tag:1JQeK4KrTDa6Kz+JhWxkxQ==,type:str]
nextcloud-pwd: ENC[AES256_GCM,data:2oqsNceKuwGscBN2VxAK,iv:FoSfHItgeB91fG38zqtuQzayvNjNPFQyZjZlpUq/eic=,tag:MoEpAmTj+zqVu6OLasD4kQ==,type:str]
adguard-pwd: ENC[AES256_GCM,data:QavwLWENAURnRrFwiLntkiM=,iv:bxdQfBxNL5rwUr7CEKbwXtv5mUUXZHhvyqQL2KoPwEY=,tag:T+cSyzbGeo7E5smSsuFlHw==,type:str]
hoarder: ENC[AES256_GCM,data:8A3eGqIlHJ2XpC2OdMNBXPm+5BdfMlOfTSgiibPtM+SFyiPtGhjWQNmVCD9REf0P2C4pikZ3R7vtwyKpjrraaoSAY7ztAk9eqqikorIzD8hn8wbHz/y+Eko=,iv:ngoVgF348IxokWGQVpbpTGhdIwjOOA6T8qLb1wX6GEU=,tag:+v9HLUksQJ1e2vRR/5fzEg==,type:str]
recyclarr: ENC[AES256_GCM,data:XgQ5ZQHY/OKucvJGb6NQND9/zzi2E+W3y9gtQJEUL9uIUWbiZdEt9XHB7dMXl9MIjOjAlCNKIzUMXkgccKA3PbVgbaKUMh3oXmTVHVqmRHrFwCwZMAUTQeOvwgeYYHkw,iv:Fyb16m+E6ToRzC5JGKTxhPzFwhdqaZ9liWUtMGpQ9O8=,tag:fdlpq40dAU2UzOJTVNuHSg==,type:str]
wireguard-pia: ENC[AES256_GCM,data:TBbhTqKvnjSQu8Tc2QieLrIeP36JEcKMeJ2xMzsTrGSgKnyrnm4CUjSsluYpD5TXpt5z2BSQVG0K5XqT0c5q7N16jk6KyDAjZEHm9gMCWlywh2oQWxpjw8G3jFiiHkH055Me8jVtTUF4d+gpMu/LMA4TZlaCMjVEkcYoHsdhWRpKZWDs98D35oSVX7BEUgc8WIWtyDc1QjJ0Chi6Mw1+C9h3njLoLe/esdS/KV9nJSBB9OsSt11V5Dl5NQDnr+cV0CytC9vHDoYX9+s6ZASom13MBjs8SHQBsteQcboSB/WglO93NIA1VQ/hwDZnCQ25u89Z7oMVMR+NNQ==,iv:1AGrXUDY55wc60t489Vf+YUreiFeo77aAtj29EBnPi4=,tag:djY1xJqSCoIth7++ZokwhA==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age12yvtj49pfh3fqzqflscm0ek4yzrjhr6cqhn7x89gdxnlykq0xudq5c7334
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5Z3MzZmoyVDRtRmd3amFJ
MWVvWlA1c3RFeVMrbHJQQmNTcG9ZN2tXSWxjClJ0L1psd1RFM1EreG1yNHdOYzZF
aXphL0lvcGNFTFFMbkNocGNXY00xdW8KLS0tIFh2YjN0aTlRazBXSktnQWx0L3BY
TEc5d01RaVFGNXc3dlljM0FTTHpENjQKOqwI+pl8UxVIVl43glnOYvW660/PsDGY
yefODJGVtHrOm3yeXC2xlTi3sFW+c5wUl2yPqddbvcBt5Ud/yd4iXQ==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-03-24T12:14:53Z"
mac: ENC[AES256_GCM,data:iIQADIb6T/D7Zmq+3egSQKqsEuCP66E9EO98IMgxLBc7trR8VFjHX6vZWkcOVQYUXaOq/LyYMtgwdQ+zfxmiu1/sfflRFDeYpvSjC2pxXARSTfsYq18BwJo8rnQmMm7A8NyQjzmpAjo8bCTgFlNXhQd54vJCIeJGmsZKeXDGHg0=,iv:XBtl+1ssfkuR3P1pQ6Q7k+neuzam9UdTAS+UJcvQqB4=,tag:5YITncXhThWIOMK7NLsv0Q==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.9.4
+36
View File
@@ -0,0 +1,36 @@
{ config, lib, ... }: {
imports = [
# Choose your theme here:
../../themes/nixy.nix
];
config.var = {
hostname = "jack";
username = "hadi";
configDirectory = "/home/" + config.var.username
+ "/.config/nixos"; # The path of the nixos configuration directory
keyboardLayout = "fr";
location = "Paris";
timeZone = "Europe/Paris";
defaultLocale = "en_US.UTF-8";
extraLocale = "fr_FR.UTF-8";
git = {
username = "Hadi";
email = "112569860+anotherhadi@users.noreply.github.com";
};
autoUpgrade = false;
autoGarbageCollector = true;
};
# Let this here
options = {
var = lib.mkOption {
type = lib.types.attrs;
default = { };
};
};
}
-11
View File
@@ -1,11 +0,0 @@
{ config, ... }:
let configDir = config.var.configDirectory;
in {
system.autoUpgrade = {
enable = config.var.autoUpgrade;
dates = "04:00";
flake = "${configDir}";
flags = [ "--update-input" "nixpkgs" "--commit-lock-file" ];
allowReboot = false;
};
}
-1
View File
@@ -4,6 +4,5 @@
enable = true;
powerOnBoot = true;
};
services.blueman.enable = true;
}
+1 -11
View File
@@ -1,4 +1,4 @@
{ pkgs, inputs, ... }: {
{ pkgs, ... }: {
fonts = {
packages = with pkgs; [
@@ -19,18 +19,8 @@
nerd-fonts.meslo-lg
openmoji-color
twemoji-color-font
inputs.apple-fonts.packages.${pkgs.system}.sf-pro-nerd
];
enableDefaultPackages = false;
fontconfig = {
defaultFonts = {
monospace = [ "FiraCode Nerd Font Mono" "Noto Color Emoji" ];
sansSerif = [ "SFProDisplay Nerd Font" "Noto Color Emoji" ];
serif = [ "SFProDisplay Nerd Font" "Noto Color Emoji" ];
emoji = [ "Noto Color Emoji" ];
};
};
};
}
+9
View File
@@ -0,0 +1,9 @@
{ inputs, pkgs, ... }: {
programs.hyprland = {
enable = true;
withUWSM = true;
package = inputs.hyprland.packages."${pkgs.system}".hyprland;
portalPackage =
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
};
}
-4
View File
@@ -1,4 +0,0 @@
{
networking.networkmanager.enable = true;
systemd.services.NetworkManager-wait-online.enable = false;
}
+19 -1
View File
@@ -1,6 +1,13 @@
{ config, inputs, ... }:
let autoGarbageCollector = config.var.autoGarbageCollector;
in {
security.sudo.extraRules = [{
users = [ config.var.username ];
commands = [{
command = "/run/current-system/sw/bin/nixos-rebuild";
options = [ "NOPASSWD" ];
}];
}];
nixpkgs.config = {
allowUnfree = true;
allowBroken = true;
@@ -14,9 +21,20 @@ in {
settings = {
auto-optimise-store = true;
experimental-features = [ "nix-command" "flakes" ];
substituters = [ "https://hyprland.cachix.org" ];
substituters = [
# high priority since it's almost always used
"https://cache.nixos.org?priority=10"
"https://hyprland.cachix.org"
"https://nix-community.cachix.org"
"https://cache.garnix.io"
"https://numtide.cachix.org"
];
trusted-public-keys = [
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
"numtide.cachix.org-1:2ps1kLBUWjxIneOy1Ik6cQjb41X0iXVXeHigGmycPPE="
];
};
gc = {
+77 -32
View File
@@ -1,47 +1,74 @@
{ lib, pkgs, config, ... }:
let
nvidiaDriverChannel =
config.boot.kernelPackages.nvidiaPackages.beta; # stable, latest, beta, etc.
# Using beta driver for recent GPUs like RTX 4070
nvidiaDriverChannel = config.boot.kernelPackages.nvidiaPackages.beta;
in {
# Load nvidia driver for Xorg and Wayland
services.xserver.videoDrivers = [
"nvidia"
"displayLink"
"nvidia_modeset"
"nvidia_uvm"
"nvidia_drm"
]; # or "nvidiaLegacy470 etc.
boot.kernelParams =
lib.optionals (lib.elem "nvidia" config.services.xserver.videoDrivers) [
"nvidia-drm.modeset=1"
"nvidia_drm.fbdev=1"
"nvidia.NVreg_PreserveVideoMemoryAllocations=1"
];
# Video drivers configuration for Xorg and Wayland
services.xserver.videoDrivers =
[ "nvidia" ]; # Simplified - other modules are loaded automatically
# Kernel parameters for better Wayland and Hyprland integration
boot.kernelParams = [
"nvidia-drm.modeset=1" # Enable mode setting for Wayland
"nvidia.NVreg_PreserveVideoMemoryAllocations=1" # Improves resume after sleep
"nvidia.NVreg_RegistryDwords=PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerLevel=0x3;PowerMizerDefault=0x3;PowerMizerDefaultAC=0x3" # Performance/power optimizations
];
# Blacklist nouveau to avoid conflicts
boot.blacklistedKernelModules = [ "nouveau" ];
# Environment variables for better compatibility
environment.variables = {
# GBM_BACKEND = "nvidia-drm"; # If crash in firefox, remove this line
LIBVA_DRIVER_NAME = "nvidia"; # hardware acceleration
# __GLX_VENDOR_LIBRARY_NAME = "nvidia";
NVD_BACKEND = "direct";
LIBVA_DRIVER_NAME = "nvidia"; # Hardware video acceleration
XDG_SESSION_TYPE = "wayland"; # Force Wayland
GBM_BACKEND = "nvidia-drm"; # Graphics backend for Wayland
__GLX_VENDOR_LIBRARY_NAME = "nvidia"; # Use Nvidia driver for GLX
WLR_NO_HARDWARE_CURSORS = "1"; # Fix for cursors on Wayland
NIXOS_OZONE_WL = "1"; # Wayland support for Electron apps
__GL_GSYNC_ALLOWED = "1"; # Enable G-Sync if available
__GL_VRR_ALLOWED = "1"; # Enable VRR (Variable Refresh Rate)
WLR_DRM_NO_ATOMIC = "1"; # Fix for some issues with Hyprland
NVD_BACKEND = "direct"; # Configuration for new driver
MOZ_ENABLE_WAYLAND = "1"; # Wayland support for Firefox
};
# Configuration for proprietary packages
nixpkgs.config = {
nvidia.acceptLicense = true;
allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) [
"cudatoolkit"
"nvidia-persistenced"
"nvidia-settings"
"nvidia-x11"
];
allowUnfree = true; # Simplified from specific allowUnfreePredicate
};
# Nvidia configuration
hardware = {
nvidia = {
open = false;
nvidiaSettings = true;
powerManagement.enable =
true; # This can cause sleep/suspend to fail and saves entire VRAM to /tmp/
modesetting.enable = true;
open = false; # Proprietary driver for better performance
nvidiaSettings = true; # Nvidia settings utility
powerManagement = {
enable = true; # Power management
finegrained = true; # More precise power consumption control
};
modesetting.enable = true; # Required for Wayland
package = nvidiaDriverChannel;
forceFullCompositionPipeline = true; # Prevents screen tearing
# Configuration for hybrid AMD+Nvidia laptop
prime = {
# Optimized configuration for switchable graphics laptops
offload = {
enable = true; # Mode optimized for power saving
enableOffloadCmd =
true; # Allows running applications with dedicated GPU
};
# sync.enable disabled as offload is generally better for laptops
sync.enable = false;
# PCI IDs verified for your hardware
amdgpuBusId = "PCI:5:0:0"; # Integrated AMD GPU
nvidiaBusId = "PCI:1:0:0"; # Dedicated Nvidia GPU
};
};
# Enhanced graphics support
graphics = {
enable = true;
package = nvidiaDriverChannel;
@@ -52,7 +79,25 @@ in {
libvdpau-va-gl
mesa
egl-wayland
vulkan-loader
vulkan-validation-layers
libva
];
};
};
# Nix cache for CUDA
nix.settings = {
substituters = [ "https://cuda-maintainers.cachix.org" ];
trusted-public-keys = [
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
];
};
# Additional useful packages
environment.systemPackages = with pkgs; [
vulkan-tools
glxinfo
libva-utils # VA-API debugging tools
];
}
+72
View File
@@ -0,0 +1,72 @@
{ config, pkgs, ... }:
let
hp-omen-linux-module = pkgs.callPackage
({ kernel ? config.boot.kernelPackages.kernel, stdenv, fetchFromGitHub }:
stdenv.mkDerivation (finalAttrs: {
pname = "hp-omen-linux-module";
version = "rebase-6.14";
src = fetchFromGitHub {
owner = "ranisalt";
repo = "hp-omen-linux-module";
rev = finalAttrs.version;
sha256 = "sha256-2zCm29bdboSjRm/caMjBPGNc0tZXPUnIIYlHxxfhAok=";
};
setSourceRoot = ''
export sourceRoot=$(pwd)/${finalAttrs.src.name}/src
'';
nativeBuildInputs = kernel.moduleBuildDependencies;
makeFlags = [
"KERNELDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
];
installPhase = ''
runHook preInstall
install hp-wmi.ko -Dm444 -t $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/platform/x86/hp/
runHook postInstall
'';
})) { kernel = config.boot.kernelPackages.kernel; };
in {
boot.extraModulePackages = [ hp-omen-linux-module ];
boot.kernelModules = [ "hp-wmi" ];
users.groups.omen-rgb = { };
users.users.${config.var.username}.extraGroups = [ "omen-rgb" ];
systemd.tmpfiles.rules = [
"w /sys/devices/platform/hp-wmi/rgb_zones/zone00 0660 root omen-rgb -"
"w /sys/devices/platform/hp-wmi/rgb_zones/zone01 0660 root omen-rgb -"
"w /sys/devices/platform/hp-wmi/rgb_zones/zone02 0660 root omen-rgb -"
"w /sys/devices/platform/hp-wmi/rgb_zones/zone03 0660 root omen-rgb -"
];
services.udev.extraRules = ''
SUBSYSTEM=="platform", KERNEL=="hp-wmi", ACTION=="add", \
RUN+="${pkgs.coreutils}/bin/chgrp omen-rgb /sys/devices/platform/hp-wmi/rgb_zones/zone00", \
RUN+="${pkgs.coreutils}/bin/chmod 0660 /sys/devices/platform/hp-wmi/rgb_zones/zone00", \
RUN+="${pkgs.coreutils}/bin/chgrp omen-rgb /sys/devices/platform/hp-wmi/rgb_zones/zone01", \
RUN+="${pkgs.coreutils}/bin/chmod 0660 /sys/devices/platform/hp-wmi/rgb_zones/zone01", \
RUN+="${pkgs.coreutils}/bin/chgrp omen-rgb /sys/devices/platform/hp-wmi/rgb_zones/zone02", \
RUN+="${pkgs.coreutils}/bin/chmod 0660 /sys/devices/platform/hp-wmi/rgb_zones/zone02", \
RUN+="${pkgs.coreutils}/bin/chgrp omen-rgb /sys/devices/platform/hp-wmi/rgb_zones/zone03", \
RUN+="${pkgs.coreutils}/bin/chmod 0660 /sys/devices/platform/hp-wmi/rgb_zones/zone03"
'';
# systemd.services.fix-hp-omen-perms = {
# description = "Fix HP Omen keyboard RGB zone permissions";
# after = [ "systemd-modules-load.service" ];
# wantedBy = [ "multi-user.target" ];
# serviceConfig = {
# Type = "oneshot";
# ExecStart = ''
# ${pkgs.coreutils}/bin/chgrp omen-rgb /sys/devices/platform/hp-wmi/rgb_zones/zone00
# ${pkgs.coreutils}/bin/chmod 0660 /sys/devices/platform/hp-wmi/rgb_zones/zone00
# ${pkgs.coreutils}/bin/chgrp omen-rgb /sys/devices/platform/hp-wmi/rgb_zones/zone01
# ${pkgs.coreutils}/bin/chmod 0660 /sys/devices/platform/hp-wmi/rgb_zones/zone01
# ${pkgs.coreutils}/bin/chgrp omen-rgb /sys/devices/platform/hp-wmi/rgb_zones/zone02
# ${pkgs.coreutils}/bin/chmod 0660 /sys/devices/platform/hp-wmi/rgb_zones/zone02
# ${pkgs.coreutils}/bin/chgrp omen-rgb /sys/devices/platform/hp-wmi/rgb_zones/zone03
# ${pkgs.coreutils}/bin/chmod 0660 /sys/devices/platform/hp-wmi/rgb_zones/zone03
# '';
# };
# };
}
-10
View File
@@ -1,10 +0,0 @@
{ config, ... }: {
services.pia.enable = true;
# Alternatively, you can use the `authUserPassFile` attribute if you are using
# a Nix secrets manager. Here's an example using sops-nix.
#
# The secret you provide to `authUserPassFile` should be a multiline string with
# a single username on the first line a single password on the second line.
services.pia.authUserPassFile = "/home/hadi/.config/pia/pia.ovpn";
}
-17
View File
@@ -1,17 +0,0 @@
{
hardware.nvidia.prime = {
offload = {
enable = true;
enableOffloadCmd = true;
};
# sync.enable = true;
# CHANGEME: Change those values to match your hardware (if prime is imported)
amdgpuBusId =
"PCI:5:0:0"; # Set this to the bus ID of your AMD GPU if you have one
# intelBusId = "PCI:0:2:0"; # Set this to the bus ID of your Intel GPU if you have one
nvidiaBusId =
"PCI:1:0:0"; # Set this to the bus ID of your Nvidia GPU if you have one
};
}
+68
View File
@@ -0,0 +1,68 @@
# SDDM is a display manager for X11 and Wayland
{ pkgs, inputs, config, lib, ... }:
let
foreground = config.theme.textColorOnWallpaper;
sddm-astronaut = pkgs.sddm-astronaut.override {
embeddedTheme = "pixel_sakura";
# TODO: Cleaner version for static vs .gif, just a string.replace
themeConfig = if lib.hasSuffix "sakura_static.png" config.stylix.image then
{ }
else if lib.hasSuffix "studio.png" config.stylix.image then {
Background = pkgs.fetchurl {
url =
"https://raw.githubusercontent.com/anotherhadi/nixy-wallpapers/refs/heads/main/wallpapers/studio.gif";
sha256 = "sha256-qySDskjmFYt+ncslpbz0BfXiWm4hmFf5GPWF2NlTVB8=";
};
HeaderTextColor = "#${foreground}";
DateTextColor = "#${foreground}";
TimeTextColor = "#${foreground}";
LoginFieldTextColor = "#${foreground}";
PasswordFieldTextColor = "#${foreground}";
UserIconColor = "#${foreground}";
PasswordIconColor = "#${foreground}";
WarningColor = "#${foreground}";
LoginButtonBackgroundColor = "#${foreground}";
SystemButtonsIconsColor = "#${foreground}";
SessionButtonTextColor = "#${foreground}";
VirtualKeyboardButtonTextColor = "#${foreground}";
DropdownBackgroundColor = "#${foreground}";
HighlightBackgroundColor = "#${foreground}";
} else {
Background = "${toString config.stylix.image}";
HeaderTextColor = "#${foreground}";
DateTextColor = "#${foreground}";
TimeTextColor = "#${foreground}";
LoginFieldTextColor = "#${foreground}";
PasswordFieldTextColor = "#${foreground}";
UserIconColor = "#${foreground}";
PasswordIconColor = "#${foreground}";
WarningColor = "#${foreground}";
LoginButtonBackgroundColor = "#${foreground}";
SystemButtonsIconsColor = "#${foreground}";
SessionButtonTextColor = "#${foreground}";
VirtualKeyboardButtonTextColor = "#${foreground}";
DropdownBackgroundColor = "#${foreground}";
HighlightBackgroundColor = "#${foreground}";
};
};
in {
services.displayManager = {
sddm = {
package = pkgs.kdePackages.sddm;
extraPackages = [ sddm-astronaut ];
enable = true;
wayland.enable = true;
theme = "sddm-astronaut-theme";
settings = {
Wayland.SessionDir = "${
inputs.hyprland.packages."${pkgs.system}".hyprland
}/share/wayland-sessions";
};
};
};
environment.systemPackages = [ sddm-astronaut ];
# To prevent getting stuck at shutdown
systemd.extraConfig = "DefaultTimeoutStopSec=10s";
}
+26
View File
@@ -0,0 +1,26 @@
# Tailscale is a VPN service that makes it easy to connect your devices between each other.
{ config, ... }: {
security.sudo.extraRules = [{
users = [ config.var.username ];
commands = [
{
command = "/etc/profiles/per-user/${config.var.username}/bin/tailscale";
options = [ "NOPASSWD" ];
}
{
command = "/run/current-system/sw/bin/tailscale";
options = [ "NOPASSWD" ];
}
];
}];
services.tailscale = {
enable = true;
openFirewall = true;
};
networking.firewall = {
trustedInterfaces = [ "tailscale0" ];
# required to connect to Tailscale exit nodes
checkReversePath = "loose";
};
}
-15
View File
@@ -1,15 +0,0 @@
{ config, ... }: {
time.timeZone = config.var.timeZone;
i18n.defaultLocale = config.var.defaultLocale;
i18n.extraLocaleSettings = {
LC_ADDRESS = config.var.extraLocale;
LC_IDENTIFICATION = config.var.extraLocale;
LC_MEASUREMENT = config.var.extraLocale;
LC_MONETARY = config.var.extraLocale;
LC_NAME = config.var.extraLocale;
LC_NUMERIC = config.var.extraLocale;
LC_PAPER = config.var.extraLocale;
LC_TELEPHONE = config.var.extraLocale;
LC_TIME = config.var.extraLocale;
};
}
+2
View File
@@ -1,3 +1,5 @@
# TUIGreet is a display manager.
# Legacy, I'm now using SDDM
{ pkgs, ... }: {
services.greetd = {
enable = true;
+70 -3
View File
@@ -1,11 +1,40 @@
{ pkgs, config, ... }:
{ pkgs, config, inputs, ... }:
let
hostname = config.var.hostname;
keyboardLayout = config.var.keyboardLayout;
configDir = config.var.configDirectory;
timeZone = config.var.timeZone;
defaultLocale = config.var.defaultLocale;
extraLocale = config.var.extraLocale;
autoUpgrade = config.var.autoUpgrade;
in {
networking.hostName = hostname;
networking.networkmanager.enable = true;
systemd.services.NetworkManager-wait-online.enable = false;
system.autoUpgrade = {
enable = autoUpgrade;
dates = "04:00";
flake = "${configDir}";
flags = [ "--update-input" "nixpkgs" "--commit-lock-file" ];
allowReboot = false;
};
time = { timeZone = timeZone; };
i18n.defaultLocale = defaultLocale;
i18n.extraLocaleSettings = {
LC_ADDRESS = extraLocale;
LC_IDENTIFICATION = extraLocale;
LC_MEASUREMENT = extraLocale;
LC_MONETARY = extraLocale;
LC_NAME = extraLocale;
LC_NUMERIC = extraLocale;
LC_PAPER = extraLocale;
LC_TELEPHONE = extraLocale;
LC_TIME = extraLocale;
};
services = {
xserver = {
enable = true;
@@ -13,6 +42,10 @@ in {
xkb.variant = "";
};
gnome.gnome-keyring.enable = true;
psd = {
enable = true;
resyncTimer = "10m";
};
};
console.keyMap = keyboardLayout;
@@ -20,18 +53,28 @@ in {
XDG_DATA_HOME = "$HOME/.local/share";
PASSWORD_STORE_DIR = "$HOME/.local/share/password-store";
EDITOR = "nvim";
TERMINAL = "kitty";
TERM = "kitty";
BROWSER = "zen-beta";
};
services.libinput.enable = true;
programs.dconf.enable = true;
services = {
dbus.enable = true;
dbus = {
enable = true;
implementation = "broker";
packages = with pkgs; [ gcr gnome-settings-daemon ];
};
gvfs.enable = true;
upower.enable = true;
power-profiles-daemon.enable = true;
udisks2.enable = true;
};
# enable zsh autocompletion for system packages (systemd, etc)
environment.pathsToLink = [ "/share/zsh" ];
# Faster rebuilding
documentation = {
enable = true;
@@ -43,6 +86,7 @@ in {
};
environment.systemPackages = with pkgs; [
hyprland-qtutils
fd
bc
gcc
@@ -50,8 +94,31 @@ in {
xdg-utils
wget
curl
vim
];
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
config = {
common.default = [ "gtk" ];
hyprland.default = [ "gtk" "hyprland" ];
};
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
};
security = {
# allow wayland lockers to unlock the screen
pam.services.hyprlock.text = "auth include login";
# userland niceness
rtkit.enable = true;
# don't ask for password for wheel group
sudo.wheelNeedsPassword = false;
};
services.logind.extraConfig = ''
# dont shutdown when power button is short-pressed
HandlePowerKey=ignore
-8
View File
@@ -1,8 +0,0 @@
{ lib, ... }: {
options = {
var = lib.mkOption {
type = lib.types.attrs;
default = { };
};
};
}
-9
View File
@@ -1,9 +0,0 @@
{ config, ... }:
let username = config.var.username;
in {
virtualisation.virtualbox.host = {
enable = true;
enableExtensionPack = true;
};
users.extraGroups.vboxusers.members = [ username ];
}
-10
View File
@@ -1,10 +0,0 @@
{ pkgs, ... }: {
xdg.portal = {
enable = true;
config.common.default = "*";
wlr.enable = true;
xdgOpenUsePortal = true;
extraPortals =
[ pkgs.xdg-desktop-portal-hyprland pkgs.xdg-desktop-portal-gtk ];
};
}
+19
View File
@@ -0,0 +1,19 @@
{ config, ... }:
let domain = "adguard.hadi.diy";
in {
services = {
adguardhome = {
enable = true;
port = 3000;
};
nginx.virtualHosts."${domain}" = {
useACMEHost = "hadi.diy";
forceSSL = true;
locations."/" = {
proxyPass =
"http://127.0.0.1:${toString config.services.adguardhome.port}";
};
};
};
}
+46
View File
@@ -0,0 +1,46 @@
{ config, ... }:
let
domain = "hadi.diy";
mkVirtualHost = name: port: {
useACMEHost = domain;
forceSSL = true;
locations."/" = { proxyPass = "http://127.0.0.1:${toString port}"; };
};
in {
nixarr = {
enable = true;
vpn = {
enable = true;
wgConf = config.sops.secrets.wireguard-pia.path;
};
mediaDir = "/data/media";
stateDir = "/data/.state/nixarr";
jellyfin.enable = true;
jellyseerr.enable = true;
prowlarr.enable = true;
radarr.enable = true;
sonarr.enable = true;
sabnzbd.enable = true;
transmission = {
enable = true;
extraSettings = { trash-original-torrent-files = true; };
vpn.enable = true;
};
recyclarr = {
enable = true;
configFile = config.sops.secrets.recyclarr.path;
};
};
services.nginx.virtualHosts = {
"jellyfin.${domain}" = mkVirtualHost "jellyfin" 8096;
"jellyseerr.${domain}" = mkVirtualHost "jellyseerr" 5055;
"prowlarr.${domain}" = mkVirtualHost "prowlarr" 9696;
"radarr.${domain}" = mkVirtualHost "radarr" 7878;
"sonarr.${domain}" = mkVirtualHost "sonarr" 8989;
"sabnzbd.${domain}" = mkVirtualHost "sabnzbd" 8080;
"transmission.${domain}" = mkVirtualHost "transmission" 9091;
};
}
+26
View File
@@ -0,0 +1,26 @@
{ config, ... }:
let domain = "vault.hadi.diy";
in {
services = {
vaultwarden = {
enable = true;
config = {
DOMAIN = "https://" + domain;
SIGNUPS_ALLOWED = true;
ROCKET_ADDRESS = "127.0.0.1";
ROCKET_PORT = 8222;
ROCKET_LOG = "critical";
};
};
nginx.virtualHosts."${domain}" = {
useACMEHost = "hadi.diy";
forceSSL = true;
locations."/" = {
proxyPass = "http://127.0.0.1:${
toString config.services.vaultwarden.config.ROCKET_PORT
}";
};
};
};
}
+6
View File
@@ -0,0 +1,6 @@
{
networking.firewall = {
enable = true;
allowPing = false;
};
}
+229
View File
@@ -0,0 +1,229 @@
{ config, lib, ... }:
let
domain = "start.hadi.diy";
rgb-to-hsl = color:
let
r = ((lib.toInt config.lib.stylix.colors."${color}-rgb-r") * 100.0) / 255;
g = ((lib.toInt config.lib.stylix.colors."${color}-rgb-g") * 100.0) / 255;
b = ((lib.toInt config.lib.stylix.colors."${color}-rgb-b") * 100.0) / 255;
max = lib.max r (lib.max g b);
min = lib.min r (lib.min g b);
delta = max - min;
fmod = base: int: base - (int * builtins.floor (base / int));
h = if delta == 0 then
0
else if max == r then
60 * (fmod ((g - b) / delta) 6)
else if max == g then
60 * (((b - r) / delta) + 2)
else if max == b then
60 * (((r - g) / delta) + 4)
else
0;
l = (max + min) / 2;
s = if delta == 0 then
0
else
100 * delta / (100 - lib.max (2 * l - 100) (100 - (2 * l)));
roundToString = value: toString (builtins.floor (value + 0.5));
in lib.concatMapStringsSep " " roundToString [ h s l ];
in {
services = {
glance = {
enable = true;
settings = {
theme = {
background-color = rgb-to-hsl "base00";
primary-color = rgb-to-hsl "base0D";
positive-color = rgb-to-hsl "base0C";
contrast-multiplier = 1.4;
};
pages = [{
hide-desktop-navigation = true;
columns = [
{
size = "small";
widgets = [
{
type = "clock";
hour-format = "24h";
}
{
type = "weather";
location = "Paris, France";
}
{
type = "markets";
markets = [
{
symbol = "BTC-USD";
name = "Bitcoin";
chart-link =
"https://www.tradingview.com/chart/?symbol=INDEX:BTCUSD";
}
{
symbol = "SOL-USD";
name = "Solana";
chart-link =
"https://www.tradingview.com/chart/?symbol=INDEX:SOLUSD";
}
{
symbol = "ETH-USD";
name = "Ethereum";
chart-link =
"https://www.tradingview.com/chart/?symbol=INDEX:ETHUSD";
}
];
}
{
type = "dns-stats";
service = "adguard";
url = "https://adguard.hadi.diy";
username = "hadi";
password = "\${secret:adguard-pwd}";
}
];
}
{
size = "full";
widgets = [
{
type = "search";
search-engine = "duckduckgo";
}
{
type = "server-stats";
servers = [{
type = "local";
name = "Jack";
}];
}
{
type = "group";
widgets = [
{
type = "monitor";
title = "Services";
cache = "1m";
sites = [
{
title = "Vaultwarden";
url = "https://vault.hadi.diy";
icon = "si:bitwarden";
}
{
title = "Nextcloud";
url = "https://cloud.hadi.diy";
icon = "si:nextcloud";
}
{
title = "Adguard";
url = "https://adguard.hadi.diy";
icon = "si:adguard";
}
{
title = "Hoarder";
url = "https://hoarder.hadi.diy";
icon = "si:bookstack";
}
{
title = "Mealie";
url = "https://mealie.hadi.diy";
icon = "si:mealie";
}
];
}
{
type = "monitor";
title = "*arr";
cache = "1m";
sites = [
{
title = "Jellyfin";
url = "https://jellyfin.hadi.diy";
icon = "si:jellyfin";
}
{
title = "Jellyseerr";
url = "https://jellyseerr.hadi.diy";
icon = "si:odysee";
}
{
title = "Radarr";
url = "https://radarr.hadi.diy";
icon = "si:radarr";
}
{
title = "Sonarr";
url = "https://sonarr.hadi.diy";
icon = "si:sonarr";
}
{
title = "Prowlarr";
url = "https://prowlarr.hadi.diy";
icon = "si:podcastindex";
}
{
title = "SABnzbd";
url = "https://sabnzbd.hadi.diy";
icon = "si:sabanci";
}
{
title = "Transmission";
url = "https://transmission.hadi.diy";
icon = "si:transmission";
}
];
}
];
}
{
type = "split-column";
widgets = [
{
type = "repository";
repository = "anotherhadi/nixy";
pull-requests-limit = 5;
issues-limit = 3;
}
{
type = "repository";
repository = "anotherhadi/awesome-wallpapers";
pull-requests-limit = 5;
issues-limit = 3;
}
{
type = "repository";
repository = "anotherhadi/search-nixos";
pull-requests-limit = 5;
issues-limit = 3;
}
{
type = "repository";
repository = "anotherhadi/search-nixos-api";
pull-requests-limit = 5;
issues-limit = 3;
}
];
}
{ type = "hacker-news"; }
];
}
];
name = "Home";
}];
server = { port = 5678; };
};
};
nginx.virtualHosts."${domain}" = {
useACMEHost = "hadi.diy";
forceSSL = true;
locations."/" = {
proxyPass = "http://127.0.0.1:${
toString config.services.glance.settings.server.port
}";
};
};
};
}
+50
View File
@@ -0,0 +1,50 @@
{ config, ... }:
let domain = "hoarder.hadi.diy";
in {
systemd.tmpfiles.rules = [
"d /var/lib/hoarder/web 0755 root root -"
"d /var/lib/hoarder/meili 0755 root root -"
];
virtualisation.oci-containers.containers = {
hoarder-web = {
environmentFiles = [ config.sops.secrets.hoarder.path ];
image = "ghcr.io/hoarder-app/hoarder:release";
volumes = [ "/var/lib/hoarder/web:/data" ];
ports = [ "127.0.0.1:3131:3000" ];
environment = {
HOARDER_VERSION = "release";
NEXTAUTH_URL = "https://" + domain;
DATA_DIR = "/data";
MEILI_ADDR = "http://hoarder-meili:7700";
BROWSER_WEB_URL = "http://hoarder-browser:9222";
DISABLE_SIGNUPS = "false";
};
};
hoarder-meili = {
environmentFiles = [ config.sops.secrets.hoarder.path ];
image = "getmeili/meilisearch:v1.11.1";
environment = { MEILI_NO_ANALYTICS = "true"; };
volumes = [ "/var/lib/hoarder/meili:/meili_data" ];
};
hoarder-browser = {
image = "gcr.io/zenika-hub/alpine-chrome:123";
#pull = "newer";
cmd = [
"--no-sandbox"
"--disable-gpu"
"--disable-dev-shm-usage"
"--remote-debugging-address=0.0.0.0"
"--remote-debugging-port=9222"
"--hide-scrollbars"
];
};
};
services.nginx.virtualHosts."${domain}" = {
useACMEHost = "hadi.diy";
forceSSL = true;
locations."/" = { proxyPass = "http://127.0.0.1:3131"; };
};
}
+18
View File
@@ -0,0 +1,18 @@
{ config, ... }:
let domain = "mealie.hadi.diy";
in {
services = {
mealie = {
enable = true;
port = 8092;
};
nginx.virtualHosts."${domain}" = {
useACMEHost = "hadi.diy";
forceSSL = true;
locations."/" = {
proxyPass = "http://127.0.0.1:${toString config.services.mealie.port}";
};
};
};
}
+19
View File
@@ -0,0 +1,19 @@
{ config, ... }:
let domain = "meilisearch.hadi.diy";
in {
services = {
meilisearch = {
enable = true;
listenPort = 7700;
# masterKeyEnvironmentFile= "";
};
nginx.virtualHosts."${domain}" = {
useACMEHost = "hadi.diy";
forceSSL = true;
locations."/" = {
proxyPass =
"http://127.0.0.1:${toString config.services.meilisearch.listenPort}";
};
};
};
}

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