Author SHA1 Message Date
tomasr 206780c3f9 hyprland: migrated from hyprlang to lua
- all hyprlandScripts were migrated to lua functions
- hyprland.nix just handles the host specific and replacing the
  placeholders from hyprland.lua
2026-08-14 09:25:17 +02:00
tomasr 6f342a6338 flake: updated flake.lock 2026-08-14 09:25:07 +02:00
tomasr f1dae5ab9c snapshot pre-autoupdate-2026-08-13T07-15-33Z 2026-08-13 09:15:33 +02:00
tomasr b6690407f7 restore mullvad 2026-08-12 19:48:54 +02:00
tomasr 21c366244b add dolphin plugin 2026-08-12 15:32:46 +02:00
tomasr ec22349a7a add ark for dolphin 2026-08-12 15:24:38 +02:00
tomasr 29c7a4a86c reactivate battery warning 2026-08-12 15:05:22 +02:00
tomasr 6263a11c4c fix archivebox extesnion 2026-08-11 17:06:16 +02:00
tomasr 1471a976f1 remove temp mullvad 2026-08-11 17:03:55 +02:00
tomasr 0ce25113e7 add archivebox extension 2026-08-11 16:17:48 +02:00
tomasr e49019c8ba add browser bookmark noogle.dev 2026-08-11 16:14:32 +02:00
tomasr bd85b284a6 reactivate qtbatticon 2026-08-11 16:13:11 +02:00
tomasr 7f2367720b oga bouga 2026-08-09 14:48:54 +02:00
tomasr 14751f5cf0 snapshot pre-cleanup-2026-08-08T20-52-19Z 2026-08-08 22:52:19 +02:00
tomasr 419f5a6214 flack lock change 2026-08-08 10:14:54 +02:00
tomasr b5b329ab17 snapshot pre-autoupdate-2026-08-08T08-02-18Z 2026-08-08 10:02:18 +02:00
tomasr dc1b4caa24 rss reader 2026-08-04 19:50:32 +02:00
tomasr c7d72333d4 debugging max battery 2026-08-04 14:16:53 +02:00
tomasr 04b3257c7d debugging max battery 2026-08-04 14:13:16 +02:00
tomasr 12bcb8ad6a fix calendar? 2026-08-04 11:29:50 +02:00
tomasr 229201a7c7 add kontact 2026-08-04 11:25:52 +02:00
tomasr ace1780097 add KOrganizer 2026-08-04 11:21:17 +02:00
tomasr 928b192611 Auto: cleanup-2026-08-02T11-15-39Z 2026-08-02 13:15:57 +02:00
tomasr 3160e6a409 snapshot pre-cleanup-2026-08-02T11-15-39Z 2026-08-02 13:15:39 +02:00
tomasr f76e16266b snapshot pre-autoupdate-2026-08-01T08-20-53Z 2026-08-01 10:20:53 +02:00
tomasr eec6da5803 librewolf: remove old bookmark 2026-07-30 21:28:31 +02:00
tomasr 282d076bf3 first tmux config 2026-07-30 21:18:33 +02:00
tomasr 0e67b49ebd tmux: init config 2026-07-30 14:06:41 +02:00
tomasr dd1c9bd990 hledger-ui: replace by puffin 2026-07-29 21:11:21 +02:00
tomasr 20cef053c0 replace rss reader 2026-07-29 18:46:20 +02:00
tomasr 553796d6c7 fix pagers 2026-07-26 21:54:17 +02:00
tomasr 63ec8d1945 flack.lock change 2026-07-26 18:41:00 +02:00
tomasr 588a1e77e8 migrate nixpkgs-notifier to ntfy 2026-07-26 16:46:26 +02:00
tomasr eca6ad278d Auto: cleanup-2026-07-26T14-02-17Z 2026-07-26 16:02:39 +02:00
tomasr 5e7550f6d7 snapshot pre-cleanup-2026-07-26T14-02-17Z 2026-07-26 16:02:17 +02:00
tomasr abd6a6ca3c snapshot pre-cleanup-2026-07-26T13-59-06Z 2026-07-26 15:59:06 +02:00
tomasr a7370a65e7 snapshot pre-cleanup-2026-07-26T13-57-11Z 2026-07-26 15:57:11 +02:00
tomasr 01cd080bf1 snapshot pre-cleanup-2026-07-26T13-54-32Z 2026-07-26 15:54:32 +02:00
tomasr b24b16728a setup agenix and migrate from matrix-commander-rs to ntfy for phone notifications 2026-07-26 15:48:54 +02:00
tomasr a80629a6e4 snapshot pre-autoupdate-2026-07-26T13-20-51Z 2026-07-26 15:20:51 +02:00
tomasr ff26348536 snapshot pre-autoupdate-2026-07-26T13-04-37Z 2026-07-26 15:04:37 +02:00
tomasr e672a99d95 snapshot pre-autoupdate-2026-07-26T13-01-03Z 2026-07-26 15:01:03 +02:00
tomasr 35542be154 snapshot pre-autoupdate-2026-07-26T12-55-52Z 2026-07-26 14:55:52 +02:00
tomasr 8b1e206d4f snapshot pre-autoupdate-2026-07-26T12-53-35Z 2026-07-26 14:53:35 +02:00
tomasr 6304c65ea6 snapshot pre-autoupdate-2026-07-26T12-46-58Z 2026-07-26 14:46:58 +02:00
tomasr 325ee56fa3 snapshot pre-autoupdate-2026-07-26T12-33-05Z 2026-07-26 14:33:05 +02:00
tomasr a9874f1b2a snapshot pre-autoupdate-2026-07-26T12-32-47Z 2026-07-26 14:32:47 +02:00
tomasr ba4f2b5bf2 setup agenix 2026-07-26 14:09:18 +02:00
tomasr 72fae98a43 snapshot pre-cleanup-2026-07-25T22-02-24Z 2026-07-26 00:02:24 +02:00
tomasr ab6b81a228 snapshot pre-autoupdate-2026-07-25T15-13-11Z 2026-07-25 17:13:11 +02:00
tomasr 247ddefdc6 onyx fix 2026-07-25 16:03:34 +02:00
tomasr 1a646b0c06 add gvfs 2026-07-24 20:03:26 +02:00
tomasr 5d4d51b475 notewrapper: use kdrive directly 2026-07-24 17:40:27 +02:00
tomasr c6a30039e8 neovim: add hledger integration 2026-07-21 16:53:32 +02:00
tomasr 2b45b7f179 neovim: add lean lsp and config 2026-07-21 16:51:34 +02:00
tomasr 8268324958 hledger: init 2026-07-21 11:38:27 +02:00
tomasr 2d0c655658 snapshot pre-autoupdate-2026-07-20T23-03-59Z 2026-07-21 01:03:59 +02:00
tomasr fb5cd58254 CI: fix crash when no diff 2026-07-21 00:46:12 +02:00
tomasr 20ad4bb594 snapshot pre-autoupdate-2026-07-20T22-36-16Z 2026-07-21 00:36:16 +02:00
tomasr d83045353f snapshot pre-cleanup-2026-07-20T22-15-38Z 2026-07-21 00:15:38 +02:00
tomasr 806215b1b8 snapshot pre-autoupdate-2026-07-20T22-12-08Z 2026-07-21 00:12:08 +02:00
tomasr 63baafdca6 snapshot pre-autoupdate-2026-07-20T22-05-05Z 2026-07-21 00:05:05 +02:00
tomasr 0ca30a4110 snapshot pre-cleanup-2026-06-20T19-40-35Z 2026-06-20 21:40:35 +02:00
tomasr fece2b565f add zoom-us 2026-06-20 19:37:56 +02:00
tomasr 3c7d3584fc snapshot pre-autoupdate-2026-06-19T18-41-17Z 2026-06-19 20:41:17 +02:00
tomasr a619a10851 icloud backup with kdrive 2026-06-18 19:47:41 +02:00
tomasr 97beca4f88 kdrive: setup sync with desktop 2026-06-18 17:00:33 +02:00
tomasr 2e322fbb79 gitBackup: add ngcp and ReSSPublica 2026-06-16 22:48:23 +02:00
tomasr 58ec4221ef desktop: ported custom-performance 2026-06-14 11:15:01 +02:00
tomasr e758819398 custom-performance: reset on startup 2026-06-14 11:10:56 +02:00
tomasr 930e265420 tlp:replace by powerprofilesdaemon 2026-06-14 11:05:39 +02:00
tomasr 523b104c43 treesitter: add sparql 2026-06-13 22:11:53 +02:00
tomasr 4f3a74b741 Auto: cleanup-2026-06-13T20-10-24Z 2026-06-13 22:10:43 +02:00
tomasr 2585a88780 snapshot pre-cleanup-2026-06-13T20-10-24Z 2026-06-13 22:10:24 +02:00
tomasr 52e5e4a4d4 custom-performance: fixes 2026-06-13 22:10:05 +02:00
tomasr 2d8c797042 snapshot pre-cleanup-2026-06-13T19-33-47Z 2026-06-13 21:33:47 +02:00
tomasr dd4fb62a2f custom-performance: fixes 2026-06-13 19:02:12 +02:00
tomasr 09d92bc8e2 custom-performance: entire rewrite
Now kills caelestia, change monitor hz and launches lightweight
alternative to calestia (waybar and swaync)
2026-06-13 11:56:27 +02:00
tomasr 158a5c2b29 tlp: reenable 2026-06-13 10:19:36 +02:00
tomasr 01bde96826 snapshot pre-autoupdate-2026-06-13T07-45-43Z 2026-06-13 09:45:43 +02:00
tomasr a140ce9560 librewolf: add rryan-tm logs bookmark 2026-06-13 09:45:00 +02:00
tomasr ba4727f453 librewolf: add r/Piracy megathread bookmark 2026-06-13 09:43:10 +02:00
tomasr 6525d6d599 librewolf: add temp-mail.org bookmark 2026-06-13 09:41:05 +02:00
tomasr c32e8112c6 flake.lock: update 2026-06-13 09:37:38 +02:00
tomasr ff1469dea2 nixpkgs-master: follow unstable when unused 2026-06-13 09:37:01 +02:00
tomasr 89c87b8242 flake.lock: autoupdate-2026-06-13T07-30-14Z 2026-06-13 09:34:56 +02:00
tomasr 4bf8fe10c9 snapshot pre-autoupdate-2026-06-13T07-30-14Z 2026-06-13 09:30:14 +02:00
tomasr 3b30916261 flake.lock: update 2026-06-13 09:29:37 +02:00
tomasr 065012ed84 flake-utils: use flakehub cache 2026-06-13 09:29:37 +02:00
tomasr 66ff0dc406 flake-parts: use flakehub cache 2026-06-13 09:29:37 +02:00
tomasr e4eb23f10f merge conflict handled 2026-06-13 09:29:37 +02:00
tomasr 406baf2a5d merge conflict handled 2026-06-13 09:21:11 +02:00
tomasr 2471741462 snapshot pre-autoupdate-2026-06-13T07-19-09Z 2026-06-13 09:19:09 +02:00
tomasr 5039b2a37c snapshot pre-autoupdate-2026-06-12T14-18-16Z 2026-06-13 09:18:35 +02:00
tomasr 22bc2f218f Merge branch 'main' into laptop 2026-06-12 14:32:38 +00:00
tomasr c1354a3b98 limine: rice 2026-06-12 15:58:17 +02:00
tomasr f8255c42ed nixUtils: add custom-trimmer 2026-06-12 15:46:20 +02:00
tomasr bd86051c13 hosts: forgot to use nixUtils module 2026-06-12 15:37:43 +02:00
tomasr 34cde6f6f4 flake.lock: update 2026-06-12 15:21:26 +02:00
tomasr 59f5d84de0 bootloader: limine 2026-06-12 15:10:42 +02:00
tomasr f56e535ff6 bootloader: reunited desktop and laptop config 2026-06-12 15:07:06 +02:00
tomasr 3836a6eb7c Merge pull request #25 from tomasriveral/desktop
Weekly sync: desktop → main
2026-06-10 18:25:15 +00:00
tomasr d9a650a964 Merge branch 'main' into desktop 2026-06-10 18:25:04 +00:00
tomasr d0ac13cec6 CI: rewrite with checkout 2026-06-10 20:19:26 +02:00
tomasr c92a868718 CI: fix git repo 2026-06-10 20:17:57 +02:00
tomasr 2c95860f5b CI: fix auto merge action 2026-06-10 20:14:49 +02:00
tomasr 4b6d0250df Merge pull request #24 from tomasriveral/laptop
Laptop
2026-06-10 08:28:43 +00:00
tomasr a063b505c6 CI: weekly PR merge to main from desktop and laptop 2026-06-10 10:26:26 +02:00
tomasr 433bb52cde CI: weekly PR merge to main from desktop and laptop 2026-06-10 10:26:16 +02:00
tomasr d9969cbd71 mathematics: init module with lean4 2026-06-10 10:20:35 +02:00
tomasr 68d81d5c4b mathematics: init module with lean4 2026-06-10 10:19:51 +02:00
tomasr 259ee7e554 mathematics: init module with lean4 2026-06-09 20:11:19 +02:00
tomasr b1edbc9378 Auto: cleanup-2026-06-09T14-39-17Z 2026-06-09 16:39:36 +02:00
tomasr 7e0ba6278c snapshot pre-cleanup-2026-06-09T14-39-17Z 2026-06-09 16:39:17 +02:00
tomasr 89d5ac8a17 micro-vivify: comment out from flake.nix 2026-06-09 16:26:47 +02:00
tomasr d340b9c08b micro-vivify: comment out from flake.nix 2026-06-09 16:26:34 +02:00
tomasr d4d24e6f61 Merge pull request #23 from tomasriveral/laptop
Laptop
2026-06-09 14:25:26 +00:00
tomasr 45666fa728 Merge pull request #22 from tomasriveral/desktop
Desktop
2026-06-09 14:24:39 +00:00
tomasr 2e0996938a Merge branch 'main' into desktop 2026-06-09 14:24:28 +00:00
tomasr 8b2a086a4d patent flake.lock 2026-06-09 16:22:59 +02:00
tomasr 4b6a5ffa59 patent in flake.nix 2026-06-09 16:18:15 +02:00
tomasr 19adc625f1 patent: use flake.nix 2026-06-09 11:58:44 +02:00
tomasr 18d73c71c3 update flake.lock 2026-06-09 11:58:39 +02:00
tomasr dc09f6dcce snapshot pre-autoupdate-2026-06-09T09-55-08Z 2026-06-09 11:55:08 +02:00
tomasr 682bc4e5ab patent: flake.lock 2026-06-09 11:54:49 +02:00
tomasr 0beb6f374a patent: use flake.nix 2026-06-09 11:51:52 +02:00
tomasr 6d15ae6a22 fix nixGitCherryPicker 2026-06-09 11:48:31 +02:00
tomasr 32c9d85f99 fix: custom-browserprofiles 2026-06-08 22:20:32 +02:00
tomasr e3089e1d59 fix: custom-browserprofiles 2026-06-08 22:20:24 +02:00
tomasr fa54be1c2b fix: cherry-picker-desktop 2026-06-08 22:14:55 +02:00
tomasr abf652e21b fix: cherry-picker-desktop 2026-06-08 22:14:47 +02:00
tomasr 75002217f3 fix: home.file 2026-06-08 22:13:44 +02:00
tomasr e42b1f9725 librewolf profiles selector: added tor-browser 2026-06-08 22:13:00 +02:00
tomasr 99ab54cc8b fix: home.file 2026-06-08 22:12:43 +02:00
tomasr 5afc0acf77 librewolf profiles selector: added tor-browser 2026-06-08 22:11:54 +02:00
tomasr ccd9b3e97e Merge pull request #21 from tomasriveral/laptop
Laptop
2026-06-08 15:51:26 +00:00
tomasr cd3aa9b0dd Merge branch 'main' into laptop 2026-06-08 15:51:01 +00:00
tomasr 07220185ee Merge pull request #20 from tomasriveral/desktop 2026-06-08 15:32:55 +00:00
tomasr eaa0698bc0 matrix: changed all notif message to new unencrypted room 2026-06-08 16:53:01 +02:00
tomasr 9125dfddef matrix: changed all notif message to new unencrypted room 2026-06-08 16:52:50 +02:00
tomasr fdbc3e1a79 caelestia: separate idle settings per device 2026-06-08 16:38:06 +02:00
tomasr 73637ebc1d caelestia: separate idle settings per device 2026-06-08 16:36:25 +02:00
tomasr 9a4b912e58 flake.lock: autoupdate-2026-06-08T14-27-33Z 2026-06-08 16:31:40 +02:00
tomasr c128995bea flake.lock: autoupdate-2026-06-08T14-27-05Z 2026-06-08 16:27:34 +02:00
tomasr d8982fab43 snapshot pre-autoupdate-2026-06-08T14-27-33Z 2026-06-08 16:27:33 +02:00
tomasr 4bd062032f snapshot pre-autoupdate-2026-06-08T14-27-05Z 2026-06-08 16:27:05 +02:00
tomasr 2419bc4f82 removed unused file 2026-06-08 16:17:36 +02:00
tomasr 6a937f3863 removed unused file 2026-06-08 16:17:23 +02:00
tomasr 4ee868fbc6 test commit from desktop 2026-06-08 16:16:51 +02:00
tomasr 2ad6d8c165 flake.lock change 2026-06-08 16:07:39 +02:00
tomasr 8a7908a5c9 flake.lock: autoupdate-2026-06-08T14-06-55Z 2026-06-08 16:07:33 +02:00
tomasr 8207e1502c snapshot pre-autoupdate-2026-06-08T14-06-55Z 2026-06-08 16:06:55 +02:00
tomasr 6d5ab8d831 readd nix-git-cherry-picker to flake.nix 2026-06-08 16:06:38 +02:00
tomasr 95d14041cc nix-git-cherry-picker: init 2026-06-08 15:59:14 +02:00
tomasr ac11171bbf remove lock 2026-06-08 15:55:16 +02:00
tomasr c2305331bb ngcp: forgot home-module 2026-06-08 14:02:36 +02:00
tomasr 9e5cac3a2d hyprland: exec on launch ngcp 2026-06-08 14:00:24 +02:00
tomasr f28ba6b799 hyprland: exec on launch ngcp 2026-06-08 14:00:10 +02:00
tomasr 933478d820 hypr-dynamic-cursor: use nixpkgs unstable 2026-06-08 13:43:25 +02:00
tomasr 72cee5b891 flake.lock: autoupdate-2026-06-08T11-42-02Z 2026-06-08 13:42:51 +02:00
tomasr a5e7dea053 snapshot pre-autoupdate-2026-06-08T11-42-02Z 2026-06-08 13:42:02 +02:00
tomasr d0c547d2e0 hypr-dynamic-cursor: use nixpkgs unstable 2026-06-08 13:36:17 +02:00
tomasr 579f832afe hypr-dynamic-cursor: use nixpkgs master 2026-06-08 13:31:48 +02:00
tomasr d32a0e5948 nixpkgs: add master branch in flake.nix 2026-06-08 13:31:04 +02:00
tomasr c48d721d64 flake.lock: autoupdate-2026-06-08T11-19-03Z 2026-06-08 13:28:59 +02:00
tomasr ad9f94fec2 snapshot pre-autoupdate-2026-06-08T11-19-03Z 2026-06-08 13:19:03 +02:00
tomasr efe30f4c1d nix-git-cherry-picker: init 2026-06-08 13:08:35 +02:00
tomasr 774b7c0a77 hypr-dynamic-cursor: use nixpkgs master 2026-06-07 20:23:45 +02:00
tomasr 68bef6e250 librewolf: add protondb search engine 2026-06-07 20:17:41 +02:00
tomasr 55ce1b6569 nixpkgs: add master branch in flake.nix 2026-06-07 20:12:38 +02:00
tomasr f28a6af581 desktop: fix lock 2026-06-07 16:48:51 +02:00
tomasr 3f5291cbaf desktop: add games 2026-06-07 16:42:52 +02:00
tomasr e6d888e58f Merge pull request #19 from tomasriveral/desktop
Desktop
2026-06-07 12:21:42 +00:00
tomasr 15afff222e hyprland desktop: change scaling to 0.75 2026-06-07 14:20:49 +02:00
tomasr 5a8f8f5c08 librewolf: add protondb search engine 2026-06-07 14:16:34 +02:00
tomasr 7072f2a39e desktop: steam 2026-06-07 14:16:34 +02:00
tomasr 02b5924d31 desktop: init kdrive 2026-06-07 12:43:48 +02:00
tomasr a5d93f6ce1 desktop: auto mount hdd 2026-06-07 12:11:24 +02:00
tomasr 8efd8a30bf desktop: add nvidia drivers 2026-06-07 12:01:14 +02:00
tomasr 5be623fd12 first commit from desktop 2026-06-07 11:53:55 +02:00
tomasr f491282dad Merge pull request #18 from tomasriveral/laptop
Laptop
2026-06-06 19:06:22 +02:00
tomasr a63984816d desktop: fixing commit 2026-06-06 19:04:35 +02:00
tomasr 23606fecb6 removed pkgs-local from desktop and neovim 2026-06-06 10:32:35 +02:00
tomasr a0dd94cb3c Merge pull request #17 from tomasriveral/laptop
Laptop
2026-06-06 09:51:50 +02:00
tomasr aca4458e4c fugit2: overrode local to nixpkgs 2026-06-06 09:51:33 +02:00
tomasr 3b99da9148 flake.lock: autoupdate-2026-06-06T07-47-20Z 2026-06-06 09:48:42 +02:00
tomasr eee5117a22 snapshot pre-autoupdate-2026-06-06T07-47-20Z 2026-06-06 09:47:20 +02:00
tomasr 6830973233 multiple things + tried gpg signing 2026-06-06 09:30:35 +02:00
tomasr f7861f7ca1 snapshot pre-autoupdate-2026-06-05T18-57-56Z 2026-06-05 20:57:56 +02:00
tomasr 2207b5ef03 Merge pull request #16 from tomasriveral/laptop
desktop: add kdrive sync
2026-06-04 18:46:49 +02:00
tomasr 9d4eb9b0a2 desktop: add kdrive sync 2026-06-04 18:46:14 +02:00
tomasr 0713810716 Merge pull request #15 from tomasriveral/laptop
Setup for desktop
2026-06-04 18:13:44 +02:00
tomasr 8ee9c3f639 Auto: cleanup-2026-06-04T16-10-09Z 2026-06-04 18:10:27 +02:00
tomasr d673efcc8c snapshot pre-cleanup-2026-06-04T16-10-09Z 2026-06-04 18:10:09 +02:00
tomasr 3ecc4a55bf snapshot pre-cleanup-2026-06-04T16-01-15Z 2026-06-04 18:01:15 +02:00
tomasr 501965a0dc snapshot pre-cleanup-2026-06-04T16-00-46Z 2026-06-04 18:00:46 +02:00
tomasr 897795869f Merge pull request #14 from tomasriveral/laptop 2026-06-04 10:09:24 +02:00
tomasr 9e0f4e9aca nixpkgs-notifier: added in hyprland exec-once 2026-06-03 14:25:30 +02:00
tomasr 44b77af9e9 flake.lock: autoupdate-2026-06-03T12-23-08Z 2026-06-03 14:23:55 +02:00
tomasr dad71ed4a7 snapshot pre-autoupdate-2026-06-03T12-23-08Z 2026-06-03 14:23:08 +02:00
tomasr 5b4b92ca06 nixpkgs-notifier: init 2026-06-03 14:16:53 +02:00
tomasr f66b4ae739 nixpkgs-notifier: added as a flake input 2026-06-03 13:29:19 +02:00
tomasr fd8221d3ab gitBackup: add nixpkgs-tracker-notifier 2026-06-03 13:20:28 +02:00
tomasr 42023bc87a neovim: fix python-lsp-server 2026-06-03 13:04:28 +02:00
tomasr 8254cb871e Auto: cleanup-2026-06-03T08-27-47Z 2026-06-03 10:28:00 +02:00
tomasr a3c2dbe568 snapshot pre-cleanup-2026-06-03T08-27-47Z 2026-06-03 10:27:47 +02:00
tomasr b53a392b37 flake.lock: autoupdate-2026-06-03T08-26-04Z 2026-06-03 10:27:09 +02:00
tomasr 6f6e197c12 snapshot pre-autoupdate-2026-06-03T08-26-04Z 2026-06-03 10:26:04 +02:00
tomasr 90a2c60863 backup: created script for backuping git repos 2026-06-03 10:25:05 +02:00
tomasr 8ec20cee5b i don't rember what changed electri boogallooo 2026-06-02 23:47:56 +02:00
tomasr cb99ae907f i don't rember what changed 2026-06-02 23:39:31 +02:00
tomasr 256f7f802b sudo: fix typo 2026-06-01 11:21:02 +02:00
tomasr d79e9ae0b1 bitwarden: temp remove desktop as Electron 39 is EOL 2026-06-01 11:19:09 +02:00
tomasr dd6ad70e7c sudo: set default pwfeedback 2026-06-01 11:18:48 +02:00
tomasr d017065992 flake.lock: update 2026-06-01 11:18:22 +02:00
tomasr 5d5dd21c8e snapshot pre-autoupdate-2026-05-31T13-42-40Z 2026-05-31 15:42:40 +02:00
tomasr 9e6e278c72 nix: add store optimisation and tweak garbage collection 2026-05-31 15:37:51 +02:00
tomasr 4fcbc31629 snapshot pre-cleanup-2026-05-30T21-34-13Z 2026-05-30 23:34:13 +02:00
tomasr dc3eaf04c0 Librewolf: add bookmark nixpkgs PRs 2026-05-30 15:16:32 +02:00
tomasr cfe758599d Librewolf: add consumer rights wiki extension 2026-05-30 15:00:26 +02:00
tomasr 226ada8abd Merge pull request #13 from tomasriveral/laptop
nixos: 25.11 -> 26.06
2026-05-30 14:41:31 +02:00
tomasr 23e4261fef PR won't open without this empty commit 2026-05-30 14:39:44 +02:00
tomasr 33174e7bc2 nixos: 25.11 -> 26.05 2026-05-30 14:38:00 +02:00
tomasr 80118164bf Merge pull request #12 from tomasriveral/laptop
Pre-26.05 PR
2026-05-30 12:58:29 +02:00
tomasr 11e6661af0 Librewolf: add nix, nixos and nixpkgs manual as bookmark 2026-05-30 12:03:10 +02:00
tomasr dbdc72dc64 snapshot pre-autoupdate-2026-05-30T10-01-01Z 2026-05-30 12:01:01 +02:00
tomasr cc5118c021 tlp: desactivate for debuging battery capped at 65% issue 2026-05-30 11:57:28 +02:00
tomasr 1f226bfcea Librewolf: add bookmark ZH failure unmaintained 2026-05-30 11:55:48 +02:00
tomasr 3690b2896c flake.lock: autoupdate-2026-05-28T16-07-42Z 2026-05-28 18:09:49 +02:00
tomasr e4e61b3d35 snapshot pre-autoupdate-2026-05-28T16-07-42Z 2026-05-28 18:07:42 +02:00
tomasr 4d5e1ace42 tlp: tweak config 2026-05-28 10:59:24 +02:00
tomasr 7efb71d225 Librewolf: add bookmark outlook mail 2026-05-28 10:18:40 +02:00
tomasr 020f06def8 dev: add nixpkgs-review 2026-05-26 21:21:19 +02:00
tomasr d7e2e22799 nom: add rss feed 2026-05-26 21:20:29 +02:00
tomasr 1d71a4dfcd librewolf: remove ublock go back to adnauseam
AdNauseam didn't block (with my settings) youtube ads. Just use a VPN to
Albania.
2026-05-26 12:11:26 +02:00
tomasr 1b33855fb1 flake.lock: autoupdate-2026-05-26T09-24-05Z 2026-05-26 11:26:22 +02:00
tomasr 43df516fa2 snapshot pre-autoupdate-2026-05-26T09-24-05Z 2026-05-26 11:24:05 +02:00
tomasr c6488c7d47 mullvad: turned off lockdown mode 2026-05-25 17:53:42 +02:00
tomasr 80dd4c217f notewrapper: init flake 2026-05-25 17:52:54 +02:00
tomasr 982daa028a zsh: updated PATH 2026-05-25 16:04:38 +02:00
tomasr 9a5c8c0c53 Merge pull request #11 from tomasriveral/laptop
Laptop
2026-05-24 12:27:55 +02:00
tomasr 33d24f0cf6 docs: add warning in readme 2026-05-24 12:26:46 +02:00
tomasr f8985b786c Merge pull request #10 from tomasriveral/dendritic-pattern
Dendritic pattern
2026-05-24 12:25:05 +02:00
tomasr 9a709f8ae9 Merge pull request #9 from tomasriveral/laptop
Laptop
2026-05-18 19:39:28 +02:00
tomasr 515247573f Merge pull request #8 from tomasriveral/laptop
Refactor configuration + changed how unfree packages are handled + fixed bugs and added warning
2026-05-17 13:15:33 +02:00
60 changed files with 3374 additions and 946 deletions

