mirror of
https://github.com/tomasriveral/nixos.git
synced 2026-10-12 17:30:55 +02:00
Compare commits
250
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
98bc46e67f | ||
|
|
d0b7183849 | ||
|
|
cea0d0e3f8 | ||
|
|
a4c66b4aff | ||
|
|
56a9bba86b | ||
|
|
1dab571e12 | ||
|
|
93f7328a3b | ||
|
|
07c2293f77 | ||
|
|
0e222a9c50 | ||
|
|
d1125d1571 | ||
|
|
550413c6b1 | ||
|
|
b4537796a2 | ||
|
|
4c0fbc5f0e | ||
|
|
d0a9511ff7 | ||
|
|
262476404e | ||
|
|
9f9906d423 | ||
|
|
0d616266ff | ||
|
|
7f74878433 | ||
|
|
6b282b5344 | ||
|
|
19fd3ec35d | ||
|
|
324d54683c | ||
|
|
0030034418 | ||
|
|
fb7be79e86 | ||
|
|
5db8135dd5 | ||
|
|
2107d23209 | ||
|
|
c235a0a724 | ||
|
|
77f4b0fc5f | ||
|
|
1642dc97ca | ||
|
|
2b59031896 | ||
|
|
3fc66623f2 | ||
|
|
d323e9f702 | ||
|
|
25813d8ab5 | ||
|
|
0ca30a4110 | ||
|
|
05ef065d75 | ||
|
|
fece2b565f | ||
|
|
2722840919 | ||
|
|
9e862337ca | ||
|
|
3c7d3584fc | ||
|
|
a619a10851 | ||
|
|
876ec4ce21 | ||
|
|
97beca4f88 | ||
|
|
e2b7fd8a64 | ||
|
|
752957818b | ||
|
|
2e322fbb79 | ||
|
|
1c600dbf3c | ||
|
|
4a648b7f7c | ||
|
|
67d21671c5 | ||
|
|
b8d8ef1aa8 | ||
|
|
2d16f3893b | ||
|
|
2a0c85275f | ||
|
|
23a9fdd4e8 | ||
|
|
246412ae4b | ||
|
|
58ec4221ef | ||
|
|
88eb91c780 | ||
|
|
3b73438d4f | ||
|
|
e758819398 | ||
|
|
8088f78f05 | ||
|
|
930e265420 | ||
|
|
3b89cf7b35 | ||
|
|
89eb25ca7d | ||
|
|
3ea36fa6bb | ||
|
|
523b104c43 | ||
|
|
4f3a74b741 | ||
|
|
2585a88780 | ||
|
|
52e5e4a4d4 | ||
|
|
2d8c797042 | ||
|
|
dd4fb62a2f | ||
|
|
09d92bc8e2 | ||
|
|
158a5c2b29 | ||
|
|
3d468572d5 | ||
|
|
d23c6979f9 | ||
|
|
01bde96826 | ||
|
|
552d898680 | ||
|
|
5b7c43c8f9 | ||
|
|
f1e9c76d02 | ||
|
|
a140ce9560 | ||
|
|
ba4727f453 | ||
|
|
6525d6d599 | ||
|
|
37f76a4439 | ||
|
|
c32e8112c6 | ||
|
|
ff1469dea2 | ||
|
|
89c87b8242 | ||
|
|
4bf8fe10c9 | ||
|
|
3b30916261 | ||
|
|
065012ed84 | ||
|
|
66ff0dc406 | ||
|
|
e4eb23f10f | ||
|
|
143f699365 | ||
|
|
d20f0d87d5 | ||
|
|
406baf2a5d | ||
|
|
2471741462 | ||
|
|
5039b2a37c | ||
|
|
45639e2531 | ||
|
|
2d2d4fd4a8 | ||
|
|
22bc2f218f | ||
|
|
d49c7ba99e | ||
|
|
c1354a3b98 | ||
|
|
29554e41ca | ||
|
|
f8255c42ed | ||
|
|
2a318bdced | ||
|
|
bd86051c13 | ||
|
|
34cde6f6f4 | ||
|
|
763bbbacd4 | ||
|
|
59f5d84de0 | ||
|
|
99f1dd3ec8 | ||
|
|
f56e535ff6 | ||
|
|
3836a6eb7c | ||
|
|
d9a650a964 | ||
|
|
d0ac13cec6 | ||
|
|
c92a868718 | ||
|
|
2c95860f5b | ||
|
|
4b6d0250df | ||
|
|
a063b505c6 | ||
|
|
433bb52cde | ||
|
|
d9969cbd71 | ||
|
|
68d81d5c4b | ||
|
|
259ee7e554 | ||
|
|
b1edbc9378 | ||
|
|
7e0ba6278c | ||
|
|
89d5ac8a17 | ||
|
|
d340b9c08b | ||
|
|
d4d24e6f61 | ||
|
|
45666fa728 | ||
|
|
2e0996938a | ||
|
|
8b2a086a4d | ||
|
|
4b6a5ffa59 | ||
|
|
19adc625f1 | ||
|
|
18d73c71c3 | ||
|
|
dc09f6dcce | ||
|
|
682bc4e5ab | ||
|
|
0beb6f374a | ||
|
|
6d15ae6a22 | ||
|
|
32c9d85f99 | ||
|
|
e3089e1d59 | ||
|
|
fa54be1c2b | ||
|
|
abf652e21b | ||
|
|
75002217f3 | ||
|
|
e42b1f9725 | ||
|
|
99ab54cc8b | ||
|
|
5afc0acf77 | ||
|
|
ccd9b3e97e | ||
|
|
cd3aa9b0dd | ||
|
|
07220185ee | ||
|
|
eaa0698bc0 | ||
|
|
9125dfddef | ||
|
|
fdbc3e1a79 | ||
|
|
73637ebc1d | ||
|
|
9a4b912e58 | ||
|
|
c128995bea | ||
|
|
d8982fab43 | ||
|
|
4bd062032f | ||
|
|
2419bc4f82 | ||
|
|
6a937f3863 | ||
|
|
4ee868fbc6 | ||
|
|
2ad6d8c165 | ||
|
|
8a7908a5c9 | ||
|
|
8207e1502c | ||
|
|
6d5ab8d831 | ||
|
|
95d14041cc | ||
|
|
ac11171bbf | ||
|
|
c2305331bb | ||
|
|
9e5cac3a2d | ||
|
|
f28ba6b799 | ||
|
|
933478d820 | ||
|
|
72cee5b891 | ||
|
|
a5e7dea053 | ||
|
|
d0c547d2e0 | ||
|
|
579f832afe | ||
|
|
d32a0e5948 | ||
|
|
c48d721d64 | ||
|
|
ad9f94fec2 | ||
|
|
efe30f4c1d | ||
|
|
774b7c0a77 | ||
|
|
68bef6e250 | ||
|
|
55ce1b6569 | ||
|
|
f28a6af581 | ||
|
|
3f5291cbaf | ||
|
|
e6d888e58f | ||
|
|
15afff222e | ||
|
|
5a8f8f5c08 | ||
|
|
7072f2a39e | ||
|
|
02b5924d31 | ||
|
|
a5d93f6ce1 | ||
|
|
8efd8a30bf | ||
|
|
5be623fd12 | ||
|
|
f491282dad | ||
|
|
a63984816d | ||
|
|
23606fecb6 | ||
|
|
a0dd94cb3c | ||
|
|
aca4458e4c | ||
|
|
3b99da9148 | ||
|
|
eee5117a22 | ||
|
|
6830973233 | ||
|
|
f7861f7ca1 | ||
|
|
2207b5ef03 | ||
|
|
9d4eb9b0a2 | ||
|
|
0713810716 | ||
|
|
8ee9c3f639 | ||
|
|
d673efcc8c | ||
|
|
3ecc4a55bf | ||
|
|
501965a0dc | ||
|
|
897795869f | ||
|
|
9e0f4e9aca | ||
|
|
44b77af9e9 | ||
|
|
dad71ed4a7 | ||
|
|
5b4b92ca06 | ||
|
|
f66b4ae739 | ||
|
|
fd8221d3ab | ||
|
|
42023bc87a | ||
|
|
8254cb871e | ||
|
|
a3c2dbe568 | ||
|
|
b53a392b37 | ||
|
|
6f6e197c12 | ||
|
|
90a2c60863 | ||
|
|
8ec20cee5b | ||
|
|
cb99ae907f | ||
|
|
256f7f802b | ||
|
|
d79e9ae0b1 | ||
|
|
dd6ad70e7c | ||
|
|
d017065992 | ||
|
|
5d5dd21c8e | ||
|
|
9e6e278c72 | ||
|
|
4fcbc31629 | ||
|
|
dc3eaf04c0 | ||
|
|
cfe758599d | ||
|
|
226ada8abd | ||
|
|
23e4261fef | ||
|
|
33174e7bc2 | ||
|
|
80118164bf | ||
|
|
11e6661af0 | ||
|
|
dbdc72dc64 | ||
|
|
cc5118c021 | ||
|
|
1f226bfcea | ||
|
|
3690b2896c | ||
|
|
e4e61b3d35 | ||
|
|
4d5e1ace42 | ||
|
|
7efb71d225 | ||
|
|
020f06def8 | ||
|
|
d7e2e22799 | ||
|
|
1d71a4dfcd | ||
|
|
1b33855fb1 | ||
|
|
43df516fa2 | ||
|
|
c6488c7d47 | ||
|
|
80dd4c217f | ||
|
|
982daa028a | ||
|
|
9a5c8c0c53 | ||
|
|
33d24f0cf6 | ||
|
|
f8985b786c | ||
|
|
9a709f8ae9 | ||
|
|
515247573f |
No files matched your search
@@ -0,0 +1,105 @@
|
||||
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 existing PR
|
||||
id: existing
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
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"
|
||||
|
||||
- name: Create PR
|
||||
id: create
|
||||
if: steps.existing.outputs.number == ''
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
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"
|
||||
|
||||
- name: Determine PR number
|
||||
id: pr
|
||||
run: |
|
||||
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
|
||||
|
||||
- name: Enable auto-merge
|
||||
if: steps.pr.outputs.number != ''
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
gh pr merge \
|
||||
"${{ steps.pr.outputs.number }}" \
|
||||
--auto \
|
||||
--merge
|
||||
@@ -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,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
|
||||

|
||||
|
||||
+206
-66
@@ -11,11 +11,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779508871,
|
||||
"narHash": "sha256-SFl2je8b423f/tIy0RTgCrWQUJiyFsAZp1Y0cccXqio=",
|
||||
"lastModified": 1781239472,
|
||||
"narHash": "sha256-WFL8jZMWNH1tx3UwaJ9aa9NN25uOEJ9mbKPRNQJY/xM=",
|
||||
"owner": "caelestia-dots",
|
||||
"repo": "cli",
|
||||
"rev": "7f300626704b7a86fe838ab58df654fa99779613",
|
||||
"rev": "3f3229aed4f36752a02fd870fd6cad94bd76555f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -27,17 +27,18 @@
|
||||
"caelestia-shell": {
|
||||
"inputs": {
|
||||
"caelestia-cli": "caelestia-cli",
|
||||
"m3shapes": "m3shapes",
|
||||
"nixpkgs": [
|
||||
"nixpkgs-unstable"
|
||||
],
|
||||
"quickshell": "quickshell"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779591587,
|
||||
"narHash": "sha256-Ud83/zsmDSHcqQ64MRiQ7SnGkUVIpRzqwqBBU65DGXY=",
|
||||
"lastModified": 1781408632,
|
||||
"narHash": "sha256-kYVf3Jye4UhyBrtubYcSrmVyFv9uqOY2JvjmElFiZHE=",
|
||||
"owner": "caelestia-dots",
|
||||
"repo": "shell",
|
||||
"rev": "2f7ab5e4140d9188185f6c3164e428c1eeda1fe6",
|
||||
"rev": "f86c359cd90530bacc800e94e35ffbebecd3f58f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -46,6 +47,26 @@
|
||||
"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": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
@@ -53,15 +74,31 @@
|
||||
"locked": {
|
||||
"lastModified": 1778716662,
|
||||
"narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb",
|
||||
"type": "github"
|
||||
"revCount": 475,
|
||||
"type": "tarball",
|
||||
"url": "https://api.flakehub.com/f/pinned/hercules-ci/flake-parts/0.1.475%2Brev-f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb/019e2533-0324-7e90-93eb-29b02e1a61cd/source.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
"type": "tarball",
|
||||
"url": "https://flakehub.com/f/hercules-ci/flake-parts/%2A"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"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": {
|
||||
@@ -71,16 +108,16 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779506708,
|
||||
"narHash": "sha256-QOD/CNm196nCJRheux/URi4/HE66fthdOMqCJoPP1Y0=",
|
||||
"lastModified": 1781319724,
|
||||
"narHash": "sha256-ZGuxexEMo4Xv28KJ0dX/m/PHN4oZIOnxHZpNTyrvx4M=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "3ee51fbdac8c8bdfe1e7e1fcaba6520a563f394f",
|
||||
"rev": "8355f0a16b2dbb06a97959a918af5b239bbe05ae",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-25.11",
|
||||
"ref": "release-26.05",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
@@ -100,52 +137,58 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"microPlugins-vivify": {
|
||||
"m3shapes": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1770382657,
|
||||
"narHash": "sha256-yWmIgT90mC9PhzyH/itDbRMmRTiZiwW+Yo0dsHW7ni8=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "3c5cb25facf3fc4143bfea9323a60eda65ef8485",
|
||||
"revCount": 8,
|
||||
"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",
|
||||
"lastModified": 1781017666,
|
||||
"narHash": "sha256-kfHyzZaPHgqZML48OA+5JwBOsLdQJ2ci/aGPShvUB4Y=",
|
||||
"owner": "soramanew",
|
||||
"repo": "m3shapes",
|
||||
"rev": "bdc327b29f95394a732baf3c9b19658ba23755b6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "jeslie0",
|
||||
"repo": "nixos-grub-themes",
|
||||
"owner": "soramanew",
|
||||
"repo": "m3shapes",
|
||||
"rev": "bdc327b29f95394a732baf3c9b19658ba23755b6",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-git-cherry-picker": {
|
||||
"inputs": {
|
||||
"flake-utils": [
|
||||
"flake-utils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"nixpkgs-unstable"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1781373243,
|
||||
"narHash": "sha256-CpZ5FEU1BtW6K4FywtCCE2wJs6R/Ifps3etRDh8NJ9w=",
|
||||
"owner": "tomasriveral",
|
||||
"repo": "nix-git-cherry-picker",
|
||||
"rev": "9865dba535620831ae7cab395bf404f8f464df0e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tomasriveral",
|
||||
"repo": "nix-git-cherry-picker",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1702151865,
|
||||
"narHash": "sha256-9VAt19t6yQa7pHZLDbil/QctAgVsA66DLnzdRGqDisg=",
|
||||
"lastModified": 1781216227,
|
||||
"narHash": "sha256-9mUW6gNwoN2SWc/l0fW4svPNOulXLl8ijqKyeSOGgJE=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "666fc80e7b2afb570462423cb0e1cf1a3a34fedd",
|
||||
"rev": "a0374025a863d007d98e3297f6aa46cc3141c2f0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"ref": "nixos-26.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
@@ -165,13 +208,36 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-notifier": {
|
||||
"inputs": {
|
||||
"flake-utils": [
|
||||
"flake-utils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"nixpkgs-unstable"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1781273662,
|
||||
"narHash": "sha256-50dd7Cs1mUHq1srw7UojdzCYOB4TfrIXMv7XHHPU9zw=",
|
||||
"owner": "tomasriveral",
|
||||
"repo": "nixpkgs-notifier",
|
||||
"rev": "12183f26e8b196d9906f82dc05f9672793c61038",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tomasriveral",
|
||||
"repo": "nixpkgs-notifier",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1779536132,
|
||||
"narHash": "sha256-q+fF42iv/geEbHfgSzy3tS0FF/EyD6XTZ98E6yxiBO8=",
|
||||
"lastModified": 1781328464,
|
||||
"narHash": "sha256-j9uBlHI0eJ9zWU9IlF6SlBBPdeJu30hcvar31IRKHpw=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3d8f0f3f72a6cd4d93d0ad13203f2ea1cb7e1456",
|
||||
"rev": "5a722a7155bfc9fbe657f28d26b71860d95324bc",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -181,19 +247,50 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"notewrapper": {
|
||||
"inputs": {
|
||||
"flake-utils": [
|
||||
"flake-utils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"nixpkgs-unstable"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779102034,
|
||||
"narHash": "sha256-vZJZjLo513IeI8hjzHFc6TDezUd4uCE2Eq4SNO3DNNg=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "687f05a9184cad4eaf905c48b63649e3a86f5433",
|
||||
"lastModified": 1780908812,
|
||||
"narHash": "sha256-syxEJP0NNgVZYHp/zRVuz32VYf+ULD9itZk7V06SCos=",
|
||||
"owner": "tomasriveral",
|
||||
"repo": "notewrapper",
|
||||
"rev": "e670ef935f0dd87dc8a8c6982147a9b8dce7565e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-25.11",
|
||||
"repo": "nixpkgs",
|
||||
"owner": "tomasriveral",
|
||||
"repo": "notewrapper",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"patent": {
|
||||
"inputs": {
|
||||
"flake-utils": [
|
||||
"flake-utils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"nixpkgs-unstable"
|
||||
],
|
||||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1781158593,
|
||||
"narHash": "sha256-zxlheX4o1MK00dkYzoXm7Srj5SD9iOCSp4N7f1iShr0=",
|
||||
"owner": "r14dd",
|
||||
"repo": "patent",
|
||||
"rev": "68772d068088d62a030619090959165af5e71ed1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "r14dd",
|
||||
"repo": "patent",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
@@ -205,11 +302,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779430452,
|
||||
"narHash": "sha256-zTslhsxLqUlRTML506iougTGzyR38Fzhzn7t4KDEuuE=",
|
||||
"lastModified": 1781053488,
|
||||
"narHash": "sha256-P4WEBaKgl8flRckHxXGHzT0potPvB3x8ZFIp9gLEAMY=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "4b4fca3224ab977dc515ac0bb78d00b3dfa71e00",
|
||||
"revCount": 819,
|
||||
"rev": "d99d87d5e5ec4e696815348692fdaaf0b6be1b2c",
|
||||
"revCount": 822,
|
||||
"type": "git",
|
||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||
},
|
||||
@@ -221,13 +318,56 @@
|
||||
"root": {
|
||||
"inputs": {
|
||||
"caelestia-shell": "caelestia-shell",
|
||||
"disko": "disko",
|
||||
"flake-parts": "flake-parts",
|
||||
"flake-utils": "flake-utils",
|
||||
"home-manager": "home-manager",
|
||||
"import-tree": "import-tree",
|
||||
"microPlugins-vivify": "microPlugins-vivify",
|
||||
"nixos-grub-themes": "nixos-grub-themes",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"nixpkgs-unstable": "nixpkgs-unstable"
|
||||
"nix-git-cherry-picker": "nix-git-cherry-picker",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixpkgs-master": [
|
||||
"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"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -2,24 +2,59 @@
|
||||
description = "Nixos config flake";
|
||||
|
||||
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
|
||||
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 = {
|
||||
url = "github:nix-community/home-manager/release-25.11";
|
||||
url = "github:nix-community/home-manager/release-26.05";
|
||||
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 = {
|
||||
# based on quickshell. See https://github.com/caelestia-dots/shell
|
||||
url = "github:caelestia-dots/shell";
|
||||
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||
};
|
||||
microPlugins-vivify = {
|
||||
disko = {
|
||||
url = "github:nix-community/disko";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
/*
|
||||
microPlugins-vivify = {
|
||||
url = "git+https://codeberg.org/gibbert/micro-vivify";
|
||||
flake = false;
|
||||
};
|
||||
*/
|
||||
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
|
||||
};
|
||||
@@ -30,8 +65,13 @@
|
||||
system = "x86_64-linux";
|
||||
unfreePkgs = [
|
||||
"hplip"
|
||||
"vivify.vim"
|
||||
"nvidia-x11"
|
||||
"nvidia-settings"
|
||||
"steam"
|
||||
"steam-unwrapped"
|
||||
"cheatsheet.nvim"
|
||||
"zoom-us"
|
||||
"zoom"
|
||||
];
|
||||
mkUnfreePredicate = pkg:
|
||||
builtins.elem (inputs.nixpkgs.lib.getName pkg) unfreePkgs;
|
||||
@@ -42,8 +82,11 @@
|
||||
};
|
||||
pkgs = mkPkgs inputs.nixpkgs;
|
||||
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 {
|
||||
inherit pkgs pkgs-unstable;
|
||||
inherit pkgs pkgs-unstable pkgs-local pkgs-master;
|
||||
};
|
||||
}
|
||||
// (inputs.import-tree ./modules));
|
||||
|
||||
@@ -57,7 +57,7 @@ _: {
|
||||
# we enable system wide with nixpkgs because it offers some addon configuration. We just use this for some config
|
||||
#enable = true;
|
||||
theme = "dark";
|
||||
sync = {
|
||||
profiles."User 1".sync = {
|
||||
autoSync = true;
|
||||
autoSyncMediaMinutes = 10;
|
||||
syncMedia = true;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
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.
|
||||
pkgs-unstable.tor-browser
|
||||
self.packages.${pkgs.system}.custom-librewolfprofiles
|
||||
self.packages.${pkgs.system}.custom-browserprofiles
|
||||
];
|
||||
};
|
||||
flake.homeModules.librewolf = _: {
|
||||
@@ -146,7 +146,7 @@
|
||||
};
|
||||
"uBlock0@raymondhill.net" = {
|
||||
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}" = {
|
||||
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";
|
||||
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;
|
||||
DisableFirefoxStudies = true;
|
||||
@@ -304,6 +312,12 @@
|
||||
bookmarks = {
|
||||
force = true;
|
||||
settings = [
|
||||
{
|
||||
name = "Nixpkgs PRs";
|
||||
tags = ["nixpkgs" "PR" "github"];
|
||||
keyword = "nixpkgs prs";
|
||||
url = "https://github.com/NixOS/nixpkgs/pulls";
|
||||
}
|
||||
{
|
||||
name = "Nixos Config";
|
||||
tags = ["github"];
|
||||
@@ -334,18 +348,60 @@
|
||||
keyword = "nixpkgs tracker";
|
||||
url = "https://nixpk.gs/pr-tracker.html";
|
||||
}
|
||||
{
|
||||
name = "fahrlehrer";
|
||||
tags = ["theorie" "fahrlehrer" "conduite"];
|
||||
keyword = "fahrlehrer24";
|
||||
url = "https://app.fahrlehrer24.ch/";
|
||||
}
|
||||
{
|
||||
name = "cogito";
|
||||
tags = ["cogito" "esprit" "critique"];
|
||||
keyword = "Cogito l'Esprit critique";
|
||||
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 = {
|
||||
@@ -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 = {
|
||||
force = true;
|
||||
default = "quant";
|
||||
@@ -643,6 +716,14 @@
|
||||
];
|
||||
definedAliases = ["on"];
|
||||
};
|
||||
"ProtonDB" = {
|
||||
urls = [
|
||||
{
|
||||
template = "https://www.protondb.com/search?q={searchTerms}";
|
||||
}
|
||||
];
|
||||
definedAliases = ["pr"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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'")"
|
||||
];
|
||||
};
|
||||
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
|
||||
sisyphe = ../../assets/sisyphe.gif;
|
||||
pepe-music = ../../assets/pepe-music.gif;
|
||||
@@ -101,25 +130,6 @@
|
||||
];
|
||||
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 = {
|
||||
desktopClock = {
|
||||
|
||||
@@ -5,5 +5,9 @@ _: {
|
||||
supertuxkart # fuck mariokart
|
||||
# my favorite italian plumber is free software
|
||||
];
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
protontricks.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -2,9 +2,11 @@ _: {
|
||||
flake.homeModules.git = _: {
|
||||
programs.git = {
|
||||
enable = true;
|
||||
settings = {
|
||||
/*
|
||||
settings = {
|
||||
init.defaultBranch = "main";
|
||||
};
|
||||
*/
|
||||
};
|
||||
programs.gh = {
|
||||
enable = true;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
...
|
||||
}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
swww #wallpaper daemon
|
||||
awww #wallpaper daemon
|
||||
gruvbox-gtk-theme
|
||||
hyprcursor
|
||||
capitaine-cursors-themed # cursor theme
|
||||
@@ -15,7 +15,6 @@
|
||||
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
|
||||
home-manager
|
||||
];
|
||||
# enable hyprland WM
|
||||
programs.hyprland = {
|
||||
@@ -42,12 +41,32 @@
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
exec-once = [
|
||||
"qtbatticon" # custom battery tray
|
||||
"nixpkgs-notifier listen" # tracks PR merge in nixos-unstable
|
||||
];
|
||||
monitor = [
|
||||
"eDP-1, highres@highrr, 0x0, 1"
|
||||
];
|
||||
};
|
||||
};
|
||||
flake.homeModules.hyprland-desktop = _: {
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
monitor = [
|
||||
", highres@highrr, auto, 0.75"
|
||||
];
|
||||
exec-once = [
|
||||
"if [ -e \"/home/tomasr/icloudSync.sh\" ]; then /home/tomasr/icloudSync.sh; else notify-send \"icloudSync.sh doesn't exist\" \"See ~/nixos/modules/applications/hyprland.nix for more information\"; fi"
|
||||
# my icloud account uses an email that I don't want to make public. So the script isnt pushed to github. The script looks like:
|
||||
/*
|
||||
#!/etc/profiles/per-user/tomasr/bin/zsh
|
||||
if ! icloudpd --auth-only --username tomas.rivera_2009@icloud.com --dry-run; then
|
||||
notify-send "icloudpd is not logged in" "Please run icloudpd icloudpd --username my@email.address --password my_password --auth-only"
|
||||
exit 1
|
||||
fi
|
||||
icloudpd --directory ~/hdd/kdrive/Photo/IPhone/icloudpd-backup --username tomas.rivera_2009@icloud.com --watch-with-interval 3600 --no-progress-bar
|
||||
*/
|
||||
];
|
||||
};
|
||||
};
|
||||
flake.homeModules.hyprland = {pkgs-unstable, ...}: let
|
||||
wallpaper = ../../assets/wallpaper1.jpg;
|
||||
in {
|
||||
@@ -58,15 +77,16 @@
|
||||
home.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
wayland.windowManager.hyprland.plugins = [
|
||||
#pkgs-unstable.hyprlandPlugins.hyprspace # currently broken
|
||||
#pkgs-unstable.hyprlandPlugins.hypr-dynamic-cursors # currently broken
|
||||
pkgs-unstable.hyprlandPlugins.hypr-dynamic-cursors
|
||||
];
|
||||
wayland.windowManager.hyprland.configType = "hyprlang";
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
"$mod" = "SUPER";
|
||||
"$term" = "kitty";
|
||||
"$editor" = "nvim";
|
||||
"$notes" = "kitty --class \"custom-obsidianvaults\" --name \"Select Obsidian vault\" --hold custom-obsidianvaults";
|
||||
"$file" = "dolphin";
|
||||
"$browser" = "kitty --class \"custom-librewolfprofiles\" --name \"Select LibreWolf profile\" --hold custom-librewolfprofiles";
|
||||
"$browser" = "kitty --class \"custom-browserprofiles\" --name \"Select browser profile\" --hold custom-browserprofiles";
|
||||
# ▄▀█ █▄░█ █ █▀▄▀█ ▄▀█ ▀█▀ █ █▀█ █▄░█
|
||||
# █▀█ █░▀█ █ █░▀░█ █▀█ ░█░ █ █▄█ █░▀█
|
||||
animations = {
|
||||
@@ -190,8 +210,8 @@
|
||||
"$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"
|
||||
"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
|
||||
/*
|
||||
@@ -203,7 +223,9 @@
|
||||
#"Ctrl+Alt, 1, exec, swaync-client -t" # pos 4 1 notification center
|
||||
"Ctrl+Alt, 1, exec, qs ipc call notifications toggle"
|
||||
*/
|
||||
# pos 4 1 notification center.
|
||||
"Ctrl+Alt, 1, exec, caelestia shell drawers toggle sidebar"
|
||||
"Ctrl+Alt, 1, exec, [[ -f ~/.cache/hypr-battery-saver ]] || swaync-client -t"
|
||||
"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
|
||||
@@ -260,16 +282,18 @@
|
||||
"custom-batterywarning"
|
||||
#"birdtray" # thunderbird tray app # curently broken
|
||||
#wallpapers/b
|
||||
"swww img ${wallpaper}"
|
||||
"swww-daemon"
|
||||
"awww img ${wallpaper}"
|
||||
"awww-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
|
||||
"sleep 20 && ngcp pull --automatic" # see github.com/tomasriveral/nix-git-cherry-picker
|
||||
"rm ~/.cache/hypr-battery-saver"
|
||||
"rm ~/.cache/hypr-battery-saver.brightness"
|
||||
/*
|
||||
We stopped using that ######################### maybe we should desactivate those scripts
|
||||
# login autostart
|
||||
@@ -478,7 +502,7 @@
|
||||
"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 400 225, match:class ^(custom-browserprofiles)$"
|
||||
"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)$"
|
||||
|
||||
@@ -49,7 +49,7 @@ _: {
|
||||
name = "custom-wallpaper";
|
||||
runtimeInputs = with pkgs; [
|
||||
socat
|
||||
swww
|
||||
awww
|
||||
];
|
||||
text = ''
|
||||
handle() {
|
||||
@@ -60,19 +60,19 @@ _: {
|
||||
workspace="''${str:$i:1}"
|
||||
case $workspace in
|
||||
1 | 6)
|
||||
swww img -t none ${wallpaper1}
|
||||
awww img -t none ${wallpaper1}
|
||||
;;
|
||||
2 | 7)
|
||||
swww img -t none ${wallpaper2}
|
||||
awww img -t none ${wallpaper2}
|
||||
;;
|
||||
3 | 8)
|
||||
swww img -t none ${wallpaper3}
|
||||
awww img -t none ${wallpaper3}
|
||||
;;
|
||||
4 | 9)
|
||||
swww img -t none ${wallpaper4}
|
||||
awww img -t none ${wallpaper4}
|
||||
;;
|
||||
5 | 10 | 0)
|
||||
swww img -t none ${wallpaper5}
|
||||
awww img -t none ${wallpaper5}
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{self, ...}: {
|
||||
flake.nixosModules.kdrive = {pkgs-unstable, ...}: {
|
||||
flake.nixosModules.kdrive-laptop = {pkgs-unstable, ...}: {
|
||||
environment.systemPackages = with pkgs-unstable; [
|
||||
rclone
|
||||
self.packages.${pkgs.system}.custom-checkKdrive
|
||||
self.packages.${pkgs.system}.custom-mountkdrive
|
||||
self.packages.${pkgs.system}.custom-mountkdrive-laptop
|
||||
];
|
||||
# removes rclone error
|
||||
programs.fuse = {
|
||||
@@ -11,16 +11,49 @@
|
||||
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, ...}: {
|
||||
packages.custom-checkKdrive = pkgs.writeShellApplication {
|
||||
name = "custom-checkKdrive";
|
||||
runtimeInputs = with pkgs; [
|
||||
rclone
|
||||
matrix-commander-rs
|
||||
curl
|
||||
libnotify
|
||||
];
|
||||
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
|
||||
until ping -c1 -W1 1.1.1.1 >/dev/null 2>&1 || \
|
||||
ping -c1 -W1 8.8.8.8 >/dev/null 2>&1
|
||||
@@ -40,13 +73,15 @@
|
||||
else
|
||||
echo "kdrive rclone failed with error: $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>" \
|
||||
--html \
|
||||
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
||||
curl \
|
||||
-u ":$NTFY_TOKEN" \
|
||||
-d "Rclone couldnt access kdrive (rclone lsd kdrive). Error: $output" \
|
||||
-H "Title: Rclone kdrive" \
|
||||
"$NTFY_SERVER/Alerts"
|
||||
fi
|
||||
'';
|
||||
};
|
||||
packages.custom-mountkdrive = pkgs.writeShellApplication {
|
||||
packages.custom-mountkdrive-laptop = pkgs.writeShellApplication {
|
||||
name = "custom-mountkdrive";
|
||||
runtimeInputs = with pkgs; [
|
||||
rclone
|
||||
@@ -66,5 +101,43 @@
|
||||
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
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
_: {
|
||||
flake.nixosModules.mathematics = {pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
elan
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
_: {
|
||||
flake.homeModules.neovim = {pkgs-unstable, ...}: {
|
||||
programs.neovim = {
|
||||
withRuby = false;
|
||||
withPython3 = false;
|
||||
enable = true;
|
||||
vimAlias = false;
|
||||
viAlias = false;
|
||||
@@ -50,6 +52,9 @@ _: {
|
||||
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.nix
|
||||
pkgs-unstable.vimPlugins.nvim-treesitter-parsers.printf
|
||||
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.nvim-scrollbar
|
||||
pkgs-unstable.vimPlugins.promise-async
|
||||
@@ -63,7 +68,7 @@ _: {
|
||||
pkgs-unstable.vimPlugins.better-diagnostic-virtual-text
|
||||
pkgs-unstable.vimPlugins.garbage-day-nvim
|
||||
];
|
||||
extraLuaConfig = ''
|
||||
initLua = ''
|
||||
|
||||
local vim = vim
|
||||
|
||||
@@ -316,7 +321,7 @@ _: {
|
||||
})
|
||||
vim.lsp.config("pylsp", {
|
||||
cmd = { "pylsp" },
|
||||
filetypes = { "python" },
|
||||
filetypes = { "python", "py" },
|
||||
on_attach = on_attach,
|
||||
settings = {
|
||||
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
|
||||
-- =========================
|
||||
@@ -471,7 +476,12 @@ _: {
|
||||
-- =========================
|
||||
require('lualine').setup { options = { theme = "gruvbox_dark" } }
|
||||
|
||||
|
||||
-- ==================
|
||||
-- lean
|
||||
-- ==================
|
||||
require('lean').setup({
|
||||
mappings = true,
|
||||
})
|
||||
--==================0
|
||||
-- Some utils
|
||||
--==================
|
||||
|
||||
@@ -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"]
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -3,19 +3,22 @@ _: {
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
enableDefaultConfig = false; # will be removed in the futur. Removes evaluation warning
|
||||
matchBlocks."*" = {
|
||||
/*
|
||||
settings = {
|
||||
# equivalent to the default config
|
||||
forwardAgent = false;
|
||||
addKeysToAgent = "no";
|
||||
compression = false;
|
||||
#forwardAgent = false;
|
||||
# give errors in home-manager 26.05
|
||||
#addKeysToAgent = "no";
|
||||
#compression = false;
|
||||
serverAliveInterval = 0;
|
||||
serverAliveCountMax = 3;
|
||||
hashKnownHosts = false;
|
||||
userKnownHostsFile = "~/.ssh/known_hosts";
|
||||
controlMaster = "no";
|
||||
controlPath = "~/.ssh/master-%r@%n:%p";
|
||||
controlPersist = "no";
|
||||
#controlMaster = "no";
|
||||
#controlPath = "~/.ssh/master-%r@%n:%p";
|
||||
#controlPersist = "no";
|
||||
};
|
||||
*/
|
||||
};
|
||||
services.ssh-agent.enable = true;
|
||||
home.file.".ssh/config".text = ''
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
_: {
|
||||
|
||||
flake.homeModules.tmux = _: {
|
||||
programs.tmux = {
|
||||
enable = true;
|
||||
clock24 = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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 = _: {
|
||||
# replaced by caelestia
|
||||
programs.waybar = {
|
||||
|
||||
@@ -1,16 +1,41 @@
|
||||
{self, ...}: {
|
||||
_: {
|
||||
flake.homeModules.zsh-laptop = _: {
|
||||
programs.zsh = {
|
||||
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";
|
||||
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";
|
||||
snrt = ''
|
||||
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 = [
|
||||
self.packages.${pkgs.system}.dejaManuallyDerived
|
||||
#pkgs-unstable.deja
|
||||
#self.packages.${pkgs.system}.dejaManuallyDerived
|
||||
pkgs-unstable.deja
|
||||
];
|
||||
|
||||
programs.zsh = {
|
||||
@@ -25,7 +50,7 @@
|
||||
command cat "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
custom-eza() { # behaves differently if we just call it or if we pipe initContent
|
||||
if [[ -t 1 ]]; then
|
||||
eza -hlF -aa --color=always --hyperlink --group-directories-first --show-symlinks --icons=always --git --no-permissions "$@"
|
||||
@@ -35,7 +60,6 @@
|
||||
}
|
||||
eval "$(direnv hook zsh)"
|
||||
eval "$(deja init zsh)"
|
||||
export PATH="$PATH:$HOME/NoteWrapper" # some project im coding
|
||||
fastfetch''\n'';
|
||||
shellAliases = {
|
||||
".." = "z ..";
|
||||
|
||||
+103
-29
@@ -1,9 +1,9 @@
|
||||
_: {
|
||||
flake.nixosModules.battery-laptop = {
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
{
|
||||
self,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
flake.nixosModules.battery-laptop = {pkgs, ...}:
|
||||
# https://discourse.nixos.org/t/what-is-the-best-option-for-power-management/63406/2
|
||||
# we just activate tlp unconditonally
|
||||
#let
|
||||
@@ -22,7 +22,8 @@ _: {
|
||||
# };
|
||||
|
||||
# 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
|
||||
# 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
|
||||
@@ -31,27 +32,31 @@ _: {
|
||||
# Retrigger macropad udev rules
|
||||
${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.thermald.enable = true; # Enable thermald, the temperature management daemon. (only necessary if on Intel CPUs)
|
||||
services.power-profiles-daemon.enable = false; # Disable GNOMEs power management
|
||||
services.tlp = {
|
||||
services.thermald.enable = false; # Enable thermald, the temperature management daemon. (only necessary if on Intel CPUs)
|
||||
services.power-profiles-daemon.enable = true; # ppd is recommended over tlp for framework 16
|
||||
/*
|
||||
services.tlp = {
|
||||
enable = true; # Enable TLP (better than gnomes internal power manager)
|
||||
settings = {
|
||||
CPU_BOOST_ON_AC = 1;
|
||||
CPU_BOOST_ON_BAT = 1;
|
||||
CPU_HWP_DYN_BOOST_ON_AC = 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_ENERGY_PERF_POLICY_ON_AC = "performance";
|
||||
CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power";
|
||||
PLATFORM_PROFILE_ON_AC = "performance";
|
||||
PLATFORM_PROFILE_ON_BAT = "balanced";
|
||||
START_CHARGE_THRESH_BAT1 = 75;
|
||||
STOP_CHARGE_THRESH_BAT1 = 85;
|
||||
CPU_ENERGY_PERF_POLICY_ON_AC = "balanced";
|
||||
CPU_ENERGY_PERF_POLICY_ON_BAT = "powersave";
|
||||
PLATFORM_PROFILE_ON_AC = "balanced";
|
||||
PLATFORM_PROFILE_ON_BAT = "powersave";
|
||||
STOP_CHARGE_THRESH_BAT1 = 80;
|
||||
};
|
||||
};
|
||||
# };
|
||||
*/
|
||||
environment.systemPackages = [
|
||||
self.packages.${pkgs.system}.custom-performance
|
||||
];
|
||||
};
|
||||
perSystem = {pkgs, ...}: let
|
||||
NotifySound = ../../assets/battery_notify.mp3;
|
||||
@@ -336,28 +341,97 @@ _: {
|
||||
name = "custom-performance";
|
||||
runtimeInputs = with pkgs; [
|
||||
hyprland
|
||||
gawk
|
||||
brightnessctl
|
||||
swaynotificationcenter
|
||||
self.packages.${pkgs.system}.custom-wallpaper
|
||||
libnotify
|
||||
inputs.caelestia-shell.packages.${pkgs.system}.default
|
||||
];
|
||||
text = ''
|
||||
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
|
||||
if [ "$HYPRGAMEMODE" = 1 ] ; then
|
||||
STATE="$HOME/.cache/hypr-battery-saver"
|
||||
|
||||
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 "\
|
||||
keyword animations:enabled 0;\
|
||||
keyword animation borderangle,0; \
|
||||
keyword animation borderangle,0;\
|
||||
keyword decoration:shadow: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_out 0;\
|
||||
keyword general:border_size 1;\
|
||||
keyword decoration:rounding 0"
|
||||
notify-send -u critical -t 5000 "Performance mode [ON]"
|
||||
exit
|
||||
else
|
||||
notify-send -u critical -t 5000 "Performance mode [OFF]"
|
||||
keyword decoration:active_opacity 1;\
|
||||
keyword decoration:inactive_opacity 1;\
|
||||
keyword misc:vfr true"
|
||||
|
||||
# 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
|
||||
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
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -1,16 +1,31 @@
|
||||
_: {
|
||||
flake.nixosModules.bootloader-laptop = {
|
||||
inputs,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
# grub theme
|
||||
boot.loader.grub = {
|
||||
theme = inputs.nixos-grub-themes.packages.${pkgs.system}.nixos; # if you want to use nixos grub theme
|
||||
_: let
|
||||
wallpaper1 = ../../assets/wallpaper1.jpg;
|
||||
wallpaper2 = ../../assets/wallpaper2.jpg;
|
||||
wallpaper3 = ../../assets/wallpaper3.jpg;
|
||||
wallpaper4 = ../../assets/wallpaper4.jpg;
|
||||
wallpaper5 = ../../assets/wallpaper5.jpg;
|
||||
in {
|
||||
flake.nixosModules.bootloader = _: {
|
||||
# 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;
|
||||
};
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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";
|
||||
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;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
_: {
|
||||
flake.nixosModules.hdd = {
|
||||
fileSystems."/home/tomasr/hdd" = {
|
||||
device = "/dev/disk/by-uuid/cbe24588-e04f-4ffc-ba44-6fe6ec6d6850";
|
||||
fsType = "ext4";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
_: {
|
||||
flake.nixosModules.nvidia = _: {
|
||||
hardware.graphics.enable = true;
|
||||
services.xserver.videoDrivers = ["nvidia"];
|
||||
hardware.nvidia.open = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{self, ...}: {
|
||||
flake.nixosModules.performance-desktop = {pkgs, ...}: {
|
||||
environment.systemPackages = [
|
||||
self.packages.${pkgs.system}.custom-performance
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -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 #temporarly broken
|
||||
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 #temporarly broken
|
||||
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 = "neovim";
|
||||
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;
|
||||
};
|
||||
*/
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
flake.nixosConfigurations.laptop = inputs.nixpkgs.lib.nixosSystem {
|
||||
#system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
inherit (self) pkgs-unstable;
|
||||
inherit (self) pkgs-unstable pkgs-local pkgs-master;
|
||||
};
|
||||
modules = with self.nixosModules; [
|
||||
# important do not remove
|
||||
@@ -20,7 +20,7 @@
|
||||
autoUpdate-laptop
|
||||
battery-laptop
|
||||
bluetooth
|
||||
bootloader-laptop
|
||||
bootloader
|
||||
browsers
|
||||
caelestia
|
||||
development
|
||||
@@ -28,21 +28,27 @@
|
||||
disk
|
||||
disk-laptop
|
||||
fonts
|
||||
games
|
||||
gitBackup
|
||||
hardware-configuration-laptop
|
||||
hardwareUtils-laptop
|
||||
hledger
|
||||
hledger-laptop
|
||||
hyprland
|
||||
IO
|
||||
kdrive
|
||||
kdrive-laptop
|
||||
latex
|
||||
ly
|
||||
mullvad
|
||||
mathematics
|
||||
#mullvad #temporarly broken
|
||||
networking
|
||||
nixUtils-laptop
|
||||
nixUtils
|
||||
notifications
|
||||
office
|
||||
#ollama
|
||||
otherUtils
|
||||
printer
|
||||
rss
|
||||
udev
|
||||
user
|
||||
];
|
||||
@@ -52,7 +58,9 @@
|
||||
inputs.caelestia-shell.homeManagerModules.default
|
||||
anki
|
||||
caelestia
|
||||
caelestia-laptop
|
||||
cursor
|
||||
development
|
||||
eza
|
||||
fastfetch
|
||||
git
|
||||
@@ -61,16 +69,21 @@
|
||||
hyprland-laptop
|
||||
kitty
|
||||
librewolf
|
||||
mullvad
|
||||
#mullvad #temporarly broken
|
||||
neovim
|
||||
nix-git-cherry-picker-laptop
|
||||
laptop-notewrapper
|
||||
oh-my-zsh
|
||||
ripgrep
|
||||
rofi
|
||||
sbb-tui
|
||||
ssh
|
||||
swaync # used in performance mode
|
||||
thunderbird
|
||||
tmux
|
||||
tomasr
|
||||
vivify
|
||||
waybar-minimal # used in performance mode
|
||||
zoxide
|
||||
zsh
|
||||
zsh-laptop
|
||||
@@ -101,7 +114,7 @@
|
||||
useUserPackages = true;
|
||||
|
||||
extraSpecialArgs = {
|
||||
inherit (self) pkgs-unstable;
|
||||
inherit (self) pkgs-unstable pkgs-local pkgs-master;
|
||||
inherit self;
|
||||
};
|
||||
};
|
||||
@@ -118,6 +131,8 @@
|
||||
home.sessionVariables = {
|
||||
EDITOR = "neovim";
|
||||
TERMINAL = "kitty";
|
||||
SYSTEMD_PAGER = "cat";
|
||||
PAGER = "cat";
|
||||
};
|
||||
|
||||
# Required for Home Manager
|
||||
|
||||
+24
-19
@@ -27,24 +27,29 @@ _: {
|
||||
services.upower.enable = true;
|
||||
|
||||
# removes need for password for nixos-rebuild
|
||||
security.sudo.extraRules = [
|
||||
{
|
||||
users = ["tomasr"];
|
||||
commands = [
|
||||
{
|
||||
command = "/run/current-system/sw/bin/nixos-rebuild";
|
||||
options = ["NOPASSWD"];
|
||||
}
|
||||
{
|
||||
command = "${pkgs.nixos-rebuild}/bin/nixos-rebuild";
|
||||
options = ["NOPASSWD"];
|
||||
}
|
||||
{
|
||||
command = "${pkgs-unstable.nixos-rebuild}/bin/nixos-rebuild";
|
||||
options = ["NOPASSWD"];
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
security.sudo = {
|
||||
extraRules = [
|
||||
{
|
||||
users = ["tomasr"];
|
||||
commands = [
|
||||
{
|
||||
command = "/run/current-system/sw/bin/nixos-rebuild";
|
||||
options = ["NOPASSWD"];
|
||||
}
|
||||
{
|
||||
command = "${pkgs.nixos-rebuild}/bin/nixos-rebuild";
|
||||
options = ["NOPASSWD"];
|
||||
}
|
||||
{
|
||||
command = "${pkgs-unstable.nixos-rebuild}/bin/nixos-rebuild";
|
||||
options = ["NOPASSWD"];
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
extraConfig = ''
|
||||
Defaults pwfeedback
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
+9
-6
@@ -1,18 +1,19 @@
|
||||
_: {
|
||||
perSystem = {pkgs, ...}: {
|
||||
# fzf librewolf profile selector
|
||||
packages.custom-librewolfprofiles = pkgs.writeShellApplication {
|
||||
name = "custom-librewolfprofiles";
|
||||
packages.custom-browserprofiles = pkgs.writeShellApplication {
|
||||
name = "custom-browserprofiles";
|
||||
runtimeInputs = with pkgs; [
|
||||
zsh
|
||||
fzf
|
||||
tor-browser
|
||||
];
|
||||
text = ''
|
||||
# List of profiles
|
||||
profiles=("work" "other" "private window")
|
||||
profiles=("work" "other" "private window" "tor-browser")
|
||||
|
||||
# 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
|
||||
[[ -z "$selected" ]] && exit 0
|
||||
@@ -20,10 +21,12 @@ _: {
|
||||
# Launch LibreWolf detached, keeping environment
|
||||
if [[ "$selected" == "private window" ]]; then
|
||||
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
|
||||
setsid librewolf -P "$selected" --no-remote >/dev/null 2>&1 &
|
||||
pkill -f "kitty.*Select LibreWolf profile"
|
||||
pkill -f "kitty.*Select browser profile"
|
||||
fi
|
||||
|
||||
# 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";
|
||||
};
|
||||
});
|
||||
};
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
imports = [
|
||||
# adds home-manager options to flake-parts
|
||||
inputs.home-manager.flakeModules.home-manager
|
||||
inputs.disko.flakeModules.default
|
||||
];
|
||||
|
||||
config.systems = [
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
systems = [
|
||||
"x86_64-linux"
|
||||
#"aarch64-linux"
|
||||
#"x86_64-darwin"
|
||||
#"aarch64-darwin"
|
||||
];
|
||||
}
|
||||
@@ -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";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -19,6 +19,8 @@
|
||||
self.packages.${pkgs.system}.custom-changeAudioOutput
|
||||
kdePackages.okular
|
||||
kdePackages.dolphin
|
||||
kdePackages.dolphin-plugins
|
||||
kdePackages.ark
|
||||
pulseaudio # sound server
|
||||
playerctl # controls media player
|
||||
pavucontrol # PulseAudio Volume Control
|
||||
|
||||
@@ -2,8 +2,12 @@
|
||||
flake.nixosModules.autoCleanup-laptop = {
|
||||
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-laptop
|
||||
@@ -17,6 +21,68 @@
|
||||
description = "NixOS configuration auto cleanup";
|
||||
|
||||
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";
|
||||
|
||||
ExecStart = "/run/current-system/sw/bin/custom-cleanNix";
|
||||
@@ -56,14 +122,18 @@
|
||||
runtimeInputs = with pkgs; [
|
||||
git
|
||||
nixos-rebuild
|
||||
matrix-commander-rs
|
||||
curl
|
||||
libnotify
|
||||
alejandra
|
||||
deadnix
|
||||
statix
|
||||
];
|
||||
|
||||
text = ''
|
||||
set -e
|
||||
set -ex
|
||||
|
||||
# shellcheck disable=SC1090
|
||||
source "$NTFY_SECRET"
|
||||
|
||||
FLAKE_DIR="/home/tomasr/nixos"
|
||||
FLAKE="$FLAKE_DIR#laptop"
|
||||
@@ -87,7 +157,7 @@
|
||||
alejandra "$FLAKE_DIR" # formats the config
|
||||
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
|
||||
git -C "$FLAKE_DIR" add -A
|
||||
@@ -96,9 +166,11 @@
|
||||
|
||||
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>" \
|
||||
--html \
|
||||
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
||||
curl \
|
||||
-u ":$NTFY_TOKEN" \
|
||||
-d "Everything OK" \
|
||||
-H "Title: Laptop Nix auto cleanup" \
|
||||
"$NTFY_SERVER/Alerts"
|
||||
else
|
||||
notify-send "Nix auto cleanup" "No changes"
|
||||
git -C "$FLAKE_DIR" push
|
||||
@@ -109,9 +181,89 @@
|
||||
|
||||
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>" \
|
||||
--html \
|
||||
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
||||
curl \
|
||||
-u ":$NTFY_TOKEN" \
|
||||
-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"
|
||||
fi
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
{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
|
||||
environment.systemPackages = [
|
||||
self.packages.${pkgs.system}.custom-autoupdate-laptop
|
||||
@@ -44,6 +51,60 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
## 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 = {
|
||||
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";
|
||||
};
|
||||
};
|
||||
};
|
||||
perSystem = {pkgs, ...}: {
|
||||
packages.custom-autoupdate-laptop = pkgs.writeShellApplication {
|
||||
name = "custom-autoupdate";
|
||||
@@ -56,6 +117,8 @@
|
||||
];
|
||||
|
||||
text = ''
|
||||
# shellcheck disable=SC1090
|
||||
source "$NTFY_SECRET"
|
||||
set -e
|
||||
|
||||
FLAKE_DIR="/home/tomasr/nixos"
|
||||
@@ -81,9 +144,11 @@
|
||||
|
||||
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>" \
|
||||
--html \
|
||||
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
||||
curl \
|
||||
-u ":$NTFY_TOKEN" \
|
||||
-d "Laptop Flake rebuild successful" \
|
||||
-H "Title: Flake autoupdate" \
|
||||
"$NTFY_SERVER/Alerts"
|
||||
else
|
||||
notify-send "Flake autoupdate" "No changes"
|
||||
git -C "$FLAKE_DIR" push
|
||||
@@ -94,9 +159,79 @@
|
||||
|
||||
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>" \
|
||||
--html \
|
||||
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
||||
curl \
|
||||
-u ":$NTFY_TOKEN" \
|
||||
-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
|
||||
matrix-commander-rs
|
||||
libnotify
|
||||
];
|
||||
|
||||
text = ''
|
||||
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 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"
|
||||
fi
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
_: {
|
||||
flake.nixosModules.hledger = {pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
hledger
|
||||
hledger-ui
|
||||
hledger-web
|
||||
asciinema # used for some hledger demos
|
||||
];
|
||||
};
|
||||
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, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
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)
|
||||
matrix-commander-rs # matrix client used to send notifications from scripts to my phone
|
||||
socat # Utility for bidirectional data transfer between two independent data channels (used to communicate between hyprland and awww to change wallpapers dinamically)
|
||||
# battery notifications
|
||||
self.packages.${pkgs.system}.custom-batterynotify
|
||||
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-checkKdrive # check if kdrive is set up with rclone
|
||||
zoom-us
|
||||
];
|
||||
};
|
||||
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 {
|
||||
name = "custom-gitnotify";
|
||||
runtimeInputs = with pkgs; [
|
||||
git
|
||||
libnotify
|
||||
curl
|
||||
];
|
||||
text = ''
|
||||
# shellcheck disable=SC1091
|
||||
source /run/agenix/ntfy
|
||||
|
||||
# Check if git is installed
|
||||
if ! command -v git >/dev/null 2>&1; then
|
||||
exit 0
|
||||
@@ -52,9 +35,10 @@
|
||||
notify-send \
|
||||
"Git not configured" \
|
||||
"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>" \
|
||||
--html \
|
||||
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
||||
curl \
|
||||
-u ":$NTFY_TOKEN" \
|
||||
-d "Git not configured" \
|
||||
"$NTFY_SERVER/Alerts"
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
_: {
|
||||
{inputs, ...}: {
|
||||
flake.nixosModules.development = {
|
||||
pkgs,
|
||||
pkgs-unstable,
|
||||
@@ -17,19 +17,45 @@ _: {
|
||||
]))
|
||||
python313Packages.pygments # used for ccat (comment of colorize plugin from oh-my-zsh)
|
||||
pkg-config
|
||||
nixpkgs-review
|
||||
gdb
|
||||
raylib
|
||||
glfw # raylib and some dependecies
|
||||
gnumake
|
||||
go
|
||||
direnv
|
||||
git
|
||||
gh
|
||||
cling # c interpreter used for coding
|
||||
# lsp
|
||||
clang-tools
|
||||
python311Packages.python-lsp-server
|
||||
python314Packages.python-lsp-server
|
||||
ltex-ls-plus
|
||||
pylint
|
||||
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": true,
|
||||
"room": "!BXRRokBmEdNOyYdfOF:matrix.org",
|
||||
"ping": true,
|
||||
"userPing": "@notificationbot_0000",
|
||||
"userPingServer": "matrix.org"
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
in {
|
||||
flake.nixosModules.documentation = {pkgs, ...}: {
|
||||
# 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 = [
|
||||
# see https://wiki.nixos.org/wiki/Documentation_Gaps#How_do_manpages_work?_Or:_environment.pathsToLink_and_buildEnv
|
||||
|
||||
@@ -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."
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,4 +1,8 @@
|
||||
{inputs, ...}: {
|
||||
{
|
||||
inputs,
|
||||
self,
|
||||
...
|
||||
}: {
|
||||
flake.nixosModules.nixUtils-laptop = _: {
|
||||
# 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
|
||||
@@ -6,10 +10,18 @@
|
||||
nix.settings.cores = 6;
|
||||
};
|
||||
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
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
dates = "Wed *-*-* 16:00:00";
|
||||
persistent = true;
|
||||
options = "--delete-older-than 7d"; # every week delete generations older than a month
|
||||
};
|
||||
|
||||
@@ -32,6 +44,7 @@
|
||||
vimPluginsUpdater # used for building plugins
|
||||
nix-index
|
||||
statix
|
||||
self.packages.${pkgs-unstable.system}.custom-trimmer
|
||||
];
|
||||
};
|
||||
perSystem = {pkgs, ...}: {
|
||||
|
||||
@@ -3,6 +3,12 @@ _: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
libreoffice
|
||||
birdtray
|
||||
kdePackages.korganizer
|
||||
#needed for korganizer
|
||||
kdePackages.akonadi
|
||||
kdePackages.akonadi-calendar
|
||||
kdePackages.akonadi-calendar-tools
|
||||
];
|
||||
programs.kde-pim.kontact = true; # needed for korganizer
|
||||
};
|
||||
}
|
||||
@@ -1,11 +1,7 @@
|
||||
{self, ...}: {
|
||||
flake.nixosModules.otherUtils =
|
||||
# try to keep packages here at a minium. Preferably use a dedicated file
|
||||
{
|
||||
pkgs,
|
||||
pkgs-unstable,
|
||||
...
|
||||
}: {
|
||||
{pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
gnome-calculator
|
||||
snapshot
|
||||
@@ -22,7 +18,8 @@
|
||||
usbutils # used for lsusb
|
||||
self.packages.${pkgs.system}.custom-tomato
|
||||
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
|
||||
];
|
||||
};
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
_: {
|
||||
flake.nixosModules.rss = {pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
newsflash
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -125,4 +125,4 @@
|
||||
}
|
||||
],
|
||||
"rollout_threshold_seed": null
|
||||
}
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
let
|
||||
backupAgeKey = "age1y4lhpk7awhjyu42p46ulg5q2c49r2lnwu8tyyk4ejj6jztd64uksfhd670";
|
||||
laptopHostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJCsewl8ZXXMjRyO20cBIiuW2gA4mGoMkxQ0dcMyNidR root@nixos";
|
||||
in {
|
||||
"ntfy.age".publicKeys = [
|
||||
backupAgeKey
|
||||
laptopHostKey
|
||||
];
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in new issue
Block a user