No files matched your search

+120
View File
@@ -0,0 +1,120 @@
name: Sync branches into main
on:
schedule:
- cron: "0 14 * * 1" # Monday
- cron: "0 14 * * 3" # Wednesday
workflow_dispatch:
inputs:
source:
description: Branch to sync into main
required: true
type: choice
options:
- laptop
- desktop
permissions:
contents: write
pull-requests: write
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Determine source branch
id: branch
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "source=${{ inputs.source }}" >> "$GITHUB_OUTPUT"
exit 0
fi
DOW=$(date -u +%u)
case "$DOW" in
1)
echo "source=laptop" >> "$GITHUB_OUTPUT"
;;
3)
echo "source=desktop" >> "$GITHUB_OUTPUT"
;;
*)
echo "No sync scheduled today."
exit 1
;;
esac
- name: Check for changes
run: |
git fetch origin main "${{ steps.branch.outputs.source }}"
HAS_CHANGES=true
if git diff --quiet \
"origin/main...origin/${{ steps.branch.outputs.source }}"; then
HAS_CHANGES=false
fi
- name: Check for existing PR
id: existing
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if $HAS_CHANGES; then
PR_NUMBER=$(gh pr list \
--base main \
--head "${{ steps.branch.outputs.source }}" \
--state open \
--json number \
--jq '.[0].number // empty')
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
fi
- name: Create PR
id: create
if: steps.existing.outputs.number == ''
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if $HAS_CHANGES; then
gh pr create \
--base main \
--head "${{ steps.branch.outputs.source }}" \
--title "Weekly sync: ${{ steps.branch.outputs.source }} → main" \
--body "This pull request was created automatically by GitHub Actions."
PR_NUMBER=$(gh pr list \
--base main \
--head "${{ steps.branch.outputs.source }}" \
--state open \
--json number \
--jq '.[0].number')
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
fi
- name: Determine PR number
id: pr
run: |
if $HAS_CHANGES; then
if [ -n "${{ steps.existing.outputs.number }}" ]; then
echo "number=${{ steps.existing.outputs.number }}" >> "$GITHUB_OUTPUT"
else
echo "number=${{ steps.create.outputs.number }}" >> "$GITHUB_OUTPUT"
fi
fi
- name: Enable auto-merge
if: steps.pr.outputs.number != ''
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if $HAS_CHANGES; then
gh pr merge \
"${{ steps.pr.outputs.number }}" \
--auto \
--merge
fi
+9
View File
@@ -0,0 +1,9 @@
# Ignore build outputs from performing a nix-build or `nix build` command
result
result-*
# Ignore automatically generated direnv output
.direnv
# Ignore NixOS interactive test driver history
**/.nixos-test-history
+1 -1
View File
@@ -1,4 +1,4 @@
⚠️ Documentation outdated. ⚠️ Documentation outdated. I recently rewrote the entire config using the [dendritic pattern](https://github.com/mightyiam/dendritic/). One of these days, I will update the README.
# NixOS Configuration # NixOS Configuration
![NixOS configuration](/assets/example.png) ![NixOS configuration](/assets/example.png)
Generated Executable → Regular
+278 -75
View File
@@ -1,5 +1,30 @@
{ {
"nodes": { "nodes": {
"agenix": {
"inputs": {
"darwin": "darwin",
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
],
"systems": "systems"
},
"locked": {
"lastModified": 1770165109,
"narHash": "sha256-9VnK6Oqai65puVJ4WYtCTvlJeXxMzAp/69HhQuTdl/I=",
"owner": "ryantm",
"repo": "agenix",
"rev": "b027ee29d959fda4b60b57566d64c98a202e0feb",
"type": "github"
},
"original": {
"owner": "ryantm",
"repo": "agenix",
"type": "github"
}
},
"caelestia-cli": { "caelestia-cli": {
"inputs": { "inputs": {
"caelestia-shell": [ "caelestia-shell": [
@@ -11,11 +36,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1779508871, "lastModified": 1786071436,
"narHash": "sha256-SFl2je8b423f/tIy0RTgCrWQUJiyFsAZp1Y0cccXqio=", "narHash": "sha256-/CQJ781dRGWWUMrJ34vIj1PQnNEEWgnEEuod0r5LKGk=",
"owner": "caelestia-dots", "owner": "caelestia-dots",
"repo": "cli", "repo": "cli",
"rev": "7f300626704b7a86fe838ab58df654fa99779613", "rev": "751fbc555a83faba5dd589270d14eeb22afab174",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -27,17 +52,18 @@
"caelestia-shell": { "caelestia-shell": {
"inputs": { "inputs": {
"caelestia-cli": "caelestia-cli", "caelestia-cli": "caelestia-cli",
"m3shapes": "m3shapes",
"nixpkgs": [ "nixpkgs": [
"nixpkgs-unstable" "nixpkgs-unstable"
], ],
"quickshell": "quickshell" "quickshell": "quickshell"
}, },
"locked": { "locked": {
"lastModified": 1779591587, "lastModified": 1786238888,
"narHash": "sha256-Ud83/zsmDSHcqQ64MRiQ7SnGkUVIpRzqwqBBU65DGXY=", "narHash": "sha256-pnO0u0UUYwkr72pJR5Giu93LZfU/fhTKJZYa1xeM7Po=",
"owner": "caelestia-dots", "owner": "caelestia-dots",
"repo": "shell", "repo": "shell",
"rev": "2f7ab5e4140d9188185f6c3164e428c1eeda1fe6", "rev": "817a220e8e87c4df9f3681033a0d8a8054cdaa30",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -46,22 +72,80 @@
"type": "github" "type": "github"
} }
}, },
"darwin": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1744478979,
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
"type": "github"
},
"original": {
"owner": "lnl7",
"ref": "master",
"repo": "nix-darwin",
"type": "github"
}
},
"disko": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1781152676,
"narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=",
"owner": "nix-community",
"repo": "disko",
"rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "disko",
"type": "github"
}
},
"flake-parts": { "flake-parts": {
"inputs": { "inputs": {
"nixpkgs-lib": "nixpkgs-lib" "nixpkgs-lib": "nixpkgs-lib"
}, },
"locked": { "locked": {
"lastModified": 1778716662, "lastModified": 1785627969,
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=", "narHash": "sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw=",
"owner": "hercules-ci", "rev": "427bf4bd9435fdf21321c8cc628c24efc14c0f7a",
"repo": "flake-parts", "revCount": 483,
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb", "type": "tarball",
"type": "github" "url": "https://api.flakehub.com/f/pinned/hercules-ci/flake-parts/0.1.483%2Brev-427bf4bd9435fdf21321c8cc628c24efc14c0f7a/019fc124-5bcc-79d1-a1e4-306df724dc0a/source.tar.gz"
}, },
"original": { "original": {
"owner": "hercules-ci", "type": "tarball",
"repo": "flake-parts", "url": "https://flakehub.com/f/hercules-ci/flake-parts/%2A"
"type": "github" }
},
"flake-utils": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"revCount": 102,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/numtide/flake-utils/0.1.102%2Brev-11707dc2f618dd54ca8739b309ec4fc024de578b/0193276d-5b8f-7dbc-acf1-41cb7b54ad2e/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/numtide/flake-utils/%2A"
} }
}, },
"home-manager": { "home-manager": {
@@ -71,27 +155,27 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1779506708, "lastModified": 1785119570,
"narHash": "sha256-QOD/CNm196nCJRheux/URi4/HE66fthdOMqCJoPP1Y0=", "narHash": "sha256-Rgs2xKnGLFWQscxUaXX07oyZeuMDOHEbqDOsgliLFGM=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "3ee51fbdac8c8bdfe1e7e1fcaba6520a563f394f", "rev": "d4fd24667c8cbef124bb70a20380cab75ec8474d",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "release-25.11", "ref": "release-26.05",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
}, },
"import-tree": { "import-tree": {
"locked": { "locked": {
"lastModified": 1778781969, "lastModified": 1784254960,
"narHash": "sha256-Jjuz5CmSkur8KvLDoGa+vylEp+RkQtv4mt/qcMznpH0=", "narHash": "sha256-iI88R3wHz8wTKQb5orvpc51L/Xr64AJyxid/0MKa/b8=",
"owner": "vic", "owner": "vic",
"repo": "import-tree", "repo": "import-tree",
"rev": "d321337efd0f23a9eb14a42adb7b2c29313ab274", "rev": "4ebb10ae17d5f1ad366e7aef5b92cb8eecf24f69",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -100,63 +184,69 @@
"type": "github" "type": "github"
} }
}, },
"microPlugins-vivify": { "m3shapes": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1770382657, "lastModified": 1781017666,
"narHash": "sha256-yWmIgT90mC9PhzyH/itDbRMmRTiZiwW+Yo0dsHW7ni8=", "narHash": "sha256-kfHyzZaPHgqZML48OA+5JwBOsLdQJ2ci/aGPShvUB4Y=",
"ref": "refs/heads/main", "owner": "soramanew",
"rev": "3c5cb25facf3fc4143bfea9323a60eda65ef8485", "repo": "m3shapes",
"revCount": 8, "rev": "bdc327b29f95394a732baf3c9b19658ba23755b6",
"type": "git",
"url": "https://codeberg.org/gibbert/micro-vivify"
},
"original": {
"type": "git",
"url": "https://codeberg.org/gibbert/micro-vivify"
}
},
"nixos-grub-themes": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1769794759,
"narHash": "sha256-1doG74WkbtUpawduk9f8szyzWsw3Liblrh2z+2jQnw4=",
"owner": "jeslie0",
"repo": "nixos-grub-themes",
"rev": "5e75f9b3ea9061dca6c53d34e166e08bf9ebc7c7",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "jeslie0", "owner": "soramanew",
"repo": "nixos-grub-themes", "repo": "m3shapes",
"rev": "bdc327b29f95394a732baf3c9b19658ba23755b6",
"type": "github"
}
},
"nix-git-cherry-picker": {
"inputs": {
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixpkgs-unstable"
]
},
"locked": {
"lastModified": 1786462419,
"narHash": "sha256-A7Q3UIyzDg1O54E0W6HOQIzvsVJq/rMuelJR+ELLRvI=",
"owner": "tomasriveral",
"repo": "nix-git-cherry-picker",
"rev": "aec69257dc9b68d875333ec9f4a7b310d878abd1",
"type": "github"
},
"original": {
"owner": "tomasriveral",
"repo": "nix-git-cherry-picker",
"type": "github" "type": "github"
} }
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1702151865, "lastModified": 1786535285,
"narHash": "sha256-9VAt19t6yQa7pHZLDbil/QctAgVsA66DLnzdRGqDisg=", "narHash": "sha256-rG5HKMAgAhMgydvKGtco6rqTxRq4EDZQCx9USLvVqYw=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "666fc80e7b2afb570462423cb0e1cf1a3a34fedd", "rev": "9f78f44a87948854445dae0b6bf82b2e87e4efb5",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "nixos",
"ref": "nixos-unstable", "ref": "nixos-26.05",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs-lib": { "nixpkgs-lib": {
"locked": { "locked": {
"lastModified": 1777168982, "lastModified": 1785031560,
"narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=", "narHash": "sha256-OmshNvn2vupOFpYinLUu+1Dnpu4n7Q5N3ggGVNHpkUI=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixpkgs.lib", "repo": "nixpkgs.lib",
"rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14", "rev": "0e79af5e3d4dcfcd676ab5ba3f95d2e3352e078c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -165,13 +255,36 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-notifier": {
"inputs": {
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixpkgs-unstable"
]
},
"locked": {
"lastModified": 1785077063,
"narHash": "sha256-rJxX9Mq16TOiIlf+nNR4SaLsWf1yII8xsQpJUNio3Yg=",
"owner": "tomasriveral",
"repo": "nixpkgs-notifier",
"rev": "39a89ffbdc49cc9ab6f67bc4be7ea2f7d3e2b38c",
"type": "github"
},
"original": {
"owner": "tomasriveral",
"repo": "nixpkgs-notifier",
"type": "github"
}
},
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1779536132, "lastModified": 1786534138,
"narHash": "sha256-q+fF42iv/geEbHfgSzy3tS0FF/EyD6XTZ98E6yxiBO8=", "narHash": "sha256-fBJMdnKUTUDtfi/BYLr71HLaC9dG382arxLF2Egg2uo=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3d8f0f3f72a6cd4d93d0ad13203f2ea1cb7e1456", "rev": "044bfe75bfe4c7bbe043dc17b5e42ea823b84a09",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -181,19 +294,50 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": { "notewrapper": {
"inputs": {
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixpkgs-unstable"
]
},
"locked": { "locked": {
"lastModified": 1779102034, "lastModified": 1786346006,
"narHash": "sha256-vZJZjLo513IeI8hjzHFc6TDezUd4uCE2Eq4SNO3DNNg=", "narHash": "sha256-PDM9fB1zBhqVVE75WxRM7vIo3QhL2LGKKdd6N+hTGlg=",
"owner": "nixos", "owner": "tomasriveral",
"repo": "nixpkgs", "repo": "notewrapper",
"rev": "687f05a9184cad4eaf905c48b63649e3a86f5433", "rev": "689c3074c03328e2086dc032a2fc3de00bbef466",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "tomasriveral",
"ref": "nixos-25.11", "repo": "notewrapper",
"repo": "nixpkgs", "type": "github"
}
},
"patent": {
"inputs": {
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixpkgs-unstable"
],
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1786270331,
"narHash": "sha256-GRhNuYIXR/0WWBya4CHfTKyCbL3wuFPJC5yBh5pHU8s=",
"owner": "r14dd",
"repo": "patent",
"rev": "d852cea921124a8b9002db9beb2af2d935af8130",
"type": "github"
},
"original": {
"owner": "r14dd",
"repo": "patent",
"type": "github" "type": "github"
} }
}, },
@@ -205,11 +349,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1779430452, "lastModified": 1785704021,
"narHash": "sha256-zTslhsxLqUlRTML506iougTGzyR38Fzhzn7t4KDEuuE=", "narHash": "sha256-eQtczKMAS4ItlB4pr1B3MqBZiyRVl2nkqNdtyRSQMa8=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "4b4fca3224ab977dc515ac0bb78d00b3dfa71e00", "rev": "28771c7c74b42e20afca0b1b63980cb46515537c",
"revCount": 819, "revCount": 835,
"type": "git", "type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell" "url": "https://git.outfoxxed.me/outfoxxed/quickshell"
}, },
@@ -220,14 +364,73 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"agenix": "agenix",
"caelestia-shell": "caelestia-shell", "caelestia-shell": "caelestia-shell",
"disko": "disko",
"flake-parts": "flake-parts", "flake-parts": "flake-parts",
"flake-utils": "flake-utils",
"home-manager": "home-manager", "home-manager": "home-manager",
"import-tree": "import-tree", "import-tree": "import-tree",
"microPlugins-vivify": "microPlugins-vivify", "nix-git-cherry-picker": "nix-git-cherry-picker",
"nixos-grub-themes": "nixos-grub-themes", "nixpkgs": "nixpkgs",
"nixpkgs": "nixpkgs_2", "nixpkgs-master": [
"nixpkgs-unstable": "nixpkgs-unstable" "nixpkgs-unstable"
],
"nixpkgs-notifier": "nixpkgs-notifier",
"nixpkgs-unstable": "nixpkgs-unstable",
"notewrapper": "notewrapper",
"patent": "patent"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"patent",
"nixpkgs"
]
},
"locked": {
"lastModified": 1780888890,
"narHash": "sha256-MUQPFiskEENaJ2N82TRIqpKlHXGXJJkPfKH6W788oQo=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "7d5f8d75fc195a236b46633d7679139698aeb35f",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
} }
} }
}, },
+55 -7
View File
@@ -2,24 +2,64 @@
description = "Nixos config flake"; description = "Nixos config flake";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable"; # used for some packages nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable"; # used for some packages
nixos-grub-themes.url = "github:jeslie0/nixos-grub-themes";
# Only uncomment when needed. This uses a lot of space and compute ressources for sometimes not that much. If not used, make it follow unstable
nixpkgs-master.follows = "nixpkgs-unstable";
#nixpkgs-master.url = "github:nixos/nixpkgs/master"; # used with precaution as they are untested and not cached
# This one is only used when testing some packaging. You must change the path to the correct nixpkgs clone
#nixpkgs-local.url = "path:/home/tomasr/devel/fugit2-gpgme";
home-manager = { home-manager = {
url = "github:nix-community/home-manager/release-25.11"; url = "github:nix-community/home-manager/release-26.05";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
flake-utils = {
url = "https://flakehub.com/f/numtide/flake-utils/*"; # flakehub caches results
};
notewrapper = {
url = "github:tomasriveral/notewrapper";
inputs.nixpkgs.follows = "nixpkgs-unstable";
inputs.flake-utils.follows = "flake-utils";
};
nixpkgs-notifier = {
url = "github:tomasriveral/nixpkgs-notifier";
inputs.flake-utils.follows = "flake-utils";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
nix-git-cherry-picker = {
url = "github:tomasriveral/nix-git-cherry-picker";
inputs.flake-utils.follows = "flake-utils";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
patent = {
url = "github:r14dd/patent";
inputs.flake-utils.follows = "flake-utils";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
caelestia-shell = { caelestia-shell = {
# based on quickshell. See https://github.com/caelestia-dots/shell # based on quickshell. See https://github.com/caelestia-dots/shell
url = "github:caelestia-dots/shell"; url = "github:caelestia-dots/shell";
inputs.nixpkgs.follows = "nixpkgs-unstable"; inputs.nixpkgs.follows = "nixpkgs-unstable";
}; };
microPlugins-vivify = { disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
};
agenix = {
url = "github:ryantm/agenix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
/*
microPlugins-vivify = {
url = "git+https://codeberg.org/gibbert/micro-vivify"; url = "git+https://codeberg.org/gibbert/micro-vivify";
flake = false; flake = false;
}; };
*/
flake-parts = { flake-parts = {
url = "github:hercules-ci/flake-parts"; url = "https://flakehub.com/f/hercules-ci/flake-parts/*"; # flakehub caches results
}; };
import-tree.url = "github:vic/import-tree"; # imports ./modules recursively import-tree.url = "github:vic/import-tree"; # imports ./modules recursively
}; };
@@ -30,8 +70,13 @@
system = "x86_64-linux"; system = "x86_64-linux";
unfreePkgs = [ unfreePkgs = [
"hplip" "hplip"
"vivify.vim" "nvidia-x11"
"nvidia-settings"
"steam"
"steam-unwrapped"
"cheatsheet.nvim" "cheatsheet.nvim"
"zoom-us"
"zoom"
]; ];
mkUnfreePredicate = pkg: mkUnfreePredicate = pkg:
builtins.elem (inputs.nixpkgs.lib.getName pkg) unfreePkgs; builtins.elem (inputs.nixpkgs.lib.getName pkg) unfreePkgs;
@@ -42,8 +87,11 @@
}; };
pkgs = mkPkgs inputs.nixpkgs; pkgs = mkPkgs inputs.nixpkgs;
pkgs-unstable = mkPkgs inputs.nixpkgs-unstable; pkgs-unstable = mkPkgs inputs.nixpkgs-unstable;
pkgs-local = mkPkgs inputs.nixpkgs-unstable;
#pkgs-local = mkPkgs inputs.nixpkgs-local;
pkgs-master = mkPkgs inputs.nixpkgs-master;
in { in {
inherit pkgs pkgs-unstable; inherit pkgs pkgs-unstable pkgs-local pkgs-master;
}; };
} }
// (inputs.import-tree ./modules)); // (inputs.import-tree ./modules));
+1 -1
View File
@@ -57,7 +57,7 @@ _: {
# we enable system wide with nixpkgs because it offers some addon configuration. We just use this for some config # we enable system wide with nixpkgs because it offers some addon configuration. We just use this for some config
#enable = true; #enable = true;
theme = "dark"; theme = "dark";
sync = { profiles."User 1".sync = {
autoSync = true; autoSync = true;
autoSyncMediaMinutes = 10; autoSyncMediaMinutes = 10;
syncMedia = true; syncMedia = true;
+89 -8
View File
@@ -7,7 +7,7 @@
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
chromium # used only to flash the firmware on my framework laptop 16 (keyboard.frame.work) as only chromium based browser support webHID. chromium # used only to flash the firmware on my framework laptop 16 (keyboard.frame.work) as only chromium based browser support webHID.
pkgs-unstable.tor-browser pkgs-unstable.tor-browser
self.packages.${pkgs.system}.custom-librewolfprofiles self.packages.${pkgs.system}.custom-browserprofiles
]; ];
}; };
flake.homeModules.librewolf = _: { flake.homeModules.librewolf = _: {
@@ -146,7 +146,7 @@
}; };
"uBlock0@raymondhill.net" = { "uBlock0@raymondhill.net" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
installation_mode = "force_installed"; installation_mode = "blocked";
}; };
"{08d5243b-4236-4a27-984b-1ded22ce01c3}" = { "{08d5243b-4236-4a27-984b-1ded22ce01c3}" = {
install_url = "https://addons.mozilla.org/firefox/downloads/file/3729287/gruvboxgruvboxgruvboxgruvboxgr-1.0.xpi"; install_url = "https://addons.mozilla.org/firefox/downloads/file/3729287/gruvboxgruvboxgruvboxgruvboxgr-1.0.xpi";
@@ -160,6 +160,14 @@
install_url = "https://addons.mozilla.org/firefox/downloads/file/4749958/bitwarden_password_manager-latest.xpi"; install_url = "https://addons.mozilla.org/firefox/downloads/file/4749958/bitwarden_password_manager-latest.xpi";
installation_mode = "force_installed"; installation_mode = "force_installed";
}; };
"@crw-extension-firefox" = {
install_url = "https://addons.mozilla.org/firefox/downloads/file/4790089/consumer_rights_wiki-latest.xpi";
installation_mode = "force_installed";
};
"archivebox@tjhorner.dev" = {
install_url = "https://addons.mozilla.org/firefox/downloads/file/4820668/archivebox_exporter-latest.xpi";
installation_mode = "force_installed";
};
}; };
DisableTelemetry = true; DisableTelemetry = true;
DisableFirefoxStudies = true; DisableFirefoxStudies = true;
@@ -304,6 +312,12 @@
bookmarks = { bookmarks = {
force = true; force = true;
settings = [ settings = [
{
name = "Nixpkgs PRs";
tags = ["nixpkgs" "PR" "github"];
keyword = "nixpkgs prs";
url = "https://github.com/NixOS/nixpkgs/pulls";
}
{ {
name = "Nixos Config"; name = "Nixos Config";
tags = ["github"]; tags = ["github"];
@@ -334,18 +348,60 @@
keyword = "nixpkgs tracker"; keyword = "nixpkgs tracker";
url = "https://nixpk.gs/pr-tracker.html"; url = "https://nixpk.gs/pr-tracker.html";
} }
{
name = "fahrlehrer";
tags = ["theorie" "fahrlehrer" "conduite"];
keyword = "fahrlehrer24";
url = "https://app.fahrlehrer24.ch/";
}
{ {
name = "cogito"; name = "cogito";
tags = ["cogito" "esprit" "critique"]; tags = ["cogito" "esprit" "critique"];
keyword = "Cogito l'Esprit critique"; keyword = "Cogito l'Esprit critique";
url = "https://app.cogito.fr"; url = "https://app.cogito.fr";
} }
{
name = "EPFL email";
tags = ["mail" "outlook" "epfl"];
keyword = "EPFL email";
url = "https://outlook.office.com/mail";
}
{
name = "nixpkgs' failing and orphan packages";
tags = ["nixpkgs" "fail" "orphan" "ZH" "zero hydra failure"];
keyword = "Zero hydra failure orphan packages";
url = "https://zh.fail/failed/by-maintainer/_.html";
}
{
name = "NixOS Manual - Unstable";
tags = ["nixos" "manual" "unstable"];
keyword = "NixOS manual";
url = "https://nixos.org/manual/nixos/unstable/";
}
{
name = "Nixpgks Reference Manual - Unstable";
tags = ["nixpkgs" "manual" "reference" "unstable"];
keyword = "nixpkgs reference manual";
url = "https://nixos.org/manual/nixpkgs/unstable/";
}
{
name = "Nix Reference Manual - 2.34.";
tags = ["nix" "manual" "reference" "2.34"];
keyword = "nix reference manual";
url = "https://nix.dev/manual/nix/2.34/nix-2.34.html";
}
{
name = "Disposable temporary email";
tags = ["privacy" "email" "temporary"];
keyword = "disposable temporary email";
url = "https://temp-mail.org";
}
{
name = "nix-update-script Rryan-tm logs";
tags = ["nixpkgs" "nix" "log" "rryan-tm"];
keyword = "rryan-tm logs";
url = "https://nixpkgs-update-logs.nix-community.org";
}
{
name = "Nix function search";
tags = ["nixpkgs" "nix" "search"];
keyword = "nix function search";
url = "https://noogle.dev";
}
]; ];
}; };
search = { search = {
@@ -582,6 +638,23 @@
# }; # };
#}; #};
}; };
bookmarks = {
force = true;
settings = [
{
name = "Disposable temporary email";
tags = ["privacy" "email" "temporary"];
keyword = "disposable temporary email";
url = "https://temp-mail.org";
}
{
name = "r/Piracy megathread";
tags = ["piracy" "megathread" "reddit"];
keyword = "piracy megathread";
url = "https://old.reddit.com/r/Piracy/wiki/megathread";
}
];
};
search = { search = {
force = true; force = true;
default = "quant"; default = "quant";
@@ -643,6 +716,14 @@
]; ];
definedAliases = ["on"]; definedAliases = ["on"];
}; };
"ProtonDB" = {
urls = [
{
template = "https://www.protondb.com/search?q={searchTerms}";
}
];
definedAliases = ["pr"];
};
}; };
}; };
}; };
+29 -19
View File
@@ -10,6 +10,35 @@
quickshell # we have it but adding it there solves "WARN qt.qpa.services: Failed to register with host portal QDBusError("org.freedesktop.portal.Error.Failed", "Could not register app ID: App info not found for 'org.quickshell'")" quickshell # we have it but adding it there solves "WARN qt.qpa.services: Failed to register with host portal QDBusError("org.freedesktop.portal.Error.Failed", "Could not register app ID: App info not found for 'org.quickshell'")"
]; ];
}; };
flake.homeModules.caelestia-desktop = _: {
# for some reason nvidia drivers or I don't know what break the lock. (activate even when use, crash, etc.)
programs.caelestia.settings.general.idle = {
lockBeforeSleep = false;
inhibitWhenAudio = true;
timeouts = [];
};
};
flake.homeModules.caelestia-laptop = _: {
programs.caelestia.settings.general.idle = {
lockBeforeSleep = true;
inhibitWhenAudio = true;
timeouts = [
{
timeout = 180;
idleAction = "lock";
}
{
timeout = 300;
idleAction = "dpms off"; # what's that?
returnAction = "dpms on";
}
{
timeout = 600;
idleAction = ["systemctl" "suspend-then-hibernate"];
}
];
};
};
flake.homeModules.caelestia = _: let flake.homeModules.caelestia = _: let
sisyphe = ../../assets/sisyphe.gif; sisyphe = ../../assets/sisyphe.gif;
pepe-music = ../../assets/pepe-music.gif; pepe-music = ../../assets/pepe-music.gif;
@@ -101,25 +130,6 @@
]; ];
criticalLevel = 3; criticalLevel = 3;
}; };
idle = {
lockBeforeSleep = true;
inhibitWhenAudio = true;
timeouts = [
{
timeout = 180;
idleAction = "lock";
}
{
timeout = 300;
idleAction = "dpms off"; # what's that?
returnAction = "dpms on";
}
{
timeout = 600;
idleAction = ["systemctl" "suspend-then-hibernate"];
}
];
};
}; };
background = { background = {
desktopClock = { desktopClock = {
+4
View File
@@ -5,5 +5,9 @@ _: {
supertuxkart # fuck mariokart supertuxkart # fuck mariokart
# my favorite italian plumber is free software # my favorite italian plumber is free software
]; ];
programs.steam = {
enable = true;
protontricks.enable = true;
};
}; };
} }
+3 -1
View File
@@ -2,9 +2,11 @@ _: {
flake.homeModules.git = _: { flake.homeModules.git = _: {
programs.git = { programs.git = {
enable = true; enable = true;
settings = { /*
settings = {
init.defaultBranch = "main"; init.defaultBranch = "main";
}; };
*/
}; };
programs.gh = { programs.gh = {
enable = true; enable = true;
+69 -464
View File
@@ -1,21 +1,17 @@
{self, ...}: { {...}: {
flake.nixosModules.hyprland = { flake.nixosModules.hyprland = {
pkgs, pkgs,
pkgs-unstable, pkgs-unstable,
... ...
}: { }: {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
swww #wallpaper daemon awww #wallpaper daemon
gruvbox-gtk-theme gruvbox-gtk-theme
hyprcursor hyprcursor
capitaine-cursors-themed # cursor theme capitaine-cursors-themed # cursor theme
papirus-icon-theme papirus-icon-theme
papirus-folders papirus-folders
self.packages.${pkgs.system}.custom-wallpaper
self.packages.${pkgs.system}.custom-dontkillsteam # kill app (if not steam or tomato-c
self.packages.${pkgs.system}.custom-killall # kill all windows except focused window
xdg-utils xdg-utils
home-manager
]; ];
# enable hyprland WM # enable hyprland WM
programs.hyprland = { programs.hyprland = {
@@ -38,466 +34,75 @@
# Enable the X11 windowing system. # Enable the X11 windowing system.
services.xserver.enable = true; services.xserver.enable = true;
}; };
flake.homeModules.hyprland-laptop = _: { flake.homeModules.hyprland-laptop = {
wayland.windowManager.hyprland.settings = { home.file.".config/hypr/host.lua" = {
exec-once = [ text = ''
"qtbatticon" # custom battery tray hl.on("hyprland.start", function()
]; hl.exec_cmd("qtbatticon")
monitor = [ hl.exec_cmd("source /run/agenix/ntfy && nixpkgs-notifier listen")
"eDP-1, highres@highrr, 0x0, 1" end)
];
}; hl.monitor({
output = "eDP-1",
mode = "highres@highrr",
position = "0x0",
scale = 1,
})
'';
enable = true;
force = true;
}; };
flake.homeModules.hyprland = {pkgs-unstable, ...}: let };
wallpaper = ../../assets/wallpaper1.jpg; flake.homeModules.hyprland-desktop = {
in { home.file.".config/hypr/host.lua" = {
#refer to https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/ text = ''
wayland.windowManager.hyprland.enable = true; hl.monitor({
wayland.windowManager.hyprland.package = pkgs-unstable.hyprland; output = "",
#hint Electron apps to use on wayland; mode = "preferred",
home.sessionVariables.NIXOS_OZONE_WL = "1"; position = "auto",
wayland.windowManager.hyprland.plugins = [ scale = 0.75,
#pkgs-unstable.hyprlandPlugins.hyprspace # currently broken })
#pkgs-unstable.hyprlandPlugins.hypr-dynamic-cursors # currently broken '';
]; enable = true;
wayland.windowManager.hyprland.settings = { force = true;
"$mod" = "SUPER"; };
"$term" = "kitty"; };
"$editor" = "nvim"; flake.homeModules.hyprland = {pkgs-unstable, ... }:
"$notes" = "kitty --class \"custom-obsidianvaults\" --name \"Select Obsidian vault\" --hold custom-obsidianvaults"; let
"$file" = "dolphin"; wallpaper1 = ../../assets/wallpaper1.jpg;
"$browser" = "kitty --class \"custom-librewolfprofiles\" --name \"Select LibreWolf profile\" --hold custom-librewolfprofiles"; wallpaper2 = ../../assets/wallpaper2.jpg;
# ▄▀█ █▄░█ █ █▀▄▀█ ▄▀█ ▀█▀ █ █▀█ █▄░█ wallpaper3 = ../../assets/wallpaper3.jpg;
# █▀█ █░▀█ █ █░▀░█ █▀█ ░█░ █ █▄█ █░▀█ wallpaper4 = ../../assets/wallpaper4.jpg;
animations = { wallpaper5 = ../../assets/wallpaper5.jpg;
enabled = true;
bezier = [
"wind, 0.05, 0.9, 0.1, 1.05"
"winIn, 0.1, 1.1, 0.1, 1.1"
"winOut, 0.3, -0.3, 0, 1"
"liner, 1, 1, 1, 1"
];
animation = [
"windows, 1, 6, wind, slide"
"windowsIn, 1, 6, winIn, slide"
"windowsOut, 1, 5, winOut, slide"
"windowsMove, 1, 5, wind, slide"
"border, 1, 1, liner"
"borderangle, 1, 30, liner, loop"
"fade, 1, 10, default"
"workspaces, 1, 5, wind"
];
};
# █▀▀ █▄░█ █░█ hyprlandLua = builtins.replaceStrings
# ██▄ █░▀█ ▀▄▀ [
"WALLPAPER1/PATH/PLACEHOLDER"
# See https://wiki.hyprland.org/Configuring/Environment-variables/ "WALLPAPER2/PATH/PLACEHOLDER"
env = [ "WALLPAPER3/PATH/PLACEHOLDER"
"PATH, $PATH:$scrPath" "WALLPAPER4/PATH/PLACEHOLDER"
"XDG_CURRENT_DESKTOP,Hyprland" "WALLPAPER5/PATH/PLACEHOLDER"
"XDG_SESSION_TYPE,wayland" ]
"XDG_SESSION_DESKTOP,Hyprland" [
"QT_QPA_PLATFORM,wayland;xcb" (toString wallpaper1)
"QT_QPAPLATFORMTHEME,qt6ct" (toString wallpaper2)
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1" (toString wallpaper3)
"MOZ_ENABLE_WAYLAND,1" (toString wallpaper4)
"GDK_SCALE,1" (toString wallpaper5)
]
(builtins.readFile ../../other/hyprland/hyprland.lua);
in
{
#refer to https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/
wayland.windowManager.hyprland.enable = true;
wayland.windowManager.hyprland.package = pkgs-unstable.hyprland;
#hint Electron apps to use on wayland;
home.sessionVariables.NIXOS_OZONE_WL = "1";
wayland.windowManager.hyprland.plugins = [
#pkgs-unstable.hyprlandPlugins.hyprspace # currently broken
#pkgs-unstable.hyprlandPlugins.hypr-dynamic-cursors
]; ];
wayland.windowManager.hyprland.configType = "lua";
# █ █▄░█ █▀█ █░█ ▀█▀ wayland.windowManager.hyprland.extraConfig = hyprlandLua;
# █ █░▀█ █▀▀ █▄█ ░█░
input = {
kb_layout = ["ch"];
follow_mouse = 1;
sensitivity = 0;
force_no_accel = 1;
};
# █▄▀ █▀▀ █▄█ █▄▄ █ █▄░█ █▀▄ █ █▄░█ █▀▀ █▀
# █░█ ██▄ ░█░ █▄█ █ █░▀█ █▄▀ █ █░▀█ █▄█ ▄█
# caelestia shell drawers toggle dashboard
# caelestia shell drawers toggle utilities
bind = [
#hyprland/utility keybindings
"$mod, W, togglefloating"
"$mod, G, togglegroup"
"Alt, Return, fullscreen"
"$mod, Left, movefocus, l"
"$mod, Right, movefocus, r"
"$mod, Up, movefocus, u"
"$mod, Down, movefocus, d"
"Alt, Tab, movefocus, d"
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
"$mod, 6, workspace, 6"
"$mod, 7, workspace, 7"
"$mod, 8, workspace, 8"
"$mod, 9, workspace, 9"
"$mod, 0, workspace, 10"
"$mod+Ctrl, Right, workspace, r+1"
"$mod+Ctrl, Left, workspace, r-1"
"$mod+Ctrl, Doown, workspace, empty"
"$mod+Shift, 1, movetoworkspace, 1"
"$mod+Shift, 2, movetoworkspace, 2"
"$mod+Shift, 3, movetoworkspace, 3"
"$mod+Shift, 4, movetoworkspace, 4"
"$mod+Shift, 5, movetoworkspace, 5"
"$mod+Shift, 6, movetoworkspace, 6"
"$mod+Shift, 7, movetoworkspace, 7"
"$mod+Shift, 8, movetoworkspace, 8"
"$mod+Shift, 9, movetoworkspace, 9"
"$mod+Shift, 0, movetoworkspace, 10"
"$mod+Ctrl+Alt, Right, movetoworkspace, r+1"
"$mod+Ctrl+Alt, Left, movetoworkspace, r-1"
#"$mod, Backspace, exec, wlogout -b 4 -T 600 -B 600"
"$mod, Backspace, exec, caelestia shell drawers toggle session"
"$mod+Shift+Ctrl, Left, movewindow, l"
"$mod+Shift+Ctrl, Right, movewindow, r"
"$mod+Shift+Ctrl, Up, movewindow, u"
"$mod+Shift+Ctrl, Down, movewindow, d"
"$mod, mouse_down, workspace, e+1"
"$mod, mouse_up, workspace, e-1"
"$mod, V, exec, cliphist list | rofi -dmenu| cliphist decode | wl-copy" # copy paste
"$mod, B, exec, hyprkeys -bkr | rofi -dmenu"
#"$mod, A, tagwindow, noborder" # used to not apply image border
"$mod, S, togglespecialworkspace,"
"Alt+$mod, S, movetoworkspace, special"
# for the scrolling layout
"$mod, A, layoutmsg, move -col"
"$mod, D, layoutmsg, move +col"
#apps keybindings
"$mod, T, exec, $term"
"$mod, E, exec, $file"
"$mod, F, exec, $browser"
"$mod, N, exec, $notes"
#"$mod+Shift, A, exec, rofi -show drun"
"$mod+Shift, A, exec, caelestia shell drawers toggle launcher"
"$mod, Q, exec, custom-dontkillsteam"
#"Ctrl+Alt, W, exec, pkill waybar || waybar"
"Ctrl+Alt, W, exec, caelestia shell drawers toggle sidebar"
#"$mod, L, exec, swaylock -eFLK -i ${wallpaper}"
"$mod, L, exec, caelestia shell lock lock"
#"$mod, F11, exec, hyprshot -m window"
", F11, exec, caelestia screenshot"
#"$mod_SHIFT, S, exec, hyprshot -m region --clipboard only"
# "$mod_SHIFT, S, exec, qs ipc call screenshot toggle"
"$mod_SHIFT, S, exec, caelestia shell picker open"
# framework 16 rgb macropad
"Ctrl+$mod, 6, exec, custom-killall" # pos 1 1 killall apps except focused one
#"Ctrl+Alt, 7, exec, custom-performance" # pos 2 1 start performance mode
"Ctrl+Alt, 7, exec, caelestia shell gameMode toggle"
# reloads the autostart programs # pos 3 1
# we passed to caelestia-shell and stoped using that
/*
"Ctrl+$mod, 4, exec, sleep 1 && kitty -o font_size=16 -e sh -c 'custom-weather'"
"Ctrl+$mod, 4, exec, sleep 1 && kitty -o font_size=11 -e sh -c 'custom-cowsay'"
"Ctrl+$mod, 4, exec, kitty -e 'custom-launch'"
"Ctrl+$mod, 4, exec, sleep 1 && kitty -o font_size=5 -e btm --theme gruvbox --disable-click --disable_advanced_kill --enable_cache_memory -g -R -T "
"Ctrl+$mod, 4, exec, sleep 1 && kitty -o font_size=1 -e sh -c 'cmatrix -br'"
#"Ctrl+Alt, 1, exec, swaync-client -t" # pos 4 1 notification center
"Ctrl+Alt, 1, exec, qs ipc call notifications toggle"
*/
"Ctrl+Alt, 1, exec, caelestia shell drawers toggle sidebar"
"Ctrl+$mod, 4, exec, caelestia shell notifs toggleDnd"
"Ctrl+$mod, 3, exec, pavucontrol" # pos 1 2 audiocontrol
"Ctrl+Shift+Alt, 0, exec, kitty --hold --class \"custom-changeAudioOutput\" --name \"Select audio output\" zsh -c \"custom-changeAudioOutput\"" # pos 2 2 change audio output fzf
"Ctrl+$mod, 5, exec, gnome-characters" # pos 3 2 special chars
"Ctrl+Alt, 8, exec, hyprpicker | tee >(wl-copy) | cliphist store" # pos 4 2 colorpicker
"Ctrl+Alt, 0, exec, custom-tomato" # pos 1 3 pomodoro app
"Ctrl+Alt, 2, exec, custom-bottom" # pos 2 3 btm (like htop but cleaner)
"Ctrl+Alt, 9, exec, anki"
# if hyprexpo plugin enabled bind = $mainMod, Space, hyprexpo:expo, toggle
# maybe exec sudo framework-tools-tui
#plugins keybindings
#"$mod, SPACE, overview:toggle, "
];
binde = [
"$mod+Shift, Right, resizeactive, 30 0"
"$mod+Shift, Left, resizeactive, -30, 0"
"$mod+Shift, Up, resizeactive, 0 -30"
"$mod+Shift, Down, resizeactive,m 0 30"
];
bindl = [
", F1, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle" #toggle audio mute
", F5, exec, playerctl play-pause" # media F4-F6
", F4, exec, playerctl previous"
", F6, exec, playerctl next"
];
bindel = [
", F2, exec, pactl set-sink-volume @DEFAULT_SINK@ -10%" # decrease volume
", F3, exec, pactl set-sink-volume @DEFAULT_SINK@ +10%" # increase volume
", F7, exec, brightnessctl s 10%-" # decrease brightness
", F8, exec, brightnessctl s +10%" # increase brightness
];
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
"$mod, Z, movewindow"
"$mod, X, resizewindow"
];
# █░░ ▄▀█ █░█ █▄░█ █▀▀ █░█
# █▄▄ █▀█ █▄█ █░▀█ █▄▄ █▀█
exec-once = [
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" # for XDPH
"dbus-update-activation-environment --systemd --all" # for XDPH
"systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" # for XDPH
"systemctl --user start xdg-desktop-portal-wlr.service"
"blueman-applet" # systray app for Bluetooth
"udiskie --no-automount --smart-tray" # front-end that allows to manage removable media
"nm-applet --indicator" # systray app for Network/wifi
#setups clipboard
"rm -rf ~/.cache/cliphist/ && wl-paste --type text --watch cliphist store & wl-paste --type image --watch cliphist store"
#"wl-paste --type text --watch cliphist store" # clipboard store text data
#"wl-paste --type image --watch cliphist store" # clipboard store image data
"custom-batterynotify"
"custom-batterywarning"
#"birdtray" # thunderbird tray app # curently broken
#wallpapers/b
"swww img ${wallpaper}"
"swww-daemon"
"sleep 1 && custom-wallpaper"
"custom-checkKdrive && custom-mountkdrive" # checks if the remote works and mount it
#"waybar"
"custom-gitnotify"
"custom-checkMatrix" # checks if matrix-commander-rs is connected which is important for other stuff
#"custom-obsidianbackup" # backups the obsidian notes to kdrive and to a timed hidden dir (~/.Notes.backup/)
#"QS-notifycache" # builds the cache that will be used for the notification history
"sleep 4 & caelestia-shell" #works better if it sleeps a bit before
/*
We stopped using that ######################### maybe we should desactivate those scripts
# login autostart
#######################
"[workspace 1 silent] sleep 1 && kitty -o font_size=16 -e sh -c 'custom-weather'"
"[workspace 1 silent] sleep 1 && kitty -o font_size=11 -e sh -c 'custom-cowsay'"
"[workspace 1 silent] kitty -e 'custom-launch'"
"[workspace 1 silent] sleep 1 && kitty -o font_size=5 -e btm --theme gruvbox --disable-click --disable_advanced_kill --enable_cache_memory -g -R -T "
"[workspace 1 silent] sleep 1 && kitty -o font_size=1 -e sh -c 'cmatrix -br'"
######################
######################
*/
];
splash = true; # remove default background on startup
# gestures (also keybindings)
gesture = [
"3, right, move, +col"
"3, left, move, -col"
];
# █░░ ▄▀█ █▄█ █▀█ █░█ ▀█▀ █▀
# █▄▄ █▀█ ░█░ █▄█ █▄█ ░█░ ▄█
dwindle = {
preserve_split = true;
};
scrolling = {
column_width = 0.45;
};
# █▀▄▀█ █ █▀ █▀▀
# █░▀░█ █ ▄█ █▄▄
misc = {
vrr = 0;
force_default_wallpaper = 0;
};
xwayland = {
force_zero_scaling = true;
};
# █▀▄▀█ █▀█ █▄░█ █ ▀█▀ █▀█ █▀█
# █░▀░█ █▄█ █#░▀█ █ ░█░ █▄█ █▀▄
monitor = [
#",preferred, auto, auto"
"HDMI-A-1, highres2highrr, auto-left, 1"
];
# _______ ___ __ __ _______ ___ __ _ _______
#| || | | | | || || | | | | || |
#| _ || | | | | || ___|| | | |_| || _____|
#| |_| || | | |_| || | __ | | | || |_____
#| ___|| |___ | || || || | | _ ||_____ |
#| | | || || |_| || | | | | | _____| |
#|___| |_______||_______||_______||___| |_| |__||_______|
#
"plugin:dynamic-cursors" = {
enabled = true;
threshold = 2;
mode = "rotate";
rotate = {
# length in px of the simulated stick used to rotate the cursor
# most realistic if this is your actual cursor size
length = 20;
offset = 0;
};
shake = {
enabled = true;
# use nearest-neighbour (pixelated) scaling when shaking
# may look weird when effects are enabled
nearest = true;
threshold = 4;
# magnification level immediately after shake start
base = 4.0;
# magnification increase per second when continuing to shake
speed = 4.0;
# how much the speed is influenced by the current shake intensitiy
influence = 0.0;
# maximal magnification the cursor can reach
# values below 1 disable the limit (e.g. 0)
limit = 0.0;
# time in millseconds the cursor will stay magnified after a shake has ended
timeout = 2000;
# show cursor behaviour `tilt`, `rotate`, etc. while shaking
effects = true;
# enable ipc events for shake
ipc = false;
};
};
"plugin:overview" = {
disableGestures = true;
showEmptyWorkspace = true;
workspaceActiveBorder = "rgb(ab7746)";
disableBlur = true;
};
#####################################################
#####################################################
# theme
decoration = {
dim_special = 0.3;
rounding = 18;
blur = {
special = true;
enabled = true;
size = 4;
passes = 2;
new_optimizations = true;
ignore_opacity = true;
};
};
general = {
gaps_in = 5;
gaps_out = 15;
border_size = 4;
"col.active_border" = "rgba(ca6702ff) rgba(ecd3a0ff) 45deg";
"col.inactive_border" = "rgba(f1dca7d9) rgba(ffe1a8d9) 45deg";
layout = "dwindle";
resize_on_border = true;
};
group = {
"col.border_active" = "rgba(ca6702ff) rgba(ecd3a0ff) 45deg";
"col.border_inactive" = "rgba(f1dca7d9) rgba(ffe1a8d9) 45deg";
"col.border_locked_active" = "rgba(ca6702ff) rgba(ecd3a0ff) 45deg";
"col.border_locked_inactive" = "rgba(f1dca7d9) rgba(ffe1a8d9) 45deg";
};
####################################################
##################################################
# /$$ /$$ /$$
#| $$ /$ | $$ | $$
#| $$ /$$$| $$ /$$$$$$ /$$$$$$ | $$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$
#| $$/$$ $$ $$ /$$__ $$ /$$__ $$| $$ /$$/ /$$_____/ /$$__ $$ |____ $$ /$$_____/ /$$__ $$
#| $$$$_ $$$$| $$ \ $$| $$ \__/| $$$$$$/ | $$$$$$ | $$ \ $$ /$$$$$$$| $$ | $$$$$$$$
#| $$$/ \ $$$| $$ | $$| $$ | $$_ $$ \____ $$| $$ | $$ /$$__ $$| $$ | $$_____/
#| $$/ \ $$| $$$$$$/| $$ | $$ \ $$ /$$$$$$$/| $$$$$$$/| $$$$$$$| $$$$$$$| $$$$$$$
#|__/ \__/ \______/ |__/ |__/ \__/|_______/ | $$____/ \_______/ \_______/ \_______/
# | $$
# | $$
# |__/
# see https://wiki.hypr.land/Configuring/Workspace-Rules/
workspace = [
"1, layout:master"
"2, layout:scrolling, layoutopt:direction:right"
"name:special, layout:scrolling"
# used for smart gaps along some windowrules
#"w[tv1], gapsout:1, gapsin:1"
#"f[1], gapsout:1, gapsin:1"
];
# █░█░█ █ █▄░█ █▀▄ █▀█ █░█░█   █▀█ █░█ █░░ █▀▀ █▀
# ▀▄▀▄▀ █ █░▀█ █▄▀ █▄█ ▀▄▀▄▀   █▀▄ █▄█ █▄▄ ██▄ ▄█
windowrule = [
"opacity 0.90 0.90, match:class ^(firefox)$"
"opacity 0.90 0.90, match:class ^(Brave-browser)$"
"opacity 0.80 0.80, match:class ^(code-oss)$"
"opacity 0.80 0.80, match:class ^(Code)$"
"opacity 0.80 0.80, match:class ^(code-url-handler)$"
"opacity 0.80 0.80, match:class ^(code-insiders-url-handler)$"
"opacity 0.75 0.75, match:class ^(kitty)$"
"opacity 0.80 0.80, match:class ^(org.kde.dolphin)$"
"opacity 0.80 0.80, float on, match:class ^(org.kde.ark)$"
"opacity 0.80 0.80, float on, match:class ^(nwg-look)$"
"opacity 0.80 0.80, float on, match:class ^(qt5ct)$"
"opacity 0.80 0.80, float on, match:class ^(qt6ct)$"
"opacity 0.80 0.80, float on, match:class ^(kvantummanager)$"
"opacity 0.80 0.70, float on, match:class ^(org.pulseaudio.pavucontrol)$"
"opacity 0.80 0.70, float on, match:class ^(blueman-manager)$"
"opacity 0.80 0.70, float on, match:class ^(nm-applet)$"
"opacity 0.80 0.70, float on, match:class ^(nm-connection-editor)$"
"opacity 0.80 0.70, float on, match:class ^(org.kde.polkit-kde-authentication-agent-1)$"
"opacity 0.80 0.70, match:class ^(polkit-gnome-authentication-agent-1)$"
"opacity 0.80 0.70, match:class ^(org.freedesktop.impl.portal.desktop.gtk)$"
"opacity 0.80 0.70, match:class ^(org.freedesktop.impl.portal.desktop.hyprland)$"
"opacity 0.70 0.70, match:class ^([Ss]team)$"
"opacity 0.70 0.70, match:class ^(steamwebhelper)$"
"opacity 0.70 0.70, match:class ^(Spotify)$"
"opacity 0.70 0.70, match:initial_title ^(Spotify Free)$"
"opacity 0.90 0.90, float on, match:class ^(com.github.rafostar.Clapper)$"
"opacity 0.80 0.80, match:class ^(com.github.tchx84.Flatseal)$"
"opacity 0.80 0.80, match:class ^(hu.kramo.Cartridges)$"
"opacity 0.80 0.80, match:class ^(com.obsproject.Studio)$"
"opacity 0.80 0.80, match:class ^(gnome-boxes)$"
"opacity 0.80 0.80, match:class ^(discord)$"
"opacity 0.80 0.80, match:class ^(WebCord)$"
"opacity 0.80 0.80, match:class ^(ArmCord)$"
"opacity 0.80 0.80, float on, match:class ^(app.drey.Warp)$"
"opacity 0.80 0.80, float on, match:class ^(net.davidotek.pupgui2)$"
"opacity 0.80 0.80, float on, match:class ^(yad)$"
"opacity 0.80 0.80, float on, match:class ^(Signal)$"
"opacity 0.80 0.80, float on, match:class ^(io.github.alainm23.planify)$"
"opacity 0.80 0.80, float on, match:class ^(io.gitlab.theevilskeleton.Upscaler)$"
"opacity 0.80 0.80, float on, match:class ^(com.github.unrud.VideoDownloader)$"
"opacity 0.80 0.80, float on, match:class ^(io.gitlab.adhami3310.Impression)$"
"opacity 0.80 0.80, float on, match:class ^(io.missioncenter.MissionCenter)$"
"opacity 0.80 0.80, match:class ^(io.github.flattool.Warehouse)$"
"float on, match:class ^(org.kde.dolphin)$, match:title ^(Progress Dialog — Dolphin)$"
"float on, match:class ^(org.kde.dolphin)$, match:title ^(Copying — Dolphin)$"
"float on, match:class ^(firefox)$, match:title ^(Picture-in-Picture)$"
"float on, match:class ^(firefox)$, match:title ^(Library)$"
"float on, match:class ^(kitty)$, match:title ^(top)$"
"float on, match:class ^(kitty)$, match:title ^(btop)$"
"float on, match:class ^(kitty)$, match:title ^(htop)$"
"float on, match:class ^(vlc)$"
"float on, match:class ^(eog)$"
"float on, size 400 225, match:class ^(custom-librewolfprofiles)$"
"float on, size 1050 200, match:class ^(custom-changeAudioOutput)$"
"float on, size 400 175, match:class ^(custom-obsidianvaults)$"
"float on, size 600 600, match:initial_class ^(custom-pomodoro)$"
"float on, size 1500 800, match:initial_class ^(custom-bottom)$"
# smart gaps/border is ugly with caelestia-shell
#"border_size 2, match:float 0, match:workspace w[tv1]"
#"rounding 1, match:float 0, match:workspace w[tv1]"
#"border_size 2, match:float 0, match:workspace f[1]"
#"rounding 1, match:float 0, match:workspace f[1]"
];
# add a float for tomato when in kitty
#"plugin:imgborders:noimgborders, tag:noborder"
layerrule = [
"blur on, ignore_alpha 0, match:namespace rofi"
"blur on, ignore_alpha 0, match:namespace notifications"
"blur on, ignore_alpha 0, match:namespace swaync-notification-window"
"blur on, ignore_alpha 0, match:namespace swaync-control-center"
"blur on, match:namespace logout_dialog"
];
};
}; };
} }
-99
View File
@@ -1,99 +0,0 @@
_: {
# for some reason perSystem can't expose pkgs-unstable so we need to expose it here
# -----------------------------------------------------
# Here are a bunch of scripts that interact with hyprland
# Some are still used. Some are broken. Some are deprecated. But I do still keep them in case I want to go back to old tools
# -----------------------------------------------------
perSystem = {pkgs, ...}: let
wallpaper1 = ../../assets/wallpaper1.jpg;
wallpaper2 = ../../assets/wallpaper2.jpg;
wallpaper3 = ../../assets/wallpaper3.jpg;
wallpaper4 = ../../assets/wallpaper4.jpg;
wallpaper5 = ../../assets/wallpaper5.jpg;
in {
# kills the app, but when it's steam or custom-pomodoro
packages.custom-dontkillsteam = pkgs.writeShellApplication {
name = "custom-dontkillsteam";
runtimeInputs = with pkgs; [
hyprland
jq
];
text = ''
class=$(hyprctl activewindow -j | jq -r ".class")
if [[ "$class" == "Steam" || "$class" == "custom-pomodoro" ]]; then
hyprctl dispatch movetoworkspacesilent special
else
hyprctl dispatch killactive ""
fi
'';
};
packages.custom-killall = pkgs.writeShellApplication {
name = "custom-killall";
runtimeInputs = [
pkgs.hyprland # for some reason pkgs-unstable doesn't work here
pkgs.jq
];
text = ''
active_workspace_id=$(hyprctl activeworkspace -j | jq -r '.id')
hyprctl clients -j |
jq -r ".[]
| select(.workspace.id==''${active_workspace_id})
| select(.focusHistoryID!=0)
| .pid" |
xargs -r kill
'';
};
packages.custom-wallpaper = pkgs.writeShellApplication {
name = "custom-wallpaper";
runtimeInputs = with pkgs; [
socat
swww
];
text = ''
handle() {
case $1 in
workspace*)
str=$1
i=$((''${#str}-1))
workspace="''${str:$i:1}"
case $workspace in
1 | 6)
swww img -t none ${wallpaper1}
;;
2 | 7)
swww img -t none ${wallpaper2}
;;
3 | 8)
swww img -t none ${wallpaper3}
;;
4 | 9)
swww img -t none ${wallpaper4}
;;
5 | 10 | 0)
swww img -t none ${wallpaper5}
;;
esac
;;
esac
}
socat -U - UNIX-CONNECT:"$XDG_RUNTIME_DIR"/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock | while read -r line; do handle "$line"; done
'';
};
packages.custom-launch = pkgs.writeShellApplication {
# used for the terminal autostart. Needs to get cleared and recall fastfetch so that the bar from oh-my-zsh get resized
# unused
name = "custom-launch";
runtimeInputs = with pkgs; [
zsh
];
text = ''
sleep 2
clear
zsh
'';
};
};
}
+81 -8
View File
@@ -1,9 +1,9 @@
{self, ...}: { {self, ...}: {
flake.nixosModules.kdrive = {pkgs-unstable, ...}: { flake.nixosModules.kdrive-laptop = {pkgs-unstable, ...}: {
environment.systemPackages = with pkgs-unstable; [ environment.systemPackages = with pkgs-unstable; [
rclone rclone
self.packages.${pkgs.system}.custom-checkKdrive self.packages.${pkgs.system}.custom-checkKdrive
self.packages.${pkgs.system}.custom-mountkdrive self.packages.${pkgs.system}.custom-mountkdrive-laptop
]; ];
# removes rclone error # removes rclone error
programs.fuse = { programs.fuse = {
@@ -11,16 +11,49 @@
enable = true; enable = true;
}; };
}; };
flake.nixosModules.kdrive-desktop = {pkgs-unstable, ...}: {
environment.systemPackages = with pkgs-unstable; [
rclone
icloudpd
self.packages.${pkgs-unstable.system}.custom-checkKdrive
self.packages.${pkgs-unstable.system}.custom-synckdrive-desktop
];
# removes rclone error
programs.fuse = {
userAllowOther = true;
enable = true;
};
systemd.user.services.kdrive-sync = {
serviceConfig = {
ExecStart = "${self.packages.${pkgs-unstable.system}.custom-synckdrive-desktop}/bin/custom-synckdrive";
Nice = 19; # lowest CPU scheduling priority
IOSchedulingClass = "idle";
IOSchedulingPriority = 7;
# Optional:
CPUWeight = 1; # minimum relative CPU share
};
};
systemd.user.timers.kdrive-sync = {
wantedBy = ["timers.target"];
timerConfig = {
OnBootSec = "10m";
OnUnitActiveSec = "1h";
};
};
};
perSystem = {pkgs, ...}: { perSystem = {pkgs, ...}: {
packages.custom-checkKdrive = pkgs.writeShellApplication { packages.custom-checkKdrive = pkgs.writeShellApplication {
name = "custom-checkKdrive"; name = "custom-checkKdrive";
runtimeInputs = with pkgs; [ runtimeInputs = with pkgs; [
rclone rclone
matrix-commander-rs curl
libnotify libnotify
]; ];
text = '' text = ''
# shellcheck disable=SC1091
source /run/agenix/ntfy
# waits for an internet connection. It pings both Google DNS and Cloudfare dns in case one of them is down # waits for an internet connection. It pings both Google DNS and Cloudfare dns in case one of them is down
until ping -c1 -W1 1.1.1.1 >/dev/null 2>&1 || \ until ping -c1 -W1 1.1.1.1 >/dev/null 2>&1 || \
ping -c1 -W1 8.8.8.8 >/dev/null 2>&1 ping -c1 -W1 8.8.8.8 >/dev/null 2>&1
@@ -40,13 +73,15 @@
else else
echo "kdrive rclone failed with error: $output" echo "kdrive rclone failed with error: $output"
notify-send "rclone kdrive failed" "$output" notify-send "rclone kdrive failed" "$output"
matrix-commander-rs --verbose -m "rclone kdrive failed.<br>Error: <pre>$output</pre><br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \ curl \
--html \ -u ":$NTFY_TOKEN" \
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU" -d "Rclone couldnt access kdrive (rclone lsd kdrive). Error: $output" \
-H "Title: Rclone kdrive" \
"$NTFY_SERVER/Alerts"
fi fi
''; '';
}; };
packages.custom-mountkdrive = pkgs.writeShellApplication { packages.custom-mountkdrive-laptop = pkgs.writeShellApplication {
name = "custom-mountkdrive"; name = "custom-mountkdrive";
runtimeInputs = with pkgs; [ runtimeInputs = with pkgs; [
rclone rclone
@@ -66,5 +101,43 @@
fi fi
''; '';
}; };
/*
Before setting up we must:
* setup the rclone remote
`rclone config` choose Webdaw and see login information in bitwarden.
* give the good permissions for the hdd
`sudo chown -R tomasr:users /home/tomasr/hdd`
* Run the bisync once completly
`rclone bisync ~/hdd/kdrive/ kdrive: --resync`
Note : only use the --resync flag once
*/
packages.custom-synckdrive-desktop = pkgs.writeShellApplication {
name = "custom-synckdrive";
runtimeInputs = with pkgs; [
rclone
libnotify
ripgrep
];
text = ''
REMOTE_NAME="kdrive"
MOUNT_POINT="/home/tomasr/hdd/kdrive"
LOGFILE="/tmp/rclone-bisync.log"
rm LOGFILE && touch LOGFILE
if rclone --config "$HOME/.config/rclone/rclone.conf" listremotes | rg "^''${REMOTE_NAME}:"; then
echo "Syncing ''${REMOTE_NAME}..."
if ! rclone --config "$HOME/.config/rclone/rclone.conf" bisync "$MOUNT_POINT" "$REMOTE_NAME:" --recover > "$LOGFILE" 2>&1; then
notify-send "rclone bisync failed" "$(cat $LOGFILE)"
echo "rclone bisync failed"
cat $LOGFILE
cp $LOGFILE "$HOME/hdd/kdrive/logs/$(date +%Y-%m-%d-%H-%M-%S).log"
fi
else
notify-send "rclone sync failed" \
"Remote ''${REMOTE_NAME} not found.\nConfigure rclone and create the dir ~/kdrive/ or comment out the exec line in hyprland.nix."
echo "Remote ''${REMOTE_NAME} not found. Configure rclone or fix in ~/nixos/modules/applications/kdrive.nix"
fi
'';
};
}; };
} }
+7
View File
@@ -0,0 +1,7 @@
_: {
flake.nixosModules.mathematics = {pkgs, ...}: {
environment.systemPackages = with pkgs; [
elan
];
};
}
+2 -4
View File
@@ -1,15 +1,13 @@
_: { _: {
flake.nixosModules.mullvad = {pkgs-unstable, ...}: { flake.nixosModules.mullvad = _: {
services.mullvad-vpn = { services.mullvad-vpn = {
enable = true; enable = true;
package = pkgs-unstable.mullvad-vpn;
}; };
}; };
flake.homeModules.mullvad = {pkgs-unstable, ...}: { flake.homeModules.mullvad = _: {
programs.mullvad-vpn = { programs.mullvad-vpn = {
# gui # gui
enable = true; enable = true;
package = pkgs-unstable.mullvad-vpn;
}; };
}; };
} }
+14 -4
View File
@@ -1,6 +1,8 @@
_: { _: {
flake.homeModules.neovim = {pkgs-unstable, ...}: { flake.homeModules.neovim = {pkgs-unstable, ...}: {
programs.neovim = { programs.neovim = {
withRuby = false;
withPython3 = false;
enable = true; enable = true;
vimAlias = false; vimAlias = false;
viAlias = false; viAlias = false;
@@ -50,6 +52,9 @@ _: {
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.nix pkgs-unstable.vimPlugins.nvim-treesitter-parsers.nix
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.printf pkgs-unstable.vimPlugins.nvim-treesitter-parsers.printf
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.python pkgs-unstable.vimPlugins.nvim-treesitter-parsers.python
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.sparql
pkgs-unstable.vimPlugins.lean-nvim
pkgs-unstable.vimPlugins.vim-ledger
pkgs-unstable.vimPlugins.telescope-nvim pkgs-unstable.vimPlugins.telescope-nvim
pkgs-unstable.vimPlugins.nvim-scrollbar pkgs-unstable.vimPlugins.nvim-scrollbar
pkgs-unstable.vimPlugins.promise-async pkgs-unstable.vimPlugins.promise-async
@@ -63,7 +68,7 @@ _: {
pkgs-unstable.vimPlugins.better-diagnostic-virtual-text pkgs-unstable.vimPlugins.better-diagnostic-virtual-text
pkgs-unstable.vimPlugins.garbage-day-nvim pkgs-unstable.vimPlugins.garbage-day-nvim
]; ];
extraLuaConfig = '' initLua = ''
local vim = vim local vim = vim
@@ -316,7 +321,7 @@ _: {
}) })
vim.lsp.config("pylsp", { vim.lsp.config("pylsp", {
cmd = { "pylsp" }, cmd = { "pylsp" },
filetypes = { "python" }, filetypes = { "python", "py" },
on_attach = on_attach, on_attach = on_attach,
settings = { settings = {
pylsp = { pylsp = {
@@ -368,7 +373,7 @@ _: {
}, },
}) })
vim.lsp.enable({ "lua_ls", "clangd", "pylsp", "texlab", "nixd", "ltex"}) vim.lsp.enable({ "lua_ls", "clangd", "pylsp", "texlab", "nixd", "ltex", "leanls"})
-- ========================= -- =========================
-- DASHBOARD -- DASHBOARD
-- ========================= -- =========================
@@ -471,7 +476,12 @@ _: {
-- ========================= -- =========================
require('lualine').setup { options = { theme = "gruvbox_dark" } } require('lualine').setup { options = { theme = "gruvbox_dark" } }
-- ==================
-- lean
-- ==================
require('lean').setup({
mappings = true,
})
--==================0 --==================0
-- Some utils -- Some utils
--================== --==================
+60
View File
@@ -0,0 +1,60 @@
{inputs, ...}: {
flake.homeModules.laptop-notewrapper = {pkgs, ...}: {
home.packages = [
inputs.notewrapper.packages.${pkgs.system}.default
];
home.file.".config/notewrapper/config.json" = {
enable = true;
force = true;
text = ''
{
"directory": ["~/kdrive/Notes/"],
"render": true,
"jumpToEndOfFileOnLaunch": true,
"editor": "neovim",
"journalRegex": ".*journal.*",
"dateEntry": "# %Y %m %d %a",
"newLineOnOpening": true,
"backup": {
"enable": false,
"directory": {
"~/Documents/Notes/": "~/kdrive/Notes/",
"~/test/": "~/backupTest/"
},
"interval": "daily",
"rsyncArgs": ["-Lqah", "--update"]
}
}
'';
};
};
flake.homeModules.desktop-notewrapper = {pkgs, ...}: {
home.packages = [
inputs.notewrapper.packages.${pkgs.system}.default
];
home.file.".config/notewrapper/config.json" = {
enable = true;
force = true;
text = ''
{
"directory": ["~/hdd/kdrive/Notes/"],
"render": true,
"jumpToEndOfFileOnLaunch": true,
"editor": "neovim",
"journalRegex": ".*journal.*",
"dateEntry": "# %Y %m %d %a",
"newLineOnOpening": true,
"backup": {
"enable": false,
"directory": {
"~/Documents/Notes/": "~/kdrive/Notes/",
"~/test/": "~/backupTest/"
},
"interval": "daily",
"rsyncArgs": ["-Lqah", "--update"]
}
}
'';
};
};
}
+10 -7
View File
@@ -3,19 +3,22 @@ _: {
programs.ssh = { programs.ssh = {
enable = true; enable = true;
enableDefaultConfig = false; # will be removed in the futur. Removes evaluation warning enableDefaultConfig = false; # will be removed in the futur. Removes evaluation warning
matchBlocks."*" = { /*
settings = {
# equivalent to the default config # equivalent to the default config
forwardAgent = false; #forwardAgent = false;
addKeysToAgent = "no"; # give errors in home-manager 26.05
compression = false; #addKeysToAgent = "no";
#compression = false;
serverAliveInterval = 0; serverAliveInterval = 0;
serverAliveCountMax = 3; serverAliveCountMax = 3;
hashKnownHosts = false; hashKnownHosts = false;
userKnownHostsFile = "~/.ssh/known_hosts"; userKnownHostsFile = "~/.ssh/known_hosts";
controlMaster = "no"; #controlMaster = "no";
controlPath = "~/.ssh/master-%r@%n:%p"; #controlPath = "~/.ssh/master-%r@%n:%p";
controlPersist = "no"; #controlPersist = "no";
}; };
*/
}; };
services.ssh-agent.enable = true; services.ssh-agent.enable = true;
home.file.".ssh/config".text = '' home.file.".ssh/config".text = ''
+8
View File
@@ -0,0 +1,8 @@
_: {
flake.homeModules.tmux = _: {
programs.tmux = {
enable = true;
clock24 = true;
};
};
}
+28
View File
@@ -1,4 +1,32 @@
_: { _: {
flake.homeModules.waybar-minimal = _: {
programs.waybar = {
enable = true;
settings = [
{
layer = "top";
modules-left = [];
modules-center = [];
modules-right = [
"battery"
"clock"
];
battery = {
format = "{capacity}% {icon}";
states = {
warning = 30;
critical = 15;
};
};
clock = {
format = "{:%H:%M}";
};
}
];
};
};
flake.homeModules.waybar = _: { flake.homeModules.waybar = _: {
# replaced by caelestia # replaced by caelestia
programs.waybar = { programs.waybar = {
+32 -7
View File
@@ -1,16 +1,41 @@
{self, ...}: { _: {
flake.homeModules.zsh-laptop = _: { flake.homeModules.zsh-laptop = _: {
programs.zsh = { programs.zsh = {
shellAliases = { shellAliases = {
snrt = "git -C ~/nixos add -A && time sudo nixos-rebuild test --flake ~/nixos/#laptop && pkill shell || true && pkill caelestia-shell || true && caelestia-shell -n > /dev/null 2>&1 & disown"; snrt = ''
snrs = "git -C ~/nixos add -A && time sudo nixos-rebuild switch --flake ~/nixos/#laptop && pkill shell || true && pkill caelestia-shell || true && caelestia-shell -n > /dev/null 2>&1 & disown"; git -C ~/nixos add -A &&
time sudo nixos-rebuild test --flake ~/nixos/#laptop &&
pkill shell || true &&
if [ ! -f ~/.cache/hypr-battery-saver ]; then
pkill caelestia-shell || true &&
caelestia-shell -n > /dev/null 2>&1 & disown
fi
'';
snrs = ''
git -C ~/nixos add -A &&
time sudo nixos-rebuild switch --flake ~/nixos/#laptop &&
pkill shell || true &&
if [ ! -f ~/.cache/hypr-battery-saver ]; then
pkill caelestia-shell || true &&
caelestia-shell -n > /dev/null 2>&1 & disown
fi
'';
}; };
}; };
}; };
flake.homeModules.zsh = {pkgs, ...}: { flake.homeModules.zsh-desktop = _: {
programs.zsh = {
shellAliases = {
snrt = "git -C ~/nixos add -A && time sudo nixos-rebuild test --flake ~/nixos/#desktop && pkill shell || true && pkill caelestia-shell || true && caelestia-shell -n > /dev/null 2>&1 & disown";
snrs = "git -C ~/nixos add -A && time sudo nixos-rebuild switch --flake ~/nixos/#desktop && pkill shell || true && pkill caelestia-shell || true && caelestia-shell -n > /dev/null 2>&1 & disown";
};
};
};
flake.homeModules.zsh = {pkgs-unstable, ...}: {
home.packages = [ home.packages = [
self.packages.${pkgs.system}.dejaManuallyDerived #self.packages.${pkgs.system}.dejaManuallyDerived
#pkgs-unstable.deja pkgs-unstable.deja
]; ];
programs.zsh = { programs.zsh = {
@@ -35,7 +60,6 @@
} }
eval "$(direnv hook zsh)" eval "$(direnv hook zsh)"
eval "$(deja init zsh)" eval "$(deja init zsh)"
export PATH="$PATH:$HOME/NoteWrapper" # some project im coding
fastfetch''\n''; fastfetch''\n'';
shellAliases = { shellAliases = {
".." = "z .."; ".." = "z ..";
@@ -64,6 +88,7 @@
nnvim = "nvim"; nnvim = "nvim";
nvvim = "nvim"; nvvim = "nvim";
nviim = "nvim"; nviim = "nvim";
hledger-ui = "puffin";
}; };
}; };
}; };
+103 -29
View File
@@ -1,9 +1,9 @@
_: { {
flake.nixosModules.battery-laptop = { self,
lib, inputs,
config, ...
... }: {
}: flake.nixosModules.battery-laptop = {pkgs, ...}:
# https://discourse.nixos.org/t/what-is-the-best-option-for-power-management/63406/2 # https://discourse.nixos.org/t/what-is-the-best-option-for-power-management/63406/2
# we just activate tlp unconditonally # we just activate tlp unconditonally
#let #let
@@ -22,7 +22,8 @@ _: {
# }; # };
# config = lib.mkIf cfg.battery.enable { # config = lib.mkIf cfg.battery.enable {
powerManagement.powertop.enable = true; # enable powertop auto tuning on startup. /*
powerManagement.powertop.enable = true; # enable powertop auto tuning on startup.
# Acording to https://community.frame.work/t/solved-keys-stick-and-repeat-after-being-released/51153/12 # Acording to https://community.frame.work/t/solved-keys-stick-and-repeat-after-being-released/51153/12
# Some powertop bug is responsable for the problem of the random keypress being stuck # Some powertop bug is responsable for the problem of the random keypress being stuck
# fix: from https://git.gabbie.blue/blue/nixconf/src/commit/2d1bc6dad4684c019b6b3e894408e76e2734806c/hosts/gabbielaptop/configuration.nix#L68 # fix: from https://git.gabbie.blue/blue/nixconf/src/commit/2d1bc6dad4684c019b6b3e894408e76e2734806c/hosts/gabbielaptop/configuration.nix#L68
@@ -31,27 +32,31 @@ _: {
# Retrigger macropad udev rules # Retrigger macropad udev rules
${lib.getExe' config.systemd.package "udevadm"} trigger -c bind -s usb -a idVendor=32ac -a idProduct=0013 ${lib.getExe' config.systemd.package "udevadm"} trigger -c bind -s usb -a idVendor=32ac -a idProduct=0013
''; '';
*/
services.system76-scheduler.settings.cfsProfiles.enable = true; # Better scheduling for CPU cycles - thanks System76!!! services.system76-scheduler.settings.cfsProfiles.enable = true; # Better scheduling for CPU cycles - thanks System76!!!
services.thermald.enable = true; # Enable thermald, the temperature management daemon. (only necessary if on Intel CPUs) services.thermald.enable = false; # Enable thermald, the temperature management daemon. (only necessary if on Intel CPUs)
services.power-profiles-daemon.enable = false; # Disable GNOMEs power management services.power-profiles-daemon.enable = true; # ppd is recommended over tlp for framework 16
services.tlp = { /*
services.tlp = {
enable = true; # Enable TLP (better than gnomes internal power manager) enable = true; # Enable TLP (better than gnomes internal power manager)
settings = { settings = {
CPU_BOOST_ON_AC = 1; CPU_BOOST_ON_AC = 1;
CPU_BOOST_ON_BAT = 1; CPU_BOOST_ON_BAT = 1;
CPU_HWP_DYN_BOOST_ON_AC = 1; CPU_HWP_DYN_BOOST_ON_AC = 1;
CPU_HWP_DYN_BOOST_ON_BAT = 1; CPU_HWP_DYN_BOOST_ON_BAT = 1;
CPU_SCALING_GOVERNOR_ON_AC = "performance"; CPU_SCALING_GOVERNOR_ON_AC = "balanced";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance"; CPU_ENERGY_PERF_POLICY_ON_AC = "balanced";
CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power"; CPU_ENERGY_PERF_POLICY_ON_BAT = "powersave";
PLATFORM_PROFILE_ON_AC = "performance"; PLATFORM_PROFILE_ON_AC = "balanced";
PLATFORM_PROFILE_ON_BAT = "balanced"; PLATFORM_PROFILE_ON_BAT = "powersave";
START_CHARGE_THRESH_BAT1 = 75; STOP_CHARGE_THRESH_BAT1 = 80;
STOP_CHARGE_THRESH_BAT1 = 85;
}; };
}; };
# }; */
environment.systemPackages = [
self.packages.${pkgs.system}.custom-performance
];
}; };
perSystem = {pkgs, ...}: let perSystem = {pkgs, ...}: let
NotifySound = ../../assets/battery_notify.mp3; NotifySound = ../../assets/battery_notify.mp3;
@@ -336,28 +341,97 @@ _: {
name = "custom-performance"; name = "custom-performance";
runtimeInputs = with pkgs; [ runtimeInputs = with pkgs; [
hyprland hyprland
gawk brightnessctl
swaynotificationcenter
self.packages.${pkgs.system}.custom-wallpaper
libnotify libnotify
inputs.caelestia-shell.packages.${pkgs.system}.default
]; ];
text = '' text = ''
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}') STATE="$HOME/.cache/hypr-battery-saver"
if [ "$HYPRGAMEMODE" = 1 ] ; then
enable() {
mkdir -p "$(dirname "$STATE")"
echo "Enabling battery saver mode..."
# Save brightness
brightnessctl get > "''${STATE}.brightness" 2>/dev/null || true
# Kill heavy UI components
pkill -f caelestia-shell || true
pkill -f caelestia || true
pkill shell || true
pkill -f custom-wallpaper || true
# Start lightweight notifications
pkill swaync || true
swaync & disown
# Start lightweight waybar
pkill waybar || true
waybar & disown
# Lower refresh rate (BIGGEST win)
hyprctl keyword monitor "eDP-1,2560x1600@60,0x0,1"
# Core performance toggles
hyprctl --batch "\ hyprctl --batch "\
keyword animations:enabled 0;\ keyword animations:enabled 0;\
keyword animation borderangle,0; \ keyword animation borderangle,0;\
keyword decoration:shadow:enabled 0;\ keyword decoration:shadow:enabled 0;\
keyword decoration:blur:enabled 0;\ keyword decoration:blur:enabled 0;\
keyword decoration:fullscreen_opacity 1;\ keyword decoration:rounding 0;\
keyword decoration:fullscreen_opacity 1;\
keyword general:gaps_in 0;\ keyword general:gaps_in 0;\
keyword general:gaps_out 0;\ keyword general:gaps_out 0;\
keyword general:border_size 1;\ keyword general:border_size 1;\
keyword decoration:rounding 0" keyword decoration:active_opacity 1;\
notify-send -u critical -t 5000 "Performance mode [ON]" keyword decoration:inactive_opacity 1;\
exit keyword misc:vfr true"
else
notify-send -u critical -t 5000 "Performance mode [OFF]" # Lower brightness
brightnessctl set 5% 2>/dev/null || true
touch "$STATE"
notify-send "Battery Saver" "Enabled"
}
disable() {
echo "Disabling battery saver mode..."
# Restore refresh rate
hyprctl keyword monitor "eDP-1,2560x1600@165,0x0,1"
# Restore Caelestia
pkill swaync || true
pkill waybar || true
caelestia shell -d >/dev/null 2>&1 &
disown
# Restart wallpaper
custom-wallpaper >/dev/null 2>&1 &
disown
# Restore full UI via reload (safe here on exit)
hyprctl reload hyprctl reload
exit 0
# Restore brightness
if [[ -f "''${STATE}.brightness" ]]; then
brightnessctl set "$(cat "''${STATE}.brightness")" 2>/dev/null || true
fi
rm -f "$STATE" "''${STATE}.brightness"
notify-send "Battery Saver" "Disabled"
}
if [[ -f "$STATE" ]]; then
disable
else
enable
fi fi
''; '';
}; };
+26 -11
View File
@@ -1,16 +1,31 @@
_: { _: let
flake.nixosModules.bootloader-laptop = { wallpaper1 = ../../assets/wallpaper1.jpg;
inputs, wallpaper2 = ../../assets/wallpaper2.jpg;
pkgs, wallpaper3 = ../../assets/wallpaper3.jpg;
... wallpaper4 = ../../assets/wallpaper4.jpg;
}: { wallpaper5 = ../../assets/wallpaper5.jpg;
# grub theme in {
boot.loader.grub = { flake.nixosModules.bootloader = _: {
theme = inputs.nixos-grub-themes.packages.${pkgs.system}.nixos; # if you want to use nixos grub theme # disable other bootloaders
boot.loader.systemd-boot.enable = false;
boot.loader.grub.enable = false;
boot.loader.limine = {
enable = true;
efiSupport = true;
maxGenerations = 128;
style = {
wallpaperStyle = "centered";
wallpapers = [
wallpaper1
wallpaper2
wallpaper3
wallpaper4
wallpaper5
];
};
}; };
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
}; };
} }
+241
View File
@@ -0,0 +1,241 @@
Note : ChatGPT helped me with the disko setup
This is the layout I'd start with. It's not fully copy-paste ready because you'll need to fill in the actual disk IDs after booting the installer, but it captures the architecture you described:
* SSD: LUKS → Btrfs
* HDD: LUKS → ext4
* One password entered at boot
* HDD unlocked using a keyfile stored on the SSD
* Suitable for a desktop host
# disko/desktop.nix
```
{
disko.devices = {
disk = {
ssd = {
# Replace with actual disk id from:
# ls -l /dev/disk/by-id
device = "/dev/disk/by-id/REPLACE_SSD_ID";
type = "disk";
content = {
type = "gpt";
partitions = {
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "cryptroot";
# You will type this password at boot.
settings.allowDiscards = true;
content = {
type = "btrfs";
extraArgs = [ "-f" ];
subvolumes = {
"@root" = {
mountpoint = "/";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@home" = {
mountpoint = "/home";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@nix" = {
mountpoint = "/nix";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@snapshots" = {
mountpoint = "/.snapshots";
};
# Keyfile storage.
# This subvolume will contain the key used
# to unlock the HDD automatically.
"@keys" = {
mountpoint = "/keys";
};
};
};
};
};
};
};
};
hdd = {
# Replace with actual disk id
device = "/dev/disk/by-id/REPLACE_HDD_ID";
type = "disk";
content = {
type = "gpt";
partitions = {
luks = {
size = "100%";
content = {
type = "luks";
name = "cryptdata";
# IMPORTANT:
# This keyfile will be created after installation.
# The SSD unlocks first.
# Then this keyfile unlocks the HDD automatically.
settings = {
keyFile = "/keys/hdd.key";
};
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/data";
};
};
};
};
};
};
};
```
};
}
A few notes:
### 1. You'll need the disk IDs
On the installer:
```bash
ls -l /dev/disk/by-id
```
Then replace:
```text
REPLACE_SSD_ID
REPLACE_HDD_ID
```
with the actual values.
---
### 2. The HDD keyfile is a second step
After installation:
```bash
sudo mkdir -p /keys
sudo chmod 700 /keys
sudo dd if=/dev/urandom of=/keys/hdd.key bs=4096 count=1
sudo chmod 000 /keys/hdd.key
```
Then add the key to the HDD LUKS container:
```bash
sudo cryptsetup luksAddKey /dev/disk/by-id/ACTUAL_HDD_PARTITION /keys/hdd.key
```
Now:
```text
boot
↓
enter SSD password
↓
SSD unlocks
↓
keyfile becomes available
↓
HDD unlocks automatically
```
One password.
---
### 3. Btrfs subvolumes
I intentionally kept it simple:
```text
/
/home
/nix
/.snapshots
```
This is a very common NixOS layout.
---
### 4. Swap
I haven't included swap because there are a few valid choices:
* swapfile on Btrfs
* swap partition inside the SSD LUKS container
* zram only
I'd probably use **zram + a small swapfile** unless you have a very specific workload.
---
### 5. Dendritic adaptation
The actual Disko definition above won't change much.
The dendritic part is mostly wrapping it in your top-level module structure, something like:
```nix
{
flake.diskoConfigurations.desktop = {
imports = [
./desktop-disko.nix
];
};
}
```
or whatever convention your repository uses.
The storage design itself remains the same.
+95
View File
@@ -0,0 +1,95 @@
_: {
flake.diskoConfigurations.desktop = _: {
disko.devices = {
disk = {
ssd = {
# Replace with actual disk id from:
# ls -l /dev/disk/by-id
device = "/dev/disk/by-id/REPLACE_SSD_ID";
type = "disk";
content = {
type = "gpt";
partitions = {
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
root = {
size = "100%";
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@root" = {
mountpoint = "/";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@home" = {
mountpoint = "/home";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@nix" = {
mountpoint = "/nix";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@snapshots" = {
mountpoint = "/.snapshots";
};
};
};
};
};
};
};
hdd = {
# Replace with actual disk id
device = "/dev/disk/by-id/REPLACE_HDD_ID";
type = "disk";
content = {
type = "gpt";
partitions = {
data = {
size = "100%";
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/data";
};
};
};
};
};
};
};
};
}
@@ -33,4 +33,53 @@ _: {
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 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;
}; };
flake.nixosModules.hardware-configuration-desktop =
# 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,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["vmd" "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "/dev/disk/by-uuid/14bcd132-b4a3-46f2-ac35-3497340de4b2";
fsType = "btrfs";
};
fileSystems."/home" = {
device = "/dev/disk/by-uuid/14bcd132-b4a3-46f2-ac35-3497340de4b2";
fsType = "btrfs";
options = ["subvol=home"];
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/14bcd132-b4a3-46f2-ac35-3497340de4b2";
fsType = "btrfs";
options = ["subvol=nix"];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/BAB4-34F6";
fsType = "vfat";
options = ["fmask=0077" "dmask=0077"];
};
swapDevices = [
{device = "/dev/disk/by-uuid/ce6f9a68-0517-4f8a-b375-66f2173efe59";}
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
};
} }
+2 -2
View File
@@ -2,8 +2,8 @@ _: {
flake.nixosModules.hardwareUtils-laptop = {pkgs, ...}: { flake.nixosModules.hardwareUtils-laptop = {pkgs, ...}: {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# used for the framework 16 laptop # used for the framework 16 laptop
framework-tool #framework-tool
framework-tool-tui #framework-tool-tui
vial # Open-source GUI and QMK fork for configuring your keyboard in real time vial # Open-source GUI and QMK fork for configuring your keyboard in real time
]; ];
}; };
+8
View File
@@ -0,0 +1,8 @@
_: {
flake.nixosModules.hdd = {
fileSystems."/home/tomasr/hdd" = {
device = "/dev/disk/by-uuid/cbe24588-e04f-4ffc-ba44-6fe6ec6d6850";
fsType = "ext4";
};
};
}
+7
View File
@@ -0,0 +1,7 @@
_: {
flake.nixosModules.nvidia = _: {
hardware.graphics.enable = true;
services.xserver.videoDrivers = ["nvidia"];
hardware.nvidia.open = true;
};
}
+10
View File
@@ -0,0 +1,10 @@
_: {
flake.nixosModules.onxyboox = {pkgs, ...}: {
services.gvfs.enable = true;
environment.systemPackages = with pkgs; [
gvfs
calibre
kdePackages.kio-extras
];
};
}
+7
View File
@@ -0,0 +1,7 @@
{self, ...}: {
flake.nixosModules.performance-desktop = {pkgs, ...}: {
environment.systemPackages = [
self.packages.${pkgs.system}.custom-performance
];
};
}
+154
View File
@@ -0,0 +1,154 @@
# Note : i should add a way to communicate, annote which commits i should cherry-pick between computers
{
inputs,
self,
...
}: {
flake.nixosConfigurations.desktop = inputs.nixpkgs.lib.nixosSystem {
#system = "x86_64-linux";
specialArgs = {
inherit (self) pkgs-unstable pkgs-master;
};
modules = with self.nixosModules; [
# important do not remove
home-manager-desktop
desktop
{nixpkgs.pkgs = self.pkgs;}
# keep this alphabetically organised
anki
audioAndMedia
autoCleanup-desktop
autoUpdate-desktop
bluetooth
bootloader
browsers
caelestia
development
documentation
disk # this only installs some disk utilities. disko will format the drives
fonts
games
hardware-configuration-desktop
hdd
hledger
hledger-desktop
hyprland
IO
kdrive-desktop # we will setup this later
latex
ly
mathematics
mullvad
networking
nixUtils
notifications
nvidia
office
#ollama
otherUtils
performance-desktop
printer
rss
udev
user
];
};
flake.homeModules.desktop = {...}: {
imports = with self.homeModules; [
inputs.caelestia-shell.homeManagerModules.default
anki
caelestia
caelestia-desktop
cursor
development
eza
fastfetch
gtk
hyprland
hyprland-desktop
kitty
librewolf
mullvad
neovim
nix-git-cherry-picker-desktop
desktop-notewrapper
oh-my-zsh
ripgrep
rofi
sbb-tui
ssh
swaync # used in performance mode
thunderbird
tomasr
tmux
vivify
waybar-minimal # used in performance mode
zoxide
zsh
zsh-desktop
];
};
flake.nixosModules.desktop = {pkgs, ...}: {
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It‘s perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "25.11"; # Did you read the comment?
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
environment.systemPackages = [
self.packages.${pkgs.system}.custom-performance
];
};
flake.nixosModules.home-manager-desktop = {pkgs, ...}: {
imports = [
inputs.home-manager.nixosModules.default # import official home-manager NixOS module
];
# Warning. Git is used in case I break everything up. It already saved me once
environment.systemPackages = [pkgs.git];
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = {
inherit (self) pkgs-unstable pkgs-master;
inherit self;
};
};
users.users.tomasr = {
isNormalUser = true;
};
home-manager.users.tomasr = self.homeModules.desktop;
};
# this is a copy of what is in laptop.nix
/*
flake.homeModules.tomasr = _: {
home.username = "tomasr";
home.homeDirectory = "/home/tomasr";
home.sessionVariables = {
EDITOR = "nvim";
TERMINAL = "kitty";
};
# Required for Home Manager
home.stateVersion = "25.11"; # match your Home Manager release
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
};
*/
}
+25 -7
View File
@@ -6,9 +6,11 @@
flake.nixosConfigurations.laptop = inputs.nixpkgs.lib.nixosSystem { flake.nixosConfigurations.laptop = inputs.nixpkgs.lib.nixosSystem {
#system = "x86_64-linux"; #system = "x86_64-linux";
specialArgs = { specialArgs = {
inherit (self) pkgs-unstable; inherit (self) pkgs-unstable pkgs-local pkgs-master;
}; };
modules = with self.nixosModules; [ modules = with self.nixosModules; [
inputs.agenix.nixosModules.default
agenix
# important do not remove # important do not remove
home-manager-laptop home-manager-laptop
laptop laptop
@@ -18,9 +20,9 @@
audioAndMedia audioAndMedia
autoCleanup-laptop autoCleanup-laptop
autoUpdate-laptop autoUpdate-laptop
battery-laptop #battery-laptop
bluetooth bluetooth
bootloader-laptop bootloader
browsers browsers
caelestia caelestia
development development
@@ -28,21 +30,28 @@
disk disk
disk-laptop disk-laptop
fonts fonts
games gitBackup
hardware-configuration-laptop hardware-configuration-laptop
hardwareUtils-laptop hardwareUtils-laptop
hledger
hledger-laptop
hyprland hyprland
IO IO
kdrive kdrive-laptop
latex latex
ly ly
mathematics
mullvad mullvad
networking networking
nixUtils-laptop
nixUtils
notifications notifications
office office
onxyboox
#ollama #ollama
otherUtils otherUtils
printer printer
rss
udev udev
user user
]; ];
@@ -52,7 +61,9 @@
inputs.caelestia-shell.homeManagerModules.default inputs.caelestia-shell.homeManagerModules.default
anki anki
caelestia caelestia
caelestia-laptop
cursor cursor
development
eza eza
fastfetch fastfetch
git git
@@ -63,14 +74,19 @@
librewolf librewolf
mullvad mullvad
neovim neovim
nix-git-cherry-picker-laptop
laptop-notewrapper
oh-my-zsh oh-my-zsh
ripgrep ripgrep
rofi rofi
sbb-tui sbb-tui
ssh ssh
swaync # used in performance mode
thunderbird thunderbird
tmux
tomasr tomasr
vivify vivify
waybar-minimal # used in performance mode
zoxide zoxide
zsh zsh
zsh-laptop zsh-laptop
@@ -101,7 +117,7 @@
useUserPackages = true; useUserPackages = true;
extraSpecialArgs = { extraSpecialArgs = {
inherit (self) pkgs-unstable; inherit (self) pkgs-unstable pkgs-local pkgs-master;
inherit self; inherit self;
}; };
}; };
@@ -116,8 +132,10 @@
home.homeDirectory = "/home/tomasr"; home.homeDirectory = "/home/tomasr";
home.sessionVariables = { home.sessionVariables = {
EDITOR = "neovim"; EDITOR = "nvim";
TERMINAL = "kitty"; TERMINAL = "kitty";
SYSTEMD_PAGER = "cat";
PAGER = "cat";
}; };
# Required for Home Manager # Required for Home Manager
+24 -19
View File
@@ -27,24 +27,29 @@ _: {
services.upower.enable = true; services.upower.enable = true;
# removes need for password for nixos-rebuild # removes need for password for nixos-rebuild
security.sudo.extraRules = [ security.sudo = {
{ extraRules = [
users = ["tomasr"]; {
commands = [ users = ["tomasr"];
{ commands = [
command = "/run/current-system/sw/bin/nixos-rebuild"; {
options = ["NOPASSWD"]; command = "/run/current-system/sw/bin/nixos-rebuild";
} options = ["NOPASSWD"];
{ }
command = "${pkgs.nixos-rebuild}/bin/nixos-rebuild"; {
options = ["NOPASSWD"]; command = "${pkgs.nixos-rebuild}/bin/nixos-rebuild";
} options = ["NOPASSWD"];
{ }
command = "${pkgs-unstable.nixos-rebuild}/bin/nixos-rebuild"; {
options = ["NOPASSWD"]; command = "${pkgs-unstable.nixos-rebuild}/bin/nixos-rebuild";
} options = ["NOPASSWD"];
]; }
} ];
]; }
];
extraConfig = ''
Defaults pwfeedback
'';
};
}; };
} }
@@ -1,18 +1,19 @@
_: { _: {
perSystem = {pkgs, ...}: { perSystem = {pkgs, ...}: {
# fzf librewolf profile selector # fzf librewolf profile selector
packages.custom-librewolfprofiles = pkgs.writeShellApplication { packages.custom-browserprofiles = pkgs.writeShellApplication {
name = "custom-librewolfprofiles"; name = "custom-browserprofiles";
runtimeInputs = with pkgs; [ runtimeInputs = with pkgs; [
zsh zsh
fzf fzf
tor-browser
]; ];
text = '' text = ''
# List of profiles # List of profiles
profiles=("work" "other" "private window") profiles=("work" "other" "private window" "tor-browser")
# Use fzf to select # Use fzf to select
selected=$(printf "%s\n" "''${profiles[@]}" | fzf --height 6 --reverse --prompt="Select LibreWolf profile:") selected=$(printf "%s\n" "''${profiles[@]}" | fzf --height 6 --reverse --prompt="Select browser profile:")
# If user cancels, exit # If user cancels, exit
[[ -z "$selected" ]] && exit 0 [[ -z "$selected" ]] && exit 0
@@ -20,10 +21,12 @@ _: {
# Launch LibreWolf detached, keeping environment # Launch LibreWolf detached, keeping environment
if [[ "$selected" == "private window" ]]; then if [[ "$selected" == "private window" ]]; then
setsid librewolf --private-window --no-remote >/dev/null 2>&1 & setsid librewolf --private-window --no-remote >/dev/null 2>&1 &
pkill -f "kitty.*Select LibreWolf profile" pkill -f "kitty.*Select browser profile"
elif [[ "$selected" == "tor-browser" ]]; then
setsid tor-browser >/dev/null 2>&1 & pkill -f "kitty.*Select browser profile"
else else
setsid librewolf -P "$selected" --no-remote >/dev/null 2>&1 & setsid librewolf -P "$selected" --no-remote >/dev/null 2>&1 &
pkill -f "kitty.*Select LibreWolf profile" pkill -f "kitty.*Select browser profile"
fi fi
# Exit the kitty terminal after selection # Exit the kitty terminal after selection
@@ -1,44 +0,0 @@
_: {
perSystem = {
pkgs,
pkgs-unstable,
...
}: {
packages.sbb-tuiManuallyDerived = pkgs-unstable.buildGoModule (finalAttrs: {
pname = "sbb-tui";
version = "1.14.2";
__structuredAttrs = true;
src = pkgs.fetchFromGitHub {
owner = "Necrom4";
repo = "sbb-tui";
tag = "v${finalAttrs.version}";
hash = pkgs.lib.fakeHash;
};
vendorHash = "sha256-K4DOu3rfSlKAa5JNKCzWWpnWZlXXxtN5Po7p1Spqe1w=";
ldflags = [
"-s"
"-w"
"-X main.version=${finalAttrs.version}"
];
allowGoReference = true;
doCheck = true;
nativeCheckInputs = [pkgs.versionCheckHook];
passthru.updateScript = pkgs.nix-update-script {};
meta = {
description = "TUI client for Switzerland's public transport timetables, inspired by SBB/CFF/FFS app";
homepage = "https://github.com/Necrom4/sbb-tui";
license = pkgs.lib.licenses.mit;
platforms = pkgs.lib.platforms.unix;
maintainers = with pkgs.lib.maintainers; [tomasrivera];
mainProgram = "sbb-tui";
};
});
};
}
+1
View File
@@ -3,6 +3,7 @@
imports = [ imports = [
# adds home-manager options to flake-parts # adds home-manager options to flake-parts
inputs.home-manager.flakeModules.home-manager inputs.home-manager.flakeModules.home-manager
inputs.disko.flakeModules.default
]; ];
config.systems = [ config.systems = [
-8
View File
@@ -1,8 +0,0 @@
{
systems = [
"x86_64-linux"
#"aarch64-linux"
#"x86_64-darwin"
#"aarch64-darwin"
];
}
+17
View File
@@ -0,0 +1,17 @@
{inputs, ...}: {
flake.nixosModules.agenix = {pkgs, ...}: {
environment.systemPackages = [
inputs.agenix.packages.${pkgs.system}.default
pkgs.age
];
age.identityPaths = [
"/etc/ssh/ssh_host_ed25519_key"
];
age.secrets.ntfy = {
file = ../../secrets/ntfy.age;
owner = "tomasr";
group = "users";
mode = "0400";
};
};
}
+2
View File
@@ -19,6 +19,8 @@
self.packages.${pkgs.system}.custom-changeAudioOutput self.packages.${pkgs.system}.custom-changeAudioOutput
kdePackages.okular kdePackages.okular
kdePackages.dolphin kdePackages.dolphin
kdePackages.dolphin-plugins
kdePackages.ark
pulseaudio # sound server pulseaudio # sound server
playerctl # controls media player playerctl # controls media player
pavucontrol # PulseAudio Volume Control pavucontrol # PulseAudio Volume Control
+161 -9
View File
@@ -2,8 +2,12 @@
flake.nixosModules.autoCleanup-laptop = { flake.nixosModules.autoCleanup-laptop = {
pkgs, pkgs,
pkgs-unstable, pkgs-unstable,
config,
... ...
}: { }: {
age.secrets.ntfy = {
file = ../../secrets/ntfy.age;
};
# Ensure your script is available system-wide # Ensure your script is available system-wide
environment.systemPackages = [ environment.systemPackages = [
self.packages.${pkgs.system}.custom-cleanNix-laptop self.packages.${pkgs.system}.custom-cleanNix-laptop
@@ -17,6 +21,68 @@
description = "NixOS configuration auto cleanup"; description = "NixOS configuration auto cleanup";
serviceConfig = { serviceConfig = {
Environment = [
"NTFY_SECRET=${config.age.secrets.ntfy.path}"
];
Type = "oneshot";
ExecStart = "/run/current-system/sw/bin/custom-cleanNix";
# safety for long rebuilds
TimeoutStartSec = "45min";
TimeoutStopSec = "10min";
# avoid overlap
RemainAfterExit = true;
# tweaks that should make the system run normally during the rebuilds
Nice = 10;
IOSchedulingClass = "best-effort";
IOSchedulingPriority = 7;
};
};
# Systemd USER timer
systemd.user.timers.custom-cleanNix = {
wantedBy = ["timers.target"];
timerConfig = {
OnCalendar = "Sat *-*-* 20:00:00"; # runs saturday night. If for whatever reason something breaks. I have whole sunday to fix it.
Persistent = true; # if it happens during shutted down
# avoids thundering herd on boot
RandomizedDelaySec = "2h";
};
};
};
## Desktop
flake.nixosModules.autoCleanup-desktop = {
pkgs,
pkgs-unstable,
config,
...
}: {
age.secrets.ntfy = {
file = ../../secrets/ntfy.age;
};
# Ensure your script is available system-wide
environment.systemPackages = [
self.packages.${pkgs.system}.custom-cleanNix-desktop
pkgs-unstable.statix
];
users.users.tomasr = {
linger = true; # lingering is required
};
systemd.user.services.custom-cleanNix = {
description = "NixOS configuration auto cleanup";
serviceConfig = {
Environment = [
"NTFY_SECRET=${config.age.secrets.ntfy.path}"
];
Type = "oneshot"; Type = "oneshot";
ExecStart = "/run/current-system/sw/bin/custom-cleanNix"; ExecStart = "/run/current-system/sw/bin/custom-cleanNix";
@@ -56,14 +122,18 @@
runtimeInputs = with pkgs; [ runtimeInputs = with pkgs; [
git git
nixos-rebuild nixos-rebuild
matrix-commander-rs curl
libnotify libnotify
alejandra alejandra
deadnix deadnix
statix
]; ];
text = '' text = ''
set -e set -ex
# shellcheck disable=SC1090
source "$NTFY_SECRET"
FLAKE_DIR="/home/tomasr/nixos" FLAKE_DIR="/home/tomasr/nixos"
FLAKE="$FLAKE_DIR#laptop" FLAKE="$FLAKE_DIR#laptop"
@@ -87,7 +157,7 @@
alejandra "$FLAKE_DIR" # formats the config alejandra "$FLAKE_DIR" # formats the config
echo "--------------------------------------------------------------" echo "--------------------------------------------------------------"
if sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule if /run/wrappers/bin/sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
if ! git -C "$FLAKE_DIR" diff --quiet HEAD; then if ! git -C "$FLAKE_DIR" diff --quiet HEAD; then
git -C "$FLAKE_DIR" add -A git -C "$FLAKE_DIR" add -A
@@ -96,9 +166,11 @@
notify-send "Nix auto cleanup" "Everything OK" notify-send "Nix auto cleanup" "Everything OK"
matrix-commander-rs --verbose -m "Nix auto cleanup. Everything OK.<br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \ curl \
--html \ -u ":$NTFY_TOKEN" \
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU" -d "Everything OK" \
-H "Title: Laptop Nix auto cleanup" \
"$NTFY_SERVER/Alerts"
else else
notify-send "Nix auto cleanup" "No changes" notify-send "Nix auto cleanup" "No changes"
git -C "$FLAKE_DIR" push git -C "$FLAKE_DIR" push
@@ -109,9 +181,89 @@
notify-send -u critical "Nix auto cleanup" "FAILED" notify-send -u critical "Nix auto cleanup" "FAILED"
matrix-commander-rs --verbose -m "Nix auto cleanup failed.<br>Error: <pre>$ERROR_MSG</pre><br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \ curl \
--html \ -u ":$NTFY_TOKEN" \
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU" -d "Nix auto cleanup failed. Error: $ERROR_MSG" \
-H "Title: Laptop Nix auto cleanup" \
"$NTFY_SERVER/Alerts"
git -C "$FLAKE_DIR" reset --hard "pre-cleanup-$TIME"
fi
git -C "$FLAKE_DIR" tag -d "pre-cleanup-$TIME" # removes the tag
rm -f "$ERROR_FILE"
'';
};
packages.custom-cleanNix-desktop = pkgs.writeShellApplication {
name = "custom-cleanNix";
runtimeInputs = with pkgs; [
git
nixos-rebuild
curl
libnotify
alejandra
deadnix
statix
];
text = ''
set -ex
# shellcheck disable=SC1090
source "$NTFY_SECRET"
FLAKE_DIR="/home/tomasr/nixos"
FLAKE="$FLAKE_DIR#desktop"
TIME=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
ERROR_FILE=$(mktemp)
# snapshot current state
git -C "$FLAKE_DIR" add -A
git -C "$FLAKE_DIR" commit --allow-empty -m "snapshot pre-cleanup-$TIME"
git -C "$FLAKE_DIR" tag "pre-cleanup-$TIME" HEAD
# the echos are to separate what each one is doing. Just for curiosity
echo "deadnix scans your Nix code and removes or reports unused (dead) variables and bindings"
deadnix --edit "$FLAKE_DIR" # removes unused code
echo "--------------------------------------------------------------"
echo "statix lints your Nix code to find stylistic issues, bad patterns, and potential mistakes."
statix fix "$FLAKE_DIR" # check other linting issues
echo "--------------------------------------------------------------"
echo "alejandra formats your Nix code consistently according to a strict, opinionated style."
alejandra "$FLAKE_DIR" # formats the config
echo "--------------------------------------------------------------"
if /run/wrappers/bin/sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
if ! git -C "$FLAKE_DIR" diff --quiet HEAD; then
git -C "$FLAKE_DIR" add -A
git -C "$FLAKE_DIR" commit -m "Auto: cleanup-$TIME"
git -C "$FLAKE_DIR" push
notify-send "Nix auto cleanup" "Everything OK"
curl \
-u ":$NTFY_TOKEN" \
-d "Everything OK" \
-H "Title: Desktop Nix auto cleanup" \
"$NTFY_SERVER/Alerts"
else
notify-send "Nix auto cleanup" "No changes"
git -C "$FLAKE_DIR" push
fi
else
ERROR_MSG=$(cat "$ERROR_FILE")
notify-send -u critical "Nix auto cleanup" "FAILED"
curl \
-u ":$NTFY_TOKEN" \
-d "Nix auto cleanup failed. Error: $ERROR_MSG" \
-H "Title: Desktop Nix auto cleanup" \
"$NTFY_SERVER/Alerts"
git -C "$FLAKE_DIR" reset --hard "pre-cleanup-$TIME" git -C "$FLAKE_DIR" reset --hard "pre-cleanup-$TIME"
fi fi
+154 -9
View File
@@ -1,5 +1,12 @@
{self, ...}: { {self, ...}: {
flake.nixosModules.autoUpdate-laptop = {pkgs, ...}: { flake.nixosModules.autoUpdate-laptop = {
pkgs,
config,
...
}: {
age.secrets.ntfy = {
file = ../../secrets/ntfy.age;
};
# Ensure your script is available system-wide # Ensure your script is available system-wide
environment.systemPackages = [ environment.systemPackages = [
self.packages.${pkgs.system}.custom-autoupdate-laptop self.packages.${pkgs.system}.custom-autoupdate-laptop
@@ -12,6 +19,66 @@
description = "NixOS flake auto update"; description = "NixOS flake auto update";
serviceConfig = { serviceConfig = {
Environment = [
"NTFY_SECRET=${config.age.secrets.ntfy.path}"
];
Type = "oneshot";
ExecStart = "/run/current-system/sw/bin/custom-autoupdate";
# safety for long rebuilds
TimeoutStartSec = "45min";
TimeoutStopSec = "10min";
# avoid overlap
RemainAfterExit = true;
# tweaks that should make the system run normally during the rebuilds
Nice = 10;
IOSchedulingClass = "best-effort";
IOSchedulingPriority = 7;
};
};
# Systemd USER timer
systemd.user.timers.custom-autoupdate = {
wantedBy = ["timers.target"];
timerConfig = {
OnCalendar = "Fri *-*-* 20:00:00"; # runs friday night. If for whatever reason something breaks. I have whole week-end to fix it.
Persistent = true; # if it happens during shutted down
# avoids thundering herd on boot
RandomizedDelaySec = "2h";
};
};
};
## desktop
flake.nixosModules.autoUpdate-desktop = {
pkgs,
config,
...
}: {
age.secrets.ntfy = {
file = ../../secrets/ntfy.age;
};
# Ensure your script is available system-wide
environment.systemPackages = [
self.packages.${pkgs.system}.custom-autoupdate-desktop
];
users.users.tomasr = {
linger = true; # lingering is required
};
systemd.user.services.custom-autoupdate = {
description = "NixOS flake auto update";
serviceConfig = {
Environment = [
"NTFY_SECRET=${config.age.secrets.ntfy.path}"
];
Type = "oneshot"; Type = "oneshot";
ExecStart = "/run/current-system/sw/bin/custom-autoupdate"; ExecStart = "/run/current-system/sw/bin/custom-autoupdate";
@@ -51,11 +118,14 @@
runtimeInputs = with pkgs; [ runtimeInputs = with pkgs; [
git git
nixos-rebuild nixos-rebuild
matrix-commander-rs curl
libnotify libnotify
nix
]; ];
text = '' text = ''
# shellcheck disable=SC1090
source "$NTFY_SECRET"
set -e set -e
FLAKE_DIR="/home/tomasr/nixos" FLAKE_DIR="/home/tomasr/nixos"
@@ -72,7 +142,7 @@
# update lock only # update lock only
nix flake update --flake "$FLAKE_DIR" nix flake update --flake "$FLAKE_DIR"
if sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule if /run/wrappers/bin/sudo ${pkgs.nixos-rebuild}/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
if ! git -C "$FLAKE_DIR" diff --quiet -- flake.lock; then if ! git -C "$FLAKE_DIR" diff --quiet -- flake.lock; then
git -C "$FLAKE_DIR" add flake.lock git -C "$FLAKE_DIR" add flake.lock
@@ -81,9 +151,11 @@
notify-send "Flake autoupdate" "Rebuild OK" notify-send "Flake autoupdate" "Rebuild OK"
matrix-commander-rs --verbose -m "Flake rebuild succesfull.<br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \ curl \
--html \ -u ":$NTFY_TOKEN" \
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU" -d "Laptop Flake rebuild successful" \
-H "Title: Flake autoupdate" \
"$NTFY_SERVER/Alerts"
else else
notify-send "Flake autoupdate" "No changes" notify-send "Flake autoupdate" "No changes"
git -C "$FLAKE_DIR" push git -C "$FLAKE_DIR" push
@@ -94,9 +166,82 @@
notify-send -u critical "Flake autoupdate" "FAILED" notify-send -u critical "Flake autoupdate" "FAILED"
matrix-commander-rs --verbose -m "Flake rebuild failed.<br>Error: <pre>$ERROR_MSG</pre><br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \ curl \
--html \ -u ":$NTFY_TOKEN" \
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU" -d "Laptop Flake rebuild failed. Error: $ERROR_MSG" \
-H "Title: Flake autoupdate FAILED" \
-H "Priority: urgent" \
"$NTFY_SERVER/Alerts"
git -C "$FLAKE_DIR" reset --hard "pre-autoupdate-$TIME"
fi
git -C "$FLAKE_DIR" tag -d "pre-autoupdate-$TIME" # removes the tag
rm -f "$ERROR_FILE"
'';
};
packages.custom-autoupdate-desktop = pkgs.writeShellApplication {
name = "custom-autoupdate";
runtimeInputs = with pkgs; [
git
nixos-rebuild
libnotify
curl
nix
];
text = ''
# shellcheck disable=SC1090
source "$NTFY_SECRET"
set -e
FLAKE_DIR="/home/tomasr/nixos"
FLAKE="$FLAKE_DIR#desktop"
TIME=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
ERROR_FILE=$(mktemp)
# snapshot current state
git -C "$FLAKE_DIR" add -A
git -C "$FLAKE_DIR" commit --allow-empty -m "snapshot pre-autoupdate-$TIME"
git -C "$FLAKE_DIR" tag "pre-autoupdate-$TIME" HEAD
# update lock only
nix flake update --flake "$FLAKE_DIR"
if /run/wrappers/bin/sudo /run/current-system/sw/bin/nixos-rebuild switch --flake "$FLAKE" 2> "$ERROR_FILE"; then # use /run/.../bin/ uses the sudoless rule
if ! git -C "$FLAKE_DIR" diff --quiet -- flake.lock; then
git -C "$FLAKE_DIR" add flake.lock
git -C "$FLAKE_DIR" commit -m "flake.lock: autoupdate-$TIME"
git -C "$FLAKE_DIR" push
notify-send "Flake autoupdate" "Rebuild OK"
curl \
-u ":$NTFY_TOKEN" \
-d "Flake rebuild successful" \
-H "Title: Desktop Flake autoupdate" \
"$NTFY_SERVER/Alerts"
else
notify-send "Flake autoupdate" "No changes"
git -C "$FLAKE_DIR" push
fi
else
ERROR_MSG=$(cat "$ERROR_FILE")
notify-send -u critical "Flake autoupdate" "FAILED"
curl \
-u ":$NTFY_TOKEN" \
-d "Flake rebuild failed. Error: $ERROR_MSG" \
-H "Title: Desktop Flake autoupdate FAILED" \
-H "Priority: urgent" \
"$NTFY_SERVER/Alerts"
git -C "$FLAKE_DIR" reset --hard "pre-autoupdate-$TIME" git -C "$FLAKE_DIR" reset --hard "pre-autoupdate-$TIME"
fi fi
+20
View File
@@ -0,0 +1,20 @@
_: {
flake.nixosModules.hledger = {pkgs, ...}: {
environment.systemPackages = with pkgs; [
hledger
hledger-web
asciinema # used for some hledger demos
puffin
];
};
flake.nixosModules.hledger-laptop = _: {
environment.variables = {
LEDGER_FILE = "/home/tomasr/kdrive/Budget/hledger.journal";
};
};
flake.nixosModules.hledger-desktop = _: {
environment.variables = {
LEDGER_FILE = "/home/tomasr/hdd/kdrive/Budget/hledger.journal";
};
};
}
@@ -2,44 +2,27 @@
flake.nixosModules.notifications = {pkgs, ...}: { flake.nixosModules.notifications = {pkgs, ...}: {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
libnotify # Library that sends desktop notifications to a notification daemon libnotify # Library that sends desktop notifications to a notification daemon
socat # Utility for bidirectional data transfer between two independent data channels (used to communicate between hyprland and swww to change wallpapers dinamically) socat # Utility for bidirectional data transfer between two independent data channels (used to communicate between hyprland and awww to change wallpapers dinamically)
matrix-commander-rs # matrix client used to send notifications from scripts to my phone
# battery notifications # battery notifications
self.packages.${pkgs.system}.custom-batterynotify self.packages.${pkgs.system}.custom-batterynotify
self.packages.${pkgs.system}.custom-batterywarning self.packages.${pkgs.system}.custom-batterywarning
# checks if matrix-commander-rs is installed and logged in
self.packages.${pkgs.system}.custom-checkMatrix
self.packages.${pkgs.system}.custom-gitnotify # checks if git is set up self.packages.${pkgs.system}.custom-gitnotify # checks if git is set up
self.packages.${pkgs.system}.custom-checkKdrive # check if kdrive is set up with rclone self.packages.${pkgs.system}.custom-checkKdrive # check if kdrive is set up with rclone
zoom-us
]; ];
}; };
perSystem = {pkgs, ...}: { perSystem = {pkgs, ...}: {
packages.custom-checkMatrix = pkgs.writeShellApplication {
name = "custom-checkMatrix";
runtimeInputs = with pkgs; [
matrix-commander-rs
libnotify
];
text = ''
expected="@totorile1:unredacted.org"
current="$(matrix-commander-rs --whoami | tr -d '\n')"
if [ "$current" != "$expected" ]; then
notify-send "matrix-commander-rs" \
"You are not logged in as @totorile1:unredacted.org\nLog:\n$current"
fi
'';
};
packages.custom-gitnotify = pkgs.writeShellApplication { packages.custom-gitnotify = pkgs.writeShellApplication {
name = "custom-gitnotify"; name = "custom-gitnotify";
runtimeInputs = with pkgs; [ runtimeInputs = with pkgs; [
git git
libnotify libnotify
curl
]; ];
text = '' text = ''
# shellcheck disable=SC1091
source /run/agenix/ntfy
# Check if git is installed # Check if git is installed
if ! command -v git >/dev/null 2>&1; then if ! command -v git >/dev/null 2>&1; then
exit 0 exit 0
@@ -52,9 +35,10 @@
notify-send \ notify-send \
"Git not configured" \ "Git not configured" \
"Set your identity\n or remove this warning by removing the custom-gitnotify line in\n ~/nixos/modules/applications/hyprland.nix" "Set your identity\n or remove this warning by removing the custom-gitnotify line in\n ~/nixos/modules/applications/hyprland.nix"
matrix-commander-rs --verbose -m "Git not configured.<br>Set your identify or remove this warning by removing the custom-gitnotify in ~/nixos/modules/applications/hyprland.nix<br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \ curl \
--html \ -u ":$NTFY_TOKEN" \
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU" -d "Git not configured" \
"$NTFY_SERVER/Alerts"
fi fi
''; '';
}; };
+34 -2
View File
@@ -1,4 +1,4 @@
_: { {inputs, ...}: {
flake.nixosModules.development = { flake.nixosModules.development = {
pkgs, pkgs,
pkgs-unstable, pkgs-unstable,
@@ -17,19 +17,51 @@ _: {
])) ]))
python313Packages.pygments # used for ccat (comment of colorize plugin from oh-my-zsh) python313Packages.pygments # used for ccat (comment of colorize plugin from oh-my-zsh)
pkg-config pkg-config
nixpkgs-review
gdb gdb
raylib raylib
glfw # raylib and some dependecies glfw # raylib and some dependecies
gnumake gnumake
go go
direnv direnv
git
gh
cling # c interpreter used for coding cling # c interpreter used for coding
# lsp # lsp
clang-tools clang-tools
python311Packages.python-lsp-server python314Packages.python-lsp-server
ltex-ls-plus ltex-ls-plus
pylint pylint
black black
gnupg
pinentry-curses
inputs.nixpkgs-notifier.packages.${pkgs.system}.default
inputs.patent.packages.${pkgs.system}.default
]; ];
}; };
flake.homeModules.development = _: {
home.file.".config/nixpkgs-notifier/config.json" = {
enable = true;
text = ''
{
"configTime": 3600,
"configFetchTime": 1,
"localNotify": true,
"matrix": {
"enable": false,
"room": "!BXRRokBmEdNOyYdfOF:matrix.org",
"ping": true,
"userPing": "@notificationbot_0000",
"userPingServer": "matrix.org"
},
"ntfy": {
"enable": true,
"auth": ":$NTFY_TOKEN",
"server": "$NTFY_SERVER",
"topic": "Alerts"
}
}
'';
};
};
} }
+1 -1
View File
@@ -3,7 +3,7 @@
in { in {
flake.nixosModules.documentation = {pkgs, ...}: { flake.nixosModules.documentation = {pkgs, ...}: {
# unfortunatly this adds a lot of computation when nix rebuilds # unfortunatly this adds a lot of computation when nix rebuilds
documentation.man.generateCaches = true; # used for the man script documentation.man.cache.enable = true; # used for the man script
environment.pathsToLink = [ environment.pathsToLink = [
# see https://wiki.nixos.org/wiki/Documentation_Gaps#How_do_manpages_work?_Or:_environment.pathsToLink_and_buildEnv # see https://wiki.nixos.org/wiki/Documentation_Gaps#How_do_manpages_work?_Or:_environment.pathsToLink_and_buildEnv
+119
View File
@@ -0,0 +1,119 @@
{self, ...}: {
flake.nixosModules.gitBackup = {
pkgs,
config,
...
}: {
age.secrets.ntfy = {
file = ../../secrets/ntfy.age;
};
environment.systemPackages = [
self.packages.${pkgs.system}.custom-gitBackup
];
systemd.user.services.custom-gitBackup = {
description = "Backup selected git repos";
serviceConfig = {
Type = "oneshot";
Environment = [
"NTFY_SECRET=${config.age.secrets.ntfy.path}"
];
ExecStart = "/run/current-system/sw/bin/custom-gitBackup";
TimeoutStartSec = "45min";
TimeoutStopSec = "10min";
RemainAfterExit = true;
Nice = 10;
IOSchedulingClass = "best-effort";
IOSchedulingPriority = 7;
};
};
# Systemd USER timer
systemd.user.timers.custom-gitBackup = {
wantedBy = ["timers.target"];
timerConfig = {
OnCalendar = "Thu *-*-* 12:00:00";
Persistent = true; # if it happens during shutted down
RandomizedDelaySec = "20min";
};
};
};
perSystem = {pkgs, ...}: {
packages.custom-gitBackup = pkgs.writeShellApplication {
name = "custom-gitBackup";
runtimeInputs = with pkgs; [
rsync
curl
libnotify
self.packages.${pkgs.system}.custom-checkKdrive
];
text = ''
# shellcheck disable=SC1090
source "$NTFY_SECRET"
# checks if kdrive is available
custom-checkKdrive
REPOS=(
"https://github.com/tomasriveral/nixos.git"
"https://github.com/tomasriveral/notewrapper.git"
"https://github.com/tomasriveral/fractal-cli.git"
"https://github.com/tomasriveral/boids.git"
"https://github.com/tomasriveral/nixpkgs-notifier.git"
"https://github.com/tomasriveral/Nix-Git-Cherry-Picker.git"
"https://github.com/tomasriveral/ReSSPublica.git"
)
LOCAL_BACKUP_DIR="$HOME/.gitBackups"
CLOUD_DIR="$HOME/kdrive/Code/gitBackups"
# Create backup directories if they don't exist
mkdir -p "$LOCAL_BACKUP_DIR"
mkdir -p "$CLOUD_DIR"
notify_error() {
local message="$1"
notify-send "Git Backup Failed" "$message"
curl \
-u ":$NTFY_TOKEN" \
-d "Git backup failed. Error: $message" \
-H "Title: Git Backup" \
"$NTFY_SERVER/Alerts"
}
for REPO in "''${REPOS[@]}"; do
# Extract repo name (without .git)
REPO_NAME=$(basename "$REPO" .git)
LOCAL_REPO_PATH="$LOCAL_BACKUP_DIR/$REPO_NAME.git"
if [ ! -d "$LOCAL_REPO_PATH" ]; then
# Clone mirror if it doesn't exist
echo "Cloning $REPO..."
git clone --mirror "$REPO" "$LOCAL_REPO_PATH" || { notify_error "Failed to clone $REPO"; continue; }
else
# Update existing mirror
echo "Updating $REPO..."
cd "$LOCAL_REPO_PATH" || { notify_error "Cannot enter $LOCAL_REPO_PATH"; continue; }
git remote update || { notify_error "Failed to update $REPO"; continue; }
fi
# Rsync to cloud directory (only changes, preserve permissions)
echo "Syncing $REPO_NAME to cloud..."
rsync -a --delete "$LOCAL_REPO_PATH/" "$CLOUD_DIR/$REPO_NAME/" || { notify_error "Failed to rsync $REPO_NAME"; continue; }
done
echo "All backups completed."
'';
};
};
}
+9 -1
View File
@@ -16,7 +16,15 @@ _: {
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
# Enable the OpenSSH daemon. # Enable the OpenSSH daemon.
# services.openssh.enable = true; services.openssh = {
enable = true;
hostKeys = [
{
path = "/etc/ssh/ssh_host_ed25519_key";
type = "ed25519";
}
];
};
# Open ports in the firewall. # Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ]; # networking.firewall.allowedTCPPorts = [ ... ];
+34
View File
@@ -0,0 +1,34 @@
{inputs, ...}: {
flake.homeModules.nix-git-cherry-picker-laptop = {pkgs, ...}: {
home.packages = [
inputs.nix-git-cherry-picker.packages.${pkgs.system}.default
];
home.file.".config/nix-git-cherry-picker/config.json" = {
enable = true;
text = ''
{
"localBranch": "laptop",
"remoteBranch": "desktop",
"nixConfigPath": "/home/tomasr/nixos/"
}
'';
force = true;
};
};
flake.homeModules.nix-git-cherry-picker-desktop = {pkgs, ...}: {
home.packages = [
inputs.nix-git-cherry-picker.packages.${pkgs.system}.default
];
home.file.".config/nix-git-cherry-picker/config.json" = {
enable = true;
text = ''
{
"localBranch": "desktop",
"remoteBranch": "laptop",
"nixConfigPath": "/home/tomasr/nixos/"
}
'';
force = true;
};
};
}
+15 -2
View File
@@ -1,4 +1,8 @@
{inputs, ...}: { {
inputs,
self,
...
}: {
flake.nixosModules.nixUtils-laptop = _: { flake.nixosModules.nixUtils-laptop = _: {
# nixpkgs-review crashed my laptop multiple times. We must reduce how much ressources it can take. # nixpkgs-review crashed my laptop multiple times. We must reduce how much ressources it can take.
# for reference, my laptop is a 12 core ryzen 7 # for reference, my laptop is a 12 core ryzen 7
@@ -6,10 +10,18 @@
nix.settings.cores = 6; nix.settings.cores = 6;
}; };
flake.nixosModules.nixUtils = {pkgs-unstable, ...}: { flake.nixosModules.nixUtils = {pkgs-unstable, ...}: {
# Optimise the nix store
nix.optimise = {
automatic = true;
persistent = true;
randomizedDelaySec = "30min";
dates = "Thu *-*-* 16:00:00";
};
# Garbage collector of generations # Garbage collector of generations
nix.gc = { nix.gc = {
automatic = true; automatic = true;
dates = "weekly"; dates = "Wed *-*-* 16:00:00";
persistent = true;
options = "--delete-older-than 7d"; # every week delete generations older than a month options = "--delete-older-than 7d"; # every week delete generations older than a month
}; };
@@ -32,6 +44,7 @@
vimPluginsUpdater # used for building plugins vimPluginsUpdater # used for building plugins
nix-index nix-index
statix statix
self.packages.${pkgs-unstable.system}.custom-trimmer
]; ];
}; };
perSystem = {pkgs, ...}: { perSystem = {pkgs, ...}: {
+6
View File
@@ -3,6 +3,12 @@ _: {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
libreoffice libreoffice
birdtray birdtray
kdePackages.korganizer
#needed for korganizer
kdePackages.akonadi
kdePackages.akonadi-calendar
kdePackages.akonadi-calendar-tools
]; ];
programs.kde-pim.kontact = true; # needed for korganizer
}; };
} }
+3 -6
View File
@@ -1,11 +1,7 @@
{self, ...}: { {self, ...}: {
flake.nixosModules.otherUtils = flake.nixosModules.otherUtils =
# try to keep packages here at a minium. Preferably use a dedicated file # try to keep packages here at a minium. Preferably use a dedicated file
{ {pkgs, ...}: {
pkgs,
pkgs-unstable,
...
}: {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
gnome-calculator gnome-calculator
snapshot snapshot
@@ -22,7 +18,8 @@
usbutils # used for lsusb usbutils # used for lsusb
self.packages.${pkgs.system}.custom-tomato self.packages.${pkgs.system}.custom-tomato
self.packages.${pkgs.system}.custom-syllabes self.packages.${pkgs.system}.custom-syllabes
pkgs-unstable.bitwarden-desktop # Electron 39 EOL. https://github.com/bitwarden/clients/pull/20448 should move it to 41. For the moment use the browser extension
#pkgs-unstable.bitwarden-desktop
fluffychat # matrix client fluffychat # matrix client
]; ];
}; };
+7
View File
@@ -0,0 +1,7 @@
_: {
flake.nixosModules.rss = {pkgs, ...}: {
environment.systemPackages = with pkgs; [
newsflash
];
};
}
+1
View File
@@ -0,0 +1 @@
Migrating from hyprlang to lua is really difficult with home-manager. I tried to do it, but a some point half my keybinds stopped working and the nix language made everything much more difficult to debug. So what we will do is have a hyprland.lua which will import a host.lua (for laptop/desktop specific configuration). Both of them will be copied by home-manager. For the migration from .conf to .lua we will use some publicly available [website](https://eiontusk.github.io/hyprlang2lua/).
+299
View File
@@ -0,0 +1,299 @@
exec-once = /nix/store/8kih8alkk4qzgjchg5501r1c3a8a71aw-dbus-1.16.2/bin/dbus-update-activation-environment --systemd DISPLAY HYPRLAND_INSTANCE_SIGNATURE WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE && systemctl --user stop hyprland-session.target && systemctl --user start hyprland-session.target
$browser=kitty --class "custom-browserprofiles" --name "Select browser profile" --hold custom-browserprofiles
$editor=nvim
$file=dolphin
$mod=SUPER
$notes=kitty --class "custom-obsidianvaults" --name "Select Obsidian vault" --hold custom-obsidianvaults
$term=kitty
animations {
bezier=wind, 0.05, 0.9, 0.1, 1.05
bezier=winIn, 0.1, 1.1, 0.1, 1.1
bezier=winOut, 0.3, -0.3, 0, 1
bezier=liner, 1, 1, 1, 1
animation=windows, 1, 6, wind, slide
animation=windowsIn, 1, 6, winIn, slide
animation=windowsOut, 1, 5, winOut, slide
animation=windowsMove, 1, 5, wind, slide
animation=border, 1, 1, liner
animation=borderangle, 1, 30, liner, loop
animation=fade, 1, 10, default
animation=workspaces, 1, 5, wind
enabled=true
}
bind=$mod, W, togglefloating
bind=$mod, G, togglegroup
bind=Alt, Return, fullscreen
bind=$mod, Left, movefocus, l
bind=$mod, Right, movefocus, r
bind=$mod, Up, movefocus, u
bind=$mod, Down, movefocus, d
bind=Alt, Tab, movefocus, d
bind=$mod, 1, workspace, 1
bind=$mod, 2, workspace, 2
bind=$mod, 3, workspace, 3
bind=$mod, 4, workspace, 4
bind=$mod, 5, workspace, 5
bind=$mod, 6, workspace, 6
bind=$mod, 7, workspace, 7
bind=$mod, 8, workspace, 8
bind=$mod, 9, workspace, 9
bind=$mod, 0, workspace, 10
bind=$mod+Ctrl, Right, workspace, r+1
bind=$mod+Ctrl, Left, workspace, r-1
bind=$mod+Ctrl, Doown, workspace, empty
bind=$mod+Shift, 1, movetoworkspace, 1
bind=$mod+Shift, 2, movetoworkspace, 2
bind=$mod+Shift, 3, movetoworkspace, 3
bind=$mod+Shift, 4, movetoworkspace, 4
bind=$mod+Shift, 5, movetoworkspace, 5
bind=$mod+Shift, 6, movetoworkspace, 6
bind=$mod+Shift, 7, movetoworkspace, 7
bind=$mod+Shift, 8, movetoworkspace, 8
bind=$mod+Shift, 9, movetoworkspace, 9
bind=$mod+Shift, 0, movetoworkspace, 10
bind=$mod+Ctrl+Alt, Right, movetoworkspace, r+1
bind=$mod+Ctrl+Alt, Left, movetoworkspace, r-1
bind=$mod, Backspace, exec, caelestia shell drawers toggle session
bind=$mod+Shift+Ctrl, Left, movewindow, l
bind=$mod+Shift+Ctrl, Right, movewindow, r
bind=$mod+Shift+Ctrl, Up, movewindow, u
bind=$mod+Shift+Ctrl, Down, movewindow, d
bind=$mod, mouse_down, workspace, e+1
bind=$mod, mouse_up, workspace, e-1
bind=$mod, V, exec, cliphist list | rofi -dmenu| cliphist decode | wl-copy
bind=$mod, B, exec, hyprkeys -bkr | rofi -dmenu
bind=$mod, S, togglespecialworkspace,
bind=Alt+$mod, S, movetoworkspace, special
bind=$mod, A, layoutmsg, move -col
bind=$mod, D, layoutmsg, move +col
bind=$mod, T, exec, $term
bind=$mod, E, exec, $file
bind=$mod, F, exec, $browser
bind=$mod, N, exec, $notes
bind=$mod+Shift, A, exec, caelestia shell drawers toggle launcher
bind=$mod, Q, exec, custom-dontkillsteam
bind=Ctrl+Alt, W, exec, caelestia shell drawers toggle sidebar
bind=$mod, L, exec, caelestia shell lock lock
bind=, F11, exec, caelestia screenshot
bind=$mod_SHIFT, S, exec, caelestia shell picker open
bind=Ctrl+$mod, 6, exec, custom-killall
bind=Ctrl+Alt, 7, exec, custom-performance
bind=Ctrl+Alt, 1, exec, caelestia shell drawers toggle sidebar
bind=Ctrl+$mod, 4, exec, caelestia shell notifs toggleDnd
bind=Ctrl+$mod, 3, exec, pavucontrol
bind=Ctrl+Shift+Alt, 0, exec, kitty --hold --class "custom-changeAudioOutput" --name "Select audio output" zsh -c "custom-changeAudioOutput"
bind=Ctrl+$mod, 5, exec, gnome-characters
bind=Ctrl+Alt, 8, exec, hyprpicker | tee >(wl-copy) | cliphist store
bind=Ctrl+Alt, 0, exec, custom-tomato
bind=Ctrl+Alt, 2, exec, custom-bottom
bind=Ctrl+Alt, 9, exec, anki
binde=$mod+Shift, Right, resizeactive, 30 0
binde=$mod+Shift, Left, resizeactive, -30, 0
binde=$mod+Shift, Up, resizeactive, 0 -30
binde=$mod+Shift, Down, resizeactive,m 0 30
bindel=, F2, exec, pactl set-sink-volume @DEFAULT_SINK@ -10%
bindel=, F3, exec, pactl set-sink-volume @DEFAULT_SINK@ +10%
bindel=, F7, exec, brightnessctl s 10%-
bindel=, F8, exec, brightnessctl s +10%
bindl=, F1, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
bindl=, F5, exec, playerctl play-pause
bindl=, F4, exec, playerctl previous
bindl=, F6, exec, playerctl next
bindm=$mod, mouse:272, movewindow
bindm=$mod, mouse:273, resizewindow
bindm=$mod, Z, movewindow
bindm=$mod, X, resizewindow
decoration {
blur {
enabled=true
ignore_opacity=true
new_optimizations=true
passes=2
size=4
special=true
}
dim_special=0.300000
rounding=18
}
dwindle {
preserve_split=true
}
env=PATH, $PATH:$scrPath
env=XDG_CURRENT_DESKTOP,Hyprland
env=XDG_SESSION_TYPE,wayland
env=XDG_SESSION_DESKTOP,Hyprland
env=QT_QPA_PLATFORM,wayland;xcb
env=QT_QPAPLATFORMTHEME,qt6ct
env=QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env=MOZ_ENABLE_WAYLAND,1
env=GDK_SCALE,1
exec-once=qtbatticon
exec-once=source /run/agenix/ntfy && nixpkgs-notifier listen
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once=dbus-update-activation-environment --systemd --all
exec-once=systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once=systemctl --user start xdg-desktop-portal-wlr.service
exec-once=blueman-applet
exec-once=udiskie --no-automount --smart-tray
exec-once=nm-applet --indicator
exec-once=rm -rf ~/.cache/cliphist/ && wl-paste --type text --watch cliphist store & wl-paste --type image --watch cliphist store
exec-once=custom-batterynotify
exec-once=custom-batterywarning
exec-once=awww img /nix/store/30py8zav0pbsbcvcll5017hwz07fxmr0-wallpaper1.jpg
exec-once=awww-daemon
exec-once=sleep 1 && custom-wallpaper
exec-once=custom-checkKdrive && custom-mountkdrive
exec-once=custom-gitnotify
exec-once=sleep 4 & caelestia-shell
exec-once=sleep 20 && ngcp pull --automatic
general {
border_size=4
col.active_border=rgba(ca6702ff) rgba(ecd3a0ff) 45deg
col.inactive_border=rgba(f1dca7d9) rgba(ffe1a8d9) 45deg
gaps_in=5
gaps_out=15
layout=dwindle
resize_on_border=true
}
gesture=3, right, move, +col
gesture=3, left, move, -col
group {
col.border_active=rgba(ca6702ff) rgba(ecd3a0ff) 45deg
col.border_inactive=rgba(f1dca7d9) rgba(ffe1a8d9) 45deg
col.border_locked_active=rgba(ca6702ff) rgba(ecd3a0ff) 45deg
col.border_locked_inactive=rgba(f1dca7d9) rgba(ffe1a8d9) 45deg
}
input {
kb_layout=ch
follow_mouse=1
force_no_accel=1
sensitivity=0
}
layerrule=blur on, ignore_alpha 0, match:namespace rofi
layerrule=blur on, ignore_alpha 0, match:namespace notifications
layerrule=blur on, ignore_alpha 0, match:namespace swaync-notification-window
layerrule=blur on, ignore_alpha 0, match:namespace swaync-control-center
layerrule=blur on, match:namespace logout_dialog
misc {
force_default_wallpaper=0
vrr=0
}
monitor=eDP-1, highres@highrr, 0x0, 1
monitor=HDMI-A-1, highres2highrr, auto-left, 1
plugin:dynamic-cursors {
rotate {
length=20
offset=0
}
shake {
base=4.000000
effects=true
enabled=true
influence=0.000000
ipc=false
limit=0.000000
nearest=true
speed=4.000000
threshold=4
timeout=2000
}
enabled=true
mode=rotate
threshold=2
}
plugin:overview {
disableBlur=true
disableGestures=true
showEmptyWorkspace=true
workspaceActiveBorder=rgb(ab7746)
}
scrolling {
column_width=0.450000
}
windowrule=opacity 0.90 0.90, match:class ^(firefox)$
windowrule=opacity 0.90 0.90, match:class ^(Brave-browser)$
windowrule=opacity 0.80 0.80, match:class ^(code-oss)$
windowrule=opacity 0.80 0.80, match:class ^(Code)$
windowrule=opacity 0.80 0.80, match:class ^(code-url-handler)$
windowrule=opacity 0.80 0.80, match:class ^(code-insiders-url-handler)$
windowrule=opacity 0.75 0.75, match:class ^(kitty)$
windowrule=opacity 0.80 0.80, match:class ^(org.kde.dolphin)$
windowrule=opacity 0.80 0.80, float on, match:class ^(org.kde.ark)$
windowrule=opacity 0.80 0.80, float on, match:class ^(nwg-look)$
windowrule=opacity 0.80 0.80, float on, match:class ^(qt5ct)$
windowrule=opacity 0.80 0.80, float on, match:class ^(qt6ct)$
windowrule=opacity 0.80 0.80, float on, match:class ^(kvantummanager)$
windowrule=opacity 0.80 0.70, float on, match:class ^(org.pulseaudio.pavucontrol)$
windowrule=opacity 0.80 0.70, float on, match:class ^(blueman-manager)$
windowrule=opacity 0.80 0.70, float on, match:class ^(nm-applet)$
windowrule=opacity 0.80 0.70, float on, match:class ^(nm-connection-editor)$
windowrule=opacity 0.80 0.70, float on, match:class ^(org.kde.polkit-kde-authentication-agent-1)$
windowrule=opacity 0.80 0.70, match:class ^(polkit-gnome-authentication-agent-1)$
windowrule=opacity 0.80 0.70, match:class ^(org.freedesktop.impl.portal.desktop.gtk)$
windowrule=opacity 0.80 0.70, match:class ^(org.freedesktop.impl.portal.desktop.hyprland)$
windowrule=opacity 0.70 0.70, match:class ^([Ss]team)$
windowrule=opacity 0.70 0.70, match:class ^(steamwebhelper)$
windowrule=opacity 0.70 0.70, match:class ^(Spotify)$
windowrule=opacity 0.70 0.70, match:initial_title ^(Spotify Free)$
windowrule=opacity 0.90 0.90, float on, match:class ^(com.github.rafostar.Clapper)$
windowrule=opacity 0.80 0.80, match:class ^(com.github.tchx84.Flatseal)$
windowrule=opacity 0.80 0.80, match:class ^(hu.kramo.Cartridges)$
windowrule=opacity 0.80 0.80, match:class ^(com.obsproject.Studio)$
windowrule=opacity 0.80 0.80, match:class ^(gnome-boxes)$
windowrule=opacity 0.80 0.80, match:class ^(discord)$
windowrule=opacity 0.80 0.80, match:class ^(WebCord)$
windowrule=opacity 0.80 0.80, match:class ^(ArmCord)$
windowrule=opacity 0.80 0.80, float on, match:class ^(app.drey.Warp)$
windowrule=opacity 0.80 0.80, float on, match:class ^(net.davidotek.pupgui2)$
windowrule=opacity 0.80 0.80, float on, match:class ^(yad)$
windowrule=opacity 0.80 0.80, float on, match:class ^(Signal)$
windowrule=opacity 0.80 0.80, float on, match:class ^(io.github.alainm23.planify)$
windowrule=opacity 0.80 0.80, float on, match:class ^(io.gitlab.theevilskeleton.Upscaler)$
windowrule=opacity 0.80 0.80, float on, match:class ^(com.github.unrud.VideoDownloader)$
windowrule=opacity 0.80 0.80, float on, match:class ^(io.gitlab.adhami3310.Impression)$
windowrule=opacity 0.80 0.80, float on, match:class ^(io.missioncenter.MissionCenter)$
windowrule=opacity 0.80 0.80, match:class ^(io.github.flattool.Warehouse)$
windowrule=float on, match:class ^(org.kde.dolphin)$, match:title ^(Progress Dialog — Dolphin)$
windowrule=float on, match:class ^(org.kde.dolphin)$, match:title ^(Copying — Dolphin)$
windowrule=float on, match:class ^(firefox)$, match:title ^(Picture-in-Picture)$
windowrule=float on, match:class ^(firefox)$, match:title ^(Library)$
windowrule=float on, match:class ^(kitty)$, match:title ^(top)$
windowrule=float on, match:class ^(kitty)$, match:title ^(btop)$
windowrule=float on, match:class ^(kitty)$, match:title ^(htop)$
windowrule=float on, match:class ^(vlc)$
windowrule=float on, match:class ^(eog)$
windowrule=float on, size 400 225, match:class ^(custom-browserprofiles)$
windowrule=float on, size 1050 200, match:class ^(custom-changeAudioOutput)$
windowrule=float on, size 400 175, match:class ^(custom-obsidianvaults)$
windowrule=float on, size 600 600, match:initial_class ^(custom-pomodoro)$
windowrule=float on, size 1500 800, match:initial_class ^(custom-bottom)$
workspace=1, layout:master
workspace=2, layout:scrolling, layoutopt:direction:right
workspace=name:special, layout:scrolling
xwayland {
force_zero_scaling=true
}
splash=true
+804
View File
@@ -0,0 +1,804 @@
local browser = "kitty --class \"custom-browserprofiles\" --name \"Select browser profile\" --hold custom-browserprofiles"
local editor = "nvim"
local file = "dolphin"
local mod = "SUPER"
local notes = "kitty --class \"custom-obsidianvaults\" --name \"Select Obsidian vault\" --hold custom-obsidianvaults"
local term = "kitty"
local function close_or_move_special()
local window = hl.get_active_window()
if not window then
return
end
local class = window.class or window.initial_class
if class == "Steam" or class == "custom-pomodoro" then
hl.dispatch(hl.dsp.window.move({ workspace = "special" }))
else
hl.dispatch(hl.dsp.window.close({ window = window }))
end
end
local function close_other_windows()
local active = hl.get_active_window()
local workspace = hl.get_active_workspace()
if not active or not workspace then
return
end
for _, window in pairs(hl.get_windows()) do
if window.workspace
and window.workspace.id == workspace.id
and window.address ~= active.address
then
hl.dispatch(hl.dsp.window.close({ window = window }))
end
end
end
local wallpapers = {
[1] = "WALLPAPER1/PATH/PLACEHOLDER",
[2] = "WALLPAPER2/PATH/PLACEHOLDER",
[3] = "WALLPAPER3/PATH/PLACEHOLDER",
[4] = "WALLPAPER4/PATH/PLACEHOLDER",
[5] = "WALLPAPER5/PATH/PLACEHOLDER",
[6] = "WALLPAPER1/PATH/PLACEHOLDER",
[7] = "WALLPAPER2/PATH/PLACEHOLDER",
[8] = "WALLPAPER3/PATH/PLACEHOLDER",
[9] = "WALLPAPER4/PATH/PLACEHOLDER",
[10] = "WALLPAPER5/PATH/PLACEHOLDER",
}
hl.on("workspace.active", function(workspace)
local wallpaper = wallpapers[workspace.id]
if wallpaper then
hl.exec_cmd("awww img -t none " .. wallpaper)
end
end)
hl.curve("wind", { type = "bezier", points = { { 0.05, 0.9 }, { 0.1, 1.05 } } })
hl.curve("winIn", { type = "bezier", points = { { 0.1, 1.1 }, { 0.1, 1.1 } } })
hl.curve("winOut", { type = "bezier", points = { { 0.3, -0.3 }, { 0, 1 } } })
hl.curve("liner", { type = "bezier", points = { { 1, 1 }, { 1, 1 } } })
hl.animation({
leaf = "windows",
enabled = true,
speed = 6,
bezier = "wind",
style = "slide",
})
hl.animation({
leaf = "windowsIn",
enabled = true,
speed = 6,
bezier = "winIn",
style = "slide",
})
hl.animation({
leaf = "windowsOut",
enabled = true,
speed = 5,
bezier = "winOut",
style = "slide",
})
hl.animation({
leaf = "windowsMove",
enabled = true,
speed = 5,
bezier = "wind",
style = "slide",
})
hl.animation({
leaf = "border",
enabled = true,
speed = 1,
bezier = "liner",
})
hl.animation({
leaf = "borderangle",
enabled = true,
speed = 30,
bezier = "liner",
style = "loop",
})
hl.animation({
leaf = "fade",
enabled = true,
speed = 10,
bezier = "default",
})
hl.animation({
leaf = "workspaces",
enabled = true,
speed = 5,
bezier = "wind",
})
hl.bind(mod .. " + W", hl.dsp.window.float({ action = "toggle" }))
hl.bind(mod .. " + G", hl.dsp.group.toggle())
hl.bind("ALT + Return", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
hl.bind(mod .. " + Left", hl.dsp.focus({ direction = "left" }))
hl.bind(mod .. " + Right", hl.dsp.focus({ direction = "right" }))
hl.bind(mod .. " + CTRL + D", hl.dsp.layout("swapcol r"))
hl.bind(mod .. " + CTRL + A", hl.dsp.layout("swapcol l"))
hl.bind(mod .. " + Up", hl.dsp.focus({ direction = "up" }))
hl.bind(mod .. " + Down", hl.dsp.focus({ direction = "down" }))
hl.bind("ALT + Tab", hl.dsp.focus({ direction = "down" }))
hl.bind(mod .. " + 1", hl.dsp.focus({ workspace = 1 }))
hl.bind(mod .. " + 2", hl.dsp.focus({ workspace = 2 }))
hl.bind(mod .. " + 3", hl.dsp.focus({ workspace = 3 }))
hl.bind(mod .. " + 4", hl.dsp.focus({ workspace = 4 }))
hl.bind(mod .. " + 5", hl.dsp.focus({ workspace = 5 }))
hl.bind(mod .. " + 6", hl.dsp.focus({ workspace = 6 }))
hl.bind(mod .. " + 7", hl.dsp.focus({ workspace = 7 }))
hl.bind(mod .. " + 8", hl.dsp.focus({ workspace = 8 }))
hl.bind(mod .. " + 9", hl.dsp.focus({ workspace = 9 }))
hl.bind(mod .. " + 0", hl.dsp.focus({ workspace = 10 }))
hl.bind(mod .. " + CTRL + Right", hl.dsp.focus({ workspace = "r+1" }))
hl.bind(mod .. " + CTRL + Left", hl.dsp.focus({ workspace = "r-1" }))
hl.bind(mod .. " + CTRL + Down", hl.dsp.focus({ workspace = "empty" }))
hl.bind(mod .. " + SHIFT + 1", hl.dsp.window.move({ workspace = 1 }))
hl.bind(mod .. " + SHIFT + 2", hl.dsp.window.move({ workspace = 2 }))
hl.bind(mod .. " + SHIFT + 3", hl.dsp.window.move({ workspace = 3 }))
hl.bind(mod .. " + SHIFT + 4", hl.dsp.window.move({ workspace = 4 }))
hl.bind(mod .. " + SHIFT + 5", hl.dsp.window.move({ workspace = 5 }))
hl.bind(mod .. " + SHIFT + 6", hl.dsp.window.move({ workspace = 6 }))
hl.bind(mod .. " + SHIFT + 7", hl.dsp.window.move({ workspace = 7 }))
hl.bind(mod .. " + SHIFT + 8", hl.dsp.window.move({ workspace = 8 }))
hl.bind(mod .. " + SHIFT + 9", hl.dsp.window.move({ workspace = 9 }))
hl.bind(mod .. " + SHIFT + 0", hl.dsp.window.move({ workspace = 10 }))
hl.bind(mod .. " + CTRL + ALT + Right", hl.dsp.window.move({ workspace = "r+1" }))
hl.bind(mod .." + CTRL + ALT + Left", hl.dsp.window.move({ workspace = "r-1" }))
hl.bind(mod .. " + Backspace", hl.dsp.exec_cmd("caelestia shell drawers toggle session"))
hl.bind(mod .. " + SHIFT + CTRL + Left", hl.dsp.window.move({ direction = "l" }))
hl.bind(mod .. " + SHIFT + CTRL + Right", hl.dsp.window.move({ direction = "r" }))
hl.bind(mod .. " + SHIFT + CTRL + Up", hl.dsp.window.move({ direction = "u" }))
hl.bind(mod .. " + SHIFT + CTRL + Down", hl.dsp.window.move({ direction = "d" }))
hl.bind(mod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
hl.bind(mod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
hl.bind(mod .. " + V", hl.dsp.exec_cmd("cliphist list | rofi -dmenu| cliphist decode | wl-copy"))
hl.bind(mod .. " + B", hl.dsp.exec_cmd("hyprkeys -bkr | rofi -dmenu"))
hl.bind(mod .. " + S", hl.dsp.workspace.toggle_special(""))
hl.bind(mod .. " + ALT + S", hl.dsp.window.move({ workspace = "special" }))
hl.bind(mod .. " + A", hl.dsp.layout("move -col"))
hl.bind(mod .. " + D", hl.dsp.layout("move +col"))
hl.bind(mod .. " + T", hl.dsp.exec_cmd(term))
hl.bind(mod .. " + E", hl.dsp.exec_cmd(file))
hl.bind(mod .. " + F", hl.dsp.exec_cmd(browser))
hl.bind(mod .. " + N", hl.dsp.exec_cmd(notes))
hl.bind(mod .. " + SHIFT + A", hl.dsp.exec_cmd("caelestia shell drawers toggle launcher"))
hl.bind(mod .. " + Q", close_or_move_special)
hl.bind("CTRL + ALT + W", hl.dsp.exec_cmd("caelestia shell drawers toggle sidebar"))
hl.bind(mod .. " + L", hl.dsp.exec_cmd("caelestia shell lock lock"))
hl.bind("F11", hl.dsp.exec_cmd("caelestia screenshot"))
hl.bind(mod .. " + SHIFT + S", hl.dsp.exec_cmd("caelestia shell picker open"))
hl.bind(mod .. " + CTRL + 6", close_other_windows)
hl.bind("CTRL + ALT + 7", hl.dsp.exec_cmd("custom-performance"))
hl.bind("CTRL + ALT + 1", hl.dsp.exec_cmd("caelestia shell drawers toggle sidebar"))
hl.bind(mod .. " + CTRL + 4", hl.dsp.exec_cmd("caelestia shell notifs toggleDnd"))
hl.bind(mod .. " + CTRL + 3", hl.dsp.exec_cmd("pavucontrol"))
hl.bind("CTRL + SHIFT + ALT + 0", hl.dsp.exec_cmd("kitty --hold --class \"custom-changeAudioOutput\" --name \"Select audio output\" zsh -c \"custom-changeAudioOutput\""))
hl.bind(mod .. " + CTRL + 5", hl.dsp.exec_cmd("gnome-characters"))
hl.bind("CTRL + ALT + 8", hl.dsp.exec_cmd("hyprpicker | tee >(wl-copy) | cliphist store"))
hl.bind("CTRL + ALT + 0", hl.dsp.exec_cmd("custom-tomato"))
hl.bind("CTRL + ALT + 2", hl.dsp.exec_cmd("custom-bottom"))
hl.bind("CTRL + ALT + 9", hl.dsp.exec_cmd("anki"))
hl.bind(mod .. " + SHIFT + Right", hl.dsp.window.resize({ x = 30, y = 0, relative = true }), { repeating = true })
-- TODO: manual review on line 93 — resizeactive: expected 'X Y' or 'X% Y%', got "-30"
-- hl.bind("SUPER + SHIFT + Left", hl.dsp.resizeactive(-30, 0), { repeating = true })
hl.bind(mod .. " + SHIFT + Up", hl.dsp.window.resize({ x = 0, y = -30, relative = true }), { repeating = true })
-- TODO: manual review on line 95 — resizeactive: expected 'X Y' or 'X% Y%', got "m 0 30"
-- hl.bind("SUPER + SHIFT + Down", hl.dsp.resizeactive("m 0 30"), { repeating = true })
hl.bind("F2", hl.dsp.exec_cmd("pactl set-sink-volume @DEFAULT_SINK@ -10%"), { locked = true, repeating = true })
hl.bind("F3", hl.dsp.exec_cmd("pactl set-sink-volume @DEFAULT_SINK@ +10%"), { locked = true, repeating = true })
hl.bind("F7", hl.dsp.exec_cmd("brightnessctl s 10%-"), { locked = true, repeating = true })
hl.bind("F8", hl.dsp.exec_cmd("brightnessctl s +10%"), { locked = true, repeating = true })
hl.bind("F1", hl.dsp.exec_cmd("pactl set-sink-mute @DEFAULT_SINK@ toggle"), { locked = true })
hl.bind("F5", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
hl.bind("F4", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
hl.bind("F6", hl.dsp.exec_cmd("playerctl next"), { locked = true })
hl.bind(mod .. " + mouse:272", hl.dsp.window.drag())
hl.bind(mod .. " + mouse:273", hl.dsp.window.resize())
hl.bind(mod .. " + Z", hl.dsp.window.drag())
hl.bind(mod .. " + X", hl.dsp.window.resize())
hl.env("XDG_CURRENT_DESKTOP", "Hyprland")
hl.env("XDG_SESSION_TYPE", "wayland")
hl.env("XDG_SESSION_DESKTOP", "Hyprland")
hl.env("QT_QPA_PLATFORM", "wayland;xcb")
hl.env("QT_QPAPLATFORMTHEME", "qt6ct")
hl.env("QT_WAYLAND_DISABLE_WINDOWDECORATION", "1")
hl.env("MOZ_ENABLE_WAYLAND", "1")
hl.env("GDK_SCALE", "1")
hl.gesture({
fingers = 3,
direction = "horizontal",
action = "scroll_move",
})
hl.gesture({
fingers = 2,
direction = "pinch",
action = "cursor_zoom",
mode = "live",
})
--hl.layer_rule({
-- match = { namespace = "ignore_alpha 0" },
-- TODO: manual review — unmapped layer rule: "blur on"
-- TODO: manual review — unmapped layer rule: "blur on"
-- TODO: manual review — unmapped layer rule: "blur on"
-- TODO: manual review — unmapped layer rule: "blur on"
--})
--hl.layer_rule({
-- match = { namespace = "match:namespace logout_dialog" },
-- TODO: manual review — unmapped layer rule: "blur on"
--)
hl.monitor({
output = "eDP-1",
mode = "highres@highrr",
position = "0x0",
scale = "1",
})
hl.monitor({
output = "HDMI-A-1",
mode = "highres2highrr",
position = "auto-left",
scale = "1",
})
-- TODO: manual review — plugin section 'dynamic-cursors'. The new Lua API exposes plugins via hl.plugin.<name>(...) — wire up per the plugin's docs.
--[[
rotate { ... }
shake { ... }
enabled = true
mode = rotate
threshold = 2
]]
-- TODO: manual review — plugin section 'overview'. The new Lua API exposes plugins via hl.plugin.<name>(...) — wire up per the plugin's docs.
--[[
disableBlur = true
disableGestures = true
showEmptyWorkspace = true
workspaceActiveBorder = rgb(ab7746)
]]
hl.window_rule({
match = {
class = "^(firefox)$",
},
opacity = "0.90 0.90",
})
hl.window_rule({
match = {
class = "^(Brave-browser)$",
},
opacity = "0.90 0.90",
})
hl.window_rule({
match = {
class = "^(code-oss)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(Code)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(code-url-handler)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(code-insiders-url-handler)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(kitty)$",
},
opacity = "0.75 0.75",
})
hl.window_rule({
match = {
class = "^(org.kde.dolphin)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(org.kde.ark)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(nwg-look)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(qt5ct)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(qt6ct)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(kvantummanager)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(org.pulseaudio.pavucontrol)$",
},
opacity = "0.80 0.70",
float = true,
})
hl.window_rule({
match = {
class = "^(blueman-manager)$",
},
opacity = "0.80 0.70",
float = true,
})
hl.window_rule({
match = {
class = "^(nm-applet)$",
},
opacity = "0.80 0.70",
float = true,
})
hl.window_rule({
match = {
class = "^(nm-connection-editor)$",
},
opacity = "0.80 0.70",
float = true,
})
hl.window_rule({
match = {
class = "^(org.kde.polkit-kde-authentication-agent-1)$",
},
opacity = "0.80 0.70",
float = true,
})
hl.window_rule({
match = {
class = "^(polkit-gnome-authentication-agent-1)$",
},
opacity = "0.80 0.70",
})
hl.window_rule({
match = {
class = "^(org.freedesktop.impl.portal.desktop.gtk)$",
},
opacity = "0.80 0.70",
})
hl.window_rule({
match = {
class = "^(org.freedesktop.impl.portal.desktop.hyprland)$",
},
opacity = "0.80 0.70",
})
hl.window_rule({
match = {
class = "^([Ss]team)$",
},
opacity = "0.70 0.70",
})
hl.window_rule({
match = {
class = "^(steamwebhelper)$",
},
opacity = "0.70 0.70",
})
hl.window_rule({
match = {
class = "^(Spotify)$",
},
opacity = "0.70 0.70",
})
hl.window_rule({
match = {
initial_title = "^(Spotify Free)$",
},
opacity = "0.70 0.70",
})
hl.window_rule({
match = {
class = "^(com.github.rafostar.Clapper)$",
},
opacity = "0.90 0.90",
float = true,
})
hl.window_rule({
match = {
class = "^(com.github.tchx84.Flatseal)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(hu.kramo.Cartridges)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(com.obsproject.Studio)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(gnome-boxes)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(discord)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(WebCord)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(ArmCord)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(app.drey.Warp)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(net.davidotek.pupgui2)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(yad)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(Signal)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(io.github.alainm23.planify)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(io.gitlab.theevilskeleton.Upscaler)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(com.github.unrud.VideoDownloader)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(io.gitlab.adhami3310.Impression)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(io.missioncenter.MissionCenter)$",
},
opacity = "0.80 0.80",
float = true,
})
hl.window_rule({
match = {
class = "^(io.github.flattool.Warehouse)$",
},
opacity = "0.80 0.80",
})
hl.window_rule({
match = {
class = "^(org.kde.dolphin)$",
title = "^(Progress Dialog — Dolphin)$",
},
float = true,
})
hl.window_rule({
match = {
class = "^(org.kde.dolphin)$",
title = "^(Copying — Dolphin)$",
},
float = true,
})
hl.window_rule({
match = {
class = "^(firefox)$",
title = "^(Picture-in-Picture)$",
},
float = true,
})
hl.window_rule({
match = {
class = "^(firefox)$",
title = "^(Library)$",
},
float = true,
})
hl.window_rule({
match = {
class = "^(kitty)$",
title = "^(top)$",
},
float = true,
})
hl.window_rule({
match = {
class = "^(kitty)$",
title = "^(btop)$",
},
float = true,
})
hl.window_rule({
match = {
class = "^(kitty)$",
title = "^(htop)$",
},
float = true,
})
hl.window_rule({
match = {
class = "^(vlc)$",
},
float = true,
})
hl.window_rule({
match = {
class = "^(eog)$",
},
float = true,
})
hl.window_rule({
match = {
class = "^(custom-browserprofiles)$",
},
float = true,
size = "400 225",
})
hl.window_rule({
match = {
class = "^(custom-changeAudioOutput)$",
},
float = true,
size = "1050 200",
})
hl.window_rule({
match = {
class = "^(custom-obsidianvaults)$",
},
float = true,
size = "400 175",
})
hl.window_rule({
match = {
initial_class = "^(custom-pomodoro)$",
},
float = true,
size = "600 600",
})
hl.window_rule({
match = {
initial_class = "^(custom-bottom)$",
},
float = true,
size = "1500 800",
})
hl.workspace_rule({
workspace = "1",
layout = "master",
})
hl.workspace_rule({
workspace = "2",
layout = "scrolling",
})
hl.workspace_rule({
workspace = "special",
layout = "scrolling",
})
-- TODO: manual review — top-level key 'splash = true' has no enclosing section
hl.config({
animations = {
enabled = true,
},
decoration = {
blur = {
enabled = true,
ignore_opacity = true,
new_optimizations = true,
passes = 2,
size = 4,
special = true,
},
dim_special = 0.300000,
rounding = 18,
},
dwindle = {
preserve_split = true,
},
general = {
border_size = 4,
col = {
active_border = { colors = { "rgba(ca6702ff)", "rgba(ecd3a0ff)" }, angle = 45 },
inactive_border = { colors = { "rgba(f1dca7d9)", "rgba(ffe1a8d9)" }, angle = 45 },
},
gaps_in = 5,
gaps_out = 15,
layout = "dwindle",
resize_on_border = true,
},
group = {
col = {
border_active = { colors = { "rgba(ca6702ff)", "rgba(ecd3a0ff)" }, angle = 45 },
border_inactive = { colors = { "rgba(f1dca7d9)", "rgba(ffe1a8d9)" }, angle = 45 },
border_locked_active = { colors = { "rgba(ca6702ff)", "rgba(ecd3a0ff)" }, angle = 45 },
border_locked_inactive = { colors = { "rgba(f1dca7d9)", "rgba(ffe1a8d9)" }, angle = 45 },
},
},
input = {
kb_layout = "ch",
follow_mouse = 1,
force_no_accel = 1,
sensitivity = 0,
},
misc = {
force_default_wallpaper = 0,
vrr = 0,
},
scrolling = {
column_width = 0.450000,
},
xwayland = {
force_zero_scaling = true,
},
})
hl.on("hyprland.start", function()
hl.exec_cmd("/nix/store/8kih8alkk4qzgjchg5501r1c3a8a71aw-dbus-1.16.2/bin/dbus-update-activation-environment --systemd DISPLAY HYPRLAND_INSTANCE_SIGNATURE WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE && systemctl --user stop hyprland-session.target && systemctl --user start hyprland-session.target")
hl.exec_cmd("qtbatticon")
hl.exec_cmd("source /run/agenix/ntfy && nixpkgs-notifier listen")
hl.exec_cmd("dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP")
hl.exec_cmd("dbus-update-activation-environment --systemd --all")
hl.exec_cmd("systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP")
hl.exec_cmd("systemctl --user start xdg-desktop-portal-wlr.service")
hl.exec_cmd("blueman-applet")
hl.exec_cmd("udiskie --no-automount --smart-tray")
hl.exec_cmd("nm-applet --indicator")
hl.exec_cmd("rm -rf ~/.cache/cliphist/ && wl-paste --type text --watch cliphist store & wl-paste --type image --watch cliphist store")
hl.exec_cmd("custom-batterynotify")
hl.exec_cmd("custom-batterywarning")
hl.exec_cmd("awww img WALLPAPER/PATH/PLACEHOLDER")
hl.exec_cmd("awww-daemon")
hl.exec_cmd("sleep 1 && custom-wallpaper")
hl.exec_cmd("custom-checkKdrive && custom-mountkdrive")
hl.exec_cmd("custom-gitnotify")
hl.exec_cmd("sleep 4 & caelestia-shell")
hl.exec_cmd("sleep 20 && ngcp pull --automatic")
end)
-- host specific config
require("host")
BIN
View File
Binary file not shown.
+9
View File
@@ -0,0 +1,9 @@
let
backupAgeKey = "age1y4lhpk7awhjyu42p46ulg5q2c49r2lnwu8tyyk4ejj6jztd64uksfhd670";
laptopHostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJCsewl8ZXXMjRyO20cBIiuW2gA4mGoMkxQ0dcMyNidR root@nixos";
in {
"ntfy.age".publicKeys = [
backupAgeKey
laptopHostKey
];
}
+8
View File
@@ -0,0 +1,8 @@
I am testing the tool ngcp i created. If this file disapears. It means I coded it wrong.
The problem before was that it did:
1. cherry pick
2. push
I didn't pulled changed before cherry picking
-59
View File
@@ -1,59 +0,0 @@
audacity.x86_64
dolphin.x86_64 may be customized or nautilus cust
ollama.x86_64
plymouth.x86_64
quickshell.x86_64
raylib-devel.x86_64
some notification daemon 0.12-32.fc43
tor.x86_64
torbrowser-launcher.noarch
maybe configure a bit ripgrep? majuscules
organize packages in pkgs list
why frameworktooltui settings dont apply?
things to do?
(maybe something periodic) deadnix and aljandra to clean up the repo
Review windowrules when only one window
setup lsp in neovim
Setup obsidian (plugsins, etc.)
setup kdrive as a git remote
setup tampermonkey
with quickshell:
fix player control icons
give battery percentage
maybe modify some of the images (like the notification body)
do a full bar (no ugly empty space at top)
add brightness slider
maybe change sound icon by volume level
maybe incorpore the fast fourier transform code
maybe write some notification center -- done. needs some style
battery dashboard https://www.reddit.com/r/hyprland/comments/1rkiajd/a_beautiful_battery_system_dashboard_on_hyprland/
have a small terminal popup for some usages (like custom-launch)
some meteo center with dates, etc
show name of the app
make the connection tray prettier? Maybe with a full rewrite
maybe some kind of overview?
show battery percentage
see what people did with quickshell and take inspiration
work on quickshell color palette to match gruvbox